13 mr op oap · 2019-12-10 · Одномерные массивы. Многомерные...

72

Upload: others

Post on 09-Jul-2020

8 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 13 MR OP OAP · 2019-12-10 · Одномерные массивы. Многомерные массивы. Описание массивов в С++. Алгоритмы сортировки
Page 2: 13 MR OP OAP · 2019-12-10 · Одномерные массивы. Многомерные массивы. Описание массивов в С++. Алгоритмы сортировки
Page 3: 13 MR OP OAP · 2019-12-10 · Одномерные массивы. Многомерные массивы. Описание массивов в С++. Алгоритмы сортировки

ВВЕДЕНИЕ

Основное назначение дисциплины ОП.04 "Основы алгоритмизации и программирования" в

средних профессиональных образовательных учреждениях состоит в формировании у студентов

общих и профессиональных компетенций, владение которыми позволяет разрабатывать

алгоритмы для конкретных задач, использовать программы для графического отображения

алгоритмов, работать в среде программирования, реализовывать построенные алгоритмы в виде

программ на конкретном языке программирования, оформлять код программы в соответствии со

стандартом кодирования, выполнять проверку, отладку кода программы.Содержание дисциплины предусматривает повторение и систематизацию знаний, полученных

в средней общеобразовательной школе, формирование общих и профессиональных компетенций.Практическое занятие – это форма организации учебного процесса, предполагающая

выполнение обучающимися заданий самостоятельно и под руководством преподавателя. Дидактическая цель практических работ – формирование у обучающихся профессиональных и

практических умений, необходимых для изучения последующих учебных дисциплин, а также

подготовка к применению этих умений в профессиональной деятельности. Практические занятия предполагают работу, связанную с разработкой алгоритмов для

конкретных задач, использованием программ для графического отображения алгоритмов, работой

в среде программирования, реализацией построенных алгоритмов в виде программ на конкретном

языке программирования, оформлением кодов программ в соответствии со стандартом

кодирования, выполнением проверки, отладки кодов программ.Структура практических занятий включает в себя:– теоретические вопросы по изучаемым темам;– практические задания для решения с помощью программных средств.

3

Page 4: 13 MR OP OAP · 2019-12-10 · Одномерные массивы. Многомерные массивы. Описание массивов в С++. Алгоритмы сортировки

ПРАКТИЧЕСКАЯ РАБОТА № 1. «ЗНАКОМСТВО СО СРЕДОЙ

ПРОГРАММИРОВАНИЯ»

Цели: получение навыков работы со средой разработки Visual Studio, создание первой

программы на языке C++ в Visual Studio.

Теоретические вопросыДостоинства и недостатки объектно-ориентированного программирования.Основные элементы окна среды Visual Studio.

Состав меню среды разработки Visual Studio.

Принципы организации справочной системы Visual Studio.

Этапы создания приложения.Создание консольного приложения в Visual Studio на языке С++.

Задание № 1. Запустите Visual Studio из главного меню путем выполнения следующей

последовательности команд: Пуск – Все Программы – Microsoft Visual Studio – Microsoft Visual

Studio. Ознакомьтесь со средой разработки Visual Studio.

Задание № 2. Создайте новый проект – консольной приложение. В открывшемся окне

программы выберите команду: Файл – Создать – Проект:

В открывшемся диалоге создания нового проекта выберите язык программирования Visual

C++, тип приложения Windows шаблон приложения Консольное приложение:

4

Page 5: 13 MR OP OAP · 2019-12-10 · Одномерные массивы. Многомерные массивы. Описание массивов в С++. Алгоритмы сортировки

Введите имя проекта и путь для его сохранения.В открывшемся диалоговом окне необходимо нажать Далее, затем выбрать тип приложения

Консольное приложение и отметить галочку Пустой проект, затем нажать Готово.

После того, как проект создан, в Обозревателе решений выберите Файлы исходного кода –

Добавить – Создать элемент … (Обозреватель решений доступен во вкладке Вид).

5

Page 6: 13 MR OP OAP · 2019-12-10 · Одномерные массивы. Многомерные массивы. Описание массивов в С++. Алгоритмы сортировки

В открывшемся диалоговом окне выберите Файл С++(.cpp). Поскольку предполагается

использовать лишь один файл в проекте, назовите его так же, как и проект:

Введите текст программы:#include <iostream>

using namespace std;

int main()

{

cout << "Hello, world!" << endl;

return 0;

}

Сохраните проект.Задание № 3. Первый шаг, необходимый для выполнения программы – компиляция

исходного файла в промежуточный код, готовый для выполнения.Скомпилируйте введенное приложение, запустите его на выполнение и протестируйте.Задание № 4. Создайте новое консольное приложение. Добавьте в него код для вывода на

экран фразы "Hello, User!", скомпилируйте и выполните программу.Задание № 5. Модифицируйте программный код таким образом, чтобы программа при

запуске выводила на экран информацию в соответствии с полученным у преподавателя вариантом.Вариант 1

Вывести на экран свою фамилию, имя и отчество, а также дату рождения.Вариант 2

Вывести на экран свою фамилию и инициалы, а также место и дату рождения.Вариант 3

Вывести на экран свою фамилию, имя и отчество, а также название и номер учебной группы.Вариант 4

Вывести на экран свою фамилию и инициалы, а также дату выполнения лабораторной работы.Вариант 5

Вывести на экран название изучаемого предмета, а также фамилию и инициалы

преподавателя.

6

Page 7: 13 MR OP OAP · 2019-12-10 · Одномерные массивы. Многомерные массивы. Описание массивов в С++. Алгоритмы сортировки

ПРАКТИЧЕСКАЯ РАБОТА № 2. "СОСТАВЛЕНИЕ ПРОГРАММ ЛИНЕЙНОЙ

СТРУКТУРЫ"

Цели: получение навыков работы со средой разработки Visual Studio, создание программ

линейной структуры на языке C++ в Visual Studio.

Теоретические вопросыПонятие линейного алгоритма.Лексемы языка C++.

Литералы языка C++.

Встроенные типы данных языка C++.

Отличия значимых и ссылочных типов данных.Понятие переменной. Описание переменной.Понятие константы.Выражение. Операнды выражения.Операции. Приоритеты операций.Примеры ввода и вывода переменных различных типов.Оператор присваивания. Составной оператор присваивания.Операторы инкремента и декремента.Директивы препроцессора в C++.

Структура главной функции программы на C++.

Задание № 1. Создайте новое консольное C++ приложение. Напишите код программы, вычисляющей периметр и площадь прямоугольника:

//вычисление периметра и площади прямоугольника#include <iostream>

using namespace std;

int main()

{

float a,b,p,s;

cout<<"Введи стороны прямоугольника"<<"\n";

cin>>a>>b;

p=2*(a+b);

s=a*b;

cout<<"Периметр="<<p<<"\n";

cout<<"Площадь="<<s<<"\n";

return 0;

}

Сохраните проект. Откомпилируйте и запустите программу.Задание № 2. Создайте новое консольное C++ приложение. Напишите код программы,

вычисляющей выражение

.

#include #include

#include // Подключаем математическую библиотеку

7

Page 8: 13 MR OP OAP · 2019-12-10 · Одномерные массивы. Многомерные массивы. Описание массивов в С++. Алгоритмы сортировки

int main()

{

double z, a1, a2, a3, x, y;

cout<<"Введите x:"; cin>>x;

cout<<"Введите y:"; cin>> y;

a1 = pow(2, -x);

a2 = sqrt(x + pow(fabs(y),(1./4.)));

a3 = sqrt(exp(x – 1/sin(x)));

z = a1 * a2 * a3;

cout<< "z = " <<z<< "\n";

return 0;

}

Сохраните проект. Откомпилируйте и запустите программу.Задание № 3. Напишите программу для расчета по двум формулам. Предварительно

подготовьте тестовые примеры с помощью калькулятора:

ПРАКТИЧЕСКАЯ РАБОТА № 3. "СОСТАВЛЕНИЕ ПРОГРАММ

РАЗВЕТВЛЯЮЩЕЙСЯ СТРУКТУРЫ"

Цели: получение навыков работы со средой разработки Visual Studio, создание программ

разветвляющейся структуры на языке C++ в Visual Studio.

Теоретические вопросыПонятие разветвляющегося алгоритма.Условный оператор языка C++.

Оператор выбора языка C++.

Тернарный оператор языка C++

Конъюнкция, дизъюнкция и инверсия условий, использование в C++.

Задание № 1. Напишите код программы для вычисления по заданному x значения функции:

#include <iostream>

#include <math.h>

using namespace std;

int main()

{

double x,y;

cout<<"Введи значение x "; cin>>x;

if (x<=0) y=sin(x); else y=cos(x);

cout<<"\n Функция y="<<y<<"\n";

8

Page 9: 13 MR OP OAP · 2019-12-10 · Одномерные массивы. Многомерные массивы. Описание массивов в С++. Алгоритмы сортировки

return 0;

}

Сохраните проект. Откомпилируйте и запустите программу.Задание № 2. Напишите код программы, которая перераспределит заданные значения x, y так,

что в x окажется большее значение, а в y меньшее://перестановка x, y; большее – вперед#include <iostream>

#include <math.h>

using namespace std;

int main()

{

double x,y,z;

cout<<"Введи значение x y";

cin>>x>>y;

if (x<y) {z=x; x=y; y=z;}

cout<<"\n Итог x="<<x<<"\n Итог y="<<y<<"\n";

return 0;

}

Сохраните проект. Откомпилируйте и запустите программу.Задание № 3. Напишите код программы, которая определяет, принадлежит ли точка с

координатами (x, y) кольцу с внешним радиусом r1 и внутренним r2:

#include <iostream>

using namespace std;

int main()

{

double x,y,r1,r2;

cout<<"Введите x,y,r1,r2 ";

cin>>x>>y>>r1>>r2;

if ((x*x+y*y)<r1 && (x*x +y*y)>r2)

cout<<"\n Точка принадлежит кольцу \n";

else cout<<"\n Точка не принадлежит кольцу \n";

return 0;

}

Сохраните проект. Откомпилируйте и запустите программу.Задание № 4. Перевести числовую оценку знаний студента в ее словесный эквивалент: 5 –

«отлично», 4 – «хорошо», 3 – «удовлетворительно», 2 – «неудовлетворительно».#include <iostream.h>

using namespace std;

void main()

{

int ball;

char sOutput[20];

CharToOem("Введите оценку ", sOutput);

9

Page 10: 13 MR OP OAP · 2019-12-10 · Одномерные массивы. Многомерные массивы. Описание массивов в С++. Алгоритмы сортировки

cout<<sOutput; cin>>ball;

switch (ball)

{

case 2: CharToOem("Это неудовлетворительно", sOutput); break;

case 3: CharToOem("Это удовлетворительно", sOutput); break;

case 4: CharToOem("Это хорошо", sOutput); break;

case 5: CharToOem("Это отлично", sOutput); break;

default: CharToOem("Нет такой оценки", sOutput);

}

cout<<sOutput<<endl;

}

Задание № 5. Напишите программу, которая по введенному значению аргумента вычисляет значение функции, заданной в виде графика:

Задание № 6. Напишите программу, которая определяет, попадает ли точка с заданными

координатами в область, закрашенную на рисунке серым цветом. Результат работы программы

вывести в виде текстового сообщения:

10

Page 11: 13 MR OP OAP · 2019-12-10 · Одномерные массивы. Многомерные массивы. Описание массивов в С++. Алгоритмы сортировки

ПРАКТИЧЕСКАЯ РАБОТА № 4. "СОСТАВЛЕНИЕ ПРОГРАММ ЦИКЛИЧЕСКОЙ

СТРУКТУРЫ"

Цели: получение навыков работы со средой разработки Visual Studio, создание программ

циклической структуры на языке C++ в Visual Studio.

Теоретические вопросыПонятие циклического алгоритма.Оператор цикла с предусловием языка C++.

Оператор цикла с постусловием языка C++.

Оператор цикла с параметром языка C++.

Назначение команд команд break и continue.

Задание № 1. Рассчитать для заданного N величинуN!#include <iostream>

using namespace std;

int main()

{

unsigned long i,n, p;

cout<<"Введи значение N\n"; cin>>n;

p=1;

for (i=1; i<n+1; i++)

p=p*i;

cout<<"Факториал числа "<<n<<" равен "<<p<<"\n";

return 0;

}

Сохраните проект. Откомпилируйте и запустите программу.Задание № 2. Получить таблицу умножения в виде таблицы Пифагора:

#include <iostream>

using namespace std;

int main()

{

int i,j,k ;

for (i=1;i<=9;i++)

{

cout<<"\n";

for (j=1; j<=9;j++)

{

k=i*j;

11

Page 12: 13 MR OP OAP · 2019-12-10 · Одномерные массивы. Многомерные массивы. Описание массивов в С++. Алгоритмы сортировки

if (k<10) cout<<" " ; else cout<<" ";cout<<k;

};

}

cout<<"\n";

return 0;

}

Сохраните проект. Откомпилируйте и запустите программу.Задание № 3. Рассчитать сумму вида:1−1/2+1/3−1/4+... с заданной точностью E.

#include <iostream>

using namespace std;

int main()

{

int i,k;

double s,e;

cout<<"Введите точность \n"; cin>>e;

s=0;

i=1;

k=1;

while(1.0/i>e)

{

s=s+(double)k/i;

i++;

k=k*(-1);

};

cout<<" сумма = "<<s<<" с точностью "<<e<<"\n";

return 0;

}

Сохраните проект. Откомпилируйте и запустите программу.Задание № 4. Среди K первых членов последовательности вида:1,1+1/2,1+1/2+1/3,... найти

первый, больший заданного числа A. Если же его нет (среди первых K членов), то напечатать об

этом сообщение.#include <iostream>

using namespace std;

int main()

{

int i,k;

double a,s;

cout<<"Введите количество \n"; cin>>k;

cout<<"Введите число a \n"; cin>>a;

s=0; i=1;

while (i<=k)

{

s=s+1.0/i;

12

Page 13: 13 MR OP OAP · 2019-12-10 · Одномерные массивы. Многомерные массивы. Описание массивов в С++. Алгоритмы сортировки

if (s>a) break ;

i++;

};

if (i>k) cout<<" такого числа нет \n";

else cout<<" при i ="<<i<<" большее a число "<<s<<"\n";

return 0;

}

Задание № 5. Составить программу на языке C++ вычисления значений функции

на отрезке с шагом 0,1.xxxF cos2

1sin7)( 2 ]7,10;1,10[

Задание № 6. Составить программу на языке C++ вычисления .

n

k kS

12)12(

1

Задание № 7. Составить программу на языке C++ вычисления суммы бесконечного ряда

с точностью =10-3....)9

1

7

1

5

1

3

11(4 S

ПРАКТИЧЕСКАЯ РАБОТА № 5. "ОБРАБОТКА ОДНОМЕРНЫХ И ДВУМЕРНЫХ

МАССИВОВ"

Цели: получение навыков работы со средой разработки Visual Studio, создание программ

обработки одномерных и многомерных массивов на языке C++ в Visual Studio.

Теоретические вопросыОператоры цикла.Одномерные массивы.Многомерные массивы.Описание массивов в С++.Алгоритмы сортировки массивов.Задание № 1. Ввести одномерный массив из 10 целых чисел. Вывести четные по порядковому

номеру элементы этого массива:#include <iostream>

using namespace std;

int main()

{

int i, a[11];

for (i=1; i<=10; i++)

{

cout<<"Введите элемент номер "<<i<<" "; cin>>a[i];

}

for (i=2; i<=10; i+=2)

{

cout<<"\n число a[ "<<i<<"]="<<a[i];

}

13

Page 14: 13 MR OP OAP · 2019-12-10 · Одномерные массивы. Многомерные массивы. Описание массивов в С++. Алгоритмы сортировки

cout<<"\n";

return 0;

}

Сохраните проект. Откомпилируйте и запустите программу.Задание № 2. Ввести одномерный массив, найти в нем минимальный элемент и указать его

номер.#include <iostream>

using namespace std;

int main()

{

int i,j,k1,k2,a[11],b, min, nmin, s;

for (i=1; i<=10; i++)

{

cout<<"Введите a["<<i<<"] "; cin>>a[i];

}

min=a[1];

for (i=1; i<=10; i++)

if (a[i]<min)

{

min=a[i];

nmin=i;

}

cout<<"\n минимальный элемент="<<min<<" его номер="<<nmin;

return 0;

}

Сохраните проект. Откомпилируйте и запустите программу.Задание № 3. Напишите программу, которая вычисляет среднее арифметическое значений

элементов одномерного массива.#include <iostream.h>

using namespace std;

void main()

{

const n=10;

int i; double A[n], SA;

for (i=0;i<n;i++) {cout<<"A["<<i<<"]="; cin>>A[i];}

SA=0;

for(i=0;i<n;i++) SA=SA+A[i];

SA=SA/n;

cout<<"\nSA="<<SA<<endl;

}

Сохраните проект. Откомпилируйте и запустите программу.Задание № 4. Напишите программу, которая сортирует одномерный массив «методом

пузырька».#include <iostream.h>

14

Page 15: 13 MR OP OAP · 2019-12-10 · Одномерные массивы. Многомерные массивы. Описание массивов в С++. Алгоритмы сортировки

using namespace std;

void main()

{

int X[]={6,4,9,3,2,1,5,7,8,10};

int i,j,n,A;

n=sizeof(X)/sizeof(X[0]);

for (i=0;i<n-1;i++)

for (j=0;j<n-1-i;j++)

if (X[j]>X[j+1]) {A=X[j]; X[j]=X[j+1]; X[j+1]=A;}

for(i=0;i<n;i++) cout<<X[i]<<" ";

}

Задание № 5. Напишите программу, заполняющую матрицу случайными числами в диапазоне

от 0 до 99 и осуществляющую поиск в ней максимального значения.#include <iostream.h>

#include <iomanip.h>

#include <stdlib.h>

#define n 5

using namespace std;

void main()

{

int i, j, ImaxA, JmaxA, A[n][n];

for (i=0;i<n;i++)

{

for (j=0;j<n;j++)

{

A[i][j]=rand()%100;

cout<<setw(6)<<A[i][j];

}

cout<<endl;

}

ImaxA=JmaxA=0;

for (i=0;i<n;i++)

{

for (j=0;j<n;j++)

if (A[i][j]>A[ImaxA][JmaxA]) { ImaxA=i; JmaxA=j; }

}

cout<<"Max: A["<<ImaxA<<"]["<<JmaxA<<"]="<<A[ImaxA][JmaxA]<<endl;

}

Задание № 6. Составьте программу на языке C++, заполняющую одномерный массив A

двадцатью первыми членами последовательности Фибоначчи (последовательности, в которой

первые два члена равны 1, а каждый следующий равен сумме двух предыдущих: ). Определите сумму элементов массива A и произведение первых семи

2121;1

iiiaaaaa

элементов массива.

15

Page 16: 13 MR OP OAP · 2019-12-10 · Одномерные массивы. Многомерные массивы. Описание массивов в С++. Алгоритмы сортировки

Задание № 7. Составьте программу на языке C++, заполняющую матрицу B размером

20 строк и 30 столбцов, каждый элемент которой получается по формуле , )()( 22

, jCosiSinb ji

где i – номер строки, j – номер столбца. Определите количество отрицательных и положительных

элементов матрицы B.

ПРАКТИЧЕСКАЯ РАБОТА № 6. "ОБРАБОТКА СИМВОЛЬНЫХ СТРОК"

Цели: получение навыков работы со средой разработки Visual Studio, создание программ

обработки символьных строк на языке C++ в Visual Studio.

Теоретические вопросыСтроки.Описание символьных переменных и массивов в C++.

Стандартные процедуры и функции для работы со строками.Задание № 1. Среди последовательно вводимых N символов подсчитать число

восклицательных знаков.#include <iostream>

#include <windows.h>

using namespace std;

int main()

{

char c,c1;

int sum=0,i,n;c1=’!’;

cout<<" \n Введите значение N \n"; cin>>n;

for (i=1; i<=n; i++)

{

cout<<"\nВведите очередной символ "; cin>>c;

if (c==c1) sum++;

}

cout<<" количество знаков "<<c1<<" равно "<<sum<<"\n";

return (0);

}

Задание № 2. Составить программу «Клавиатурный тренажер» (случайным образом

выводится символ, который следует нажать на клавиатуре).#include <iostream>

#include <stdlib.h>

#include <time.h>

using namespace std;

int kod,n, r_max, r_min;

char c,d;

int main()

{

srand((unsigned)time(0));

One:r_min=33;

16

Page 17: 13 MR OP OAP · 2019-12-10 · Одномерные массивы. Многомерные массивы. Описание массивов в С++. Алгоритмы сортировки

r_max=123;

kod=(double)rand()/(RAND_MAX+1)*(r_max-r_min)+r_min;

c=(char)kod; cout<<"Нажмите"<<c<<"\n";cin>>d;

if ((int)d==kod) cout<<" правильно \n ";

else cout<<" нет "<<"\n";

goto One;

return (0);

}

Задание № 3. Распечатать коды русских букв (предварительно записав их в виде массива

символов).#include <iostream>

#include <iomanip>

#include <windows.h>

using namespace std;

char str_rus[256],salf[65],sal;

int main()

{

int i;

char

rusalf[65]=АаБбВвГгДдЕеЁёЖжЗзИиЙйКкЛлМмНнОоПпРрСсТтУуФфХхЦцЧчШшЩщъЫыьЭэЮюЯя;

cout<<"\n КОДЫ РУССКИХ БУКВ"<<"\n";AnsiToOem(rusalf, salf);

for (i=0; i<=64; i++)

{

sal=salf[i];

cout<<"setw(5)<<sal<<setw(3)<<(int)rusalf[i];

if (i%8 == 7) cout<<"\n";

}

return (0);

}

Задание № 4. Напишите программу, использующую функции обработки строк.#include <iostream.h>

#include <string.h>

void main()

{

char s1[80], s2[80];

strcpy(s1, "С++");strcpy(s2, " – это мощный язык.");

cout<<"Длины строк: "<<strlen(s1)<<" "<<strlen(s2)<<endl;

17

Page 18: 13 MR OP OAP · 2019-12-10 · Одномерные массивы. Многомерные массивы. Описание массивов в С++. Алгоритмы сортировки

if(!strcmp(s1,s2)) cout<<"Эти строки равны."<<endl;

else cout<<"Эти строки не равны."<<endl;

strcat(s1,s2);

cout<<s1<<endl;

strcpy(s2,s1);

cout<<s1<<" и "<<s2<<endl;

if(!strcmp(s1,s2))

cout<<"Строки s1 и s2 теперь одинаковы."<<endl;

}

Задание № 5. Составить программу на языке С++, которая выполняет ввод строки с

клавиатуры и удаляет пробелы в начале строки.Задание № 6. Составить программу на языке С++, которая выполняет ввод строки с

клавиатуры и определяет количество символов * в строке.Задание № 7. Ввести символьную строку. Перевернуть (обратить) эту строку. Например, если

ввели строку «abcdef», то в результате должны получить «fedcba».

Задание № 8. Введенную строку текста разбить на отдельные слова, т.е. вывести каждое слово

в отдельную строку.Задание № 9. Дан список из 10 фамилий. Упорядочить их по алфавиту

ПРАКТИЧЕСКАЯ РАБОТА № 7. "РАБОТА С ТЕКСТОВЫМИ ФАЙЛАМИ"

Цели: получение навыков работы со средой разработки Visual Studio, создание программ для

работы с текстовыми файлами на языке C++ в Visual Studio.

Теоретические вопросыФайловый ввод/вывод в языке C.

Стандартные процедуры и функции для работы с файлами.Задание № 1. Написать программу, которая выводит на экран содержимое текстового файла.#include <iostream.h>

#include <stdio.h>

void main()

{

FILE *fp;

char str[80];

if ((fp=fopen("c:\\test.dat","r")) == NULL)

{

cout<<"Ошибка открытия файла"<<endl;return;

}

18

Page 19: 13 MR OP OAP · 2019-12-10 · Одномерные массивы. Многомерные массивы. Описание массивов в С++. Алгоритмы сортировки

while (!feof(fp))

{

fgets(str,80,fp);

cout<<str;

}

fclose(fp);

}

Задание № 2. Написать программу, осуществляющую запись в файл c:\test.dat целого числа, значения с плавающей точкой и строки.

#include <iostream.h>

#include <fstream.h>

void main()

{

ofstream out("c:\\test.dat");

if (!out)

{

cout<<"Ошибка открытия файла"<<endl;

return;

}

out<<10<<" "<<123.23<<" "<<"Это короткий текстовый файл.";out.close();

}

Задание № 3. Составить программу, с помощью которой рассчитывается и записывается в

файл таблица квадратных корней для целых чисел от 1 до 10. Для контроля эта таблица выводится

на экран.

#include <iostream.h>

#include <fstream.h>

#include <math.h>

void main()

{

int x;

ofstream out("c:\\test.dat");

if (!out)

{

cout<<"Error"<<endl;

return;

}

19

Page 20: 13 MR OP OAP · 2019-12-10 · Одномерные массивы. Многомерные массивы. Описание массивов в С++. Алгоритмы сортировки

out<<"\tТаблица квадратных корней\n\n";cout<<"\tТаблица квадратных корней\n\n";out<<"\tx\tsqrt(x)\n\n";

cout<<"\tx\tsqrt(x)\n\n";

for (x=1; x<=10; x++)

{

out<<"\t"<<float(x)<<"\t"<<sqrt(float(x))<<"\n";

cout<<"\t"<<float(x)<<"\t"<<sqrt(float(x))<<"\n";

}

out.close;

}

Задание № 4. Составить программу на языке С++, которая вычисляет среднее арифметическое

чисел, находящихся в текстовом файле test.dat.

Задание № 5. Составить программу на языке С++, которая выполняет частотный анализ текста, содержащего заглавные английские буквы, т.е. вычисляет, сколько раз в текстовом файле

book.dat встречается заданная буква.

ПРАКТИЧЕСКАЯ РАБОТА № 8. "РАБОТА С ДВОИЧНЫМИ ФАЙЛАМИ"

Цели: получение навыков работы со средой разработки Visual Studio, создание программ для

работы с двоичными файлами на языке C++ в Visual Studio.

Теоретические вопросыФайловый ввод/вывод в языке C.

Стандартные процедуры и функции для работы с файлами.Задание № 1. Создать двоичный файл и записать в него целое число n и n вещественных

чисел.#include «stdafx.h»

#include <iostream>

using namespace std;

int main()

{

int n, i;

double a;

FILE *f; //описываем файловую переменную//создаем двоичный файл в режиме записиf=fopen(«D:\\game\\noobs.dat», «wb»);

//ввод числа n

cout<<«n=»; cin>>n;

fwrite(&n, sizeof(int), 1, f);

//цикл для ввода n вещественных чиселfor (i=0; i<n; i++)

{

20

Page 21: 13 MR OP OAP · 2019-12-10 · Одномерные массивы. Многомерные массивы. Описание массивов в С++. Алгоритмы сортировки

//ввод очередного вещественного числаcout<<«a=»;

cin>>a;

//запись вешественного числа в двоичный файлfwrite(&a, sizeof(double), 1, f);

}

//закрываем файлfclose(f);

system(«pause»);

return 0;

}

Задание № 2. Вывести на экран содержимого созданного в прошлой задаче двоичного файла.#include «stdafx.h»

#include <iostream>

using namespace std;

int main()

{

int n, i;

double *a;

FILE *f; //описываем файловую переменную//открываем существующий двоичный файл в режиме чтенияf=fopen(«D:\\game\\noobs.dat», «rb»);

//считываем из файла одно целое число в переменную n

fread(&n, sizeof(int), 1, f);

//вывод n на экранcout<<«n=»<<n<<endl;

//выделение памяти для массива из n чиселa=new double[n];

//чтение n вещественных чисел из файла в массив a

fread(a, sizeof(double), n, f);

//вывод массива на экранfor (i=0; i<n; i++) cout<<a[i]<<”\t”<<endl;

//закрываем файлfclose(f);

system(«pause»);

return 0;

}

Задание № 3. В созданном раннее двоичном файле поменять местами наибольшее и

наименьшее из вещественных чисел.#include «stdafx.h»

#include <iostream>

using namespace std;

int main()

{

21

Page 22: 13 MR OP OAP · 2019-12-10 · Одномерные массивы. Многомерные массивы. Описание массивов в С++. Алгоритмы сортировки

int n, i, imax, imin;

double *a, max, min;

FILE *f;

//открытие файла в режиме чтения и записиf=fopen(«D:\\game\\noobs.dat», «rb+»);

//считываем из файла в переменную n количество//вещественных чисел в файлеfread(&n, sizeof(int), 1, f);

cout<<«n=»<<n<<endl;

//выделяем память для хранения вещественных чисел,//которые будут храниться в массиве a

a=new double[n];

//считываем из файла в массив а вещественные числаfread(a, sizeof(double), n, f);

//поиск максимального и минимального элементов//в массиве а и их индексовfor (imax=imin=0, max=min=a[0], i=1; i<n; i++)

{

if (a[i]>max)

{

max=a[i];

imax=i;

}

if (a[i]<min)

{

min=a[i];

imin=i;

}

}

//перемещение указателя к максимальному элементуfseek(f, sizeof(int)+imax*sizeof(double), SEEK_SET);

//запись min вместо максимального элемента файлаfwrite(&min, sizeof(double), 1, f);

//перемещение указателя к минимальному элементуfseek(f, sizeof(int)+imin*sizeof(double), SEEK_SET);

//запись max вместо минимального элемента файлаfwrite(&max, sizeof(double), 1, f);

//закрытие файлаfclose(f);

//освобождение памятиdelete []a;

system(«pause»);

return 0;

}

22

Page 23: 13 MR OP OAP · 2019-12-10 · Одномерные массивы. Многомерные массивы. Описание массивов в С++. Алгоритмы сортировки

ПРАКТИЧЕСКАЯ РАБОТА № 9. "ОРГАНИЗАЦИЯ ФУНКЦИЙ"

Цели: получение навыков работы со средой разработки Visual Studio, создание программ

работы с функциями на языке C++ в Visual Studio.

Теоретические вопросыИспользование функций в программах.Параметры функции.Функция типа void и глобальные переменные.Использование инструкции return.

Задание № 1. Вычислить площадь пятиугольника, у которого известны длины сторон и двух

диагоналей.

using namespace std;

float streug(float x,float y,float z);

int main()

{

float a,b,c,d,f,g,h,s1,s2,s3,s5;

cout<<"\n введи a,b,c,d,f,g,h ";cin>>a>>b>>c>>d>>f>>g>>h;

s1=streug(a,b,h);

s2=streug(h,c,g);

s3=streug(g,d,f);

s5=s1+s2+s3;

cout<<"\n"<<s5<<"\n";

return 0;

}

float streug(float x,float y,float z)//ф-я для вычисления площади 3-ника по его сторонам{

float p,s;

p=(x+y+z)/2;

s=sqrt(p*(p-x)*(p-y)*(p-z));

return (s);

}

Задание № 2. Написать программу, которая с помощью функции вычисляет максимальное из двух целых чисел, полученных в качестве аргументов.

#include <iostream.h>

int max(int a, int b);

void main()

23

Page 24: 13 MR OP OAP · 2019-12-10 · Одномерные массивы. Многомерные массивы. Описание массивов в С++. Алгоритмы сортировки

{

int x,y;

cout<<"x="; cin>>x;

cout<<"y="; cin>>y;

cout<<"max="<<max(x,y)<<endl;

}

int max(int a, int b)

{

if (a>b) return a;

else return b;

}

Задание № 3. Составим программу решения следующей задачи. Дана вещественная матрица

А[М][N]. Требуется вычислить и вывести евклидовы нормы строк этой матрицы. Евклидовой

нормой вектора называют корень квадратный из суммы квадратов его элементов:

.

n

i

ixL1

2

Если строку матрицы рассматривать как вектор, то данную формулу надо применить к

каждой строке. В результате необходимо получить М чисел.#include <iostream.h>

#include <math.h>

double Norma(int n, double X[]);

void main()

{

double A[2][3];

int i,j; ;

for (i=0;i<2;i++)

{

for (j=0;j<3;j++)

{

cout<<"A["<<i<<","<<j<<"]="; cin>>A[i][j];

}

}

for (i=0;i<2;i++)

cout<<"Norma "<<i<<"="<<Norma(3,A[i])<<endl;

}

double Norma(int n, double X[])

{

int i;

double S=0;

24

Page 25: 13 MR OP OAP · 2019-12-10 · Одномерные массивы. Многомерные массивы. Описание массивов в С++. Алгоритмы сортировки

for (i=0; i<n; i++) S+=X[i]*X[i];

return sqrt(S);

}

Задание № 4. Составить программу на языке С++, которая с помощью функции определяет среди чисел 1+1/2, 1+1/2+1/3, 1+1/2+1/3+1/4,… первое большее а.

Задание № 5. Составить программу на языке С++, заполняющую матрицу A размером

20 строк и 30 столбцов, каждый элемент которой получается по формуле , где i – номер ji

a ji

1,

строки, j – номер столбца. С помощью подпрограммы-функции вычислить среднее

арифметическое каждой из строк матрицы A.

ПРАКТИЧЕСКАЯ РАБОТА № 10. "ПРИМЕНЕНИЕ РЕКУРСИВНЫХ ФУНКЦИЙ"

Цели: получение навыков работы со средой разработки Visual Studio, создание программ

работы с рекурсивными функциями на языке C++ в Visual Studio.

Теоретические вопросыИспользование рекурсивных функций в программах.Структура рекурсивной функции.Задание № 1. Написать программу вычисления факториала числа с помощью рекурсивной

функции.

#include <iostream.h>

int fact(int n);

void main()

{

cout<<"n!="<<fact(4)<<endl;

}

int fact(int n)

{

int answer;

if (n==1) return 1;

answer = fact(n-1) * n;

return answer;

}

Задание № 2. Рассчитать число сочетаний из N элементов по M

.

// число сочетаний из N по M

25

Page 26: 13 MR OP OAP · 2019-12-10 · Одномерные массивы. Многомерные массивы. Описание массивов в С++. Алгоритмы сортировки

#include <iostream>

#include <cmath>

using namespace std;

int n,m;

double c;

float fact(int n);

int main()

{

cout<<"\nВведите N и M ";cin>>n>>m;

c=floor(fact(n)/(fact(m)*fact(n-m)) );

cout<<"\n число сочетаний из "<<n<<" по "<<m<<" = "<<c<<"\n";

return (0);

}

float fact(int n)

{

if (n==0) return(1);

else return (n*fact(n-1));

}

Задание № 3. Провести сортировку одномерного массива последовательным поиском

максимума и перестановкой его в конец, причем применить рекурсивную процедуру сортировки.

#include <iostream>

using namespace std;

const int n=5;

float a[n+1];

int fmax(float a[], int nach, int kon);

void sort (float a[], int nach, int kon);

int main()

{

int i;

for (i=1; i<=n; i++)

{

cout<<"\nВведите a["<<i<<"] "; cin>>a[i];

}

sort (a,1,n);

for (i=1; i<<=n; i++)

{

cout<<" a["<<i<<"]="<<a[i];

}

26

Page 27: 13 MR OP OAP · 2019-12-10 · Одномерные массивы. Многомерные массивы. Описание массивов в С++. Алгоритмы сортировки

cout<<"\n";

return(0);

}

int fmax(float a[], int nach, int kon)

{

int k, kmax;

float max;

kmax=nach;

max=a[nach];

for (k=nach; k<=kon; k++)

{

if (a[k]>max) {max=a[k]; kmax=k;}

}

return kmax;

}

void sort (float a[], int nach, int kon)

{

float b;

int nmax,kons;

kons=kon;

if (nach<=kon)

{

nmax=fmax(a,nach, kons);

b=a[nmax];

a[nmax]=a[kon];

a[kon]=b;

sort(a, nach, kons-1);

}

}

Задание № 4. Составить программу на языке С++, которая с помощью рекурсивной функции

вычисляет заданный член числового ряда

.2 ,1

2 1

1

aa

an

n

Задание № 5. Составить программу на языке С++, которая с помощью рекурсивной функции

вычисляет заданный член числового ряда

, .1 nan ea 01 a

ПРАКТИЧЕСКАЯ РАБОТА № 11. "ПРОГРАММИРОВАНИЕ МОДУЛЯ"

Цели: получение навыков работы со средой разработки Visual Studio, знакомство с основами

модульного программирования на языке C++ в Visual Studio.

27

Page 28: 13 MR OP OAP · 2019-12-10 · Одномерные массивы. Многомерные массивы. Описание массивов в С++. Алгоритмы сортировки

Теоретические вопросыСтруктура модуля.Раздельная компиляция.Сборка программы.Область действия. Область видимости.Задание № 1. Рассчитать треугольник Паскаля вида:

Треугольник Паскаля образуется по правилу: по краям каждой строки стоят единицы, а

каждое из остальных чисел равно сумме двух стоящих над ним чисел предыдущей строки.#include <cmath>

#include <iomanip>

using namespace std;

int n,m,r,i,j; double c;

float fact(int n); int soch(int n,int m);

int main()

{

cout<<"\n введи размер треугольника Паскаля"; cin>>r;

for (i=0;i<=r;i++)

{

cout<<"\n";

for (j=0;j<=i;j++)

{

c=soch(i,j);

cout<<setw(r*(r-i+j+1))<<c;

};

cout<<"\n"; }

return (0);

}

float fact(int n)

{

if (n==0) return(1); else return (n*fact(n-1));

}

int soch(int n,int m)

{

int c= floor(fact(n)/(fact(m)*fact(n-m)) );

return(c);

28

Page 29: 13 MR OP OAP · 2019-12-10 · Одномерные массивы. Многомерные массивы. Описание массивов в С++. Алгоритмы сортировки

}

Задание № 2. Даны три тройки чисел: a1, b1, c1; a2, b2, c2; a3, b3, c3. Найти в каждой из них

наибольшее и наименьшее, а затем наибольшее и наименьшее среди наибольших и отдельно –

среди наименьших.#include <iostream>

#include <iomanip>

using namespace std;

void maxmin(double x,double y,double z);

double mx, mn;// глобальные переменные (из maxmin)

int main()

{

double max1,min1,max2,min2,max3,min3,mxmax,mnmax,

mxmin, mnmin, a1,b1,c1, a2,b2,c2, a3,b3,c3;

cout<<"\n введи a1,b1,c1 "; cin>>a1>>b1>>c1;

cout<<"\n введи a2,b2,c2 "; cin>>a2>>b2>>c2;

cout<<"\n введи a3,b3,c3 "; cin>>a3>>b3>>c3;

maxmin(a1,b1,c1); max1=mx; min1=mn;

cout<<"\n max1,min1"<<setw(5)<<max1<<setw(5) <<min1;

maxmin(a2,b2,c2); max2=mx; min2=mn;

cout<<"\n max2,min2"<<setw(5)<<max2<<setw(5) <<min2;

maxmin(a3,b3,c3); max3=mx; min3=mn;

cout<<"\n max3,min3"<<setw(5)<<max3<<setw(5) <<min3;

maxmin(max1,max2,max3); mxmax=mx; mnmax=mn;

cout<<"\n maxmax,minmax "<<setw(5)<<mxmax<<setw(5) <<mnmax;

maxmin(min1,min2,min3); mxmin=mx; mnmin=mn;

cout<<"\n maxmin,minmin "<<setw(5)<<mxmin<<setw(5) <<mnmin;

cout<<"\n";

return (0);

}

void maxmin(double x,double y,double z)

{

if ((x>y)&&(x>z)) mx=x; if ((y>x)&&(y>z)) mx=y;

if ((z>x)&&(z>y)) mx=z;if ((x<y)&&(x<z)) mn=x;

if ((y<x)&&(y<z)) mn=y;if ((z<x)&&(z<y)) mn=z;

}

Задание № 3. Составить программу для решения задачи «Ханойские башни». Напомним, что

в ней имеется три стержня, на которых находятся диски последовательно уменьшающегося

диаметра. Требуется переложить диски с 1-го стежня (Source) на 3-й (Dest), используя второй

стержень (Tmp). Диски можно брать только по одному и класть можно только меньший (по

диаметру) на больший. В результате на 3-м стержне диски также должны быть сложены по

возрастанию диаметров (как и было на исходном).Для того чтобы перенести самый большой диск, нужно сначала перенести все диски, кроме

последнего, на второй стержень, потом перенести самый большой на третий, после чего останется

перенести все остальные диски со второго на третий. Задачу о переносе N – 1 диска мы решаем

29

Page 30: 13 MR OP OAP · 2019-12-10 · Одномерные массивы. Многомерные массивы. Описание массивов в С++. Алгоритмы сортировки

аналогично, только поменяем стержни местами (при первом переносе конечным стержнем будем

считать второй, а не третий, при втором переносе начальным вместо первого будет второй). Как

видите, задачка разрешима. И правда, ведь задачу о N – 1 дисков мы сведем к задаче о N – 2

дисков, ту, в свою очередь, к N – 3 дискам, и так вплоть до 1 диска. Этот метод легко

программируется с помощью рекурсии.#include <iostream>

using namespace std;

//ханойские башни (рекурсивно)

void move_disks(int n, char Source, char Dest, char Tmp);

int main()

{

int n; cout<<"? n disks "; cin>>n;

move_disks(n,'A','C', 'B');

return 0;

}

void move_disks(int n, char Source, char Dest, char Tmp)

// процедура перемещения диска

{

if (n==1) cout<<"Disk1 From "<<Source<<" To "<<Dest<<endl;

else

{

move_disks(n-1, Source, Tmp, Dest);

cout<<"Disk"<<n<<" From "<<Source<<" To "<<Dest<<endl;

move_disks(n-1, Tmp, Dest, Source);

}

}

Задание № 4. Создадим программу с функцией для вывода таблицы значений произвольной

функции в заданных пределах и с указанным шагом. И, соответственно, нужную функцию будем

туда передавать (в функцию вывода).// передача в функцию имени функции

// для построения таблицы переданной функции

#include <iostream>

#include <math.h>

#include <iomanip>

using namespace std;

typedef double(*Pfun)(double);

void print_tabl(Pfun fun, double xn, double xk, double dx);

double cosh(double x);

int main()

{

double xn, xk, dx;

cout<<"введите xn, xk, dx "; cin>>xn>>xk>>dx;

print_tabl(cosh, xn, xk, dx);

30

Page 31: 13 MR OP OAP · 2019-12-10 · Одномерные массивы. Многомерные массивы. Описание массивов в С++. Алгоритмы сортировки

return(0);

}

void print_tabl(Pfun fun, double xn, double xk, double dx)

{

double x;

cout<<"--------------------------------------\n";

cout<<"| X | Y |\n" ;

cout<<"-------------------------------------|\n";

for (x= xn; x<=xk; x+=dx)

cout<<"\n"<<setw(15)<< x <<setw(15)<<fun(x);

cout<<"\n------------------------------------|\n";

}

double cosh(double x)

{

double y;

y=(exp(x)+exp(-x))/2;

return(y) ;

}

ПРАКТИЧЕСКАЯ РАБОТА № 12. "КОМПИЛЯЦИЯ И КОМПОНОВКА

ПРОГРАММЫ. МОДУЛЬНОЕ ПРОГРАММИРОВАНИЕ"

Цели: получение навыков работы со средой разработки Visual Studio, знакомство с основами

модульного программирования на языке C++ в Visual Studio.

Теоретические вопросыСтруктура модуля.Раздельная компиляция.Сборка программы.Область действия. Область видимости.Созданные пользователем функции целесообразно объединить в отдельную собственную

библиотеку программиста. Для этого создадим (в своей папке!) на диске специальную папку под

названием SUBPROG. В ней и будем размещать заголовочные файлы, содержащие функции

пользователя.Всякий заголовочный файл оформляется директивами препроцессору: #infdef имя_файла

#define имя_файла

#endif

Это сочетание директив предотвращает повторные включения директив-компонентов. Имя_файла может быть любым, но не следует использовать его еще в каком-либо качестве в

своих программах. Таким образом будет создан заголовочный файл имя_файла.h Такой файл

содержит прототипы соответствующих функций, константы и т.п. Кроме того, там могут

31

Page 32: 13 MR OP OAP · 2019-12-10 · Одномерные массивы. Многомерные массивы. Описание массивов в С++. Алгоритмы сортировки

содержаться директивы на включение в программу тех заголовочных файлов из библиотеки

компилятора, использование которых неизбежно в любой задаче (ввод/вывод, математические и

т.п.) В отличие от встроенных в компилятор, собственные списки и функции включаются с

указанием пути к файлу, в который они записаны, и в обычных двойных кавычках. Будем каждую библиотечную функцию записывать в своем отдельном программном файле.

Имя файла и имя записанной в него функции могут и различаться, но желательно, чтобы они

совпадали. Расширения таких файлов – как и для любой программы С++ –.cpp.

С++ позволяет определить несколько функций с одним и тем же именем, но с различным

набором аргументов – это называется перегрузкой функций. Приведем пример, иллюстрирующий, зачем нужна перегрузка.

В библиотеке стандартных функций имеется три функции для определения абсолютной

величины числа трех типов: int abs(int)

long labs(long)

double fabs(double)

Задание № 1. Запишите три варианта прототипа новой функции и три варианта описания

функции в форме функции abs1.

int abs1(int);

double abs1(double);

long abs1(long);

int abs1(int i);

{ return abs(i); }

double abs1(double a);

{ return fabs(a); }

long abs1(long i);

{ return labs(i); }

Задание № 2. Составьте программу, иллюстрирующую использование перегрузки функции.#include <iostream>

#include <math.h>

using namespace std;

int x=-7;double z=-1.56789e2; long y=-33156;

int abs1(int);

double abs1(double);

long abs1(long);

int main()

{

cout<<"\n"<<abs1(x)<<"\n"<<abs1(y)<<"\n"<<abs1(z);

cout<<”\n”;

return (0);

}

int abs1(int x)

{ return abs(x); }

double abs1(double z)

32

Page 33: 13 MR OP OAP · 2019-12-10 · Одномерные массивы. Многомерные массивы. Описание массивов в С++. Алгоритмы сортировки

{ return fabs(z); }

long abs1(long y)

{ return labs(y); }

Задание № 3. Разбейте задачи из практической работы № 10 на модули. Откомпилируйте

каждый модуль, скомпонуйте приложения.

ПРАКТИЧЕСКАЯ РАБОТА № 13. "ИСПОЛЬЗОВАНИЕ УКАЗАТЕЛЕЙ ДЛЯ

ОРГАНИЗАЦИИ СВЯЗАННЫХ СПИСКОВ. СОЗДАНИЕ И УДАЛЕНИЕ

ДИНАМИЧЕСКИХ ПЕРЕМЕННЫХ"

Цели: получение навыков работы со средой разработки Visual Studio, создание программ с

использованием указателей на языке C++ в Visual Studio.

Теоретические вопросыПонятие указателей.Описание указателей.Операции над указателями.Указатели и массивы.Использование указателей для передачи параметров функцииЗадание № 1. Проведем манипулирование данными с помощью указателей: переменной a

присваивается значение 5, указателю aP присваивается ее адрес, затем по адресу указателю

присваивается значение 7. В результате оказывается, что значение переменной a изменилось на 7,

хотя непосредственно к ней никто не обращался. И далее изменим непосредственно значение a на

9 и при обращении к ней, как непосредственно, так и через указатели увидим, что значение

изменилось на 9..

// использование указателей

#include using namespace std;

int a, *aP;

int main()

{

a=5;

cout<<"\n a= "<<<"\n *aP= "<<<"\n присваиваем *aP значение 7 ";

*aP=7;

cout<<"\n *aP= "<<<" a= "<<<"\n присваиваем a значение 9 ";

a=9;

cout<<"\n a= "<<<" *aP= "<<<"\n";

return (0);

}

Задание № 2. Создать функцию swap(x, y), которая меняет значения переменных x, y местами

и проверить значения переменных до обращения к функции, внутри функции и после обращения к

функции.// передача параметров в функцию (по значению) #include <iostream>

33

Page 34: 13 MR OP OAP · 2019-12-10 · Одномерные массивы. Многомерные массивы. Описание массивов в С++. Алгоритмы сортировки

#include <iomanip>

using namespace std;

void swap(int x, int y);

int main()

{

int x,y; x=5, y=10;

cout<<"\n x,y до обращения"<<setw(3)<<x<<setw(3) <<y; swap(x,y);

cout<<"\n x,y после обращения"<<setw(3)<<x<<setw(3) <<y<<"\n";

return(0);

}

void swap(int x, int y)

{

int z;

cout<<"\nx,y внутри функции до преобразования" <<setw(3)<<x<<setw(3)<<y; z=x; x=y; y=z;

cout<<"\n x,y внутри функции после преобразования" <<setw(3)<<x<<setw(3)<<y;

}

Задание № 3. Рассчитать сумму элементов правее последнего отрицательного.// сумма элементов правее последнего отрицательного

// элемента (с использованием динамич. массива) #include <iostream>

using namespace std;

int main()

{

int n;

cout<<"введи размерность массива "; cin>>n;

float *a=new float[n]; int i, notr;

cout<<"вводите элементы массива ";

for (i=0; i<n; i++) cin>>a[i];

notr=-1;

for (i=0; i<n; i++) if (a[i]<0) notr=i;

if (notr!=-1)

{float sum=0;

for (i=notr+1;i<n;i++)sum=sum+a[i];

cout<<"\n сумма= "<<sum;}

else cout<<"\n отрицательных нет ";

cout<<"\n";

return(0);

}

Задание № 4. Создать программу быстрой сортировки одномерного массива (с

использованием указателей и динамической памяти).//быстрая сортировка с рекурсией

#include <iostream.h>

using namespace std;

34

Page 35: 13 MR OP OAP · 2019-12-10 · Одномерные массивы. Многомерные массивы. Описание массивов в С++. Алгоритмы сортировки

//прототип функции сортировки

void qsort(float* array, int left, int right);

int main()

{

const int n=20;

float arr[n];

int i,l,r; randomize();

cout<<"Вводите элементы массива ";

for (i=0; i<n; i++) cin>>arr[i];

l=0; r=n-1; //лев. и прав. границы нач.фрагмента

qsort(arr,l, r); cout<<"\n";

for (i=0; i<n;i++) cout<< arr[i]<<" ";

return(0);

}

void qsort(float* array, int left, int right)

{

int i=left, j=right;

float middle=array[(left+right)/2];

float temp;

while (i<j)

{

while (array[i]< middle) i++;

while (middle < array [j]) j--;

if (i<=j)

{

temp= array[i];

array[i]=array[j];;

array[j]= temp;

i++;

j--;

}

}

if (left<j) qsort(array, left,j); // 2

if (i< right) qsort(array, i, right); // 3

}

Задание № 5. Написать программу, моделирующую работу стека. Для работы со стеком

предусмотреть такие функции:• заталкивание элемента в стек – push;

• выталкивание лемента из стека – pop;

• очистка стека – clear;

• печать содержимого стека – print.

Организовать структуру программы таким образом, чтобы работа со стеком велась только с

помощью описанных функций, а сам стек был не доступен для пользователя (из функции main).

35

Page 36: 13 MR OP OAP · 2019-12-10 · Одномерные массивы. Многомерные массивы. Описание массивов в С++. Алгоритмы сортировки

ПРАКТИЧЕСКАЯ РАБОТА № 14. " СОЗДАНИЕ НАСЛЕДОВАННОГО КЛАССА"

Цели: получение навыков работы со средой разработки Visual Studio, создание программ с

использованием структур на языке C++ в Visual Studio.

Теоретические вопросыПонятие структуры в языке С++.Формат описания структурного типа.Обращение к элементам структуры.Понятие объединения в языке С++.Формат описания объединения.Задание № 1. Ввести сведения об N студентах. Определить фамилии студентов, получающих

самую высокую стипендию.#include <iostream.h>

void main()

{

const N=4; int i; float maxs;

struct student {

char fam[15];

int kurs;

char grup[3];

float stip;

};

student stud[N];

for (i=0; i<N; i++)

{

cout<<"\n%d-й студент"<<i;cout<<"\nФамилия: "; cin>>stud[i].fam;

cout<<"Курс: "; cin>>stud[i].kurs;

cout<<"Группа: "; cin>>stud[i].grup;

cout<<"Стипендия: "; cin>>stud[i].stip;

}

maxs = 0;

for (i=0; i<N; i++)

if (stud[i].stip > maxs) maxs = stud[i].stip;

cout<<"\nСтуденты, получающие максимальную стипендию: "<<maxs;

for (i=0; i<N; i++)

if (stud[i].stip == maxs) cout<<"\n"<<stud[i].fam;

}

Задание № 2. Составить программу для решения следующей задачи: с клавиатуры вводится

символ. Вывести на экран двоичный код этого символа.#include <iostream.h>

struct byte {

36

Page 37: 13 MR OP OAP · 2019-12-10 · Одномерные массивы. Многомерные массивы. Описание массивов в С++. Алгоритмы сортировки

int b1 : 1;

int b2 : 1;

int b3 : 1;

int b4 : 1;

int b5 : 1;

int b6 : 1;

int b7 : 1;

int b8 : 1;

};

union bits {

char ch;

byte cod;

} u;

void decode (bits x);

void main()

{

do {cin>>u.ch;

cout<<u.ch<<":";

decode(u); }

while (u.ch != 'q');

}

void decode (bits u)

{

if (u.cod.b8) cout<<"1"; else cout<<"0";

if (u.cod.b7) cout<<"1"; else cout<<"0";

if (u.cod.b6) cout<<"1"; else cout<<"0";

if (u.cod.b5) cout<<"1"; else cout<<"0";

if (u.cod.b4) cout<<"1"; else cout<<"0";

if (u.cod.b3) cout<<"1"; else cout<<"0";

if (u.cod.b2) cout<<"1"; else cout<<"0";

if (u.cod.b1) cout<<"1"; else cout<<"0";

cout<<endl;

}

Задание № 3. Составить программу на языке С++, вычисляющую средний балл каждого

ученика класса, если известны оценки ученика по математике, русскому языку и физике. Распечатать список учеников, имеющих средний балл выше среднего по классу. Информацию об

учениках класса представить с помощью структуры.

Фамилия Математика Русский язык ФизикаИванов 5 4 3

37

Page 38: 13 MR OP OAP · 2019-12-10 · Одномерные массивы. Многомерные массивы. Описание массивов в С++. Алгоритмы сортировки

Петров 4 5 4

Сидоров 3 4 2

Макарова 5 3 4

Харламова 4 4 4

Задание № 4. Составить программу на языке С++, которая среди работников данного

предприятия находит тех, чья заработная плата за месяц ниже средней по предприятию. Информацию о работниках предприятия представить с помощью структуры.

Фамилия Стаж Заработная платаРогов 5 25700

Масленников 12 23800

Боронина 2 20000

Гусев 14 35000

Свиридова 7 30500

ПРАКТИЧЕСКАЯ РАБОТА № 15. "КЛАССЫ И ОБЪЕКТЫ"

Цели: получение навыков работы со средой разработки Visual Studio, создание программ с

использованием классов на языке C++ в Visual Studio.

Теоретические вопросыПонятие класса в языке С++.Основное отличие класса от структуры.Синтаксис объявления класса.Базовые понятия ООП: инкапсуляция, наследование и полиморфизм.Открытые и закрытые члены класса.Понятие конструктора и деструктора.Задание № 1. Составить программу, в которой описывается класс «обыкновенная дробь» с

методами «Наибольший общий делитель числителя и знаменателя», «Сокращение дроби», «Возведение дроби в степень».

#include <iostream.h>

#include <math.h>

struct Frac{int P; int Q;}; // Описание дроби: числитель и знаменательFrac F;

class Drob {

Frac A;

public:

void Vvod(void); // Ввод дробиint NOD(void); // вычисление наибольшего общего делителя числителя и

// знаменателяvoid Sokr(void); // Сокращение дробиvoid Stepen(int N); // Возведение дроби в целую степень

38

Page 39: 13 MR OP OAP · 2019-12-10 · Одномерные массивы. Многомерные массивы. Описание массивов в С++. Алгоритмы сортировки

void Print(void); // Вывод дроби на экран};

void Drob::Vvod(void)

{

cout<<"Числитель? "; cin>>A.P;

cout<<"Знаменатель? "; cin>>A.Q;

}

int Drob::NOD(void)

{

int M,N;

M = abs(A.P); N = A.Q;

while (M != N)

{

if (M > N)

if (M % N != 0) M = M % N; else M = N;

else if (N % M != 0) N = N % M; else N = M;

}

return M;

}

void Drob::Sokr(void)

{

int X;

X = NOD();

if(A.P != 0)

{

A.P = A.P / X;

A.Q = A.Q / X;

}

else A.Q = 1;

}

void Drob::Stepen(int N)

{

int i;

F.P = F.Q = 1;

for(i=1; i<=N; i++)

{

F.P*=A.P; F.Q*=A.Q;

}

}

39

Page 40: 13 MR OP OAP · 2019-12-10 · Одномерные массивы. Многомерные массивы. Описание массивов в С++. Алгоритмы сортировки

void Drob::Print(void)

{

cout<<"\n"<<A.P<<"/"<<A.Q<<"\n";

}

void main(void)

{

Drob Y;

cout<<"Введите дробь."<<"\n";

Y.Vvod();

cout<<"Наибольший общий делитель числителя и знаменателя: "<<Y.NOD();

Y.Sokr();

cout<<"\nДробь после сокращения: ";

Y.Print();

Y.Stepen(2);

cout<<"Дробь, возведенная в квадрат: ";

cout<<F.P<<"/"<<F.Q<<"\n";

}

Задание № 2. Создать программу для расчета произведения вида s=a•b+c•k+a•c.

// применение конструктора и деструктора

#include <iostream>

#include <windows.h>

using namespace std;

class Pro

{

private:

int x,y,z;

public:

// прототипы методов

Pro(int,int); // конструктор

int putx(); //доступ к x

int puty(); //доступ к y

int putz(); //доступ к z

void proizv(); // произведение

~Pro(); // деструктор

};

// описание методов

Pro::Pro(int x1,int y1){x=x1; y=y1;}

int Pro::putx(){return x;}

int Pro::puty(){return y;}

int Pro::putz(){return z;}

void Pro::proizv(){z=x*y;}

40

Page 41: 13 MR OP OAP · 2019-12-10 · Одномерные массивы. Многомерные массивы. Описание массивов в С++. Алгоритмы сортировки

Pro::~Pro(){}

int main()

{

int s,a,b,c,k;

cout << "\n введите a,b,c,k \n";

cin>>a>>b>>c>>k;

Pro D=Pro(a,b); //создание и иницализация объекта D

Pro E(c,k); //создание и иницализация объекта E

Pro F(a,c); //создание и иницализация объекта F

D.proizv(); // получение произведения a*b

E.proizv(); // получение произведения c*k

F.proizv(); // получение произведения a*c

cout <<"\n D.a="<<D.putx();

cout <<"\t D.b="<<D.puty();

cout <<"\t D.z="<<D.putz();

s=D.putz()+E.putz()+F.putz();

cout<<"\n s="<<s<<"\n";

F.Pro::~Pro(); // уничтожение объекта F

E.Pro::~Pro(); // уничтожение объекта E

D.Pro::~Pro(); // уничтожение объекта D

}

Задание № 3. В текстовом файле хранится база отдела кадров предприятия. На предприятии

10 сотрудников. Каждая строка файла содержит запись об одном сотруднике. Формат записи: фамилия и инициалы (30 позиций, фамилия должна начинаться с первой позиции), год рождения

(5 позиций), оклад (10 позиций). Написать программу, которая по заданной фамилии выводит на

экран сведения о сотруднике, подсчитывая средний оклад всех запрошенных сотрудников.#include <iostream>

#include <cstring>

#include <fstream>

const char filename[] = "c:\\dbase.txt";

using namespace std;

const int l_name = 30; const int l_year = 5;

const int l_pay = 10;

const int l_buf = l_name + l_year + l_pay;

class Man

{

public:

Man(int lName = 30);

~Man();

bool CompareName(const char*) const;

int GetBirthYear() const { return birth_year; }

float GetPay() const { return pay; }

char* GetName() const { return pName; }

void Print() const;

41

Page 42: 13 MR OP OAP · 2019-12-10 · Одномерные массивы. Многомерные массивы. Описание массивов в С++. Алгоритмы сортировки

void SetBirthYear(const char*);

void SetName(const char*);

void SetPay(const char*);

private:

char* pName;

int birth_year;

float pay;

};

Man::Man(int lName)

{

cout << "Constructor is working" << endl;

pName = new char[lName + 1];

}

Man::~Man()

{

cout << "Destructor is working" << endl;

delete [] pName;

}

void Man::SetName(const char* fromBuf)

{

strncpy(pName, fromBuf, l_name);

pName[l_name] = 0;

}

void Man::SetBirthYear(const char* fromBuf)

{

birth_year = atoi(fromBuf + l_name);

}

void Man::SetPay(const char* fromBuf)

{

pay = atof(fromBuf + l_name + l_year);

}

bool Man::CompareName(const char* name) const

{

if((strstr(pName,name))&&(pName[strlen(name)]==' '))

return true; else return false;

}

void Man::Print() const

{

cout << pName << birth_year << ' ' << pay << “\n”;

}

int main()

{

const int maxn_record = 10; Man man[maxn_record+1];

42

Page 43: 13 MR OP OAP · 2019-12-10 · Одномерные массивы. Многомерные массивы. Описание массивов в С++. Алгоритмы сортировки

char buf [l_buf + 1]; char name[l_name + 1];

ifstream fin(filename);

if (!fin)

{

cout <<Rus("Нет файла ")<<filename<<endl;

return 1;

}

int i = 0;

while (fin.getline(buf, l_buf))

{

if (i > maxn_record)

{

cout << "Слишком длинный файл";

return 1;

}

man[i].SetName(buf);

man[i].SetBirthYear(buf);

man[i].SetPay(buf);

i++;

}

int n_record = i, n_man = 0;

float mean_pay = 0;

while (true)

{

cout << "Введите фамилию или слово end: ";

cin >> name;

if (0 = = strcmp(name, "end")) break;

bool not_found = true;

for (i = 0; i < n_record; ++i)

{

if (man[i].CompareName(name))

{

man[i].Print();

n_man++;

mean_pay += man[i].GetPay();

not_found = false;

break;

}

}

if (not_found) cout<<"Такого сотрудника нет"<<e

}

if (n_man) cout<< " Средний оклад: " << mean_pay /n_man << endl;

return 0;

}

43

Page 44: 13 MR OP OAP · 2019-12-10 · Одномерные массивы. Многомерные массивы. Описание массивов в С++. Алгоритмы сортировки

Задание № 4. Составить программу на языке С++, определяющую класс, который содержит в

качестве полей данных длины катетов прямоугольного треугольника, а также содержит методы, вычисляющие периметр и площадь прямоугольного треугольника:

,2

*

,

BAS

CBAP

где A, B – длина катетов прямоугольного треугольника; С – длина гипотенузы.Задание № 5. Составить программу на языке С++, определяющую класс, который содержит в

качестве полей данных значения двух действительных чисел, а также содержит методы, вычисляющие среднее арифметическое кубов этих чисел и среднее геометрическое модулей этих

чисел

,*

,2

2

33

BASG

BASA

где A, B – заданные числа; SA – среднее арифметическое чисел; SG – среднее геометрическое

чисел.

ПРАКТИЧЕСКАЯ РАБОТА № 16. "ИЗУЧЕНИЕ ИНТЕГРИРОВАННОЙ СРЕДЫ

РАЗРАБОТЧИКА. ПРИЛОЖЕНИЯ WINDOWS FORMS"

Цели: получение навыков работы со средой разработки Visual Studio, создание приложений

Windows Forms на языке C++ в Visual Studio.

Теоретические вопросыПонятие формы.Элементы управления.Определение свойств элементов управления.Интерактивное создание графического интерфейса пользователя.Обработчики событий.Задание № 1. Создайте новый проект – Windows Forms. В открывшемся окне программы

выберите команду: Файл – Создать – Проект:

44

Page 45: 13 MR OP OAP · 2019-12-10 · Одномерные массивы. Многомерные массивы. Описание массивов в С++. Алгоритмы сортировки

В открывшемся диалоге создания нового проекта выберите язык программирования Visual

C++, тип приложения Windows шаблон приложения Windows Forms:

Введите имя проекта и путь для его сохранения.В результате мастер создания приложений сгенерирует код приложения формы Windows и

отобразит окно конструктора, содержащее форму, как она будет отображена приложением:

Даже такое пустое приложение уже имеет код, хотя мы еще не создавали никаких описаний, функций и т.п. Для открытия окна кода достаточно щелкнуть по форме правой клавишей и мыши

и в контекстном меню выбрать Перейти к коду. При этом появится вкладка Form1.h, где и будет

располагаться код.

45

Page 46: 13 MR OP OAP · 2019-12-10 · Одномерные массивы. Многомерные массивы. Описание массивов в С++. Алгоритмы сортировки

Код определяет класс Form1, представляющий окно приложения. Прежде всего, следует

отметить, что он определен в собственном пространстве имен:namespace f_prim1_1 {

using namespace System;

using namespace System::ComponentModel;

using namespace System::Collections;

using namespace System::Windows::Forms;

using namespace System::Data;

using namespace System::Drawing;

Компиляция проекта приводит к созданию новой сборки, код которой относится к

пространству имен, совпадающему с именем проекта. Пространство имен позволяет различать

типы с одинаковыми именами в различных сборках, поскольку каждое имя типа уточняется

именем конкретного пространства имен.

Задание № 2. Опишите пространство имен библиотеки .NET:

Пространство имен СодержимоеSystem

System::ComponentModel

System::Collections

System::Windows::Forms

System::Data

System:: Drawing

Задание № 3. Опишите сгенерированный код приложения:public ref class Form1 : public Sys-tem::Windows::Forms::Form

{

public:

Form1(void)

{

InitializeComponent();

//

//TODO: добавьте код конструктора

//

}

protected:

/// <summary>

/// Освободить все используемые ресурсы. /// </summary>

~Form1()

{

if (components)

{

delete components;

}

46

Page 47: 13 MR OP OAP · 2019-12-10 · Одномерные массивы. Многомерные массивы. Описание массивов в С++. Алгоритмы сортировки

}

}

Задание № 4. Опишите окно свойств объекта Form1:

Задание № 5. Разместите на форме три кнопки, изменив свойство Text кнопок:

47

Page 48: 13 MR OP OAP · 2019-12-10 · Одномерные массивы. Многомерные массивы. Описание массивов в С++. Алгоритмы сортировки

Затем разместим на форме объект Label – он нужен для вывода надписи на форму. Его

разместим справа от кнопки «Вывод надписи». Его свойство Text просто очистим.Добавьте обработчики событий для кнопок: • при щелчке по кнопке «Вывод надписи» появится на форме надпись: Кнопка работает! (в

том месте, где мы разместили объект Label);

• при щелчке по кнопке «Смена цвета формы» форма поменяет цвет на красный, а при

повторном щелчке по этой же кнопке цвет вернется – станет серым; • при щелчке по кнопке «Закрыть» приложение закрывается, и мы вернемся в среду.

Проверьте работу приложения.

ПРАКТИЧЕСКАЯ РАБОТА № 17. "СОЗДАНИЕ ПРОЕКТА С ИСПОЛЬЗОВАНИЕМ

КОМПОНЕНТОВ ДЛЯ РАБОТЫ С ТЕКСТОМ"

Цели: получение навыков работы со средой разработки Visual Studio, создание приложений

Windows Forms на языке C++ в Visual Studio.

Теоретические вопросыКомпоненты для работы с текстом.

48

Page 49: 13 MR OP OAP · 2019-12-10 · Одномерные массивы. Многомерные массивы. Описание массивов в С++. Алгоритмы сортировки

Задание № 1. Составить проект для начисления заработно платы, исходя из задаваемого на

форме оклада, процента надбавки и предусмотреть вари-анты расчета – с премией (с указанием

процентов) или без премии (в конце необходимо учесть подоходный налог в 13 %). Вид

приложения:

Выберите на форме кнопку и выберите событие Click. Введите следующий код программы:

private: System::Void button1_Click (System:: Object^ sender, System::EventArgs^ e)

{

float okl; // переменная для величины оклада

float proc; // переменная для процента надбавки

float zar; // переменная для зарплаты

float procprem; //переменная для процента премии

okl=float::Parse(textBox1->Text);

proc=float::Parse(textBox2->Text);

49

Page 50: 13 MR OP OAP · 2019-12-10 · Одномерные массивы. Многомерные массивы. Описание массивов в С++. Алгоритмы сортировки

zar= okl+okl*proc/100 ;

if (radioButton1->Checked)

// если выбрано "с премией"

{ procprem=float::Parse(textBox3->Text);

zar=zar+zar*procprem/100; }

zar=zar – 0.13*zar;

label3->Text=

label3->Text+"\n"+zar.ToString()+" руб.";

}

}

Чтобы при выборе радиокнопки «С премией» появлялись надпись и окошко для ввода

процента премии, нужно для RadioButton1 создать событие Click вида: if (radioButton1->Checked)

{

textBox3->Visible=true;

label4->Visible=true;

}

Однако если снова выберем «Без премии», то нужно, чтобы надпись и окошко для ввода

процента премии исчезали. Это получится, если создать событие Click для кнопки RadioButton2

вида: if (radioButton2->Checked)

{

textBox3->Visible=false;

label4->Visible=false;

}

Приложения, содержащие окошко редактирования TextBox, следует усовершенствовать таким

образом, чтобы предусмотреть защиту – установить ограничение на ввод данных определенного

вида. Для этого используют событие KeyPress данного объекта textBox. Например, если при

выполнении проекта в окошко textBox1 должны вводиться только числа, то такое событие имеет вид:

private: System::Void textBox1_KeyPress (System:: Object^

sender, System:: Windows::Forms:: KeyPressEventArgs^ e)

{

if (! ((e->KeyChar>='0') && (e->KeyChar<='9') || (e->KeyChar==',')) )

e->KeyChar=Char(0);

};

Обратите внимание, у функции для этого события имеется параметр e->KeyChar, контролируя

который мы и задаем ограничение на ввод значений. В данном случае: если нажимаемая клавиша

не лежит в интервале от 0 до 9 и не является десятичной запятой, то символ не отображается

(Char(0)).

Задание № 2. Написать программу, которая вычисляет скорость (м/с), с которой бегун

пробежал дистанцию (дистанция может принимать значения от 0 до 100). Рекомендуемый вид

формы:

50

Page 51: 13 MR OP OAP · 2019-12-10 · Одномерные массивы. Многомерные массивы. Описание массивов в С++. Алгоритмы сортировки

ПРАКТИЧЕСКАЯ РАБОТА № 18. "СОЗДАНИЕ ПРОЕКТА С ИСПОЛЬЗОВАНИЕМ

КОМПОНЕНТОВ ВВОДА И ОТОБРАЖЕНИЯ ЧИСЕЛ, ДАТ И ВРЕМЕНИ"

Цели: получение навыков работы со средой разработки Visual Studio, создание приложений

Windows Forms на языке C++ в Visual Studio.

Теоретические вопросыКомпоненты ввода и отображения чисел.Компоненты ввода и отображения дат и времени.Задание № 1. Создать программу «Калькулятор. Обеспечить выполнение нужных операций с

отображением задаваемых цифр и результата на индикаторе. Вид приложения:

В окне кода после строк: public ref class Form1 : public System::Windows:: Forms:: Form

{ public:

опишем глобальные переменные: int f; // признак для проверки

// f=0 – вводится первый операнд операции

51

Page 52: 13 MR OP OAP · 2019-12-10 · Одномерные массивы. Многомерные массивы. Описание массивов в С++. Алгоритмы сортировки

// f=1 – вводится второй

int oper; // код операции: //0 – "=", 1– "+", 2 – "-", 3 – "*", 4 -"/"

float accum; // результат операций

Создадим для кнопки «1» для события Click функцию следующего вида: private: System::Void button9_Click(System::Object^ sender, Sys-tem::EventArgs^ e)

// функция отображения символа цифры

{ Char Ch; // символ цифры

// преобразование цифры в ее символ// т.е. код 0 есть 48, код 1 есть 49 и т.д. Ch=Char(((Button^)sender)->TabIndex+48);

switch ( ((Button^)sender)->TabIndex)

{

case 0:

case 1:

case 2:

case 3:

case 4:

case 5:

case 6:

case 7:

case 8:

case 9: if (f = =0) {textBox1->Text=Ch.ToString();f=1;}

else textBox1->Text=textBox1->Text+Ch.ToString();

}

f=1;

}

Обратите внимание, что мы сразу предусмотрели и все другие цифры. Поэтому можем

назначить эту же процедуру и всем остальным цифровым кнопкам, т.е. перейдем на вкладку

События и, последовательно выделяя каждую кнопку, событию Click для нее назначим ту же

функцию button1Click.

Аналогично разместим кнопки для операций и для кнопки очистки С. Для кнопок операций

также укажем свойство TabIndex следующим об-разом: 0 – для “=”, 1 – “+”, 2 – “-“, 3 – “*”, 4 – “/”.

Создадим процедуру, например, для кнопки “+”:

private: System::Void button12_Click (System::Object^ sender, Sys-tem::EventArgs^ e)

{

// функция выполнения операции

float numb;

numb=(float::Parse)(textBox1->Text);

if (f==0) oper=((Button^)sender)->TabIndex;

else

{

switch(oper)

{

52

Page 53: 13 MR OP OAP · 2019-12-10 · Одномерные массивы. Многомерные массивы. Описание массивов в С++. Алгоритмы сортировки

case 0: accum=numb; break;

case 1: accum=accum+numb; break;

case 2: accum=accum-numb; break;

case 3: accum=accum*numb; break;

case 4: accum=accum/numb; break;

}

oper=((Button^)sender)->TabIndex;

f=0;

textBox1->Text=(accum).ToString();

}

}

И также назначим эту функцию для остальных кнопок с операциями. Создадим отдельно функцию для кнопки “C”:

private: System::Void button17_Click(System::Object^ sender, System::EventArgs^ e)

{

textBox1->Text="0";

oper=0;

accum=0;

}

И создадим для кнопки “,” такую функцию: private: System::Void button11_Click(System::Object^ sender, System::EventArgs^ e)

{

textBox1->Text=textBox1->Text+",";

}

Кроме того, создадим функцию, срабатывающую в момент создания формы: private: System::Void Form1_Load(System::Object^ sender, System::EventArgs^ e)

{

textBox1->Text="";

oper=0;

}

Задание № 2. Создать программу-игру «Прыгающая кнопка»: кнопка будет прыгать по

поверхности формы с заданным интервалом и следует попасть по ней (щелкнуть на ней мышью). Предусмотреть возможность ускорить и замедлить движение кнопки. Вид приложения:

53

Page 54: 13 MR OP OAP · 2019-12-10 · Одномерные массивы. Многомерные массивы. Описание массивов в С++. Алгоритмы сортировки

Разместите объект Timer. Обратите внимание, что он разместится не на самой форме, а сразу

под ней. Поместим также нужное число кнопок и сменим на них надписи. Давайте сделаем так, чтобы через каждые полсекунды кнопка прыгала куда-нибудь. А задача пользователя – ее

поймать. Свойство Interval объекта Timer сделайте равным 500. Затем дважды щелкните по значку

Timer, чтобы открыть обработчик события. Начинаем писать код:

private: System::Void timer1_Tick(System::Object^ sender, System::EventArgs^ e)

{

int x,y;

// кнопка может прыгать по всей длине формы

x=rand()%((this->Size.Width)-100);;

// кнопка может прыгать по всей ширине формы

y=rand()%(this->Size.Height-100);

button1->Location=Point(x, y);

}

Щелкните два раза по кнопке button1, чтобы создать процедуру обработки щелчка. Введите

следующий код:

private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e)

{

timer1->Enabled=false;

button1->Text="Да!";

}

Осталось доработать кнопку Выход, а также кнопку Медленнее и кнопку Быстрее, при

нажатии на которые увеличивается или уменьшается интервал таймера. Функции события Click

для них имеют вид:

private: System::Void button2_Click(System::Object^ sender, System::EventArgs^ e)

54

Page 55: 13 MR OP OAP · 2019-12-10 · Одномерные массивы. Многомерные массивы. Описание массивов в С++. Алгоритмы сортировки

{

//кнопка «Быстрее»

timer1->Interval=timer1->Interval/2;

}

private: System::Void button3_Click(System::Object^ sender, System::EventArgs^ e)

{

//кнопка «Медленнее»

timer1->Interval=timer1->Interval*2;

}

private: System::Void button4_Click(System::Object^ sender, System::EventArgs^ e)

{

//кнопка «Выход»

this->Close();

}

Задание № 3. Создайте электронные часы, на которых будет отображаться текущее время, дата и день недели.

ПРАКТИЧЕСКАЯ РАБОТА № 19. "СОЗДАНИЕ ПРОЕКТА С ИСПОЛЬЗОВАНИЕМ

КНОПОЧНЫХ КОМПОНЕНТОВ"

Цели: получение навыков работы со средой разработки Visual Studio, создание приложений

Windows Forms на языке C++ в Visual Studio.

Теоретические вопросыКнопочные компоненты.Задание № 1. Организовать форму с семью кнопками, в зависимости от нажатия на которые

будет меняться цвет формы. Причем для реализации события Click для всех кнопок использовать

одну и ту же процедуру:

55

Page 56: 13 MR OP OAP · 2019-12-10 · Одномерные массивы. Многомерные массивы. Описание массивов в С++. Алгоритмы сортировки

Создадим событие для кнопки «красный» следующего вида: switch (((Button^ )sender)->TabIndex)

{

case 0: this->BackColor=Color::Red; break;

case 1: this->BackColor=Color::Orange; break;

case 2: this->BackColor=Color::Yellow; break;

case 3: this->BackColor=Color::Green; break;

case 4: this->BackColor=Color::SkyBlue; break;

case 5: this->BackColor=Color::Blue; break;

case 6: this->BackColor=Color::Violet; break;

case 7: this->BackColor=SystemColors::Control; break;

}

Далее в окне Свойства перейдем на вкладку События и укажем там, в строке Click (для

каждой кнопки) ту же процедуру button1Click.

Задание № 2. Создать приложение, которое позволяет рассчитать затраты для поездки на дачу

на автомобиле. Нужно вводить расстояние и цену на бензин, а также потребление бензина (на100 км пути). Здесь же потребуется использовать компонент CheckBox, а значит – если там стоит «галочка» – полученные затраты будут удваиваться.

56

Page 57: 13 MR OP OAP · 2019-12-10 · Одномерные массивы. Многомерные массивы. Описание массивов в С++. Алгоритмы сортировки

Функция для щелчка по кнопке «Вычислить»: private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e)

{

// кнопка "Вычислить"

float r,c,p,stoim;

r=float::Parse(textBox1->Text) ;

c=float::Parse(textBox2->Text);

p=float::Parse(textBox3->Text);

stoim=r/100*p*c;

if (checkBox1->Checked) stoim=stoim*2;

label4->Text="Стоимость вашей поездки на дачу \n составляет:" + (stoim).ToString()+" рублей";}

Задание № 3. Написать программу, которая вычисляет доход по вкладу сроком на 1, 6 или12 месяцев. Процентная ставка зависит от срока вклада: 1 месяц – 8 процентов, 6 месяцев –

10 процентов, 12 месяцев – 11 процентов. Доход = Сумма * Процент / 100 / 12 * СрокРекомендуемый вид формы:

57

Page 58: 13 MR OP OAP · 2019-12-10 · Одномерные массивы. Многомерные массивы. Описание массивов в С++. Алгоритмы сортировки

ПРАКТИЧЕСКАЯ РАБОТА № 20. "СОЗДАНИЕ ПРОЕКТА С ИСПОЛЬЗОВАНИЕМ

СПИСКОВ ВЫБОРА И ПОЛОС ПРОКРУТКИ"

Цели: получение навыков работы со средой разработки Visual Studio, создание приложений

Windows Forms на языке C++ в Visual Studio.

Теоретические вопросыСписки выбора.Полосы прокруткиЗадание № 1. Создать приложение со списком цветов. При выборе каждого из них – в поле

Edit появляется имя выбранного цвета и меняется цвет формы на выбранный:

58

Page 59: 13 MR OP OAP · 2019-12-10 · Одномерные массивы. Многомерные массивы. Описание массивов в С++. Алгоритмы сортировки

Дважды щелкаем на свойстве Items компонента ListBox и вводим список цветов: красный, оранжевый…

Создадим событие SelectedIndexChanged для него: private: System::Void listBox1_SelectedIndexChanged (Sys-tem::Object^ sender,

System::EventArgs^ e)

{

textBox1->Text=listBox1->SelectedItem->ToString() ;

//Strings[listBox1->SelectedIndex];

switch ( listBox1->SelectedIndex )

{

case 0: this->BackColor=Color::Red; break;

case 1: this->BackColor=Color::Orange; break;

case 2: this->BackColor=Color::Yellow; break;

case 3: this->BackColor=Color::Green; break;

case 4: this->BackColor=Color::SkyBlue; break;

case 5: this->BackColor=Color::Blue; break;

case 6: this->BackColor=Color::Violet; break;

}

}

Задание № 2. Создать приложение с двумя полосами прокрутки с выбором чисел от 1 до 10 и

вычислением суммы и произведения выбранных таким образом чисел:

59

Page 60: 13 MR OP OAP · 2019-12-10 · Одномерные массивы. Многомерные массивы. Описание массивов в С++. Алгоритмы сортировки

Создадим для первой полосы событие Scroll:

private: System::Void hScrollBar1_Scroll(System::Object^ sender,

System::Windows::Forms::ScrollEventArgs^ e)

{

label1->Text= "Первое число: "+(hScrollBar1->Value).ToString();

}

Аналогично создаем функцию события Scroll и для второй полосы прокрутки: private: System::Void vScrollBar1_Scroll(System::Object^ sender, Sys-

tem::Windows::Forms::ScrollEventArgs^ e)

{

label2->Text= "Второе число: "+(vScrollBar1->Value).ToString();

}

И для кнопки «Вычислить» событие Click :

private: System::Void button1_Click(System::Object^ sender, Sys-tem::EventArgs^ e)

{

int a,b,s,p;

a=hScrollBar1->Value;

b=vScrollBar1->Value;

s=a+b;

p=a*b;

label3->Text="Сумма = " + s.ToString();

label4->Text="Произведение = " + p.ToString();

}

Задание № 3. Написать программу, которая вычисляет стоимость жалюзи в зависимости от размера и материала (алюминий, пластик, текстиль), из которого они изготовлены:

Стоимость = Ширина * Высота * ТарифДля алюминия Тариф=700, для пластика Тариф=450, для текстиля Тариф=300.Рекомендуемый вид формы:

60

Page 61: 13 MR OP OAP · 2019-12-10 · Одномерные массивы. Многомерные массивы. Описание массивов в С++. Алгоритмы сортировки

ПРАКТИЧЕСКАЯ РАБОТА № 21. "СОЗДАНИЕ ПРОЕКТА С ИСПОЛЬЗОВАНИЕМ

КОМПОНЕНТОВ СТАНДАРТНЫХ ДИАЛОГОВ И СИСТЕМЫ МЕНЮ"

Цели: получение навыков работы со средой разработки Visual Studio, создание приложений

Windows Forms на языке C++ в Visual Studio.

Теоретические вопросыКомпоненты стандартных диалогов.Создание меню.Задание № 1. Создать приложение, которое выводит в поле richTextBox, размещенное на

форме, содержимое текстового файла, а также позволяет отредактировать этот текст (в том числе

и изменить шрифт) и сохранить в файл.

Как видим, нам нужно разместить элемент управления richTextBox (куда будет помещаться

текст из файла и где его будем редактировать), три кнопки: Открыть (файл), Сохранить (файл),

61

Page 62: 13 MR OP OAP · 2019-12-10 · Одномерные массивы. Многомерные массивы. Описание массивов в С++. Алгоритмы сортировки

Шрифт (изменить шрифт текста). Разместив эти элементы, сразу их настроим: сменим надписи на

кнопках (свойство Text у каждой кнопки), поле richTextBox растянем на всю оставшуюся часть

формы. Отметим, что содержимое этого поля хранится в свойстве Lines, которое имеет вид

массива: первая строка в окошке richTextBox может быть получена так:richTextBox1->Lines[0],

вторая так:richTextBox1->Lines[1], т.е. обратите внимание, что нумерация строк идет с нуля. Кроме того, разместим элементы: menuStrip – для организации меню на форме,

openFileDialog, saveFileDialog – для организации диалогов при открытии и сохранении файлов, а

также fontDialog – для организации диалога при смене шрифта. Мы эти элементы, как обычно, перетаскиваем на форму, но они будут находиться внизу, под самой формой. Для окон диалога

проведем настройку. Выберем openFileDialog1 на форме и у свойства Filter установим

richTextFile|*.rtf. Аналогично сделаем и у saveFileDialog1. В результате в окне диалога будут высвечиваться только файлы указанного типа. Обратим внимание, что данное окно richTextBox1

предназначено для работы именно с файлами типа rtf.

Далее нужно настроить меню: задать его пункты и подпункты. Для этого щелкнем по значку

menuStrip1 и вводим меню вида: &Файл &Редактирование&Открыть &Шрифт &Закрыть &Очистка

Значок «&» здесь помещаем для того, чтобы можно было вызывать соответствующий пункт с

помощью клавиши на клавиатуре. В данном случае пункт «Файл» будет вызываться клавишей

«Ф», подпункт «Открыть» клавишей «О» и т.д.Теперь разработаем события для всех этих пунктов. Дважды щелкаем по подпункту

“Открыть” и оформляем событие вида: private: System::Void открытьToolStripMenuItem_Click (Sys-tem::Object^ sender,

System::EventArgs^ e)

{

openFileDialog1->ShowDialog();

richTextBox1->LoadFile(openFileDialog1->FileName);

}

Аналогично создадим событие и для пункта «Сохранить»: private: System::Void сохранитьToolStripMenuItem_Click (Sys-tem::Object^ sender,

System::EventArgs^ e)

{

saveFileDialog1->ShowDialog();

richTextBox1->SaveFile(saveFileDialog1->FileName);

}

Для подпункта «Шрифт» событие имеет вид: private: System::Void шрифтToolStripMenuItem_Click (Sys-tem::Object^ sender,

System::EventArgs^ e)

{

fontDialog1->ShowDialog();

richTextBox1->Font=fontDialog1->Font;

62

Page 63: 13 MR OP OAP · 2019-12-10 · Одномерные массивы. Многомерные массивы. Описание массивов в С++. Алгоритмы сортировки

}

Для подпункта «Очистить»:

private:System::Void очиститьToolStripMenuItem_Click (Sys-tem::Object^ sender,

System::EventArgs^ e)

{

richTextBox1->Clear();

}

Заметим, что на форме имеются кнопки с аналогичными действиями. Поэтому кнопке

«Открыть» назначим то же событие открытьToolStripMenuItem_Click. Напомним, что для этого

достаточно выделив эту кнопку, перейти в окошко Properties и переключится на вкладку Events

(щелкнуть по значку «молния»), а там, в строке Click, щелкаем и выбираем нужное событие. Аналогично кнопке «Сохранить» назначим событие сохранитьToolStripMenuItem_Click, а

кнопке «Шрифт» событие шрифтToolStripMenuItem_Click.

ПРАКТИЧЕСКАЯ РАБОТА № 22. "СОЗДАНИЕ ПРОЦЕДУР ОБРАБОТКИ СОБЫТИЙ. КОМПИЛЯЦИЯ И ЗАПУСК ПРИЛОЖЕНИЯ"

Цели: получение навыков работы со средой разработки Visual Studio, создание приложений

Windows Forms на языке C++ в Visual Studio.

Теоретические вопросыПроцедуры обработки событий.Этапы разработки Windows-приложений.Задание № 1. Написать программу, которая вычисляет силу тока в электрической цепи.

Программа должна быть спроектирована таким образом, чтобы кнопка Вычислить была доступна

только в том случае, если пользователь ввел величину сопротивления.

Задание № 2. Написать программу, которая вычисляет сопротивление электрической цепи, состоящей из двух сопротивлений. Сопротивления могут быть соединены последовательно или

параллельно.

63

Page 64: 13 MR OP OAP · 2019-12-10 · Одномерные массивы. Многомерные массивы. Описание массивов в С++. Алгоритмы сортировки

Задание № 3. Дана запись с именем STUDENT, содержащая следующие поля: 1) фамилия и инициалы; 2) номер группы; 3) успеваемость (массив из пяти элементов). Написать программу, которая выполняет следующие действия: • ввод с клавиатуры данных из 10 записей типа STUDENT, и занесение их в файл данных; • чтение данных из файла и вывод их на экран; вывод на экран фамилий, номеров групп и оценок для всех студентов, которые являются

круглы• ми отличниками (если таких нет – вывести об этом сообщение); • список должен быть упорядочен по возрастанию номера группы.

64

Page 65: 13 MR OP OAP · 2019-12-10 · Одномерные массивы. Многомерные массивы. Описание массивов в С++. Алгоритмы сортировки

ПРАКТИЧЕСКАЯ РАБОТА № 23. "РАЗРАБОТКА ОКОННОГО ПРИЛОЖЕНИЯ С

НЕСКОЛЬКИМИ ФОРМАМИ"

Цели: получение навыков работы со средой разработки Visual Studio, создание приложений

Windows Forms на языке C++ в Visual Studio.

Теоретические вопросыПонятие многооконного приложения.Этапы разработки Windows-приложений.Многооконным называется приложение, которое позволяет пользователям работать с

несколькими разными окнами (или формами). Для создания такого приложения небходимо в

проект добавить новые формы и организовать их показ (открытие) в определенном порядке. Добавить новую форму в проект можно командой главного меню Проект. В открывшемся

диалоговом окне следует выбрать шаблон Windows Form, задать имя новой формы и нажать

кнопку Add. В результате появится информация о добавлении новой формы, а в окне просмотра

классов – сведения о классе добавленной формы.Чтобы члены класса добавленной формы (например, Form2) могли использоваться в классе

главной или любой другой формы, надо в h-файл для главной или другой формы перед самой

первой командой using namespace поместить оператор #include и команду using namespace с

указанием пространства имен проекта, например:#include "Form2.h"

using namespace Lab3_1;

При разработке проекта программисту всегда доступна какая-то одна форма. Eсли требуется

перейти к другой форме, добавленной ранее в проект, то следует переключиться на другую

вкладку для отображения нужной формы в соответствующем окне дизайнера. Например, если в

проекте две формы и вкладки, соответственно, помечены как Form1.h [Design] и Form2.h [Design],

то для вывода на экран второй формы надо щелкнуть на вкладке Form2.h [Design].

Форма, которая появляется в проекте при его создании, открывается первой по умолчанию, т.е. всегда считается главной, стартовой.

Когда добавлена новая форма к проекту, она не станет сама открываться при запуске

приложения на выполнение – ее надо открывать программно методами Show() или ShowDialog().

Порядок показа форм определяется алгоритмом работы приложения. Когда в проекте много

форм, то из главной формы нужно организовать активизацию определенных форм, которые, в

свою очередь, будут активизировать другие формы. Эта задача решается с помощью обработчиков

событий, в которых предусмотрен вызов методов, открывающих конкретные формы. Например, если при щелчке по главной форме должна быть показана в модальном режиме форма Form2,

ранее добавленная в проект, то в обработчик этого события следует включить следующие

операторы: Form2 ^newform = gcnew Form2(); // Создать экземпляр формы

newform->ShowDialog(); // Показать форму в модальном режимеЗадание № 1. Создать многооконное приложение на основе Windows Forms, включающее три

формы (главная форма, форма 2 и форма 3), каждая из которых должна идентифицироваться

пользователем по находящейся в заголовке формы надписи, содержащей название формы и

фамилию студента. Форма 2 должна открываться в обычном режиме при наступлении в главной

65

Page 66: 13 MR OP OAP · 2019-12-10 · Одномерные массивы. Многомерные массивы. Описание массивов в С++. Алгоритмы сортировки

форме одного из событий, указанных в таблице для соответствующего варианта задания, а форма

3 должна открываться в модальном режиме при наступлении в форме 2 другого из событий, указанных в таблице.

ПРАКТИЧЕСКАЯ РАБОТА № 24. "РАЗРАБОТКА ИГРОВОГО ПРИЛОЖЕНИЯ"

Цели: получение навыков работы со средой разработки Visual Studio, создание приложений

Windows Forms на языке C++ в Visual Studio.

Задание № 1. Написать программу, реализующую игру в кости.Правила игры1. Играющий называет любое число в диапазоне от 2 до 12 и ставку, которую он делает в этот

ход.2. Программа с помощью генератора случайных чисел дважды выбирает числа от 1 до 6

(бросает кубик, на гранях которого цифры от 1 до 6).

3. Если сумма выпавших очков:а) меньше либо равна 7 и играющий назвал число меньше либо равное 7, он выигрывает

ставку;б) больше 7 и играющий сделал ставку на число больше 7, он также выигрывает ставку;в) равна названному игроком числу (игрок угадал сумму цифр), он получает в 4 раза больше

очков, чем сделанная ставка;г) в противном случае ставка проиграна (если ни одна из ситуаций а-в не имеет места).

66

Page 67: 13 MR OP OAP · 2019-12-10 · Одномерные массивы. Многомерные массивы. Описание массивов в С++. Алгоритмы сортировки

В начальный момент у игрока и компьютера по 100 очков. Игра идет до тех пор, пока у кого-либо из играющих останется 0 очков.

ПРАКТИЧЕСКАЯ РАБОТА № 25. "СОСТАВЛЕНИЕ НАЧАЛЬНОЙ ИЕРАРХИИ И

СТРУКТУРЫ КЛАССОВ"

Цели: получение навыков работы со средой разработки Visual Studio, создание приложений с

использованием классов на языке C++ в Visual Studio.

Теоретические вопросыНаследование классов.Ограничение доступа для родственных классов.Конструкторы и деструкторы.Задание №1. Имеется базовый класс «Выпуклый четырехугольник» и производные классы,

им порожденные: параллелограмм, ромб, квадрат. Описать для указанных фигур методы

«Вычисление углов», «Вычисление диагоналей», «Вычисление длин сторон», «Вычисление

периметра», «Вычисление площади».#include <iostream.h>

#include <math.h>

//Объявление базового класса четырехугольниковclass FourAngle

{

protected:

double xl,yl,x2,y2,x3,y3,x4,y4,

A,B,C,D,D1,D2,

Alpha,Beta,Gamma,Delta,

P,S;

public:

void Init(void);

void Storony(void);

void Diagonal(void);

void Angles(void);

void Perimetr(void);

void Ploshad(void);

void PrintElements(void);

};

//Объявление класса параллелограммов – наследника четырехугольников

class Parall:public FourAngle

{

public:

void Storony(void);

void Perimetr(void);

void Ploshad (void);

67

Page 68: 13 MR OP OAP · 2019-12-10 · Одномерные массивы. Многомерные массивы. Описание массивов в С++. Алгоритмы сортировки

};

//Объявление класса ромбов – наследника параллелограммовclass Romb:public Parall

{

public:

void Storony(void);

void Perimetr(void);

};

//Объявление класса квадратов – наследника ромбовclass Kvadrat:public Romb

{

public:

void Angles(void);

void Ploshad(void);

};

//Описания функций – членов класса FourAngle четырехугольниковvoid FourAngle::Init(void)

{

cout<<"\nВведите координаты вершин:\n";cin>>xl>>yl>>x2>>y2>>x3>>y3>>x4>>y4;

}

void FourAngle::Storony(void)

{

A=sqrt((x2-xl)*(x2-xl)+(y2-yl)*(y2-yl));

B=sqrt((x3-x2)*(x3-x2)+ (y3-y2)*(y3-y2));

C=sqrt((x4-x3)*(x4-x3)+(y4-y3)*(y4-y3));

D=sqrt((x4-xl)*(x4-xl)+(y4-yl)*(y4-yl));

}

void FourAngle::Diagonal(void)

{

D1=sqrt((xl-x3)*(xl-x3) + (yl-y3)*(yl-y3));

D2=sqrt((x2-x4)*(x2-x4)+(y2-y4)*(y2-y4));

}

//Функция Ugol не является членом какого-либо класса.//Она выполняет вспомогательную роль для функции Angles.

//Эта функция может независимым образом использоваться и в основной программе

//для определения углов треугольника, заданного длинами сторонdouble Ugol(double Aa, double Bb, double Cc)

{

double VspCos, VspSin, Pi;

Pi=4*atan(1.0);

VspCos=(Aa*Aa+Bb*Bb-Cc*Cc)/2/Aa/Bb;

VspSin=sqrt(1-VspCos*VspCos);

if(abs(VspCos)>1.E-7)

68

Page 69: 13 MR OP OAP · 2019-12-10 · Одномерные массивы. Многомерные массивы. Описание массивов в С++. Алгоритмы сортировки

return (atan(VspSin/VspCos)+Pi*(VspCos<0))/Pi/180;

else return 90.0;

}

void FourAngle::Angles(void)

{

Alpha=Ugol(D,A,D2);

Beta=Ugol(A,B,D1);

Gamma=Ugol(B,C,D2);

Delta=Ugol(C,D,D1);

}

void FourAngle::Perimetr(void)

{

P=A+B+C+D;

}

void FourAngle::Ploshad (void)

{

double Perl,Per2;

Perl=(A+D+D2)/2;

Per2=(B+C+D1)/2;

S=sqrt(Perl*(Perl-A)*(Perl-D)*(Perl-D2))+

sqrt(Per2*(Per2-B)*(Per2-C)*(Per2-D1));

}

void FourAngle::PrintElements(void)

{

cout<<"Стороны: \n"<<A<<" "<<B<<" "<<C<<" "<<D<<"\n";

cout<<"Углы:\n"<<Alpha<<" "<<Beta<<" "<<Gamma<<" "<<Delta<<"\n";

cout<<"Периметр:\n"<<P<<"\n";cout<<"Площадь:\n"<<S<<"\n";

cout<<"Диагонали:\n"<<D1<<" "<<D2<<"\n";

}

//Описания функций – членов класса Storony параллелограммовvoid Parall::Storony (void)

{

A=sqrt((x2-xl)*(x2-xl)+(y2-yl)*(y2-yl));

B=sqrt((x3-x2)*(x3-x2)+(y3-y2)*(y3-y2));

C=A; D=B;

}

void Parall::Perimetr(void)

{

P=2*(A+B);

}

void Parall::Ploshad(void)

{

double Per;

69

Page 70: 13 MR OP OAP · 2019-12-10 · Одномерные массивы. Многомерные массивы. Описание массивов в С++. Алгоритмы сортировки

Per=(A+D+D2)/2;

S=2*sqrt(Per*(Per-A)*(Per-D)*(Per-D2));

}

//Описания функций – членов класса Romb ромбовvoid Romb::Storony(void)

{

A=B=C=D=sqrt((x2-xl)*(x2-xl)+(y2-yl)*(y2-yl));

}

void Romb::Perimetr(void)

{

P=4*A;

}

//Описания функций – членов класса Kvadrat квадратовvoid Kvadrat::Angles (void)

{

Alpha=Beta=Gamma=Delta=90.0;

}

void Kvadrat::Ploshad(void)

{

S=A*A;

}

//Основная функция. По координатам вершин квадрата//вычисляет и выводит все его параметрыvoid main (void)

{

Kvadrat obj; //Объявление объекта класса "квадрат"obj.Init();

obj.Storony();

obj.Diagonal();

obj.Angles();

obj.Perimetr();

obj.Ploshad();

obj.PrintElements();

}

Задание № 2. Объявить класс для строковых объектов. Конструктор с помощью оператора

new резервирует блок памяти для указателя stringl. Освобождение занятой памяти выполняет

деструктор с помощью оператора delete.

#include <iostream.h>

#include <string.h>

class string_operation

{

char *stringl;

public:

string_operation (int string_len) //конструктор70

Page 71: 13 MR OP OAP · 2019-12-10 · Одномерные массивы. Многомерные массивы. Описание массивов в С++. Алгоритмы сортировки

{

stringl=new char[string_len];}

~string_operation() //деструктор{delete stringl;}

void input_data(char*);

void output_data(char*);

};

void string_operation::input_data(char *s)

{

strcpy(stringl, s);

}

void string_operation::output_data(char *s)

{

strcpy(s, stringl);

}

void main()

{

char s1[10];

string_operation a(10);

a.input_data("Строка");

a.output_data(s1);

cout<<"Введена строка: "<<s1;

}

Задание № 3. Составить программу на языке С++, определяющую следующую иерархию

классов.

71

Page 72: 13 MR OP OAP · 2019-12-10 · Одномерные массивы. Многомерные массивы. Описание массивов в С++. Алгоритмы сортировки

ЛИТЕРАТУРА

Основные источники:

Печатное издание1. Семакин И.Г., Шестаков А.П. Основы алгоритмизации и программирования. - 2-е изд. – М.:

ОИЦ «Академия», 2018. - 304 с. ISBN 978-5-4468-6228-3

2. Голицына О.Л., Попов И.И. Основы алгоритмизации и программирования: Уч.пособие. -

М.: Форум, 2019. - 431 с. ISBN 978-5-91134-731-4

Дополнительные источники 1. Трофимов, В. В. Основы алгоритмизации и программирования : учебник для среднего

профессионального образования / В. В. Трофимов, Т. А. Павловская ; под редакцией В. В. Трофимова. — Москва : Издательство Юрайт, 2019. — 137 с. — (Профессиональное образование). — ISBN 978-5-534-07321-8. — Режим доступа : www.biblio-online.ru/book/osnovy-algoritmizacii-i-

programmirovaniya-441286

2. Черпаков, И. В. Основы программирования : учебник и практикум для среднего

профессионального образования / И. В. Черпаков. — Москва : Издательство Юрайт, 2019. — 219

с. — (Профессиональное образование). — ISBN 978-5-9916-9984-6. — Режим доступа :

www.biblio-online.ru/book/osnovy-programmirovaniya-436557

72

Класс A

protected-поля:

float a

float b

float c

float d

public-методы:

void V() – ввод значений a и b

void P() – вывод значений c и d

void Y() – вычисление 22 baс

void S() – вычисление a

d sin

Класс A1 (базовый класс A

наследуется как public-класс)

public-методы:

void Y() – вычисление baс

Класс A2 (базовый класс A

наследуется как public-класс)

public-методы:

void S() – вычисление b

ad ln