Модуль GRAPH
Щоб працювати з графічним режимом потрібно його ініціалізувати. Для цього використовується процедура
InitGraph (<тип адаптера>,<режим графіки>,<шлях до драйвера дисплею>); <тип адаптера> краще вибрати detect, що значить, що тип буде вибрано по автовизначенню найвищий.
Результат ініціалізації повертається в параметр GraphDriver, або результатом функції GraphResult.
Нормальне завершення операції, якщо GraphResult=0. В графічному режимі екран являє собою масив адресуємих крапок і довільне зображення на ньому утворюється як композиція пікселів, що світяться і не світяться.
Піксел - мінімальний елемент зображення.
Кількість адресуємих пікселей на екрані визначає дозволяючу здібність екрану.
Координати пікселя визначаються в системі координат з початком в верхньому лівому куті екрану.
0 ≤ х ≤ GetMaxX;
0 ≤ y ≤ GetMaxY.
Курсор в графічному режимі невидимий, але ним можна управляти.
Його положення можна взнати, використовуючи функції GetX, GetY.
Процедура | Пояснення |
ClearDevice | очищення графічного екрану |
MoveTo(x,y) | переміщення курсора в (х,у). |
MoveRel(dx, dy) | переміщення в (х+dx, y+dy) |
Line (x1,y1,x2,y2) | відрізок лінії з абсолютними координатами |
LineTo (x,y) | відрізок від поточної точки в m(x,y). |
LineReс (dx,dy) | відрізок від поточної точки в m(x+dx, y+dy). |
SetLineStyle (<тип лінії>, <шаблон>, <товщина>). | [1]’ЁЄ «ччщ: 0 - бгжч«м «ччп; 1 - в®зҐз «ччп; 2 - иваЁеЄгЄвЁа ; 3 - ЄгЄвЁа ; 4 - вЁЄ § ¤ ® и І«®®. Для типу ліні• 0-3 шаблон 0. <Товщина>: 1 - в 1 піксел, 3 - в 3 пікселі |
Circle (x,y,R) | коло |
Arc (x,y,<початковий кут>, <кінцевий кут>, R) | дуга |
Ellipse (x,y,<початковий кут>, <кінцевий кут>, XR, YR) | еліптична дуга |
Rectange (x1,y1,x2,y2) | прямокутник; |
DrawPoly (<кількість точок>,<масив точок>) | ломана |
SetFillStyle (<шаблон>, <колір>) | визначення шаблону заливки <шаблон>: 0 - суцільна заливка кольором фона; 1 - " ; 2 - ============ ; 3 - //////////// ; 4 - жирні //////// ; 5 - " \\\\\\\\\\\\ ; 6 - тонкі \\\\\\\\\ ; 7 - рідкий штрих ; 8 - густий штрих |
Bar (x1,y1,x2,y2) | прямокутник, залитий по поточному шаблону |
Bar3D(x1,y1,x2,y2,<глибина>,<тип відображення верхньої площини(true, false)>) | паралелепіпед |
Sector (x,y,<початковий кут>, <кінцевий кут>, XR, YR) | сектор еліпса залитий по шаблону |
PieSlice (x,y,<початковий кут>,<кінцевий кут>, R) | сектор кола, залитий по шаблону |
FloodFill (x,y,<колір лінії межі >) | заливає область навкіл (х,у), обмеженої лінією заданого кольору |
SetColor (<колір>) | установка кольору пера |
SetBkColor (<колір>) | установка кольору фону |
PutPixel (x,y, <колір>) | установка кольору пікселу |
SetViewPort (x1,y1,x2,y2, <режим відсічення>,: boolean) | графічне вікно |
ClearViewPort | очищення вікна |
SetTextStyle (<номер шрифта>,<положення текста>,<розмір символів>) | вибір шрифта <номер шрифта>: 0 - матричний 8х8; 1 - полужирний ; 2 - тонкий ; 3 - рублений; 4 - готичний. <положення текста>: 0 - горизонтальне, зліва - направо; 1 - вертикальне знизу-вверх; 2 - букви повернуто на 90, але вивід горизонтальний. <розмір символів> - 0.....10 |
OutText (<текст>) | вивід тексту з поточної точки |
OutTextXY (x,y, <текст>) | вивід тексту з точки .(х,у) |
Організація даних в мові PASCAL
Складні типи даних
Складні типи мають внутрішню структуру, яка складається з сукупності простих типів. До складних типів відносяться масиви, множини, записи, файли, об’єкти, посилання і процедурний тип.
Складні типи можна поділити на структуровані, посилання і процедурні типи.
Структуровані типи даних
1) Масиви
2) Строкові дані
3) Множини
4) Записи
5) Типізовані константи
6) Файли
7) Об’єкти
Масиви
1) Одновимірні масиви.
2) Багатовимірні масиви. Двовимірні масиви (матриці).
Масив - це обмежена послідовність елементів одного типу.
Кожний елемент в масиві має свій порядковий номер. Елементи масиву можна перерахувати (проіндексувати). Індексом може бути довільний перелічувальний тип.
Масив характеризується іменем, розміром і типом елементів.
Масиви можуть бути одновимірні і багатовимірні.
Одновимірні масиви
Формат опису типу "масив" для одновимірних масивів:
type
<ім’я типу> = ARRAY <[<диапазон індексу>]> OF <тип елементів>;
<диапазон індексу> - діапазон довільного перелічувального типу. Якщо діапазон охоплює всі елементи типу, то замість діапазону можна вказувати ім’я типу, наприклад, BYTE, CHAR.
Наприклад:
type
Tmas = array [1..10] of real;
Tmas1= array [10..100] of char;
Tmas2= array [‘a’..’k’] of integer;
Tmas3= array [byte] of string[30];
Для використання масиву в програмі необхідно об’явити змінні типу „масив”:
Var
mas: Tmas;
mas1: Tmas1;
mas2: Tmas2;
mas3: Tmas3;
mas4: array [1..10] of word;
Кожний елемент масиву характеризується іменем масиву і індексом. Наприклад, mas1[11], mas3[2]. Такі змінні називають індексованими змінними.
Область допустимих значень для масиву визначається типом елементів масиву.
Операції над масивами: не визначені, тобто не допускаються ніякі операції. Але для однотипних масивів можна виконувати оператор присвоєння. Наприклад, якщо маємо опис
Var
mas5,mas6: Tmas;
то можна виконати mas5:=mas6; В результаті вміст масиву mas5 буде таким же, як і вміст масиву mas6.
Щоб обробити масив(ввести, вивести, змінити), необхідно звернутись до кожного елементу масиву, тобто, для обробки масивів використовуються оператори циклу.
Розробка програм з використанням одновимірних масивів
Приклад 1.Для заданого масиву з 10 дійсних значень знайти суму позитивних значень.
| |||
Приклад 2.В заданому масиві з 10 дійсних значень кожне негативне значення зменшити в разів.
PROGRAM masiv;
{Заміна негативних позитивних значень в масиві з 10 дійсних чисел на значення в 5 разів збільшене.}
var
M:array [1..10] of real;
i:byte;
{M – масив значень
i - змінна циклу}
begin
for i:=1 to 10 do
begin
write ('введи число');
readln(M[i]);
end;
for i:=1 to 10 do
if M[i]< 0 then
M[i]:=5*M[i];
writeln ('Новий вміст масиву’);
for i:=1 to 10 do
write (M[i]);
writeln;
end.
Приклад 3.Маємо 2 масиви цілих елементів розміром по 5 елементів. Порахувати кількість пар відповідних елементів масивів, сума яких не більше 15. Індекс цих пар записати в третій масив.
Program masiv;
var
mas1,mas2,mas3:array [1..5] of integer;
i,k:word;
begin
for i:=1 to 10 do
begin
write ('Введи пару чисел');
readln(маі1[i], маі2[i]);
end;
k:=0;
for i:=1 to 5 do
if mas1[i]+mas2[i]<=15 then
begin
inc(k);
mas3[k]:=i;
end;
writeln ('Кількість пар ',k:4);
writeln ('Результуючий масив:');
for i:=1 to k do
write (mas3[i]:5);
writeln;
end.
Приклад 4.Вводиться послідовність символів. Необхідно підрахувати скільки разів введено кожну малу букву латинського алфавіту. Завершення вводу - введення символу *.
В цьому прикладі використаємо масив для зберігання кількості кожного введеного символу. Індексом цього масиву визначимо символи буков.
Program simbol;
var
K:array [‘a’..’z’] of integer; {Масив кількостей кожного символа}
c:char;
begin
{Очистка масиву кількостей, тобто кількість кожного символу встановлюється
рівною нулю}
for c:=’a’ to ’z’ do
K[c]:=0;
{Цикл по обробці введених символів}
repeat
write (‘Введи символ’);
readln (c);
if ( c>=’a’) and (c<=’z’) then
K[c]:= K[c]+1;
Until c=’*’;
writeln ('Кількість букв ‘);
{Цикл виведення результатів}
for c:=’a’ to ’z’ do
write (c,’=’,K[c]:2);
writeln;
readln;
end.
Приклад 5.Визначити, чи елементи заданого масиву 10 дійсних значень розташовані в зростаючому порядку. Перегляд масиву припинити при порушенні порядку.
В таких задачах цикл може припинитись в двох випадках; якщо переглянуто всі елементи і якщо знайдено порушення. В такому разі не можна використовувати цикл з параметром, хоча кількість членів масиву відома. Невизначеність повторів вносить умова порушення порядку. В таких випадках доцільно ввести логічну змінну, яка змінює своє значення на протилежне при визначенні порушення порядку розташування членів масиву. Індекс масиву необхідно рахувати окремо.
По завершенні циклу по значенню цієї змінної можна визначити чи було порушення.
PROGRAM posled;
{Визначення, чи елементи масиву розташовані в зростаючому порядку.}
var
M:array [1..10] of real;
i:byte;
b:Boolean;
{M – масив значень
i - змінна циклу
b - =true, якщо елементи в зростаючому порядку, false - якщо ні }
begin
for i:=1 to 10 do
begin
write ('введи число');
readln(M[i]);
end;
b:=true;
i:=1;
while (i<10) and b do
begin
if M[i+1]< M[i] then
b:=false;
i:=i+1;
end;
if b then
writeln ('Елементи масиву зростають’)
else
write ('Елементи не масиву зростають’);
readln;
end.
Приклад 6.Визначити значення виразу:
В даному прикладі необхідно знайти суму, елементами якої є вираз, елементами якого є два масиви A і B. Розмір масивів можна визначити з знаку суми, де вказано, що треба скласти 15 елементів.
Щоб знайти значення цього виразу необхідно заповнити значеннями масиви і , крім того, ввести значення для змінної m.
PROGRAM suma;
{Визначення значення виразу з сумою.}
var
A,B:array [1..15] of real;
k:byte;
S:real;
{A,B – масиви значень
k - змінна циклу
S - сума}
begin
for k:=1 to 15 do
begin
write ('Введіть 2 числа');
readln(A[k],B[k]);
end;
write ('Введіть значення m');
readln(m);
S:=0;
for k:=1 to 15 do
S:=S+(A[k]+B[k])/(k+5);
S:=15*m+7*S;
writeln (‘S=’,S:8:3);
readln;
end.
Багатовимірні масиви
Для багатовимірних масивів вказуються діапазони для кожного індексу, перелічені через кому. Індексом може бути будь-який перелічений тип.
Найчастіше використовуються двовимірні масиві, які називають матрицями.
Формат опису типу "масив" для двовимірних масивів:
type
<ім’я типу> = ARRAY <[<диапазон індексу 1>,<диапазон індексу 2>]> OF
<тип елементів>;
Наприклад:
type
Tmatr= array [1..10,1..10] of word;
Tmatr1= array ['a'..'z',1..100] of integer;
Var
matr: Tmatr;
matr1: Tmatr1;
Елемент матриці характеризується іменем матриці і двома індексами. Наприклад, matr[2,3].
Деякі відомості про матриці:
Матриця має вигляд
a11 a12 a13
a21 a22 a23
a31 a32 a33
Матриця складається з рядків і стовпців. Перший індекс вказує на номер рядка, а другий - на номер стовпця. Розмір матриці визначається добутком кількості рядків на кількість стовпців.
Якщо кількість рядків дорівнює кількості стовпців, то матриця називається квадратною.
Елементи матриці, які мають однакові індекси, складають головну діагональ матриці. В нашому прикладі це елементи (a11, a22, a33). Елементи, що лежать над головною діагоналлю - (a12, a13, a23). Можна помітити, що у цих елементів другий індекс більше першого. Елементи, що лежать під головною діагоналлю - (a21, a31, a32). У цих елементів другий індекс менше першого.
Матрицю можна розглядати як масив рядків, де кожний рядок є масив. Тобто опис
mas= array [1..10,1..10] of word; і опис
mas2= array [1..10] of array [1..10] оf word; є ідентичними.
Можна звертатись до рядка, як до масиву, наприклад, mas[3].
Розробка програм з використанням двовимірних масивів.
Приклад 1.Знайти суму елементів квадратної матриці 3*3.
program suma;
var
matr:array[1..3,1..3] of real;
i,k:word;
s:real;
begin
writeln (‘ Введiть матрицю у виглядi матриці’);
for i:=1 to 3 do
begin
for k:=1 to 3 do
read (matr[I,k];
readln;
end;
s:=0;
for i:=1 to 3 do
for k:=1 to 3 do
s:=s+matr[i,k];
writeln ('Сума елементів матриці=',s:6:2);
end.
Приклад 2.В матриці 5*4 знайти суму елементів кожного рядка.
program rd;
var
matr:array[1..5,1..4] of real;
i,k:word;
s:real;
begin
writeln (‘ Введiть матрицю у виглядi матриці’);
for i:=1 to 5 do
begin
for k:=1 to 4 do
read (matr[I,k];
readln;
end;
for i:=1 to 5 do
begin
s:=0;
for k:=1 to 4 do
s:=s+matr[i,k];
writeln ('Сума елементів',i:3,'рядка',s:6:2);
end;
end.
Приклад 3.В матриці 5*3 поміняти місцями 2 і 4 рядки.
program zamina;
type
TM = array[1..3] of real;
var
M: array[1..5] of TM;
C:TM;
i,k:word;
begin
writeln (‘ Введiть матрицю у виглядi матриці’);
for i:=1 to 5 do
begin
for k:=1 to 3 do
read (M[I,k];
readln;
end;
C:=M[2];
M[2]:=M[4];
M[4]:=C;
Writeln (‘Нова матриця’);
for i:=1 to 5 do
begin
for k:=1 to 3 do
write (M[I,k]:6:2);
writeln;
end;
end.
Приклад 4.Вивести на екран матрицю у вигляді
1 2 3 4 5 6 7 8 9 10
0 1 2 3 4 5 6 7 8 9
0 0 1 2 3 4 5 6 7 8
0 0 0 1 2 3 4 5 6 7
. . . . . . . . . . . . . . .
0 0 0 0 0 0 0 0 0 1
Приклад 5.Вивести на екран матрицю у вигляді
1 0 0 0 0 0 0 0 0 0
2 1 0 0 0 0 0 0 0 0
3 2 1 0 0 0 0 0 0 0
4 3 2 1 0 0 0 0 0 0
. . . . . . . . . . . . . . .
10 9 8 7 6 5 4 3 2 1
|
Завдання для самоперевірки.
1. Маємо опис
Type
Vector=array [1..30] of real;
Var
Dan:Vector;
Скільки елементів в масиві Dan?
Назвати перший і останній елементи масиву.
2. Маємо опис
Type
day=(yesterday, today, tomorrow);
Var
Dan:array [day] of 0..24;
Скільки елементів в масиві Dan?
Які значення може приймати індекс?
Назвати перший і останній елементи масиву.
Які значення можуть приймати елементи масиву?
3. Описати масив, елементами якого є натуральні числа, а індексами довільні символи.
4. Чи можна в процесі виконання програми змінити розмір масиву?
5. Масив може складатись з одного елементу? Описати його.
6. Описати масив розміром 10 елементів, значеннями яких може бути true або false.
7. Маємо опис
Type
TMas=array of [1..15,’a’..’z’] of real ;
Var
A,B:TMas;
Які з вказаних дій допустимі в мові Pascal:
A=B; A:=B; A:=A+B; read(A); A[1}:=B[2]; A[3]:=A[4]; A[5,’a’]:=B[6,’d’]; A<>B;
8. Маємо опис
Type
TMas=array of [1..5,1..5] of real ;
Var
A,B:TMas;
Скільки елементів містить масив А?
Назвати перший і останній елементи масиву.
Назвати елемент масиву, що знаходиться в третьому рядку і четвертому стовпці.
9. Визначити кількість нульових елементів в заданому масиві.
10. Задано 20 чисел. Визначити, скільки серед них чисел, що дорівнюють останньому.
11. Задано масив з 10 символів. Вивести символи в зворотному порядку.
12. Задано масив з 30 цифрами. Визначити, яка цифра в ньому зустрічається найчастіше.
13. Задано масив 20 символів. Визначити, чи порядок символів з початку масиву до кінця і навпаки однаковий. Наприклад, абвгддгвба.
14. Знайти суму всіх елементів матриці 5х5.
15. Підрахувати суму додатних елементів в кожному рядку матриці 5х6.
16. Масив розміром 12х31 містить дані про температуру в місті. Визначити дні, коли була найвища і найнижча температура.
17. Розробити програму формування матриці за зразком: 0 0 0 0 0 0 0 0 0 0
0 1 0 0 0 0 0 0 0 0
0 0 2 0 0 0 0 0 0 0
0 0 0 3 0 0 0 0 0 0
. . . . . . . . . . . . . . .
0 0 0 0 0 0 0 0 0 9
Дата добавления: 2015-08-26; просмотров: 618;