Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Программирование задач с применением структурированных данных. Лабораторный практикум.pdf
X
- •ВВЕДЕНИЕ
- •ОБРАБОТКА МАССИВОВ ДАННЫХ С ПРИМЕНЕНИЕМ ФУНКЦИЙ
- •1.1. Общие рекомендации по работе с динамическими массивами
- •1.2. Пример программы для работы с динамическими массивами
- •1.3. Первое задание к лабораторной работе № 1
- •1.4. Общие рекомендации по использованию функций
- •ЛАБОРАТОРНАЯ РАБОТА № 2
- •ПРОГРАММНАЯ ОБРАБОТКА СТРОК И СТРУКТУР
- •2.1. Общие рекомендации по работе со строками
- •1.5. Пример программы для работы с функциями
- •1.6. Второе задание к лабораторной работе № 1
- •1.8. Третье задание к лабораторной работе № 1
- •2.2. Пример программы для работы со строками
- •2.3. Первое задание к лабораторной работе № 2
- •2.4. Общие рекомендации по работе с данными типа string
- •2.5. Второе задание к лабораторной работе № 2
- •2.6. Общие рекомендации по работе со структурами
- •2.7. Пример программы для работы со структурами
- •2.8. Третье задание к лабораторной работе № 2
- •Итого
- •Итого
- •Итого
- •Итого
- •Итого
- •Итого
- •Итого
- •Итого
- •ПРОГРАММНЫЕ МЕТОДЫ РАБОТЫ
- •С ЦЕЛОЧИСЛЕННЫМИ ДАННЫМИ
- •3.1. Общие рекомендации
- •3.2. Первое задание к лабораторной работе № 3
- •3.3. Системы счисления и перевод чисел из одной системы в другую
- •3.4. Второе задание к лабораторной работе № 3
- •ЛАБОРАТОРНАЯ РАБОТА № 4
- •ТЕХНОЛОГИИ РАБОТЫ С ФАЙЛАМИ
- •4.1. Общие рекомендации по работе с файлами
- •4.2. Первое задание для лабораторной работы № 4
- •4.3. Пример программы для работы с файлами структур
- •4.4. Второе задание для лабораторной работы № 4
- •ЛАБОРАТОРНАЯ РАБОТА № 5
- •МЕТОДЫ СОРТИРОВКИ И ИХ ПРОГРАММНАЯ РЕАЛИЗАЦИЯ
- •5.1. Общие рекомендации по реализации методов сортировки
- •5.2. Задания к лабораторной работе № 5
- •ЛАБОРАТОРНАЯ РАБОТА № 6
- •ЛИНЕЙНЫЕ СПИСКИ
- •6.2. Пример программы работы с линейным списком
- •6.3. Задания к лабораторной работе № 6
- •ЛАБОРАТОРНАЯ РАБОТА № 7
- •ПРОГРАММНОЕ СОЗДАНИЕ И ИСПОЛЬЗОВАНИЕ КЛАССОВ
- •7.1. Общие рекомендации по работе с классами
- •7.2. Пример программы реализации класса
- •7.3. Задания к лабораторной работе № 7
- •ЛАБОРАТОРНАЯ РАБОТА № 8
- •РАБОТА С РОДИТЕЛЬСКИМИ И ДОЧЕРНИМИ КЛАССАМИ
- •8.2. Пример программы с виртуальными функциями
- •8.3. Виртуальные функции и абстрактные классы
- •8.4. Задания к лабораторной работе № 8
- •ЛАБОРАТОРНАЯ РАБОТА № 9
- •РАБОТА С КОНТЕЙНЕРНЫМИ КЛАССАМИ И МОДУЛЯМИ
- •9.1. Общие сведения о контейнерных классах и векторах
- •9.2. Общие сведения о модулях
- •9.3. Пример программы на С++
- •9.4. Задания к лабораторной работе № 9
- •ЗАКЛЮЧЕНИЕ
- •БИБЛИОГРАФИЧЕСКИЙ СПИСОК

Для вызова функции в простейшем случае нужно указать ее имя, за кото-
рым в круглых скобках через запятую перечисляются имена передаваемых параметров. Вызов функции может находиться в любом месте программы, где по
синтаксису допустимо выражение того типа, который формирует функция. Если тип возвращаемого функцией значения не void, она может входить в состав
выражений или, в частном случае, располагаться в правой части оператора присваивания.
При использовании в качестве параметра массива в функцию передается
указатель на его первый элемент, иными словами, массив всегда передается по
адресу. При этом информация о количестве элементов массива теряется, и следует передавать его размерность через отдельный параметр.
1.5. Пример программы для работы с функциями
Пример. Составить программу, которая в массивах M[20] и L[10] опреде-
ляет максимальный нечетный элемент, используя функцию.
Листинг программы на С++ приведен ниже.
#include <iostream>
using namespace std;
//Объявление функции поиска максимума
int max(const int* mas, const int n);
int main()
{
setlocale(LC_ALL, "");
int M[20];
int L[10];
//Ввод массива M
cout << "Введите массив M[20]\n";
for (int i = 0; i < 20; i++)
{
cout << "Введите M[" << i << "]=";
cin >> M[i];
}
//Ввод массива L
cout << "Введите массив L[10]\n";
for (int i = 0; i < 10; i++)
{
cout << "Введите L[" << i << "]=";
cin >> L[i];
}
//Вывод на экран массива M
cout << "\nМассив M[20]\n";
11

for (int i = 0; i < 20; i++)
cout << M[i] << " ";
//Вывод на экран максимального элемента среди
//нечетных путем вызова функции max
cout << "\nМаксимальный элемент массива M[20] среди нечетных =
" << max(M, 20);
//Вывод на экран массива L
cout << "\nМассив L[10]\n";
for (int i = 0; i < 10; i++)
cout << L[i] << " ";
//Вывод на экран максимального элемента среди
//нечетных путем вызова функции max
cout << "\nМаксимальный элемент массива L[10] среди нечетных =
" << max(L, 10);
cout << endl;
system("pause");
return 0;
}
//Описание функции max, которая находит максимальный элемент
// среди нечетных элементов массива
int max(const int* mas, const int n)
{
int k = 0, maxn;
for (int i = 0; i < n; i++)
if (mas[i] % 2 != 0)
if (k == 0)
{
k = 1;
maxn = mas[i];
}
else
if (maxn < mas[i])
maxn = mas[i];
return maxn;
}
12

1.6. Второе задание к лабораторной работе № 1
Вариант
Задание
1
Найти сумму целых элементов в вещественных массивах A[7] и
B[10].
2
Определить в целочисленных массивах K[10] и L[8] количество отрицательных элементов.
3
Найти в целочисленных массивах C[10] и D[12] сумму элементов,
кратных пяти.
4
Определить в вещественных массивах A[7] и B[12] наибольший по
модулю элемент
5
Найти в целочисленных массивах P[12] и Q[10] среднее арифметическое четных элементов
6
Определить в целочисленных массивах B[10], A[15] количество
четными числами
7
Найти в вещественных массивах P[15], X[10] число соседств двух
элементов с разными знаками
8
Определить в вещественных массивах X[15], Y[15], количество
элементов, равных А [A задается пользователем]
9
Найти в целочисленных массивах Q[15], P[12] число соседств двух
элементов с положительными знаками
10
Определить в символьных массивах A[10], B[20], сколько раз
встречается символ, заданный пользователем
11
В целочисленных массивах P[10], Q[8] найти сумму элементов, которые нечетны и отрицательны
12
Определить произведение элементов целочисленного массива
Q задаются пользователем]
Задание
При выполнении задания необходимо:
- написать и отладить программу на С++ в консольном режиме в соответ-
ствии с вариантом задания;
- варианты задания приведены в табл. 2; номер варианта совпадает с по-
рядковым номером студента в списке;
- проверить работу программы в консольном режиме.
Отчет
Отчет должен содержать титульный лист, вариант задания, текст про-
граммы с комментариями, скриншот результатов работы программы.
Варианты второго задания для реализации программы с функцией
Таблица 2
элементов, имеющих четные порядковые номера и являющихся не-
A[10], кратных P, и целочисленного массива B[7], кратных Q [P и
13

Продолжение табл. 2
Вариант
Задание
13
В целочисленных массивах X[10], Y[8] получить сумму всех эле-
пользователем]. Если такого элемента нет, то сумма равна 10.
14
В вещественных массивах V[7] и F[10] получить сумму элементов
больше значения, заданного пользователем
15
В целочисленных массивах H[10] и K[8] найти произведение всех
положительных элементов
16
В вещественных массивах K[9] и G[8] найти сумму всех элементов
входящих в интервал [-5;5]
17
В целочисленных массивах G[12] и F[11] найти сумму положительных четных элементов
18
В вещественных массивах T[10] и R[9] найти среднее арифметическое элементов, входящих в интервал, заданный пользователем
19
В вещественных массивах Y[7] и Z[12] найти количество элементов, входящих в интервал, заданный пользователем
20
В целочисленных массивах R[10] и Q[12] найти сумму элементов,
21
В целочисленных массивах S[11] и T[9] найти количество элементов кратных 5
22
В вещественных массивах Y[8] и Z[10] найти сумму отрицательных элементов
23
В целочисленных массивах S[8] и Z[9] найти максимальные отрицательные элементы
24
В целочисленных массивах X[8] и Y[7] найти минимальные положительные элементы
25
В целочисленных массивах Q[10] и X[12] найти произведение элементов, входящих в интервал, заданный пользователем
26
В вещественных массивах R[8] и Z[10] найти среднее арифметическое отрицательных элементов
27
В целочисленных массивах U[9] и M[10] найти количества нулевых
элементов
28
В целочисленных массивах T[9] и Q[11] найти, каких элементов
больше – положительных или отрицательных
29
Найти в целочисленных массивах C[10] и D[12] сумму элементов,
кратных пяти.
30
Найти в целочисленных массивах К[8] и L[10] количество положительных четных элементов
31
В целочисленных массивах D[8] и V[10] найти среднее арифметическое нечетных отрицательных элементов
ментов, следующих за первым элементом, равным A [A задается
входящих в интервал, заданный пользователем
14

Окончание табл. 2
Вариант
Задание
32
Найти в целочисленных массивах А[15], В[12] число соседств двух
элементов с одинаковыми знаками
33
Найти в целочисленных массивах А[10] и В[12] сумму элементов,
кратных трем.
34
Найти в целочисленных массивах А[10], В[12] число соседств двух
четных положительных элементов
35
Найти в целочисленных массивах Р[10], R[12] число соседств двух
нечетных отрицательных элементов
36
Найти в целочисленных массивах А[8] и Р[10] количество положительных нечетных элементов
37
Найти в целочисленных массивах М[10], N[12] число соседств двух
элементов, кратных пяти
38
В целочисленных массивах D[10] и V[12] найти среднее арифметическое элементов, кратных трем
39
В вещественных массивах R[10] и Z[12] найти количество максимальных элементов
40
В целочисленных массивах F[10] и S[15] найти количество минимальных элементов
1.7. Передача многомерных массивов в функцию в качестве
параметров
При передаче многомерных массивов все размерности, если они не из-
вестны на этапе компиляции, должны передаваться в качестве параметров.
Внутри функции массив интерпретируется как одномерный, а его индекс пересчитывается в программе.
Пример. Составить программу, которая в матрицах A[2,3] и B[3,4] опре-
деляет произведение и количество кратных 7 элементов, используя процедуру.
Листинг программы на С++ приведен ниже
#include <iostream>
#include <iomanip>
using namespace std;
//Функция ввода элементов массива
void vvod(int* mas, const int nstr, const int nstb, const char sym);
//Функция вывода элементов массива на экран
void vivod(const int* mas, const int nstr, const int nstb, const char sym);
//Функция поиска в массиве произведения и суммы
//элементов кратных 7
void poisk(const int* mas, const int nstr, const int nstb, const char sym);
//Главная функция main
15

int main()
{
setlocale(LC_ALL, "");
//Объявление массивов A и B
int A[2][3];
int B[3][4];
//Вызов функций ввода, поиска и вывода элементов
//массивов A и B
vvod(&A[0][0], 2, 3, 'A');
vvod(&B[0][0], 3, 4, 'B');
vivod(&A[0][0], 2, 3, 'A');
poisk(&A[0][0], 2, 3, 'A');
vivod(&B[0][0], 3, 4, 'B');
poisk(&B[0][0], 3, 4, 'B');
system("pause");
return 0;
}
//Описание функции vvod
void vvod(int* mas, const int nstr, const int nstb, const char sym)
{
cout << "\nМассив " << sym << "[" << nstr << "][" << nstb << "]\n";
for (int i = 0; i < nstr; i++)
for (int j = 0; j < nstb; j++)
{
cout << "Введите " << sym << "[" << i << "][" << j << "]=";
cin >> mas[i * nstb + j];
}
}
//Описание функции vivod
void vivod(const int* mas, const int nstr, const int nstb, const char sym)
{
cout << "\nМассив " << sym << "[" << nstr << "][" << nstb << "]\n";
for (int i = 0; i < nstr; i++)
{
for (int j = 0; j < nstb; j++)
cout << setw(4) << mas[i * nstb + j];
cout << endl;
}
}
//Описание функции poisk
void poisk(const int* mas, const int nstr, const int nstb, const char sym)
{
16

int sum = 0, proizv = 1;
Вариант
Задание
1
В вещественных матрицах P[2,3] и Q[3,3] найти количество и сред-
[C,D].
2
Найти в целочисленных матрицах M[2,3], и L[4,3] сумму и количество тех элементов, которые кратны 5 и не кратны 3.
3
В целочисленных матрицах K[5,5] и M[6,6] найти отдельно количество строк и столбцов, все элементы которых четны.
4
В целочисленных матрицах D[3,4] и F[2,3] заменить все отрицательные элементы на нули.
5
В вещественных матрицах T[3,4] и R[4,3] заменить все отрицательные элементы на -1, а положительные элементы – на 1.
6
В целочисленных матрицах N[3,4] и M[3,2] определить сумму и произведение всех нечетных положительных элементов.
for (int i = 0; i < nstr; i++)
for (int j = 0; j < nstb; j++)
if (mas[i * nstb + j] % 7 == 0)
{
sum = sum + mas[i * nstb + j];
proizv = proizv * mas[i * nstb + j];
}
cout << "\nСумма элементов массива " << sym << " кратных 7 = " << sum;
cout << "\nПроизведение элементов массива " << sym << " кратных 7 = "
<< proizv << "\n";
}
1.8. Третье задание к лабораторной работе № 1
Задание
При выполнении задания необходимо:
- написать и отладить программу на С++ в консольном режиме в соответ-
ствии с вариантом задания;
- варианты задания приведены в табл. 3; номер варианта совпадает с по-
рядковым номером студента в списке;
- проверить работу программы в консольном режиме.
Отчет
Отчет должен содержать титульный лист, вариант задания, текст про-
граммы с комментариями, скриншот результатов работы программы.
Варианты третьего задания для реализации программы с функцией
Таблица 3
нее арифметическое тех элементов, которые принадлежат интервалу
17

Продолжение табл. 3
Вариант
Задание
7
В целочисленных матрицах F[4,4] и G[2,2] заменить все элементы на
главной диагонали максимальным элементом.
8
В целочисленных матрицах K[4,4] и N[3,3] заменить все элементы
диагонали – на минимальный.
9
В вещественных матрицах S[4,2] и T[3,3] округлить все положительные элементы в большую сторону, а отрицательные – в меньшую.
10
В целочисленных матрицах D[3,3] и R[3,2] заменить на нули все
элементы, большие значения, введенного пользователем.
11
В целочисленных матрицах D[4,4] и R[3,3] заменить на нули все
элементы выше главной диагонали.
12
В целочисленных матрицах A[3,5] и Q[2,4] заменить все элементы,
большие 9 на нули.
13
В вещественных матрицах V[3,4] и S[3,2] найти количество столбцов, сумма элементов которых больше нуля.
14
В вещественных матрицах А[3,4] и Q[4,3] найти среднее арифметическое каждого из столбцов.
15
В вещественных матрицах В[3,4] и К[4,3] найти среднее арифметическое каждого из столбцов, имеющих четные номера.
16
Строку матрицы с номером i назовем отмеченной, если aii > 0, и не-
и R[3,3] заменить все элементы в отмеченных строках на 10.
17
В целочисленных матрицах D[3,3] и F[4,4] заменить нулями все ее
элементы, расположенные на главной диагонали и выше нее.
18
В вещественных матрицах W[3,4] и V[4,3] найти сумму элементов
строк и среди них минимальную сумму.
19
Строку матрицы с номером i назовем отмеченной, если элемент на
отрицательных элементов, расположенных в отмеченных строках.
20
В вещественных матрицах Z[3,4] и X[4,3] найти максимальный, минимальный элементы и их сумму.
21
В целочисленных матрицах K[4,4] и N[3,3] заменить элементы с
наибольшим значением на 100.
22
В вещественных матрицах Y[3,4] и X[4,3] найти среднее арифметическое наибольшего и наименьшего элементов.
23
В вещественных матрицах G[3,4] и F[4,3] найти наибольший элемент, кратный пяти.
24
В вещественных матрицах A[3,4] и S[4,3] найти сумму наибольших
значений элементов строк.
25
В целочисленных матрицах D[4,4] и F[3,3] найти сумму элементов
Предполагается, что такой элемент единственный.
выше главной диагонали на максимальный элемент, а ниже главной
отмеченной в противном случае. В целочисленных матрицах D[4,4]
главной диагонали больше нуля, и неотмеченной в противном случае. В целочисленных матрицах D[4,4] и R[3,3] подсчитать число
строки, в которой расположен элемент с наименьшим значением.
18

Окончание табл. 3
Вариант
Задание
26
В вещественных матрицах A[4,4] и S[3,3] все элементы умножить на
мент единственный.
27
В вещественных матрицах W[4,4] и V[3,3] найти произведение элементов строк и среди них максимальное произведение.
28
Строку матрицы с номером i назовем отмеченной, если элемент на
на -1, положительные – на 1, нулевые оставить без изменения.
29
В целочисленных матрицах D[4,4] и F[3,3] указать индексы всех
элементов. С наибольшим значением.
30
В вещественных матрицах X[4,4] и Y[3,3] найти в каждой строке
наибольше. Указать индексы элемента с найденным значением.
31
В вещественных матрицах S[3,3] и Q[4,4] найти наибольший элемент
в строке, номер которой задан пользователем.
32
В целочисленных матрицах D[4,4] и F[3,3] указать столбец, в котором находится наибольшая сумма модулей элементов столбца.
33
В вещественных матрицах A[3,4] и S[4,3] найти сумму наибольших
значений элементов столбцов.
34
Строку матрицы с номером i назовем отмеченной, если элемент на
положительных элементов, расположенных в отмеченных строках.
35
В целочисленных матрицах А[4,4] и F[3,3] определить сумму эле-
отрицательны, то сумме присвоить 100.
36
В целочисленных матрицах Н[4,4] и М[3,3] найти номера строк, где
об этом.
37
В вещественных матрицах D[3,3] и Z[4,4] найти число отрицательных элементов в строке, номер которой задан пользователем.
38
В целочисленных матрицах D[4,4] и F[3,3] заменить нулями все ее
элементы, расположенные на главной диагонали и ниже нее.
39
В целочисленных матрицах А[4,4] и К[3,3] найти сумму элементов
Предполагается, что такой элемент единственный.
40
В целочисленных матрицах R[4,4] и H[3,3] все элементы умножить
противном случае умножить на два.
два, если наибольший элемент находится на главной диагонали, в
противном случае умножить на три. Предполагается, что такой эле-
главной диагонали из этой строки больше нуля, и неотмеченной в
противном случае. В целочисленных матрицах В[4,4] и К[3,3] заменить все элементы в отмеченных строках: отрицательные заменить
элемент с наименьшим значением, затем среди этих чисел выбрать
главной диагонали больше нуля, и неотмеченной в противном случае. В целочисленных матрицах
D[4,4] и R[3,3] подсчитать число
ментов, расположенных за первым отрицательным элементом в
строке, номер которой задан пользователем. Если все элементы не-
все элементы одинаковы. Если одинаковых строк нет, то сообщить
столбца, в которой расположен элемент с наибольшим значением.
на три, если наименьший элемент находится на главной диагонали, в
19

ЛАБОРАТОРНАЯ РАБОТА № 2
Функция
Назначение
gets_s(str)
Считывает строку, введенную пользователем с клавиатуры,
и записывает ее в переменную str.
strcat_s(s1, s2)
Функция добавляет строку s2 к s1 и возвращает s1.
strcpy_s(s1, s2)
Функция копирует строку s2 в s1 и возвращает s1.
strcmp(s1,s2)
Сравнивает строки s1 и s2. Функция возвращает положи-
длинная строка.
strlen(s)
Функция возвращает длину строки s (при этом символ конца строки не учитывается).
strncat_s(s1, s2,
n)
Функция добавляет не более n символов из строки s2 к s1 и
возвращает s1.
ПРОГРАММНАЯ ОБРАБОТКА СТРОК И СТРУКТУР
2.1. Общие рекомендации по работе со строками
Цель лабораторной работы - освоение методик программирования за-
дач, работающих со строковыми данными и структурами.
Строка – это массив символов, заканчивающийся нуль-символом. Нуль-
символ – это символ с кодом, равным 0. Он записывается в конец строки в виде
управляющей последовательности ‘\0’. По положению нуль-символа определяется фактическая длина строки.
Пример описания строки:
char str[10] = “My text”;
В этом примере под строку выделяется 10 байт. Фактически занято дан-
ными семь символов, а восьмой символ – это нуль-символ.
Если строка при определении инициализируется, ее размерность можно
опускать (компилятор сам определит длину строки и выделит соответствующее
количество байт). Например:
char str[] = “Program”; // выделено и заполнено 8 байт
В табл. 4 приведены основные функции для работы со строками. Функция
gets находится в модуле stdio.h, остальные в модуле – string.
Таблица 4
Основные функции для работы со строками
тельное (если s1 больше s2), нулевое (если s1 равно s2) или
отрицательное (если s1 меньше s
ными, когда они полностью совпадают по составу символов.
Строка считается больше другой, если в ней раньше встречается символ с кодом больше. Если одна строка полностью
совпадает с началом другой, то большей считается более
20
2). Строки считаются рав-
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
