Багатовимірні масиви.
Для оголошення багатовимірних масивів, діапазон індексів по кожному виміру перераховується в квадратних дужках через кому. Так, матриця 10х20 може бути задана наступним чином: Var matr : array [1..10,1..20] of real; а тривимірна матриця 10х20х15 може мати такий вигляд: Var matr3 : array [1..10,1..20,1..15] of real; Звернення до елементів багатовимірних масивів виконується наступним чином: matr[1,1] := 10; matr[5,3,4] := 1.3; тобто індекси по кожному виміру перераховуються через кому в квадратних дужках. Ввід і вивід масивів. Окремо розглянемо питання вводу або виводу елементів масивів. Ми вже знаємо про оператори Read і Writeта як звернутися до елементу масиву за його індексами, тому найпростіша програма зчитування одновимірного масиву могла б виглядати так:
ProgramName_61; Var a : array [1..4] of integer; Begin Read(a[1]); Read(a[2]); Read(a[3]); Read(a[4]); End.
Але уявіть як вона виглядатиме, коли розмірність масиву досягне сотень або тисяч. Тому завжди, коли над елементами масиву виконуються однотипні операції, доцільно описувати їх за допомогою циклів For.Наприклад, програма:
ProgramName_62; Var a : array [1..4] of integer; i : integer; Begin fori :=1 to 4 do Read(a[i]); End. має приємніший вигляд ніж попередня. Проте і її можна вдосконалити, бо якщо наступного разу нам потрібно буде зчитувати масив з іншою кількістю елементів, нам доведеться вишукувати всі 4 та замінювати їх на інші числа. Завжди доцільно задавати верхню (а в деяких випадках і нижню) границю індексів за допомогою констант. ProgramName_63; Const N = 4; Var a : array [1..N] of integer; i : integer; Begin fori :=1 to N do Read(a[i]); End. Тепер розглянемо випадок багатовимірного масиву, для нього цикли Forорганізуються по кожному з вимірів, і послідовно вкладаються один в один. Наприклад для матриці 10х20 можна написати наступну програму: ProgramName_64; Const M = 10; {кількість строк} N = 20; {кількість стовпців} Var a : array [1.. M, 1.. N] of integer;{Матриця MxN} i, j : integer; Begin fori :=1 to M do {цикл по строкам} forj :=1 to N do {цикл по стовпцям} Read(a[i,j]); {зчитування i,j-того елементу } End. Ця програма буде виконуватись наступним чином: · спочатку змінні i в першому циклі прийме значення 1, керування перейде до другого (вкладеного) циклу по j; · змінна j – приймає значення 1, зчитується елемент (1,1); · програма переходить до циклу по j, збільшивши j на 1 (j=2); · 2<= N отже виконається зчитування елементу (1,2); · і т.д. · останній елемент який зчитається таким чином буде (1,20); · після його зчитування значення j стане рівним 21; · умова 21<= N стане хибною; · цикл по j завершить свою роботу і передасть керування до циклу по i; · i збільшить своє значення на 1 (i =2); · умова i<= N – істинна, отже керування знову перейде до циклу по j; · змінна j – приймає значення 1, зчитується елемент (2,1); · така послідовність дій буде виконуватися поки не зчитається елемент (10,20); · тоді змінна i стане рівна 11, цикл по i ,а разом з ним і програма, завершить свою роботу.
Не важко помітити, що замінивши Read на Write можна організувати вивід матриці на екран:
fori :=1 to M do {цикл по строкам} forj :=1 to N do {цикл по стовпцям} Write(a[i,j]); {відображення i,j-того елементу }
Проте в цьому випадку всі данні будуть виводитися в одну строку, що не зручно для сприйняття. Тому в кінці кожного рядку, доцільно виконувати перехід на новий рядок наступним чином:
fori :=1 to M do {цикл по строкам} Begin forj :=1 to N do {цикл по стовпцям} Write(a[i,j]); {відображення i,j-того елементу } Writeln(); {переводить курсор на новий рядок} end; Приклад 6. Приклад 6. Знайти найбільший та найменший елементи кожного рядка матриці А(10х15) та записати їх різницю у вектор B. Вивести вектор B на екран.
1. Починаємо програму з вводу матриці: Const M = 10; {кількість строк} N = 15; {кількість стовпців} Var a : array [1.. M, 1.. N] of integer;{Матриця MxN} i, j : integer; Begin fori :=1 to M do {цикл по строкам} forj :=1 to N do {цикл по стовпцям} Read(a[i,j]); {зчитування i,j-того елементу }
2. Додамо оголошення змінних для пошуку максимального і мінімального елементів, та вектору для запису їх різниці. Var a : array [1.. M, 1.. N] of integer;{Матриця MxN} i, j : integer; b: array [1.. M] of integer;{Вектор довжиною M} max_a, min_a : integer; {для макс. і мін. значень}
3. Опишемо пошук для першого рядка: max_a:= a[1,1]; {значення максимуму і мінімуму встановлюємо} min_a := a[1,1]; {рівним першому елементу рядка} for j:=2 to N do Begin if a[1,j]>max_a then max_a:= a[1,j]; {якщо j – й елемент більше максимуму, то присвоюємо максимуму його значення} if a[1,j]<min_a then min_a:= a[1,j]; {якщо j – й елемент менше мінімуму, то присвоюємо мінімуму його значення} end; b[1]:= max_a- min_a; {записуємо в вектор, різницю знайдених значень} 4. Поширимо пошук на всі рядки:
for i:=1 to M do Begin max_a:= a[i,1]; {значення максимуму і мінімуму встановлюємо} min_a := a[i,1]; {рівним першому елементу рядка} for j:=2 to N do Begin if a[i,j]>max_a then max_a:= a[i,j]; {якщо j – й елемент більше максимуму, то присвоюємо максимуму його значення} if a[i,j]<min_a then min_a:= a[i,j]; {якщо j – й елемент менше мінімуму, то присвоюємо мінімуму його значення} end; b[і]:= max_a- min_a; {записуємо в вектор, різницю знайдених значень} end; 5. Запишемо програму повністю, додавши виведення вектору з результатами: ProgramLaba_6: Const M = 10; {кількість строк} N = 15; {кількість стовпців} Var a : array [1.. M, 1.. N] of integer;{Матриця MxN} i, j : integer; b: array [1.. M] of integer;{Вектор довжиною M} max_a, min_a : integer; {для макс. і мін. значень} Begin fori :=1 to M do {цикл по строкам} forj :=1 to N do {цикл по стовпцям} Read(a[i,j]); {зчитування i,j-того елементу } for i:=1 to M do Begin max_a:= a[i,1]; {значення максимуму і мінімуму встановлюємо} min_a := a[i,1]; {рівним першому елементу рядка} for j:=2 to N do Begin if a[i,j]>max_a then max_a:= a[i,j]; {якщо j – й елемент більше максимуму, то присвоюємо максимуму його значення} if a[i,j]<min_a then min_a:= a[i,j]; {якщо j – й елемент менше мінімуму, то присвоюємо мінімуму його значення} end; b[і]:= max_a-min_a; {записуємо в вектор, різницю знайдених значень} end; fori :=1 to M do Writeln(’b[’,i:2,’]=’,b[i]);{виведення вектору на екран} End.
При виконанні програма виведе на екран приблизно наступне: b[ 1]=10; b[ 2]=3; … b[10]=27; Блок-схема програми:
6.5. Індивідуальні завдання. Скласти алгоритм i програму розв’язання задач
1. Нормувати квадратну матрицю, поділивши усі елементи кожного рядка на найбільший за модулем елемент цього рядка. 2. Знайти найбільший елемент матриці А (20х30 ) і номер рядка та стовпця, у яких він знаходиться. 3. Задано одновимірний масив А. Знайти мінімальний за абсолютним значенням і відмінний від нуля елемент; утворити новий одновимірний масив В , щоб його елементи визначалися як ціле від ділення відповідного елемента масиву А на знайдений елемент. 4. Дано два одновимірних масиви довільної розмірності. Знайти суму максимальних елементів кожного масиву. 5. Дано два одновимірних масиви довільної розмірності. Знайти суму мінімальних елементів кожного масиву. 6. Є дві матриці. Підрахувати кількість елементів, які більше за абсолютним значенням ніж число S ( задається довільно ). 7. Записати (+1) замість максимального елемента масиву ( x1,x2,...,x50 ), а (-1) - замість мінімального. 8. Знайти і записати замість х1 найбільший елемент, а замість х2 - найменший для масиву (х1, х2,... х100 ). 9. Для масиву (а1,а2,...,а80 ) обчислити найбільше і найменше значення модуля різниці між сусідніми елементами. 10. Обчислити суму елементів матриці А (20х20), розміщених над головною діагоналлю. 11. Знайти найбільші елементи кожного рядка матриці X(20х20) і записати їх у масив Y. 12. Визначити середнє арифметичне додатних елементів кожного стовпця матриці Х ( 25х25 ) за умови, що у кожному стовпці є хоча б один додатний елемент. 13. Обчислити суми елементів кожного рядка матриці Х (20х20), визначити найменше значення цих сум і номер відповідного рядка. 14. Визначити кількість додатних і від'ємних елементів матриці А (10х15). 15. Визначити кількість додатних елементів кожного стовпця матриці А (10х20 ) і запам’ятати їх у масиві М. 16. Знайти найбільший елемент матриці Х (15х20 ) і записати нулi в той рядок та стовпець, де він знаходиться. 17. Знайти три найбільших елементи масиву (а1,а2,...,а30 ). 18. Перемножити матриці А(n x m) та B(m x l). Обчислити елементи результуючої матриці: 19. Переписати перші елементи кожного рядка матриці А (15х25 ), які більші ніж С, у масив В. Якщо в рядку немає елемента, який більше за С, записати нуль в масив В. 20. Визначити мінімальні елементи кожного рядка матриці Х ( 20х20 ) і помістити їх на головну діагональ, а діагональні елементи записати на місце мінімальних. 21. Обчислити суму елементів матриці С(25х25), які розміщені під головною діагоналлю. 22. Обчислити суму всіх непарних елементів матриці D(30х25), які розміщені в парних рядках. 23. Обчислити суму всіх парних елементів матриці R(25х20), які розміщені в непарних рядках. 24. Визначити середнє арифметичне всіх непарних елементів кожного парного стовпця матриці Х(25х30). 25. Упорядкувати елементи масиву (х1,х2,..,х50 ), розташувавши їх за спаданням в тому ж масиві. 26. Обчислити суми елементів парних рядків матриці Х (20х20), визначити найменше значення цих сум і номер відповідного рядка. 27. У квадратній матриці переставити рядки так, щоб кількість ненульових елементів у рядках зростала від першого рядка до останнього. 28. У прямокутній матриці переставити стовпці так, щоб сума елементів стовпця зростала від першого стовпця до останнього. 29. Упорядкувати елементи масиву (х1,х2,...,х60 ), розташувавши їх за спаданням у масиві . 30. Є дві квадратні матриці. Поміняти місцями їх головні діагоналі, спочатку упорядкувавши елементи діагоналей за зростанням.
7. Лабораторна робота №7. 7.1. Тип даних String. Тип даних String (рядок) в мові Паскаль використовується для роботи з текстовою інформацією. Змінні типу String складаються з послідовності символів, тобто елементів типу Char. Однак, на відміну від масивів символьного типу (array [1..N] of Char), кількість символів в рядку не обов’язково вказувати при оголошенні змінної, при цьому в довжина рядка приймається максимально можливою для типу String, а саме 255. Наприклад:
Var str1: string; {рядок до 255 символів} str2: string [20]; {рядок до 20 символів} str3: string [255]; {рядок до 255 символів}
Константи рядкового типу в програмі завжди обмежуються з обох сторін одинарними лапками. Наприклад:
str1:=’abc’; {в рядок str1 записується значення abc}
Також до рядків можна застосовувати операцію «+» - конкатенації, або зчеплення, яка зчіплює декілька рядків в один результуючий рядок. Наприклад:
str1:=’abc’+’defg’; {в рядок str1 запишеться abcdefg}
До кожного елементу рядка можна звернутися, як до елементу масиву, так для str1 з попереднього прикладу str[1]=’a’, str[2]=’b’, … , str[7]=’g’.
©2015 arhivinfo.ru Все права принадлежат авторам размещенных материалов.
|