- •Основи програмування та алгоритмічні мови Програмування мовою borland Pаscаl v7.0 для пеом Процедурне та модульне програмування
- •2.2.1. Теоретичні відомості
- •1. Основи алгоритмізації та програмування
- •1.1. Послідовність рішення задачі з допомогою еом
- •1.2.Середовище turbo Pаscаl
- •1.3.Типи даних turbo Pаscаl
- •1.4.Основні поняття мови програмування turbo Pаscаl
- •1.4.1.Синтаксис мови Програмування turbo Pаscаl
- •1.4.2. Основні дії в мові програмування
- •1.4.3. Умовні оператори
- •1.4.4. Методи організації циклів
- •1.4.5. Оператор вибору
- •1.4.6. Масиви.
- •1.4.7. Робота з рядками, масиви символів
- •1.4.8. Робота з типом string
- •1.4.9. Тестові завдання
- •1.4.10. Варіанти завдань для самостійного розгляду
- •2. Програмування в мові Pascal
- •2.1 Процедурний підхід до програмування
- •2.1.1 Теоретичні відомості
- •2.1.2.Приклад програми
- •2.1.3. Варіанти завдань для лабораторної роботи
- •2.2. Записи з фіксованою частиною
- •2.2.1. Теоретичні відомості
- •2.2.2. Приклад програми
- •2.2.3. Варіанти завдань для лабораторної роботи
- •2.3. Записи з варіантами
- •2.3.1. Теоретичні відомості
- •2.3.2. Приклад програми
- •2.3.3. Варіанти завдань для лабораторної роботи
- •2.4. Типізовані файли
- •2.4.1. Теоретичні відомості
- •2.4.2. Приклад програми
- •2.4.3. Варіанти завдань лабораторної роботи
- •2.5. Текстові файли
- •2.5.1. Теоретичні відомості
- •2.5.2. Приклад програми
- •2.5.3. Варіанти завдань Лабораторної роботи
- •2.6. Множини
- •2.6.1. Теоретичні вказівки
- •2.6.2. Приклад програми
- •Алгоритм
- •2.6.3. Варіанти завдань лабораторної роботи
- •2.7. Черги та стеки
- •27.1. Теоретичні вказівки
- •Алгоритм побудови стека:
- •2.7.2. Приклад програми
- •2.7.3. Варіанти завдань лабораторної роботи
- •2.8. Дерева
- •2.8.1. Теоретичні вказівки
- •2.8.2. Приклад програми
- •2.8.3. Варіанти завдань лабораторної роботи
- •2.9. Графіка
- •2.9.1. Теоретичні вказівки
- •2.9.2 Приклад програми
- •2.9.3 Варіанти завдань
- •2.10.Програмування інтерфейсу користувача. Розробка меню
- •2.10.1. Теоретичні вказівки
- •2.10.2. Приклад програми
- •2.10.3. Варіанти завдань
- •4 Створити меню такої структури: Головне меню
- •3. Основні принципи модульного програмування
- •3.1. Приклад програми
2.3. Записи з варіантами
2.3.1. Теоретичні відомості
Запис з варіантами - це запис, що має довільне число варіантів структур. Вони складаються з необов'язково фіксованої та варіантної частин. Варіантна частина формується за допомогою оператора CASE, який задає особливе поле ознаки, що визначає, який варіант на даний момент буде активізованим. Значенням ознаки в кожний поточний момент виконання програми повинна бути константа, що задає варіант запису і зветься константою вибору.
Формат. TYPE ім'я_типу_запис =RECORD
CASE <поле ознаки>:<Ім'я_типу> OF
<константа вибору 1>:(<поле...:гип>;…);
……………….
<константа вибору М>:(<поле...:тип>;...);
END;
var iм'я_змiнної: Ім'я_типу_запис;
Обсяг пам'яті, необхідний для запису з варіантами, складається з обсягів пам'яті фіксованої частини та максимального із обсягів поля змінної частини.
Приклад запису з фіксованою та варіантною частинами:
TYPE ZAP=RECORD (тип даних - запис)
Number:byte; {фіксована частина}
Articul:integer;
CASE (варіантна частина}
Flag:boolean OF ( поле ознаки варіантів)
true: (price1:integer); (варіант 1: true- константа вибору)
false: (price2:real); (варіант 2: false - константа вибору)
END;
VAR tovar:array(1..10] of zap; (масив записів )
Доступ до елементів варіантної частини запису можливий за умови завдання значення полю ознаки. Згідно з цим значенням вибирається відповідний варіант запису, що позначений відповідною константою вибору в структурі case. Поле ознаки є елементом запису, що визначає варіантну частину, тому після вводу значень елементів замінити значення поля ознаки неможливо без порушення варіантної структури
Масив записів - це послідовність елементів, кожний з яких є запис. Приклад доступу до варіантної частини:
for і:=1 to 10 do
with tovar[j] do
case flag of ( вибір варіантів запису}
true: writeln('Номep: ',number,' артикул ',articul,' ціна ',ргісе1);
false : wrіteln('фірмa: ',firma,' кількість товару: ', kol);
end;
2.3.2. Приклад програми
Умова задачі: Створити масив записів із структурою
Каталог |
|||||||||
Книги |
Журнали |
Газети |
|||||||
Автор |
Назва |
Ціна |
Назва |
Рік |
Автор |
Назва |
Дата |
Автор |
Стаття |
1) Визначити кількість робіт кожного автора.
2) Визначити журнали, що видавались за вказаний рік
uses crt;
type zap=record
author,title:string;
case tag:Integer of
1:(price:Integer);
2:(year:Integer;journal:string);
3:(date:string;news:string);
end;
var katalog:array[1..20]of zap;
i,j,k,l:byte;
ch:char;
procedure vvod;
begin clrscr;
repeat
i:=i+1;
with katalog[i] do
begin
write('lnput type of editions: 1-book,2-journal,3-newspaper');
readln(tag);
case tag of
1:begin
write('author of book: '); readln(author);
write('title of book: '); readln(title);
write('price of book: '); readln(price);
end;
2:begin
write('author of article In journal:'); readln(author);
write('tltle of article:'); readln(title);
write('name of journal: '); readln(journal);
write('year :'); readln(year);
end;
3:begin
write('author of article In newspaper: '); readln(author);
write('tltle of article In newspaper: '); readln(title);
write('name of newspaper: '); readln(news);
write('date :'); readln(date);
end;
end;
end;
writeln('continue?Y/N');
ch:=readkey;
until ch=upcase('N');
end;
procedure vyvod;
{var tag:integer;}
begin
clrscr;
for j:=1 to i do
with katalog[j] do
case tag of
1: begin
writeln('books: ',author,' ',title,' ',price); readln;
end;
2:begin
writeln('|ournals:',journal,' ',year,' ',author,' ',title); readln;
end;
3:begin
writeln('newspaper: ',news,' ',date,' ',author,' ',title); readln;
end;
end;
end;
procedure task1;
var kol:integer;
fl:boolean;
begin clrscr;
for j:=1 to I do begin
kol:=1;
fl:=false;
for k:=1 to j-1 do
if katalog[j].author=katalog[k].author then fl:=true;
If fl=false then begin
for l:=j+1 to i do
if katalog[l].author=katalog[j].author then kol:=kol+1;
writeln('author',katalog[i].author,'has works= ',kol);
end;
end;
readln;
end;
procedure task2;
var tmp:integer;
flag:boolean;
begin clrscr;
writeln('lnput journal"s edition year');
readln(tmp);
clrscr;
flag:=false;
writeln('journals In ',tmp, ' year');
for j:=1 to I do begin
if katalog[j].year=tmp then
begin
writeln(katalog[j].journal);flag:=true;
end;
end;
if flag=false then
writeln('journals not exist In katalog In year ',Tmp);
readln;
end;
procedure endprog;
begin clrscr;
gotoxy(15,10); writeln('Do you want to exit from program? y/n');
ch:=readkey; If ch='y' then halt(0);
end;
procedure menu;
begin
repeat
cLrscr;
gotoxy(21,3); writeln('MENU');
gotoxy(15,5); writeln('1. Input database');
gotoxy(15,7); writeln('2. Show database');
gotoxy(15,9); writeln('3. Number of author"s works .');
gotoxy(15,11); writeln('4. Journals In current year.');
gotoxy(15,13); writeln('5. Exit');
ch:=readkey;
case ch of
'1':vvod;
'2':vyvod;
'3':task1;
'4':task2;
'5':endprog;
end;
until ch='5';
end;
begin
clrscr;
i:=0;
menu;
end.