- •Основи програмування та алгоритмічні мови Програмування мовою 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.10.2. Приклад програми
{$М 4000,0,0} {директива компілятора, що визначає обсяг потрібної оперативної пам'яті}
program menu;
uses crt,dos;
type stroka=array [1..2] of string[10];
const {назви пунктiв горизонтального та вертикального меню}
item1:array[1..4]of string[10]=('Завдання','Програма',
'Виконання', 'Вихiд');
item2:stroka=('Лаб.poбoтa 1','Лаб.робота 2');
otstup=10; { вiдступ вiд початку рядка меню}
var i,j:integer; {лiчильник крокiв в головному меню }
kol:integer; {кiлькiсть пунктiв головного меню}
key,vertkey:char; {коди клавiш }
metca,metca2:boolean; {вихід з меню}
name:string; {iм'я файлу}
f:text; {текстовий файл}
procedure choose(a:integer);forward; {вибiр пункту головного меню}
procedure clearvert(x1,y1,x2,y2:integer;colora:integer);forward;
{************ очищення екрана ********************************}
procedure text(name:string;a:integer);forward;
{* вивiд на екран тексту завдання та програми *************}
procedure exe(name:string;a:integer);forward;
{--- виконання модуля *.ехе вiдповідно до вибраної програми ---}
procedure active(j:integer);
{------- вибiр кольору для активiзацiї пункту меню- --------}
begin
gotoxy((80 div kol)*j-otstup,1); {позицiя курсора для пункту меню}
textcolor(red); {колiр тексту}
textbackground(green); {колiр фону}
write(item1[j]); {вивiд тексту пункту меню} end;
procedure deactive(j:integer);
{---вибiр кольору для деактивiзацiї пункту меню---}
begin
gotoxy((80 div kol)*j-otstup,1);
textcolor(black); textbackground(lightgray);
write(item1[j]);
end;
procedure mainmenu ( kol:integer);
{---головне меню - передається кiлькiсть пунктiв---}
var j:integer; {допомiжна змiнна}
begin
window(1,22,80,22); {статусний рядок}
write(' ENTER-вибiр ESC-скасування ',chr(26),' ',chr(27),' - перемiщення курсора');
metca:=true; {прапорець виходу з меню}
window(1,1,80,1); textbackground(lightgray);
clrscr;
for j:=1 to kol do
begin
gotoxy((80 div kol)*j-otstup,1); {вивiд пунктiв меню}
if j=1 then active(j) {вибiр кольору для активiзацiї пункту меню}
else deactive(j); {вибiр кольору для деактивiзацiї пункту меню}
end;
j:=1; {початкове значення лiчильника пунктiв}
repeat
key:=readkey;
if (key=#0) and keypressed {аналiз коду функцiональних клавiш}
then key:=readkey;
case key of {аналiз натиснутої клавiшi}
#77: {перемiщення курсора вправо}
begin
deactive(j);
inc(j);
if j=kol+1 then j:=1; {перемiщення курсора по колу}
active(j);
end;
#75: {перемiщення курсора влiво}
begin
deactive(j);
dec(j);
if j<1 then j:=kol; { перемiщення курсора по колу}
active(j);
end;
#13: choose(j); {натиснута клавiша enter-поява спадаючого меню}
end;
until metca=false;
end; {кiнець mainmenu}
{---------------------------------------------------------------}
procedure vertmenu(kol1:integer; mas:stroka; a:integer);
{kol1-кiлькiсть пунктiв вертикального меню, mas-назва пунктiв вертикального меню, а-номер вiкна вертикального меню}
var j:integer; metca2:boolean;
{пункт меню, прапорець виходу з циклу}
procedure activevert(j:integer);
{---вибiр кольору для активiзацiї пункту меню---}
begin
gotoxy(5,j*2-1);
textcolor(red); textbackground(green); {червонi лiтери, зелений фон}
write(mas[j]);
end;
procedure deactivevert(j:integer);
{---вибiр кольору для деактивiзацiї пункту меню----}
begin
gotoxy(5,j*2-1);
textcolor(black); textbackground(lightgray); {чорнi лiтери, сiрий фон}
write(mas[j]);
end;
begin {початок процедури vertmenu} textbackground(lightgray); textcolor(black);
window((80 div kol)*a-otstup,2,(80 div kol)*(a+1)-otstup,kol1*2);
{вiкно спадаючого меню, що прив'язане до пунктiв головного меню}
clrscr;
for j:=1 to kol1 do
begin
if j=1 then activevert(j) {активiзацiя пункту вертикального меню}
else deactivevert(j); {деактивiзацiя пункту вертикального меню}
end; { }
j:=1; metca2:=true;
repeat
vertkey:=readkey; {натиснута клавiша}
if vertkey=#0 then
vertkey:=readkey; {перевiрка, чи натиснута управляюча клавiша}
case vertkey of {аналiз натиснутої управляючої клавiшi}
#80: begin {перемiщення курсора донизу}
deactivevert(J); {деактивiзацiя вертикального меню}
inc(j); {збiльшення лiчильника пунктiв меню}
if j=kol1+1 then j:=1; {якщо останнiй пункт меню, то перейти на перший} activevert(j); {активiзацiя пункту}
end;
#72:begin {перемiщення курсора догори}
deactivevert(j);
dec(j);
if j<1 then j:=kol1; {якщо перший пункт оброблений , то перейти на останнiй} activevert(j);
end;
#27: begin {натиснута клавiша ESC - очищення екрана вiд меню }
clearvert((80 div kol)*a-otstup,2,(80 div kol)*(a+1)-otstup,kol*2,0);
metca2:=false;
end;
#13:begin {натиснута ENTER}
clearvert((80 div kol)*a-otstup,2,(80 div kol)*(a+1)-otstup,kol1*2,0);
case a of {аналiз пункту головного меню}
1: begin {обробка пункту меню "Завдання"}
case j of {аналiз пункту спадаючого меню}
1: begin {вибрана 1-а команда з 1-го пункту меню}
text('t1.txt',a); break; {вивiд тексту з файлу, вихiд з case}
end;
2: begin {вибрана 2-а команда з 1-го пункту меню}
text('t2.txt',a); break;
end;
end; {case j}
end; {1:}
2: begin {обробка пункту меню "Програма"}
case j of
1: begin
text('gr1.pas',a); break; {виклик тексту програми}
end;
2: begin
text('p2.pas',a); break;
end;
end; {case j}
end; {2:}
3: begin {обробка пункту меню "Виконання"}
case j of
1: begin
exe('g:\pas\lec_menu\gr1.exe',a); break; {запуск програми на виконання}
end;
2: begin
exe('g:\pas\lec_menu\p2.exe',a); break;
end;
end; {case j}
end;
end; {case a}
end; {#13:}
end; {case vertkey}
until metca2=false;
end;
{---вибiр пунктiв головного меню та виклик спадаючого меню---}
procedure choose(a:integer);
begin case a of
1:begin
vertmenu(2,item2,1);
{поява першого вертикального меню з 2-ма пунктами}
end;
2:begin
vertmenu(2,item2,2);
end;
3:begin
vertmenu(2,item2,3);
end;
4:begin {обробка пункту меню "Вихiд"}
metca:=false;
window(1,1,80,1); {поновлення екрана}
textbackground(0); textcolor(15);
clrscr; window(1,1,80,22);
clrscr;
end;
end;
end;
procedure clearvert(x1,y1,x2,y2:integer;colora:integer);
{--очищення екрана--}
begin
textbackground(colora);
window(x1,y1,x2,y2);
clrscr; window(1,1,80,25);
end;
procedure text(name:string;a:integer);
{--реалiзацiя пункту меню - вивiд файлу на екран--}
var str:string; l: Integer;
begin
window(1,1,80,1); deactive(a); {деактивiзацiя пункту меню}
assign(f,name); {викриття файлу, iм'я передається як параметр}
reset(f);
I:=1; {лiчильник кiлькостi рядкiв, що виводяться}
window(1,22,80,22); {статусний рядок-пiдказка}
textcolor(15); textbackground(0);
clrscr;
write(' ENTER-перегляд ESC-відміна та повернення в меню') ;
window(1,3,80,21); {робоче вiкно виводу тексту}
textbackground(1); textcolor(15);
clrscr;
while not eof(f) do {поки не кiнець файлу}
begin
readln(f,str); {читати файл}
gotoxy(1,5+l); writeln(str); {писати файл на екран}
i:=i+1; {кiлькiсть рядкiв виводу на екран}
if l=15 then {пiсля виводу 15 рядкiв для продовження }
begin {виводу натиснути enter або page up}
if readkey=#27 then {якщо натиснута ESC}
begin
clrscr; break;
end;
l:=1; {вивiд нового фрагмента тексту}
clrscr;
end;
end; {while}
readkey; {очiкування натиску клавiш}
window(1,22,80,22); {очистка статусного рядка пiсля перегляду}
textcolor(15); textbackground(0);{вивiд нового повiдомлення в стат.рядку}
clrscr;
write(' ENTER-вибiр ESC-скасування ',chr(26),' ',chr(27),' -перемiщення курсора');
window(1,3,80,21); {очистка робочого екрана перегляду }
textbackground(0); clrscr;
close(f); {закрити файл}
window(1,1,80,1); active(a);{активiзацiя пункту меню}
if vertkey=#13 then choose(a); {натиснiть ENTER для виконання пункту меню}
end; {кiнець процедури text}
procedure exe(name:string;a:integer);
begin {--виконання завантажувального модуля програми-*.ехе-----}
window(1,2,80,22);
textbackground(0); textcolor(15);
swapvectors; {збереження векторiв переривання}
exec(name,''); {виклик модуля *.ехе}
swapvectors; {поновлення середовища DOS}
clrscr; window(1,1,80,1);{активiзацiя пункту меню}
textbackground(lightgray);
clrscr; active(a); deactive(1); deactive(2); deactive(4);
end;
begin {----------------головна програма----------------}
textbackground(0);
clrscr;
kol:=4;
mainmenu(kol);
end.