05.Масиви.Рядки.ppt
- Количество слайдов: 37
Масиви
Масивом називають скінчений набір елементів одного типу, що позначені одним ім'ям. У математиці поняттю масив відповідають поняття вектора та матриці. Розрізняють одно- та багатовимірні масиви, зокрема двовимірний масив являє собою таблицю, що складається з декількох рядків і стовпців. Загальний вигляд опису масиву такий: array [<розмір>] of <тип елементу масиву> ; Розмір масиву задають у вигляді діапазону або назви деякого перерахованого типу даних. Назву масиву задає користувач.
Приклад. Нехай у пам'яті комп'ютера розташована таблиця чисел, що представляє собою масив М : 2 33 76 Кожне число в таблиці має тип integer - це тип елементів масиву. Індекси можуть мінятися від 1 до 3. Таким чином, опис масиву виглядає так: Var М: array[1. . 3] of integer;
Описати масив можна у розділі опису змінних Var, у розділі типів Type, або у розділі констант Const. Наведемо декілька прикладів опису масивів: Type vektor=array[1. . 20] of extended; {тип вектор з 20 елементів типу extended} Const b: array[1. . 7] of word=(7, 5, 4, 9, 1, 3, 8); {масив-константа з 7 елементів типу word} Var A 1: array[boolean] of integer; {масив із двох елементів типу integer} A 2: array[char] of real; {масив з 256 елементів типу real} A 3: array[1. . 10] of double; {масив з 10 елементів типу double}
Над масивами визначена лише одна команда присвоєння. Наприклад С: =С 1 означає що всім елементам масиву С будуть присвоєні відповідні значення елементів масиву С 1 (відзначимо, що масиви С і С 1 повинні належати до того самого типу і мати однакову розмірність). Усі інші операції (присвоєння конкретних значень, додавання, віднімання та ін. ) визначені лише над елементами масиву. Доступ до елементу масиву здійснюється через назву масиву і номер елемента (його ще називають індексом) записаний в квадратних дужках.
Приклад 1. Описати масив з 10 цілих чисел і програмно заповнити його випадковими цілими числами з діапазону від 0 до 100. Program Masuv 1; Var a: array [1. . 10] of integer; i: integer; begin for i: =1 to 10 do begin a[i]: =random(101); writeln('a[', i: 2, ']=', a[i]); end.
Приклад 2. Заданий масив (-1, 2, -3, 5, 1, 7, -9, 6, 7, -2). Обчислити суму від’ємних елементів масиву, та підрахувати їх кількість.
Program Masuv 2; Const a: array [1. . 10] of integer=(-1, 2, -3, 5, 1, 7, -9, 6, 7, -2); Var i, n: integer; s: longint; begin n: =0; s: =0; for i: =1 to 10 do if a[i]<0 then begin n: =n+1; S: =S+a[i]; end; writeln('S=', S, ' n=', n); end.
Приклад 3. Задано масив b, елементи якого обчислюються за формулою , де Знайти максимальний елемент масиву, та його індекс.
Program Masuv 3; Var b: array [1. . 20] of real; i, imax: integer; max: real; begin for i: =1 to 20 do b[i]: =sqr(sin(i)); max: =b[1]; imax: =1; for i: =1 to 20 do if b[i]>max then begin max: =b[i]; imax: =i; end; writeln('b[', imax: 1, ']=', max: 15: 6); end.
Двовимірні масиви. Двовимірний масив являє собою таблицю, що складається з декількох рядків і стовпців. Приклад. Нехай у пам'яті машини розташована таблиця чисел, що представляє собою двовимірний масив М: 2 34 5 98 32 22 23 1 11 3 28 67 Кожне число в таблиці має тип integer. Перший індекс - номер рядка таблиці - може мінятися в даному прикладі від 1 до 3; другий індекс номер стовпця - може мінятися від 1 до 4.
Таким чином, опис цього масиву виглядає так: M: array [1. . 3, 1. . 4] of integer; Елементи двовимірного масиву визначаються іменем масиву та двома індексами: перший індекс означає номер рядка, а другий – номер стовпця, на перетині яких стоїть елемент. Наприклад M[1, 2] позначає елемент 34, отже оператор F: =M[1, 2] присвоїть змінній F значення 34.
Приклад. Описати двовимірний масив цілих чисел з 3 рядків і 4 стовпчиків. Елементам цього масиву присвоїти випадкові значення з діапазону від 0 до 500. Знайти максимальний елемент новоутвореного масиву та вивести його, а також його індекс.
Program Masuv 4; Var a: array [1. . 3, 1. . 4] of integer; i, j, max, imax, jmax: integer; begin for i: =1 to 3 do for j: =1 to 4 do a[i, j]: =random(501); max: =a[1, 1]; imax: =1; jmax: =1; for i: =1 to 3 do for j: =1 to 4 do if a[i, j]>max then begin max: =a[i, j]; imax: =i; jmax: =j; end; writeln('a[', imax: 1, ', ', jmax: 1, ']=', max); end.
Приклад 2. Заданий масив Обчислити суму квадратів від’ємних елементів масиву, та підрахувати їх кількість.
Program Masuv 5; Const M: array [1. . 3, 1. . 3] of integer= ((-2, 3, 8), (4, -9, -3), (-7, 5, 6)); Var i, j, n: integer; s: longint; begin n: =0; s: =0; for i: =1 to 3 do for j: =1 to 3 do if M[i, j]<0 then begin n: =n+1; S: =S+sqr(M[i, j]); end; writeln('S=', S, ' n=', n); end.
Рядки (string)
Рядковий тип String – довільна послідовність символів, але не більше 255 символів. Змінну типу рядок оголошують наступним чином: Var <змінна>: string[n]; де n довжина рядка, n<=255. У визначенні рядкового типу максимальна довжина рядка може бути задана цілим числом або константою цілого типу. Якщо максимальна довжина не вказана, то у цьому випадку мається на увазі число 255 (така довжина є максимально можливою для рядкових типів).
Для визначення рядкового типу використовується службове слово string, слідом за яким у квадратних дужках вказується максимальна довжина рядка, наприклад: Type Line : string[80]; Var My. Line : Line; У наведеному прикладі змінна My. Line може мати будь-яку послідовність символів (кожний з яких має стандартний тип char) довільної довжини (у межах від 0 до 80 символів).
При описі рядкової сталої символи беруть у лапки. Приклад: Const litera=’a’; slovo=’pascal’; Над змінними типу рядок визначені операції з’єднання (+) та порівняння (<, <=, >, >=, =, <>). Порівняння двох рядків здійснюється зліва направо до перших різних символів, причому 'A'<’B’, ‘B’<’C’ тощо. ”Більшим” вважається символ, який має більший номер в таблиці кодів ASCII.
Числовий код символу можна отримати за допомогою функції ord, наприклад ord(‘A’)=65. Зворотну дію виконує функція chr, яка по коду визначає символ. Наприклад chr(65)='A'
Функції й процедури для роботи з рядками Функції: Length(s) – визначає кількість символів в рядку s (тип результату - integer); Pos(substr, s) – визначає номер символу, з якого починається входження рядка substr в рядок s. Функція повертає цілочисельне значення, що відповідає індексу першого символу substr усередині s. Якщо рядок substr в рядку s не знайдений, то Pos повертає нуль. Copy(s, m, n) – копіює n символів рядка s починаючи з символу з номером m. Concat(s 1, s 2, . . . , sn) – з’єднує декілька рядків в один рядок. s 1, s 2, …, sn - рядки, що з’єднуються.
Процедури: Val (s, v, code) – присвоює числовій змінній v числовий образ рядка s. s - рядок цифр; v змінна типу real або integer, у неї заноситься результат; code - номер позиції в рядку, у якій при перетворенні відбулася помилка; якщо помилки не було, параметр code повертає нуль. Str(x, s) - перетворить числове значення в рядок цифр. x – число, що перетворюється; s - рядок, що повертається. Якщо x має тип real, то припустимі параметри, які визначають ширину поля й число знаків після коми. Наприклад Str(x: 10: 2, s).
Insert(s 1, s 2, index) - Вставляє один рядок s 1 у інший s 2, де index - позиція в рядку s 2, починаючи з якої вставляється рядок s 1. Якщо новий рядок в результаті виявляється надто довгим, то все, що в ньому є після 255 го символу відкидається. Delete(s, m, n) - вилучає n символів з рядка s починаючи з позиції заданої змінною m.
Приклади роботи з рядками. Приклад 1. Вивести на екран великі літери латинського алфавіту та їх коди. Program pruklad 1; var v: char; i: word; begin for v: =’A’ to ‘Z’ do begin for i: =1 to 3 do write(v, ord(v): 5, ’ ‘) writeln; end.
Program pruklad 2; var words 1, words 2, words 3, words 4, words 5: string[30]; i, n, k: integer; begin words 1: ='kartographija'; words 2: ='geodezija'; words 3: =words 1+' i '+words 2; writeln(words 3); {на екрані kartographija i geodezija} words 4: =copy(words 1, 1, 10); writeln(words 4); { на екрані kartograph} delete(words 1, 1, 5); writeln(words 1); { на екрані graphija} words 5: ='kardio'; insert(words 5, words 1, 1); writeln(words 1); { на екрані kardiographija} end.
Крім роботи з рядком, як єдиним цілим, за допомогою вище описаних функцій і процедур є ще можливість роботи з рядком, як з масивом символів. Наприклад, рядок a: =’Geodesia’ можна розглядати як масив елементів типу char. Тоді a[1]: =’G’, a[2]: =’e’, a[3]: =’o’, … a[8]: =’a’. Приклад 3. Підрахувати скільки разів зустрічається літера «а» в слові.
Program pruklad 3; var name: string[255]; i, n, k: integer; begin writeln('Enter name'); readln(name); n: =length(name); k: =0; for i: =1 to n do if (name[i]='a') or (name[i]='A') then k: =k+1; writeln('String name contens', k: 2, ' a'); end.
Приклад 4. Вилучити з рядка пропуски, коми і крапки, інші символи продублювати. Результат вивести на екран.
Program pruklad 4; var a, b, c: string; i: integer; begin writeln('Enter string'); readln(a); b: =’’; for i: =1 to Length(a) do begin c: =a[i]; if (c<>’, ’) and (c<>’ ’) then b: =b+c+c; end; writeln(b); end.
Приклад 5. Ввести прізвище, ім'я та по батькові як один рядок (прізвище, ім'я та по батькові відділені один від одного пробілом). Вивести кількість букв в імені. Вивести по батькові у зворотному порядку. Напишемо програму розглядаючи рядок як масив символів.
Program Rjadku; Var rjadok, prizwuche, imja, pobatkovi: string; i, n, n 1, n 2, m, k: word; begin prizwuche: =''; imja: =''; pobatkovi: =''; writeln('Enter prizw, imja, pobatkovi'); readln(rjadok); n: =length(rjadok); m: =0;
For i: =1 to n do if rjadok[i]=' ' then begin m: =m+1; if m=1 then n 1: =i; if m=2 then n 2: =i; end; For i: =1 to n 1 -1 do prizwuche: =prizwuche+rjadok[i]; For i: =n 1+1 to n 2 -1 do imja: =imja+rjadok[i];
For i: =n 2+1 to n do pobatkovi: =pobatkovi+rjadok[i]; k: =length(imja); Writeln('imja mae ', k, 'sumvoliv'); k: =length(pobatkovi); For i: =k downto 1 do write(pobatkovi[i]); readln; end.
Тепер те саме, але застосуємо до рядка процедури і функції. Program Rjadku 2; Var rjadok, prizwuche, imja, pobatkovi, r: string; i, n, n 1, n 2, m, k: word; begin prizwuche: =''; imja: =''; pobatkovi: =''; writeln('Enter prizw, imja, pobatkovi'); readln(rjadok);
n: =length(rjadok); n 1: =pos(' ', rjadok); prizwuche: =copy(rjadok, 1, n 1 -1); delete(rjadok, 1, n 1); n 2: =pos(' ', rjadok); imja: =copy(rjadok, 1, n 2 -1); delete(rjadok, 1, n 2); pobatkovi: =rjadok; k: =length(imja); Writeln('imja mae ', k, 'sumvoliv');
k: =length(pobatkovi); r: =''; For i: =k downto 1 do r: =r+copy(pobatkovi, i, 1); writeln(r); readln; end.
05.Масиви.Рядки.ppt