Середовище програмування Delphi

Вступ

Середовище програмування Delphi

В системі Delphi використовується мова програмування Object Pascal, яка постійно вдосконалюється.   Основні елементи середовища

Поняття проекту

  Типи файлів, що використовуються в проектах Delphi Тип файлу Опис .dfm Файл форми …   Файл з розширенням .dpr містить основну інформацію про проект. Файл з розширенням .pas – це файл модуля. В ньому…

Структура модуля

Кожен модуль має жорстко задану структуру, яка зазвичай автоматично генерується системою Delphi при його створенні. Модуль складається з чотирьох…   unit Unit1;

Типи, що визначаються користувачем

· інтервальний   Структуровані типи

Типи констант

  Переліковий тип Переліковий тип є обмеженою впорядкованою послідовністю однотипних скалярних констант, що і складають цей тип.…

Масиви

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

Рядки

Особливе місце у Delphi займають масиви символів, або рядки – String. Стандартні змінні елементів форми, що використовуються для введення чи виведення інформації, такі як Label.Caption, Form.Caption, Edit.Text, Button.Caption та інші мають рядковий тип. Рядок – елементарна конструкція мови Delphi Pascal.

 

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

 

Приведення типів

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

Наприклад, значення Byte (300) дорівнює 44

var X: Integer;

L: Longint;

begin

X: = Integer (L * 1234567);

 

Однак подібним способом неможливо перетворити число типу Real у число типу Integer або будь-яке число в рядок. Для таких, більш складних, перетворень типів у Delphi є набір стандартних функцій, що спрощують процес перетворення.

Стандартні функції перетворення типів

Ім’я функції Призначення
Round Округлення дробового числа до найближчого цілого. Значення Round (3.74) дорівнює 4
Trunc Відкидання дробової частини числа. Значення Trunc (3.74) дорівнює 3
IntToStr Перетворення цілого числа в рядок. Значення IntToStr (12987) дорівнює '12987 '
FloatToStr Перетворення дробового числа в рядок. Значення FloatToStr (3.74) дорівнює '3 .74 '
StrToInt Перетворення рядка в ціле число. Значення StrToInt ('12985 ') дорівнює 12985
StrToFloat Перетворення рядка в дробове число. Значення StrToFLoat ('3 .14 ') одно 3.14

 

Елементарні оператори

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

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

По характеру виконуваних дій операції можна розділити на такі групи:

· Арифметичні операції: +, -, *, /, div, mod. Операції +, - можуть унарними. Тип операндів може бути дійсним або цілим, результат буде дійсним або цілим. Результат операції / (ділення) цілих або дійсних даних буде тільки дійсним. Операнди в операціях div (ціла частина від ділення, наприклад, 5 div 2 =2) і mod (остача від ділення, наприклад, 5 mod 2 = 1) тільки цілі і результат буде цілим.

· Операції відношення: =, <>, >, <, >=, <=. Тип операндів з цими операціями повинен бути сумісним − це прості типи, символьні рядки, а в операціях =, <> і вказівний тип. Результат операцій відношення бульвого типу false або true.

· Бульові операції: not – заперечення, and – кон’юнкція (логічне множення), or – диз’юнкція (логічне додавання), xor – додавання за модулем два. Операція not є унарною. Бульові операції виконуються за правилами бульової алгебри Табл..2.5. Операнди з бульовими операціями повинні бути бульового типу і результат також буде бульового типу.

· Порозрядні логічні операції і зсуви not, and, or, xor, shl, shr. Операнди з порозрядними логічними операціями і зсувами тільки цілого типу. Порозрядні логічні операції виконуються над кожним розрядом за правилами бульової алгебри. Операція А shl В приводить до зсуву числа А на В розрядів вліво, а А shr В відповідно на В розрядів вправо. Результат порозрядних логічних операцій і зсувів є цілого типу.

Операнди Операції
A B Not A A and B A or B A xor B
false False True False false false
false True True False true true
true False False False true true
true True False True true false

 

· Операція конкатенація +. Операндами з операцією конкатенація є дані символьного типу або символьні рядки. Результатом цієї операції є символьний рядок.

· Операції над множинами: + – об’єднання множин, - – різниця множин, * – переріз множин, = – еквівалентність множин, <> – не еквівалентність множин, >= – перевірка входження однієї множини в іншу, <= – перевірка входження однієї множини в іншу, in – перевірка належності елемента множині. Результатом операцій +, -, * є множина, а операцій =, <>, >=, <= значення бульового типу true або false.

· Унарна операція @ взяття адреси. Операндом цієї операції може бути ідентифікатор змінної, процедури, функції, або методу. Тип результату вказівник сумісний з NIL.

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

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

Серед операцій встановлено такий пріоритет:

· звернення до функцій;

· унарні +, -, not, @;

· мультиплікативні *, /, div, mod, and, shl, shr;

· адитивні +, -, or, xor;

· відношення =, <>, <, >, <=, >=, in.

Приклад. Визначити порядок виконання дій у виразі

 

,

 

1. ,

2. sin(x),

3. 5* sin(x),

4. +5* sin(x),

5. 6*x,sqr(x),

6. (6*x+sqr(x)),

7. 7*(6*x+sqr(x)),

8. +5* sin(x)- 7*(6*x+sqr(x)),

9. +5* sin(x)- 7*(6*x+sqr(x))-5.

 

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

Оператори відділяються один від одного символом « ; ».

Символ « ; » не є частиною оператора – це розділювач операторів, тому перед ключовим словом end « ; » не обов’язкова. Якщо « ; » поставлена, то вважається, що після цього оператора слідує порожній оператор і це не є помилкою. Будь-якому оператору в програмі може передувати мітка, яка відділяється від нього двокрапкою.

Розрізняють прості і структуровані оператори. Прості оператори це оператори, які не містять у собі інших операторів (присвоєння, goto, оператори звернення до процедур і функцій), а структуровані це оператори, які містять у собі інші оператори (складений, if, case, while, repeat, for, with).

Оператор присвоєння має вигляд

<змінна> := <вираз>,

 

при виконанні цього оператора обчислюється значення виразу і

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

Змінна і значення виразу повинні бути сумісними за присвоєнням:

· змінна і значення виразу одного типу;

· змінна дійсного типу, а значення виразу може бути як дійсного так і цілого типу;

· змінна і значення виразу відносяться до одного або різних діапазонів і значення виразу лежить всередині діапазону визначеного типом змінної;

· змінна відносяться до типу символьний рядок, а вираз типу символьний рядок або до символьного типу.

Наприклад, при х=3 після виконання оператора присвоєння ; змінна х буде дорівнювати 8.

 

Складений оператор

Послідовність довільних операторів, укладена в операторні дужки - begin ... end (зарезервовані слова) є складеним оператором. Якщо сказати загальнодоступно, то це ті ж дужки, що використовуються в математиці при записі рівнянь.

Складений оператор може мати довільну глибину вкладеності:

 

begin

begin

..........

begin

...........

...........

end;

...........

end;

............

end;

Для кращого перегляду коду бажано, щоб кожен, окремий складений оператор разом з набором операторів, що входять в дужки - begin ... end, розташовувався рівновіддалено від лівого краю (приблизно як на верхньому прикладі).

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

begin

x: = 22;

y: = 4

end;

Тіло програми, функції або процедури так само є складеним оператором, так як вони входять в операторні дужки begin і end.

 

Навчальна частина

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

Завдання для самоконтролю

1. 2. 3.

Тема 2. Оператори мови Delphi

Умовний оператор IF.

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

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

if <умова> then <оператор1> else <оператор2> ;

Тобто «якщо виконується умова, то виконувати оператор1, якщо ні – то оператор2». Зазначимо, що перед else символ «;» ніколи не ставиться.

Наприклад, знайти більше з та

 

Бувають випадки, коли у алгоритмі вимагається умовний оператор «якщо виконується умова, то виконувати оператор1». Тоді його вигляд буде:

if <умова> then <оператор1>;

Виходячи з вигляду оператору слід відзначити, що за виконання умови чи ні може виконуватись тільки один оператор (оператор1 чи оператор2). Якщо необхідним є виконання кількох операторів, то слід використовувати складений оператор begin – end. Тоді всі необхідні команди будуть розташовуватись між begin та end.

 

Наприклад

Впорядкувати за зростанням та .Тобто якщо , то поміняти їх місцями, для цього потрібно використати робочу змінну .

 

У наведених прикладах використовується проста умова, тобто умова, що використовує тільки одне порівняння. Оператор if допускає ще і складні умови. Тоді вони записуються у дужках ( ). Наприклад:

if ( a>b and b>c) then midd:=b ;

Складені умови

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

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

Якщо умова є складеною (тобто здійснюється кілька порівнянь одночасно), то краще її всю взяти у дужки. Для одночасного виконання двох умов між ними ставиться “and”, для виконання однієї з двох умов між ними ставиться “or”

Операція and

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

Наприклад якщо нам необхідно перевірити справедливість виразу a<b<c, то саме порівняння матиме вигляд

іf (a<b) and (b<c) then ...

і вираз (a<b) and (b<c) матиме логічний тип причому прийматиме значення true якщо і (a<b), і (b<c) прийматимуть значення true одночасно. Якщо ж хоч одне зі значень буде false, то і сам вираз матиме значення false.

Сам вираз a<b and b<c (тобто без дужок) не є логічним і програма видасть повідомлення про помилку.

Операція or

Операція “or” використовується для перевірки виконання хоча б однієї з умов.

Наприклад якщо нам необхідно перевірити справедливість виразу “a є дійсним числом і a не може бути у межах (0,1)”, то порівняння матиме вигляд

іf (a<0) or (a>1) then ...

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

Операція заперечення not.

Операція “not” використовується для зміни значення логічної змінної на протилежне.

Наприклад, якщо нам потрібно перевірити умову, що змінна a є додатньою, та парною, то умова матиме вигляд

if (a>0) and ( not odd(a) ) then …

Операція xor

Операція “хor” використовується для перевірки виконання виключно однієї з умов. Наприклад

if (a<2) xor (b>3)

прийматиме значення TRUEякщо, наприклад

a=1, b=2; a=3,b=4 – тобто тільки одна з умов задовольняється;

і прийматиме значення FALSE якщо, наприклад

a=1,b=4; a=3,b=2 – тобто коли або обидві умови виконуються, або обидві не виконуються.

Іноді xor та or співпадають.

Наприклад умова

іf (a<0) хor (a>1) та іf (a<0) or (a>1) співпадають.

 

Оператори if можуть бути вкладеними. Обмеження на вкладеність немає. Наприклад, знайти найбільше з , ,

r wsp:rsidR="00000000" wsp:rsidRPr="00507D4B"><w:pgSz w:w="12240" w:h="15840"/><w:pgMar w:top="850" w:right="850" w:bottom="850" w:left="1417" w:header="708" w:footer="708" w:gutter="0"/><w:cols w:space="720"/></w:sectPr></wx:sect></w:body></w:wordDocument>">

 

При вкладеності операторів if можуть виникати неоднозначні ситуації тоді потрібно використовувати складений оператор.

 

Оператор if можна подати у вигляді блок-схеми.

 

Умова
Умова


true false true false

 

 

Оператор 1
Оператор 2
Оператор 1

 

 

 

 


Повна форма if Скорочена форма if

 

Приклад

  Для цього нам спочатку треба на формі розташувати два об'єкти: кнопку Button1…  

Оператор вибору CASE

Оператор IF зручний, коли перевіряється кілька множинних умов, тобто умов, коли порівнюються змінні. У випадку, коли у залежності від значення однієї змінної (виразу) треба виконати ту чи іншу дію, особливо якщо треба перевірити кілька значень цієї змінної, логічно використовувати оператор вибору CASE. З його допомогою можливо робити вибір з необхідної кількості варіантів. Структура в мові Delphi оператора Case має наступний вигляд:

case <змінна> of

значення 1 : оператор 1;

значення 2 : оператор 2;

- - - - - -

значення N : оператор N;

else <оператор>;

End;

Змінна - може бути одним із стандартних типів: символьним типом, цілим числом, перераховувани типом ... Замість значення може стояти простий оператор.

Значення N - довільне значення, того ж типу, що й змінна.

Оператор N - будь-які оператори.

 

Робота оператора Case здійснюється наступним чином. Спочатку, якщо необхідно, обчислюється значення змінної. Потім шукається відповідність змінної значенням N. При рівності відбувається виконання оператора N і оператор case завершує свою роботу. Якщо збігів не знайдено то виконується оператор розташований після слова else. За відсутності оператора else, коли немає відповідності оператор case завершить свою роботу і буде виконаний наступний оператор.

 

Приклад.

У полі Edit ми будемо заносити число і програма проаналізувавши буде давати відповідь за коштами Label. При значенні вхідному в діапазон -128 .. -1… procedure TForm1.Button1Click (Sender: TObject); var

Навчальна частина

Постановка задачі:Створити форму з назвою “ Калькулятор математичних функцій ”, на якій можна змо­де­­лювати математичні операції. Рекомендації Під час розробки програмного засобу слід використовувати наступні об’єкти:

Panel1

Button1 Caption
Button2 Caption
Button3 Caption
Button4 Caption
Button5 Caption
Button6 Caption
Button7 Caption
Button8 Caption
Button9 Caption
Button10 Caption
Button11 Caption ,

Panel2

Button12 Caption /
Button13 Caption *
Button14 Caption -
Button15 Caption +
Button16 Caption C
Button17 Caption =
Button18 Caption SQRT
Button19 Caption SQR
Button20 Caption Sin
Button21 Caption Cos
Button22 Caption Tan
Button23 Caption Log

 

Форма Калькулятора елементарних операцій

5. Опишіть у області глобальних змінних, змінні дійсного типу

6. Додайте в пункт uses бібліотеку Math для того, щоб ми могли використовувати математичними функціями такі як Tan, Ln та ін..

7. Запрограмуйте кнопку “1” так, щоб після її натискання у Edit1 з’являвся символ “1”.

procedure TForm1.Button1Click(Sender: TObject); begin //До вмістимого поля Edit1.Text додаємо символ '1' Edit1.Text:=Edit1.Text+'1'; end;

8. Виконайте аналогічні операції для інших кнопок Panel1

procedure TForm1.Button10Click(Sender: TObject); begin Edit1.Text:=Edit1.Text+'0'; end; procedure TForm1.Button11Click(Sender: TObject); begin Edit1.Text:=Edit1.Text+','; end; procedure TForm1.Button1Click(Sender: TObject); begin Edit1.Text:=Edit1.Text+'1'; end; procedure TForm1.Button2Click(Sender: TObject); begin Edit1.Text:=Edit1.Text+'2'; end; procedure TForm1.Button3Click(Sender: TObject); begin Edit1.Text:=Edit1.Text+'3'; end; procedure TForm1.Button4Click(Sender: TObject); begin Edit1.Text:=Edit1.Text+'4'; end; procedure TForm1.Button5Click(Sender: TObject); begin Edit1.Text:=Edit1.Text+'5'; end; procedure TForm1.Button6Click(Sender: TObject); begin Edit1.Text:=Edit1.Text+'6'; end; procedure TForm1.Button7Click(Sender: TObject); begin Edit1.Text:=Edit1.Text+'7'; end; procedure TForm1.Button8Click(Sender: TObject); begin Edit1.Text:=Edit1.Text+'8'; end; procedure TForm1.Button9Click(Sender: TObject); begin Edit1.Text:=Edit1.Text+'9'; end;

10. Виконайте аналогічні операції для кнопок Panel2

procedure TForm1.Button12Click(Sender: TObject); begin // записуємо у змінну а дані з поля Edit1 переведені з // типу String в тип Float функцією StrToFloat a := StrToFloat(Edit1.Text); // Очищаємо поле Edit1 Edit1.Clear; // записуємо у змінну Kod символ '/' Kod:='/'; end; procedure TForm1.Button13Click(Sender: TObject); begin a := StrToFloat(Edit1.Text); Edit1.Clear; Kod:='*'; end; procedure TForm1.Button14Click(Sender: TObject); begin a := StrToFloat(Edit1.Text); Edit1.Clear; Kod:='-'; end; procedure TForm1.Button15Click(Sender: TObject); begin a := StrToFloat(Edit1.Text); Edit1.Clear; Kod:='+'; end; procedure TForm1.Button16Click(Sender: TObject); begin Edit1.Clear; end; procedure TForm1.Button17Click(Sender: TObject); begin // якщо поле Edit1 не пусте виконуємо операції, //у іншому випадку виводимо повідомлення //'Введіть число' if Edit1.Text<>'' then Begin // записуємо у змінну b дані з поля Edit1 b := StrToFloat(Edit1.Text); // перевіряємо вмістиме змінної Kod на //відповідність знаку якщо Kod = '+' // виконуємо операцію додавання і так далі... case Kod of '+' : begin Res:=a+b; end; '-' : begin Res:=a-b; end; '*' : begin Res:=a*b; end; '/' : begin // якщо наш знаменник = 0 виводимо повідомлення // 'На 0 ділити не можна' if b<>0 then Res:=a/b else Showmessage('На 0 ділити не можна'); end; end; // повертаємо результат у поле Edit1 Edit1.Text := FloatToStr(Res); End else Showmessage('Введіть число'); end; procedure TForm1.Button18Click(Sender: TObject); begin a := StrToFloat(Edit1.Text); Edit1.Clear; Res := Sqrt(a); Edit1.Text := FloatToStr(Res); end; procedure TForm1.Button19Click(Sender: TObject); begin a := StrToFloat(Edit1.Text); Edit1.Clear; Res := Sqr(a); Edit1.Text := FloatToStr(Res); end; procedure TForm1.Button1Click(Sender: TObject); begin Edit1.Text:=Edit1.Text+'1'; end; procedure TForm1.Button20Click(Sender: TObject); begin a := StrToFloat(Edit1.Text); Edit1.Clear; Res := sin(a); Edit1.Text := FloatToStr(Res); end; procedure TForm1.Button21Click(Sender: TObject); begin a := StrToFloat(Edit1.Text); Edit1.Clear; Res := cos(a); Edit1.Text := FloatToStr(Res); end; procedure TForm1.Button22Click(Sender: TObject); begin a := StrToFloat(Edit1.Text); Edit1.Clear; Res := tan(a); Edit1.Text := FloatToStr(Res); end; procedure TForm1.Button23Click(Sender: TObject); begin a := StrToFloat(Edit1.Text); Edit1.Clear; Res := ln(a); Edit1.Text := FloatToStr(Res); end;

 

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

 

Завдання для самоконтролю

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

1.

2.

3.

4.

5.

6.

 

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

7.

8.

9.

10.

11.

 

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

12.

13.

14.

15.

16.

17.

 

18.

 

19.

 

20.

 

Тема 3. Цикли

Відмітимо, що при роботі з циклами слід «вручну» перевіряти принаймні початкову та кінцеву ітерації циклу.

Цикл for

Оператор циклу for має таку структуру: for <змінна-лічильник> : = <початкове значення> to <кінцеве… Змінна-лічильник - змінна типу Integer (може використовуватися переліковий тип). Повинна бути оголошена перед…

Приклад

procedure TForm1.Button1Click (Sender: TObject); var i, sum: integer;

Умовний оператор циклу while

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

 

while <умова> do

<тіло циклу>;

 

while, do - зарезервовані слова;

умова - довільний логічний вираз;

тіло циклу - будь-який оператор, в більшості складений оператор.

 

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

 

Використовуючи дану конструкцію треба бути впевненим що умова рано чи пізно стане хибною, інакше програма може зависнути (зациклитися). І для такого випадку необхідно буде передбачити переривання за допомогою оператора break або функціями Exit або Abort.

Блок-схема циклу while матиме вигляд:

 

Рис.5. Алгоритм виконання оператора while

 

Приклад.

procedure TForm1.Button1Click (Sender: TObject); var i, sum: integer;

Цикл repeat

  Delphi нам пропонує ще одну форму умовного оператора циклу, яка відрізняється…  

Repeat

Оператор;

Оператор;

...

Оператор;

Until умова;

де repeat, until - зарезервовані слова; тіло циклу - послідовність операторів мови Delphi

Приклад.

procedure TForm1.Button1Click(Sender: TObject); var i,a,b,sum: Integer;

Навчальна частина

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

Запрограмуйте команди PopupMenu2.

Завдання для самоконтролю

  1. 2. 3. 4. 5. 6.

Тема 4. Масиви

Описати масив у програмі можна за допомогою ідентифікатора типу, визначеного в розділі Type, або безпосередньо у розділі Var. Опис типу масиву задається таким чином:  

Наприклад,

Type Tm= array[1..10] of integer; Var a, b: array[1..100] of real; r: array[1..100] of real;

Наприклад,

  Масив констант.Описується у розділі Const у вигляді типізованої константи.…  

Навчальна частина

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

Рис. 1.

5. Створіть у проекті три додаткові форми (File => New => VCL Form Delphi), та приведыть ъх до вигляду як це показано на рис.2,3,4.

Рис. 2.

Рис. 3.

Рис. 4.

6. Підключимо створені Unit до нашого проекту ( File => Use Unit), виберіть всі Unit і натисніть кнопку Ok.

7. Підключимо наші створені форми до наших кнопок першої форми

Двічі клацніть на кнопку «Пошук максимального та його номера у масиві». У створеному обробнику введіть код:

procedure TForm1.Button1Click(Sender: TObject); begin Form2.ShowModal; end;

Запрограмуйте відповідно для всіх інших форм і кнопок обробники подій.

8. Запрограмуйте відповідні обробники подій для Unit2:

procedure TForm2.Button1Click(Sender: TObject); Var n,i,k,max:integer; X:array[1..300] of integer; begin n:=StrToInt(form2.Edit1.Text); // Введення початкових даних for i:=1 to n do X[i]:=StrToInt(form2.Memo1.Lines[i-1]); max:=x[1];k:=1; // Пошук максимального елемента for i:=2 to n do if X[i]>max then begin max:=X[i];k:=i;end; form2.Edit2.Text:=IntToStr(max); // Виведення результату form2.Edit3.Text:=IntToStr(k); end; procedure TForm2.Button2Click(Sender: TObject); begin Form2.Close; end;

9. Запрограмуйте відповідні обробники подій для Unit3:

procedure TForm3.Button1Click(Sender: TObject); Type Tmas= array[1..1200] of integer; Var a,b, c: Tmas; n, m, k, t, i, j: integer; f,f1:boolean; begin n:=StrToInt(form3.Edit1.Text); // Введення початкових даних for i:=1 to n do a[i]:=StrToInt(form3.Memo1.Lines[i-1]); m:=StrToInt(form3.Edit2.Text); for i:=1 to m do b[i]:=StrToInt(form3.Memo2.Lines[i-1]); k:=0; // Побудова перерізу for i:=1 to n do begin f:=false; for j:=1 to m do if A[i]=B[j]then begin f:=true;break; end; if f then begin f1:=true; for t:=1 to k do if A[i]=C[t]then begin f1:=false;break; end; if f1 then begin k:=k+1; C[k]:=A[i]; end; end; end; form3.Edit3.Text:=''; // Виведення результату form3.Memo3.Lines.Clear; If k=0 then Showmessage('Переріз порожній') else begin form3.Edit3.Text:=IntToStr(k); for i:=1 to k do form3. Memo3.Lines.Add(IntToStr(c[i])); end; end; procedure TForm3.Button2Click(Sender: TObject); begin Form3.Close; end;

10. Запрограмуйте відповідні обробники подій для Unit4:

procedure TForm4.Button1Click(Sender: TObject); Var n,i,d,p,k:integer; A:array[1..1300] of integer; begin n:=StrToInt(form4.Edit1.Text); for i:=1 to n do A[i]:=StrToInt(form4.Memo1.Lines[i-1]); form4.Edit2.Text:=''; // Підготовка до виведення результату form4.Memo2.Lines.Clear; d:=0; k:=0; // Пошук ланцюжків i:=1; while (i<=n-1) do begin if A[i]<=A[i+1] then begin d:=2;p:=i;k:=k+1; i:=i+1; // Початок ланцюжка while (i<=n-1)do if (A[i]<=A[i+1]) then begin d:=d+1;i:=i+1;end else break; // Кінець ланцюжка form4.Memo2.Lines.Add('Ланцюжок № '+ IntToStr(k)); for i:=p to p+d-1 do // Виведення ланцюжка form4.Memo2.Lines.Add(IntToStr(A[i])); end else i:=i+1; end; if k=0 then ShowMessage('Ланцюжків немає') else form4.Edit2.Text:=IntToStr(k); end; procedure TForm4.Button2Click(Sender: TObject); begin Form4.Close; end;

11. Збережіть проект та перевірте правильність його роботи.

Рис. 5.

Рис. 6.

Рис. 7.

Завдання на самоконтроль

2. Задано масив дійсних чисел , . Розробити програму, яка обчислює . У масиві груп по чисел. Максимальне значення шукається серед мінімальних значень елементів у кожній групі.

Тема 5. Методи упорядкування даних

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

Навчальна Частина.

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

Рис. 1.

5. Зайдіть у влістивість Items компонента ComboBox1 та заповніть поле наступним чином:

Змініть властивість ItemIndex на 0.

6. Створіть обробники подій для полів: Вибір, Обмін, Вставка, Злиття, а також кнопок Button1, Button2, Button3 та введіть для кожного обробника відповідний код:

{Опис глобальних змінних} var Form1: TForm1; {Опис початкових даних} Var a: array[1..300] of integer; b: array[1..500] of integer; c: array[1..800] of integer; n, m, k: integer; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var i:integer; begin {Генератор випадкових чисел} Randomize; {Введення початкових даних} if (Edit1.Text='') then ShowMessage('Введіть початкові дані') else begin n:=StrToInt(Edit1.Text); for i:=1 to n do begin {генеруємо масив випадкових чисел від 0 - 9} a[i]:=Random (10); Memo1.Lines.Add(IntToStr(a[i])); end; end; if Edit2.Text<>'' then begin m:=StrToInt(Edit2.Text); for i:=1 to m do begin b[i]:=Random (20); Memo2.Lines.Add(IntToStr(b[i])); end; end; RadioButton1.Checked:=false; RadioButton2.Checked:=false; RadioButton3.Checked:=false; RadioButton4.Checked:=false; end; procedure TForm1.Button2Click(Sender: TObject); var i:integer; begin {Виведення результату} if n=0 then ShowMessage('Введіть початкові дані') else begin Edit3.Text:=''; Memo3.Lines.Clear; if RadioButton4.Checked=true then begin Edit3.Text:=IntToStr(k); for i:=1 to k do Memo3.Lines.Add(IntToStr(c[i])); end else begin Edit3.Text:=IntToStr(n); for i:=1 to n do Memo3.Lines.Add(IntToStr(a[i])); end; end; end; procedure TForm1.Button3Click(Sender: TObject); begin Form1.Close; end; procedure TForm1.RadioButton1Click(Sender: TObject); Var i, j, r: integer; Begin if (Edit1.Text='') then ShowMessage('Введіть початкові дані') else begin if ComboBox1.Text='Зростання' then begin {Упорядкування за зростанням методом вибору} 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; end else begin {Упорядкування за спаданням методом вибору} 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; end; end; end; procedure TForm1.RadioButton2Click(Sender: TObject); Var i, r: integer; f:boolean; Begin if (Edit1.Text='') then ShowMessage('Введіть початкові дані') else begin if ComboBox1.Text='Зростання' then begin {Упорядкування за зростанням методом обміну} f:=true; while f do begin f:=false; for i:=n downto 2 do if a[i]<a[i-1] then begin r:=a[i];a[i]:=a[i-1];a[i-1]:=r; f:=true; end; end; end else begin {Упорядкування за спаданням методом обміну} f:=true; while f do begin f:=false; for i:=n downto 2 do if a[i]>a[i-1] then begin r:=a[i];a[i]:=a[i-1];a[i-1]:=r; f:=true; end; end; end; end; end; procedure TForm1.RadioButton3Click(Sender: TObject); Var i, j, r: integer; Begin if (Edit1.Text='') then ShowMessage('Введіть початкові дані') else begin if ComboBox1.Text='Зростання' then begin {Упорядкування за зростанням методом вставки} for i:=2 to n do begin k:=i; r:=a[i]; for j:=1 to k-1 do if r < a[j] then begin for m:=k downto j+1 do a[m]:=a[m-1]; a[j]:=r; break; end; end; end else begin {Упорядкування за спаданням методом вставки} for i:=2 to n do begin k:=i; r:=a[i]; for j:=1 to k-1 do if r > a[j] then begin for m:=k downto j+1 do a[m]:=a[m-1]; a[j]:=r; break; end; end; end; end; end; procedure TForm1.RadioButton4Click(Sender: TObject); Var i, j, r: integer; Begin if (Edit1.Text='') then ShowMessage('Введіть початкові дані') else begin {Упорядкування за зростання масиву А} 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 m-1 do begin k:=i; for j:=i+1 to m do if b[j]<b[k] then k:=j; r:=b[i]; b[i]:=b[k]; b[k]:=r; end; if ComboBox1.Text='Зростання' then begin {Упорядкування за зростанням методом злиття} 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; end else begin {Упорядкування за спаданням методом злиття} i:=n; j:=m; k:=0; while (i >= 1) and (j >= 1) 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 < 1 then for i:=j downto 1 do begin k:=k+1; c[k]:=b[i]; end else for j:=i downto 1 do begin k:=k+1; c[k]:=a[j]; end; end; end; end;

7. Збережіть проект та запустіть його на виконання.

Введіть у поля Edit1 та Edit2відповідний діапазон, виберіть метод впорядкування та вкажіть напрям впорядкування «Зростання» чи «Спадання». Натисніть кнопку «Згенерувати» а потім «Вивести».

 

Рис. 2.

Завдання на самоконтроль

2. Задані цілі і масив . Розробити програму, яка впорядковує масив за неспаданням елементів, вилучає з упорядкованого масиву елемент … 3.Задано масиви цілих чисел , і , . Розробити програму, яка будує… 4. Таблиця виграшів грошової лотереї задана масивом виграшних номерів і масивом виграшів в гривнях , ( -…

Навчальна Частина.

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

Рис. 1.

12. Заповніть пункти меню наступним чином

13. Створіть дві додаткові форми і приведіть їх до вигляду як на рис.2,3.

Рис. 2.

Рис. 3.

14. Встановіть властивість Options компонента StringGrid, goEditing = true goTabs = true.

15. Запрограмуйте обробники подій Form1:

var Form1: TForm1; implementation {$R *.dfm} uses Unit2, Unit3; procedure TForm1.N11Click(Sender: TObject); begin Form2.ShowModal; end; procedure TForm1.N21Click(Sender: TObject); begin Form3.ShowModal; end; procedure TForm1.N2Click(Sender: TObject); begin Close; end;

16. Запрограмуйте обробники подій Form2:

var Form2: TForm2; n:integer; implementation {$R *.dfm} {Обробник кнопки Введення n} procedure TForm2.Button1Click(Sender: TObject); begin // Введення n і настроювання компонентів StringGrid if Form2.Edit1.Text='' then ShowMessage('Введіть n') else begin n:=strtoint(Form2.Edit1.Text); if (n<0)or(n>14)then ShowMessage('Недопустиме n') else begin StringGrid1.FixedRows:=0; StringGrid1.FixedCols:=0; StringGrid1.RowCount:=n; StringGrid1.ColCount:=n; StringGrid1.ScrollBars:=ssBoth; StringGrid2.FixedRows:=0; StringGrid2.FixedCols:=0; StringGrid2.RowCount:=n; StringGrid2.ColCount:=n; StringGrid2.ScrollBars:=ssBoth; end; end; end; procedure TForm2.Button2Click(Sender: TObject); Type Tmas=array[0..14] of integer; Var a: array[0..14] of Tmas; b:Tmas; i, j, k, l, r: integer; begin //Введення початкових даних for i:=0 to n-1 do for j:=0 to n-1 do a[i,j]:=StrToInt(StringGrid1.Cells[j,i]); // Пошук координат мінімального елемента матриці k:=0; l:=0; for i:=0 to n-1 do for j:=0 to n-1 do if a[i,j]<a[k,l] then begin k:=i; l:=j;end; // Перестановка місцями -го і -го рядків матриці b:=a[n-1]; a[n-1]:=a[k]; a[k]:=b; // Перестановка місцями -го і -го стовпців матриці for i:=0 to n-1 do begin r:=a[i,n-1]; a[i,n-1]:=a[i,l]; a[i,l]:=r; end; for i:=0 to n-1 do // Виведення перетвореної матриці for j:=0 to n-1 do StringGrid2.Cells[j,i]:=IntToStr(a[i,j]); end; procedure TForm2.Button3Click(Sender: TObject); begin Form2.Close; end;

17. Запрограмуйте обробники подій Form3:

var Form3: TForm3; n:integer; implementation {$R *.dfm} procedure TForm3.Button1Click(Sender: TObject); begin if Form3.Edit1.Text='' then ShowMessage('Введіть n') else begin n:=strtoint(Form3.Edit1.Text); if (n<0)or(n>14)then ShowMessage('Недопустиме n') else begin StringGrid1.FixedRows:=0; StringGrid1.FixedCols:=0; StringGrid1.RowCount:=n; StringGrid1.ColCount:=n; StringGrid1.ScrollBars:=ssBoth; StringGrid2.FixedRows:=0; StringGrid2.FixedCols:=0; StringGrid2.RowCount:=n; StringGrid2.ColCount:=n; StringGrid2.ScrollBars:=ssBoth; StringGrid3.FixedRows:=0; StringGrid3.FixedCols:=0; StringGrid3.RowCount:=n; StringGrid3.ColCount:=n; StringGrid3.ScrollBars:=ssBoth; end; end; end; procedure TForm3.Button2Click(Sender: TObject); Type Tmas=array[0..14] of real; Var a, b, c: array[0..14] of Tmas; i, j, k: integer; begin for i:=0 to n-1 do // Введення початкових даних for j:=0 to n-1 do a[i,j]:=StrToFloat(StringGrid1.Cells[j,i]); for i:=0 to n-1 do for j:=0 to n-1 do b[i,j]:=StrToFloat(StringGrid2.Cells[j,i]); for i:=0 to n-1 do // Обчислення добутку матриць a і b for j:=0 to n-1 do begin c[i,j]:=0; for k:=0 to n-1 do c[i,j]:= c[i,j]+a[i,k]*b[k,j]; end; for i:=0 to n-1 do // Виведення добутку матриць for j:=0 to n-1 do StringGrid3.Cells[j,i]:=FloatToStr(c[i,j]); end; procedure TForm3.Button3Click(Sender: TObject); begin Form3.Close; end;

18. Збережіть проект за запустіть його на виконання.

Рис. 4.

Рис. 5.

Завдання для самоконтролю

2. Задано дві матриці і , . Розробити програму, яка будує матрицю множенням елементів кожного рядка першої матриці на найбільше із… 3. Задана матриця , . Розробити програму, яка будує логічний вектор … 4.Задана квадратна матриця , Розробити програму, яка перестановкою рядків і стовпчиків перетворює цю матрицю…

Тема 7. Множини

Наприклад, множина, базовими для якої є елементи , складається з підмножин   ,

Навчальна Частина.

Постановка задачі:Створити програму побудови множин. Рекомендації Під час розробки програмного засобу слід використовувати наступні об’єкти:

Рис. 1.

Рис. 2.

6. Запрограмуйте кнопки «Знайти» та «Визначити» відповідно:

procedure TForm1.Button1Click(Sender: TObject); Const c=[0..9]; Var n, i, k: longint; s1, s2, s3: set of 0..9; begin {Введення початкових даних} n:=StrToInt(Edit1.Text); s1:=[]; {Множина цифр, які є у числі} s2:=[]; {Множина цифр, яких немає у числі} s3:=[]; {Множина цифр, які є у числі і повторюються} i:=n; while i<>0 do begin k:=i mod 10; if k in s1 then s3:=s3+[k] else s1:=s1+[k]; i:=i div 10; end; s2:=c-s1; {Виведення результату} Edit2.Text:=''; Edit3.Text:=''; Edit4.Text:=''; { Цифри, які є у числі } for i:=0 to 9 do if i in s1 then Edit2.Text:=Edit2.Text+IntToStr(i)+' '; { Цифри, яких немає у числі } for i:=0 to 9 do if i in s2 then Edit3.Text:=Edit3.Text+IntToStr(i)+' '; {Цифри, що повторюються} for i:=0 to 9 do if i in s3 then Edit4.Text:=Edit4.Text+IntToStr(i)+' '; end; procedure TForm1.Button2Click(Sender: TObject); begin Close; end; procedure TForm1.Button3Click(Sender: TObject); Const m1=['A'..'Z']; m2=['0'..'9']; var c:array[1..1000] of Char; s1,s2,s3,s4:set of char; n,i:integer; d:char; s:String; begin {Введення початкових даних} n:=length(edit5.text); s:=Edit5.Text; for i:=1 to n do c[i]:=s[i]; {Підготовка множин до побудови} s1:=[]; {Множина великих латинських букв, які є у тексті} s2:=[]; {Множина великих латинських букв, яких немає у тексті} s3:=[]; {Множина цифр, які є у тексті} s4:=[]; {Множина цифр, які є у тексті і повторюються} {Побудова множин} for i:=1 to n do begin if c[i] in m1 then s1:=s1+[c[i]]; if c[i] in m2 then if c[i] in s3 then s4:=s4+[c[i]] else s3:=s3+[c[i]]; end; s2:=m1-s1; {Виведення результату} Edit6.Text:=''; Edit7.Text:=''; Edit8.Text:=''; Edit9.Text:=''; if s1=[] then Edit2.Text:='Великих латинських букв немає' else for d:='A' to 'Z' do if d in s1 then Edit6.Text:=Edit6.Text+d; for d:='A' to 'Z' do if d in s2 then Edit7.Text:=Edit7.Text+d; if s3=[] then Edit8.Text:='Цифр немає' else for d:='0' to '9' do if d in s3 then Edit8.Text:=Edit8.Text+d; if s4=[] then Edit9.Text:='Немає' else for d:='0' to '9' do if d in s4 then Edit9.Text:=Edit9.Text+d; end; procedure TForm1.Button4Click(Sender: TObject); begin Close; end;

7. Збережіть проект за запустіть його на виконання.

 

Рис. 3.

 

Рис. 4.

 

Завдання для самоконтролю

2. Задано множину із цілих чисел з інтервалу , . Розробити програму, яка визначає, скільки серед базових елементів цієї множини є чисел… 3. Задано символьний масив із малих латинських літер, цифр і круглих дужок … 4. Задано символьний масив із малих латинських літер, цифр і знаків арифметичних операцій , . Розробити…

Навчальна Частина.

Постановка задачі:Створити програму для роботи з символьними рядками. Рекомендації Під час розробки програмного засобу слід використовувати наступні об’єкти:

Рис. 1.

5. Запрограмуйте кнопку «Виконати» наступним чином:

procedure TForm1.Button1Click(Sender: TObject); CONST m=[' ',',',';','.','!','?',':']; VAR s: string; p, i, j: integer; f: boolean; BEGIN {Введення початкових даних} s:=Edit1.Text; {Пошук і вилучення слів з подвоєнням букв} i:=1; repeat {Пошук початку слова} while (s[i] in m) and (i <= length (s)) do i:=i+1; if i > length (s) then Continue; p:=i; {Пошук кінця слова} while not (s[i] in m) and (i <= length (s)) do i:=i+1; {Перевірка умови подвоєння букв} j:=p; f:=false; while (j <= i-2) and (not f) do if s[j]=s[j+1] then f:=true else j:=j+1; {Вилучення слів з подвоєнням букв } {Корекція параметра циклу і} if f then begin delete (s, p, i-p); i:=p; end; until i >= length (s); {Виведення перетвореного тексту} Edit2.Text:=s; end;

6. Збережіть проект за запустіть його на виконання.

Рис. 2.

Завдання для самоконтролю

2. Задано текст, слова в якому розділені пробілами і розділовими знаками. Розробити програму, яка вилучає з цього тексту всі слова найбільшої… 3. Задано текст, слова в якому розділені пробілами і розділовими знаками.… 4. Задано два тексти, слова в яких розділені пробілами і розділовими знаками. Розробити програму, яка вилучає із…