Разработка и отладка программ с использованием языка программирования C++
Введение
В начале 80-х годов в фирме Bell
Telephone Laboratories Бьерном Страуструпом (США) в результате дополнения и
расширения языка С был создан язык, получивший название «С с классами». В 1983
г. Это название было изменено на С++. В 1998 г. Был утвержден окончательный
стандарт языка С++.
В настоящее время С++ является одним
из наиболее распространенных и востребованных языков программирования. Этот
язык представляет собой фундамент, на котором строится современное
программирование, поэтому он является обязательным элементом подготовки
современных программистов.
Целью данной курсовой работы по
дисциплине «Основы программирования и алгоритмические языки» является
практическое закрепление теоретической части курса и приобретение навыков
алгоритмизации и программирования с помощью современного языка программирования
C++, а
также возможностей интегрированной среды разработки Visual Studio 2012.
Выполнение данной курсовой работы
позволяет приобрести следующие практические умения и навыки:
- выбор и использование
математических методов решения задач;
- формализация задач;
- алгоритмизация
задач;
- разработка и
отладка программ с использованием языка программирования C# средствами Visual Studio 2012;
- проведение анализа
результатов компьютерных экспериментов;
- оформление
программной документации в соответствии с ГОСТ и ЕСКД.
1. Изучение элементов
языка С++, программирование разветвлений и циклов с использованием операторов
условного перехода
.1 Постановка
задачи
Формульно-словесное представление
алгоритма описано в табл. 1.1. Значение параметра
b
задается самостоятельно при вводе. В соответствии с методическими указаниями
необходимо изучить теоретический материал приложений, литературных источников [1-9], рассмотреть пример. Для
автоматизации алгоритма необходимо составить программу с использованием операторов: условных, циклов, ввода,
вывода.
Таблица 1.1 - Развёрнутая постановка задачи
Определить
|
Входные данные
|
Выходные данные
|
Определить: k - количество y < 0.5 иS
- сумму y > 5.- 5
1.2 Анализ
существующих методов решения задачи
Метод решения задачи однозначно
задан набором формул (1.1) и предполагает составление циклического алгоритма: в
цикле изменяется x, по формулам определяются y и z, а затем с учётом заданных условий
вычисляются показатели k и s. Диапазон заданных значений и шаг изменения задают вещественный
тип данных для x. Набор формул (1.1) задают вещественный тип данных для y и z. Счётчик k целого типа. s - вещественная сумма значений y. Наличие показательных и
логарифмических функций предполагает составление логических и арифметических
выражений, а также использование соответствующих операторов.
1.3 Блок-схема
решения задачи
На рис. 1.1 показана блок-схема,
которая графически изображает логическую структуру алгоритма. Каждый этап
представлен в виде геометрической фигуры (блока), имеющего определенную форму в
зависимости от характера операции.
Рисунок 1.1 - Блок-схема алгоритма
Блоки на схеме соединены стрелками
(линиями связи), которые определяют последовательность выполнения операций.
Использованы следующие основные блоки:
блок пуск-останов,
определяющий начало или конец алгоритма (для блока пуск определен только
выход, для останов - только вход);
блок ввод-вывод,
определяющий ввод информации в программу или вывод информации (допускает любое
количество входов, но один выход);
блок процесс,
определяющий изменение значения, формы представления или расположения данных
(допускает любое количество входов, но один выход);
блок решение,
определяющий последующие шаги выполнения алгоритма в зависимости от выполнения
условия (допускает любое количество входов, но только два выхода -
да (+) и нет (-));
блок итерация,
определяющий повторное выполнение шагов алгоритма некоторое количество раз
(допускает любое количество входов и выходов).
На основе представления алгоритма в
виде блок-схемы составим наиболее подробное представление в виде программы.
1.4 Краткое описание
программы
В начале программы выполнено
подключение стандартных библиотек:
#include
<iostream>
#include
<cmath>
Основной метод int _tmain (int argc, _TCHAR* argv[]) является
точкой входа в программу.
Опишем данные программы и их
инициализирующие значения
double x, dx = 0.4;
|
- входные данные
|
double x = -5, MAX(x) = 15;
|
- граничные значения
|
double z, y;
|
- выходные данные
|
int k = 0; double z, y, s = 1;
|
- выходные данные-показатели
|
Опишем методы программы №1:
- cin - функция ввода;
- cout - функция вывода;
- log(), abs(), exp(), pow() - стандартные математические функции.
Также для построения линейных,
разветвляющихся, циклических синтаксических конструкций использованы
стандартные арифметические и логические операторы.
1.5 Листинги
программы и результатов. Анализ результатов
В результате работы программы на
экран были выведены посчитанные значения y, z для каждого x и определены параметры k и y.
2. Обработка одномерных
массивов
.1 Постановка
задачи
Словесное представление алгоритма
(1): найти максимальный элемент массива A размерностью 25. Словесное
представление алгоритма (2): найти среднее арифметическое элементов массива В
(30). В соответствии с методическими указаниями необходимо изучить
теоретический материал приложений, литературных источников [1-9], рассмотреть примеры. Для
автоматизации алгоритмов необходимо составить
программу, в которой предусмотреть ввод и вывод исходных массивов,
а также вывод результата. Значения элементов исходных массивов необходимо
задать произвольно.
2.2 Анализ
существующих методов решения задачи
Традиционно метод решения задачи по
работе с одномерным массивом сводится к выполнению трёх основных этапов:
ввод-вывод массива, обработка массива, вывод результата обработки массива.
Ввод-вывод одномерного массива в алгоритме реализуется с помощью циклической
конструкции. Обработка массива также реализуется с помощью циклической
конструкции, в которой для алгоритма (1) предусмотрена условная разветвляющаяся
конструкция на сравнение элементов, а для алгоритма (2) предусмотрено
вычисление выражения, позволяющего с помощью индексной формулы формировать
элементы результирующего массива. Вывод результата для алгоритмов (1), (2) реализован
в виде операции вывода значения переменной.
2.3
Блок-схема решения задачи
На рис. 2.1 показана блок-схема,
которая графически изображает логическую структуру алгоритмов (1) и (2). На
основе представления алгоритмов в виде указанной блок-схемы составим их
представление в виде программы.
Рисунок 2.1 - Блок-схема алгоритмов
.4
Краткое описание программы
В начале программы выполнено
подключение стандартных библиотек:
#include
<iostream>
#include
<cmath>
Основной метод int _tmain (int argc, _TCHAR* argv[]) является
точкой входа в программу.
Опишем данные программы №2 и их
инициализирующие значения:
входные массивы,
объявленные и динамически размещённые в памяти с помощью операции new
|
double max = a[0]
|
максимальный элемент последовательности А
|
double summa = 0
|
сумма элементов последовательности Б
|
Опишем методы программы №2:
- cin - функция ввода;
- cout - функция вывода;
rand() - генератор случайных чисел.
Также для построения линейных,
разветвляющихся, циклических синтаксических конструкций использованы
стандартные арифметические и логические операторы.
2.5 Листинги
программы и результатов. Анализ результатов
В программе случайным образом
заполнены элементами входные массивы А и Б. С помощью алгоритма поиска
максимального элемента найден максимальный элемент массива А, а также посчитана
средняя арифметическая сумма элементов массива Б.
3. Обработка двумерных массивов
.1 Постановка
задачи
Словесное представление алгоритма:
дана матрица действительных чисел размером 4х8. Определить числа b1, b2, b3, b4, равные соответственно:
значениям средних арифметических элементов строк; разностям наибольших и
наименьших значений элементов строк; наибольшим значениям элементов столбцов. В
соответствии с методическими указаниями необходимо изучить теоретический
материал приложений, литературных источников [1-9], рассмотреть пример. Для
автоматизации алгоритма необходимо составить программу, в которой предусмотреть ввод и вывод исходного массива,
а также вывод результатов обработки массива. Значение элементов входного
массива необходимо задать самостоятельно в виде набора действительных чисел.
3.2 Анализ
существующих методов решения задачи
Традиционно метод решения задачи по
работе с двумерным массивом сводится к выполнению трёх основных этапов:
ввод-вывод массива, обработка массива, вывод результата обработки массива.
Ввод-вывод двумерного массива в алгоритме реализуется с помощью вложенных
циклических конструкций. Обработка массива также реализуется с помощью
циклических конструкций, работающих с наборами элементов в пределах строки,
столбца и всей матрицы в целом. Основным фрагментом этапа обработки является
классический алгоритм поиска максимального элемента на основе циклов и
ветвлений. Вывод результатов для алгоритма реализован в виде линейных
конструкций вывода соответствующих максимумов.
.3
Блок-схема решения задачи
На рис. 3.1 показана блок-схема,
которая графически изображает логическую структуру алгоритма. На основе представления
алгоритма в виде блок-схемы составим его представление в виде программы.
Рисунок 3.1 - Блок-схема алгоритма
3.4
Краткое описание программы
В начале программы выполнено
подключение стандартных библиотек:
#include
<iostream>
#include
<cmath>
Основной метод int _tmain (int argc, _TCHAR* argv[]) является
точкой входа в программу.
Опишем данные программы №3 и их
инициализирующие значения:
const int n = 4, m = 8;
|
- константные размеры массива
|
double a[n] [m];
|
- массив
|
double summa = 0;
|
- среднее арифметическое строк
|
double
min = a[i] [0], max = a[i] [0];
|
- наибольшее и наименьшее значение элементов строк, столбцов
|
Опишем методы программы №3:
- cin - функция ввода;
- cout - функция вывода;
rand() - генератор случайных чисел.
Основной конструкцией являются
вложенные циклы обработки вида:(int i = 0; i < n; i++)
{(int j = 0; j <m; j++)
{
\\
}
}
Структура программы включает
отдельные фрагменты поиска максимального значения строки / столбца.
4. Составление программ
с использованием функций при обработке одномерных массивов
.1 Постановка
задачи
Словесное представление алгоритма:
Найти для каждого массива количество элементов, значение которых меньше
среднего между минимальным элементом и максимальным. Массивы размерности 18, 12
и 10 соответственно и строятся из элементов по следующим формулам:
b[i]=2.8 - (i+4.5)
c[i]=-12.6+(i-2.2) (4.1)
z[i]=-9.1 - (i+5.7)
В соответствии с методическими
указаниями необходимо изучить теоретический материал приложений, литературных
источников [1-9], рассмотреть пример. Для автоматизации алгоритма необходимо
составить программу,
в которой для выполнения всех расчетов использовать несколько функций, каждая
из которых выполняет отдельную задачу: ввод данных, вывод результатов,
нахождение промежуточных и конечных результатов. Необходимо обосновать
декомпозицию программы на функции.
4.2 Анализ
существующих методов решения задачи
Традиционно метод решения задачи по
работе с одномерным массивом сводится к выполнению трёх основных этапов:
ввод-вывод массива, обработка массива, вывод результата обработки массива.
Основные особенности реализации таких этапов кратко описаны в п. 2.2.
Декомпозируем задачу на подзадачи:
- формирование
массива с учётом формулы вида (4.1);
- вывод массива;
- поиск максимума и
минимума в массиве.
Для каждой подзадачи выберем
классический метод на базе циклической поэлементной обработки массива.
Подзадача поиска максимума и минимума решается линейно. Начальное значение
максимума (минимума) устанавливается равным значению первого элемента массива.
Затем выполняется последовательное сравнение текущего максимума со значением
очередного элемента массива.
4.3 Блок-схема
решения задачи
Основной блок процесс с утолщённой
рамкой графически изображает определённую функцию. На основе представления
алгоритма в виде блок-схемы составим его представление в виде программы с
необходимыми подпрограммами-функциями.
Рисунок 4.1 - Блок-схема алгоритма
4.4
Краткое описание программы
В начале программы выполнено
подключение стандартных библиотек:
#include
<iostream>
#include
<cmath>
Основной метод int _tmain (int argc, _TCHAR* argv[]) является
точкой входа в программу.
Опишем данные программы №4 и их
инициализирующие значения:
- размеры массивов
|
double
b[n1], c[n2], z[n3];
|
- массивы
|
Опишем методы программы №4, уточнив
параметры для вызова пользовательских методов:
- double SearchMax (double a[], int n) - функция, выполняющая поиск максимального значения массива a и
возвращающая это значение. Вызов функции выполняется трижды.
- double SearchMin (double a[], int n) - функция, выполняющая поиск минимального значения массива a и
возвращающая это значение. Вызов функции выполняется трижды.
- int Count (double a[], int n, double max, double min) - функция
поиска для массива а количества элементов, значения которых меньше среднего
между минимальным элементом и максимальным.
Особенностью программной реализации
является исключение цикла и троекратный вызов функций Count.
5. Составление программ с использованием функций при обработке
матриц
5.1 Постановка задачи
Словесное представление алгоритма:
Заданы массивы F (8), G (11), H (14). Для каждого из массивов найти
произведение ненулевых элементов, если количество положительных элементов
больше половины и сумму отрицательных элементов, в противном случае. Элементы
массивов определяются по формулам: Элементы массивов необходимо определить по
формулам:
Fi = 1,4i + tg (i -
5,5);= 8,5j + tg (j + 3,9); = 2,9k - tg (k + 1,7). (5.1)
В соответствии с методическими
указаниями необходимо изучить теоретический материал приложений, литературных
источников [1-9], рассмотреть пример. Для автоматизации алгоритма необходимо
составить программу,
в которой использована подпрограмма-функция для формирования и обработки
массивов. Массивы необходимо описать в основной программе. Формирование, вывод
и обработку массивов необходимо выполнить в подпрограмме при вызове ее из
главной программы.
5.2 Анализ существующих
методов решения задачи
Традиционно метод решения задачи по
работе с одномерным массивом сводится к выполнению трёх основных этапов:
ввод-вывод массива, обработка массива, вывод результата обработки массива.
Основные особенности реализации таких этапов кратко описаны в п. 2.2.
Вынесем в программу описание данных
и вызов подпрограммы. Детализируем подзадачи подпрограммы:
- поиск максимума в
массиве;
- поиск минимума в
массиве;
- поиск суммы
отрицательных элементов;
- поиск произведения
ненулевых элементов;
Для каждой подзадачи выберем
классический метод на базе циклической поэлементной обработки массива.
Подзадачи поиска максимума, минимума суммы положительных элементов,
произведения отрицательных элементов решаются линейно. Начальное значение
максимума / минимума устанавливается равным значению первого элемента массива.
Затем выполняется последовательное сравнение текущего максимума / минимума со
значением очередного элемента массива. Если текущее сравниваемое значение
оказывается больше / меньше максимума / минимума, то максимум / минимума
переопределяется. Начальное значение суммы / произведения устанавливается
равным нулю / единице. Затем выполняется проверка на количество положительных
элементов. Если их количество больше половины, то вычисляем произведение
положительных элементов, иначе - сумму отрицательных.
5.3 Блок-схема
решения задачи
На рис. 5.1 показана блок-схема,
которая графически изображает логическую структуру алгоритма. Основной блок
процесс с утолщённой рамкой графически изображает определённую подзадачу
функции.
Рисунок 5.1 - Укрупнённая блок-схема алгоритма
5.4 Краткое описание
программы
В начале программы выполнено
подключение стандартных библиотек:
#include
<iostream>
#include
<cmath>
Основной метод int _tmain (int argc, _TCHAR* argv[]) является
точкой входа в программу.
Опишем данные программы №5 и их
инициализирующие значения:
const
int n1 = 8, n2 = 11, n3 = 14;
|
- размеры массивов
|
double
f[n1], g[n2], h[n3];
|
- массивы
|
Опишем методы программы №5, уточнив
параметры для вызова пользовательского метода:
- double SearchMax (double a[], int n) - функция, выполняющая поиск максимального значения массива a и
возвращающая это значение. Вызов функции выполняется трижды.
- double SearchMin (double a[], int n) - функция, выполняющая поиск минимального значения массива a и
возвращающая это значение. Вызов функции выполняется трижды.
- double Calc (double a[], int n) - функция поиска произведения ненулевых элементов, если количество
положительных элементов больше половины и сумму отрицательных элементов, в
противном случае.
Особенностью программной реализации
является организация одного цикла для поиска минимума и максимума, для
формирования и вывода массива, а также условное ветвление по значению отношения
минимума к максимуму, от которого зависит результат обработки массива.
6. Составление программ
для вывода графических изображений
6.1 Постановка задачи
Необходимо выполнить вывод на экран
прямоугольника и эллипса внутри него. Фигуры изменяют свои цвета и размеры,
двигаются вправо по экрану
6.2 Анализ
существующих методов решения задачи
Традиционные методы компьютерной
графики опираются на двумерную геометрию, вычисление координат базовых точек,
вычисление характерных размеров простых геометрических фигур, размещение точек
и прорисовку линий в относительных и экранных координатах.
Вывод графических примитивов
целесообразно реализовать в виде Windows-приложения, где основным элементов управления является область
вывода.
6.3 Краткое описание
программы
В начале программы выполнено
подключение стандартных библиотек:
#include
«stdafx.h»
#include
<Windows.h>
Основной метод int _tmain (int argc, _TCHAR* argv[]) является
точкой входа в программу.
Опишем данные программы №6 и их
инициализирующие значения:
#define
Red RGB (255,0,0) #define Blue RGB (0,0,255)
|
- цвета
|
static HWND hWnd;
|
- дескриптор окна
|
HPEN hPen;
|
- кисть
|
HDC DrawHDC
|
- контекст устройства
|
Опишем методы программы №6, уточнив
параметры для вызова пользовательского метода:
void Paint (int nLeftRect, int nTopRect, int nRightRect, int nBottomRect) - функция рисования графических примитивов.
int
Draw_Ellipce (HWND Wnd, int x1, int y1, int x2, int y2, int Pen, HDC DrawHDC=0)
- функция рисования эллипса.Draw_Rect (HWND Wnd, int x1, int y1, int x2, int
y2, int Pen, HDC DrawHDC = 0) - функция рисования прямоугольника.GetConsoleWndHandle(void) - функция получения дескриптора окна.
Заключение
Выполнение данной курсовой работы в
соответствии с индивидуальными заданиями распределено на 6 этапов. В процессе
выполнения каждого этапа:
- сформулирована
развернутая постановка задачи и сформирована словесная / словесно-формульное
представление алгоритма;
- разработана
структура, укрупненный алгоритм решения задачи представлен в виде блок-схемы;
- сделан анализ и
выбран метод решения задачи по классической теории алгоритмов;
- разработана
программа, реализующая решение задачи;
- получены и
проанализированы результаты решения задачи;
Список литературы
1.
Биллиг В.А. Основы программирования на C#. - М.: Изд-во
«Интернет-университет информационных технологий - ИНТУИТ.ру», 2006. - 488 c.
2.
Ватсон К. C#. - М.: Лори, 2004. - 880 с.
3.
Вирт Н. Алгоритмы и структуры данных. - Спб: Невский
диалект, 2001 г. - 352 с.
4.
Либерти Д. Программирование на C#. - СПб.: Символ-Плюс,
2003. - 688 с.
5.
Прайс Д., Гандэрлой М. Visual C#.NET. Полное руководство. - Киев: «Век», 2004. - 960
с.
6.
Робинсон С., Корнес О., Глинн
Дж. и др. C# для профессионалов. В двух томах. - М.: Лори, 2003. -
512 с.
7.
Смайли Д. Учимся программировать на C# вместе с Джоном Смайли. -
Киев: «ДиаСофт», 2003. - 528 с.
8.
Тай Т., Лэм Х.К. Платформа.NET. Основы. - СПб.:
Символ-Плюс, 2003. - 336 с.
9.
Шилдт Г. Полный справочник по C#. - М.: Издательский дом
«Вильямс», 2004. - 752 с.
Приложение А
#include «stdafx.h»
#include
<iostream>
#include
<cmath>namespace std;_tmain (int argc, _TCHAR* argv[])
{(0,
«RUS»);dx = 0.4;b;
cout<<
«Введите значение параметра b:»;
cin>>b;k
= 0;s = 0;(double x = -5; x <= 15; x+=dx)
{z =
0;(x > 2)= log (abs(x+b));if (x < -2)= b*exp(x);= b*(x*x + 1);y = pow (z,
3) + exp (b*z);(y < 0.5)++;(y > 0.5)+=y;<<«x =
«<<x<<»\tz = «<<z<<»\ty = «<<y<<endl;
}<<«k
= «<<k<<endl;<<«s = «<<s<<endl;
system («pause»);0;
}
Рисунок А.1 - Программная реализация решения задачи №1
#include
«stdafx.h»
#include
<iostream>
#include
<cmath>namespace std;_tmain (int argc, _TCHAR* argv[])
{(0,
«RUS»);*a = new int [25];*b = new int [30];(int i = 0; i < 25; i++)
{[i] =
(double) rand();<<a[i]<<»;\t»;
}max =
a[0];(int i = 1; i < 25; i++)(a[i] > max)= a[i];
cout<<endl<<«Максимальный
элемент последовательности: «<<max<<endl;
for
(int i = 0; i < 30; i++)
{[i] =
(double) rand();<<b[i]<<»;\t»;
}summa
= 0;(int i = 1; i < 30; i++)+= b[i];<<endl<<«Среднее
арифметическое: «<<summa<<endl;(«pause»);0;
}
Рисунок А.2 - Программная реализация решения задачи №2
#include
«stdafx.h»
#include
<iostream>
#include
<cmath>namespace std;_tmain (int argc, _TCHAR* argv[])
{(0,
«RUS»);int n = 4, m = 8;a[n] [m];(int i = 0; i < n; i++)(int j = 0; j <
m; j++)[i] [j] = (double) rand();(int i = 0; i < n; i++)
{(int j
= 0; j < m; j++)<<a[i] [j]<<»\t»;<<endl;
}b1,
b2, b3, b4;(int i = 0; i < n; i++)
{summa
= 0;(int j = 0; j < m; j++)+= a[i] [j];/= m;
cout<<«Среднее
арифметическое «<<i<<» строки: «<<summa<<endl;
double
min = a[i] [0], max = a[i] [0];(int j = 1; j < m; j++)
{(a[i]
[j] < min)= a[i] [j];(a[i] [j] > max)= a[i] [j];
}<<i<<»:
MAX - MIN = «<<max-min<<endl;
}(int i
= 0; i < m; i++)
{max =
a[0] [i];(int j = 1; j < n; j++)(a[j] [i] > max)= a[j]
[i];<<i<<»: «<<max<<endl;
}(«pause»); 0;
}
Рисунок А.3 - Программная реализация решения задачи №3
#include
«stdafx.h»
#include
<iostream>
#include
<cmath>namespace std;SearchMax (double a[], int n);SearchMin (double a[],
int n);Count (double a[], int n, double max, double min);_tmain (int argc,
_TCHAR* argv[])
{(0,
«RUS»);int n1 = 18, n2 = 12, n3 = 10;b[n1], c[n2], z[n3];<<«Array
b:«<<endl;(int i = 0; i < n1; i++)
{[i] =
2.8 - (i + 4.5);<<b[i]<<»\t»;
}<<endl<<«Array
c:«<<endl;(int i = 0; i < n2; i++)
{[i] =
-12.6 + (i - 2.2);<<c[i]<<»\t»;
}<<endl<<«Array
z:«<<endl;(int i = 0; i < n3; i++)
{[i] =
-9.1 - (i + 5.7);<<z[i]<<»\t»;
}<<endl;<<«Array
b: «<<Count (b, n1, SearchMax (b, n1), SearchMin (b,
n1))<<endl;<<«Array c: «<<Count (c, n2, SearchMax (c, n2),
SearchMin (c, n2))<<endl;<<«Array z: «<<Count (z, n3,
SearchMax (z, n3), SearchMin (z, n3))<<endl;(«pause»);0;
}SearchMax
(double a[], int n)
{max =
a[0];(int i = 1; i < n; i++)(a[i] > max)= a[i];max;
}SearchMin
(double a[], int n)
{min =
a[0];(int i = 1; i < n; i++)(a[i] < min)= a[i];min;
}Count
(double a[], int n, double max, double min)
{x =
(max-min)/2;c = 0;(int i = 0; i < n; i++)(a[i] < x)++;c;
}
Рисунок А.4 - Программная реализация решения задачи №4
// App5.cpp: Defines the entry point for the console application.
//
#include
<iostream>
#include
<cmath>namespace std;Calc (double a[], int n);_tmain (int argc, _TCHAR*
argv[])
{(0,
«RUS»);int n1 = 8, n2 = 11, n3 = 14;f[n1], g[n2], h[n3];<<«Array
f:«<<endl;(int i = 0; i < n1; i++)
{[i] =
1.4*i + tan (i - 5.5);<<f[i]<<»\t»;
}<<endl<<«Array
g:«<<endl;(int i = 0; i < n2; i++)
{[i] =
8.5*i + tan (i + 3.9);<<g[i]<<»\t»;
}<<endl<<«Array
h:«<<endl;(int i = 0; i < n3; i++)
{[i] =
2.9*i - tan (i + 1.7);<<h[i]<<»\t»;
}<<endl;<<«Array
f: «<<Calc (f, n1)<<endl;<<«Array g: «<<Calc (g,
n2)<<endl;<<«Array h: «<<Calc (h,
n3)<<endl;(«pause»);0;
}Calc
(double a[], int n)
{pos =
0;(int i = 0; i < n; i++)(a[i] > 0)++;pr = 1, summa = 0;(pos > n/2)
{(int i
= 0; i < n; i++)(a[i] > 0)*=a[i];pr;
}(int i
= 0; i < n; i++)(a[i] < 0)+= a[i];
return summa;
}
Рисунок А.5 - Программная реализация решения задачи №5
#include
«stdafx.h»
#include
<Windows.h>
// Цвет для вывода
графика
#define Red RGB
(255,0,0)
#define Blue RGB
(0,0,255)
// дескриптор окна
консоли
static
HWND hWnd;GetConsoleWndHandle (void);Paint (int nLeftRect, int nTopRect, int
nRightRect, int nBottomRect);Draw_Ellipce (HWND Wnd, int x1, int y1, int x2,
int y2, int Pen, HDC DrawHDC=0);Draw_Rect (HWND Wnd, int x1, int y1, int x2,
int y2, int Pen, HDC DrawHDC = 0);_tmain (int argc, _TCHAR* argv[])
{(10,
10, 10,10);0;
}Paint
(int nLeftRect, int nTopRect, int nRightRect, int nBottomRect)
{=
GetConsoleWndHandle();_Rect (hWnd, 450, 50, 250, 150, Red);_Ellipce (hWnd, 350,
200, 250, 100, Blue);();
}Draw_Ellipce
(HWND Wnd, int x1, int y1, int x2, int y2, int Pen, HDC DrawHDC)
{hOPen;hNPen
= CreatePen (PS_SOLID, 2, Pen);(! DrawHDC) DrawHDC = GetDC(Wnd);= (HPEN)
SelectObject (DrawHDC, hNPen);(DrawHDC, x1, y1, x2, y2);(SelectObject(DrawHDC,
hOPen));0;
}Draw_Rect
(HWND Wnd, int x1, int y1, int x2, int y2, int Pen, HDC DrawHDC)
{hOPen;hNPen
= CreatePen (PS_SOLID, 2, Pen);(! DrawHDC) DrawHDC = GetDC(Wnd);= (HPEN)
SelectObject (DrawHDC, hNPen);rect;.bottom = x2;.left = x1;.right = y2;.top =
y1;(DrawHDC, &rect, (HBRUSH) (COLOR_WINDOW+1));(SelectObject(DrawHDC,
hOPen));0;
}GetConsoleWndHandle(void)
{hConWnd;os;szTempTitle[64],
szClassName[128], szOriginalTitle[1024];.dwOSVersionInfoSize =
sizeof(OSVERSIONINFO);(&os);(os.dwPlatformId == VER_PLATFORM_WIN32s) return
0;((LPWSTR) szOriginalTitle, sizeof(szOriginalTitle));((LPWSTR)
szTempTitle);(40);= FindWindow (NULL, (LPWSTR) szTempTitle);((LPWSTR)
szOriginalTitle);(os.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS)
{=
GetWindow (hConWnd, GW_CHILD);(hConWnd == NULL) return 0;(hConWnd, (LPWSTR)
szClassName, sizeof (szClassName));(strcmp (szClassName, «ttyGrab»)!= 0)
{=
GetNextWindow (hConWnd, GW_HWNDNEXT);(hConWnd == NULL) return 0;(hConWnd,
(LPWSTR) szClassName, sizeof(szClassName));
}
}hConWnd;
}
язык цикл массив программа