Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Delphi.doc
Скачиваний:
18
Добавлен:
29.10.2018
Размер:
3.35 Mб
Скачать

Лабораторна робота № 1 Створення простої програми у середовищі Delphi

Мета роботи:

1. Засвоєння простішої структури програми та візуального проектування програм.

2. Засвоєння простих типів даних, операцій і виразів.

3. Засвоєння основних операторів мови програмування (присвоєння, складеного, умовної і безумовної передачі керування, вибору).

4. Отримання навиків в організації введення і виведення даних.

5. Отримання практичних навиків роботи в інтерактивному режимі.

Завдання:

На площині задані обмежена лініями (1–14) область і точки . Розробити програму, яка обчислює периметр і площу трикутника , якщо точки належать області і не лежать на одній прямій, інакше видати відповідне повідомлення.

1. 2. 3.

4 . 5. . 6. .

7. . 8. . 9. .

10. . 11. . 12. .

13. . 14.

Задані дійсні величини . Розробити програму, яка упорядковує величини так, щоб і , та обчислює значення функції.

15. 16. 17.

18.

19.

20.

Задані дійсні величини та логічні . Розробити програму, яка обчислює значення функції.

21.

22. 23.

24.

25.

Задані дійсні величини та ціле . Розробити програму, яка обчислює значення функції.

26.

27.

28.

29.

30.

Упорядкування і пошук даних

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

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

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

Методи внутрішнього впорядкування базуються на таких підходах:

1. Вибірка: вибирається найбільший (або найменший) елемент масиву і поміщається на перше місце, потім аналогічна процедура виконується з елементами, що залишилися.

2. Обмін: багатократно порівнюються і впорядковуються сусідні елементи.

3. Вставка: кожний новий елемент вставляється у правильну позицію стосовно вже розміщених у масиві і впорядкованих елементів.

4. Злиття: впорядковані підмножини елементів об’єднуються в більші впорядковані підмножини.

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

Розглянемо алгоритм упорядкування вибіркою.

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

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

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

Program LABR5_1;

{$APPTYPE CONSOLE}

uses Sysutils;

VAR a: array[1..300] of integer;

n, i, j, k, r: integer;

BEGIN

{Введення початкових даних}

writeln(‘Введіть розмір масиву а, (n<=300)’);

readln(n);

writeln(‘Введіть елементи масиву а’);

for i:=1 to n do

read(a[i]);

{Упорядкування за зростанням методом вибірки}

for i:=1 to n-1 do

begin k:=i;

for j:=i+1 to n do

if a[j]<a[k] then k:=j;

r:=a[i];

a[i]:=a[k];

a[k]:=r;

end;

{Виведення масиву по п’ять елементів у рядку}

for i:=1 to n do

if i mod 5 <> 0 then write(a[i]:6)

else writeln(a[i]:6);

readln;

END.

Розглянемо алгоритм злиття упорядкованих масивів. Цей алгоритм можна використовувати як для внутрішнього, так і зовнішнього впорядкування.

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

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

Program LABR5_2;

{$APPTYPE CONSOLE}

uses Sysutils;

VAR a : array[1..300] of integer;

b : array[1..200] of integer;

c : array[1..500] of integer;

n, m, i, j, k: integer;

BEGIN

{Введення початкових даних}

writeln(‘Введіть розмір масиву а, (n<=300)’);

readln(n);

writeln(‘Введіть впорядковані елементи масиву а’);

for i:=1 to n do

read(a[i]);

writeln(‘Введіть розмір масиву b, (m<=200)’);

readln(m);

writeln(‘Введіть впорядковані елементи масиву b’);

for i:=1 to m do

read(b[i]);

{Впорядкування злиттям}

i:=1; j:=1; k:=0;

while (i <= n) and (j <= m) do

if a[i] < b[j] then

begin k:=k+1; c[k]:=a[i]; i:=i+1;end

else

begin k:=k+1; c[k]:=b[j]; j:=j+1;end;

if i > n then

for i:=j to m do

begin k:=k+1; c[k]:=b[i]; end

else

for j:=i to n do

begin k:=k+1; c[k]:=a[j]; end;

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

{ по п’ять елементів у рядку}

for i:=1 to k do

if i mod 5 <> 0 then write(c[i]:6)

else writeln(c[i]:6);

readln;

END.

Пошук даних. Задача пошуку даних є основною при роботі з великими обcягами інформації. Якщо дані не впорядковані, то пошук зводиться до послідовного перегляду всіх ключів. Якщо дані впорядковані, то існує ряд ефективних алгоритмів пошуку даних.

Розглянемо один з таких алгоритмів пошуку ключа поділом масиву даних навпіл.

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

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

Програма пошуку ключа в упорядкованому масиві методом поділу масиву навпіл має вигляд:

Program LABR5_3;

{$APPTYPE CONSOLE}

uses Sysutils;

VAR x: array[1..300] of integer;

n, i, a, b, kl: integer;

f: boolean;

BEGIN

{Введення початкових даних}

writeln(‘Введіть розмір масиву x, (n<=300)’);

readln(n);

writeln(‘Введіть упорядковані елементи масиву x’);

for i:=1 to n do

read(x[i]);

writeln(‘Введіть елемент kl’);

readln(kl);

{Пошук заданого елемента в упорядкованому масиві x}

a:=1; b:=n; f:=false;

while (a < b) and (not f) do

begin i:=(a+b) div 2; {поділ масиву навпіл}

if x[i] = kl then f:=true;

if x[i] < kl then a:=i+1;

if x[i] > kl then b:=i -1;

end;

if f then writeln(‘Номер шуканого ключа в масиві =’,i)

else writeln(‘Шуканого ключа у масиві немає’);

readln;

END.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]