- •Структура програми
- •Ідентифікатори.
- •Запис чисел на Pascal.
- •Додаткова інформація про оператор write (writeln)
- •3. Дано 3-й дійсні числа а,ь,с. Визначити, скільки серед них від'ємних.
- •Складений оператор.
- •Результати операцій над логічними даними:
- •Var ім 'я_масиву:аrrау[t1 ] of t2;
- •Var ім’я_мас:ім 'я_типу;
- •Var ім’я_масиву: ім'я_типу;
- •Процедури.
- •Структура процедури.
- •Параметри-значення та параметри-змінні.
- •Функції.
- •Відмінні особливості функції в порівнянні з процедурами:
- •Рекурсивні структури.
- •If умова then a;
- •If умова then a;
- •If умова then a;
- •Множини.
- •Var ім'я_запису: record
- •Var ім'я_запису:ім'я_типу;
- •Оператор приєднання.
- •With ім’я_запису do
- •Записи з варіантами.
- •Var ім'я_файлу: iм)я_типу; читання файлів.
- •Запис файлу.
- •Write(ім’я, параметри);
- •Читання та запис файлів.
- •Файлова система.
- •Фізичні файли.
- •Файлові типи.
- •Текстові файли.
- •Текст - орієнтовані процедури та функції.
- •Створення текстових файлів.
- •Операції введення-виведення текстових файлів.
- •Переваги типізованих файлів :
- •Безтипові файли.
- •Послідовний та прямий доступ до файлів.
- •Вказівники.
- •Зсилочнии тип.
- •Var p:pointer; (змінна — вказівник);
- •Операції розіменування.
- •Списки.
- •1. Зв'язне представлення з одним зв'язком.
- •2. Зв'язані представлення з двома зв'язками.
- •3В’язані списки.
- •Перегляд зв'язаного списку.
- •Списки властивостей.
- •Pascal – об’єктно-орієнтована мова.
- •Опис об’єкта: рядок
- •Розробка програм на мові тр з використанням мов Асемблера та с.
- •Підпрограма сортування методом обміну
- •Застосування механізму переривань
- •Лівий, правый: зв ’язок; дані: тип_даних;
3. Дано 3-й дійсні числа а,ь,с. Визначити, скільки серед них від'ємних.
Program PR4;
VarA,B,C: Real; Kol: Integer;
Веgin
Kol:=0;
If A<0 then kol: =kol+ 1;
If B<0 then kol: =kol+l;
If C<0 then kol: =kol+l;
Write ('kol=’,kol: 4);
End.
Складений оператор.
В умовному операторі після then та else можливо розміщати тільки по одному оператору. Часто виникає необхідність в результаті перевірки виконувати ту чи іншу групу операторів. В Паскалі є така можливість із групи операторів зробити один оператор - складений.
Структура складеного оператора така:
Begin P1,P2, ...Pk End;
Де Р1,Р2,...Рк - любі оператори. В деяких випадках дія слів Begin та End схожа на дію дужок в арифметичних виразах.
Приклад:
Знайти кoрні квадратного рівняння у=ах2+bх+с, дослідити дискримінант.
Program PR5;
VarA,B,C,D:Real;
xl,x2:Real;
Ведіп
Read(A,B,C);
D: =sqr(b) - 4*a*c;
If D<0 then writeln ('Корні уявні')
Else begin
Xl:=(- b+sqrt(D)/2*a);
X2;=(-b=sqrt(D)/2*a);
End;
WritelnCxl = ',xl:5:2, 'x2= ', x2:5:2);
End,
Складний оператор може бути використаний не тільки в середині умовного оператора, але і повсюду в програмі, при цьому необхідно витримати схему:
Begin
Begin
Begin
:
End;
End;
End.
Приклад: Скласти програму визначення номеру мінімального елементу із трьох у 1, у2, уЗ:
Program PR6;
Var yl,y2,y3: Integer;
Міп,п: Integer;
Begin
Writeln( 'Введіть yl,y2,y3');
Read (у1,у2,уЗ);
If yl<y2 then
Begin Min: =yl;
N:=l;End
Else
Begin Min: =y2;
N:=2;End;
If y3<Min then
Bedin Min: -y3;
N:=3;End;
WriteIn('Hoмep Min = ‘,N:2);
End.
Циклічні процеси.
Якщо обчислювальний процес містить багаторазові обчислення по одним і тим самим математичним залежностям, але різним значенням змінних, то його називають циклічним; ті частини, що багато разів повторюються називаються циклами, зміні, що змінюються в циклі - зміні циклу.
Алгоритм циклічної структури має такий вигляд:
1. Блок підготовки циклу (включає завдання початкових значень змінних);
2. Тіло циклу (дії, що повторюються в циклі для різних значень змінних);
3. Модифікація (змінна значень змінних циклу перед кожним його повторенням);
4.Управління циклу (перевірка умови продовження). Графічно це виглядає наступним чином :
Призначення операторів циклу:
Використання циклів в програмі дозволяє ефективно використовувати машину.
Зменшує довжину програми.
Скорочує час на її складання та відлагодження.
Для всіх операторів циклу характерна така особливість: обчислення, які повторюються записуються всього 1 раз. Вхід в цикл можливий тільки через його початок. Змінні оператора циклу повинні бути визначенні до входу в циклічну частину. Необхідно передбачити також вихід із циклу: або по його закінченню або по оператору переходу. В Паскалі цикл реалізують за допомогою 3-х операторів циклу. Розглянемо їх. Розрізняють оператори циклу з заданим та зарані невідомим числом повторень. Цикл з зарані відомим числом повторень називають циклом з лічильником. Управління циклом здійснюється на основі порівнянь поточного значення
лічильника із заданим. Такий цикл називається цикл з параметром.
Оператор циклу з параметром має вигляд:
TO
For <пар. циклу>: =<поч. значення> DOWNTO <кін. знач.> DO<onepamopu>;
(For - для, ТО - до, DO - виконати)
Оператор виконується в циклі For для кожного значення параметру циклу, починаючи з початкового значення і до кінцевого. При використанні в циклі службового слова То значення параметра збільшується, а при Downto зменшується. Крок зміни параметра циклу залежать від типу змінної. Найбільш часто використовують змінну цілого типу, що визначає крок = 1 при То та -І при Downto. Параметром циклу може бути лише змінна, а початковим та кінцевим значенням можуть бути вирази за виключенням дійсного типу Real. Якщо крок зміни параметру - 1, а початкове більше кінцевого, то циклічна частина не виконується ні разу.
Тут необхідно пам'ятати, що параметр циклу, початкове та кінцеве значення повинні бути одного типу.
Після службового слова DO може стояти лише один оператор, якщо ж їх декілька, то всі вони повинні бути заключені в операторні дужки: Begin... End.
Приклад №2: Обчислити суму
20
S=
i=1
Для обчислення вказаної суми можливо організувати цикл з параметром і, в якому обчислювалось би значення наступного доданку=і2, а потім здійснювалось би накопичення суми, додаванням одержаного результату до суми всіх попередніх:
s=s+y, при чому перед початком циклу значення змінної s повинно бути нульовим.
Program SUM;
Var s,y:Real;
I: Integer;
Begin
S:=0;
For i: =1 to 20 do
Begin
y: =i*i;
s: =s+y;
End;
Writeln(‘S= ‘,S);
End.
Приклад №3: Написати програму обчислення р=n!
Program Fak;
Var n,i,p: integer;
Begin
P:=1;
Writeln('Введіть n');
Read(n);
For i: =1 to n do
p:=p*i;
writeln ( 'n!=’,p) ;
End.
Оператор циклу зручно використовувати в тому випадку, коли число
необхідних
кроків зарані визначено.
Приклад №4; Написати програму обчислення суми 70 дійсних чисел.
Program suml;
Var a, s:Real;
і: Integer;
Begin
S: =0;
Writeln(‘Введіть числа');
For і: =1 to 70 do
Begin
Read(a);
s:=s+a;
End;
Writeln (‘s= ',s);
End.
Дуже важливі 2-а правила, що прийняті в Паскалі:
1. Після закінчення виконання оператора циклу з параметром значення параметру циклу вважається невизначеним.
2. Виконання оператора, що є тілом оператора циклу з параметром, не повинні приводити до зміни значення параметру циклу.
Д/3 Обчислити S=1/1+1/2+...+1/n
Program summa;
Var sum,y: real;
n,i: Integer;
Begin
Sum: =0;
Writeln ('Введіть значення п');
Readln (n);
For i: =1 to n do
Begin
Y: =1/i;
Sum: =sum+y;
end;
Write in ('sum=’,sum);
End..
Д/З Приклад №5 Написати програму обчислення суми, використовуючи оператор For і:=-10 downto 5 do
Приклад: Знайти суму ряду чисел :
Program A1;
Var S ,X, A :Real;
I, n :Integer;
Begin
Writeln (‘Введіть x, n’);
Read (x, n);
S:=0; I:=1; A:=x/I;
While I<=(2n+1) do
Begin
S:=S+A;
I:=I+2;
A:=A*SQR(x)/I*(I+1);
End;
Writeln(‘S=’,S:5:2);
End..
Приклад №6 Написати програму обчислення суми
SUM=1/1*1+1/2*2+1/3*3+...+1/5*5
Program SUM;
Var SUM,Al,A2:Real;
I: Integer;
Begin
SUM:=0;
For i: =1 to 5 do
Begin
A:=1/I;
A2:=A1*A1;
SUM: =SUM+A2;
END;
WRITELN('SUM= ',SUM);
END.
Часто стикаються з оператором циклу, коли число повторень невідоме, але зарані відома умова його закінчення. В Pascal таких операторів два. Розглянемо наступний оператор циклу WHILE.
Оператор циклу з передумовою
While A do В
Поки умова викон. любий оператор
Працює так: Перевіряє умову А. Якщо вона виконується, то виконується В, знову перевіряється умова А і т.д. до тих пір, поки умова А вже не виконується, потім виконання оператора циклу зупиняється. Таким
чином, при використанні оператора WHILE перевіряється певний тип перевірки (умова закінчення циклу).
Приклад: Знайти суму ряду чисел. Кожний доданок на 1 менший попереднього. Додавання здійснювати до тих пір поки виконується умова: число, що додається більше 3. Перший доданок = 6.
Program Al;
Var x,sum:real;
Begin
Sum : =0; (Задання початкових значень)
Х:=6;
While x>3 do
Begin
SUM: =SUM+X;
X:=X-1;
END;
WRITELN('SUM= ',SUM);
END.
Приклад: Дано два числа а та Ь. Необхідно отримати всі члени
нескінченної послідовності менших числа b. (a, a2, a3, a ........)
PROGRAM A2;
VAR A,B,C:REAL;
BEGIN
WRITELN('Bвeдimь значення А,В');
READ(A,B);
С: =А;
WHILE C<B DO
BEGIN
WRITELN(C:3:1);
С: =С*А;
END;
END.
Розглянемо ще один оператор циклу. Це
Оператор циклу з післяумовою.
Він має такий вигдяд :
Repeat <оператори> Unti <умова>;
Повторювати до тих пір поки
Дія цього оператора подібна дії оператора WHILE, але перевірка умови проводиться після чергового циклу, що забезпечує його виконання хоч би один раз. Між службовими словами Repeat та Until можливо помістити групу операторів, відокремлюючи їх один від одного ;
Приклад: Виводити та друкувати черговий символ із вхідного потоку даних до тих пір, поки не зустрінеться символ " * ".
PROGRAM PR1;
VAR SIM:CHAR;
BEGIN
WR1TELNCВведіть символи');
REPEAT
READ(SIM);
WRITELN(SIM);
UNTIL SIM= '* ';
END.
Приклад: Знайти суму ряда чисел. Кожен доданок на 1 менший за попередній. Процес виконується до тих пір, поки виконується умова: число, яке додається повинно бути >5.5. Перший доданок =10.
PROGRAM PR2;
VAR X,SUM:REAL;
BEGIN
SUM: =0;
X:=10;
REPEAT
SUM: =SUM+X;
X:=X-1
UNTIL X<5.5;
WRITELN('SUM=', SUM);
END.
(Оператор, що стоїть перед Until не закінчується;)
Приклад: Обчислити значення функції у=х при х-8,6,4,2
PROGRAM PR3;
VAR X,V: INTEGER;
BEGIN
X: =8;
REPEAT
Y:=SQR(X);
X: =X-2
UNTIL X<2
WRITELN('Y= ',Y:3);
END.
В одній програмі можливо використання різних операторів циклу.
Приклад: Обчислити середнє арифметичне п чисел.
PROGRAM PR4;
VAR N,I: INTEGER;
SA,A,S:REAL;
BEGIN
S:=0;
WRITELN(Bвeдimь значення N');
READ(N);
WRITELN(‘Введітьзначення чисел ');
FOR I:=1 TO N DO
BEGIN
READ(A);
S:=S+A;
END;
SA:=S/N;
WRITELN('SA= ',SA:4:1);
END.
Вкладені цикли.
Цикли можуть бути вкладені один в один. Тому їх називають вкладеними. При використанні вкладених циклів необхідно складати програму таким чином, щоб внутрішній цикл повністю вміщувався в циклічну частину зовнішнього циклу. Внутрішній цикл може також в свою чергу містити другий внутрішній цикл.
Приклад: Обчислити значення змінної y=3k+n при всіх значеннях змінних п=1,2,3, k=2,4,6,8,
п-параметр зовнішнього циклу; К-параметр внутрішнього циклу. (При одному значенню п змінна k буде приймати значення 2,4,6,8. При других значеннях п змінна k буде приймати ті ж самі значення).
PROGRAM PR5;
Var n,k,y: Integer;
Веgіп
For п: =1 to 3 do
Веgіп
k:=2;
while k< =8 do
Веgіп
y:=2*k+n;
writeln (n:4, k:4, y:4) ;
k:=k+2;
End;
End;
End.
Тут зовнішній цикл побудований з використанням оператора For, a внутрішній - за допомогою оператора While.
ОПЕРАТОР ВАРІАНТА (вибору).
Оператор варіанту використовується в тих випадках, коли в залежності від значення якого-небудь виразу необхідно використовувати один із декількох послідовних операторів. Оператор вибору відноситься до складних і має таку форму запису:
Case__вираз__of
Конст 1: оператор1;
Конст 2: оператор2;
:
Конст п: оператор п;
End;
Case - в випадку, of- із, End - кінець. Оператор вибору працює так: якщо значення виразу = одній із констант, то виконується відповідний їй оператор. Потім управління передається за межі оператора вибору. Якщо значення виразу не співпадає ні з одною із констант, то управління передається за межі групи. Вираз може бути любим стандартним типом крім дійсного. Виходячи з цього, константа теж не може бути дійсного типу. Тип константи повинен співпадати з типом виразу.
Приклад: Ввести номер дня тижня та вивести відповідний йому день тижня на українській та англійській мові.
Program PR6;
Var n: Integer;
Begin
Writeln(‘Bведіть номер дня тижня');
Read(n);
Case n of
1: Writeln(‘Понеділок - Monday');
2: Writeln('Biвторок - Tuesday');
3: ...
:
7: ... End;
End.
Оператор безумовного переходу.
Загальний вид оператору:
GOTO мітка,
де Goto - іти, мітка - ціле число без знаку, визначене в розділі
Label. Оператор Goto проводить передачу управління до оператора, що помічений міткою. Використання оператора безумовного переходу в мові Pascal є необов'язковим та небажаним, так як його присутність порушує цілісність програми та її наглядність. Його треба використовувати тільки у виключних ситуаціях, наприклад, для виходу із складного оператору, при виникненні особливої ситуації в програмі. Нехай програма містить такі оператори:
x:=5; r:=b;
Goto 5;
15: r:=0;
5: у:=х;
writeln(x);
В даному випадку спочатку виконуються дані оператори, а потім
іде перехід до оператора, що помічений міткою 5. Мітка розміщується перед оператором та відокремлюється від нього двокрапкою.
Наприклад: 21:Read(x);
При цьому, мітка не впливає на виконання оператора.
Приклад: Написати програму, яка з’ясовує чи є серед чисел
cos(
)sin(ni)
(і=1..п)
числа<0,0001. Якщо є, то вивести —
"є
такі числа", а
якщо ні —
то
"немає таких чисел ".
Program Pr;
Label 1,2;
Var i,n: Integer;
Begin
Writeln(’Введіть значення п');
Read (n);
For i: =1 to n do
If Cos (Sqr (i)*i)*Sin (n*i) < 0. 0001
Then Goto 1;
Write('Немaє таких чисел') ;
Goto 2;
1: Write ('€ такі числа');
2: End.
Крім
операцій, які ми вже вивчили, в Pascal
є ще 2-і, які позначаються
div
та
mod.
Ці
операції мають по два цілих аргументи.
Якщо значення а та b
невід'ємні і b
0,
то a
div
b
і
a
mod
b
є частка
і остача, що виникають при діленні а на
b
з остачею.
Наприклад:
19 div 3 =6
19 mod 3=1
Дані операції є операції однакового старшинства з операціями множення та ділення. Операцію mod можна використовувати, щоб дізнатися, чи кратне ціле а цілому Ь (а кратне b тоді і тільки тоді, коли а mod b=0).
Приклад: Дано 10 цілих чисел. Визначити, чи є серед них хоч би одне додатне число кратне 5. Якщо так, то вивести перше із цих чисел, а якщо ні, то надрукувати — " не знайдено ".
ProgramPRJ;
Label 21,12;
Var i,n:Integer;
Begin
Writeln(’Введіть числа’);
For і: =1 to 10 do
Begin
Read(n);
If n<=0 Then GOTO 12;
If n mod 5 =0 then
Begin
Write(n);
Goto 11;
End;
12: End;
Writeln('He знайдено');
11: End.
Дані логічного типу.
Логічний тип даних часто називають булевим по імені англійського математика Буля, який створив науку мат. логіку. В мові Pascal є 2-і логічні константи True та False.
Логічна зміна приймає одне із цих значень і має тип Boolean. Логічні дані широко використовуються при перевірці вірності деяких умов та при порівнянні величин. Результат може бути істинним чи хибним. Для порівняння даних існують наступні операції відношень <, >, <=, >=, =, < >. Якщо операцію відношення прикласти до арифметичних даних, то отримаємо логічне значення: відношення істине чи хибне. Наприклад, 7>4 дає істиний результат, а 19>25 - хибний. Над логічними даними можливі такі операції:
OR - логічне додавання; (або)
AND - логічне множення; (і)
NOT — логічне заперечення, (ні)
Логічні операції OR та AND виконуються над 2-а величинами, а NOT над однією.
Логічне додавання дає істиний результат, якщо хоча б одна із логічних величин А та В мають істине значення. Якщо обидві величини А та В мають хибне значення, то результат буде хибним.
Логічне множення дає істиний результат тільки в тому випадку, коли обидві величини істині. Якщо хоч би одна із величин хибна, то результат буде хибним.
Логічне заперечення дає хибний результат, якщо величина має істине значення і навпаки. Логічний тип визначається таким чином, що
False<True.
