Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование задач с применением структурированных данных. Лабораторный практикум.pdf
Скачиваний:
0
Добавлен:
07.09.2026
Размер:
1 Мб
Скачать
☆
Для вызова функции в простейшем случае нужно указать ее имя, за кото-
рым в круглых скобках через запятую перечисляются имена передаваемых па­раметров. Вызов функции может находиться в любом месте программы, где по синтаксису допустимо выражение того типа, который формирует функция. Ес­ли тип возвращаемого функцией значения не 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). Строки считаются рав-
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]