Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Olgaritmizazziya лабки язык С 4 вариант / лб9 / АіП - Практична робота №9

.doc
Скачиваний:
1
Добавлен:
27.01.2024
Размер:
55.3 Кб
Скачать

Практична робота №9

Тема: Створення програм, що обробляють масиви величин різного типу. Двовимірні масиви: Обробка і пошук.

Мета: навчитися опрацьовувати двовимірні масиви даних – здійснювати прийнятний вивід даних. Отримати практичні навички роботи з вмістом двовимірного масиву.

Теоретична частина

Оголошення, введення і виведення двовимірного масиву

Оголошення int A[n] створює в пам'яті одновимірний масив: набір пронумерованих елементів, що йдуть в пам'яті послідовно. До кожного елементу масиву можна звернутися, вказавши один індекс - номер цього елемента. Але можна створити і двовимірний масив таким чином: int A[n][m]. Дане оголошення створює масив з n об'єктів, кожен з яких в свою чергу є масивом типу int [m]. Тоді A[i], де i приймає значення від 0 до n-1 буде в свою чергу одним з n створених звичайних масивів, і звернутися до елементу з номером j в цьому масиві можна через A [i][j].

Подібні об'єкти (масиви масивів) також називають двовимірними масивами. Двовимірні масиви можна представляти у вигляді квадратної таблиці, в якій перший індекс елемента означає номер рядка, а другий індекс - номер стовпця. Наприклад, масив A[3][4] складатиметься з 12 елементів і його можна записати у вигляді

A [0] [0] A [0] [1] A [0] [2] A [0] [3]

A [1] [0] A [1] [1] A [1] [2] A [1] [3]

A [2] [0] A [2] [1] A [2] [2] A [2] [3]

Для зчитування, виведення на екран і обробки двовимірних масивів необхідно використовувати вкладені цикли. Перший цикл - по першому індексу (тобто по всіх рядках), другий цикл - по другому індексу, тобто за всіма елементами в рядках (стовпцях). Наприклад, вивести на екран двовимірний масив у вигляді таблиці, розділяючи елементи в рядку одним пропуском можна таким чином:

int A [n][m];

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

{// Виводимо на екран рядок i

for (int j = 0; j <m; ++ j)

{

printf (“%i\t”, A[i][j]);

}

puts (“”);

Рядок завершується символом переходу на новий рядок

}

А вважати двовимірний масив з клавіатури можна за допомогою ще більш простого алгоритму (масив вводиться по рядках, тобто в порядку, відповідному першому прикладу):

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

{

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

{

scanf (“%i”, & A[i][j]);

}

}

Обробка двовимірного масиву

Обробка двовимірних масивів проводиться аналогічним чином. Наприклад, якщо ми хочемо записати в масив таблицю множення, тобто привласнити елементу A [i][j] значення i * j, це можна зробити наступним чином за допомогою вкладених циклів:

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

{

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

{

A [i] [j] = i * j;

}

}

Розглянемо більш складну задачу і кілька способів її вирішення. Нехай є квадратний двовимірний масив int A[n][n]. Необхідно елементам, що знаходяться на головній діагоналі, яка проходить з лівого верхнього кута в правий нижній (тобто тим елементам A[i][j], для яких i == j) присвоїти значення 1, елементам, що знаходяться вище головної діагоналі - значення 0, елементам , що лежать нижче головної діагоналі - значення 2. тобто отримати такий масив (приклад для n == 4):

1 0 0 0

2 1 0 0

2 2 1 0

2 2 2 1

Розглянемо кілька способів вирішення цієї задачі. Елементи, які лежать вище головної діагоналі - це елементи A[i][j], для яких i < j, а для елементів нижче головної діагоналі i > j. Таким чином, ми можемо порівнювати значення i і j і за ними визначати значення A[i][j]. Отримуємо наступний алгоритм:

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

{

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

{

if (i <j)

{

A[i][j] = 0;

}

else if (i> j)

{

A[i][j] = 2;

}

else

{

A[i][j] = 1;

}

}

}

Даний алгоритм поганий, оскільки виконує одну або дві інструкції if для обробки кожного елемента. Якщо ми ускладнимо алгоритм, то ми зможемо обійтися взагалі без умовних інструкцій.

Спочатку заповнимо головну діагональ, для чого нам знадобиться один цикл:

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

{

A[i][i] = 1;

}

Потім заповнимо значенням 0 всі елементи вище головної діагоналі, для чого нам знадобиться в кожній з рядків з номером i привласнити значення елементам A [i] [j] для j = i + 1, ..., n-1. Тут нам знадобляться вкладені цикли:

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

{

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

{

A [i] [j] = 0;

}

}

Аналогічно присвоюємо значення 2 елементам A [i] [j] для j = 0, ..., i-1:

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

{

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

{

A [i] [j] = 2;

}

}

Можна також зовнішні цикли об'єднати в один і отримати ще одне, більш компактне рішення:

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

{// Заповнюємо рядок з номером i

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

{

A[i][j] = 2; // Спочатку пишемо 2 нижче діагоналі

}

A[i][j] = 1; // Після завершення попереднього циклу i == j, пишемо 1

for (++ j; j <n; ++ j) // Цикл починаємо з збільшення j на 1

{

A[i][j] = 0; // Записуємо 0 вище діагоналі

}

}

Контрольні питання

  1. Для чого в програмах використовуються двовимірні масиви? Як вони описуються? Наведіть відповідні фрагменти коду.

  2. Скільки індексів характеризують конкретний елемент двовимірного масиву?

  3. Як в програмі використовувати значення конкретного елемента двовимірного масиву? Наведіть відповідні фрагменти коду.

  4. Як можна заповнити двовимірний масив? Наведіть відповідні фрагменти коду.

  5. Яку структуру даних описує двовимірний масив?

  6. Який індекс двовимірного масиву змінюється раніше при послідовному розміщенні елементів масиву в оперативній пам'яті?

Практичні завдання

  1. Дано двовимірний масив. визначити:

а) суму всіх елементів третього рядка масиву;

б) суму всіх елементів s-го стовпця масиву. s вводиться з клавіатури.

  1. Дано двовимірний масив. визначити:

а) суму всіх елементів другого стовпця масиву;

б) суму всіх елементів k-го рядка масиву. k вводиться з клавіатури.

  1. В двовимірному масиві зберігається інформація про кількість учнів у кожному класі кожної паралелі школи з першої по одинадцяту (в першому рядку - інформація про класи першої паралелі, в другій - другий паралелі і т. Д.). У кожній паралелі школи маються чотири класи. Визначити загальне число учнів в паралелі 5-х класів.

  2. У глядацькому залі 25 рядів, в кожному з яких 36 місць (крісел). Інформація про продані квитки зберігається в двовимірному масиві, номера рядків якого відповідають номерам рядів, а номера стовпців - номерам місць. Якщо квиток на те чи інше місце проданий, то відповідний елемент масиву має значення 1, в іншому випадку - 0. Скласти програму, що визначає число проданих квитків на місця в 12-му ряду.

  3. В двовимірному масиві зберігається інформація про кількість студентів в тій чи іншій групі кожного курсу інституту з першого по п'ятий (в першому рядку - інформація про групи першого курсу, в другій - другого і т. Д.). На кожному курсі є 8 груп. Скласти програму для розрахунку загального числа студентів на будь-якому курсі. Номер курсу вводиться з клавіатури.

  4. В поїзді 18 вагонів, в кожному з яких 36 місць. Інформація про продані на поїзд квитках зберігається в двовимірному масиві, номера рядків яких відповідають номерам вагонів, а номера стовпців - номерам місць. Якщо квиток на те чи інше місце проданий, то відповідний елемент масиву має значення 1, в іншому випадку - 0. Скласти програму, що визначає число вільних місць в будь-якому з вагонів поїзда. Номер вагону вводиться з клавіатури.

  5. Дано двовимірний масив. Визначити:

а) суму квадратів елементів четвертого стовпця масиву;

б) суму квадратів елементів k-го рядка масиву. k вводиться з клавіатури.

  1. Дано двовимірний масив. Визначити:

а) суму квадратів елементів другого рядка масиву;

б) суму квадратів елементів c-го шпальти масиву. с вводиться з клавіатури.

  1. Дано двовимірний масив. визначити:

а) суму всіх елементів масиву;

б) суму квадратів всіх елементів масиву;

в) середнє арифметичне всіх елементів масиву.

  1. Дано двовимірний масив. знайти:

а) суму елементів кожного рядка;

б) суму елементів кожної колонки.

  1. В двовимірному масиві зберігається інформація про кількість учнів у тому чи іншому класі кожної паралелі школи з першої по одинадцяту (в першому рядку - інформація про кількість учнів у перших класах, в другій - про друге і т. д.). У кожній паралелі є 4 класу. Визначити середню кількість учнів у класах кожної паралелі.

  2. Дано двовимірний масив. визначити:

а) суму елементів другого стовпця масиву, більших за 10;

б) суму елементів третього рядка масиву, що не перевищують 25;

в) кількість ненульових елементів першого рядка масиву;

г) кількість елементів другого стовпця масиву, більших 15.

  1. Дано двовимірний масив. визначити:

а) суму негативних елементів п'ятого рядка масиву;

б) суму елементів четвертого стовпця масиву, менших 100;

в) кількість елементів четвертого рядка масиву, менших 5;

г) кількість ненульових елементів другого стовпця масиву, великих 15.

  1. Дано двовимірний масив цілих чисел. визначити:

а) середнє арифметичне парних елементів третього стовпця;

б) середнє арифметичне елементів четвертого рядка, кратних трьом.

  1. Дано двовимірний масив цілих чисел. визначити:

а) середнє арифметичне непарних елементів п'ятого рядка;

б) середнє арифметичне елементів четвертого стовпця, кратних чотирьом.

  1. Дано двовимірний масив цілих чисел. визначити:

а) суму елементів масиву, більших 30;

б) кількість непарних елементів масиву;

в) середнє арифметичне парних елементів масиву;

г) суму тих елементів масиву, сума індексів яких дорівнює s. s вводиться з клавіатури.

  1. Дано двовимірний масив. знайти:

а) суму елементів в рядках з k1 по k2. номери рядків вводяться з клавіатури.

б) суму елементів в колонках з s1 по s2. номери колонок вводяться з клавіатури.

Соседние файлы в папке лб9