КАТЕГОРИИ:
АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника
|
PROGRAM text;CONST stopcode=’.’ {символ кінця послідовності }; VAR symbol:char; quantity:ARRAY[‘A’..’Z’] OF integer; BEGIN { присвоєння елементам масиву quantity нульових значень} FOR symbol:= ‘A’ TO ‘Z’ DO quantity[symbol]:=0; writeln (‘введіть послідовність символів,’); writeln (‘відмітивши її кінець символом’, stopcode); REPEAT Read(symbol); { враховуємо тільки букви } IF (symbol >=’A’) AND (symbol<=’Z’) THEN quantity[symbol]:=quflintity[symbol]+l UNTIL symbol=stopcode; Writeln; FOR symbol:=’A’ TO ‘Z’ DO writeln (‘кількість вxоджeнь букви’, symbol, ‘ – ‘,quantity[symbol]) END. Тут індекси масиву quantity належать до обмеженого типу (базовим для якого є стандартний тип char), а компоненти — до стандартного типу integer. 2. Скласти програму множення двох прямокутних матриць А та В. Добуток матриць А i В позначимо через С, де (i=1,2,…m; j=1,2,…l). Вважатимемо, що елементи матриць А і В вводяться по рядках. Для конкретності покладемо т = 4, п = 3. l == 2. PROGRAM multtply_matrix; CONST m=4; n=3; l=2; VAR i: 1..m; j: 1..l; k: 1..n; s: integer; a: ARRAY [1..m, 1..n] OF integer; b: ARRAY [1..n, 1..l] OF integer; c: ARRAY [1..m, 1..l] OF integer; BEGIN writeln(‘Введіть елементи матриці а'); FOR і:=1 TO m DO BEGIN FOR k:=l TO n DO read(a[i,k]); writeln END; writeln(‘Введіть, елементи матриці b'); FOR k:=1 TO n DO BEGIN FOR J:=1 TO l DO read (b[k,j]; writeln END; {множення матриць} writeln (‘добуток a*b’); FOR i:=l TO m DO BEGIN FOR j:=l TO l DO BEGIN s:=0; FOR k:=l TO n DO s:=s+a[i,k]*[k,j]; c[i,j]:=s; write (s,’ ‘) END; writeln END END.
2.9. Масиви символів. Тип даних string. Стандартні функції і оператори для роботи з рядками Масиви символів. Рядки символів у мові Паскаль використовуються як масиви. Рядки, що містять один символ, є константами стандартного типу char. Рядок, що містить п (п > 1) символів, вважається константою типу, який означається як упакований масив: PACKED ARRAY [1..n] OF char При цьому кожен символ є компонентом масиву. Службове слово PACKED вказує на те, що при розміщенні компонентів масиву в пам'яті ЕОМ більш економічно використовується пам'ять. Компоненти масиву запам'ятовуються в послідовно розміщених комірках пам'яті, причому для звичайних (неупакованих) масивів кожен з них займає поле в одне слово. Кількість байтів, які відводяться під слово, залежить від типу ЕОМ. Так, в деяких ЕОМ під слово відводиться чотири байти. В упакованих масивах в одному слові міститься кілька символів. Зокрема, під один символ може відводиться один байт пам'яті. Рядкова змінна — це упакований масив символів. Приклади опису рядкових змінних: VAR line : PACKED ARRAY [k..l] OF char; x: PACKED ARRAY [1..12] OF char; У програмі таким змінним можна присвоїти значення — рядок символів. Наприклад, х:= 'мова Паскаль' Довжина рядка не може змінюватися в процесі виконання програми. Тому будь-яке значення, яке присвоюється рядковій змінній, повинно містити ту кількість символів, яка вказана при опису змінної. Інакше виконання програми переривається i видається повідомлення про помилку. Наприклад, щоб помістити в х більш короткий рядок, треба доповнити рядок пропусками до 12 символів: х:= 'Мова Бейсік ‘ Дозволяється використовувати i неупакованi масиви символів. Наприклад, VAR у : ARRAY [1..12] OF char; Проте неупакований масив у в оперативній пам'яті займатиме більше місця, ніж упакований масив х. Властивості рядків випливають з властивостей масивів. Рядки одного того самого типу можуть фігурувати в операторах присвоювання. До них можна застосовувати операції відношення =,<>,<,< =. >. > = (тут рядки розглядаються як масиви літер і тому компоненти операцій відношення повинні мати однакову довжину). Результати операцій відношення залежать від того, як впорядковані символи. Правила впорядкування різні для різних ЕОМ. Проте в усіх випадках справедливі такі співвідношення: ‘A’ < ‘B’ <...< ‘Y’ < ‘Z’ ‘0’ < ‘1’ < … < ‘8’ < '9’ Порівняння рядків відбувається так: спочатку порівнюються перші зліва символи; якщо вони однакові, то порівнюються наступні символи і т. д. Наприклад, відношення 'BASIC’ < ‘PASCAL’, '25' > '200’, — істинні, а відношення ‘ ABC’= ‘ABC’ — хибне. Зауважимо, що стандартна процедура read не дає змоги автоматично читати рядки з вхідного файла. Якщо треба читати символьні рядки, то це виконується в циклі, посимвольно. Виводити ж на друк символьні змінні можна цілком (а не лише покомпонентно). Наприклад, writeln (line); writeln (x) Упаковані масиви можна використовувати в програмі так само, як і неупаковані, але їх іноді не дозволяється передавати процедурі чи функції як параметри-змінні. Програма з упакованими масивами працює повільніше (плата за економію пам'яті). Це пояснюється тим, що компоненти упакованого масиву вибираються повільніше, ніж компоненти неупакованого масиву. В деяких випадках швидкодію програми можна збільшити, скопіювавши упакований масив в неупакований перед його використанням. Якщо, наприклад, описано два масиви VAR а: ARRAY [m..n] OF char; pa : PACKED ARRAY [k..l] OF char;
|