Вступ до програмування

Розв'язування задач з використанням комп'ютера. Поняття інформаційної моделі. Способи описування алгоритмів. Базові структури алгоритмів. Інтегровані середовища програмування. Створення лінійних програм. Алгоритми роботи з рядковими величинами.

Рубрика Программирование, компьютеры и кибернетика
Вид учебное пособие
Язык украинский
Дата добавления 03.03.2013
Размер файла 618,4 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Program Example_314_2;

Uses crt;

Const N=100;

Type

Masiv = array[1..N] of real;

Var A:Masiv; {A - масив для зберігання даних

чисел}

i,count:byte; {і - змінна циклу, count - кількість

сусідств}

Begin

Randomize;

Clrscr;

count:=0;

For i:=1 to N do

Begin

A[i]:=random*100-random*50; {Заповнення масиву

випадковими дійсними числами}

Write(A[i]:8:2); {Виведення масиву на екран

для контролю правильності

роботи програми}

End;

For i:=1 to N-1 do

Begin

If (A[I]<0) and (A[I+1]>0) or

(A[I]>0) and (A[I+1]<0)

then count:=count+1;

End;

Writeln;

Writeln('Кількість заданих сусідств ',count);

Readkey; {Затримка зображення на екрані}

End.

Задача №321(1,2).

Умова: Дано одновимірний масив цілих чисел A[і], де і =1,2,…,n. Визначити, скільки разів максимальний елемент зустрічається у даному масиві та порядковий номер першого найбільшого елементу.

Для розв'язку цієї задачі спочатку необхідно пройти по всіх елементах масиву і знайти серед них максимальний, запам'ятавши його номер. Для цього користуються стандартним алгоритмом, що полягає в наступному:

1) береться будь-який елемент масиву (як правило, перший) і його значення присвоюється змінній max, тобто він вважається за еталон найбільшого елементу;

2) по черзі з масиву вибираються всі останні елементи і, якщо серед них знайдеться більший за вибраний еталон, то змінній max присвоюється нове значення, яке тепер буде новим еталоном. В іншій змінній, наприклад, N_max запам'ятовується номер цього найбільшого елементу (початкове значення цієї змінної було 1, тому що спочатку ми вважали найбільшим 1-ий елемент).

Після закінчення перегляду всього масиву змінна max буде містити шуканий максимум, а змінна N_max - його номер. Щоб запам'ятати номер першого максимального елемента, необхідно шукати в матриці елемент, що точно більше еталону. Якщо ж ми будемо шукати елемент, що не менший за еталон, то в змінній N_max залишиться номер останнього найбільшого елементу (подумайте чому).

Після знаходження максимуму другим проходом можна вже підрахувати кількість таких елементів в масиві. Для цього кожен елемент порівнюється з еталоном, що знаходиться в змінній max, та до лічильника count додається одиниця у випадку співпадання цих значень.

Програма, що реалізує описаний алгоритм, наведена нижче:

Program Example_321_1_2;

Uses crt;

Const n = 30;

Var A:array[1..n] of integer; {A - масив даних

чисел}

i:byte; {і - зміннa циклу}

count,N_max:byte; {count - кількість

максимальних елементів в

масиві, N_max - номер першого

найбільшого елементу}

max:integer; {max - максимальний елемент

масиву}

Begin

Clrscr;

Randomize;

{Заповнення масиву випадковими числами та

виведення його на екран для контролю за

роботою програми}

For i:=1 to n do

Begin

A[i]:=random(150) - random(80);

Write(A[i]:5);

end;

{Надання змінним початкових значень}

max:=A[1];

N_max:=1;

count:=0;

{Прохід по масиву для пошуку максимуму та його

номеру}

for i:=1 to n do

begin

if A[i]> max

then

begin

max:=A[i];

N_max:=i;

end;

end;

{Другий прохід по масиву для підрахунку кількості

максимальних елементів}

for i:=1 to n do

begin

if A[i]= max

then count:=count+1;

end;

Writeln('Максимум = ',max);

Writeln('Номер першого максимума = ',N_max);

Writeln('Кількість максимумів = ',count);

Readkey; {Затримка зображення на екрані}

End.

Задача №350(1).

Умова: Дано натуральне число n. Визначити кількість додатних та від'ємних елементів таблиці aij, де i,j = 1,2,…,n, якщо: Aij = sin(i+j).

Візьмемо дві змінних count_plus та count_minus для зберігання кількості додатних та від'ємних елементів масиву відповідно .

На початку програми в даній задачі необхідно заповнити масив за законом, що заданий в умові. А після обчислення елементу масиву можна перевірити, являється він додатнім чи від'ємним і в залежності від результату перевірки додати одиницю до однієї чи другої змінної.

Програма, що реалізує запропонований алгоритм, наведена нижче:

Program Example_350_1;

Uses crt;

Const n = 8;

Type

Masiv = array[1..n,1..n] of real;

Var A:Masiv; {A - масив для зберігання даних

чисел}

i,j:byte; {і,j - змінні циклу}

count_plus,count_minus:word;

Begin

Clrscr;

count_plus:=0;

count_minus:=0;

For i:=1 to n do

Begin

For j:=1 to n do

begin

A[i,j]:=sin(i+j); {Заповнення масиву}

Write(A[i,j]:8:2); {Виведення на екран}

If A[I,j] > 0

Then count_plus: = count_plus + 1;

If A[I,j] < 0

Then count_minus: = count_minus + 1;

end;

writeln;

End;

Writeln('Кількість додатних елементів масиву - ',count_plus);

Writeln('Кількість від'ємних елементів масиву - ',count_minus);

Readkey; {Затримка зображення на екрані}

End.

Задача №352.

Умова: Дано квадратну дійсну матрицю порядку n. Усі максимальні елементи матриці замінити нулями.

В даній задачі спочатку необхідно визначити, який елемент матриці є максимальним. Для цього використовується алгоритм, що наведений вище. Єдина різниця полягає в тому, що в цій задачі масив двовимірний і тому циклів для проходу по ньому буде два. Після цього другим проходом по масиву ми будемо порівнювати елементи зі знайденим значенням максимуму і, якщо елементи будуть дорівнювати значенню max, вони будуть замінюватись на нуль. Програма для розв'язку описаного алгоритму має наступний вигляд:

Program Example_352;

Uses crt;

Const n = 10;

Type

Masiv = array[1..n,1..n] of real;

Var A : Masiv; {A - масив для зберігання даних чисел}

i,j : byte; {і,j - змінні циклу}

max : real; {max - максимальний елемент масиву}

Begin

Randomize;

Clrscr;

For i:=1 to n do

Begin

For j:=1 to n do

begin

A[i,j]:=random(120)/3-random*20;

Write(A[i,j]:8:2);

end;

writeln;

End;

max:=A[1,1]; {Беремо у якості еталону перший

елемент масиву}

For i:=1 to n do

For j:=1 to n do

begin

if A[i,j]>max then Max:=A[i,j];

{Порівнюємо кожен елемент масиву з еталоном

і, якщо черговий елемент більший за еталон, переприсвоюємо еталон}

end;

End;

Writeln('Максимальний елемент масиву - ',max:8:2);

Writeln('Перетворена матриця: ');

For i:=1 to n do

begin

For j:=1 to n do

begin

if A[i,j]=max then A[i,j]:=0;

{Шукаємо максимуми в масиві і, знайшовши,присвоюємо їм нуль}

write(a[i,j]:8:2);

end;

writeln;

end;

End;

Readkey; {Затримка зображення на екрані}

End.

Задача №355_1.

Умова: Дано квадратну дійсну таблицю розмірності n. Обчислити кількість входжень даного елемента.

В даній задачі необхідно крім масиву чисел ввести (або задати якимось іншим шляхом) значення шуканого елементу. Тоді алгоритм підрахунку кількості цих елементів зводиться до організації порівняння кожного елемента масиву з шуканим значенням. У випадку співпадання обох виконується підрахунок кількості стандартним способом: Count:=count+1;

де count - лічильник, що зберігає кількість знайдених чисел.

Program Example_355_1;

Uses crt;

Const n = 10;

Type

Masiv = array[1..n,1..n] of real;

Var A:Masiv;

i,j:byte; {і,j - змінні циклу}

x:real; {x - шуканий елемент}

count:word; {count - кількість входжень}

Begin

Randomize;

Clrscr;

Write('Введіть шуканий елемент: ');

Readln(x);

Count:=0; {Початок обрахунку}

For i:=1 to n do

Begin

For j:=1 to n do

begin

A[i,j]:=random*120-random*80;

Write(A[i,j]:8:2);

If A[i,j]=x

Then count:=count+1;

end;

writeln;

End;

Writeln('Кількість шуканих елементів - ',count);

Readkey; {Затримка зображення на екрані}

End.

Задача №356.

Умова: Дано цілочислову прямокутну таблицю порядку n х m. Усі елементи таблиці, менші за середнє арифметичне її значень, замінити на "-1", а більші - на "1".

Щоб виконати задану заміну, необхідно на початку програми обчислити середнє арифметичне елементів таблиці. Для цього потрібно знайти суму всіх елементів, а потім поділити на їх кількість (елементів в таблиці всього n*m). Після виконання зазначених обчислень необхідно ще раз організувати прохід по масиву, в результаті якого командою розгалуження вибрати додатні та від'ємні елементи і замінити їх згідно з умовою задачі.

Program Example_356;

Uses crt;

Const n = 9;

m = 12;

Type

Masiv = array[1..n,1..m] of integer;

Var A : Masiv;

i,j : byte; {і,j - змінні циклу}

Sum,SA : real; {Sum - сума елементів таблиці, SA - середнє арифметичне}

Begin

Randomize;

Clrscr;

Sum:=0; {Початкове значення суми}

Writeln('Вихідний масив: ');

For i:=1 to n do

Begin

For j:=1 to m do

begin

A[i,j]:=random(120)-random(65);

Write(A[i,j]:5);

Sum:=Sum+A[i,j]; {Накопичення суми

елементів масиву}

end;

writeln;

End;

SA:=Sum/(n*m);

Writeln('Середнє арифметичне - ',SA:8:2);

Writeln('Результуючий масив: ');

For i:=1 to n do

Begin

For j:=1 to m do

begin

if A[I,j] < SA then A[I,j]:=-1;

if A[I,j] > SA then A[I,j]:=1;

Write(A[i,j]:5);

end;

writeln;

End;

Readkey; {Затримка зображення на екрані}

End.

Задача №358.

Умова: У даній дійсній матриці розмірністю 6 х 9 знайти суму елементів рядка, що містить найбільший елемент. Вважається, що такий елемент в матриці єдиний.

Щоб знайти суму елементів заданого рядка, спочатку необхідно визначити, в якому з рядків матриці знаходиться максимальний елемент. Тому, визначивши, який з елементів є найбільшим, ми повинні ще запам'ятати номер рядка, в якому він знаходиться. Використаємо для цього додаткову змінну N_max. Після повного проходу по масиву з метою пошуку максимуму, організовуємо новий цикл, але вже не по всьому масиву, а тільки по рядку з номером N_max для обчислення суми елементів цього рядка.

Програма для реалізації описаного алгоритму має наступний вигляд:

Program Example_358;

Uses crt;

Type

Masiv = array[1..6,1..9] of real;

Var A:Masiv;

i,j:byte; {і,j - змінні циклу}

Sum,max:real; {Sum - сума елементів таблиці,

max - максимальний елемент

таблиці}

N_max:byte; {N_max - номер рядка, що

містить максимальний елемент}

Begin

Randomize;

Clrscr;

Writeln('Вихідний масив: ');

For i:=1 to 6 do

Begin

For j:=1 to 9 do

begin

A[i,j]:=random*12-random(65)/11;

Write(A[i,j]:8:2);

end;

writeln;

End;

max:=A[1,1]; {Беремо у якості еталону перший

елемент масиву}

N_max:=1;

For i:=1 to 6 do

For j:=1 to 9 do

Begin

if A[i,j]>max

then

Begin

max:=A[i,j];

N_max:=i;

End;

End;

Writeln('Максимальний елемент масиву - ',max:8:2);

Sum:=0; {Початкове значення суми}

For j:=1 to n do

Begin

Sum:=Sum+A[N_max,j];

End;

Writeln('Отримана сума - ',Sum:8:2);

Readkey; {Затримка зображення на екрані}

End.

Домашнє завдання:

· Задачі №314(1,3), №321(3,4), №350(2), №353(1), №355(2), №360(1), №361.

Тема уроку: "Створення та реалізація програм на опрацювання табличних величин"

Мета уроку: Навчити розробляти програми на опрацювання табличних величин.

Тип уроку: Практичний.

Цей урок можна побудувати таким чином: дати дітям одне із завдань, що були задані додому, для реалізації у середовищі Turbo Pascal. Рекомендується при цьому розбити ці завдання по рівню складності і більш складні запропонувати дітям на високий рівень, а простіші на достатній рівень досягнень.

На мій погляд це розбиття можна зробити таким чином:

Достатній рівень:

Задача №293.

Записати наведені нижче послідовності змінних з індексами у вигляді послідовностей елементів масивів:

1) (xk), де (k = 0,1,…,5)

2) (bj), де (j = -8,-7,…,-1)

3) (Pk), де (k = i-2, i-1, …, i+1)

Задача №295.

Нехай нижня та верхня межі індексів одновимірного масиву В відповідно дорівнюють -5 та 10. Обчислити порядкові номери наступних елементів масиву:

№ варіанту

Завдання

4

B[10]

5

B[-4]

10

B[3]

12

B[+0]

Задача №297.

Нехай нижня та верхня межі індексів одновимірного масиву S відповідно дорівнюють -10 та 32. Визначити значення індексів елементів масиву S, порядковими номерами яких є:

№ варіанту

Завдання

2

17

4

27

11

39

14

42

18

37

Задача №299.

Нехай елементи одновимірного масиву A[1..10] набувають відповідно значень -5, -3, -1, 1, 3, 5, 7, 9, 11, 13. Які значення буде надруковано в результаті виконання таких операторів:

№ варіанта

Завдання

1

For i:=1 to 10 do Writeln(A[i])

6

i:=1;repeat Writeln(A[i]) i:=i+1;until A[i]<0;

8

i:=10;while A[i-9]<0 do begin Writeln(A[i]) i:=i+1; end;

10

i:=1;repeat Writeln(A[2*i-1]) i:=i+1;Until i>=10;

Задача №301.

Мама розвела оранжерею кактусів, деякі з яких були колючі, а інші - ні. Маленька донечка Яринка вирішила, що голки на кактусах - це надто зухвало, і тому старанно поголила їх бритвою. Добре, що у мами залишився записник, в якому всі кактуси були позначені кількістю голочок a1, a2, …, an (годі кактуси були позначені 0). Скількох кактусів торкнулася рука юної перукарки?

Задача №311(3).

Дано одновимірний масив цілих чисел А[i], де i = 1,2,…n. Вивести елементи масиву з непарними індексами.

Задача №314.

Дано натуральне число n та послідовність дійсних чисел a1, a2, …, an. Визначити в цій послідовності кількість сусідств:

1) двох додатних чисел;

2) двох нульових елементів.

Задача №315.

Дано натуральне число n та цілі числа a1, a2, … an і b1, b2, … , bn. Визначити значення c1, c2, … , cn, якщо:

2) ci=ai/bi, (bi<>0)

3) ci = sin(ai) + cos(bi)

Задача №318.

Дано дійсні числа a1, a2, …, a30, b1, b2, …, b30. Обчислити

a1*b30 + a2*b29 +…+ a30*b1.

Задача №321 (3).

Дано одновимірний масив цілих чисел A[i], де i = 1, 2,…, n. Визначити порядковий номер останнього найменшого елемента.

Задача №343.

Дано натуральні числа n, m та випадкові дійсні числа, що утворюють таблицю A[i,j], де i = 1,2,…, n; j = 1, 2, …, m. Роздрукувати:

1) у рядок елементи, що розташовані в останньому стовпчику;

2) у рядок елементи, розташовані на головній діагоналі (обидва індекси яких збігаються).

Задача №344 (3).

Дано натуральні числа n, m та матриці цілих чисел Aij, Bij, де i = 1, 2, …, n, j = 1, 2, …,m. Обчислити значення елементів матриці Cij, якщо: Cij =sin Aij + cos Bij.

Задача №345 (2).

Дано натуральні числа n, m. Обчислити значення елементів матриці Cij, (i = 1,2,…n, j=1,2,…,m), якщо:

Задача №350(2).

Дано натуральне число n. Визначити кількість додатних та кількість від'ємних елементів таблиці aij, де i,j = 1,2,…n, якщо aij = cos(i^2 + n).

Задача №353(1).

Елементи цілочислової прямокутної матриці розміром m x n задано випадковим чином. Надрукувати пари індексів першого максимального елемента.

Задача №355(2).

Дано квадратну дійсну таблицю розмірності n. Обчислити кількість максимальних елементів.

Задача №360(1).

Дано квадратну матрицю розмірності n. Надрукувати індекси елементів, що розташовані на бічній діагоналі.

Високий рівень:

Задача №303.

Маленький онучок вирішив допомогти бабусі підстригти квіти у її дорогоцінному квітнику, зрізавши лише бутони та квіточки на них. На щастя кмітливий хлопчик зрізав лише ті квіти, які були заввишки від h1 см до h2 см від землі. Скільком квіточкам пощастило бути підстриженими, якщо їх висота у сантиметрах становить a1, a2, …, an.

Задача №305.

Маленький Митрик кожний місяць виростає на 2 см, а у бабусі в комірчині набиті полички з різними ласощами - варенням, джемом, повидлом. Акуратистка бабуся записувала висоту і ставила наступний порядковий номер у свій записник кожної нової полички в тій послідовності, як вона з'являлась у комірчини стараннями дідуся. Висота цих поличок була a1, a2, … an у сантиметрах. Нові полички дідусь весь час мостив де йому заманеться - вище, нижче і між тими, що вже були. Вияснити, через скільки місяців до яких поличок, враховуючи їх порядок запису в бабусиній книжці, добереться Митрик (наприклад, спочатку до п'ятої, занотованої у записнику, потім до другої і т.д.), якщо він відкрив для себе бабусину комірчину, коли його зріст був H1 см, а доросте Митрик до H2 см.

Задача №313.

Дано одновимірний масив цілих чисел A[I], де I = 1, 2, …, n. Надрукувати у два стовпчики окремо додатні та від'ємні елементи масиву із зазначенням їх індексів.

Задача №318(6).

Дано дійсні числа a1, a2, …, a30, b1, b2, …, b30. Обчислити:

Задача №321(4).

Дано одновимірний масив цілих чисел A[i], де i = 1, 2,…, n. Визначити яких елементів більше - максимальних чи мінімальних.

Задача №347(3).

Дано натуральні числа n, m та матриці дійсних чисел Aij, Bij, де i=1,2,…n; j=1,2,…m. Обчислити значення елементів матриці Cij, якщо:

Задача №361.

Знайти різницю між найменшим та найбільшим значенням елементів головної діагоналі квадратної матриці розмірністю n.

Таке розбиття не являється догмою і кожен вчитель може запропонувати будь-яку з цих задач як на високий, так і на достатній рівень досягнень учня в залежності від загального рівня досягнень в класі.

Тема уроку: "Алгоритми впорядкування табличних величин"

Мета уроку: Дати поняття про впорядкування табличних величин та методи впорядкування. Навчити розв'язувати задачі, що потребують сортування.

Тип уроку: Лекційний.

Теоретичний матеріал:

Дуже часто при розв'язуванні задач, пов'язаних з обробкою масивів, необхідно виконувати сортування його елементів за зростанням або спаданням. Такі задачі мають велике практичне значення. Розглянемо деякі з методів, що дозволяють впорядкувати елементи таблиць.

Всі існуючі методи сортування можна поділити на три групи:

обмінні сортування - виконується обмін між собою двох деяких (найчастіше сусідніх) елементів масивів, якщо відповідні елементи розташовані у вихідному масиві невірно; процес повторюється або певну кількість разів, або доки при черговому проході елементи в масиві не будуть переставлятися;

· методи прямого вибору - в масиві вибирається елемент з певними властивостями (наприклад, мінімум або максимум), а потім вибраний елемент становиться на своє місце;

методи прямої вставки - послідовно вибирається елемент з масиву і після визначення його місця у впорядкованому наборі даних вставляється безпосередньо на своє місце.

Найбільш відомим обмінним сортуванням являється метод "бульбашки". В ньому при послідовному проході по масиву порівнюються два сусідніх елементи. Якщо їх розміщення являється неправильним (наприклад, при впорядкуванні за зростанням лівий елемент більший за правий), виконується взаємообмін елементів. Процес повторюється щонайменше N-1 разів, де N - кількість елементів в масиві.

Простіший алгоритм "бульбашки" має наступний вигляд :

Program Bubble; {Сортування за зростанням}

Const N=20;

Var Mas:array[1..N] of integer;

i,j:integer; {i,j - змінні циклу}

Rez:integer; {Rez - додаткова змінна для

обміну елементів масиву між собою}

Begin

For i:=1 to N do

For j:=1 to N-1 do

If Mas[j]>Mas[j+1]

then

Begin

{Обмін елементів масиву через третю змінну}

Rez:=Mas[j];

Mas[j]:=Mas[j+1];

Mas[j+1]:=Rez;

End;

End.

Метод можна модифікувати, зменшуючи діапазон сортування після кожного проходу, адже ясно, що після кожного проходу максимальний елемент масиву буде "спливати наверх", тобто займати спочатку останню позицію таблиці, потім передостанню і таке інше (дивись таблицю).

Початковий масив

Прохід 1

Прохід 2

Прохід 3

Прохід 4

Прохід 5

Прохід 6

Прохід 7

Прохід 8

703

765

677

612

509

154

426

653

275

897

170

908

061

512

087

503

908

703

765

677

612

509

154

426

653

275

897

170

512

061

503

087

908

897

703

765

677

612

509

154

426

653

275

512

170

503

061

087

908

897

765

703

677

653

612

509

154

426

512

275

503

170

087

061

908

897

765

703

677

653

612

512

509

154

426

503

275

170

087

061

908

897

765

703

677

653

612

512

509

503

154

426

275

170

087

061

908

897

765

703

677

653

612

512

509

503

426

154

275

170

087

061

908

897

765

703

677

653

612

512

509

503

426

275

154

170

087

061

908

897

765

703

677

653

612

512

509

503

426

275

170

154

087

061

Програма, що реалізує описаний алгоритм має наступний вигляд:

Program Bubble; {Сортування за зростанням} Const N=20; Var Mas:array[1..N] of integer; i,j:integer; {i,j - змінні циклу} Rez:integer; {Rez - додаткова змінна для обміну елементів масиву між собою} Begin For i:=1 to N do For j:=1 to N-i do If Mas[j]>Mas[j+1] then Begin {Обмін елементів масиву через третю змінну} Rez:=Mas[j]; Mas[j]:=Mas[j+1]; Mas[j+1]:=Rez; End; End. Зверніть увагу, що в цьому алгоритмі у вкладеному циклі, що безпосередньо здійснює порівняння елементів, змінна циклу змінюється за іншим законом, ніж в попередньому випадку: від 1 до N-i, де i - змінна циклу зовнішньої команди повторення.

Другий метод модифікації алгоритму "бульбашки" полягає в тому, що ми вводимо додаткову змінну булівського типу (так званий прапорець), яка буде фіксувати, при черговому проході була здійснена хоча б одна перестановка елементів чи ні. Очевидно, що якщо при черговому проході ні однієї перестановки не було зроблено, то масив вже відсортований і процес перегляду можна припинити.

Домовимось вважати прапорець "опущеним" (тобто рівним значенню false), якщо перестановки не відбулося, і "піднятим" (рівним true) - в протилежному випадку. Крім того, на забуваємо, що як і в попередньому випадку, після кожного проходу по масиву найбільший елемент "спливає" наверх, тобто займає своє позицію. Тому вводимо додаткову змінну k, що фіксує праву границю впорядкованості, тобто при першому проході k=1 і ми впорядковуємо всі елементи від 1 до N-1, на другому проході k=2 і будуть впорядковуватись всі елементи від 1 до N-2 (останній елемент вже впорядкований) і так далі.

Програма, що виконує описаний вище алгоритм, має наступний вигляд:

Program Bubble; {Сортування за зростанням}

Const N=20;

Var Mas:array[1..N] of integer;

i,j,k:integer; {i,j - змінні циклу, k - змінна,

що фіксує праву границю

впорядкування}

Rez:integer; {Rez - додаткова змінна для

обміну елементів масиву між собою}

Flag:Boolean; {Flag - змінна, що фіксує,

відбулася перестановка чи ні}

Begin

k:=1;

Repeat

Flag:=false;

{Робимо припущення, що масив відсортований, а

потім перевіряємо, чи правильним було це

припущення, тобто чи немає серед елементів таких,

що неправильно розташовані, якщо такі елементи

будуть, то ми їх переставляємо і Flag присвоюємо

значення true}

For i:=1 to N-k do

Begin

If Mas[i]>Mas[i+1]

then

Begin

{Обмін елементів масиву через третю змінну}

Rez:=Mas[i];

Mas[i]:=Mas[i+1];

Mas[i+1]:=Rez;

Flag:=true;

End;

k:=k-1;

Until Flag = false;

End.

Мовою блок-схем алгоритм сортування "бульбашкою" має наступний вигляд (третій із запропонованих):

Другим методом сортування є метод прямого вибору. Один з його різновидів полягає в тому, що вибирається мінімальний елемент масиву, а потім виконується його обмін з першим елементом таблиці. Після цього перший елемент вважається впорядкованим і процес повторюється для підмасиву, що містить на один елемент менше за початковий, тобто елементи з 2-го до останнього. Процес повторюється кожен раз для масиву, зменшеного на один елемент. Закінчується він тоді, коли невпорядкований підмасив стає довжиною один елемент. Таким чином, загальна кількість повторень дорівнює, як і в попередньому випадку, N-1 (N - кількість елементів масиву).

Програмна реалізація запропонованого методу наведена нижче:

Program Selection;

Const N=20;

Var Mas:array[1..N] of integer;

i,j,Min,N_Min:integer;

Begin

For i:=1 to N-1 do

Begin

Min:=Mas[i]; {Зберігання еталону мінімуму}

N_Min:=i; {Зберігання номера мінімуму}

For j:=i+1 to N do

If Mas[j]then

Begin

Min:=Mas[j]; {Перевизначення еталону}

N_Min:=j; {Зберігання номеру еталону}

End;

{Обмін місцями мінімуму та першого елементу

підмасиву}

Mas[N_Min]:=Mas[i];

Mas[i]:=Min;

End;

End.

Зверніть увагу на те, що пошук мінімуму в програмі організований стандартно, тобто перший елемент береться за еталон, а потім порівнюється з усіма останніми і, якщо новий елемент являється меншим за еталон, то еталон переприсвоюється. Крім цього в алгоритмі запам'ятовується місце знаходження цього мінімального елемента для того, щоб після виходу з циклу можна було обміняти місцями знайдений мінімум і перший елемент підмасиву. Але так як підмасив весь час змінює свій розмір, за еталон береться перший елемент саме того підмасиву, який розглядається на наступному кроці, тобто і-ий елемент початкового масиву (і - змінна зовнішнього циклу, що вказує на початок нового підмасиву на кожному кроці).

Метод прямої вставки забезпечує вставку кожного елементу невпорядкованого масиву на своє місце у вже впорядкований масив. На початку сортування масив розбивається на два підмасиви, лівий з яких повинен бути впорядкованим, а правий - ні. У невідомому масиві тільки один елемент можна вважати впорядкованим, тому спочатку ліва відсортована частина складається всього з одного елементу. Потім по черзі беруться елементи з другої невпорядкованої частини і для них знаходиться місце вставки в першу частину таке, щоб впорядкованість не порушувалась. Це означає, що при сортуванні за зростанням необхідно знайти таке місце в масиві, де лівий елемент буде меншим або рівним за той, що вставляється, а правий - більшим за той, що вставляється. Після цього в масиві необхідно зробити зсув елементів, щоб звільнити місце, на яке і вставити черговий елемент.

Щоб оптимізувати розглянутий алгоритм, можна поєднати зсув елементів з пошуком місця вставляння. Для цього перевірки виконуються в зворотному напрямку від елемента, що потрібно вставити до місця вставки Так як елемент, що вставляється, береться першим з невпорядкованої частини масиву, то ліворуч від нього всі елементи вже впорядковані. Тому фактично необхідно порівнювати даний елемент з усіма лівішими від нього і, якщо даний елемент менший за той, з яким порівнюється, то виконується обмін елементів. Елемент наче "пливе" ліворуч від свого початкового місця розташування і процес цей припиняється, якщо знайдений елемент, не більший за даний, або ми досягли початку масиву. Наприклад, даний такий масив:

12 -8 0 30 5 100

Розбиваємо його на дві частини. До першої входить єдиний впорядкований елемент {12}, а до другої - всі останні {-8 0 30 5 100}. Запишемо тепер процес впорядкування по етапах:

І етап: елемент, що впорядковується = -8.

1) -8 < 12, тому виконується обмін, тобто після першого кроку масив має наступний вигляд:

-8 12 0 30 5 100

На цьому цикл припиняє свою роботу, тому що досягнуто початок масиву (і=1).

ІІ етап: елемент, що впорядковується = 0.

1) 0 < 12, значить виконується обмін, тобто після першого кроку масив має вигляд:

-8 0 12 30 5 100

2) 0 > -8 , значить обмін не виконується, здійснюється вихід з циклу, масив залишається без змін.

ІІІ етап: елемент, що впорядковується = 30.

1) 30 > 12, вхід до циклу не відбувається, масив залишається без змін.

ІV етап: елемент, що впорядковується = 5.

1) 5 < 30, виконується обмін, після перестановки масив має вигляд:

-8 0 12 5 30 100

2) 5 < 12, здійснюється обмін, масив набуває вигляду:

-8 0 5 12 30 100

3) 5 > 0, цикл припиняє свою роботу, масив залишається без змін.

V етап: елемент, що впорядковується = 100.

1) 100 > 30, вхід до циклу не відбувається, тому що умова відразу хибна

і масив залишається без змін.

Програму, що виконує запропонований алгоритм, наведено далі:

Program Insert;

Const N=20;

Var Mas:array[1..N] of integer;

i,j,Rez:integer;

Begin

For i:=2 to N do

Begin

j:=i;

{Цикл працює доки, лівий елемент більший за

правий та не досягнуто початок масиву}

while (j>1) and (Mas[j]<Mas[j-1]) do

Begin

Rez:=Mas[j];

Mas[j]:=Mas[j-1];

Mas[j-1]:=Rez;

j:=j-1;

End;

End;

End.

Домашнє завдання:

· Вивчити означення, що були дані на лекції (сортування, види сортування).

· Створити блок-схему запропонованих алгоритмів сортування ("бульбашка" - перший та другий методи, метод прямого вибору, метод прямої вставки).

Тема уроку: "Створення та реалізація програм на застосування методів впорядкування табличних величин."

Мета уроку: Навчити розв'язувати задачі, що потребують для свого розв'язання впорядкування масивів.

Тип уроку: Практичний.

На початку уроку бажано зробити опитування у письмовому чи усному вигляді за попереднім матеріалом. Потім можна розглянути кілька задач на застосування методів впорядкування табличних величин. Якщо клас досить сильний, можна запропонувати учням самостійний розв'язок цих задач.

Задача №339 (1).

Умова: Дано натуральне число n та послідовність дійсних чисел a1, a2, … an. Після впорядкування цієї послідовності за спаданням визначити, скільки членів послідовності залишилося стояти на своїх місцях.

Для того, щоб визначити, скільки чисел залишилось на своїх місцях, нам необхідно зберігати як вихідний масив, так і відсортований, тому перш за все зарезервуємо два однакових одновимірних масиви: А - вихідний масив та В - відсортований. Метод сортування масиву в даному випадку можна використовувати будь-який, наприклад, метол прямої вставки. Після виконання впорядкування проходом по обох масивах порівнюємо відповідні елементи вихідного та відсортованого масивів і, якщо вони співпадають, виконуємо підрахунок. Програма, що виконує описаний алгоритм, має наступний вигляд.

Program Example_339_1 ;

Uses crt;

Const N = 100;

Type

Masiv = array[1..N] of real;

Var A,B:Masiv; {A - масив для зберігання

початкової послідовності, В -

відсортований масив}

i,j,count:byte; {і,j - змінні циклу, count -

кількість елементів, що

залишились на своїх місцях}

Max:real; {Max - максимальний елемент

підмасиву}

N_max:byte; {N_max - номер максимального

елементу}

Begin

Randomize;

Clrscr;

For i:=1 to N do

Begin

A[i]:=random*100-random*50; {Заповнення масиву

випадковими дійсними числами}

Write(A[i]:8:2); {Виведення масиву на екран

для контролю правильності

роботи програми}

End;

B:=A;

For i:=1 to N-1 do

Begin

Max:=B[i]; {Зберігання еталону максимуму}

N_Max:=i; {Зберігання номера максимуму}

For j:=i+1 to N do

If B[j]>Max

then

Begin

Max:=B[j]; {Перевизначення еталону}

N_Max:=j; {Зберігання номеру еталону}

End;

{Обмін місцями мінімуму та першого елементу

підмасиву}

B[N_Max]:=B[i];

B[i]:=Max;

End;

count:=0;

For i:=1 to N do

Begin

If A[i]=B[i]

then count:=count+1;

End;

Writeln;

Writeln('Кількість елементів, що не змінили свого місця ',count);

Readkey; {Затримка зображення на екрані}

End.

Задача №342(1).

Умова: Дано натуральне число n та послідовність дійсних чисел a1, a2, … an. Визначити усі числа, що входять у послідовність по одному разу.

Пошук чисел, що входять у послідовність по одному разу, виконати важко, тому що для цього необхідно порівняти кожне число з кожним. Набагато простіше зробити це у відсортованому масиві, так як однакові числа в ньому будуть розташовані поруч. Тобто пропонуємо в даній задачі спочатку відсортувати масив (метод сортування будь-який, наприклад, "бульбашка"), а потім зробити по ньому прохід, порівнюючи сусідні елементи. Якщо вони не рівні, виконуємо підрахунок. Загальна кількість чисел, що входять у послідовність по одному разу, буде на одиницю більша, ніж отримане число в лічильнику.

Program Example_342_1;

Uses crt;

Const N = 100;

Type

Masiv = array[1..N] of real;

Var A:Masiv; {A - масив для зберігання

вихідної послідовності}

i,j,count:byte; {і,j - змінні циклу, count -

кількість елементів, що входять в

послідовність один раз}

k:integer; {k - змінна, що коригує праву

границю сортування}

Flag:Boolean; {Flag - змінна, що фіксує, була

виконана перестановка чи ні}

Begin

Randomize;

Clrscr;

For i:=1 to N do

Begin

A[i]:=random(300)/11-random*15;

Write(A[i]:8:2);

End;

k:=1;

Repeat

Flag:=false;

For i:=1 to N-k do

Begin

If A[i]B>then

Begin

{Обмін елементів масиву через третю змінну}

Rez:=A[i];

A[i]:=A[i+1];

A[i+1]:=Rez;

Flag:=true;

End;

k:=k-1;

Until Flag = false;

count:=0;

For i:=1 to N-1 do

Begin

If A[i]<>A[i+1]

then count:=count+1;

End;

count:=count+1;

Writeln;

Writeln('Кількість елементів, що входять у послідовність один раз ',count);

Readkey; {Затримка зображення на екрані}

End.

Задача №360(3).

Умова: Дано квадратну матрицю розмірності n. Надрукувати елементи бічної діагоналі у порядку зростання.

Для того, щоб надрукувати елементи в порядку зростання, пропонуємо їх занести у одновимірний масив і відсортувати будь-яким методом сортування, наприклад, методом прямої вставки.

Program Example_360_3;

Uses crt;

Const N = 10;

Type

Var A:array[1..N,1..N] of real; {A - вихідний масив}

Mas:array[1..N] of real; {Mas - масив для

зберігання діагональних

елементів вихідного масиву}

i,j:byte; {і,j - змінні циклу}

Rez:real; {Rez - змінна для взаємообміну

між двома елементами масиву}

Begin

Randomize;

Clrscr;

For i:=1 to n do

Begin

For j:=1 to n do

begin

A[i,j]:=random(120)/3-random*20;

Write(A[i,j]:8:2);

end;

writeln;

End;

{Формування масиву з елементів бічної діагоналі

вихідного масиву}

For i:=1 to N do

Mas[i]:=A[i,N+1-i];

For i:=2 to N do

Begin

j:=i;

while (j>1) and (Mas[j] <Mas[j-1]) do

Begin

Rez:=Mas[j];

Mas[j]:=Mas[j-1];

Mas[j-1]:=Rez;

j:=j-1;

End;

End;

Writeln('Елементи бічної діагоналі:');

For i:=1 to n do

begin

Write(Mas[i]:8:2);

end;

Readkey; {Затримка зображення на екрані}

End.

Задача №368.

Умова: Вважатимемо рядок квадратної матриці порядку n позначеним, якщо перший елемент цього рядка - нульовий. Вивести елементи матриці в такому вигляді: в кожному позначеному рядку - впорядковані за зростанням, а в інших - за спаданням.

Перевіривши перший елемент заданої квадратної таблиці на нуль, виконаємо впорядкування за зростанням або за спаданням одним з відомих способів сортування, наприклад, "бульбашкою".

Program Example_368;

Uses crt;

Const N = 9;

Type

Var A:array[1..N,1..N] of real; {A - вихідний масив}

i,j,k:byte; {і,j,k - змінні циклу}

Rez:real; {Rez - змінна для взаємообміну

між двома елементами}

Begin

Randomize;

Clrscr;

{Заповнення та виведення масиву на екран}

For i:=1 to n do

Begin

For j:=1 to n do

begin

A[i,j]:=random(120)/3-random*20;

Write(A[i,j]:8:2);

end;

writeln;

End;

{Цикл по рядках для перевірки першого елемента}

For k:=1 to n do

Begin

If A[k,1]=0

Then

Begin

{Сортування "бульбашкою" за зростанням}

For i:=1 to N do

For j:=1 to N-i do

If A[k,j]>A[k,j+1]

then

Begin

Rez:=A[k,j];

A[k,j]:=A[k,j+1];

A[k,j+1]:=Rez;

End;

End

Else

Begin

{Сортування "бульбашкою" за спаданням}

For i:=1 to N do

For j:=1 to N-i do

If A[k,j]B>then

Begin

Rez:=A[k,j];

A[k,j]:=A[k,j+1];

A[k,j+1]:=Rez;

End;

End;

End;

{Виведення перетвореного масиву}

For i:=1 to n do

Begin

For j:=1 to n do

begin

Write(A[i,j]:8:2);

end;

writeln;

End;

Readkey; {Затримка зображення на екрані}

End.

Домашнє завдання:

· Задача №339(2), №342(3,5), №367

Тема уроку: "Створення та реалізація програм на застосування методів впорядкування табличних величин"

Мета уроку: Навчити розв'язувати задачі, що потребують для свого розв'язання впорядкування масивів.

Тип уроку: Практичний.

На початку уроку бажано зробити опитування у письмовому чи усному вигляді за попереднім матеріалом. Потім можна розглянути кілька задач на застосування методів впорядкування табличних величин. Якщо клас досить сильний, можна запропонувати учням самостійний розв'язок цих задач.

Задача №339 (1).

Умова: Дано натуральне число n та послідовність дійсних чисел a1, a2, … an. Після впорядкування цієї послідовності за спаданням визначити, скільки членів послідовності залишилося стояти на своїх місцях.

Для того, щоб визначити, скільки чисел залишилось на своїх місцях, нам необхідно зберігати як вихідний масив, так і відсортований, тому перш за все зарезервуємо два однакових одновимірних масиви: А - вихідний масив та В - відсортований. Метод сортування масиву в даному випадку можна використовувати будь-який, наприклад, метол прямої вставки. Після виконання впорядкування проходом по обох масивах порівнюємо відповідні елементи вихідного та відсортованого масивів і, якщо вони співпадають, виконуємо підрахунок. Програма, що виконує описаний алгоритм, має наступний вигляд.

Program Example_339_1 ;

Uses crt;

Const N = 100;

Type

Masiv = array[1..N] of real;

Var A,B:Masiv; {A - масив для зберігання

початкової послідовності, В -

відсортований масив}

i,j,count:byte; {і,j - змінні циклу, count -

кількість елементів, що

залишились на своїх місцях}

Max:real; {Max - максимальний елемент

підмасиву}

N_max:byte; {N_max - номер максимального

елементу}

Begin

Randomize;

Clrscr;

For i:=1 to N do

Begin

A[i]:=random*100-random*50; {Заповнення масиву

випадковими дійсними числами}

Write(A[i]:8:2); {Виведення масиву на екран

для контролю правильності

роботи програми}

End;

B:=A;

For i:=1 to N-1 do

Begin

Max:=B[i]; {Зберігання еталону максимуму}

N_Max:=i; {Зберігання номера максимуму}

For j:=i+1 to N do

If B[j]>Max

then

Begin

Max:=B[j]; {Перевизначення еталону}

N_Max:=j; {Зберігання номеру еталону}

End;

{Обмін місцями мінімуму та першого елементу

підмасиву}

B[N_Max]:=B[i];

B[i]:=Max;

End;

count:=0;

For i:=1 to N do

Begin

If A[i]=B[i]

then count:=count+1;

End;

Writeln;

Writeln('Кількість елементів, що не змінили свого місця ',count);

Readkey; {Затримка зображення на екрані}

End.

Задача №342(1).

Умова: Дано натуральне число n та послідовність дійсних чисел a1, a2, … an. Визначити усі числа, що входять у послідовність по одному разу.

Пошук чисел, що входять у послідовність по одному разу, виконати важко, тому що для цього необхідно порівняти кожне число з кожним. Набагато простіше зробити це у відсортованому масиві, так як однакові числа в ньому будуть розташовані поруч. Тобто пропонуємо в даній задачі спочатку відсортувати масив (метод сортування будь-який, наприклад, "бульбашка"), а потім зробити по ньому прохід, порівнюючи сусідні елементи. Якщо вони не рівні, виконуємо підрахунок. Загальна кількість чисел, що входять у послідовність по одному разу, буде на одиницю більша, ніж отримане число в лічильнику.

Program Example_342_1;

Uses crt;

Const N = 100;

Type

Masiv = array[1..N] of real;

Var A:Masiv; {A - масив для зберігання

вихідної послідовності}

i,j,count:byte; {і,j - змінні циклу, count -

кількість елементів, що входять в

послідовність один раз}

k:integer; {k - змінна, що коригує праву

границю сортування}

Flag:Boolean; {Flag - змінна, що фіксує, була

виконана перестановка чи ні}

Begin

Randomize;

Clrscr;

For i:=1 to N do

Begin

A[i]:=random(300)/11-random*15;

Write(A[i]:8:2);

End;

k:=1;

Repeat

Flag:=false;

For i:=1 to N-k do

Begin

If A[i]B>then

Begin

{Обмін елементів масиву через третю змінну}

Rez:=A[i];

A[i]:=A[i+1];

A[i+1]:=Rez;

Flag:=true;

End;

k:=k-1;

Until Flag = false;

count:=0;

For i:=1 to N-1 do

Begin

If A[i]<>A[i+1]

then count:=count+1;

End;

count:=count+1;

Writeln;

Writeln('Кількість елементів, що входять у послідовність один раз ',count);

Readkey; {Затримка зображення на екрані}

End.

Задача №360(3).

Умова: Дано квадратну матрицю розмірності n. Надрукувати елементи бічної діагоналі у порядку зростання.

Для того, щоб надрукувати елементи в порядку зростання, пропонуємо їх занести у одновимірний масив і відсортувати будь-яким методом сортування, наприклад, методом прямої вставки.

Program Example_360_3;

Uses crt;

Const N = 10;

Type

Var A:array[1..N,1..N] of real; {A - вихідний масив}

Mas:array[1..N] of real; {Mas - масив для

зберігання діагональних

елементів вихідного масиву}

i,j:byte; {і,j - змінні циклу}

Rez:real; {Rez - змінна для взаємообміну

між двома елементами масиву}

Begin

Randomize;

Clrscr;

For i:=1 to n do

Begin

For j:=1 to n do

begin

A[i,j]:=random(120)/3-random*20;

Write(A[i,j]:8:2);

end;

writeln;

End;

{Формування масиву з елементів бічної діагоналі

вихідного масиву}

For i:=1 to N do

Mas[i]:=A[i,N+1-i];

For i:=2 to N do

Begin

j:=i;

while (j>1) and (Mas[j] <Mas[j-1]) do

Begin

Rez:=Mas[j];

Mas[j]:=Mas[j-1];

Mas[j-1]:=Rez;

j:=j-1;

End;

End;

Writeln('Елементи бічної діагоналі:');

For i:=1 to n do

begin

Write(Mas[i]:8:2);

end;

Readkey; {Затримка зображення на екрані}

End.

Задача №368.

Умова: Вважатимемо рядок квадратної матриці порядку n позначеним, якщо перший елемент цього рядка - нульовий. Вивести елементи матриці в такому вигляді: в кожному позначеному рядку - впорядковані за зростанням, а в інших - за спаданням.

Перевіривши перший елемент заданої квадратної таблиці на нуль, виконаємо впорядкування за зростанням або за спаданням одним з відомих способів сортування, наприклад, "бульбашкою".

Program Example_368;

Uses crt;

Const N = 9;

Type

Var A:array[1..N,1..N] of real; {A - вихідний масив}

i,j,k:byte; {і,j,k - змінні циклу}

Rez:real; {Rez - змінна для взаємообміну

між двома елементами}

Begin

Randomize;

Clrscr;

{Заповнення та виведення масиву на екран}

For i:=1 to n do

Begin

For j:=1 to n do

begin

A[i,j]:=random(120)/3-random*20;

Write(A[i,j]:8:2);

end;

writeln;

End;

{Цикл по рядках для перевірки першого елемента}

For k:=1 to n do

Begin

If A[k,1]=0

Then

Begin

{Сортування "бульбашкою" за зростанням}

For i:=1 to N do

For j:=1 to N-i do

If A[k,j]>A[k,j+1]

then

Begin

Rez:=A[k,j];

A[k,j]:=A[k,j+1];

A[k,j+1]:=Rez;

End;

End

Else

Begin

{Сортування "бульбашкою" за спаданням}

For i:=1 to N do

For j:=1 to N-i do

If A[k,j]B>then

Begin

Rez:=A[k,j];

A[k,j]:=A[k,j+1];

A[k,j+1]:=Rez;

End;

End;

End;

{Виведення перетвореного масиву}

For i:=1 to n do

Begin

For j:=1 to n do

begin

Write(A[i,j]:8:2);

end;

writeln;

End;

Readkey; {Затримка зображення на екрані}

End.

Домашнє завдання:

· Задача №339(2), №342(3,5), №367

Графіка

Тема уроку: "Опис графічних вказівок мовою програмування"

Мета уроку: дати поняття графічного режиму роботи монітору, ініціалізації графічного режиму, основних процедур та функцій для побудови графічних зображень.

Тип уроку: Лекційний.

Теоретичний матеріал:

Як Вам вже відомо, будь-який монітор ПЕОМ може працювати в одному з двох режимів:

· текстовому;

· графічному.

Перший з них дозволяє виводити на екран будь-який символ ASCII-таблиці (дивись вище) у визначене знакомісце екрану, що знаходиться на перетині рядка та стовпчика. Кількість знакомісць залежить від текстового режиму, але найчастіше дорівнює 25 рядкам по 80 колонок в кожному. В цьому режимі можна керувати кольором та яскравістю символів, забезпечуючи за бажанням їх миготіння, та кольором тла.

В графічному режимі будь-яке зображення отримується як сукупність різнокольорових точок - пікселів. Кількість елементів зображення теж задається відповідним режимом, але стандартно дорівнює 640 на 480 відповідно по горизонталі та вертикалі.

Для роботи в графічному режимі в Паскалі використовується модуль Graph, який складається з більш ніж 90 графічних процедур і функцій широкого профілю. Усі стандартні засоби модуля Graph стають доступними після його підключення до програми в розділі Uses:
Uses Graph;

Зверніть увагу на те, що для того, щоб графічна бібліотека стала доступною, необхідно прописати до неї шлях доступу в пункті меню Options ->Directories ->Unit directories оболонки Паскаль. За замовчанням цей шлях доступу наступний: BP\UNITS відповідного диску.

Екран у графічному режимі може адресуватися за допомогою системи координат, причому значення Х (номера стовпчика) збільшується зліва праворуч, а значення Y (номера рядка) збільшується зверху до низу. За замовчанням координати екрана мають такий вигляд:

(0,0) - лівий верхній кут;

(639,0) - правий верхній кут;

(319,239) - центр;

(0,479) - лівий нижній кут екрана;

(639,479) - правий нижній кут.

Графічна система підтримує поточний покажчик СР, який виконує ті ж функції, що і курсор, але не виводиться на екран. Для переміщення покажчика використовуються процедури МоvеTо, LineTo, InitGraph, LineRel, MoveRel і деякі інші.

У графічному режимі можна виводити текст, причому є можливість масштабування і вибору типу шрифту, виконання вирівнювання виведеного тексту тощо.

Наявні програми підтримують різні засоби малювання і заповнення фігур, зокрема, крапку, лінії, окружності, еліпси, прямокутники, багатокутники.

Для всіх команд виведення можна встановити графічне вікно (прямокутну область на екрані заданого розміру). Уся графічна інформація виводиться у поточне вікно, поки не активізується інше. При установці віконного режиму всі графічні зображення, якщо вони виходять за межі вікна, усікаються.

При виконанні графічної операції може виникнути помилка, код якої можна одержати за допомогою функції GraphResult. Код помилки може приймати одне з наступних значень:

0:

Помилки немає

-1:

Режим BGI не встановлений

-2:

Графічні апаратні засоби не виявлені

-3:

Файл драйвера пристрою не знайдений

-4:

Неправильно визначений файл драйвера пристрою

-5:

Не вистачає пам'яті для завантаження драйвера

-6:

Вихід за межі пам'яті при заповненні

-7:

Вихід за межі пам'яті при заливанні

-8:

Файл із шрифтом не знайдений

-9:

Не вистачає пам'яті для завантаження шрифту

-10:

Неправильний графічний режим для обраного драйвера.

Для забезпечення переходу екрану монітора в графічний режим програма повинна починатися викликом процедури InitGraph, що автоматично виявляє апаратні засоби і завантажує відповідний графічний драйвер. Стандартний драйвер EGAVGA.BGI розміщується у каталозі BP\BGI на відповідному диску. Якщо апаратні засоби не виявлені або в процесі ініціалізації відбулася помилка, то на екран виводиться повідомлення про помилку і програма зупиняється.

До основних функцій для роботи з графікою, за допомогою яких можна виконати майже всі завдання шкільного курсу, відносяться наступні:

Arc(X,Y:integer; поч_кут, кін_кут, радіус:word) - програмна процедура, результатом роботи якої є дуга окружності з центром в точці (X,Y) і радіусом "радіус". Дуга креслиться від початкового кута ("поч_кут") до кінцевого кута ("кін_кут"). При цьому використовується поточний колір малювання.

Bar(X1,Y1,X2,Y2) - процедура малює зафарбований прямокутник, використовуючи колір зафарбування, що встановлюється процедурою SetFillStyle. Контур прямокутника креслиться кольором і типом лінії, що встановлені процедурами SetLineStyle і SetColor. Точки з координатами (X1,Y1) та (X2, Y2) задають дві діагонально протилежні вершини прямокутника.

Bar3D(Xl,Yl,X2,Y2:integer; глибина : word, вершина : boolean) - процедура малює зафарбований тривимірний паралелепіпед. Контур паралелепіпеда креслиться кольором і типом лінії, що встановлені процедурами SetLineStyle і SetColor, тип і колір зафарбування встановлюється за допомогою процедур SetFillStyle. "Глибина" являє собою число елементів зображення, що задають третій вимір тривимірного контуру. Якщо змінна, зазначена як параметр "вершина", приймає істинне значення (True), то для паралелепіпеда малюється тривимірна вершина, у протилежному випадку вершина не малюється (що дозволяє малювати кілька паралелепіпедів, розташованих один на одному).

Circle(X,Y:integer; радіус : word) - процедура малює окружність поточним кольором. Точка (X,Y) - центр окружності, а "радіус" - її радіус.

ClearDevise - процедура очищує поточний графічний екран і підготовлює його для виведення даних.

ClearViewport - процедура очищує поточне вікно.

CloseGraph - процедура припиняє роботу графічної системи (закриття графіки) і повертає монітор до текстового режиму.

DetectGraph(Var драйвер, peжим : integer) - процедура перевіряє наявність відповідних апаратних засобів і визначає, який графічний режим і драйвер варто використовувати.

Ellipse(X,Y:integer; поч_кут, кін_кут:word; paдХ,paдY:word) - процедура малює еліптичну дугу, використовуючи (X,Y), як точку центра і "радХ", "paдY" - як радіуси на горизонтальній і вертикальній осях. Дуга еліпса малюється від початкового кута (параметр "поч_кут") до кінцевого кута (параметр "кін_кут") поточним кольором.

FillEllipse(X,Y:integer;Xpaдіyс,Ypaдіус:word) - процедура вичерчує зафарбований еліпс, використовуючи точку з координатами (Х,Y), як центр, а "Храдіус" і "Yрадіус" - у якості радіусів на горизонтальній та вертикальній осях. Контур еліпса креслиться кольором і типом лінії, що встановлені процедурами SetLineStyle і SetColor, тип і колір зафарбування встановлюється за допомогою процедури SetFillStyle.

FloodFill(X,Y,границя:word) - процедура заповнює замкнену область, використовуючи поточний заповнювач, заданий процедурою SetFillStyle. Точка (X,Y) є внутрішньою точкою області, що зафарбовується. Заповнюється область, обмежена лінією, що має колір, визначений параметром "границя". Якщо точка (X,Y) знаходиться усередині замкненої області, то заповнюється внутрішня область. Якщо ця точка знаходиться поза замкненої області, то заповнюється її зовнішня частина (поле екрана, що не належить області).

GetBkColor : word - функція повертає поточне значення кольору тла (у діапазоні 0 - 15), встановлене процедурою SetBkColor.

GetColor : word - функція повертає поточне значення основного кольору малювання (у діапазоні 0 - 15), встановлене раніше процедурою SetColor.

GetMaxColor:word; - функція повертає найбільше значення кольору, яке можна передати процедурі SetColor.

GetMaxX:integer; - функція повертає максимальний для поточного графічного режиму і драйвера номер правого стовпчика (дозвіл по X).

GetMaxY:integer; - функція повертає максимальний для поточного графічного режиму і драйвера номер нижнього рядка екрана (дозвіл по Y).

GetPixel(X,Y:mteger): word; - функція повертає значення (колір) елемента зображення в точці (X, Y).

GetX: integer; - функція повертає Х-координату поточного покажчика СР.

GetY: integer; - функція повертає Y-координату поточного покажчика СР.

GraphResult : integer; - функція повертає код помилки (у діапазоні 0-10) для останньої графічної операції.

InitGraph (Var гр_драйв:integer; Var гр_режим:integer; nyть_дpaйв:string); - процедура ініціалізує графічну систему і переводить апаратну частину в графічний режим.

Line(X1, Y1, X2, Y2 : integer); - процедура вичерчує пряму лінію (товщина і тип якої встановлений процедурою SetLineStyle, колір - процедурою SetColor) із крапки (X1,Y1) у крапку (X2,Y2).

LineRel(Dx,Dy); - процедура вичерчує пряму лінію з точки поточного покажчика СР в точку, задану відносною відстанню (Dx, Dy) від поточного покажчика.

LineTo(X,Y : integer); - процедура малює пряму лінію з точки, у якій знаходиться поточний покажчик СР, у точку з координатами (X,Y).

MoveRel(Dx, Dy : integer); - процедура переміщує покажчик СР з поточної точки у точку, задану відносною відстанню (Dx, Dy).

MoveTo(X, Y : integer); - процедура переміщує поточний покажчик СР у точку з координатами (X,Y).

OutText (рядок : string); - процедура виводить текст "рядка" на монітор, починаючи з точки розташування покажчика СР.

OutTextXY(X, Y: integer; текст_рядок : string); - процедура виводить текст, що міститься у "текст_рядок", починаючи з точки, заданої координатами (X, Y). Якщо рядок занадто довгий і виходить за межі екрана чи поточної області перегляду, то він усікається.

PieSlice (Х, Y: integer; нач_кут, кін_кут R : word); - процедура вичерчує і заповнює поточним кольором сектор кола радіусом R. Точка (X,Y) - центр окружності, а сектор малюється від початкового до кінцевого кута. Тип і колір зафарбування попередньо задається процедурою SetFillStyle.

PutPixel(X, Y: integer; ел_зображ : word); - процедура зафарбовує точку з координатами (X,Y) у колір, що визначається параметром "ел_зображ".

Rectangle(Xl, Yl, Х2, Y2 : integer); - процедура вичерчує прямокутник, використовуючи поточний колір і тип лінії. (X1,Y1) та (X2,Y2) - координати діагонально протилежних вершин прямокутника.

Sector (X, У : integer; поч__кут, кін_кут, Х_Радіус, Y_Радіус : word); - процедура вичерчує і заповнює еліптичний сектор. (Х,Y) - центр окружності, "Х_Радіус", "Y_Радіус" - горизонтальний і вертикальний радіуси. Сектор креслиться від початкового кута "поч_кут" до кінцевого кута "кін_кут". Сектор малюється поточним кольором і зафарбовується з використанням зразка зафарбування і кольорів, заданих за допомогою процедури SetFillStyle.

SetActivePage (сторінка: word); - процедура встановлює для графічного виведення активну сторінку (їх всього чотири від 0 до 3). Графічне виведення буде тепер здійснюватися в цю сторінку.

SetBkColor (колір : word); - процедура встановлює поточний колір для тла.

SelColor(колір : word); - процедура встановлює поточний колір малювання .

SetFillStyle( зразок : word; колір :p word); - процедура встановлює зразок і колір зафарбування для всіх типів зафарбування, виконуваних процедурами Bar, Ваr3D, FillEllipse, FloodFill та PieSlice. Можна використовувати декілька типів зафарбування (наприклад, 1 - суцільне фарбування, 2 - штрихування лініями, 7 - штрихування символом "+", 11 - штрихування крапками тощо). За замовчуванням вибирається суцільне зафарбування білого кольору.

SetLineStyle(тип_рядка :word; зразок: word; товщина : word); - процедура встановлює поточну товщину і тип лінії.

SetTextJustify(ropиз, верт : word); - процедура встановлює значення вирівнювання тексту, що використовуються процедурами OutText і OutTextXY.


Подобные документы

  • Методика та порядок програмування алгоритмів циклічної структури із заданим числом повторень за допомогою мови програмування VAB. Алгоритм роботи з одновимірними масивами. Програмування алгоритмів із структурою вкладених циклів, обробка матриць.

    курсовая работа [27,7 K], добавлен 03.04.2009

  • Розв'язання задач мовою програмування VBA з використанням алгоритмів лінійної, розгалуженої та ітераційної циклічної структури. Розробка блок-схеми алгоритму, таблиці ідентифікаторів та тексту програми. Створення власної панелі інструментів користувача.

    практическая работа [1012,6 K], добавлен 19.02.2010

  • Визначення поняття "алгоритми", їх властивості, метод складання. Способи подання алгоритмів: письмовий, усний, схематичний, графічний, кодований. Навчальна алгоритмічна мова. Особливості створення блок-схеми. Алгоритм поданий мовою програмування.

    презентация [2,9 M], добавлен 06.05.2019

  • Алгоритми розв’язання задач у вигляді блок–схем. Використання мови програмування MS VisualBasic for Application для написання програм у ході вирішення задач на одномірний, двовимірний масив, порядок розв’язання задачі на використання символьних величин.

    контрольная работа [742,9 K], добавлен 27.04.2010

  • Огляд переваг та недоліків мови Пролог, історія її створення. Числення предикатів як математична основа її функціонування. Порівняльна характеристика середовищ програмування Prolog. Алгоритми розв’язування математичних задач за допомогою цієї мови.

    курсовая работа [504,5 K], добавлен 23.12.2014

  • Фундаментальні поняття об'єктно-орієнтованого програмування. Система лінійних нерівностей та опуклі багатогранники. Системи лінійних рівнянь лінійної алгебри як частковий випадок систем лінійних обмежень. Використання середовища програмування Delphi7.

    курсовая работа [222,7 K], добавлен 20.05.2015

  • Мoвa прoгрaмувaння як систeма пoзначень, що служить для точного опису програм або алгоритмів для ЕOM. Вимоги до мов програмування, класифікація за їх особливостям. Загальна характеристика найбільш поширених мов програмування: Сі, Паскаль, Delphi, Бейсік.

    реферат [24,4 K], добавлен 10.11.2012

  • Лінійне програмування як один з найбільш популярних апаратів математичної теорії оптимального управління рішень. Опис існуючих методів розв’язку задач лінійного програмування. Завдання, основні принципи, алгоритми і головна мета лінійного програмування.

    курсовая работа [363,8 K], добавлен 03.12.2009

  • Аналіз розроблення та програмування обчислювального процесу лінійної структури, налагодження програм. Вивчення правил запису констант, числових і символьних змінних, типів даних. Побудова алгоритму розв’язування завдання та креслення його блок-схеми.

    реферат [2,1 M], добавлен 22.04.2012

  • Аналіз особливостей мови програмування Java та середовища Android Studio. Розробка програмного забезпечення для якісного та ефективного вивчення іноземних слів. Побудова базових алгоритмів і структури даних. Вибір мови програмування, реалізація програми.

    курсовая работа [335,3 K], добавлен 11.01.2015

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.