Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Паскаль - лекциии.doc
Скачиваний:
0
Добавлен:
10.12.2019
Размер:
1 Mб
Скачать

Var ім’я_масиву: ім'я_типу;

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

Приклад :

Type mas=array[1.. 5]of integer;

Var A,B,C:mas;

Масиви A,B,C використовуються в розділі операторів програми, а тип масиву mas введений формально тільки у розділі опису і ніде у програмі не вказується і не використовується.

Упаковані масиви.

З метою економії пам'яті при використовуванні символьних даних в мові Паскаль введено поняття упакованого масиву. Елементи упакованого масиву зберігаються по 2 в 1 слові. Упакований масив символьних даних має слідуючий вигляд:

Туре ім 'я_типу=Packed Array[t1] of char;

У даному випадку перший елемент масиву приймає значення першого символу. Як і не упакований, упакований масив описують у розділі type:

Туре імя_muny=Packed Array[t1]of char;

Var ім’я_мас:ім 'я_типу;

Елементи упакованого масиву використовують у програмі так, як елементи неупакованого, тільки пам'ять для упакованого масиву виділяється меньше. Вважають, що символи рядку мають тип упакованого масиву:

Packed Array [1..N] of char; де Nдовжина рядку.

Символьні константи можуть присвоюватися або порівнюватися з любими масивами, які мають такий самий опис. Упаковані масиви економлять місце у пам'яті, але збільшують час доступу до компонентів масиву. Для створення упакованного масиву використовують цикл.

Наприклад, формування масиву А символьних даних можливо виконати наступним чином:

І:=1;

While not eoln do

Begin

Read(A[i]);

I:=i+1;

End;

Масив А при цьому повинен бути описаний не більше ніж довжина рядку, що вводиться:

Var Packed Array[1. .N] of char;

В операторі циклу While можливо вказувати конкретну довжину рядку:

І<28 або КК.

До упакованих символьних масивів в мові Паскаль відносяться також рядки символів, які задаються або у розділі операторів або у розділі констант. Тип константи однозначно визначається її записом. Ми будемо об'являти цей тип під ім'ям STRING. Тип STRING не являється стандартним типом, його потрібно визначати шляхом об'явлення типів.

Операції відношення виконуються посимвольно зліва направо.

Наприклад: Ввести елементи масиву і роздрукувати їх. Масив визначений так:

\/ar K:PackedArray[-5.. 5] of char;

Program pr;

Var k:packed array[-5.. 5] of char;

I: integer;

Begin

Writeln(’Bведіть елементи масива') ;

For і: = -5 to 5 do

Read(k[i]);

For i: = -5 to 5 do

Writeln(k[i]);

End.

Приклад: ввести рядок символів не меньше 10 і не більше 50. Вияснити, скільки "? " з 5 символу по 20 і підрахувати кількість усіх символів,

program mas3;

const al=’?’;

b=5; с=20;

type mas=packed array [1..50] of char;

var a: mas;

x,i: integer;

begin

{введення і підрахунок символів рядка}

і: =0;

write ('вв символи рядка');

while not eoln do

begin

i:=i+1;

read(a[i]);

end;

if (i<10)or(I>50)then

WriteІп('введення не відповідає умові');

Writeln ('і=', і: 3);

х:=0;

for і: =b to c do

if a[i]=a1 then x:=x+1;

witeln(’x=’, x: 4);

end.

Оператор циклу while працює так: циклічна частина програми виконується до тих пір, поки в рядку символів не зустрінеться (знак Entera){умова NOT EOLN}. Після цього цикл закінчиться і управління передасться на підрахунок к-ті ?

У високих версіях мови Pascal є можливість Packed не вказувати, т.я. масиви символів автоматично упаковані.

Приклад: В масиві з 30 дійсних чисел визначити найбільший елемент.

Program рг;

Type a=array[1..30] of real;

Var mas :a; max: real; I: integer;

Begin

Writeln('Bведіть елементи масива');

For I: =1 to 30 do

Readln(MAS[I]);

Max:=MAS[1];

For I:=2 to 30 do

If MAS[I]>Max then Max: =Max[I];

Writeln('Max= ',Max:4;2);

End.

Приклад: Є одновимірний масив, який складається із п цілих чисел, роздрукувати їх у зворотньому порядку по 5 чисел у рядку.

Program lena;

var i,n,k: integer:

a: array[1…50] of integer;

begin

k:=0; (*k- кількість елементів в рядку*)

write ('Введіть кількість елементів масиву');

readln(n);

Writeln(’Введіть елементи масива');

For i:=1 to n do

read(a[i]);

for i:=n downto 1 do

begin

write (a [i] :4) ;

k:=k+l;

if k mod 5=0 then writeln;

end;

end.

Приклад: В масиві із 15 дійсних чисел найти найменший елемент, поміняти його місцями з останнім,

Program mas6;

var a: array [1...15] of integer;

іj: integer;

min, last, t: integer;

begin

Writeln('Введіть елементи масива');

for і: =1 to 15 do

read(a[i]);

min: =a[1];

for i: =2 to 15 do

if a[i] <min then

begin

min: =a[i];

t: =i;

end;

last: =a[15];

a[15]: =min;

a[t]: =last;

writeln;

for i: =1 to 15 do

writeln(a[i]:4);

end.

Багатовимірний масив.

До цих пір ми розглядали масиви, кожний елемент якого містить тільки один індекс. Такі масиви називаються одновимірними. В математиці часто використовують багатовимірні масиви, тобто масиви масивів. Особливо широке розповсюдження отримали двовимірні масиви, які називаються матрицями.

Наприклад: 3 4 8 9

7 16 1 5

6 23 17 2

Послідовність чисел написана в декілька рядків називається матрицею.

Дана матриця має розмір (3*4). Якщо весь масив позначити А, то кожний елемент масиву позначається двома індексами A[I,j]. Перший індекс рядка, другий - стовпчика. Можна описати:

Туре мат—array[1..3] of array[1. . 4] of integer;

Var а:мат;

Описується тип даних індексів від 1 до 3, а потім вказується

складний базовий тип, зокрема array [1 ..4] of integer;

Можна описати так:

Туре мат= аrrау[1..3, 1. .4]of integer;

Var а:мат;

Тут описується кожен тип індекса, потім вказується простий базовий тип елементів масиву integer.

Якщо в програмі необхідно виділити окремі блоки матриці, то необхідно ввести такий опис:

Type mas=array[1...4]of integer;

Мат=array[1.. 3]of mas;

Var a: mas;

b:мат;

Тут спочатку описується тип одного рядка, а потім через тип рядка тип всієї матриці.

Приклад: Які з проведених описів двовимірних масивів є неправильними і чому ?

Var a:array[1..5, 1..7] of real; - правильний

Var k: array[4,7] of integer; - неправильний тип індексу

Var p: array[1..6], [1..3] of real; -неправильний

Type mas =array[ 'b'..’f’, -3..3] of integer; - правильний

Type z=array['a'.. 'd'] неправильний, так як не описаний тип eлементу.

Приклад: Дана матриця дійсних чисел B[I,J], де і вимірюється від 1 до З, j від 1 до 5. Знайти добуток всіх елементів матриці.

Program амат1;

Var b: array[1., 3,1.. 5] of real;

i,j: integer;

p:real;

begin

p:=1;

for i: =1 to 3 do begin

for j: =1 to 5 do read(b[i,j]);

readln;

end;

for і: =1 to 3 do

for j:=1 to 5 do

p:=p*b[i,j];

writeln('p=’,p:8:2);

end.

Задача: є цілочисленний масив [4*4], впорядкувати масив по зростанню елементів першого стовбця.

Рrogram mat2;

var mas: array [1..4,1..4] of integer;

іJ,k,t: integer;

begin

writeln('Введіть матрицю');

for i: =1 to 4 do

begin

for j:=1 to 4 do

read(mas[i,j]);

readln;

end;

for i: =1 to 4 do

for j: =1 to 4 do

if mas[i,1]>mas[j, 1] then

for k:=1 to 4 do

begin

t: =mas[i,k];

mas[i,k]: =mas[j,k];

mas[j,k]: =t;

end;

for i: =1 to 4 do

begin

for j: =1 to 4 do

write(mas[i,j]:2);

writeln;

end;

end.

Приклад: Дані натуральні числа п та т. Отримати всі числа меньше n, квадрат суми чифр яких дорівнює т.

Program рг;

Var n,m,cr,x,I,sum: Integer;

Begin

Writeln( 'Введіть п та т : ');

Read(n,m) ;

Writeln('Відповідь: ');

For x: =n down to 0 do

begin

Sum: =0;

I:=x;

Repeat

Cf:=i mod 10;

Sum: =sum+cf;

I=i mod 10

Until 1=0

Sum: =sqr (sum);

If sum=m then writeln(x);

End;

End.

Приклад: По номеру у деякого року визначити с - номер його століття.

Program рг;

Var x,y: Integer;

Begin

Write( 'Введіть рік: ') ;

Readln(y);

X:=round(y/100+1);

Writeln(’Номep століття:', x:2);

End.

Підпрограми.

В програмуванні часто зустрічаються випадки, коли по ходу виконання програми треба виконувати одні і ті ж самі обчислення, але при різних вхідних даних. Щоб зробити програму легше та зрозуміліше, а також виключити повторення однакових операторів, виділяють ділянки, що повторюються в самостійну частину програми, яку можна використовувати багаторазово по мірі необхідності.

Автономна частина програми, яка реалізує визначений алгоритм і допускає звернення до неї із різних частин програми називається підпрограмою. Підпрограми оформлюються в вигляді замкнутих ділянок програми, що мають чітко визначений вхід та вихід. При цьому імена змінних в основній програмі і підпрограмах задані незалежно один від одного. Використання підпрограм дозволяє реалізувати один із самих прогресивних методів програмування - структурне програмування.

В мові Паскаль виділяють два вида підпрограм: процедуру та функцію. Будь-яка програма може включати в себе декілька процедур та функцій. Процедури та функції об'являються у розділі опису вслід за розділом опису змінних. Виконання програми починається з операторів основної програми. При необхідності викликається підпрограма і починають діяти її оператори. Потім управління передається в основну програму, яка продовжує виконуватися. Люба підпрограма може містити підпрограми.