
- •Базовий курс програмування у середовищі Turbo Pascal Методичні вказівки
- •Базовий курс програмування у середовищі Turbo Pascal Методичні вказівки
- •Практична робота №1
- •Організація вводу та виводу даних
- •Мета роботи: ознайомитись з конструкціями мови Turbo Pascal, структурою програм, стандартними типами даних і процедурами вводу та виводу.
- •Теоретичні відомості
- •1 Особливості мови Turbo Pascal
- •1.1 Спеціальні символи
- •1.2 Зарезервовані (ключові) слова
- •1.3 Ідентифікатори
- •1.5 Числа
- •1.6Рядки
- •1.7 Коментарі
- •2 Структура програми
- •Індивідуальні завдання
- •Контрольні питання
- •Практична робота №2
- •Логічні та циклічні структури
- •Теоретичні відомості
- •1 Логічні структури
- •1.1 Команда розгалуження if (умовна команда)
- •1.2 Команда goto
- •1.3 Команда вибору (сase)
- •2 Циклічні структури
- •2.1 Команда циклу з параметром (for)
- •2.2 Команда циклу з передумовою (while)
- •2.3 Команда циклу з постумовою (repeat)
- •2.4 Порівняння роботи команд циклу while, repeat та for
- •Індивідуальні завдання
- •Контрольні питання
- •Практична робота №3
- •Одновимірні масиви. Сортування
- •Мета роботи: ознайомитись з поняттям одновимірних масивів та діями над ними, навчитися застосовувати різні методи сортування для розв’язку математичних і технічних задач.
- •Теоретичні відомості
- •1 Одновимірні масиви
- •1.1 Додавання елементів масиву
- •1.2 Лічильник
- •1.3 Екстремуми
- •2 Методи сортування
- •2.1 Метод лінійного сортування
- •2.2 Сортування методом «бульбашки»
- •Індивідуальні завдання
- •Контрольні питання
- •Практична робота №4
- •Багатовимірні масиви
- •Мета роботи: вивчити технологію роботи з багатовимірними масивами.
- •Теоретичні відомості
- •1 Опис багатовимірних масивів
- •2 Доступ до елементів масивів
- •3 Масиви ідентичного типу
- •4 Головна та побічна діагоналі
- •6 Ввід матриці
- •7 Виведення матриці
- •Індивідуальні завдання
- •Контрольні питання
- •Практична робота №5
- •Підпрограми
- •Мета роботи: ознайомитись з правилами використання підпрограм, вивчити відмінності між процедурами та функціями.
- •Теоретичні відомості
- •1 Процедури та функції
- •1.1 Опис процедури
- •1.2 Опис функції
- •1.3 Формальні та фактичні параметри
- •1.3.1 Передача параметрів у підпрограмах
- •1.3.2 Виклик підпрограм
- •1.4 Глобальні та локальні змінні
- •1.5 Основні відмінності між функціями і процедурами
- •2 Рекурсивні функції
- •Індивідуальні завдання
- •Контрольні питання
- •Практична робота №6
- •Символьні та рядкові змінні
- •Мета роботи: ознайомитись з прийомами роботи із символьними та рядковими змінними.
- •Теоретичні відомості
- •1 Символьні змінні
- •2 Множини
- •3 Рядкові змінні
- •3.1 Оголошення рядкових змінних
- •3.2 Доступ до окремих елементів рядка
- •3.3 Зміна поточної довжини рядка
- •3.4 Злиття рядків
- •3.5 Порівняння рядків
- •3.6 Порожній рядок
- •3.7 Рядки і символи
- •3.8 Масиви символів і рядка
- •3.9 Стандартні підпрограми для обробки рядків.
- •Індивідуальні завдання
- •Контрольні питання
- •Практична робота №7
- •Записи. Записи з варіантами
- •Мета роботи: навчитись створювати прості бази даних за допомогою записів та записів з варіантами.
- •Теоретичні відомості
- •1 Записи
- •2 Записи з варіантами.
- •Індивідуальні завдання
- •Контрольні питання
- •Практична робота №8
- •Файли: текстові, типізовані, нетипізовані
- •Мета роботи: ознайомитись з випадками використання файлів, типами файлів та методами обробки елементів файлів.
- •Теоретичні відомості
- •1 Текстові файли
- •2 Типізовані файли. Мітки
- •3 Нетипізовані файли
- •Приклад 4:
- •Приклад 5:
- •Індивідуальні завдання
- •Контрольні питання
- •Практична робота №9
- •Мета роботи: вивчити структуру та особливості роботи з модулями в Turbo Pascal.
- •Теоретичні відомості
- •1 Структура модуля
- •1.1 Заголовок модуля
- •1.2 Інтерфейс модуля
- •1.3 Виконавча частина модуля
- •1.4 Розділ ініціалізації.
- •2 Етапи розробки модуля
- •Індивідуальні завдання
- •Контрольні питання
- •Практична робота №10
- •Графіка
- •Мета роботи: ознайомитись з принципами побудови графіків функцій та інших графічних об’єктів за допомогою засобів TurboPascal.
- •Теоретичні відомості
- •1 Основні процедури і функції модуля Graph
- •2 Робота із зображеннями.
- •3 Побудова і масштабування графіків
- •Індивідуальні завдання
- •Контрольні питання
- •1 Дані динамічної структури
- •2 Вказівник
- •3 Списки
- •4 Стек. Черга
- •4.1 Алгоритм побудови стека
- •4.2 Алгоритм побудови черги
- •Індивідуальні завдання
- •Контрольні питання
- •Практична робота №12
- •Об’єктно-орієнтоване програмування
- •Мета роботи: засвоїти матеріал щодо можливостей TurboPascal при створенні об’єктів.
- •Теоретичні відомості
- •1 Поняття «об'єкт»
- •2 Спадкування
- •Індивідуальні завдання
- •Контрольні питання
- •Список літератури
- •Зразок оформлення результатів виконання практичного завдання
3 Побудова і масштабування графіків
Візьмемо просту тригонометричну функцію, для прикладу, Y=SIN(X). Для побудови її графіка потрібно взяти діапазон Х (в даному випадку доцільно взяти [0; 2π], оскільки функція SIN періодична з періодом Т=2π). Далі в циклі перебираємо значення з заданого діапазону і підставляємо їх у формулу. Таким чином ми отримали пари значень Х та Y, що достатньо для побудови графіка (слід пам’ятати що на відміну від звичної математичної декартової системи координат на екрані монітора координату Y відраховують зверху вниз). Можна будувати графік, але в більшості випадків зображення всього графіка буде замале, або завелике порівняно з розмірами графічного екрану, для вирішення цього питання використовують різні методи масштабування графіків.
Наведеній нижче метод зручний у користуванні, легкий для розуміння і дуже ефективний, тому що дає можливість задати будь-які межі в яких буде зображено графік. Для використання цього методу потрібно знати максимальне та мінімальне значення Х та Y відповідно. Задаємо дві формули, які з існуючих значень Х та Y знайдуть значення потрібні для виводу на екран:
,
де
X,
Y
– відомі координати,
,
– відмасштабовані координати, L
та H
– відповідно ширина та висота графічного
екрану в пікселах.
При роботі з тригонометричними функціями слід пам’ятати, що у системі Turbo Pascal кути для тригонометричних функцій задаються в радіанах. При виникненні проблем зі степеневими функціями можна зробити заміну:
.
Приклад 1:
Програма, представлена для прикладу, є майже універсальним засобом для побудови графіків математичних функцій, заданих лінійно. В програмі можна задати будь-яку математичну формулу, діапазон значень Х для неї і вона побудує графік автоматично, виконавши для нього процедуру масштабування та центрування. Декартові осі та ще кілька допоміжних символів також будуються автоматично.
program grapher; {програма виводу графічної інформації}
uses
crt,graph; {завантаження робочих модулів}
var
nmenu:array[1..9] of string[80];{масив для створення панелей меню}
i,menubar,menupointer,gd,gm:integer;{робочі змінні, gm,gd – для
роботи з графікою}
y,x,ymax,ymin,xmax,xmin:real; {змінні для побудови графіків}
key:char;
dkey:string[2];{key,dkey - для зчитування з клавіатури}
procedure begining;
{процедура заповнення змінних на початку програми}
begin
nmenu[1]:='Графiк: Y=|X|-COS(2*X) на промiжку [-π; π]';
nmenu[2]:='Графiк: Y=X^3*(1-X^2)^2 на промiжку [-1,35;1,35]';
nmenu[3]:='Графiк: Y=SIN(1+SIN(X))^2 на промiжку [0;2π]';
nmenu[4]:='Графiк: Y=X*SIN(3*X) на промiжку [-π; π]';
nmenu[5]:='Графiк: Y=X*SIN(4*X)/4 на промiжку [0; π]';
nmenu[6]:='Графiк: Y=X^3/(1+X^4) на промiжку [-10;10]';
nmenu[7]:='Графiк: Y=SIN(X)+SIN(2*X)+SIN(3*X) на промiжку
[0;2 π]';
nmenu[8]:='Графiк: Y=LN(|X|) на проміжку [-7;7]; X<>0';
nmenu[9]:='Вихiд';
menubar:=9; {визначення кількості пунктів в меню}
menupointer:=1; {встановлення вказівника на перший рядок меню}
end;
function gety:real;
{функцiя - повертае значення Y, розраховане за заданою формулою}
begin
case menupointer of{формула обирається в залежності від }
1:gety:=abs(x)-cos(2*x);{положення вказівника меню,
menupointer}
2:gety:=x*x*x*(1-x*x)*(1-x*x);
3:gety:=sin(1-sin(x))*sin(1-sin(x));
4:gety:=x*sin(3*x);
5:gety:=x*sin(4*x)/4;
6:gety:=x*x*x/(1+x*x*x*x);
7:gety:=sin(x)+sin(2*x)+sin(3*x);
8:if x<>0 then gety:=ln(abs(x));
end;
end;
procedure graphik2x;
{процедура побудови графiка}
begin
gd:=detect;initgraph(gd,gm,'');{інiцiалiзацiя графіки}
setcolor(15);
case menupointer of {границі побудови обираються в залежностi вiд}
1:begin xmin:=-3.14;xmax:=3.14;end;{положення вказівника
меню-мenupointer}
2:begin xmin:=-1.35;xmax:=1.35;end;
3:begin xmin:=0;xmax:=6.28;end;
4:begin xmin:=-3.14;xmax:=3.14;end;
5:begin xmin:=0;xmax:=3.14;end;
6:begin xmin:=-10;xmax:=10;end;
7:begin xmin:=0;xmax:=6.28;end;
8:begin xmin:=-7;xmax:=7;end;
end;
ymax:=-1000;ymin:=1000;{визначення найбiльшого й найменшого
значень Y}
for i:=round(xmin*1000) to round(xmax*1000) do
begin
x:=0.001*i;y:=gety;
if y>ymax then ymax:=y;
if y<ymin then ymin:=y;
end;
{за допомогою ymin,ymax,xmin,xmax обирається потрiбний коефiцiєнт}
{маштабування, щоб графiк займав призначене йому на екранi мiсце}
{ширина - 600, висота - 440, згiдно з цим коефiцiєнтом будуються осi,}
{та деякi допоміжнi символи.}
line(20+round((-xmin)/(xmax-xmin)*600),0,20+round
((-xmin)/(xmax-xmin)*600),469);
line(0,460-round((-ymin)/(ymax-ymin)*440),639,460-round
((-ymin)/(ymax-ymin)*440));
settextstyle(defaultfont,horizdir,usercharsize);
outtextxy(0,472,nmenu[menupointer]);
outtextxy(20+round((-xmin)/(xmax-xmin)*600)-10,460-round
((-ymin)/(ymax-ymin)*440)+5,'0');
outtextxy(632,460-round((-ymin)/(ymax-ymin)*440)-3,'>');
outtextxy(632,460-round((-ymin)/(ymax-ymin)*440)-13,'X');
outtextxy(20+round((-xmin)/(xmax-xmin)*600)+6,0,'Y');
settextstyle(defaultfont,vertdir,usercharsize);
outtextxy(20+round((-xmin)/(xmax-xmin)*600)+5,0,'>');
for i:=-10 to 10 do
begin
if(-11<xmin)and(11>xmax)then
outtextxy(20+round((i-xmin)/(xmax-xmin)*600)
+5,460-round((-ymin)/(ymax-ymin)*440)-4,#4);
if(-11<ymin)and(11>ymax)then
outtextxy(20+round((-xmin)/(xmax-xmin)*600)
+5,460-round((i-ymin)/(ymax-ymin)*440)-4,#4);
end;
{Побудова графiка}
for i:=round(xmin*1000) to round(xmax*1000) do
begin
x:=0.001*i;y:=gety;
x:=(x-xmin)/(xmax-xmin)*600;
y:=(y-ymin)/(ymax-ymin)*440;
putpixel(20+round(x),460-round(y),12);
end;
repeat until keypressed; closegraph;{Затримка(очiкує вводу з
клавiатури)}
end;
procedure menu;
{Процедура створення світлового меню}
begin
repeat
textcolor(white);clrscr;
repeat
for i:=1 to menubar do
begin
if i=menupointer then textbackground(red)
else textbackground(black);
gotoxy(1,i);write(nmenu[i]);
end;
for i:=1 to 2 do {зчитування з клавіатури натисненням
на клавіші}
begin
key:=readkey;
dkey:=dkey+key;
{dkey - потрiбен для зчитування спец-символiв довжиною 2 байти}
if dkey<>#0 then i:=2;
end;
if(dkey=#0+'H')and(menupointer>1)then
menupointer:=menupointer-1;
if(dkey=#0+'P')and(menupointer<menubar)then
menupointer:=menupointer+1;
dkey:='';
until key=#13;{Закiнчення циклу в зв'язку з реакцiєю на
клавiшу "Enter"}
if menupointer=menubar then halt
else graphik2x;{halt - закiнчення програми}
until false;{За умовою нескiнченний цикл}
end;
{Основна програма}
begin
begining;
menu;
end.