Лабораторна робота № 6
Оброблення одновимірного масиву
1. Порядок виконання роботи
1.1. Скласти алгоритмічною мовою Фортран програму оброблення одновимірного масиву.
1.2. Відлагодити на комп’ютері складену програму.
1.3. Ввести числові дані та отримати результат.
1.4. Скласти звіт про роботу й захистити його.
2. Вказівки до виконання роботи
2.1. Приклади задач оброблення одновимірних масивів
Задачі оброблення одновимірних масивів різноманітні за змістом. Найбільш розповсюджені багаторазові обчислення за формулами для різних значень змінних, визначення кількості елементів, які задовольняють заданим умовам, обчислення сум і добутків таких елементів та інші.
Розглянемо декілька прикладів задач оброблення одновимірних масивів.
Приклад 1. Для одновимірного масиву А, який складається з 30 елементів, підрахувати суму всіх його додатних членів.
Один із можливих варіантів програми:
У цій програмі для обчислення суми додатних елементів організовано цикл. У ньому арифметичний умовний оператор переходу передбачає обхід операції додавання для всіх від’ємних і нульових елементів масиву А.
Приклад 2. Для одновимірного масиву В, який складається з 20 елементів і записаний у файлі MASB.DAT за форматом 5F7.2, підрахувати суму від’ємних і добуток його додатних елементів.
Один із можливих варіантів програми:
С
Оголошення розміру масиву



DIMENSION B(20)

С
Відкривання файла вхідної інформації



OPEN (1, FILE = ‘MASB.DAT’, STATUS = ‘OLD’)

C
Введення вхідних даних



1
READ (1, 1) B
FORMAT (5F7.2)

C
Закривання файла вхідної інформації


CLOSE (1)

С
“Очищення“ комірки пам’яті, де буде вестися підрахунок суми



S = 0.

C
Записування числа 1 у комірку пам’яті, де буде вестися підрахунок добутку



D = 1.

C
Початок циклу



DO 4 I = 1, 20

C
Аналізування B(i)



IF (B(І)) 2, 4, 3


B(i) < 0. Обчислення суми від’ємних елементів,
перехід на кінець циклу


2
S = S + B(I)
GOTO 4

C
B(i) > 0. Обчислення добутку додатних елементів


3
D = D*B(I)

C
С
B(i) = 0.
Закінчення циклу


4
CONTINUE

C
С
Друкування суми від’ємних і добутку додатних елементів
на екран монітора



WRITE (*, *) ‘ S =’, S
WRITE (*, *) ‘ D =’, D

C
Закінчення роботи програми



STOP
END


Тут, як і у попередній програмі, для обчислення суми від’ємних і добутку додатних елементів організовано цикл. У ньому арифметичний умовний оператор переходу передбачає вибір операції додавання для всіх від’ємних елементів масиву В і операції множення – для всіх додатних елементів. На відміну від “очищення“ комірки пам’яті S, де буде вестися підрахунок суми, у комірку пам’яті D, де буде вестися підрахунок добутку, записуємо 1.
Приклад 3. Для одновимірного масиву C, який складається з N елементів, скласти фрагмент програми визначення мінімального елемента та його порядкового номера.
У даному випадку розмір масиву C необхідно задати конкретним числом, наприклад, 100. Значення змінної N слід ввести в пам’ять комп’ютера. Очевидно, що це значення повинно знаходитися в межах 1 ? N ? 100. При необхідності (N > 100) розмір масиву можна змінити.
Один із можливих варіантів фрагменту програми:
С
Припускаємо, що перший елемент масиву С є мінімальним



Amin = C(1)

C
Його порядковий номер 1



K = 1

C
Початок циклу



DO 1 I = 2, N

C
Перевіряння умови Amin < C(i)



IF (Amin .LT. С(І)) GOTO 1


C
Ні, Amin ? C(i).
Присвоєння змінній Amin знайденого мінімального значення елемента масиву
та його порядкового номера



Amin = C(I)
K = I

C
Так, Amin < C(i).

С
Закінчення циклу


1
CONTINUE


Тут для визначення мінімального елемента припускаємо, що перший елемент масиву є мінімальним і його значення присвоюємо змінній Amin. Далі у циклі, починаючи з другого елемента масиву до його останнього значення N, порівнюємо Amin із значенням кожного елемента масиву, тобто перевіряємо умову Amin < C(і). Коли ця умова справджується, то це означає, що значення змінної Amin є найменшим із проаналізованих. У випадку, коли умова не справджується, то аналізоване значення С(і) є мінімальним, його присвоюємо змінній Amin та фіксуємо порядковий номер і елемента масиву.
Приклад 4. Для одновимірного масиву L цілих додатних чисел, який містить N елементів, скласти фрагмент програми визначення кількості всіх парних чисел масиву та їх суми.
Для визначення того, чи число елементу L(I) масиву є парним чи ні, включимо у програму оператор
L1 = L(I) – L(I)/2 * 2 + 1
Враховуючи особливості виконання операції ділення для цілих чисел, легко зауважити, що змінна L1 може набувати одне з двох значень:
L1 = 1 – для парних чисел масиву;
L1 = 2 – для непарних чисел масиву.
Наприклад, число, записане в L(I) елементі масиву, є парним і нехай дорівнює 12. Тоді L1 = 12 – 12/2*2 + 1 = 1. Для непарного числа L(I) елементу масиву, нехай 7, L1 = 7 –– 7/2*2+ 1 = 2, бо результат ділення 7/2 для цілих чисел буде 3.
Один із можливих варіантів фрагменту програми:
С
“Занулення” лічильника кількості парних чисел масиву



LK = 0

C
“Очищення” комірки пам’яті, де буде вестися підрахунок суми



LS = 0

C
Початок циклу



DO 1 I = 1, N

C
Визначення змінної L1



L1 = L(I) – L(I)/2 * 2 + 1

С
Використання оператора переходу за обчисленням



GOTO (2, 1) L1

С
C
L1 = 1. Елемент масиву парний.
Обчислення кількості парних чисел масиву та їх суми


2
LK = LK + 1
LS = LS + L(I)

С
С
L1 = 2. Елемент масиву непарний.
Закінчення циклу


1
CONTINUE


Приклад 5. Обчислити та вивести на екран дисплея значення функції

для заданих значень її аргументів:
x = – 1,2; – 0,2; 1,4; 3,6;
y = 0,5; 1,0; 1,5.
Задана функція має два аргументи. Їх значення можна задати масивами чисел X i Y відповідно розміру 4 і 3.
Один із можливих варіантів програми:
С
Оголошення розміру масивів



DIMENSION X(4), Y(3)

C
Введення вхідних даних



1
2
READ (*, 1) X
FORMAT (4F5.1)
READ (*, 2) Y
FORMAT (3F4.1)

C
Початок циклів



DO 3 I = 1, 4
DO 3 J = 1, 3

C
Обчислення значення функції



F = X(I)**2*SIN(X(I)+Y(J)) – Y(J)

С
Друкування значень аргументів x, y та функції f



4
WRITE (*, 4) X(I), Y(J), F
FORMAT (2x, 2F5.1, E10.4)

С
Закінчення циклів


3
CONTINUE

C
Закінчення роботи програми



STOP
END


Приклад 6. Задані масиви А і В відповідно розміру 20 і 10. Необхідно обчислити різницю суми парних елементів масиву А і добутку непарних елементів масиву В.
Один із можливих варіантів програми:
С
Оголошення розміру масивів



DIMENSION А(20), В(10)

C
Введення вхідних даних



1
READ (*, 1) А
FORMAT (5F7.2)
READ (*, 1) В

C
“Очищення” комірки пам’яті, де буде вестися підрахунок суми



S = 0.

C
Обчислення суми парних елементів масиву А



2
DO 2 I = 2, 20, 2
S = S + A(I)

C
Записування числа 1 у комірку пам’яті, де буде вестися підрахунок добутку



D = 1.

C
Обчислення добутку непарних елементів масиву В



3
DO 3 I = 1, 10, 2
D = D* B(I)

C
Обчислити різницю суми парних елементів масиву А і добутку непарних елементів масиву В



R = S – D

С
Друкування обчисленої різниці



WRITE (*, 4) R


4
FORMAT (5x,’R = ‘, E10.4)

C
Закінчення роботи програми



STOP
END


Приклад 7. Обчислити:
середню оцінку, яку отримали студенти групи на іспиті;
кількість студентів, які отримали оцінку вищу, ніж середня;
кількість студентів, які отримали двійку;
кількість студентів, які отримали трійку;
кількість студентів, які отримали четвірку;
кількість студентів, які отримали п’ятірку.
Для виконання обчислень сформуємо файл STUDVH.DAT вхідної інформації у вигляді:
Група ЕМ-11
Кількість студентів у групі 25
Оцінки студентів на іспиті:
4 3 5 3 3 4 3 5 4 3
4 4 3 5 5 3 4 4 4 5
3 5 4 5 4
Середня оцінка
Кількість студентів, які отримали оцінку вищу, ніж середня
Кількість студентів, які отримали двійку
Кількість студентів, які отримали трійку
Кількість студентів, які отримали четвірку
Кількість студентів, які отримали п'ятірку
Цей файл містить текстові та цифрові дані. У таких випадках зчитування інформації та її передачу у файл вихідної інформації варто здійснювати по одному рядку.
Один із можливих варіантів програми:
С
Оголошення розміру масивів



DIMENSION IOT(30)
CHARACTER*60 TX()

С
Відкривання файла вхідної інформації STUDVH.DAT



OPEN (1, FILE = ‘STUDVH.DAT’, STATUS = ‘OLD’)

С
Відкривання файла вихідної інформації STUDVY.DAT



OPEN (2, FILE = ‘STUDVY.DAT’, STATUS = ‘UNKNOWN’)

C
C
C
C
C
C

Введення вхідних даних з файла вхідної інформації
і їх виведення у файл вихідної інформації
(введення і виведення здійснюється по одному рядку).
Назва групи



1
READ (1, 1) TX
WRITE (2, 1) TX
FORMAT (A60, I2)

C
Порожній рядок



READ (1, 1) TX
WRITE (2, 1) TX

C
C
C
Кількість студентів у групі
(кількість N студентів у групі не може бути більшою, ніж 30;
якщо N > 30, то необхідно внести зміни в оператор опису розміру масиву IOT)



READ (1, 1) TX, N
WRITE (2, 1) TX, N

С
Оцінки студентів на іспиті



3
READ (1, 1) TX
WRITE (2, 1) TX
READ (1, 3) (IOT(I), I = 1, N)
WRITE (2, 3) (IOT(I), I = 1, N)
FORMAT(10I2)

C
Обчислення середньої оцінки



4
SUM = 0.0
DO 4 I = 1, N
SUM = SUM + IOT(I)
SER = SUM/N

C
Обчислення кількості студентів, які отримали вищу оцінку, ніж середня



5
NS = 0
DO 5 I = 1, N
IF (IOT(I) .GT. SER) NS =NS + 1
CONTINUE

C
Обчислення кількості студентів, які отримали двійку



2
N2 = 0
DO 2 I = 1, N
IF (IOT(I) .EQ. 2) N2 = N2 + 1
CONTINUE
VN2 = N2*100./N

C
Обчислення кількості студентів, які отримали трійку



8
N3 = 0
DO 8 I = 1, N
IF (IOT(I) .EQ. 3) N3 = N3 + 1
CONTINUE
VN3 = N4*100./N

C
Обчислення кількості студентів, які отримали четвірку



9
N4 = 0
DO 9 I = 1, N
IF (IOT(I) .EQ. 4) N4 = N4 + 1
CONTINUE
VN4 = N5*100./N

C
Обчислення кількості студентів, які отримали п’ятірку



6
N5 = 0
DO 6 I = 1, N
IF (IOT(I) .EQ. 5) N5 = N5 + 1
CONTINUE
VN5 = N5*100./N

C
Середня оцінка



7
READ (1, 7) TX
WRITE (2, 7) TX, SER
FORMAT(A60, F4.2)

C
Кількість студентів, які отримали оцінку вищу, ніж середня



READ (1, 1) TX
WRITE (2, 1) TX, NS

C
Кількість студентів, які отримали двійку



10
READ (1, 1) TX
WRITE (2, 10) TX, N2, VN2
FORMAT(A60, I2, ‘ (’, F5.2, ‘%)’)

C
Кількість студентів, які отримали трійрку



READ (1, 1) TX
WRITE (2, 10) TX, N3, VN3

C
Кількість студентів, які отримали четвірку



READ (1, 1) TX
WRITE (2, 10) TX, N4, VN4

C
Кількість студентів, які отримали п’ятірку



READ (1, 1) TX
WRITE (2, 10) TX, N5, VN5

C
Закривання файлів



CLOSE (1)
CLOSE (2)

C
Закінчення роботи програми



STOP
END


В результаті виконання програми утвориться файл STUDVY.DAT вихідної інформації:
Група ЕМ-11
Кількості студентів у групі 25
Оцінки студентів на іспиті:
4 3 5 3 3 4 3 5 4 3
4 4 3 5 5 3 4 4 4 5
3 5 4 5 4
Середня оцінка 3.96
Кількість студентів, які отримали оцінку вищу, ніж середня 17
Кількість студентів, які отримали двійку 0 ( .00%)
Кількість студентів, які отримали трійку 8 (32.00%)
Кількість студентів, які отримали четвірку 10 (40.00%)
Кількість студентів, які отримали п'ятірку 7 (28.00%)
Для виконання обчислень за даною програмою слід мати на увазі, що кількість студентів у групі не може перевищувати 30. При більшій кількості студентів у групі слід внести зміни в оператор опису розміру масиву IOT.
Увага! Оператор формату, позначений міткою 1,
FORMAT (A60, I2)
дає можливість введення і виведення інформації одночасно з використанням алфавітно-цифрової специфікації перетворення (А60) і цифрової специфікації перетворення (І2). Тому у файлі вхідної інформації довжина поля, яке містить холеритівські знаки, не може перевищувати 60 символів, що достатньо для запису необхідних текстів, наприклад, для найдовшого з них “Кількість студентів, які отримали оцінку вищу, ніж середня”. При цьому числа, наприклад, 25 (кількості студентів у групі), повинні бути записаними з використанням цифрової специфікації перетворення І2 у 61-й і 62-й позиціях. Це стосується і форматів, позначених мітками 7 і 10.
Пара операторів, наприклад,
READ (1, 1) TX
WRITE (2, 10) TX, N3, VN3
зчитує із файла вхідної інформації (за каналом 1) текстову інформацію і виводить її у файл вихідної інформації (за каналом 2) разом із обчисленими величинами.
Оцінки студентів на іспиті необхідно записувати по десять у рядку в його парних позиціях для їх введення за форматом 10І2.
Для обчислення суми оцінок, які отримали студенти на іспиті, використана не ціла, а дійсна змінна SUM, що дає можливість за оператором
SER = SUM/N
обчислити середню оцінку як дійсне число.
Тут слід звернути увагу і на оператори обчислення у відносних одиницях кількості студентів, які отримали певні оцінки. Так, наприклад, для обчислення у відносних одиницях кількості студентів, які отримали п’ятірку, використано оператор
VN5 = N5*100./N
Вираз N5*100./N набуде дійсного значення, яке присвоїться дійсній змінній VN5, бо для його знаходження використовується дійсна константа 100,0.
2.2. Завдання
Для заданої сукупності п’ятнадцяти чисел
9,07; 12; –5; 0; 0,01; 0,13; –17,26; –1; –22,5; –17,1; 0; 0,06; –0,01; –1; 3,14,
записаної у файлі DaniL6.DAT у довільному форматі, при В = –1 необхідно:
1. Обчислити кількість елементів, які не більші від В.
2. Обчислити кількість елементів, які більші від В.
3. Знайти порядковий номер елементу з максимальним значенням.
4. Знайти порядковий номер елементу з мінімальним значенням.
5. Знайти максимальне число.
6. Знайти мінімальне число.
7. Обчислити суму елементів.
8. Обчислити суму перших п’яти елементів.
9. Обчислити суму останніх п’яти елементів.
10. Обчислити суму елементів, більших від В.
11. Обчислити суму елементів, менших від В.
12. Обчислити суму парних елементів.
13. Обчислити суму непарних елементів.
14. Обчислити суму елементів, порядковий номер яких кратний числу 3.
15. Обчислити суму додатних елементів.
16. Обчислити суму від’ємних елементів.
17. Обчислити добуток елементів, відмінних від нуля.
18. Обчислити суму перших п’яти елементів, відмінних від нуля.
19. Обчислити добуток останніх п’яти елементів, відмінних від нуля.
20. Обчислити добуток елементів, відмінних від нуля і більших від В.
21. Обчислити добуток елементів, менших від В.
22. Обчислити добуток парних елементів, відмінних від нуля.
23. Обчислити добуток непарних елементів, відмінних від нуля.
24. Обчислити добуток елементів, відмінних від нуля і порядковий номер яких кратний числу 3.
25. Обчислити добуток додатних елементів.
26. Обчислити добуток від’ємних елементів.
27. Порахувати кількість додатних елементів.
28. Порахувати кількість від’ємних елементів.
29. Порахувати кількість нульових елементів.
30. Порахувати кількість елементів, більших від В.
31. Порахувати кількість елементів, менших від В.
32. Порахувати кількість елементів, модуль яких більший від одиниці.
33. Порахувати кількість елементів, модуль яких менший від одиниці.
34. Знайти номер першого елементу, який дорівнює заданому числу В.
35. Знайти номер останнього елементу, який дорівнює заданому числу В.
36. Знайти номери елементів, які дорівнюють нулю.
37. Знайти номери елементів, які дорівнюють нулю або заданому числу В.
38. Знайти номери додатних елементів.
39. Знайти номери від’ємних елементів.
40. Знайти номери першого і останнього додатних елементів.
41. Знайти номери першого і останнього від’ємних елементів.
42. Вивести одновимірний масив, елементи якого відрізняються від заданого у файлі DaniL6.DAT знаком.
43. Обчислити середнє значення елементів.
44. Обчислити кількість елементів, більших за їх середнє значення.
45. Обчислити кількість елементів, модуль яких менший за модуль їх середнього значення.
Завдання підвищеної складності.
Для одновимірного масиву, заданого у файлі DaniL6.DAT, необхідно:
1*. Розташувати елементи масиву у порядку зростання їхніх значень.
2*. Розташувати елементи масиву у порядку спадання їхніх значень.
3*. Розташувати елементи масиву у порядку зростання значень їхніх модулів.
4*. Розташувати елементи масиву у порядку спадання значень їхніх модулів.
5*. Вивести порядкові номери елементів масиву у порядку зростання їхніх значень.
6*. Вивести порядкові номери елементів масиву у порядку спадання їхніх значень.
7*. Вивести порядкові номери елементів масиву у порядку зростання значень їхніх модулів.
8*. Вивести порядкові номери елементів масиву у порядку спадання значень їхніх модулів.