У вас вопросы?
У нас ответы:) SamZan.net

ПРОГРАМУВАННЯ ТА АЛГОРИТМІЧНІ МОВИ для студентів які навчаються за спеціальністю 5

Работа добавлена на сайт samzan.net:

Поможем написать учебную работу

Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.

Предоплата всего

от 25%

Подписываем

договор

Выберите тип работы:

Скидка 25% при заказе до 26.12.2024

Міністерство освіти і науки, молоді та спорту України

Коледж Кременчуцького національного університету

імені Михайла Остроградського

Методичні рекомендації

до проведення лабораторних робіт

з дисципліни

«ПРОГРАМУВАННЯ ТА АЛГОРИТМІЧНІ МОВИ»

для студентів, які навчаються за спеціальністю

5.05010201  «Обслуговування комп’ютерних систем і мереж»

(номер, назва спеціальності)

Відділення  комп’ютерних мереж та електропобутової техніки

Кременчук 2012р.


Методичні рекомендації до проведення лабораторних робіт з дисципліни «ПРОГРАМУВАННЯ ТА АЛГОРИТМІЧНІ МОВИ»

для студентів, які навчаються за спеціальністю

5.05010201 «Обслуговування комп’ютерних систем і мереж»

Відділення  комп’ютерних мереж та електропобутової техніки

Укладач: Шинкаренко Л.М.

(прізвище викладача)

Розглянуто цикловою комісією з комп’ютерної техніки

Протокол №__________ від «___»_______________ 20__ р.

Голова циклової комісії___________________С.І. Почтовюк

Затверджено методичною радою коледжу

Протокол № ____від «___»________________________р.

Голова методичної ради      Левченко Р.В.


Зміст.

[1] TURBO PASCAL 7.0

[2] Лабораторна робота №1.

[2.1] Тема: Програмування алгоритмів циклічної структури. Оператор циклу з параметром. Оператори циклу WHILE, REPEAT.

[3] ХІД РОБОТИ

[4]
Лабораторна робота №2.

[4.1] Тема: Робота з одновимірними масивами.

[5] ХІД РОБОТИ

[6] Лабораторна робота №3.

[6.1] Тема: Сортування масивів. Робота з двовимірними масивами.

[7] ХІД РОБОТИ

[8] Лабораторна робота №4.

[8.1] Тема: Процедури та функції. Рекурсивні функції. Відкриті масиви

[9] ХІД РОБОТИ

[10] Лабораторна робота №5.

[10.1] Тема: Робота з даними рядкового типу.

[11] ХІД РОБОТИ

[11.0.1] Змінну рядкового типу оголошують за допомогою слова string так:

[12] Лабораторна робота №6.

[12.1] Тема: Модулі користувача. Модулі CRT і GRAPH.

[13] ХІД РОБОТИ

[14] Компіляція модулів

[14.1] Стандартні модулі

[14.1.1] Короткий опис модулів

[15] Лабораторна робота №7.

[15.1] Тема: Записи. Команда приєднання (WITH).

[16] ХІД РОБОТИ

[17] Лабораторна робота №8.

[17.1] Тема: Робота з текстовими файлами. Використання типізованих файлів.

[18] ХІД РОБОТИ

[19] DELPHI 7.

[20] Лабораторна робота № 1.

[20.1] Тема: Створення форми «Анкета студента».

[21] Лабораторна робота  № 2.

[21.1] Тема: Задача «Обмін валюти».

[22] Лабораторна робота  № 3.

[22.1] Тема: Задача «Табулювання функції».

[23] Лабораторна робота  № 4.

[23.1] Тема: Задача «Біржа цінних паперів».

[24] Лабораторна робота  № 5.

[24.1] Тема: Задача «Телефонний довідник».

[25] Лабораторна робота №6

[25.1] Тема: Створення програми: текстовий редактор «Блокнот».

[26] DELPHI 7.0

[27] Лабораторна робота  № 7.

[27.1] Тема: Задача «ВИВЧЕННЯ АНГЛІЙСЬКОЇ МОВИ».

[28] Лабораторна робота №8.

[28.1] Тема: Програмування гри «О, щасливчик!».

[29] Лабораторна робота № 9.

[29.1] Тема: Проектування СУБД в середовищі DELPHI.

[29.1.1] Завдання


TURBO PASCAL 7.0

Лабораторна робота №1.

Тема: Програмування алгоритмів циклічної структури. Оператор циклу з параметром. Оператори циклу WHILE, REPEAT.

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

ХІД РОБОТИ

  1.  Запустіть програму TURBO PASCAL. Для виводу результатів роботи програми відкрийте вікно вихідних результатів. Розмістіть вікна редактора програми і вікно вихідних результатів одне під одним.
  2.   Складіть програму з використанням циклу For для обчислення суми заданої кількості чисел.

program SUM;

{програма обчислення суми заданої кількості чисел}

uses crt;

var  N, sum, I, Num:integer;

begin       { - початок тіла головної програми}

 clrscr; {- очищення екрану}

 writeln;  {- пропуск рядка}

 writeln('<<< обчислення суми N чисел >>>');

 writeln;  {- пропуск рядка}

write ('Введіть кількість сумованих чисел N=?-> ');

 readln(N);

sum:=0;

FOR I:=1 TO N DO

Begin

writeln('Введіть', I, '-е число Num=? -> ');

readln(Num);

sum:=sum + Num; {Додавання з накопиченням}

end;

 writeln('сума ',N, ' чисел  дорівнює ', sum);

end.

  1.  Складіть програму з використанням циклу For для обчислення суми ряду     при а ≤ x ≤ b

f(x)= sin2(πx+1)    a=1; b=53;

program cikl_for;

const a=1;

     b=53;

var x:word;

   fx:real;

begin

     writeln('Обчислення суми ряду в діапазоні від а до b  ');

     fx:=0;

     for x:=a to b do

                   fx:=fx+sqr(sin(pi*x+1));

     writeln('Сума ряду   = ',fx:8:3)

end.

  1.  Збережіть програми в своєму каталозі. Відкомпілюйте і виконайте програми. Перегляньте результат і запишіть його.
  2.  Складіть програму з використанням циклу While для обчислення суми введених чисел до певного значення. Збережіть програму в своєму каталозі. Відкомпілюйте і виконайте програму.

program SUM_While;

uses crt;

var  N, sum, I, Num:integer;

begin                       { - початок тіла головної програми}

 clrscr; {- очищення екрану}

 writeln;  {- пропуск рядка}

 writeln('<< обчислення суми N чисел до певного значення >>');

 writeln;   {- пропуск рядка}

write (' Введіть кінцеве значення суми N = ? -> ');

 readln(N);

sum:=0; I:=1;

 WHILE (Sum< N) DO

Begin

writeln (' Введіть', I,’ -е число Num = ? -> ');

readln(Num);

sum:=sum+ Num;  { Додавання з накопиченням}

Inc (I); {Збільшення і на 1}

end;

writeln(' було підсумовано', I, ' чисел, сума  чисел  дорівнює ', sum);

end.

  1.   Складіть програму з використанням циклу Repeat для обчислення суми введених чисел до підтвердження закінчення. Збережіть програму в своєму каталозі. Відкомпілюйте і виконайте програму.

program SUM_Repeat;

uses crt;

var  sum, I, Num:integer;

Ch:Char;

begin                       { - початок тіла головної програми}

 clrscr;  {- очищення екрану}

 writeln;   {- пропуск рядка}

 writeln(' обчислення суми чисел ');

 writeln;   {- пропуск рядка}

sum:=0; I:=1;

 Repeat 

writeln (' Введіть', I,’-e число Num = ? -> ');

readln(Num);

sum:=sum+ Num;  { Додавання з накопиченням}

Inc (I);  {Збільшення і на 1}

writeln (' Закінчити процес  Y (Так) ');

readln(Ch);

Until ( (Ch='Y') OR (Ch='y'));

 writeln(' було підсумовано', I, ' чисел, сума  чисел  дорівнює ', sum);

end.

  1.  Складіть програму з використанням циклу While для знаходження суми ряду з точністю е = 10-3    

Program S_while;

Const

e=1E-3;

var

An, Num: real;   n, i: Word;

Nfact, Pow2, N2fact: LongInt;

begin

  WriteLn ( 'Обчислення суми ряду Аn з точністю е=10^-3'  );

  WriteLn;

  Num:=1;

  N2fact:=1;

  Nfact:=1;

  n:=1;

  An:=0;

  While ( Num >e) do

     begin

       for i:=1 to n  do   {Обчислення факторіалу n}

         begin

             Nfact := Nfact * i;

         end;

     Pow2:=2 SHL (n-1);   {Піднесення 2 до степені n}

       for i:=1 to Pow2  do    {Обчислення факторіалу 2 в степені n}

         begin

           N2fact := N2fact * i;

         end;

     Num := SQR ( Nfact ) / N2fact; {Обчислення члена ряду}

     An :=An + Num;   {Обчислення суми ряду}

       Inc(n);

       Nfact:=1;

       N2fact:=1;

     end;

   WriteLn ('Сума ряду = ',An);

   WriteLn ( 'Останній член ряду = ', Num );

   WriteLn ('підсумовано ', n,' членів ряду');

end.

  1.  Складіть програму з використанням циклу Repeat для обчислення суми парних чисел до введення букви Y.

Program S_Repeat;

uses crt;

var  

sum, I, Num : integer;

Ch : Char;

     Count : Word;

begin

Clrscr;

sum:=0;

I:=0;

Count:=0;

Repeat

write(' Введіть ', Count+1,' -е число Num = ? -> ');

readln(Num);

{Визначення парних чисел}

if Not ( odd (Num)) Then 

Begin

sum:=sum+ Num;  {Додавання з накопиченням}

{Збільшення лічильника парних чисел і на 1}

Inc (I);

end;

    {Збільшення лічильника введених чисел count на 1}

Inc(Count);

write (' Закінчити Y (Так) / N(Ні) ' );

read(Ch);

Until ( (Ch = 'Y') OR (Ch = 'y') );

writeln('було введено чисел-', Count, ', підсумовано- ',I,', сума дорівнює ', sum);

end.

  1.  В залежності від варіанту, вказаного викладачем, створіть і відладьте програму до вашої задачі.

вар

Задача

  1.  

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

Таблиця квадратів

Число    Квадрат

1              1

2              4

3              9

4            16

5            25

6            36

7            49

8            64

9            81

10         100

  1.  

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

Таблиця квадратів непарних чисел

Число    Квадрат

1 1

3 9

5 25

7 49

9 81

  1.  

Написати програму, яка обчислює суму перших n членів ряду 1, 3, 5, 7 .... Кількість сумованих членів ряду задається під час роботи програми. Нижче представлений рекомендований вид екрану під час роботи програми.

Обчислення часткової суми ряду:   1,3,5,7   ...

Введіть кількість доданих членів ряду —> 15

Сума перших 15 членів ряду дорівнює 330.


  1.  

Написати програму, яка обчислює суму перших n членів ряду
1 + …
.Кількість доданих членів ряду задається під час роботи програми. Нижче представлений рекомендований вид екрану під час роботи програми

Обчислення часткової суми ряду:   1+1/2+1/3+   ...

Введіть кількість членів ряду —> 15 

Сума перших 15 членів ряду рівна 3.3182.

  1.  

Написати програму, яка виводить таблицю степенів двійки (від нульової до десятої).

  1.  

Написати програму, яка обчислює факторіал числа, введеного з клавіатури. (Факторіалом числа n називається добуток цілих чисел від 1 до n. Наприклад, факторіал числа 1 рівний 1, а числа 8 — 40320.)

Обчислення факторіалу.

Введіть число, факторіал якого треба обчислити

-> 7

Факторіал 7 рівний  5040.

  1.  

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

Обчислення середнього арифметичного послідовності дробових чисел. Після введення кожного числа слід натиснути <Enter>

->5.4

-> 7.8

-> 3.0

-> 1.5

-> 2.3

Середнє арифметичне введеної послідовності:   4.00

Для завершення роботи програми натисніть  <Enter>.

  1.  

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

 Випадкові числа

1 3 4 2 7 4 9 6 2 1  

середнє арифметичне   3.9

  1.  

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

    1  2    3   4   5   6   7   8   9 10

1   1  2    3   4   5   6   7   8   9 10

2   2  4    6   8 10 12 14 16 18 20

3   3  6    9 12 15 18 21 24 27 30

4   4  8  12 16 20 24 28 32 36 40

5   5 10 15 20 25 30 35 40 45 50

6   6 12 18 24 30 36 42 48 54 60

7   7 14 21 28 35 42 49 56 63 70

8   8 16 24 32 40 48 56 64 72 80

9   9 18 27 36 45 54 63 72 81 90   


  1.  

Написати програму, яка перевіряє знання таблиці множення. Програма повинна вивести 10 прикладів і виставити оцінку: за 10 правильних відповідей — "відмінно", за 9 і 8 —"добре", за 7 і 6 — "задовільно", за 6 і менш — "погано". Нижче представлений рекомендований вид екрану під час роботи програми.

*** Перевірка знання таблиці множення ***

Після прикладу введіть відповідь і натисніть <Enter>

5 х 3 = 15

7 х 7 = 49

1 х 4 = 4

4 х 3 = 12

9 х 4 = 36

8 х 8 = 64

7 х 8 = 52

Ви помилилися! 7 х 8 = 56

4 х 7 = 28

3 х 5 = 15

2 х 5 = 10

Правильних відповідей: 9

Оцінка: Добре.

  1.  

Скласти програму з використанням циклу While знаходження суми ряду з точністю
е = 10
-3.            

  1.  

Написати програму, яка підсумовує непарні числа, що вводяться, до введення букви Y.

  1.  

Написати програму обчислення чисел, що вводяться, до введення числа 0.

  1.  

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

  1.  

Написати програму обчислення добутку чисел, що вводяться, до введення від′ємного числа.

  1.  Оформіть звіт з лабораторної роботи, в якому запишіть: тему і мету роботи; хід роботи; запишіть тексти задач і програм, створених на лабораторній роботі і результат.
  2.  Захистіть лабораторну роботу у викладача.


Лабораторна робота №2.

Тема: Робота з одновимірними масивами. 

Мета роботи: навчитися працювати з одновимірними масивами.

ХІД РОБОТИ

  1.  Запустіть програму TURBO PASCAL.
  2.  Робота з одновимірними масивами. Масив заповнювати, використовуючи команду введення даних з клавіатури або генератор випадкових чисел. Масив повинен містити не менше 10 елементів.
    1.  Створіть програму підрахунку кількості додатних чисел в цілочисельному масиві:

program lr6_1;

const  n=10;   { верхня межа масиву}

var  i, k : integer;

а: array[1..n] of integer;

begin  { заповнюємо масив випадковими від’ємними і додатними числами}

randomize;

for i:=1 to n do

   begin

       а[i]:=random(100)-40;

{виводимо елементи масиву на екран}

       writeln('a[',i,']=',a[i]:4);  

   end;

{ перевіряємо елементи масиву і підраховуємо додатні}

k:=0;           {обнуляємо лічильник додатних чисел}

for i:=1 to n do

 if а[i]>0 then k:=k+1;

writeln( масиві ',k, ' додатних елементів');

end.

  1.  Створіть програму пошуку номера першого з елементів масиву а, який має нульове значення. Якщо таких елементів немає, виведіть відповідне повідомлення.

i:=0;   {  номер елементів масиву  }

Repeat

i:=i+1;

Until (а[i]=0)    { знайшли }   or (i=n)    {масив кінчився };

if а[i]=0 then writeln ( 'Номер першого нульового элемента= ‘, i)

 else writeln ( 'Таких елементів немає');

  1.  Створіть програму пошуку максимального елемента і його номера. Змінна max позначає значення максимуму, k — його номер в масиві:

max:=a[1];   k:=1;    { пошук починаємо з першого елемента }

for i:=2 to n do  {перебираємо елементи, починаючи з другого}

if а[i]>max then 

begin

max:=a[i]; k:=i;  {запам'ятовуємо значення і номер елемента, який більший за всі попередні}

end;

  1.  Створіть програму пошуку мінімального елемента і його номера.
  2.  Злиття масивів. Створіть програму злиття двох впорядкованих масивів в один впорядкований. Розберіть роботу програми і напишіть коментарі.

program pr;

var а, b: array[1..5] of integer;

   с: array[1..10] of integer;

   i, j, k: integer;

begin

for i:=1 to 4 do read(а[i]);

  readln(а[5]);

for i:=1 to 4 do read(b[i]);

  readln(b[5]);

i:=1; j:=1; к:=1;

repeat    {цикл доки в обох масивах є дані}

 if а[i]< b[j] then begin

               с[k]:=a[i]; k:=k+1; i:=i+1;

                    end

                else

     if а[i]> b[j] then begin

                    с[k]:=b[j]; k:=k+1; j:=j+1;

                         end

                 else begin

                с[k]:=b[j]; с[k+1]:=b[j];

                k:=k+2; j:=j+1; i:=i+1;

                       end;

until (i>5) or (j>5);

{введення записів, які залишилися в одному з масивів}

while i<=5 do begin с[k]:=a[i]; k:=k+1; i:=i+1;

             end;

while j<=5 do begin с[k]:=b[j]; k:=k+1; j:=j+1;

             end;

for i:=1 to 10 do write(с[i],' ');

       writeln;

end.

  1.  Одновимірні масиви і складний пошук. Створіть масив: array [1.. 15], заповніть  його за допомогою оператора READ або використовуючи генератор випадкових чисел. Виконайте завдання свого варіанту. У разі відсутності розшукуваних даних, виведіть про це повідомлення.

вар

Задача

  1.  

Створіть (і вивести) новий масив, який складається з додатних елементів масиву у.

  1.  

Знайти суму третього і шостого додатних елементів.

  1.  

Другий від’ємний елемент замінити мінімальним.

  1.  

Скільки в масиві елементів з мінімальним значенням серед додатних?

  1.  

Ненульові елементи масиву занести в інший масив.

  1.  

Обчислити суму перших чотирьох від’ємних елементів.

  1.  

Вивести номер передостаннього додатного елемента.

  1.  

Створіть новий масив з від’ємних елементів масиву у.

  1.  

Знайти добуток другого і четвертого елементів, значення яких більш ніж 3.

  1.  

Максимальний елемент поміняти місцями з другим нульовим.

  1.  

Передостанній від’ємний елемент замінити максимальним.

  1.  

Обчислити добуток другого від’ємного і п'ятого елементів.

  1.  

Елементи масиву більші, ніж 1, занести в інший масив.

  1.  

Вивести номери і значення двох найбільших елементів. Обчислити їх суму.

  1.  Оформіть звіт з лабораторної роботи.
  2.  Захистіть лабораторну роботу у викладача.

Теоретичні відомості до лабораторної роботи № 2 .

Масиви.

Масив (array) - це кінцевий набір елементів одного (базового) типу, які зберігаються в послідовно розміщених елементах оперативної пам'яті і мають загальне ім'я.

В математиці поняттю масив відповідають поняття вектора і матриці. Розрізняють одно- і багатовимірні масиви. Двовимірний масив даних — це таблиця, яка складається з декількох рядків.

Загальний вид конструкції опису типу масиву такий:

array [<розмір>] of <ім’я базового типу >;

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

Описати масив можна в розділі опису типів type, в розділі констант const або в розділі оголошення змінних var. Імена типів масивів і змінних - масивів вказує користувач.

Приклад. Опишемо тип масиву mymasyv, оголосимо постійний масив (масив - константу) zatraty типу mymasyv і змінні - масиви а, al типу mymasyv і масив b, що складається з 7 елементів цілого типу, масив с — з 100 елементів-символів.

type     mymasyv = array [1.. 10] of  real;

day = (mon, tue, wed, fri, sat, sun);

const   zatraty: mymasyv = (1.2, 1, 1, 2, 8, 2.4, 8.7, 3, 7, 1.3);

var       а, al : mymasyv; 

              b : array [day] of integer ;

              с : array [1..100] of char ;

Над масивами визначена єдина команда присвоєння. Наприклад, команда а:= а1 всі значення масиву а1 привласнить відповідним елементам масиву а. Вся решта операцій визначена тільки над елементами масиву. Доступ до елементів масиву здійснюється так:

<ім’я масиву >[<номер елементу >]

Номер (його часто називають індексом) записують в квадратних дужках, наприклад, а[1] - перший елемент масиву а, b[tue] другий елемент масиву b.

Приклад. Елементам описаних вище масивів можна присвоїти значення так:  
а[1]:= 15.1; b[tue]:= 3; с[1]:= 'а'; с[2]:= 'b'.

Елементи масиву zatraty мають такі значення:     zatraty[l]= 1.2; zatraty[2]= 1; ...; zatraty[10]= 1.3.

Приклад. Створіть масив з перших ста позитивних цілих чисел і обчислити суму всіх його елементів:

s := 0;

for i := 1 to 100 do

begin

а[i]:= i;  s := s + а[i]

end;

writeln(s);

Задачі пошуку в масиві конкретних даних вирішують методом сканування всіх елементів масиву за допомогою команд циклу for, while або repeat і команди розгалудження, в якій вказують умову пошуку.

Дії над масивами.

Заповнення масиву даними

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

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

  •  

  •  при введенні даних з клавіатури;
  •  за допомогою генератора випадкових чисел;
  •  присвоєння заданих значень;
  •   прочитуючи значення елементів з файлу.


Наприклад, "сліпий", без використання коментарів, введення з клавіатури:

  •  вектора з 5 елементів:

for i:=l to 5 do readln(а[i]);

  •  матриці розміром 3x2 (всього буде потрібно ввести 6 чисел):

for i:=1 to 3 do

for j:=1  to 2 do

readln(а[i,j]);

Наприклад, фрагмент програми заповнення одновимірного масиву х з n елементів випадковими числами в діапазоні від 0 до 99 включно виглядає так:

randomize;       {  ініціалізація датчика випадкових чисел  }

for i:=1 to n do x[i]:=random(100);

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

for i:=1 to n do

for j : =1 to m do а[i,j]:=0;

Виведення масиву.

Виведення значень елементів масиву також виконується в циклі for з використанням операторів write і writeln.

Наприклад, виведення вектора з 5 елементів:

  •  в стовпець:

for i:=1 to 5 do writeln(а[i]);

  •  в один рядок, через пропуск-роздільник:

for i:=1 to 5 do write(а[i],'     ');

  •  або із завданням формату, де під кожний елемент відводиться 4 позиції:

for i:=1 to 5 do write(а[i]:4);

Виведення матриць в стандартній формі запису — по рядках і стовпцях — виконується за допомогою оператора writeln; (без параметра). Він використовується після виводу поточного рядка матриці для переміщення курсора в початок наступного рядка екрану:

for i:=1 to n do

begin

for j:=1 to m do

write(а[i,j]:4);

writeln;

end;

Дії з одновимірними масивами

Умовимося, що у векторі а міститься n елементів.

  •  Обчислення суми елементів:

s:=0;

for i:=1 to n do s:=s+a[i];    {  звичайне накопичення суми в s  }

  •  Обчислення добутку елементів:

s:=1;

for i:=1 to n do s:=s*a[i];  { накопичення добутку в s }

Сортування масиву

Сортування і пошук є найважливішими поняттями інформатики. Сортування — це процес впорядковування набору даних одного типу за збільшенням або зменшенням значення якої-небудь ознаки. З погляду програміста найбільший інтерес представляють: сортування масиву; сортування рядків; сортування елементів файлу. Саме ці сортування використовуються при розробці компіляторів, інтерпретаторів, баз даних, оформленні статистичних зведень, довідкових матеріалів і більшості прикладних пакетів.


Лабораторна робота №3.

Тема: Сортування масивів. Робота з двовимірними масивами.

Мета роботи: навчитися сортувати одновимірні масиви,
працювати з двовимірними масивами.

ХІД РОБОТИ

  1.  Запустіть програму TURBO PASCAL.
  2.  Сортування одновимірних масивів. Масив заповнювати, використовуючи команду введення даних з клавіатури або генератор випадкових чисел. Масив повинен містити не менше 10 елементів.
    1.  Відсортуйте масив за збільшенням, використовуючи алгоритм лінійного сортування.
    2.  Відсортуйте масив за зменшенням, використовуючи алгоритм бульбашкового сортування. "Бульбашковий метод" заснований на тому, що в процесі виконання алгоритму більш "легкі елементи" масиву поступово "спливають". Особливістю даного методу є порівняння, а потім, якщо потрібно, і перестановка сусідніх елементів.

const count=20;

m: array [1.. count] of  byte =

(9, 11, 12, 3,19, 1,5, 17, 10, 18, 3,19, 11, 9, 12, 20, 20, 19, 2,5);

var i, j, buf, n: byte; а: integer;

begin

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

for i:=1 to count do write (' ',m[i]); writeln; readln;

а:=0;

for i:=2 to count do

 begin

for j : =count downto i do 

begin

а: =a+l;

if m[j-1]<m[j] then {якщо елемент справа більше елемента зліва, то "витісняємо" його вліво - пухирець "спливає"}

begin

buf:=m[j-1];   { перестановка елементів }

m[j-1]:=m[j]; m[j]:=buf;

for n:=1 to count do write ('   ',m[n]);

writeln(';    ітерація #   ', а);

end;

end;

end;

end.

  1.  Відсортуйте масив випадкових чисел за збільшенням, використовуючи алгоритм бульбашкового сортування.
  2.  Робота з двовимірними масивами. Масив заповнювати, використовуючи команду введення даних з клавіатури або генератор випадкових чисел. Масив повинен містити n=5 рядків і m=6 стовпців.
    1.  Створіть програму пошуку мінімального елемента двовимірного масиву. Змінна min використовується для зберігання значення мінімального елемента, K — номер рядка, L — номер стовпця, де він знаходиться:

Min:=a[1,1]; K:=1; L:=1;

For i:=1 to n do

Begin

for j:=1 to m do

if а[i, j]<min then

 begin

min:=a[i, j] ;

K:=i;   L:=j;

 end;

end.

  1.   Створіть програму множення двовимірного масиву а на вектор (одновимірний масив) х, в результаті виходить новий вектор у:

for i:=1 to n do

begin s:=0;

for j : =1 to m do s:=s+a[i, j]*x[j] ;

у[i]:=s;

end;

  1.  Створіть програму пошуку максимального елемента двовимірного масиву.

  1.  Двовимірні масиви і пошук елементів масиву. Створіть масив:
    array [1.. 4,1..4], заповніть його, використовуючи генератор випадкових чисел. Виведіть його на екран у вигляді таблиці (матриці). Виконайте додатково завдання свого варіанту.

вар.

Задача

  1.  

Знайти індекси мінімального елемента масиву. Обчислити добуток його від’ємних елементів.

  1.  

Обчислити кількість елементів масиву, для яких виконується нерівність
1 < а
kn < 6.

  1.  

Обчислити добуток значень тих елементів, для яких справедливі нерівності аkn < -1 або аkn > 1

  1.  

Обчислити кількість додатних елементів і їх добуток.

  1.  

Обчислити суму квадратів елементів, більших за 1.

  1.  

Обчислити добуток тих елементів масиву, для яких виконується нерівність |аkn| < 3.

  1.  

Обчислити кількість тих елементів масиву, для яких виконується нерівність аkn > 3 і суму елементів, менших за 9.

  1.  

Обчислити добуток від’ємних елементів. Визначити індекси максимального елемента.

  1.  

Обчислити добуток тих елементів масиву, для яких виконується нерівність 2 < аkn < 10.

  1.  

Обчислити добуток елементів перших двох рядків.

  1.  

Обчислити суму елементів масиву над головною діагоналлю. Визначити індекси мінімального елемента.

  1.  

Обчислити суму від’ємних елементів масиву. Знайти максимальний елемент.

  1.  

Знайти добуток мінімального і максимального елементів масиву.

  1.  

Визначити індекси мінімального і максимального елементів масиву.

  1.  

Обчислити добуток матриці на вектор та максимальний елемент отриманого вектора.

  1.  

Знайти добуток двох матриць та мінімальний елемент отриманої матриці.

  1.  

Знайти суму двох матриць та обчислити слід (суму діагональних елементів) отриманої матриці.

  1.  Оформіть звіт про лабораторну роботу.
  2.  Захистіть лабораторну роботу у викладача.


Лабораторна робота №4.

Тема: Процедури та функції. Рекурсивні функції. Відкриті масиви 

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

ХІД РОБОТИ

  1.  Запустіть програму TURBO PASCAL.
  2.  Використання процедур без параметрів та з параметрами.
    1.  Створіть програму з використанням процедури без параметрів. Задача: банк виплачує р % річних. В яку суму перетвориться внесок величиною Х0, встановлений на n років? В програмі дві процедури. Перша має ім'я Initialize і служить для введення початкових даних, друга — Calculate, служить для обчислення суми, яку шукають і виводу результату, який визначається по відомій в теорії відсотків формулі «складних відсотків»: Хn0*(1 + 0,01р)n. Заголовки процедур містять тільки їхні імена.

Program Bank;

var X0: real;          {початкова сума}

       n : Byte;          {термін внесення}

Procedure Initialize;

begin

Write ('Введіть суму внеску '); ReadLn(X0);

Write ('Введіть термін внеску '); ReadLn(n);

end;

Procedure Calculate;

Const  p=8;                  {відсоток річних}

var      Xn: real;

begin

Xn:=X0*Exp(n*Ln(1+0.01*p));

Write ('Сума складе:  ',Xn:10:3 );

ReadLn;

end;

{Основна програма}

BEGIN

Initialize;

Calculate; 

END.

  1.   Створіть програму з використанням процедури з параметрами. Задача: заповнити масив розмірністю 9*5, виконати над кожним елементом масиву вказану арифметичну дію та вивести всі елементи, які менші нуля.

program stepen;

const row=9;

        column=5;

var i, j: word;

      а,b: array[1..row,1..column] of real;

{Процедура піднесення в раціональний степінь від′ємних і додатніх чисел}

   procedure degree(x: real;  n,m: byte;  var rez: real);

 begin

    if x>0 then rez:=exp(n/m*ln(x));

    if x<0 then

             if m mod 2 = 0 then rez:=exp(n/m*ln(abs(x)))

                 else rez:=-exp(n/m*ln(abs(x)));

    if x=0 then rez:=0;

 end;

          {процедура для виводу горизонтальної лінії}          

   procedure gorline;   

     var k:integer;

     begin

        write('|');

        for k:=1 to 30 do write('-');

        write('|');writeln;

     end;

{процедура для виводу від′ємних чисел}

   procedure vivod(n,m: word; x: real);

 begin

   if x>=0 then exit;

writeln('|    ',n,'   |    ',m,'    | ',x:5:3,'  |');

    gorline;

 end;

{ Основна програма. Введення чисел в двовимірний масив a[row,column]}

begin    

writeln('Введення початкового масиву по рядках через пробіл');

      writeln('в кінці рядка натисніть ENTER');

      for i:=1 to row do

         begin

             write('рядок з номером ',i,': ');

             for j:=1 to column do read(а[i,j]);

             writeln;

          end;

     {Від кожного елемента беремо корінь 5-го ступеня} 

for i:=1 to row do     

   for j:=1 to column do degree(а[i,j],1,5,b[i,j]);

writeln(ивід отриманого масиву чисел по рядках');

      for i:=1 to row do

         begin

             write('рядок з номером ',i,': ');

             for j:=1 to column do write(b[i,j]:5:3,'  ');

             writeln;

          end;

 writeln('виведення від′ємних елементів масиву');

         gorline;

   writeln('| рядок   | стовпець | елемент   |');

         gorline;

    for i:=1 to row do

       for j:=1 to column do vivod(i, j, a[i,j]);

end.

  1.  Виконайте завдання свого варіанту з лабораторної роботи №3 (п.4) з використанням процедури з параметрами (масив: [1..4,1..4], заповніть використовуючи генератор випадкових чисел та виведіть його на екран аналогічно попередній програмі).
  2.  Використання процедур. Робота з відкритими масивами. Задача: Створіть
    2 масиви за допомогою генератора випадкових чисел, відсортуйте їх і виведіть на екран.

program pr;

procedure inpm(var m:array integer);

var i:integer;

begin

 writeln('вводимо елементи масиву');

   for i:=0 to high(m) do

        begin m[i]:=random(100);

              write(m[i]:4)

        end; writeln;

end;

procedure sortm(var m:array integer);

var i,j,buf,n:integer;

begin

  n:=high(m);

  for i:=1 to n do

      for j:=n downto i do

         if m[j]<m[j-1] then

            begin buf:=m[j];

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

                  m[j-1]:=buf;

            end;

end;

procedure outm(var m:array integer);

 var i:integer;

 begin

   for i:=0 to high(m) do write(m[i]:4);

   writeln;

end;

{основна програма}

var m1:array[1..10] integer;

   m2:array[1..15] integer;

   m_res:array[1..25] integer;

begin

   randomize;

 writeln('мас м1'); inpm(m1); sortm(m1); outm(m1);

 writeln('мас м2'); inpm(m2); sortm(m2); outm(m2);

end.

  1.  Використання функцій.
    1.  Задача: за допомогою функції, що визначає більше з двох чисел, знайти більше з чотирьох чисел. В прикладі ми знаходимо більше з чотирьох чисел, використовуючи проміжні змінні х і y: х - більше серед чисел а1 і а2, у - більше серед чисел а3 і а4, Мах2(х,у)- результат.

Var al,a2,a3,a4,x,y: Integer;

Function Max2(а,b:Integer): Integer;

begin

if a>b then Max2:=a else Max2:=b

end;

BEGIN

Write ('Введіть чотири цілі числа   ') ;

ReadLn (al,a2,a3,a4);  {1- з використанням проміжних змінних}

х:=Мах2(а1,а2); у:=Мaх2 (а3,а4);

WriteLn (' 1: ',Мах2(х,у));

{2-з використанням тільки звернень до функції}

WriteLn('2: ',Max2(Max2(а1,а2),Max2(а3,а4)));

END.

  1.  Використання рекурсії. Задача: обчислення n-го числа ряду Фібоначчі. Числа Фібоначчі складають послідовність, черговий елемент якої обчислюється по двох попередніх значеннях: Fn=Fn-1+Fn-2. Нульове і перше значення повинні бути задані, їх значення повинне дорівнювати 1. В цій програмі реалізовано два методи розв’язання задачі обчислення числа Фібоначчі. Розв’язання з використанням рекурсивних викликів реалізовано за допомогою функції F. Ітераційний метод полягає в прямому програмуванні ітераційної формули для чисел Фібоначчі за допомогою функції G.

program fibonachi;

uses crt;

function F(n:word): longint; {рекурсивна функція}

begin

  if keypressed then halt;

  if (n=0) or (n=1) then F:=1

                            else  F:=F(n-2)+F(n-1);

end;

function G(n:word): longint; {ітераційний метод}

var x,y,t: longint;     k: word;

begin

  x:=1;  у:=1;

  for k:=2 to n do

  begin

    t:=y;    у:=x+y;    x:=t;

  end;

  G:=y;

end;

var n:word;  {Основна програма}

begin

 clrscr;

 Writeln('Введіть номер числа Фібоначчі');     readln(n);

 writeln('Рекурсивний алгоритм : F(',n,')= ',F(n));

 writeln('Ітераційний алгоритм: F(',n,')= ',G(n));

end.

  1.  Використовуючи процедури і функції cтворіть програми для масивів з різною кількістю елементів. Задача: у відділі Y є 15 співробітників, а в G - 20.  Протягом місяця кожний співробітник відпрацював деяку кількість днів, яка задана як випадкова величина значеннями уn = random(30), п = 1, 2 ..., 15,
    g
    k = random(30), k = 1, 2 ..., 20. Денна оплата праці d в умовних одиницях. Податкова ставка 20%. Використовуючи процедури і функції, створіть масиви у, g, виведіть значення їх елементів на екран і виконайте завдання пошуку даних для кожного відділу, в залежності від номера варіанту, виданого викладачем. Виведіть повідомлення, якщо відсутні дані, які шукаються.

варіанту

Задача

  1.  

Скільки чоловік в кожному з відділів працювало більше 15 днів?

  1.  

У кого якнайменший заробіток в кожному з відділів?

  1.  

Кому нараховано більше 100 у.о. в кожному відділі?

  1.  

Скільки людино-дня було відпрацьовано в кожному відділі?

  1.  

Який середній заробіток в кожному відділі?

  1.  

Скільки співробітників отримали більше 50 і менше 120 у.о.?

  1.  

Скількох чоловік працювало менше 10 днів?

  1.  

Яку суму податку заплатили в кожному відділі?

  1.  

Хто заплатив найбільший податок в кожному з відділів?

  1.  

У скількох співробітників податкові вирахування переважили 20 у.о.?

  1.  

Який середній податок був в кожному відділі?

  1.  

В якому відділі більший середній заробіток?

  1.  

Хто сплатив найменший податок в кожному відділі?

  1.  

Скільки чоловік в кожному відділі працювало тільки один день?

  1.  

У скількох чоловік заробіток вище середнього?

  1.  

В якому відділі менший середній заробіток?

  1.  

У скількох чоловік заробіток відхиляється від середнього менше ніж на 10% ?

  1.  

В якому відділі був зафіксований найбільший заробіток?

  1.  

Скільки співробітників відпрацювали більше 5 і менше 12 днів?

  1.  

Який середній заробіток перших п'яти співробітників в кожному відділі?

  1.  

У скількох чоловік заробіток був менше середнього?

  1.  

Який середній заробіток останніх чотирьох чоловік в кожному відділі?

  1.  

В якому відділі була відпрацьована більша кількість людино-дня?

  1.  

Хто заробив більше 100, але менше 200 у.о.?

  1.  

Скільки співробітників відпрацювали 2, 3 або 4 дні?

  1.  Оформіть звіт про лабораторну роботу. Захистіть лабораторну роботу у викладача.


Лабораторна робота №5.

Тема: Робота з даними рядкового типу.

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

ХІД РОБОТИ

  1.  Запустіть програму TURBO PASCAL.
  2.  Створіть програму злиття двох відсортованих масивів рядків. Розберіть принцип роботи програми. Виконайте програму.

const m=4;  n=3;

а:array [l..m] string=('Андрєєв','Григорьєв','Іванов','Сидоров');

b:array [l..n] string=('Васильєв','Петров','Яковлев');

var з:array [l..m+n] string;

к,i,j:integer; {індекси трьох масивів}

begin

i:=1; j:=1;

for к:=1 to m+n do

if (i>m) or (b[j]<a[i]) then   {якщо індекс i вийшов за межі масиву а або b[j]<a[i] }

begin

с[k]:=b[j]; j:=j+l;

end 

else begin

с[k]:=a[i]; i:=i+1;

end;

writeln('Массив с:');

for к:=1 to m+n do write(с[k],' ');

end.

  1.  Вставка, видалення і заміна фрагментів тексту з використанням процедур і функцій для роботи з рядками. Ці дії постійно виконуються при редагуванні тексту різними текстовими процесорами.
    1.  Створіть програму, в якій проводиться заміна у введеному тексті одного слова іншим. Розберіть принцип роботи програми.

var text, word1, word2:string;

    i,k:integer;

begin

write('введіть текст='); readln(text);

write('word1='); readln(word1); write('word2='); readln(word2);

к:=length(word1);

for i:=1 to length(text)-(k-1) do

   if сору(text,i,k)=word1 then     begin

     delete(text,i,k);

     insert(word2,text,i);      

       end;

writeln(text);

end.

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

{$V-} { відключили перевірку повної сумісності типів }

var s:string[80];{ формальний і фактичний параметри різних типів }

procedure delspace(var s:string);

begin

{пропуски видаляються до тих пір, поки функція роz видає ненульовий результат при пошуку}

 while роs{'   ',s)>0 do delete(s,роs('   ',s),l); {подвійного пропуску в рядку}

if s[l]=' ' then delete(s,l,l); { видаляємо з початку рядка }

if s[length(s)]=' ' then delete(s,length(s),1); { і кінця }

end;

procedure itd_itp(var s:string);

const а:array[1..4] string[15]=('і т. д.', 'і тому подібне','т. як.', 'т. т. ') ;

al:array[1..4] string[5]=('і т.д', 'і т.п', 'т.як', 'т.т');

var к,p: integer;

begin

for к:=1 to 4 do begin   { скорочуємо кожну з 4 фраз }

while роs(а[k],s)>0 do 

begin  { поки зустрічається фраза }

p:=pos(а[k],s);  {визначаємо номер першого символу фрази} delete(s,p,length(а[k]));  { видаляємо фразу }

{ якщо після фрази стояла крапка, то не додаємо останню '.'}

if s[p]='.' then insert(a1[k],s,p)

else insert(a1[k]+'.',s,p);

end;  end; end;

begin

writeln('Введіть рядок тексту:'); readln(s);

delspace(s); itd_itp(s);

writeln('Скорочений варіант:'); writeln(s)

end.

  1.  Створіть програму: введіть прізвище, ім'я і по батькові як одне дане рядкового типу; визначіть довжину рядка і кількість букв "а" в ньому; виконайте додатково завдання свого варіанту.

№ варіанту

Задача

  1.  

Вивести ім'я і кількість букв в третьому слові.

  1.  

Визначити скільки букв 'а' є в прізвищі.

  1.  

Вивести три букви (свої ініціали) з крапками.

  1.  

Вивести довжини прізвища і імені.

  1.  

Вивести прізвище і ініціали.

  1.  

Вивести ім'я і кількість букв в прізвищі.

  1.  

Визначити скільки букв 'о' є в імені.

  1.  

Вивести найдовше слово.

  1.  

Вилучити всі букви 'а' і 'о' з прізвища.

  1.  

Вивести ім'я в стовпчик.

  1.  

Чи починається хоча б одне слово з букви 'М'?

  1.  

Всі букви 'и' в імені продублювати.

  1.  

Вивести прізвище і кількість букв в імені.

  1.  

Вивести ім'я в зворотному порядку.

  1.  

Вивести ім'я, по батькові і кількість букв в прізвищі.

  1.  Оформіть звіт про лабораторну роботу, в якому запишіть: тема і мета роботи;

тексти задач і програм, створених на лабораторній роботі.

Теоретичні відомості до лабораторної роботи № 5 .

РЯДКИ (STRING)

Дані рядкового типу - це обмежена послідовність довільних символів (тобто елементів типу char). Постійні рядкового типу записують за допомогою двох штрих-символів (апострофів), що охоплюють текст. Рядок може мати від 0 до 255 символів. Наприклад, 'Україна', 'Львівська політехніка' " - порожній рядок нульової довжини, ' ' - рядок, що складається з одного символу-пропуску.

Змінну рядкового типу оголошують за допомогою слова string так:

var <змінна> : string[n];

де п – довжина рядка, n<256. Довжину рядка можна не вказувати. Наприклад

const      slovo = 'University';

var         frazal : string[45];

fraza2 : string;

Над змінними рядкового типу визначені операції об'єднання (символ операції +) і порівняння (< <= > >= = <>). Порівняння двох рядків здійснюється зліва направо до перших різних символів, причому 'А' < 'В', 'В' < 'С' і т.д. «Великим» вважається символ, який розміщений в алфавіті далі (він має більший номер в таблиці кодів комп'ютера ASCII). Числовий код символу дає функція ord, наприклад, ord('B')= 66, ord('A')= 65. Зворотну дію виконує функція chr: chr(66) дає 'В'.

Приклад.  Хай  tl = 'New',  t2='   Year'.   Тоді  об'єднанням цих рядків буде
s := tl + t2   (результат:   s = 'New   Year').

Тут s > tl.

Приклад. Вивести на екран рядкові букви латинського алфавіту і їх коди можна таким чином:

for v := 'a' to 'z' do writeln(v, ord(v):5);

Для обробки даних рядкового типу призначені стандартні функції

Length (<рядок>) - визначає кількість символів в заданому рядку;

Сору (г, m, n) - дає п символів рядка r, починаючи з символа з номером т;

Concat (rl,    r2 ..., гn) - об'єднує рядки rl ..., гn в один рядок;

Pos (rl, r2) - визначає № символу, з якого починається входження рядка rl в рядок г2.

і процедури

insert(rl <змінна>, n) - вставляє рядок rl в рядок, який заданий змінною, починаючи з позиції n;

delete(<змінна>, m, n) - видаляє n символів з рядка, який заданий зміною, починаючи з позиції m;

str(<число>   <змінна>) - переводить числове дане в дане рядкового типу;

val(rl, si, s2) - засилає в числову змінну si числовий образ рядка rl. Якщо це можливо, то змінна s2 набуває значення 0, інакше - числове значення номера першого неприпустимого символу заданого рядка.

Вказана змінна передає в процедуру вхідне дане рядкового типу і одержує назад змінений рядок — результат виконання процедури.

Приклад. Хай змінна Lvov має значення 'Львівська політехніка'. Розглянемо приклади функцій і їх значення:

Функція  Значення

length(Lvov)  21;

сору(Lvov, 15, 11)  'техніка';

concat(Lvov,' - 2001')  'Львівська політехніка - 2001';

роs(V, Lvov) 15.

Наступні процедури присвоять змінній Lvov такі значення:

Процедура Значення змінної Lvov

Insert(‘Hy ', Lvov, 1)  'НУ Львівська політехніка'

delete(Lvov, 6, 16)  'Львів'

str(2001, Lvov) '2001'

val('1256', Lvovl, Ozn) Lvovl = 1256, Ozn = 0

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

Приклад. Значення рядковим змінним frazal і fraza2 можна привласнити, а потім вивести їх на екран так:

frazal := 'Ви любите канікули?';

for i := 1 to 19 do read(fraza2[i]);

writeln(frazal); writeln(fraza2);

Задача. Кодування тексту. Видалити з деякої фрази а всі пропуски, коми і крапки, інші символи продублювати. Вивести результат.

program MyCode;

uses Crt;

var       а, b, с : string;

i : integer;

begin

clrscr;

write('Введіть текст: '); readln(a); b:=";

for i := 1 to Length(a) do

begin

с := сору(а, i, 1);   {або поелементно так: с := а[i];}

if (с <> ',') and (с <>'.') and (с <>' ' )then b := b + с + с

end;

writeln(b);

end.

Задача. Хай заданий рядок 'Я люблю Мерседес'. Визначити довжину рядка. Вивести на екран друге слово цього рядка.

program Stroka;

uses Crt;

const rl : string = 'Я люблю Мерседес';

var i, к, m, nl, n2 : integer;

begin

clrscr;

m := 0;

к:= length(rl);           {Визначаємо довжину рядка}

writeln('Довжина рядка к =', к);

for i := 1 to к do         {Перебираємо всі символи рядка}

if rl[i]= ' ' then   begin {і шукаємо пропуск}

m := m + 1;

if m = 1 then nl := i; {Визначаємо номер першого пропуску}

if m = 2 then n2 := i {Визначаємо номер другого пропуску}

end;

for i := nl + 1 to n2 - 1 do write(rl[i]);     

    end.


Лабораторна робота №6.

Тема: Модулі користувача. Модулі CRT і GRAPH.

Мета роботи: створювати і використовувати власні модулі, навчитися працювати із стандартними модулями Crt і GRAPH.

ХІД РОБОТИ

  1.  Запустіть програму TURBO PASCAL.
  2.  Створення і використання модуля користувача.
    1.  Створення власного модуля .
    •  Відкрийте програму з лаб. роботи №4 п.3 (робота з відкритими масивами).
    •  Використовуючи програму LabR4_3.pas, створіть модуль, що складається з трьох процедур: введення, сортування і виводу відкритого масиву:

Unit  КМ<№ групи >;   { заголовок модуля }

 interface                  { початок інтерфейсної частини }

   var                       {оголошення загальнодоступних змінних )

   procedure           {  заголовки загальнодоступних процедур  }

 implementation      { початок виконуваної частини }

    procedure         { заголовки і тіла процедур }

end.                      {  кінець   модуля  }

  •  Збережіть створений модуль з ім'ям  КМ<№ групи>.pas в своїй папці.
    •  Встановіть значення Disk в пункті меню Compile Destination.
    •  Виконайте компіляцію Compile Compile. На диску з'явиться файл об'єктного коду програми КМ<№групи>.tpu 
    •  Засобами операційної системи скопіюйте файл КМ<№групи>.tpu в папку TP7\UNITS.
    1.  Використання модуля.
      •  Задача: використовуючи модуль  КМ<№групи> своріть 2 масиви за допомогою генератора випадкових чисел, відсортуйте їх і виведіть на екран.
  1.  Намалюйте спіраль з різнокольорових зірочок. Процедура delay уповільнює процес заповнення екрану по спіралі різнокольоровими зірочками, тому часто використовується при виводі різних зображень, що змінюються, на екрані.

uses crt;

tуре direction=(right,down,left,up);

var с,x,y,h,k: integer;

procedure go(d:direction; n:integer);

begin

for к:=1 to n do

begin

 case d

right: x:=x+2;  down: у:=y+1;

left: x:=x-2;   up: у:=y-1;

end;

с:=random(15)+l; textcolor(c);

gotoxy(x,y); write('*’); delay(10000);

end;

end;

begin

clrscr; x:=39; у:=13; h:=1;

gotoxy(x, у); write('*');

repeat

go(right,h); go(down,h); h:=h+1;

go(left,h); go(up,h); h:=h+1;

until h>24;

end.

  1.  Намалюйте 3 геометричні фігури будь-якими символами.
  2.  Робота із стандартним модулем  GRAPH. (При роботі  користуйтеся довідковою системою).
    1.  Намалюйте різними кольорами десять концентричних кіл із загальним центром посередині екрану, тобто в точці з графічними координатами (320; 240), і опишіть навкруги них червоний прямокутник.

Program RisCircle10;

uses Crt,Graph;

var driver,mode,r,n:integer;

begin

 clrscr;   driver:=detect;

 initgraph(driver,mode,' ');

 r:=10;

 while r<=100 do

    begin

      setcolor(r div 10);

      circle(320,240,r);     r:=r+10;

    end;

 setcolor(red);

 rectangle(220,140,420,340);   readln;  

end.

  1.   Зобразити рух сонця на блакитному небі в горизонтальному напрямі.

program MySun;

uses Crt, Graph;

var driver, mode, i : integer;

begin

clrscr;

driver := detect;

initgraph(driver, mode ");

i := 0;

while i <= 750 do 

begin

setcolor(14);  setbkcolor(3); setfillstyle(l, 14);  circle(i, 100, 50);  

floodfill(i, 100, 14);  delay(200);  setfillstyle(l, 3);  setcolor (3);

circle(i, 100, 50);  floodfill(i, 100, 3);

i := i + 5

end;  readln

end.

  1.  Виконайте завдання свого варіанту. Пожвавте зображення. Задача: Створіть емблему: В заданій частині графічного екрану намалюйте фігуру 1, в середині фігури 1 - фігуру 2, а в середині фігури 2 - текст: прізвище і ініціали. Всі елементи малюнка виконайте різними кольорами. Замкнуті області зафарбуйте.

 

 

Частина екрану

Фігура 1

Фігура 2

  1.  

Верхня половина

Коло

Квадрат

  1.  

Нижня половина

Прямокутник

Коло

  1.  

Ліва половина

Трикутник

Еліпс

  1.  

Права половина

Еліпс

Прямокутник

  1.  

Верхня права чверть

Квадрат

Трикутник

  1.  

Нижня ліва чверть

Коло

Еліпс

  1.  

Нижня права чверть

Прямокутник

Коло

  1.  

Верхня ліва чверть

Трикутник

Прямокутник

  1.  

Весь екран

Еліпс

Трикутник

  1.  Вийдіть з програми TURBO PASCAL, для чого виконайте команду File-Exit.
  2.  Оформіть звіт про лабораторну роботу, в якому запишіть: тема і мета роботи; тексти задач і програми, створені на лабораторній роботі.


Теоретичні відомості до лабораторної роботи № 6.

Модулі.

Процедури і функції для графічних побудов.

Розглянемо процедури модуля Graph, призначені для графічних побудов:

initgraph (driver, mode <шлях до драйвера>) - задає графічний режим. Шлях до файла-драйвера вказують (в апострофах), якщо його немає в каталозі, з якого запускається середовище програмування;

detectgraph (<драйвер> <режим>) - повертає значення характеристик дисплея;

setcolor (<колір>) - задає колір майбутнього зображення;

setbkcolor (<колір>) - задає колір фону;

putpixel (х, у <колір>) - висвічує точку (х, у) заданим кольором;

line (xl, yl, х2, у2) - малює лінію між двома заданими точками;

lineto (х, у) - малює лінію від поточної точки до точки (х, у);

linerel (dx, dy) - малює лінію від поточної точки із заданими приростами;

rectangle (xl, yl, x2, y2) - малює прямокутник із заданими координатами діагонально протилежних вершин (лівої верхньої і правої нижньої);

setviewport (xl, yl, x2, y2, true) - задає координати нового графічного вікна. Логічна постійна true задає режим відсікання зображення, яке виходить за рамки вікна;

bar (xl, yl, х2, у2) - малює зафарбований прямокутник;

bar3d (xl, yl, х2, у2 <об’ємна глибина>, true) - малює паралелепіпед;

circle (х, у, R) - малює коло радіусу R з центром в точці

arc (x, у <початковий кут> <кінцевий кут> <радіус>) - малює дугу;

pieslicc (х, у <початковий кут> <кінцевий кут> <радіус>) — малює зафарбований сектор;

ellipse (х, у <початковий кут> <кінцевий кут>  <горизонт. радіус> <вертик. радіус>) - малює еліпс або дугу еліпса;

setfillstyle (<заповнення> <колір>) - задає спосіб заповнення замкнутої області залежно від значення параметра заповнення: 0 - заповнення кольором фону, 1 — суцільне заповнення, 2 — заповнення товстими горизонтальними лініями, 3 - заповнення похилими лініями ..., 10 –заповнення точками, 11 — щільне заповнення точками;

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

closegraph - закриває графічний режим;

outtext (<текст>) - виводить заданий текст з поточної позиції;

outtextxy (х, у <текст>) - виводить текст в заданому місці;

settextstyle (<шрифт> <напрямок> <розмір>) - задає вид символів, напрям виводу: 0 - горизонтально, 1 - вертикально, і розміри символів: 1, 2, 3.

Розглянемо деякі функції модуля Graph:

graphresult - повертає код помилки, якщо неможливо задати графічний режим, і 0 - у разі завдання;

getmaxx - повертає значення розміру екрану уздовж горизонталі;

getmaxy - повертає значення розміру екрану уздовж вертикалі;

getcolor - повертає значення поточного кольору;

getcolor(x.y) - повертає значення кольору точки (х, у);

getx, gety - повертають координати поточного пікселя.

Анімація.

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

  1.  Намалювати об'єкт в потрібній точці.
    1.  Зробити паузу.
      1.  Видалити об'єкт, зафарбувавши його кольором фону (можна використовувати очищення екрану в графічному режимі ClearDevice).
        1.  Змінити координати об'єкту. Повернутися до пункту 1.


Виведення тексту

Виведення тексту в графічному режимі виконується тільки засобами модуля graph. Зверніть увагу — процедури модулів system і crt для виводу на екран не працюють коректно в графічному режимі, хоча і не видають ніяких помилок при виконанні. Це пояснюється різними принципами формування зображення в текстовому і графічному режимах. Не використовуйте в графічному режимі процедури write, writeln, clrscr, gotoxy і ін.

Процедури для виводу тексту приведені в таблиці.

Таблиця: вивід тексту.

Процедура

Призначення

OutText(Text)

Виводить на екран рядок Text, починаючи з покажчика. Поточний покажчик переміщається в кінець рядка.

OutTextXY(X,  У,  Text)

Виводить на екран рядок Text, починаючи з точки (X, У). Положення поточного покажчика не змінюється.

SetTextStyle(Font,   Direction, CharSize)

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

SetTextJustify(Horiz,   Vert)

Способи вирівнювання тексту відносно заданої точки (X, У) для процедури OutTextXY.

TextWidth(Stroka)

Функція повертає ширину рядка тексту на екрані в пікселях, використовуючи встановлений шрифт.

TextHeight(Stroka)

Аналогічна функція, але повертає висоту рядка тексту.

При виводі тексту необхідно пам'ятати, що всі шрифти, окрім DefauitFont (з номером 0), зберігаються в окремих файлах з розширенням chr. Стандартні варіанти цих файлів не містять російських букв, проте в даний час розповсюджуються перероблені файли з шрифтами, підтримуючі російський алфавіт. Більш того, є можливість створення своїх власних файлів з шрифтами, які реєструються в програмі за допомогою функції installUserFont, як параметр, який передається імені файлу з новим шрифтом (без розширення chr).

Таблиця: стандартні шрифти.

Позначення шрифту

Значення (номер)

Файл

DefaultFont

0

Ні

TriplexFont

1

Tripp.chr

SmallFont

2

Litt.chr

SansSerifFont

3

Sans.chr

GothicFont

4

Goth.chr

Для того, щоб вивести в графічному режимі змінні числового типу, можна скористатися стандартною процедурою str, яка дозволить перетворити числове значення в рядок тексту, а потім вивести отриманий рядок за допомогою процедур OutText або OutTextXY.

Приклад виводу тексту.

uses graph;

var gd,gm:integer;

begin

gd:=detect;

initgraph(gd, gm, ' ');

settextstyle(DefaultFont,HorizDir,3);

settextjustify(CenterText,CenterText);

setcolor(red);

outtextxy(320,240,' Текст в центрі екрану'); end.


Поняття модуля

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

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

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

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

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

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

  •  заголовок;
  •  інтерфейсна частина;
  •  виконуюча частина;
  •  ініціююча частина.

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

Unit  <ім’я>;   { заголовок модуля }

{$R+} {  можливо,   глобальні директиви компілятора}

interface      { початок інтерфейсної частини }

uses {  список модулів  }

label { оголошення загальнодоступних міток }

const { оголошення загальнодоступних констант  }

type { оголошення загальнодоступних типів  } {

var {оголошення загальнодоступних змінних )

procedure {  заголовки загальнодоступних процедур  }

function ...     { заголовки загальнодоступних функцій  }

implementation { початок виконуючої частини }

uses { що використовуються при реалізації модуля  }

label { оголошення прихованих глобальних міток }

const { оголошення прихованих глобальних констант }

type { оголошення прихованих глобальних типів  }

var { оголошення прихованих глобальних змінних }

procedure { заголовки і тіла загальнодоступних і прихованих процедур  }

function {  заголовки і тіла загальнодоступних і прихованих функцій  }

begin { початок ініціюючої частини }

.....       {  тут можуть розташовуватися будь-які оператори }

end. {  кінець   модуля  }

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

Слід знати:

  •   ім'я модуля служить для його зв'язку з іншими модулями і основною програмою, тому заголовок модуля опускати не можна (на відміну від заголовка програми);
  •   ім'я модуля повинне співпадати з ім'ям того файлу, в який поміщається початковий текст модуля. Якщо, наприклад, маємо заголовок unit triangle, то початковий текст відповідного модуля повинен розміщуватися у файлі Triangle.pas, що дуже важливо;
  •   в інтерфейсній частині приводяться тільки загальнодоступні оголошення, тобто доступні для використання в будь-якій програмі або модулі, до яких буде підключений даний модуль. Порядок появи різних оголошень і їх кількість може бути довільним;
  •  виконуюча частина містить повні описи підпрограм, оголошених в інтерфейсній частині. В ній можуть розташовуватися також допоміжні типи, константи, змінні, процедури і функції, можливо і мітки, якщо вони використовуються в ініціюючій частині;
  •   всі допоміжні програмні елементи, оголошені у виконуючій частині, називаються прихованими, оскільки вони доступні для використання тільки в даному модулі і невидимі для програми, що використовує модуль;
  •   ініціююча частина завершує модуль. Вона може бути відсутньою разом з її словом begin, що починає, або бути порожньою — тоді за begin відразу слідує ознака кінця модуля end. (з крапкою);
  •   в ініціюючій частині можуть розміщуватися виконуючі оператори, що містять деякий фрагмент програми. Ці оператори виконуються ще до початку виконання основної програми і звичайно використовуються для підготовки її роботи. Наприклад, в них можуть задаватися початкові значення змінних, відкриватися потрібні файли і т.п.

Компіляція модулів

В середовищі Turbo Pascal є засоби, за допомогою яких способом компіляції модулів і полегшують розробку крупних програмних проектів. Результатом компіляції модуля є файл з тим же самим ім'ям і розширенням tpu (Turbo Pascal Unit), який можна зберегти на диску так само, як і ехе-файл.

Меню Compile, що управляє процесом компіляції, містить наступні опції:

Compile (клавіші <Alt>+<F9>);

Make (клавіша <F9>); ...

Build;

Destination (Memory, Disk);

Primary file

Перші три опції — це режими компіляції. При компіляції модуля або основної програми в режимі Compile всі згадувані в ньому модулі повинні заздалегідь відкомпілюватися. Якщо який-небудь файл tpu не знайдений, то система шукає подібний файл з розширенням .pas, тобто файл з початковим текстом модуля, і при виявленні компілює його.

В режимі Make система стежить за можливими змінами початкового тексту модуля. Якщо в текст модуля були внесені які-небудь зміни, то система наново його компілює і тільки тоді приступає до компіляції основної програми. Крім того, якщо були внесені зміни в інтерфейсну частину модуля, то будуть перекомпільовані і всі інші модулі, що звертаються до нього.

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

Опція Destination потрібна для завдання можливості збереження файлів .tpu (а також і ехе) на диску. Для цієї мети потрібно встановити опцію Destination в значення Disk (за умовчанням її значення Memory). В середовищі Borland Pascal файли ехе і tpu автоматично зберігаються на диску, там немає цієї опції в меню Compile.

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

Якщо модуль повністю відладжений і протестований, то можна поширювати його у вигляді tpu-файлу, приклавши до нього заголовок і інтерфейсну частину початкового тексту модуля як інструкції по використанню з докладними коментарями. Проте початковий код обов'язково повинен зберігатися в надійному місці, оскільки з tpu-файлу його відновити неможливо. З початкового коду отримати tpu-файл можна в лічені секунди: компілятор Turbo Pascal — один з найшвидших.

Стандартні модулі

Короткий опис модулів

В Turbo Pascal є набір стандартних модулів, їх склад міняється в (різних версіях, тому розглянемо основні: system, crt, graph, dos, printer. Модуль graph виділений в окремий tpu-файл, а інші входять до складу бібліотечного файлу Turbo.tpl (tpl - Turbo Pascal Library, бібліотека Turbo Pascal).

Зверніть увагу — лише один модуль system зважаючи на виняткову важливість підключається до будь-якої програми автоматично, всі інші необхідно підключати, указуючи їх за словом uses.

Модуль system. Представляє основну бібліотеку стандартних підпрограм Turbo Pascal, без якої не може бути виконана жодна програма. В звичайних умовах роботи можна навіть не підозрювати про існування цього модуля, проте у разі відсутності або пошкодження файлу Turbo.tpl при запуску будь-якої програми тут же з'являється повідомлення File not found (SYSTEM.TPU) — це компонувальник не може знайти файл модуля system, щоб сформувати код, який можна здійснити.

В модуль system входять всі основні стандартні процедури і функції (процедури вводу-виводу, робота з рядками, математичні операції і функції і т. п.). Оскільки цей модуль підключається автоматично, то процедури і функції, що входять в нього, вважаються вбудованими в Turbo Pascal.

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

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

Модуль dos. В модуль входять процедури і функції, які організовують доступ до всіх засобів дискової операційної системи MS-DOS. Більшість з них правильно працює і під управлінням різних версій Windows.

Модуль printer. Надає простий спосіб для виводу інформації на друкуючий пристрій.

ГРАФІКА

Графічний режим. Графічний екран дисплея складається з крапок, які можна засвічувати певним кольором або гасити, внаслідок чого на екрані створюється деяке зображення. Крапки називають пікселями. Кількість крапок на екрані може бути різною. Це залежить від якості монітора. Розглянемо екран, який має 640 крапок в горизонтальному (х) напрямі і 480 - у вертикальному (у). Початок відліку крапок знаходиться в лівому верхньому кутку екрану. Кожна крапка характеризується двома координатами (х, у). Приклади розміщення деяких крапок на екрані показані на малюнку 3.

Для побудови зображень спочатку потрібно задати графічний режим. Це робиться так: 

<разділи описів і оголошень конкретної програми>;

{Змінні для визначення характеристик дисплея}

var driver, mode : integer;

begin

driver := detect;  {detect - стандартна постійна}

{завдання графічного режиму}

 initgraph (driver, mode ");

if graphresult <> 0 then

begin

writeln('Графічний режим задати не вдалось');

halt

end;

<текст конкретної програми з графічними командами>

end.

Кольори.

Кольори задають числами або англійськими назвами:

black=0                          - чорний;

blue=l                            - синій;

green=2                          - зелений;

суап=3                           - блакитний;

red=4                             - червоний;

magenta=5                     - фіолетовий;

brown=6                         - коричневий;

lightgray=7                    - світло-сірий;

darkgray=8                     - темно-сірий;

lightblue=9                     - яскраво-синій;

lightgreen=10                 - яскраво-зелений

lightcyan=11                   - яскраво-блакитний;

lightred=12                    - яскраво-червоний;

lightmagenta=13             - яскраво-фіолетовий;

yellow=14                       - жовтий;

white=15                        -білий.


Лабораторна робота №7.

Тема: Записи. Команда приєднання (WITH).

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

ХІД РОБОТИ

  1.  Запустіть програму TURBO PASCAL.
  2.  Складіть програму, яка організовує введення даних про студентів: ім'я, прізвище, по батькові, дата народження, група і записує їх в масив записів, а потім виводить меню: відомості про студентів по номеру запису і по номеру групи. Розіберіть принцип роботи програми. Виконайте програму.

program pr10_1;  {вводить 10 студентів із 3 групп}

uses crt;

type student = record    {опис типу запису}

       fam: string[20];

       name: string[10];

       otch: string[20];

       grup:string[10];

       birthday: record

           year: 1975..1989;

           month: 1..12;

           day: 1..31;

                 end;

               end;

const kol=10;

var texnikum:array[1..kol] of student;

   n:byte;     c: string[10];

procedure input_data;

{процедура вводу даних – яка використовує складені імена}

begin

    writeln('введите данные студента #', n,': ');

    write('фамилия  '); readln(texnikum[n].fam);

    write('имя      ');     readln(texnikum[n].name);

    write('отчество ');readln(texnikum[n].otch);

    write('группа   ');   readln(texnikum[n].grup);

    write('год рождения ');   readln(texnikum[n].birthday.year);

    write('месяц        ');   readln(texnikum[n].birthday.month);

    write('день         ');   readln(texnikum[n].birthday.day);

    writeln;

end;

 procedure write_data;

{процедура виведення даних -використовуємо оператор with}

begin

    with  texnikum[n] do begin

              writeln('Фамилия студента ',fam);

              writeln('Имя              ',name);

              writeln('Отчество         ',otch);

              writeln('Группа           ',grup);

              with  birthday do begin

                   writeln('Год рождения : ',year);

                   writeln('месяц        : ',month);

                   writeln('день         : ',day);

                                 end;

                           end;

end;

{основна програма}

var ckey: char;

begin

   clrscr;

   for n:=1 to kol do input_data; writeln;

   {Створення меню}

repeat

   clrscr;

writeln('1. Виведення даних про студента за номером');

   writeln('2. Виведення даних за назвою групи ');

   writeln('3. Вихід з програми');

   ckey:=ReadKey;

   case ckey of

      '1':  begin

      write('введіть номер студента-->'); readln(n);

           write_data;

           end;

       '2':  begin

           write('введіть групу    -->'); readln(c);

           for n:=1 to kol do

             if texnikum[n].grup=c then  write_data;

           end;

        '3':  exit;

   end;

 writeln('введіть яку-небудь клавишу');   readkey;

until ckey=char(27);  {27-код клавіші ESC}

end.

  1.  
    Залежно від варіанту вказаного викладачем створіть програму:

Задача

  1.  

Організуйте запис, що містить відомості про книгу. Виконайте сортування назв книг за абеткою.

  1.  

Організуйте масив записів, що містить інформацію про висоту гірських вершин, вказавши її в метрах. Знайдіть найвищу вершину.

  1.  

Опишіть запис і помістіть в неї наступні анкетні дані: прізвище, ім'я, по батькові учня, місце навчання (школа, клас), оцінки по трьох предметах. Необхідно передбачити обчислення середнього бала учня.

  1.  

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

  1.  

Приклад сюжету: Створіть і виведіть на екран масив записів про автомобіль (назва моделі, рік випуску, ціна, колір), а також знайдіть в масиві і виведіть на екран назви моделей червоного кольору, які випускалися в 1999 році.

  1.  

В записі повинні міститися наступні дані про студентів групи: прізвище, ім'я, по батькові, рік народження, адреса, номер школи, бали по спецпредметах. Визначіть, по яких предметах в групі найнижча успішність і виведіть їх на екран. Критерій оцінки – середній бал не вище 3,5.

  1.  

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

  1.  

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

  1.  

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

  1.  

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

  1.  

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

  1.  

В записі повинні міститися наступні дані про автомобілі: марка, країна-виробник, рік випуску, кілометраж, колір, об'єм двигуна, витрата палива, вартість, наявність аварій у автомобіля. Складіть статистику автомобілів, що побували в аварії, по марці автомобілів.

  1.  

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

  1.  

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

  1.  Вийдіть з програми TURBO PASCAL, для чого виконайте команду File-Exit.
  2.  Оформіть звіт про лабораторну роботу, в якому запишіть: тема і мета роботи; тексти задач і програми, створені на лабораторній роботі.

Теоретичні відомості до лабораторної роботи № 7.

Поняття запису

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

Структура оголошення типу запису така:

<Ім’я типу> = RECORD <список полів> END

Тут <ім’я типу> — правильний ідентифікатор;

RECORD, END — зарезервовані слова (запис, кінець);

< список полів > — список полів; є послідовністю розділів запису, між якими ставиться крапка з комою.

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

Приклад 1.

Type BirthDay = record 

 day,month : byte;

 year : word

end;

var

 a,b : Birthday;

В даному прикладі тип BIRTHDAY (день народження) є запис з полями DAY, MONTH і YEAR (день, місяць, і рік); змінні А і В записи типу BIRTHDAY.

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

а := b;

До кожного з компонентів запису можна отримати доступ, якщо використовувати складове ім'я, тобто вказати ім'я змінної, потім крапку та ім'я поля:

a.day := 27;

b.year := 1939;

Приклад 2.

type

BirthDay = record

 day,month: byte;

 year : word

 end;

begin

if BirthDay.year = 1939 then …

end.

Щоб спростити доступ до полів запису, використовується оператор приєднання WITH:

WITH <змінна > DO <оператор>

Тут WITH, DO — ключові слова (з, робити);

<змінна > — ім'я змінної типу запис, за яким можливо, слідує список вкладених полів;

<оператор> — будь-який оператор TURBO PASCAL.

Приклад 3.

with c.bd do month:=9;

це відповідно

with с do with bd do month : = 9;

або

with c,bd do month := 9;

або

c.bd.month= 9;

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

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

Приклад 4.

Type

 Point = record x,y: Real;

 Vector = Array [0..1) of Point end;

Const Origin : Point = (X: 0.0; Y: 0.0);

 Line : Vector = ((X: -1.9; Y: 1.7), (X: 2.0; Y: 1.7));

или

Type 

 Month = (Jan,Feb,Mar,Apr,May,Jun,Jly,Aug,Sep,Oct,Nov,Dec);

 Date == record D: 1..31; M: Month; Y: 1917..2017 end;

Const BirthDate: Date = (D: 26; M: Jun; Y: 1985);


Приклад 5.

Багаж пасажира характеризується кількістю речей і загальною вагою речей. Є інформація про багаж декількох пасажирів - відповідні пари чисел. Підрахувати загальну кількість речей і з'ясувати, чи є пасажир, у якого багаж складається з однієї речі вагою не менше 30кг.

Const z:String[3]=' не' ;

 total:Byte=0;

Турe In£o = record

 q: Byte;

 w: Real;

 end;

Var luggage: Info;

 i,n : Byte;

BEGIN

 Write ('Введіть число пасажирів ');

 ReadLn(n);

 WriteLn('Введіть пари чисел (кількість і вага) ');

 for i:=1 to n do

   begin

   ReadLn(luggage.q, luggage.w) ;

   Inc(total,luggage.q);

   if (luggage. q=1) and (luggage.w>=30) then z:= ' ';

   end;

 WriteLn('Сумарна кількість речей: ', total);

 WriteLn(Шуканий пасажир', z,' знайшовся;

 ReadLn;

END.

Визначимо тип Info - запис з двома полями. Імена полів q (кількість речей одного пасажира) і w (загальна вага речей одного пасажира); типи полів Byte і Real. Luggage - ідентифікатор змінної введеного типу. Введемо дані з клавіатури і, використовуючи складові імена полів запису luggage.q і luggage.w, знайдемо величини.

Оператор with

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

With ЗміннаТипуЗапис Do Оператор; {звичайно складовий оператор}

Візьмемо наступний опис:

    type

      TDate = record

           Day   : Integer:

           Month : Integer;

           Year  : Integer:

      end;

    var OrderDate: TDate;

З урахуванням даного опису наведемо приклад оператора with:

    with OrderDate do

      if Month = 12 then

      begin

        Month := 1;

        Year := Year + 1

      end else

        Month := Month + 1;

Це еквівалентно наступному:

    if OrderDate.Month = 12 then

    begin

      OrderDate.Month := 1;

      OrderDate.Year := TDate.Year + 1

    end

    else

      Date.month := TDate.Month + 1;

В операторі with спочатку проводиться перевірка кожного посилання на змінну, а саме: чи можна її інтерпретувати, як поле запису. Якщо це так, то вона завжди інтерпретується саме таким чином, навіть якщо є доступ до змінної з тим же ім'ям.

Допустимий опис наступних змінних:

   type

     TPoint = record

               x,y: Integer;

             end;

     var

       x: Point;

       у: Integer;

В цьому випадку і до x, і до у можна звертатися, як до змінної або як до поля запису. В операторі:

   with x do

   begin

     x := 10;

     у := 25;

   end;

x між ключовими словами with і відноситься до змінної типу покажчик, а в складовому операторі x і у посилаються на x.x і y.y.

Оператор:

    with V1,V2...Vn do s;

еквівалентний операторам:

    with V1 do

      with V2 do

       ...

         with Vn do

          S;

В обох випадках, якщо Vn є полем і v1, і v2, то вона інтерпретується як v2.Vn, а не як v1.Vn.

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


Лабораторна робота №8.

Тема: Робота з текстовими файлами. Використання типізованих файлів.

Мета роботи: навчитись працювати з текстовими і типізованими файлами, створювати файл записів.

ХІД РОБОТИ

  1.  Запустіть програму TURBO PASCAL.
  2.  Напишіть програму пошуку в текстовому файлі заданих символів.
    1.   Створіть текстовий файл з ім'ям Lab12_1.txt в каталозі D:\KMxxxx\ за допомогою програми, записаної на лекції. Текст повинен містити 20 рядків, які мають слова, що повторюються.
    2.  Створіть програму пошуку слів, що повторюються, у файлі.

const sum: word=0;  {лічильник: скільки разів знайшли}

var f1,f2: text;

str,search: string[80];

begin

write('Введіть рядок пошуку: '); readln (search);

{ зв'язуємо fl і f2 з іменами файлів }

assign(f1, 'Lab12_1.txt');   assign(f2,'analys.txt');

{ відкриваємо f1 і створюємо f2 }

reset(f1);  rewrite(f2);

writeln('Протокол пошуку:');

writeln(f2,'Протокол пошуку:');

while not eof(f1) do {доки не закінчиться файл fl, виконуємо цикл }

   begin

readln(f1,str);     { вводимо рядок str з файлу fl }

if роs(search,str)>0 then 

begin                      { шукаємо search в str }

inc(sum);

writeln('Знайдено (раз):',sum);

writeln(str); {виведення на екран} 

writeln(f2,str);  { виведення у файл } 

 end;

end;

close(f1);   close(f2); { закриваємо файли }

end.

  1.  Використовуючи початкові текстові файли, виконайте дії, вказані в завданні

Задача

  1.  

Проаналізувавши вхідний текстовий файл, створіть аналогічний йому файл, виключивши з нього всі символи цифр.

  1.  

Поміняйте вміст рядків вхідного текстового файлу справа-наліво.

  1.  

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

  1.  

Маючи 2 різні текстові файли, створіть третій, вмістом якого будуть рядки вхідних текстових файлів, що чергуються.

  1.  

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

  1.  

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

  1.  

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

  1.  

Маючи початковий текстовий файл, створіть два аналогічні файли, і винесіть всі голосні букви в перший файл (довжина рядка 60), приголосні букви – в другий файл (довжина рядка 50).

  1.  

В початковому текстовому файлі замініть всі символи відповідними ASCII-кодами.

  1.  

У вхідному текстовому файлі позбудьтеся всіх розділових знаків.

  1.  Складіть програму, яка формує файл із записів, структура яких описана в лабораторній роботі 7, пункт 2. Розіберіть принцип роботи програми. Виконайте програму.

program lr12_2;

uses crt;

type   student =  record    {опис типу запису}

       fam: string[20];

       name: string[10];

       otch: string[20];

       grup:string[20];

       birthday:   record

           year: 1975..1989;

           month: 1..12;

           day: 1..31;

                     end;

                 end;

   f_student=file student;

var f1: f_student;

   f2: text;

   texnikum: student;

   n:byte;

   grup1: string[20];

   fam1:string[20];

{процедура введення даних - використовуємо складові імена}

procedure input_data;

var otv:string[3];

begin

repeat

    write('прізвище  ');       readln(texnikum.fam);

    write('імя      ');       readln(texnikum.name);

    write('побатькові ');       readln(texnikum.otch);

    write('група   ');       readln(texnikum.grup);

    write('рік народження ');   readln(texnikum.birthday.year);

    write('місяць        ');   readln(texnikum.birthday.month);

    write('день         ');   readln(texnikum.birthday.day);

    write(f1,texnikum);

 write('вводити ще дані про студента ТАК або HІ?->');

    readln (otv);

until otv = 'nі';

end;

{процедура виводу даних -використовуємо оператор with}

procedure write_data;

begin

    with  texnikum do begin

              writeln('Прізвище студента ',fam);        

  writeln(' Імя              ',name);

              writeln('Побатькові         ',otch);   

  writeln('Група           ',grup);

              with  birthday do begin

                   writeln('Рік народження : ',year);

                   writeln('місяць        : ',month);

                   writeln('день         : ',day);

                                 end;        

end;

end;

{пошук в базі даних по прізвищу, по групі}

procedure find(strl:string;kluch:char);

begin

 reset(f1);

 while not eof(f1) do begin

        read(f1,texnikum);

 with texnikum do begin

 case kluch

     '1': if fam = strl then write_data;

     '2': if grup = strl then 

begin write_data;

writeln(f2,fam:20,name:10,otch:20,grup:20,birthday.year,' ',birthday.month,' ',birthday.day)

                               end;

 end;

                   end;

                            end;

    close(f1);      close(f2);

end;

{основна програма}

var ckey: char;

begin

assign(f1,'c:\tp7\texnik.dat'); 

assign(f2, 'c:\tp7\ t_grup.txt');

rewrite(f1);  input_data;  close(f1);     writeln;

repeat    {Створення меню}

   clrscr;

writeln('1.Виведення даних про студента по прізвищу');

   writeln('2. Виведення даних за назвою групи ');

   writeln('3. Вихід з програми);

   ckey:=ReadKey;

case ckey

      '1':  begin

           write('введіть прізвище студента -->'); readln(fam1);

           find(fam1,'1');

            end;

       '2':  begin

           write('введіть групу        -->'); readln(grup1);

           rewrite(f2);

           find(grup1,'2');

           end;

        '3':  exit;

   end;

 writeln('Натисніть будь-яку клавішу');   readkey;

until ckey=char(27);  {27-код клавіші ESC}

close(f2);

end.

  1.  Складіть програму формування файлів із записів згідно свого варіанту з лабораторної роботи №7.
  2.  Оформіть звіт про лабораторну роботу, в якому запишіть: тема і мета роботи; тексти задач і програми, створені на лабораторній роботі.


Теоретичні відомості до лабораторної роботи № 8.

Файли і робота з ними.

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

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

  var tStory: Text;

  Опис типізованих файлів має вигляд:

  var fComp: File T;

де T - тип компоненти файлу. Приклади опису файлової змінної, що типізується:

  type M= array[1..500] Longint;

  

  var f1: File Real;

      f2: File Integer;

      fLi: File M;

Файли, що не типізуються, описуються за допомогою службового слова File:

  var f: File;

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

TURBO PASCAL вводить ряд процедур і функцій, що застосовуються для будь-яких типів файлів: Assign, Reset, Rewrite, Close, Rename, Erase, Eof, IOResult.

Процедура Assign( var f; FileName: String ) зв'язує логічний файл f з фізичним файлом, повне ім'я якого задано в рядку FileName.

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

Процедура Rewrite( var f ) відкриває логічний файл f для подальшого запису даних (відкриває вихідний файл). Після успішного виконання цієї процедури файл готовий до запису в нього першого  елемента.

Процедура Close( var f ) закриває відкритий до цього логічний файл. Виклик процедури Close необхідний при завершенні роботи з файлом. Якщо із якоїсь причини процедура Close не буде виконана, файл все-ж буде створений на зовнішньому пристрої, але вміст останнього буфера в нього не буде перенесений. Для вхідних файлів використання оператора закриття файлу необов'язково.

Логічна функція EOF( var f ): Boolean повертає значення TRUE, коли при зчитуванні досягнутий кінець файлу. Це означає, що вже прочитаний останній елемент у файлі або файл після відкриття виявився порожній.

Процедура Rename( var f; NewName: String ) дозволяє перейменувати фізичний файл на диску, пов'язаний з логічним файлом f. Перейменування можливо після закриття файлу.

Процедура Erase( var f ) знищує фізичний файл на диску, який був пов'язаний з файловою змінною f. Файл до моменту виклику процедури Erase повинен бути закритий.

Функція IOResult: Integer повертає ціле число, відповідне коду останньої помилки введення - виведення. При нормальному завершенні операції функція поверне значення 0. Значення функції IOResult необхідно привласнювати якій - небудь змінній, оскільки при кожному виклику функція обнуляє своє значення. Функція IOResult працює тільки при вимкненому режимі перевірок помилок введення - виведення або з ключем компіляції {$I-}.

Текстові файли

Особливе місце в мові ПАСКАЛЬ займають текстові файли, компоненти, яких мають символьний тип. Для опису текстових файлів в мові визначений стандартний тип Тext: послідовність символів. Рядки мають змінну довжину, кожний рядок завершується знаком кінця рядка.

З ознакою кінця рядка пов'язана функція EOLn(var T:Text):Boolean

де Т - ім'я  текстового файлу. Ця функція приймає значення TRUE, якщо досягнутий кінець рядка, і значення FALSE, якщо кінець рядка не досягнутий.

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

ReadLn(T) - пропускає рядок до початку наступної;

WriteLn(T) - завершує  рядок файлу, в який проводиться запис, знаком кінця рядка і переходить до початку наступної.

Для роботи з текстовими файлами введена розширена форма операторів введення і виведення. Оператор

   Read(T,X1,X2...XK)

еквівалентний групі операторів

   begin

     Read(T,X1);

     Read(T,X2);

     ...........

     Read(T,XK)

   end;

Тут Т - текстовий файл, а змінні Х1, Х2...ХК можуть бути або змінними цілого, дійсного або символьного типу, або рядком. При читанні значень змінних з файлу вони перетворяться з текстового представлення в машинне.

Оператор

   Write(T,X1,X2...XK)

еквівалентний групі операторів

   begin

     Write(T,X1);

     Write(T,X2);

     ...........

     Write(T,XK)

   end;

Тут Т - також текстовий файл, але змінні Х1,Х2...ХК можуть бути цілого, дійсного, символьного, логічного типу або рядком. При записі значень змінних у файл вони перетворяться з внутрішнього представлення в текстовий.

До текстових файлів відносяться стандартні файли INPUT, OUTPUT.

Розглянуті раніше оператори введення - виведення є окремим випадком операторів обміну з текстовими файлами, коли використовуються стандартні файли введення – виведення INPUT, OUTPUT.

Робота з цими файлами має особливості:

- імена цих файлів в списках введення - виведення не вказуються;

- змінні процедур  Reset,  Rewrite і Close до стандартних файлів введення - виведення заборонено;

- для роботи з файлами INPUT, OUTPUT введений різновид функції EOLn без параметрів.

TURBO PASCAL вводить додаткові процедури і функції, що застосовуються тільки до текстових файлів, це SetTextBuf, Append, Flush, SeekEOLn, SeekEOF.

Процедура SetTextBuf( var f: Text; var Buf; BufSize: Word ) служить для збільшення або зменшення буфера введення - виведення текстового файлу f. Значення розміру буфера для текстових файлів за умовчанням дорівнює 128 байтам. Збільшення розміру буфера скорочує кількість звернень до диска. Рекомендується змінювати розмір буфера до відкриття файлу. Буфер файлу почнеться з першого байта змінної Buf. Розмір буфера задається в необов'язковому параметрі BufSize, а якщо цей параметр відсутній, розмір буфера визначається завдовжки змінній Buf.

Процедура Append( var f:  Text ) служить для спеціального відкриття вихідних файлів. Вона застосовується до вже існуючих фізичних файлів і відкриває їх для дозапису в кінець файлу.

Процедура Flush(  var  f: Text ) застосовується до відкритих вихідних файлів. Вона примусово записує дані з буфера у файл незалежно від ступеня його заповнення.

Функція SeekEOLn( var f: Text ): Boolean повертає значення True, якщо до кінця рядка залишилися тільки пропуски.

Функція SeekEOF( var f:  Text ): Boolean повертає значення True, якщо до кінця файлу залишилися рядки, заповнені пропусками.


DELPHI 7.

Лабораторна робота № 1.

Тема: Створення форми «Анкета студента».

Об'єкти: форма, текстове поле, зображення, кнопка. Програмування кнопок.

Мета роботи. Створити форму «Анкета студента» з даними про себе і двома фотографіями (портретної і художньої), які перекривають одна одну і повинні з'являтися в результаті натиснення на кнопки. Ознайомитися з такими об'єктами: форма (Form), текстове поле (Label), малюнок (Image), кнопка (Button) і їх основними властивостями: підпис (Caption), колір (Color), шрифт (Font), видимість (Visible), ширина (Width), висота (Height) і іншими.

ХІД РОБОТИ.

  1.  Завантажте систему візуального програмування Delphi. Для запуску системи візуального програмування Delphi клацніть на піктограмі Delphi або за допомогою головного меню виберіть Пуск Програми Borland Delphi 7 Delphi 7. В результаті на екрані відкриються 5 вікон:
  •   головне вікно Delphi 7 - Projectl, де знаходяться панель інструментів, палітра компонентів і головне меню. 
  •  вікно інспектора об'єктів Object Inspector із значеннями властивостей активного об'єкту
  •  вікно форми (Forml), в якому будуть приведені результати роботи майбутньої програми
  •  вікно дерева об'єктів (Object Tree View)
  •  вікно провідника коду Code Explorer спільно з вікном редактора коду (Unitl.pas).
  1.  Збережіть створюваний проект в своїй папці.
  •  Для цього виконайте команду головного меню File Save All (Зберегти Все) або натисніть на кнопку Save All на панелі інструментів.
  •  У вікні Save Unit as за допомогою списку  виберіть свою папку, створіть в ній папку Anketa і відкрийте її, задайте назву для файлу тексту програми UAnketa, заздалегідь видаливши запропоноване комп'ютером назву Unitl.pasкнопка Зберегти.
  •   В наступному вікні «Save Projectl As» введіть назву файлу проекту PAnketa, видаливши запропоноване комп'ютером назву Projectl.dpr  зберегти. Зверніть увагу: файли проекту і тексту програми повинні мати різні назви.
  1.  Візуально ознайомтеся з властивостями форми Left, Top, Width і Height.
  •  Для чого клацніть правою клавішею миші у вікні Object Inspector, вкладка Properties (властивості), виберіть команду Arrange (упорядкувати)  Category(по категоріях).
  •   Виберіть категорію Layout, розкрийте її. Перемістіть форму Forml за допомогою миші. Зверніть увагу, що зміна розташування форми веде до зміни її - властивостей Left і Тор - координат лівого верхнього кута форми у вікні Object Inspector. Поміняйте розміри форми. Переконайтеся, що тепер міняються властивості Width (ширина) і Height (висота) форми у вікні інспектора об'єктів. Згорніть категорію властивостей Layout, клацнувши по кнопці мінус.
  1.  Змініть колір фону форми.
  •  Для цього у вікні властивостей форми Object Inspector, виберіть категорію Visual в рядку Color виберіть значення кольору фону одним з двох способів: викличте вікно вибору кольору подвійним клацанням миші по поточному значенню властивості Color. Виберіть один з базових кольорів (Basic colors) або встановіть свій (Define Custom Colors) колір. Підтвердіть вибір кольору (Ok)
  •  за допомогою списку  потренуйтеся з різними значеннями властивості Color. Задайте початкове значення кольору- clBtnFace.
  •  Зауваження. У вікні Object Inspector відображається список властивостей лише активного на даний момент об'єкту.
  1.  Вставте у форму текстове поле (об'єкт типу Label) з текстом «Анкета студента».
  •  Двічі клацніть мишею по піктограмі Label на закладці Standard палітри компонентів головного вікна Delphi.
  •  Розташуйте вставлений об'єкт, наприклад, так, як показано на мал., перетягуючи його мишею. Якщо об'єкт Label1 не виділений, активізуйте його і у вікні Object Inspector, виберіть категорію властивостей Localizable, змініть значення властивості Caption (заголовок) з Label1 на текст «Анкета студента» (без лапок).
  •  Змініть значення властивості Font (шрифт) цього текстового поля на такі: Times New Roman; напівжирний, розмір 20, виберіть колір шрифту
  •  Аналогічно вставте у форму ще 5 текстових полів, де вкажіть свої біографічні дані і розташуйте їх як показано на малюнку:
  •  Label 2 – прізвище, ім'я, група студента
  •  Label 3 –Коледж
  •  Label 4 – КрНУ
  •  Label 5 – дата народження
  •  Label 6 – адреса.

  1.  Вставте у форму об'єкт типу Image (картинка).
  •  Для цього перейдіть на вкладку Additional (додаткові) палітри компонентів
  •  клацніть один раз лівою клавішею миші на піктограмі Image (і, наприклад, в нижньому правому кутку форми обведіть контур для майбутнього зображення (фотографії). Якщо потрібно, змініть розмір форми або вставленого об'єкту і добийтеся найкращого розташування на ній створених раніше об'єктів. Міняти розміри об'єкту можна методом їх «розтягання» за маркери (чорні габаритні квадратики). Запам'ятайте назву, яку середовище присвоїть цьому об'єкту. За умовчанням цей об'єкт матиме стандартну назву Image 1
  1.  Вставте свою портретну фотографію за допомогою категорії властивостей Localizable і властивості Picture (ілюстрація) об'єкту Image1
  •  Для цього виберіть об'єкт Imagel і активізуйте категорію властивостей Localizable і властивість Picture  у вікні Object Inspector. Клацнувши на кнопці розкриття списку, викличте діалогове вікно вибору малюнка Picture Editor.
  •  Клацніть на кнопці Load (завантажити) і у вікні Load picture вкажіть шлях до файлу з фотографією (якщо такого Файлу немає, скористайтеся будь-якою картинкою)
  •  Виберіть файл Відкрити. Підтвердіть свій вибір у вікні Picture Editor натисненням на кнопку Ok.
  •   Задайте в категорії Miscellaneour значення властивості Center – и властивості Stretch для об'єкту Imagel - True.
  1.   Накладіть свою художню фотографію на портретну, вставивши у форму ще один об'єкт типу Image.
  •  Хай цей об'єкт має назву Image2
  •  Зауваження. При накладенні об'єктів може виникнути необхідність міняти порядок їх відображення. Для цього використовують команди контекстного меню
    Control:Send To Back (переслати назад) або Bring To Front (перенести вперед).
  1.  Вставте у форму кнопки для почергового відображення накладених одна на одну фотографій - два об'єкти типу Button з назвами Button1 і Button2.
  •  Піктограма об'єкту типу Button (кнопка) знаходиться на вкладці Standard палітри компонентів головного вікна Delphi.
  •  Поміняйте підписи на кнопках (змініть значення властивості Caption категорії Localizable) на «Портретна фотографія» і «Художня фотографія» відповідно. Виберіть найкращий, на ваш розсуд, кирилічний шрифт для підписів
  •  Якщо Ви застосували картинки із стандартної бібліотеки Delphi, задайте підписи для кнопок на свій розсуд.
  1.  Запрограмуйте кнопку «Портретна фотографія» так, щоб після її натиснення у формі з'являлася портретна фотографія
  •  Для програмування кнопки Buttonl необхідно двічі клацнути на ній лівою клавішею миші. В результаті активізується вікно тексту програми із заготівкою процедури ButtonlClick, яка оброблятиме подію клацання на кнопці Buttonl
  •  В заготівку необхідно вставити текст програми реакції на цю подію. Процедура матиме такий вигляд:

procedure TForml.ButtonlClick(Sender: TObject);

begin

{Портретна фотографія стає видимою}

Image I. Visible: =True;

{Художня фотографія стає невидимою}

Image2.Visible:=False;

end;

end;

  •  За допомогою даної процедури властивість видимості для об'єкту Image1 включаємо, а цю ж властивість для об'єкту Image2 вимикаємо.
  •  Для кнопки «Художня фотографія» дії будуть протилежні.  Зверніть увагу на використовування складових імен типу Image1.Visible, в яких назва об'єкту від його властивості відокремлюється крапкою. Такі складові імена дають доступ до значення конкретної властивості деякого об'єкту.
  1.  Запрограмуйте кнопку «Художня фотографія» відповідно її призначенню
  •  Текст процедури для цієї кнопки матиме вигляд:

procedure TForml .Button2Click(Sender: TObject);

begin

{Портретна фотографія стає невидимою}

Image1.Visible:=False;

{Художня фотографія стає видимою}

Image2. Visible: =True;

end;

end;

  •  Щоб створити таку процедуру швидко, можна скопіювати дві команди присвоєння з попередньої процедури в нову і поміняти вирази справа.
  1.  Запустіть програму і переконайтеся, що кнопки виконують свої функції. Виконайте команду меню Run  Run
  2.   Закрийте вікно програми «Анкета студента».
  3.  Запрограмуйте, щоб у формі обидві фотографії не було видно
  •  Для чого у вікні Object Tree View зробіть подвійне клацання миші на ім'я Form1 і в заготівку необхідно вставити відповідний текст програми реакції на цю подію.
  1.  Запустіть на виконання програму.
  2.  Збережіть створену програму в своїй папці.
  •  Виберіть елемент головного меню File Save All (Зберегти Все) або натискуйте кнопку Save All на панелі інструментів.
  1.  Створіть ехе-файл проекту.
  •  Виконайте команду головного меню Project  Build All (Сконструювати Все).
  1.  Закрийте Delphi, виконайте створену програму і перевірте її роботу.
  •  Запустіть ехе-файл з ім'ям проекту зі своєї папки.
  1.  Продемонструйте створену форму викладачу.
  2.  Виконайте додаткові завдання .

п/п

Задача

  1.  

Вставте у форму третю фотографію (вашого будинку або машини) і ще одну кнопку з відповідним підписом.

  1.  

Поміняйте підписи на кнопках на такі: «Змінити фотографію» і «Забрати фотографію», перепрограмувавши кнопки. Виконайте програму і переконайтеся в правильності її роботи. Підказка. В тексті процедур, що описують роботу кнопок, можна скористатися командами типу: if Image 1. Visible = True then ...

{Якщо видимість = True або рівносильною командою}

if Image 1. Visible then         [Тут умова істинна }

{якщо  видимість включена}

  1.  

Поміняйте сценарій роботи програми для задачі 1,2 на наступний: відразу після запуску програми фотографій на формі невидно, є дві   кнопки «Портретна фотографія» і «Заховати фотографію».    Доступною є перша кнопка; після клацання на кнопці «Портретна фотографія», з'являється портретне фото, текст на першій кнопці -зміниться на «Художня фотографія», кнопка «Заховати фотографію» стане доступною; після клацання на кнопці «Художня фотографія», фотографія у формі повинна помінятися на художню, а підпис на цій кнопці — на «Третя фотографія»; після клацання на кнопці «Третя фотографія» фотографія у формі повинна помінятися на третю, а підпис на кнопці—  «Портретна фотографія»; після клацання на кнопці «Заховати фотографію», фотографія повинна зникнути, а ця кнопка стати недоступною.

Підказка. В тексті процедур, що описують роботу кнопок, можна скористатися командами, які міняють їх властивості: Сaption (підпис), Visible (видимість), Enabled (доступність).

  1.  

Див. умову задачі 3. Запрограмуйте кнопку «Сховати фотографію» так, щоб клацнувши на ній, вона ставала не тільки недоступною, але і невидимою

  1.  

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

  1.  

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

  1.  Оформити звіт про лабораторну роботу, в якому записати: тему і мету роботи; послідовність виконання проекта, створеного на лабораторній роботі.


DELPHI 7.0

Лабораторна робота  № 2.

Тема: Задача «Обмін валюти».

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

Мета роботи. Створити форму «Обмін валюти» для моделювання відповідних операцій обмінного пункту. Застосувати поля редагування (Edit) і перемикачі (RadioButton, радіокнопка), а також кнопки для виконання обчислень і виходу з програми.

ХІД РОБОТИ.

  1.  Завантажте систему візуального програмування Delphi.
  2.  Відмовтеся від можливості змінювати  озміри вікна програми:
  •  вкажіть значення  властивості форми Border Style - bsDialog;
  •  виконайте програму (Run) і переконайтеся, що не можна змінити розмір форми. Зверніть увагу на відсутність кнопок для мінімізації і максимізації вікна, а також системного меню;
  •  Завершіть роботу програми.
  1.  Вставте у форму два об'єкти типу RadioButton (перемикач).
    Для цього клацніть на піктограмі
    об'єкту типу RadioButton (перемикач), яка знаходиться на закладці Standard палітри компонентів головного вікна Delphi. Після цього клацніть в точці вставки на формі. Повторіть ці дії, щоб вставити другу радіокнопку.
  2.  Задайте початкове значення другого перемикача як активне.
    Для цього клацніть на правому перемикачі і задайте значення його властивості
    Checked (контроль вибору) - True.
  3.  Вставте у форму два поля редагування — об'єкти Edit1 і Edit2.
    Для цього клацніть на піктограмі
    об'єкту типу Edit (редагування), яка знаходиться на закладці Standard палітри компонентів, а потім клацніть в потрібному місці на формі. Вставте другий об'єкт. Запустіть програму і потренуйтеся зі вставленими об'єктами: клацніть в полі редагування, введіть деяке число, видаліть його. Закрийте вікно програми.
  4.  Розмістіть на формі два текстові поля - об'єкти Label1 і LabeI2.
  5.  Вставте у форму два поля редагування об'єкти Edit3 і Edit4.
  6.  Вставте дві кнопки - об'єкти типу Button.
  7.  Вставте у форму ще два текстові поля — об'єкти Label3 і Label4.

 

  1.  Збережіть створений проект в своїй папці.
  •  Для цього виконаєте команду головного меню File Save All (Зберегти Все) або натисніть на кнопку Save All на панелі інструментів.
  •  У вікні Save Unit as за допомогою списку  виберіть свою папку, створіть в ній папку Valyuta і відкрийте її, задайте назву для файлу тексту програми UValyuta, заздалегідь видаливши запропоноване комп'ютером назву Unitl  кнопка Зберегти

.

  •   В наступному вікні «Save Projectl As» введіть назву файлу проекту PValyuta, видаливши запропоноване комп'ютером назву Projectl  зберегти. Зверніть увагу: файли проекту і тексту програми повинні мати різні назви.
  1.  Поміняйте назву форми з Form1 на Обмін валюти.
  2.  Змініть підписи Caption на об'єктах типу RadiоButton на Купівля, Продаж, Label1 на USD, Label2 на Гривні, Label4 на Курси валют.
  3.  Задайте однакові розміри для всіх текстових полів, полів редагування і кнопок і вирівняйте їх на формі. Для чого виділіть 5 об'єктів в лівому стовпці і в окні Object Inspeсtor задайте їх загальні для цих об'єктів значення в пікселях властивостей Width, Height, Left. Можете змінити стиль, колір або розмір шрифту одночасно для всіх виділених об'єктів. Аналогічно працюйте з правим стовпцем. Вирівняйте поля в горизонтальному напрямі. Для цього змінюйте властивість Top (відступ від верхньої межі вікна). Збережіть роботу Save All.
  4.  Задайте значення курсів купівлі-продажу валюти, а також скільки валюти контора купує або продає.
  •  Для цього задайте значення властивості Text об'єкту Editl, наприклад, 7.25. Повторіть це для об'єкту Edit2 (значення 7.45) і Edit3 (20).
  1.  Очистіть поле редагування Edil4.
    Для цього видалите значення властивості Text об'єкту Edit4. He плутайте значення властивостей Name і Text цих об'єктів.
  2.  Заблокуйте можливість введення даних для поля  Edit4, оскільки в це поле виводитиметься результат.
    Для цього задайте значення властивості Enabled (доступність) -False. Змінювати значення певної властивості можна, двічі клацнувши на ньому лівою клавішею миші.
  3.  Збережіть роботу (Save All). 
  4.  Виконайте програму і переконайтеся, що не можна ввести або редагувати дані в полі Edit4.
  5.  Запрограмуйте радіокнопки так, щоб напрям стрілки мінявся і вказував на вигляд операції: купівля або продаж. Зробіть активним поле Edit3.
  •  Клацніть двічі на правому перемикачі RadioButton2 (Продаж). Отримайте заготівку процедури RadioButton2Click.
  •   В тілі цієї процедури опишіть дії, які повинні бути виконані в результаті клацання на правому перемикачі RadioButton2:

procedure TForml.RadioButton2Click(Sender: Tobject);

begin

{Міняємо напрям стрілки}

Label3.Caption := '=>';

Edit3.SetFocus   {Активізуємо поле Edit3}

end;

  •  Аналогічно запрограмуйте подію Click для перемикача RadioButtonl. Врахуйте, що стрілка повинна показувати на ліве поле ('<=').
  •  Фрагмент програмного коду створеної процедури запишіть в звіт.
  1.  Запустіть  програму і переконайтеся, що перемикачі виконують що наказали їм функції.
  2.  Запрограмуйте кнопку «Вихід».

Скористайтеся процедурою закриття вікна програми Close:

procedure TForml.Button2Click(Sender: TObject);

begin

Close (Закриваємо вікно програми]

end;

  1.   Запрограмуйте кнопку «Обчислити».
  •  Данні в полі редагування - це значення властивості Text типа string. Для перетворення цього даного в числовий дійсний тип (real) скористайтеся процедурою Val, а навпаки - процедурою Str. Опишіть відповідні основні (kurs, suma) і додаткові (cod, ed) змінні в розділі var.

procedure Tforml.ButtonlClick(Sender: TObject);

var       kursl, kurs2, summa : real;

cod : integer; ed : string[9];

begin

{Набуваємо значення курсу покупки}

Val (Editl.Text, kursl, cod);

{Набуваємо значення курсу продажу}

Val (Edit2.Text, kurs2, cod);

{Набуваємо числове значення суми в USD}

Val (Edit3.Text, summa, cod);

if RadioButton2. Checked = True then 

summa:= summa * kurs2

else

summa := summa * kursl;

Str(summa:9:2, ed);

Edit4.Text := ed;

{Отримане число суми в гривнах перетворюємо в текстовий формат і результат присвоюємо властивості Text поля виведення у Edit4}

end

  1.  Збережіть роботу (Save All).
  2.  Виконайте програму і потренуйтеся з різними грошовими сумами і операціями купівлі - продажі. Закрийте вікно програми «Обмін валюти».

Для переривання роботи програми у разі неправильного введення вхідних даних виконаєте пункт головного меню Run  Program Reset.

  1.  Змініть розміри і кольори символів (зокрема об'єктів Label3 і Edit3), розташування об'єктів, фон форми (властивість Color) так, щоб форма виглядала якнайкраще.
  2.  Забезпечте появу підказки «Введіть суму в доларах» після переміщення покажчика миші до поля Edit3.
  •  Виберіть об'єкт Edit3 і встановіть значення True для властивості ShowHint, а в полі значення властивості Hint введіть текст підказки.
  1.   Збережіть роботу, запустіть програму і переконайтеся, що підказка з'являється.
  2.  Поміняйте вид стрілки з => на , а <= на .
  •  Для цього виберіть об'єкт Label3 і в полі значення властивості Caption введіть російську букву р, після чого, активізувавши властивість Font, виберіть назву шрифту Wingdings. Двічі клацніть на правому перемикачі і в його процедурі введіть російську букву р замість =>. В процедурі для лівого перемикача символи <= замініть буквою п. Збережіть роботу, запустіть програму і переконайтеся, що стрілка змінила свій вигляд.
  1.  Створіть ехе-файл вашої програми.

Виконайте пункт головного меню Project  Build All.

  1.  Закрийте середовище Delphi, запустіть створену програму і виконайте обчислення для різних вхідних даних.
  •  Запустіть ехе-файл з ім'ям проекту з своєї папки.
  1.  Продемонструйте створену форму викладачу. Закінчіть роботу.
  2.  Зауваження. Зверніть увагу на використовування коми або крапки у вхідних даних. В числах, які указують курси валют, суму гривнею або доларом, для десяткової крапки використовуйте символ, передбачений операційною системою вашого комп'ютера (див. Start (Пуск)  Settings (Настройка  Control Panel (Панель управління)  Regional Settings (Мова і стандарти)  закладка Number (Числа), рядок Decimal symbol (Роздільник цілої і дробової частин числа)).
  3.  Виконайте додаткові завдання .

п/п

Задача

  1.  

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

Підказка, Для об'єктів Edit3, Edit4 в процедурі обробки події натиснення на кнопку очищення використовуйте команду присвоєння їх властивостям Text порожнього рядка (")

  1.  

Забезпечте появу підказки «Введіть курс купівлі» і «Введіть курс продажу» після переміщення покажчика миші до полів Editl і Edit2 відповідно

  1.  

В процедурі для кнопки «Обчислити» передбачите 1% збору до пенсійного фонду від операції продажу

  1.  

Модифікуйте програму, ввівши додаткову можливість: після клацання мишею на стрілці змінюється тип операції (купівля, продаж). Запишіть в звіт фрагмент програмного коду, що реалізовує цю можливість. Виконайте програму

Підказка. Для цього двічі клацніть на текстовому полі стрілки. Відкриється вікно програмного коду із заготівкою процедури Label3Click (опис дій у разі клацання на об'єкті Label3). В тілі цієї процедури можна скористатися командами вигляду:

if RadioButtonl.Checked=True then begin

{Міняємо напрям стрілки на => для Label3.Caption}

{Встановлюємо перемикач в праве положення, змінюючи значення властивостей Checked об'єктів RadioButtonl і RadioButton2}

end

else

begin

{Встановлюємо напрям стрілки <=}

{Встановлюємо перемикач в ліве положення, міняючи значення властивостей Checked об'єктів RadioButtonl і RadioButton2}

end;

  1.  

В створену для задачі 4. форму вставте об'єкт групу перемикачів (RadioGroup) для вибору типу милі з двох можливих значень: морської або звичайної (1 морська миля = 1,852 кілометрів).

Підказка. Щоб ввести підписи до перемикачів використовуйте властивість Items групи перемикачів RadioGroup, а для контролю вибору певного перемикача скористайтеся властивістю ItemIndex (дорівнює -1, якщо жоден не вибраний, 0 - якщо вибраний перший перемикач групи, 1 - якщо другий і т.д.)

  1.  Оформити звіт про лабораторну роботу, в якому записати: тему і мету роботи; послідовність виконання проекта, створеного на лабораторній роботі.

Теоретичні відомості до лабораторної роботи.

Об'єкт поле редагування Edit використовують для введення рядка символів з клавіатури. У разі потреби для перетворення отриманого рядка (властивість Text) в число і навпаки застосовують стандартні функції мови  Pascal Val і Str, або функції середовища Delphi StrToFloat і FloatToStr. Окрім вже відомих вам властивостей, поля редагування Edit володіють такими:

Властивість

Опис властивості

Приклади значень

CharCase

Вид символів, які вводитимуть в полі редагування

ecNormal (звичайна), ecUpperCase (прописні букви), ecLowerCase (рядкові букви)

Ctl3D

Об'ємне зображення об'єкту

True, False

Pass-wordChar

Символ для введення пароля

#0 (звичайне відображення тексту) *(текст відображатиметься зірочками), 0 (текст відображатиметься нулями)

Readonly

Можливість міняти текст (доступність поля)

True (текст не можна міняти), False (текст можна міняти)

Hint

Текст підказки, який з'являється при наведенні покажчика миші

 «Введіть суму» (довільний рядок символів)

ShowHint

Показувати/Не показувати підказку

True, False

Text

Текст в полі редагування

«0,0001» (довільний рядок символів)

Об'єкт перемикач (RadioButton) використовують для вибору деякої дії серед декількох альтернатив. Розглянемо такі властивості перемикачів:

Властивість

Опис властивості

Приклади значень

Checked

Стан перемикача

True (вибраний), False (не вибраний)

TabOrder

Порядок вибору об'єкту клавішею Tab

0 (перший), 4 (п'ятий)

TabStop

Доступ до даного об'єкту табулятором

True (доступний), False (не доступний)


DELPHI 7.0

Лабораторна робота  № 3.

Тема: Задача «Табулювання функції».

Мета роботи: Створити форму для вирішення задачі табулювання функції. Створити головне меню (об'єкт типу MainMenu), що містить команди: вийти з програми, табулювати функцію, очистити поля виведення результатів, а також контекстне меню (PopupMenu) з командою для очищення поля виведення. Результати табулювання вивести в багаторядкове поле редагування (об'єкт типу Memo). Передбачити можливість виведення результатів на екран, у файл, в масив. Напрям виведення задати за допомогою трьох прапорців (об'єктів типу CheckBox), розташованих на панелі групи об'єктів (типу GroupBox).

ХІД РОБОТИ.

  1.  Завантажте систему візуального програмування Delphi.
  2.  Поміняйте заголовок (Caption) форми з «Form1» на «Табулювання функції» (без лапок) і збільште розміри форми у вертикальному напрямі
  3.  Змініть піктограму в лівому верхньому кутку форми, вказавши конкретний файл з малюнком піктограми в полі значення властивості Icon (піктограма) форми. Клацніть в рядку Icon на , а потім на кнопці Load вікна Picture Editor, щоб одержати вікно Load picture. Відкрийте папку С: \Program Files \Common Files \Borland Shared \Images\ Icon виберіть графічний файл з будь-якою піктограмою Open Ok.
  4.  Збережіть виконану на даний момент форму в своїй папці.
  •  Для цього виконайте команду головного меню File  Save All (Зберегти Все) або натисніть на кнопку Save All на панелі інструментів.
  •  У вікні Save Unit as за допомогою списку  виберіть свою папку, створіть в ній папку TABLF і відкрийте її, задайте назву для файлу тексту програми UTablF, заздалегідь видаливши запропоновану комп'ютером назву Unitl кнопка Сохранить.
  •   У наступному вікні «Save Project1 As» введіть назву файлу проекту PTablF, видаливши запропоновану комп'ютером назву Project1 сохранить. Зверніть увагу: файли проекту і тексту програми повинні мати різні назви.
  1.  Розташуйте у формі поля редагування Edit1, Edit2, Edit3 і відповідні їм текстові поля «Ліва межа», «Права межа», «Крок», а також текстове поле для завдання виду даної функції у = sin(x)+1.

Зауваження. Щоб швидко вставити у форму декілька однотипних об'єктів, клацніть на піктограмі цього об'єкту, утримуючи натиснутою клавішу Shift, а потім - на формі необхідну кількість разів. Якщо випадково вставите зайвий об'єкт, то видалити його можна за допомогою клавіші Delete. Для відмови від режиму вставки клацніть на зображенні стрілки на палітрі компонентів. Розмір, стиль і колір шрифту виберіть на свій розсуд так, щоб форма виглядала якнайкраще.

  1.  Вирівняйте вставлені поля редагування до лівого краю першого об'єкту і відцентруйте текстове поле з вказівкою функції, скориставшись вікном вирівнювання Alignment. Виділіть групу полів редагування разом з підписами до них і виконайте команди Edit (редагувати)  Align (вирівняти)  Horisontal - Left sides (горизонтально - ліві межі) VerticalSpace equally (вертикально — рівномірно)  Ok. Виділіть текстове поле з виразом для функції і виконайте команди Edit  Align  Horisontal  Center in Window (горизонтально — до центру вікна)  Ok. Збережіть виконану на даний момент форму в своїй папці ( Save All).
  2.  Вставте у форму панель групи об'єктів (об'єкт типу GroupBox).

Компоненту GroupBox   знаходиться на закладці Standard. Поміняйте значення властивості Caption (підпис) цього об'єкту на слово «Виведення» (без лапок). Розмір, стиль і колір шрифту виберіть на свій розсуд. Збільште панель групи.

  1.  Вставте на панель три прапорці (об'єкти типу CheckBox).

Для цього використовуйте компоненту CheckBox  закладки Standard палітри компонентів Delphi. Вирівняйте прапорці, виділивши їх завчасно. Поміняйте значення властивості Caption (підпис) цих об'єктів: На екрані, У файл, В масив. Стиль і колір шрифтів виберіть на свій розсуд.

  1.  Встановіть прапорці «На екран» і «В масив» в режим «включений».

Для цього виділіть ці об'єкти і змініть значення їх властивостей Checked (контроль вибору) на True.

  1.  Вставте у форму багаторядкове поле редагування (об'єкт типу Memo).

Компонента Memo знаходиться на закладці Standard. Збільште розміри поля. Значення властивості ScrollBars (наявність смуг прокрутки) цього об'єкту задайте як ssBoth (наявність двох смуг - вертикальною і горизонтальною). File Save All.

  1.  Задайте початкові значення для полів редагування лівої і правої меж аргументу функції і для кроку зміни аргументу.

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

  1.  Видаліть з багаторядкового поля редагування слово Memo1.

Для цього у вікні Object Inspector змініть значення властивості Lines (рядки) об'єкту Memol. Викличте вікно редагування цієї властивості (вікно String list editor - редактор багаторядкового поля), натиснувши на кнопку . Видаліть слово Memo1 і для завершення роботи з цим вікном клацніть на кнопці

  1.  Вставте у форму головне і контекстне меню (об'єкти типу MainMenu і PopupMenu).

Компоненти MainMenu і PopupMenu знаходяться на закладці Standard. Розташуйте їх піктограми в довільному місці форми (на етапі виконання програми вони будуть невидимими).

  1.  Введіть назви команд головного меню форми.

Виберіть об'єкт MainMenu1 і двічі клацніть на значенні його властивості Items. Інший спосіб - двічі клацніть на самому об'єкті. Введіть назви команд головного меню форми.

Закрийте вікно створення команд головного меню Form1. MainMenu1.

  1.  Введіть назви команд контекстного меню форми.

Для цього аналогічно як для головного меню поміняйте значення властивості Items об'єкту PopupMenu1 у вікні Form1.PopupMenu1. У вікні Object Ispector введіть значення властивості Caption - «Очистити поле виведення» (без лапок). Можете придумати і задати ще декілька команд. Закрийте вікно Form1.PopupMenu1. Збережіть форму (Save All).

  1.  Запрограмуйте команду «Очистити поле виведення» головного меню за допомогою методу Clear об'єкту Memo1.

Методи об'єкту - це набір процедур і функцій, які аналогічно властивостям застосовують до об'єкту. Як і у разі властивості, ім'я об'єкту від імені методу відділяється крапкою. Клацніть по команді меню «Очистити поле виведення». З'явиться заготівка процедури реакції на подію виклику цієї команди. У неї запишіть команду виклику методу Clear для очищення поля виведення об'єкту Memo1:

procedure TForm1.N3Click(Sender: Tobject);

{Тут N3 - ім'я команди «Очистити поле виведення», у Вас може бути інший номер, його не виправляйте}

begin

{ Викличемо метод об'єкту Memo1, що очищає багаторядкове поле редагування }

Memo1.Clear  

end; {Тепер клацніть на формі}

  1.  Запрограмуйте команду «Вихід» головного меню, скориставшись стандартною процедурою Close.

procedure TForm1.N6Click(Sender: Tobject); {Тут N6 - ім'я команди «Вихід»}

begin

Close { Закриваємо вікно програми}

end; {Тепер клацніть на формі}

Збережіть виконану на даний момент форму в своїй папці (FileSave All).

  1.  Запрограмуйте команду «Очистити поле виведення» контекстного меню.

Двічі клацніть на команді контекстного меню «Очистити Поле виведення» у вікні Form1.PopupMenu1 (виклик цього вікна див. в п. 14). Текст процедури очищення такий же, як і для команди головного меню: Memo1.Clear (див. п. 16).

  1.  «Пов'яжіть» контекстне меню PopupMenu1 з формою Form1.

Клацніть на формі і задайте властивість форми PopupMenu як PopupMenu1

  1.   Запустіть створену на цей момент програму і досліджуйте її роботу.

Потренуйтеся з багаторядковим полем редагування Memo1, вводячи і коректуючи в ньому деякий текст. Зверніть увагу на те, що в цьому вікні можна виконувати такі ж дії з текстом, як і в текстовому редакторові: виділяти фрагмент тексту, копіювати, переносити або видаляти цей фрагмент. Витріть текст за допомогою команди головного меню «Очистити поле виведення». Ще раз введіть текст і витріть його за допомогою контекстного меню (для виклику контекстного меню форми потрібно клацнути правою клавішею миші на вільному місці форми). Закінчіть роботу програми, клацнувши на кнопці «Вихід».

  1.  Запрограмуйте команду «Табулювати».

Властивість Lines об'єкту типу Memo комплексна, тобто воно також є об'єктом з своїми властивостями і методами. Результат роботи даної програми - це таблиця, яка складається з декількох рядків. Щоб додати в полі Memo1 новий рядок таблиці, треба поміняти значення комплексної властивості Lines (рядки) за допомогою його методу Add (додати) з одним аргументом - символьним рядком: Memo1.Lines.Add('рядок символів'). Клацніть на команді «Табулювати» з головного меню один раз. З'явиться заготівка до процедури, яку заповните так:

procedure TForm1.N2Click(Sender: TObject);

var  x,y,h,a,b: real; cod:integer; str1,str2:string;

begin

{B об'єкт Memo1 вставляємо рядок з підписами стовпців значень аргументу і функції}

Memo1. Lines. Add('     X             F(X)');

Val(Edit1.Text, а, cod);  { Набуваємо числового значення лівої межі}

Val(Edit2.Text, b, cod);  { Набуваємо числового значення правої межі}

Val(Edit3.Text, h, cod);  { Набуваємо числового значення кроку}

х:=а; {Табулюємо функцію}

while x<=b+h/2 do 

begin 

y:=sin(x)+1;

Str(x:8:2,str1);

Str(y:8:3,str2);

if CheckBox1.Checked then

Memo1. Lines.Add(str1+str2); { Вставляємо рядок в полі Memo1}

x:=x+h;

end

end;

  1.  Виконайте програму і потренуйтеся з різними значеннями лівої, правої межі і кроку аргументу. Закрийте вікно програми «Табулювання функції».
  2.  Збережіть створену програму в своїй папці.
  3.  Створіть ехе-файл програми.
  4.  Закрийте Delphi, запустіть створену програму і виконайте обчислення для різних вхідних даних.
  5.  Продемонструйте створену форму викладачеві.
  6.  
    Виконайте додаткові завдання .

№п/п

Завдання

  1.  

Додайте до контекстного меню команду «Вихід» і запрограмуйте її

  1.  

Створіть і запрограмуйте ще одне контекстне меню, що містить команди "Прибрати всі прапорці", "Включити всі прапорці", "Включити інверсивно". Таке меню повинне з'являтися після клацання правою клавішею миші в будь-якій точці панелі з прапорцями. Не забудьте "прив'язати" це меню (PopupMenu2) до панелі з прапорцями (див. пункт 19).

  1.  

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

Підказка. Виконайте такі дії: вставте у форму об'єкт типу CheckBox (прапорець), його властивості Caption привласніть значення «Похідна», виберіть для підпису шрифт  Кирилиця 12-го розміру, вирівняйте вставлений об'єкт. Поміняйте програмний код кнопки «Табулювати», використавши в тексті процедури Button1Click такі команди:

{Оголосіть змінні str1, str2, str3 як string на початку процедури}

if CheckBox. Checked then {якщо прапорець встановлений}

Memo1.Lines.Add('     X       F(X)       F (X)')

{ Рядок містить підписи для стовпців значень аргументу, функції і її похідної}

else

{ Інакше - якщо прапорець не встановлений}

{ Рядок містить лише підписи для стовпців значень аргументу і функції}

 Memo1.Lines.Add('     X        F(X) ')

{ А в циклі задаємо:}

y:=sin(x)+1;                {Обчислюємо значення функції}

y1:=cos(x);                {Обчислюємо значення похідної}

if CheckBox.Checked then              {Якщо прапорець встановлений}

begin

Str(x:8:2, str1); Str(y:8:2, str2); Str(y1:8:2, str3);

str3 := str1 + str2 + str3

end;

{Формуємо символьний рядок із значень аргументу, функції і її похідної, між якими вставляємо декілька пропусків}

else              {Якщо прапорець не встановлений}

begin

Str(x : 8 : 2, str 1 );       {Формуємо символьний рядок}

Str(y:8:2, str2);       {із значень аргументу і функції}

str3 :== str1 + str2

end;

Зауваження. Номери об'єктів у Вашій програмі можуть відрізнятися від приведених вище.

  1.  

Визначте кількість елементів масиву більших 0,5 і менших 1.

  1.  

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

Підказка. У тілі процедури Button1Click, що описує програмний код кнопки «Табулювати», скористайтеся такими командами:

(На початку процедури:}

max:=sin(a)+1;

{У циклі:}

if max<y then max:=y;

{Після циклу:}

Str(max:8:3, str1); Memo1.Lines.Add('max=' + str1);

  1.  

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

  1.  

З вкладки Samples додайте на форму компонент Graph (якщо ви не знайшли даний компонент то зверніться до викладача). Даний компонент створений для побудови графіків. Розмістіть його  в будь якому місці форми і розтягніть його на стільки, на скільки дозволяє вам розмір форми. Тепер потрібно додати графік. Для цього виділіть компонент, в вікні Object Inspector виберіть вкладку Prorerties і змініть деякі властивості компонента.

MinXValue=-20; мінімальне значення по осі Х

MaxXValue=20;  максимальне значення по осі Х

MinYValue=0;    мінімальне значення по осі У

MaxYValu:=3;    максимальне значення по осі У

Curves= натисніть один раз на кнопку «…» і в з’явившимуся  вікні створіть новий графік(натисніть один раз по кнопці з намальованою папкою).

Недалеко від графіка створіть кнопку і запрограмуйте її наступним чином:

procedure TForm1.sButton1Click(Sender: TObject);

var x:real;

begin

form1.GraphM1.Curves[0].ClearPoints; //Очищаємо попередній графік якщо він був

//числу Х даємо значення мінімального значення графіка по осі Х

x:=form1.GraphM1.MinXValue;

// Доки Х менше максимального значення  по осі Х виконуємо наступні дії

while x<form1.GraphM1.MaxXValue do

  begin

   //Додаємо до графіка нову точку

  form1.GraphM1.Curves[0].AddPoint(x,sin(x)+1);

  // Збільшуємо Х (0,1 це крок з яким змінюється Х);

  x:=x+0.1;

 end;

end;

  1.  

Сумістіть процеси табулювання функції і побудови графіка тобто в початок процедури  натиснення на кнопку «Табулювати»  треба додати наступні поля:

form1.graphm1.Curves[0].ClearPoints;\\ очищюємо графік

form1.graphm1.MinXValue:=strtofloat(form1.sedit1.Text);\\ мінімальне значення по осі ОХ

form1.graphm1.MaxXValue:=strtofloat(form1.sedit2.Text);\\ максимальне значення по осі ОХ

form1.graphm1.MinyValue:=-1;\\ мінімальне значення по осі ОУ

form1.graphm1.MaxyValue:=3;\\ максимальне значення по осі ОУ

А в циклі знаходження У (while x<=b do) у кінці додати наступні строки:
y:=sin(x)+1;

form1.GraphM1.Curves[0].AddPoint(x,y);

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

DELPHI 7.0

Лабораторна робота  № 4.

Тема: Задача «Біржа цінних паперів». 

Мета роботи. Створити бізнес-гру «Біржа цінних паперів», що моделює щорічне інвестування капіталу в акції трьох різних підприємств. На момент інвестування відомо, що на кінець року ринок може знаходитися в одному з трьох можливих з деякою вірогідністю станів, від чого будуть залежати прибутки або збитки інвестора. У таблиці 3x3 приведені значення прибутків або збитків на кожен вкладений долар для трьох можливих станів ринку і трьох підприємств (наприклад, Hundai, Philips, Bosh). Конкретний стан ринку вирішується вже після інвестиції. Потрібно, враховуючи всі три можливі  стани  ринку, інвестувати  капітал  у  всі три підприємства з метою здобуття максимального прибутку. Інвестиції треба робити впродовж декількох років. Якщо це робити вдало, можна чекати прибуток (збільшення капіталу), інакше - підприємство чекають збитки. Навчитися застосовувати таблицю текстових рядків StringGrid, а також кнопки типу BitBtn і SpeedButton для виконання обчислень або стандартних дій. Ознайомитися з поняттям події в Delphi.

ХІД РОБОТИ.

  1.  Завантажте систему візуального програмування Delphi.
  2.  Поміняйте заголовок (Caption) форми з «Form1» на «Біржа цінних паперів» і збільште розміри форми.
  3.  Відмовтесь від можливості міняти розміри вікна програми, вказавши значення bsDialog властивості BorderStyle форми.
  4.  Збережіть виконану на даний момент форму в своїй папці (FileSave All).
  •  Для цього виконайте команду головного меню File => Save All (Зберегти Все) або натисніть на кнопку Save All на панелі інструментів.
  •  У вікні Save Unit as за допомогою списку  виберіть свою папку, створіть в ній папку Birja і відкрийте її, задайте назву для файлу тексту програми UBirja, заздалегідь видаливши запропоновану комп'ютером назву Unitl => кнопка Зберегти.
  •   У наступному вікні «Save Project1 As» введіть назву файлу проекту PBirja, видаливши запропоновану комп'ютером назву Projectl => зберегти. Зверніть увагу: файли проекту і тексту програми повинні мати різні назви.
  1.  Розташуйте в нижній частині форми дві піктографічні кнопки типу SpeedButton і командної кнопки закінчення роботи програми BitBtn.

Для цього застосуєте компоненти SpeedButton  і BitBtn  із закладки Additional палітри компонентів. На кнопках SpeedButton можна розташувати піктограму із спеціального набору піктограм - графічних файлів формату bmр. Кнопки типу BitBtn володіють властивістю Kind (стандартна дія) з можливими значеннями bkClose (Закрити), bkCancel (Відмінити), bkYes (Так), bkNo (Немає), bkHelp (Допомога) і іншими. На них також можуть бути розташовані піктограми. Якщо задати стандартну дію, то дану кнопку програмувати не потрібно. Задайте наступні значення властивостей вставлених об'єктів.

Властивість

Значення

Name

SpeedButton1

SpeedButton2

BitBtn1

Caption

&Біржові результати

&Наступний рік

&Вихід

Glyph(Файл з піктограмою)

С:\Program Files\Common Files\Borland Shared\ Images\Buttons\check.bmp

С:\Program Files\ Common Files\ Borland Shared\ Images\Buttons\arrow3r.bmp

Kind

BkClose

Символ & у заголовку кнопки вказує на те, що цю кнопку можна нажимати також і за допомогою «гарячої» комбінації клавіш Alt + буква заголовка, перед якою стоїть цей символ.

  1.  Вставте у форму три таблиці текстових рядків StringGrid. 
Скористайтеся компонентой StringGrid на закладці Additional. Задайте наступні значення властивостей цих об'єктів.

Властивість

Значення

Name

StringGird1
StringGird2
StringGird3

ColCount (кількість стовпців)

4
1
4

FixedCols (кількість фіксованих стовпців)

1
0
1

RowCount (кількість рядків)

4
4
1

FixedRows (кількість фіксованих рядків)

1
1
0

OptionsgoEditing

(можливість редагувати)

False (відсутній)
True (є)

False (відсутній) 

  1.   Розмістіть на формі текстові поля так, як показано в пункті 5.

Задайте наступні значення властивостей цих об'єктів:

Для Label5, Label6, Label8:

Caption      : (видаліть зміст)

Visible       : True.

Для Label9, Label10, Label11:

Caption      : (декілька знаків «мінус»)

Visible       : False.

Для Label7:

Caption      : (видаліть зміст)

Visible       : False.

Для Label1

Caption      : Стартовий капітал на початок року складає – 1000 доларів

Для Label2

Caption      : Прогноз прибутків на кожен вкладений долар на кінець року

Для Label3

Caption      : На початок року Ваш капітал складає

Для Label4

Caption      : Прибуток (збиток) на кінець року складає

  1.  У вікні тексту програми перед розділом Implementation введіть опис констант і змінних програми:

const

N=5;

{ Масив прогнозу прибутку}

Р : array [O..N-1,1..3,1..3] of integer =
(((40, -40.30), (-20, 10, 10), (-10,40,-30)), {r=(0-l)}

((50-70,40), (-30, 70.-30), (-50,20, 30)), {r=(l-2)}

((30-70,70), (-30, 70-30), (20,10-50)), {r=(2-3)}

((-50,-30,70), (50-50, 70), (30,50-70)), {r=(3-4)}

((30-70,70), (-30, 70-30), ( 40, 0.-50))); {r=(4-5)}

{Масив вірогідності}

Prob : array [0..N-1,1..3] of integer= ((22,41,37),(27,34,39),(47,33,20),(10,53,37),(41,34,25));

var

Forml : TForml; { Цей запис вже є в заготівці модуля}

capital, year, profit, r : integer;

{Інвестовані суми}

money : array [0..2] of integer;

  1.  Запрограмуйте   кнопки   SpeedButtonl   і   SpeedButton2 таким чином:

procedure TForml.SpeedButton1Click(Sender: Tobject);

{Кнопка результатів року}

vаг first, second, variant, i, code : integer;

s : string;

begin

randomize;

{ Випадковий вибір можливого стану ринку}

variant := random(100);

{ Перший і другий роздільники відрізка вірогідності}

first := Prob[r, 1];

second := first + Prob[r, 2];

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

profit := 0;

for i := 0 to 2 do

val(StringGrid2.Cells[0,i + 1], money[i], code);

{ Отримуємо числові значення для інвестицій і заповнюємо ними масив money}

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

if variant < first then 

begin 

for i := 0 to 2 do

{ Підсумок по підприємствах}

profit := profit + money[i]* P[r, i+1, 1];

{ Підкреслення вибраного варіанту}

Label9.Visible := True;

{ Інформаційний рядок}

Label8.Caption := 'Зросло євро' end;

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

if (variant >= first) and (variant < second) then 

begin 

for i := 0 to 2 do

{Підсумок по підприємствах}

profit := profit + money[i]* P[r, i+1, 2];

{Підкреслення вибраного варіанту}

Label 10.Visible := True;

Label8.Caption := ' підвищилась ціна ' {Інформаційний рядок}

End;

if variant > second then 

begin 

for i := 0 to 2 do

profit := profit + money[i]* P[r, i+1, 3];

Label 11.Visible := True;

Label8.Caption := ' Підвищився долар '

End;

Str(profit, s);

Forml.Label7.Caption := s + ' доларів';

Label7.Visible := True;

Forml.SpeedButton2.Enabled := True;

Forml.SpeedButtonl.Enabled := False;

End;

procedure TForml.SpeedButton2Click(Sender: Tobject);        

{Кнопка переходу наступного року}

begin

year := year + 1;     {Наступний рік}

capital := capital + profit; {Оновлений капітал}

{ Прибуток до початку року рівний нулю}

profit := 0;

{ Викликаємо процедуру щорічного оновлення форми}

Refresh;

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

Label9.Visible := False;        

Label10.Visible := False;

Label11.Visible := False;

{ Гасимо інформацію про прибуток}

Label7.Visible := False;

end;

  1.  У вікні тексту програми після розділу Implementation введіть опис методу Refresh форми

procedure TForml.Refresh;

var i, j : integer;

s : string;

begin

Str(capital, s);

Forml.Label6.Caption := s + ' доларів ';

Str(year, s);

Forml.Label5.Caption := s + ' рік ';

Str(profit, s);

Forml.Label7.Caption := s + ' доларів ;

Forml.Label8.Caption := ' Введіть суму ' ;

Forml.SpeedButton2.Enabled := False;

Forml.SpeedButtonl.Enabled := False;

randomize;

r := random(N);

{Вибір інвестиційного клімату г}

for i:=l to 3 do

for j := 1 to 3 do

begin

Str(P[r, j, i], s);

Forml.StringGrid1.Cells[i, j] := s + '  центів ';

end;

for i := 1 to 3 do

begin

Str(Prob[r, i], s);

Forml.StringGrid3.Cells[i, 0] := s + ' %';

Forml.StringGrid2.Cells[0, i] := ";

end

end;

Рядок procedure Refresh;вставьте у будь-якому місці розділу

type TForml = class(TForm)... у вікні модуля.

  1.  Запрограмуйте процедуру створення форми FormCreate.

Для цього двічі клацніть на формі і одержану заготівку процедури FormCreate заповните таким чином:

procedure TForml.FormCreate(Sender: TObject);

begin

capital := 1000;

year := 2000;

profit := 0;

Refresh;

StringGrid1.Cells[l, 0] := ' Зросте євро ';

StringGrid1.Cells[2, 0] := ' Зросте ціна ';

StringGrid1.Cells[3, 0] := ' Зросте долар ';

StringGrid1.Cells[0, 1] := ' Hundai ';

StringGrid1.Cells[0, 2] := ' Philips';

StringGrid1.Cells[0, 3] := 'Bosh';

StringGrid2.Cells[0, 0] := ' інвестиції $';

StringGrid3.Cells[0, 0] := ' Вірогідність ';

end;

  1.  Збережіть виконану на даний момент роботу в своїй
    папці.
  2.  Запрограмуйте подію введення/редагування тексту в таблицю StringGrid2 так, щоб у момент введення грошових сум в першу і другу комірки в третій комірці відображався залишок капіталу (оскільки щороку інвестують весь наявний капітал).

Активізуйте об'єкт StringGrid2 і у вікні Object Inspector відкрийте закладку Events цього об'єкту. Тут слід вибрати подію, для якої ви хочете описати послідовність дій - реакцію на подію. Виберіть подію OnSetEditText і двічі клацніть в полі праворуч від неї. Відкриється вікно програми із заготівкою процедури StringGrid2SetEditText. Заповніть її таким чином:

procedure TForml .StringGrid2SetEditText(Sender:TObject; ACol, ARow: Longint; const Value: string);

var i, code : integer; s : string;

begin

{ Прочитуємо числа з першого і другого елементів таблиці, інвестицій}

for i := 0 to 1 do

val(StringGrid2.Cells[0, i + 1], money[i], code);

{ Обчислюємо залишок капіталу і інвестуємо його в третє підприємство]

money[2]:= capital - money[0] - money[1];

Str(money[2], s);

StringGrid2.Cells[0, 3] := s;

SpeedButton1.Enabled := True;

end;

Зауваження. Заготівки для подій-процедур кожного об'єкту можна викликати, двічі клацаючи по об'єкту на макеті форми, як це робилося для кнопок. Для більшості об'єктів це подія OnClick, у тому числі і для StringGrid. Тому ми були вимушені «вручну» вибрати потрібний для нашого випадку тип події — OnSetEditText.

  1.   Запустіть створену програму і досліджуйте її роботу.

Введіть грошові суми інвестицій в комірки  для першого і другого підприємств і спостерігайте за зміною третьої суми. Переконайтеся в її правильності. Клацніть на кнопці «Біржові результати», прогляньте результати фінансового року, клацніть на кнопці «Наступний рік». Зіграйте в цю гру кілька разів і закінчіть роботу програми, клацнувши на кнопці «Вихід».

  1.  Створіть ехе-файл програми.
  2.  Закрийте Delphi, запустіть створену програму зіграйте і спробуйте досягти добрих результатів.
  3.  Продемонструйте створену форму викладачеві.
  4.  
    Виконайте додаткові завдання .

п/п

Завдання

  1.  

Інформаційний напис «Прибуток (збиток) на кінець року складає» поміняйте на «Прибуток на кінець року складає» або «Збиток на кінець року складає» залежно від того зріс або зменшився капітал гравця в кінці року в порівнянні з стартовим.

  1.  

Забезпечте виведення грошової суми прибутку зеленим кольором, а збитку - червоним.

  1.  

Не дайте можливості гравцеві ввести негативні грошові суми в таблицю інвестицій.

  1.  

Обчисліть і виведіть у формі всі грошові суми з точністю до цента.

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

DELPHI 7.0

Лабораторна робота  № 5.

Тема: Задача «Телефонний довідник».

Мета роботи. Створити програму для роботи з базою даних телефонним довідником, сформованим у вигляді файлу записів. У кожному записі визначені поля: прізвище і ім'я (рядки завдовжки по 20 символів кожна), адреса і номер телефону (рядки завдовжки 100 і 15 символів відповідно). Необхідно реалізувати наступні операції: створення і видалення запису, збереження і причитування файлу записів з диска, редагування, пошук і сортування даних в алфавітному порядку, проглядання записів і навігацію по базі. Ознайомитися з новими об'єктами: багатосторінковим блокнотом (PageControl), сторінкою блокнота (TabSheet), комбінованим списком (ComboBox), діалоговим вікном (AboutBox), стандартними діалогами відкриття і збереження файлів (OpenDialog і SaveDialog)

ХІД РОБОТИ.

  1.  Завантажте систему візуального програмування Delphi.
  2.  Відкрийте нову форму з багатосторінковим блокнотом.

Виконайте File NewOtherЗакладка Forms Tabbed Pages Ok.

  1.  Виділіть і видаліть клавішею Delete панель (Panel) з кнопками Ok, Cancel і Help в нижній частині відкритої форми.
  2.  Поміняйте заголовок форми з «Tabbed Notebook Dialog» на «Телефонний довідник» і поміняйте стиль межі вікна (BorderStyle) на bsSizeable (здатний міняти розмір).

Для цього спочатку у вікні Object TreeView виберіть об'єкт PagesDIg (вікно форми з багатосторінковим блокнотом). Тільки тепер можна поміняти його заголовок і стиль.

  1.  Виділіть (клацнувши усередині сторінки мишею) і видаліть (Delete) третю сторінку блокнота TabSheet3.

Будьте уважні і не видалите весь багатосторінковий блокнот - об'єкт PageControl1. У разі потреби Ви можете відмовитися від неправильної дії командою Edit Undelete. Додати нову сторінку в блокнот можна командою New Page контекстного меню об'єкту PageControl (блокнот) або TabSheet (сторінка блокнота).

  1.  Замініть заголовки (властивість Caption) першої і другої сторінок блокнота (об'єктів TabSheetl і TabSheet2) на «Список всіх записів» і «Редагування і пошук записів» відповідно.
  2.  Заповніть обидві сторінки форми візуальними об'єктами так, як це показано на малюнку.

Задайте такі значення властивостей об'єкту StringGrid1:

Властивість

Значення

ColCount

4

FixedCols

0

RowCount

100

FixedRows

1

Options goEditing

True

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

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

Для створення об'єкту Комбінований Список скористайтеся кнопкою  (ComboBox) на закладці Standard палітри компонентів. Кнопки «Попередній» - «Наступний» називаються Button1Button4 відповідно. Очистите поля властивості Text об'єктів Edit1 - Edit5 і ComboBox1. Встановіть властивість Style об'єкту ComboBox1 в csDropDownList (випадний список).

  1.   Збережіть виконану на даний момент форму в своїй папці (FileSave All).
  •  Для цього виконаєте команду головного меню File => Save All (Зберегти Все) або натисніть на кнопку Save All на панелі інструментів.
  •  У вікні Save Unit as за допомогою списку  виберіть свою папку, створіть в ній папку Tel_Spr і відкрийте її, задайте назву для файлу тексту програми UTelSpr, заздалегідь видаливши запропоновану комп'ютером назву Unitl => кнопка Зберегти.
  •   У наступному вікні «Save Projectl As» введіть назву файлу проекту PTelSpr, видаливши запропоновану комп'ютером назву Projectl => зберегти. Зверніть увагу: файли проекту і тексту програми повинні мати різні назви.
  1.  

Додайте на форму команди головного меню і введіть назви його
команд, як показано на малюнку.

Для того, щоб провести розподільну смугу, між командами меню «Записати у файл» і «Вихід» створіть додатковий пункт із заголовком «____________» .

Зауваження. Підменю «А->Я» і «Я->А» команди «Упорядкувати за абеткою» створюють за допомогою комбінації клавіш Сtrl+<стрілка вправо> або використовують контекстне меню Create Submenu цієї команди. Видалення непотрібної команди виконують клавішею Delete.

  1.  Створіть вікно форми «Про програму».

Додайте до проекту нове вікно форми типу About box (File NewOtherЗакладка Forms About box Ok). Поміняйте тексти і заголовок форми, вказавши своє прізвище, наприклад, так, як показано на малюнку.

Поміняйте зображення у вікні на свій розсуд, змінивши властивість Picture об'єкту Programlcon 

  1.  Запрограмуйте команду «Про програму» головного меню вікна «Телефонний довідник» так, щоб у момент її виконання на екрані з'являлося тільки що спроектоване вікно.

У заготівку процедури обробки цієї команди введіть рядок для виклику методу Show (показати) об'єкту AboutBox: AboutBox .Show

  1.  Запрограмуйте кнопку Ok вікна «Про програму».

Для цього повернітьсяё до форми «Про програму» і в процедурі OKButtonClick кнопки Ok введіть команду закриття активної форми: Close.

Зауваження. Вікно форми «Про програму» знаходиться під іншими вікнами Delphi.

  1.  Видаліть непотрібну порожню форму Form1 з проекту.

Для цього викличте менеджер проекту командою View => Project Manager. Виділіть рядок із значенням Form1 і натисніть клавішу Delete. Закрийте вікно менеджера проекту.

  1.  Запрограмуйте команду Файл => Вихід головної форми.
  2.  Збережіть роботу і запустіть проект на виконання. При збереженні вкажіть ім'я модуля UProg.

Переконайтеся в правильності роботи закладок, комбінованого списку, наявності можливості редагувати поля таблиці і переміщатися по ним за допомогою смуги прокручування. Викличте вікно «Про програму» і закрийте його клавішею Ok. Закінчіть роботу командою Файл => Вихід.

  1.  Опишіть глобальні змінні і типи даних програми: тип запису телефонного довідника (info), файл записів (F), змінну типу info (г) і цілу змінну кількості записів (N).

Для цього перед розділом реалізації implementation додайте такі команди:

   info = record 

familia, imja : string[20];

adres : string[100];

tel : string[15];

end;

var PagesDlg : TPagesDlg;

     F : file of info;         

     г : info;

     N : integer;

  1.   Додайте   на   форму  два   об'єкти   -   стандартні   діалоги Windows для відкриття і збереження файлів.

Кнопки  (OpenDialog)  і  (SaveDialog) знаходяться на закладці Dialogs панелі компонентів Delphi. Ці об'єкти розташовані в правому верхньому кутку форми.

  1.  Запрограмуйте процедури відкриття і збереження файлів телефонного довідника (команди головного меню «Прочитати з файлу» і «Записати у файл»).

procedure TPagesDlg.N3Click(Sender: Tobject); { Тут N3 - номер команди «Прочитати з файлу», у Вас може бути інший номер}

var i : integer;

begin { Виконання стандартного діалогу «Open file»}

 if OpenDialog1.Execute then 

       begin

{F — назва вибраного діалогом файлу (властивість FileName об'єкту OpenDialogl)}

 AssignFile(F, OpenDialog1.FileName); Reset(F);                                             

N := 0;        {Читаємо з початку файлу}

while not eof(F) do {Прочитуємо всі записи з файлу}

begin

Read(F, r); { У змінну г прочитуємо поточний запис}

StringGridl.Cells[0, N+l] := r.familia;  { Прізвище - в перший стовпець таблиці}

StringGridl.Cells[l, N+l] := r.imja;  { Ім'я - в другий стовпець таблиці}

StringGridl.Cells[2, N+l] := r.adres;  { Адреса - в третій стовпець таблиці}

StringGridl.Cells[3, N+l] := р. tel; { Телефон - в четвертий стовпець таблиці}

N := N + 1;     { Збільшуємо загальне число записів N}

end;

CloseFile(F);       

{ Описана нижче процедура заповнює поля редагування другої сторінки форми} NewEdit(ComboBoxl);

{ Описана нижче процедура заповнює комбінований список другої сторінки форми}

NewComboBox;

      end

  end;

   procedure TpagesDlg.N4Click(Sender: TObject);  { Тут N4 - номер команди «Записати у файл», у Вас може бути інший номер}

  var i : integer;

begin

   if SaveDialogl.Execute then

       begin

      AssignFile(F, SaveDialogl.FileName); Rewrite(F);

      i:=l;

      while StringGridl.Cells[3, i] <> " do

                              begin

r.familia := StringGrid1.Cells[0, i];

r.imja := StringGrid1.Cells[l, i];

r.adres := StringGrid1.Cells[2, i];

r.tel := StringGrid1.Cells[3, i];

Write(F, r);

i := i + 1;

end;

     CloseFile(F);

     end

end;

  1.  Напишіть процедуру створення форми.

У вікні інспектора об'єктів активізуйте об'єкт PagesDlg (вікно форми з багатосторінковим блокнотом) і двічі клацніть в рядку OnCreate закладки Events цього об'єкту.


Сформуйте процедуру створення головної форми програми:

procedure TpagesDlg.FormCreate(Sender: TObject);

begin { Заповнюємо заголовок таблиці}

StringGrid1.cells[0, 0] := 'Прізвище';

StringGrid1.cells[l, 0] := 'Ім'я';

StringGrid1.cells[2, 0] := 'Адреса';

StringGrid1.cells[3, 0] := 'Телефон';

ComboBox1. Items .Add(");  { Створюємо порожній рядок в комбінованому списку}

ComboBox1.ItemIndex:=0; {Активізуємо цей рядок на випадок створення нового довідника} 

end;

  1.  Напишіть процедуру заповнення полів редагування NewEdit.

Виклик цієї процедури здійснюється, зокрема, у момент вибору прізвища для пошуку, тобто у момент зміни активного рядка в комбінованому списку. Тому для ініціалізації заготівки цієї процедури активізуйте на закладці Events вікна Object Inspector об'єкту ComboBoxl рядок OnChange (Момент заміни) і в правому стовпці вкажіть назву  процедури реакції на цю подію: NewEdit. Двічі клацніть мишею на введеній назві і заповніть заготівку цієї процедури таким чином:

procedure TPagesDlg.NewEdit(Sender: Tobject);

var i : integer;

begin

i := ComboBox1.Itemlndex + 1;  {i - номер рядка даних в таблиці}

if i > 0 then

begin  {Для значущих позицій комбінованого списку}

Edit1.Text := StringGrid1.Cells[0, i]; { копіюємо дані i-го запису з}

Edit2.Text := StringGrid1.Cells[1, i]; { першої сторінки форми в}

Edit3.Text := StringGridl.Cells[2, i];  {відповідні поля на другій сторінці}

Edit4.Text := StringGridl.Cells[3, i];

end

end;

  1.  Напишіть процедуру заповнення комбінованого списку NewComboBox.

Спочатку до опису типу класу (об'єкту) TPagesDlg (багатосторінкової форми) в розділі interface додайте декларацію:

type

{ Цей запис вже є в заготівці модуля}

TPagesDlg = class(TForm)

....

{ Необхідно вставити}

procedure NewComboBox;

...

У розділ implementation додайте опис цієї процедури:

procedure TPagesDlg.NewComboBox;

var i, j : integer;

begin

j := ComboBox1.ItemIndex; {Запам'ятовуємо активну позицію комбінованого списку}

ComboBox1.Clear; { Очищаємо комбінований список}

for i := 1 to N do  {Для всіх N записів...}

{ У оновлений комбінований список додаємо всі прізвища з першого стовпця таблиці}

ComboBox1.Items.Add(StringGrid1.Cells[0, I]);

ComboBox1.ItemIndex:= j;  { Переходємо на  позицію j}

end;

  1.  Збережіть роботу, запустіть програму, заповніть таблицю даними і переконаєтеся в тому, що програма правильно записує  на  диск  і  прочитує  з  диска   файли  телефонних довідників. Файл довідника зберегти в папці проекту.
  2.  Запрограмуйте команду головного меню   «Зберегти зміни в списку записів».

procedure TPagesDlg.N6Click(Sender: Tobject); {Тут N6 номер команди. «Записати у файл», у {Вас може бути іншій}

var i : integer;

begin

i := ComboBox1.ItemIndex + 1;  {Визначуємо номер активного запису}

if PageControl1.ActivePage=TabSheet2 then

begin                                                                {Якщо активна друга сторінка}

StringGrid1.Cells[0, i ] := Edit1.Text;                 {то вносимо зміни до першої }

StringGrid1.Cells[1, i] := Edit2.Text;

StringGrid1.Cells[2, i] := Edit3.Text;

StringGridl.Cells[3, i] := Edit4.Text;

end

else NewEdit(ComboBox1); {Інакше — вносимо зміни до другої сторінки}

NewComboBox; {У обох випадках оновлюємо комбінований список}

end;

  1.  Запрограмуйте кнопку переходу на попередній запис «Попередній».

procedure TpagesDlg.Button1Click(Sender: Tobject);

begin 

if ComboBox1.ItemIndex = 0 then {Зациклюємо список}

          ComboBox1.ItemIndex := N-1

                       Else {У середині списку показник зменшується на одиницю}

ComboBox1.ItemIndex := ComboBox1.ItemIndex - 1;

NewEdit(ComboBox1); { Оновлюємо панель «Знайдений запис»}

end;

  1.  Аналогічно запрограмуйте кнопку «Наступний».

Програмний код створеної процедури запишіть в звіт.

  1.  Збережіть програму і переконайтеся в правильності її роботи.
  2.  Запустіть програму, прочитайте з диска файл телефонного довідника, виберіть будь-яке прізвище в комбінованому списку і поміняйте його в полі редагування «Прізвище». Переконайтеся в тому, що синхронні зміни відбуваються і в комбінованому списку. Збережіть зміни і використовуйте кнопки «Попередній» і «Наступний» для навігації по записах, переконайтеся в зацикленні списку. Відредагуйте дані в таблиці, збережіть довідник у файлі на диску, прогляньте вікно «Про програму», закінчите роботу з програмою.
  3.  Створіть ехе-файл програми.
  4.  Закрийте Delphi, запустіть створену програму .
  5.  Продемонструйте створену форму викладачеві.
  6.  Виконайте додаткові завдання .

п/п

Завдання

  1.  

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

  1.  

Запрограмуйте кнопку «Знайти» так, щоб на панелі «Знайдений запис» відображалася інформація про особу, прізвище якої вказане в полі редагування Edit5 «Введіть прізвище». Якщо такого прізвища немає, то виведіть повідомлення про це в окремому вікні.

  1.  

Запрограмуйте команди підміню «А—>Я» і «Я—>А» пункту головного меню «Сортувати» так, щоб прізвища в таблиці і комбінованому списку були відсортовані в алфавітному або зворотному порядку.

  1.  

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

  1.  

У разі спроби відкрити неіснуючий файл телефонного довідника забезпечте появу вікна з відповідним повідомленням.

  1.  

У момент виходу з програми забезпечте появу вікна для збереження файлу телефонного довідника у випадку, якщо в нім були зроблені зміни

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


Лабораторна робота №6 

Тема: Створення програми: текстовий редактор «Блокнот».

Мета: Навчитись використовувати компоненти: MainMenu, панель інструментів (ToolBar), ImageList, RichEdit, OpenDialog, SaveDialog, FontDialog.

ХІД РОБОТИ.

  1.  Завантажте систему візуального програмування Delphi.
  2.  Створення інтерфейсної частини

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

Мал.  

  1.  Створення головного меню

Для створення головного меню нам знадобиться компонент MainMenu  з вкладки Standart .

Вставте цей компонент на форму і клацніть по ньому 2 рази. Перед вами відкриється вікно редагування меню.

Мал.  

Для створення пункту меню натисніть на пусту кнопку і в вікні інспектора об’єктів, на вкладці «Properties» у полі «caption» введіть назву пункту і натисніть ENTER. Після цього назва нової кнопки фіксується а відразу за нею створюється нова кнопка. Даний редактор легкий в використанні і в ньому можна розібратись на інтуїтивному рівні. Для створення роздільника як показано на мал. 3 у полі Caption достатньо ввести символ «-» і пункт меню перетвориться на роздільник.

Мал.  

Для створення підменю як показано на мал. 4 клацніть правою кнопкою миші на пункті меню і виберіть в списку, що ниспадає пункт «Create Submenu». Створіть пункти меню і підменю, як показано на схемі 1.

Мал.  

Файл   Правка   Формат

|-Новый  |-Выделить всё  |-Шрифт

|-Открыть  |-Очистить всё  |-Размещение-> |-По левому краю

|-Сохранить  |-Роздільник      |-По центру

|-Роздільник  |-Копировать      |-По правому краю

(символ «-»  |-Вырезать

У полі Caption) |-Вставить

|-Выход

Схема 1

Умовні позначення на схемі: «|-»- пункт меню, «->»-під меню

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

  1.  Створення панелі інструментів (ToolBar).
    Потрібно створити панель інструментів як показано на мал. 1.
    1.  Зменіть назву форми (інспектор об’єктів, поле Name): з Form1 на MainForm
      1.  Для створення панелі інструментів перенесіть на форму компонент ToolBar  з вкладки Win32. На формі з’явиться панель інструментів яка прилипне до головного меню. Панель інструментів буде складатись з двох основних частин: кнопок(buttons) і роздільників(separators). Щоб створити кнопку або роздільник треба клацнути правою кнопкою на панелі інструментів і відповідно вибрати New Button або New Sepatator (Мал.5). Кнопки і роздільники під час створення панелі інструментів можно вільно перетаскувати по панелі і міняти місцями. Панель буде складатись з 15 кнопок и 3 роздільників. Розмістіть кнопки і роздільники як показано на мал. 1.

Мал.  

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

  1.   Перенесіть на форму компонент ImageList  з вкладки Win32. Цей компонент можна уявити як контейнер, який в собі містить малюнки однакової висоти і ширини.
    1.  Два рази клацніть на компоненті і в з'явившимся вікні натисніть на кнопку Add
      1.  У вікні, що відкриється, виберіть всі малюнки з папки Додаткові файли.
      2.  Якщо з’явиться повідомлення як показано на мал. 6 то обов’язково натисніть No to all

Мал.  

  1.  Збережіть завантажені малюнки натиснувши Ok і закривши вікно редактору.
    1.  Виберіть панель інструментів і в полі Images в вікні інспектора об’єктів виберіть ImageList1.
      1.  Змініть малюнки кнопок панелі інструментів, як показано на мал. 1. Для цього клацніть на кнопку і в полі ImageIndex в вікні інспектора об’єктів виберіть малюнок для даної кнопки. Тепер ми маємо гарну панель інструментів

. Остання частина інтерфейсу - це поле редагування блокноту.

  1.   Створення поля редагування за допомогою компонента RichEdit.

Компонент RichEdit є удосконаленням компонента Мемо. В ньому додана можливість форматування тексту (вибір розміра шрифту, положення, коліру тексту і т. д.)

  1.  Вставте на форму компонент RichEdit  з вкладки Win32 і змініть деякі його властивості (вікно інспектора об’єкта):

Name

txt

Align

alClient(зайняти всю вільну область)

Lines

очистити

  1.  Додавання малюнків до пунктів головного меню.
    1.  Один раз клацніть на компонент MainMenu1 і в інспекторі об’єктів в полі Images виберіть ImageList1.
      1.  Зайдіть в редактор головного меню (клацніть 2 рази по значку головного меню) і виділіть потрібний пункт. У властивостях цього пункту знайдіть поле ImageIndex і виберіть потрібний малюнок. Увага! В редакторі головного меню ви не побачите малюнки. Їх можна побачити тільки при закритому редакторі меню або при запущеній програмі.
      2.  Запустіть програму, клацнувши на значку або натиснувши F9. Програма не буде виконувати ніяких дій так, як ми створили тільки  інтерфейсну частину (оболонку). В наступному пункті ми перейдемо до створення програмної частини. Закрийте вікно запущеної програми, ви знову в редакторі.
  2.   Створення програмної частини.
    1.  Перш за все нам знадобляться ще 3 компонента: OpenDialog , SaveDialog , FontDialog . Ці всі компоненти знаходяться на вкладці Dialogs. Вставте на форму по одному з цих компонентів.
    2.  Змініть назви цих компонентів для облегшення написання коду. В полі Name властивостей компонента змініть ім’я: OpenDialog1→OD, SaveDialog1→SD, FontDialog1→FD.
    3.  Запрограмуйте кнопки, для цього два рази клацніть по відповідній кнопці або виділіть кнопку, і в інспекторі об’єктів, перейдіть на вкладку Events і в пустому полі навпроти напису onClick два рази клацніть мишею.
      1.   Два рази клацніть на кнопку зі значком . В створеній процедурі між begin end; впишіть код:
        txt.Lines.Clear;//очищаємо поля від тексту
        txt.SelAttributes:=Txt.DefAttributes; // встановлюємо стандартні атрибути
      2.  Запрограмуйте кожну наступну кнопку використовуючи таблицю:

Значок

Дія

Код

Зберегти файл

//Якщо користувач ввів ім’я файлу і натиснув Ок то

//зберігаємо файл

if sd.Execute then txt.Lines.SaveToFile(sd.FileName);

Відкрити файл

//Якщо користувач вибрав файл і натиснув ОК то відкриваємо //файл

txt.SelAttributes:=txt.DefAttributes;

if od.Execute then txt.Lines.LoadFromFile(od.FileName);

Закрити програму

MainForm.Close;

Вирізати

txt.CutToClipboard;

Копіювати

txt.CopyToClipboard;

Вставити

txt.PasteFromClipboard;

Властивості шрифту

//Загружаємо данні настройки шрифту

fd.Font.Assign(txt.SelAttributes);

//Якщо користувач змінив настройки шрифту і натиснув Ок то

//змінюємо настройки шрифту

if fd.Execute then txt.SelAttributes.Assign(fd.Font);

Вирівнювання по лівому краю

txt.Paragraph.Alignment:=taLeftJustify;

Вирівнювання по центру

txt.Paragraph.Alignment:=taCenter;

Вирівнювання по правому краю

txt.Paragraph.Alignment:=taRightJustify;

Звичайний текст

txt.SelAttributes:=txt.DefAttributes;

Жирний текст

txt.SelAttributes.Style:=txt.SelAttributes.Style+[fsBold];

Нахилений текст

txt.SelAttributes.Style:=txt.SelAttributes.Style+[fsItalic];

Підкреслений текст

txt.SelAttributes.Style:=txt.SelAttributes.Style+[fsunderline];

  1.  Запустіть програму і перевірте роботу всіх кнопок. Якщо деякі з них працюють невірно або зовсім не працюють перевірте правильність написання коду.
    1.  Тепер потрібно запрограмувати кнопки головного меню. Зазвичай на панель інструментів виносять кнопки з головного меню, які часто використовуються. Щоб повторно не дублювати код (так, як всі кнопки на панелі інструментів є в головному меню) будимо використовувати вже написані процедури.
    2.  Приклад вибору процедури для кнопки (новий документ).
      1.  Перш за все треба взнати яку процедуру використовує пункт меню. Для цього виділяємо кнопку на панелі інструментів, клацнувши по ній один раз і в вікні інспектора об’єктів, на вкладці Events навпроти onClick  дивимось і запам’ятовуємо назву процедури яка оброблює натискання на кнопку (мал. 7). Можна навести курсор миші на потрібну кнопку і запам’ятати назву процедури.


Мал. 7

В даному випадку ця процедура називається ToolButton15Click.

  1.  Відкрийте вікно редактора головного меню (натисніть 2 рази на значок ). В редакторі виберіть відповідну кнопку і перейдіть в вікно інспектора об’єктів на вкладку Events.
    1.   Перейдіть в поле onClick і виберіть потрібну процедуру в списку (в даному випадку це ToolButton15Click) Мал. 8.

Мал. 8.

  1.  Виконайте такі ж дії для кожного пункту меню.
    1.  В головному меню є ще 2 кнопки яких немає на панелі інструментів, це «Выделить всё» і «Очистить всё». Напишіть код цих пунктів меню:

«Выделить всё»: txt.SelectAll;

«Очистить всё»: txt.Lines.Clear;

  1.  Запустіть програму і перевірте роботу і відповідність всіх кнопок.

Детальніше про властивості компонента RichEdit ви можете прочитати у файлі «Про RichEdit.htm» який додається разом з лабораторною роботою.

Завдання на самостійне опрацювання

п/п

Завдання

  1.  

Використовуючи властивість Visible компонента RichEdit напишіть код, щоб при запуску програми поле редагування не було видно. Воно повинно буди видимим тільки після відкривання файлу або після створення нового файлу.

  1.  

Створіть додатковий пункт головного меню «Про програму». Створіть додаткове вікно, і в ньому опишіть короткі відомості про програму (автор, група і т.д. і т.п.). При натисненні на кнопку  «Про програму» повинно з’являтись ваше новостворене вікно.

  1.  

Створіть додаткову процедуру яка б перевіряла, чи зберіг користувач новий файл або відкритий. Дане повідомлення повинно з’являтись тільки якщо користувач змінив файл. Щоб вивісти повідомлення на екран використовуйте функцію MessageDLG (детальніше про функцію в файлі MessageDLG.html).

  1.  

Створити додаткову кнопку на панелі інструментів і у пункті головного меню, яка б дозволяла створювати маркеровані списки (детальніше про списки можна прочитати в файлі «Про RichEdit.htm»).

  1.  Оформити звіт про лабораторну роботу, в якому записати: тему і мету роботи; послідовність виконання проекта, створеного на лабораторній роботі.

DELPHI 7.0

Лабораторна робота  № 7.

Тема: Задача «ВИВЧЕННЯ АНГЛІЙСЬКОЇ МОВИ».

Нові компоненти: геометричні фігури, таймер, мультимедійний програвач, двійні кнопки та індикатор стану.

Мета роботи: Розібрати програму для оцінки ступеня знання англійської мови. Користувач повинен перетягувати малюнки під відповідні англійські слова. Застосувати індикатор часу, звукові ефекти і аналіз  тестування. Навчитись працювати з компонентами: геометрична фігура (Shape), таймер (Timer), мультимедійний програвач (Media Player), двійна кнопка с полем редагування (Spin Edit), індикатор стану  (Progress Bar).

ХІД РОБОТИ.

  1.  Запустіть  Delphi
  2.  Змініть заголовок (Caption) форми с «Form1» на «Англійська мова - тестування».
  3.  Змініть властивість Name форми на “main” (тобто змініть назву форми)
  4.  Змініть властивість Border Style форми на “bsSingle
  5.  Розташуйте на формі компоненти, як показано на малюнку. Увага!  Для полегшення написання програмного коду і для легшої роботи з компонентами треба змінити їх властивість Name. На малюнку, показані ім’я кожного компоненту, а в дужках, ім’я компоненту на панелі компонентів. Змініть властивість Name кожного компоненту на відповідне ім’я. Описання нових компонентів:
  •  Геометрична фігура Shape на панелі Additional , потрібна для зображення елементарних геометричних фігур; Розмір фігури повинен бути більше, ніж розмір малюнку. Якщо під час переміщення малюнку на фігуру він зникне, перемістіть його на передній план командою контекстного меню Bring To Front;
  •  Таймер (Timer, піктограма на закладці System) використовують для повторення частини коду з певною частотою. Частина коду знаходиться в події таймера OnTimer. Періодичність вмикання задається у властивості Interval в мілісекундах;
  •  Мультимедійний програвач (MediaPlayer, піктограма на закладце System) потрібна для програвання відео і аудіо файлів. Управляти відтворенням можна як за допомогою кнопок Play, Pause, Stop Next і т.д. на етапі виконання програми, так і з програмного коду викликавши відповідні методи об’єкта;
  •  Подвійна кнопка з полем редагування (SpinEdit, піктограма на закладці Samples) призначена для введення і корегування певного значення цілого типу під час програми;

Задайте такі властивості об’єктів

Об’єкт

Властивість

Значення

Timer1

Interval

500

Timer2

Interval

100

Play

Visible

False

SpinEdit1

EditorEnabled

True

MaxValue

10

MinValue

1

Value

5

Ok

Glyph

Load C:\ Program Files\Common Files\ Borland Shared\ IMAGES \BUTTONS\ check.bmp\OK

Caption

Готово

Ex

Glyph

Load C:\ Program Files\ Common Files\ Borland Shared\ IMAGES \BUTTONS\dooropen.bmp

Caption

Вихід

P1, P2,P3

Shape

stRoundRect

Pen -> Width

2

Im1, Im2, Im3

Stretch

True

Label4

Font-Color

Red

Font-Size

10

Caption

Обов’язково натисніть на кнопку "Далі" після розміщення рисунків!!

L1, L2, L3

Font-Color

Olive

Font-Size

16

  1.  Двічі клацніть на піктограмі першого таймера і запрограмуйте миготіння повідомлення «Обов’язково натисніть кнопку «Далі» після розміщення малюнків!!»:

procedure TForm1.Timer1.Timer(Sender: Tobject);

begin 

  label4.Visible:=not label4.Visible;

end;

  1.  Введіть опис глобальних змінних модуля:

var

 main: Tmain;

 shiftX,shiftY:integer;

 i,n,score:integer;

 left1,left2,left3,Stop:integer;

 dir:string;

  1.  Введіть опис глобальних констант програми:

Const

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

Etop=56; Eleft1=24; Eleft2=200; Eleft3=376;

folder='\img\';

k = 4; {Кількість запитань}

a: array [1..k, 1..3] of  string = ( {імена малюнків}

('car.jpg', 'money.jpg', 'bomb.jpg'),

('coins.jpg', 'clock.jpg', 'tennis.jpg'),

('brick.jpg', 'building.jpg', 'champagne.jpg'),

('dice.jpg', 'donkey.jpg', 'door.jpg'));

b: array [1..k, 1..3] of string = ( {підписи малюнків}

('car', 'money', 'bomb'),

('coins', 'clock', 'tennis'),

('brick', 'building', 'champagne'),

('dice', 'donkey', 'door'));

checkf: array [1..k, 1..3] of integer = (

(2,   1,   3),  {позиції розміщення підписів малюнків}

(3,   2,   1),

(2,   1,   3),  

(1,   3,   2));

  1.  Запрограмуйте процедури: створення форми FormCreate, Вставки в неї малюнків SetPicture, виведення інформації про результати тестів Information і кнопку Ex:

procedure Tmain.FormCreate(Sender: TObject);

begin

left1:=im1.Left; // Зберігаємо позиції малюнків

left2:=im2.Left; left3:=im3.Left;

Stop:=im1.Top;

n:=0; // Обнуляємо номер питання score:=0; // обнуляємо результат тесту

dir:=GetCurrentDir; // взаємо місце знаходження нашої програми

showmessage('Як будете готові, натисніть клавішу "Ок"'); // чекаємо готовності //користувача

setpicture; // встановлюємо малюнки 

end;

Procedure SetPicture;

 var

 s:integer;

begin

;//якщо малюнки були здвинуті то повертаємо їх на своє місце

 main.Im1.Top:=Stop;   main.Im2.Top:=Stop;   main.Im3.Top:=Stop;

 main.Im1.Left:=Left1;   main.Im2.Left:=Left2;   main.Im3.Left:=Left3;

;//якщо всі малюнки були виведені, переходимо на обробку результатів тесту//

 if n=4 then

 begin

  main.ExClick(main);    exit;

 end;

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

 main.progr.Max:=main.SpinEdit1.Value*100;

 main.progr.Position:=main.SpinEdit1.Value*100;

//Вибираємо наступне питання

 n:=n+1;

//Виводимо першу картинку

 i:=1;

 s:=checkf[n,i];

 main.Im1.Picture.LoadFromFile(dir+folder+a[n,i]);

 main.L1.Caption:=b[n,s];

 inc(i);

//Виводимо другу картинку

 s:=checkf[n,i];

 main.Im2.Picture.LoadFromFile(dir+folder+a[n,i]);

 main.L2.Caption:=b[n,s];

 inc(i);

//Виводимо третю картинку

 s:=checkf[n,i];

 main.Im3.Picture.LoadFromFile(dir+folder+a[n,i]);

 main.L3.Caption:=b[n,s];

//корегуємо розмір поля картинки відповідно до розмірів самої картинки

 main.Im1.Width:=main.Im1.Picture.Width;

 main.Im2.Width:=main.Im2.Picture.Width;

 main.Im3.Width:=main.Im3.Picture.Width;

 main.Im1.Height:=main.Im1.Picture.Height;

 main.Im2.Height:=main.Im2.Picture.Height;

 main.Im3.Height:=main.Im3.Picture.Height;

 end;

procedure Information;

begin

//Зупиняємо таймери

main.Timer1.Enabled := False;     main.Timer2.Enabled := False;

//Знаходимо кількість зароблених балів

score := (score * 100) div k;

main.play.FileName := ' ';

//якщо користувач набрав більш ніж 100 балів то запускаємо файл //«applause.wav»

if score > 70 then

main.play.FileName := dir+'\applause.wav';

If main.play.FileName <>' ' then

begin

 main.play.Open;        {Відкриваємо мулът. плеєр}

 main.play.Play;         {Відтворюємо звук }

End;

//Виводимо повідомлення

MessageDlg('Ви набрали'+IntToStr(score)+' балів зі 100', mtInformation,[mbOk], 0);

//Виходимо з програми

main.close;

end;

procedure Tmain.ExClick(Sender: TObject);

begin

information;//викликаємо підпрограму опрацювання результатів тесту

end;

  1.  Забезпечте перетягування малюнка по формі, запрограмувавши обробку таких трьох подій об’єкта Image1: OnMouseDown (Якщо натиснути мишу), OnMouseMove (Якщо перетягувати мишу) и OnMouseUp (Якщо відпустити мишу). Для заповнення відповідних процедур скористайтесь  вкладкою Events вікна інспектора об’єктів першого малюнку:

procedure TForml.ImlMouseDown(Sender: TObject;

Button: TMouseButton;   Shift: TShiftState;

X, Y: Integer);

       Begin

//тимчасова змінна Tag=1 якщо клавіша миші натиснена

Iml.Tag := 1;

//запам’ятовуємо координати натиснення миші в середині малюнка

shiftY := Y;

shiftX := X;

end;

procedure TForml.ImlMouseMove(Sender: TObject;

Shift: TshiftState; X,Y: Integer);

begin

if Iml.Tag = 1 then //якщо натиснена клавіша миші то

begin

  //змінюємо координати малюнка

Iml.Top := Iml.Top + Y - shiftY;

Iml.Left := Iml.Left + X - shiftX;

end;

end;

procedure TForml.ImlMouseUp(Sender : Tobject;Button : TMouseButton;   Shift : TShiftState;

X, Y : Integer);

Begin

im1.Tag:=0;

//Якщо малюнок знаходиться повністю в першій фігурі то розміщуємо його по центру фігури//

if position1(im1,p1) then

 begin

 im1.Top:=Etop;

 im1.Left:=Eleft1;

 exit;

 end;

//Якщо малюнок знаходиться повністю в другій  фігурі то розміщуємо його по центру фігури//

if position1(im1,p2) then

begin

 im1.Top:=Etop;

 im1.Left:=Eleft2;

 exit;

end;

//Якщо малюнок знаходиться повністю в третій  фігурі то розміщуємо його по центру фігури//

if position1(im1,p3) then

begin

 im1.Top:=Etop;

 im1.Left:=Eleft3;

 exit;

end;

//Якщо малюнок не розташований в жодній з фігур то повертаємо його на своє місце

im1.Top:=stop;

im1.Left:=left1;

end;

Зверніть увагу, що програма не перевіряє, якою клавішею користувач переміщає малюнок. Тому малюнок можна переміщати як правою так і лівою кнопкою. Перевірити клавіші миші можна проаналізувавши аргумент Button (типа TMouseButton) приведених процедур: Button = {mbLeft (ліва кнопка), mbRight (права), mbMiddle (середня)}. Координати миші передаються в процедуру за допомогою аргументів  X и Y типа integer.

  1.  Аналогічно запрограмуйте перетаскування двох інших малюнків.
  2.  Створіть ще одну функцію Position1, для перевірки, чи знаходиться малюнок на даній фігурі, чи ні.

function position1(img:Timage;Shape:Tshape):boolean;

begin

//результат функції буде дорівнювати TRUE якщо малюнок буде знаходитись в середені фігури, інакше результат функуції буде FALSE

 if ((img.Left>shape.Left)and(img.top>shape.top))and (((img.Left+img.Width)<(shape.Left+shape.Width))and((img.top+img.height)<(shape.top+shape.height))) then

 position1:=true

  else

 position1:=false;

end;

  1.  Запрограмуйте кнопку «Далі» для перевірки правильності розташування малюнків і для формування наступних малюнків

procedure Tmain.OkClick(Sender: TObject);

var

check1,check2,check3:integer;

begin

check1:=0;

check2:=0;

check3:=0;

//Аналізуємо розташування малюнків

//Якщо перший мал. знаходиться на першій фігурі то запамятовуємо номер фігури

if position1(im1,P1) then check1:=1;

//Якщо перший мал. знаходиться на другій фігурі то запамятовуємо номер фігури

if position1(im1,P2) then check1:=2;

//Якщо перший мал. знаход. на третій фігурі то запамятовуємо номер фігури

if position1(im1,P3) then check1:=3;

//Аналогічно прораховуємо для двух інших малюнків

if position1(im2,P1) then check2:=1;

if position1(im2,P2) then check2:=2;

if position1(im2,P3) then check2:=3;

if position1(im3,P1) then check3:=1;

if position1(im3,P2) then check3:=2;

if position1(im3,P3) then check3:=3;

//якщо перший малюнок на своєму містці, то результат буде дорівнювати 0

if check1=checkf[n,1] then check1:=0;

//якщо другий малюнок на своєму містці, то результат буде дорівнювати 0

if check2=checkf[n,2] then check2:=0;

//якщо третій малюнок на своєму містці, то результат буде дорівнювати 0

if check3=checkf[n,3] then check3:=0;

//якщо всі малюнки розташовані правильно то добавляємо бал

if (check1=0)and(check2=0)and(check3=0) then

 score:=score+1;

//генеруємо нові малюнки

SetPicture;

end;

  1.  Запрограмуйте другий таймер, який забезпечує індикацію часу від 100% до 0%, зворотно пропорційно числу в SpinEditl. Кнопка «Далі» повинна бути активною, якщо всі малюнки розставлені.

Якщо користувач не встиг розмістити малюнки за даний йому проміжок часу то він повинен почути звук «Дзінь» і побачити повідомлення про закінчення часу.

procedure Tmain.Timer2Timer(Sender: TObject);

begin

if (position1(im1,P1)or position1(im1,P2)or position1(im1,P3))and

  (position1(im2,P1)or position1(im2,P2)or position1(im2,P3))and

  (position1(im3,P1)or position1(im3,P2)or position1(im3,P3))

   //якщо всі малюнки розставлені , то дозволяємо використання кнопки «Далі »

   then ok.Enabled:=true

  //в іншому випадку забороняємо

   else ok.Enabled:=false;

//вираховуємо данні для індикатора часу

timer2.Interval:=SpinEdit1.Value*100;

progr.Position:=progr.Position-1;

//якщо час закінчився то

if progr.Position=0 then

 begin

  //зупиняємо таймер

 timer2.Enabled:=false;

 //запускаємо звук

 play.FileName:=dir+'\ding.wav';   play.Open;   play.Play;

  //виводимо повідомлення

 messagedlg('Вибачте, але ви не вклалися у даний вам проміжок часу…'+#13+'Довчіть англійську мову і спробуйте ще раз!',mtInformation,[mbOk],0);

 //вимикаємо програму

 main.Close;

end;

end;

  1.  Збережіть програму в своїй папці.
  •  Для цього виконайте команду головного меню File => Save All або натисніть кнопку Save All на панелі інструментів.
  •  В вікні Save Unit as за допомогою списку виберіть свою папку, створіть в ній папку Teach_Engl і відкрийте її, задайте назву для файлу тексту програми UTeachEngl, попередньо видаливши запропоновану назву.
  •  В наступному вікні «Save Project1 As» введіть назву файлу проекту PTeachEngl, видаливши запропоновану назву. Зверніть увагу: файли проекту і тексту програми повинні мати різні назви.
  1.  Скопіюйте файли малюнків і звуків у папку з програмою. Зверніть увагу, що малюнки повинні зберігатись в папці «img» в папці проету. При зміні папки треба змінити константу «folder» в програмі. Музику і малюнки можна знайти в Інтернеті, або в папці «C:\Program Files\Microsoft Office\CLIPART\PUB60COR»,або отримати у викладача.
  2.  Запустіть програму. Перетягуйте малюнки на середину відповідних фігур.
  3.  Створіть ехе-файл програми.
  4.  Закрийте Delphi, запустіть створену програму.
  5.  Продемонструйте створену програму викладачеві.
  6.  Виконайте додаткові завдання .

Задача

  1.  

Забезпечте можливість перетягування малюнка лише лівою кнопкою миші

  1.  

Збільшить частоту появи напису «Обов’язково натисніть кнопку «далі» після розміщення малюнків »

  1.  

Забезпечте індикацію оцінки за пройдений тест. Диапазону 100-86 балів, поставте оцінку "5", диапазону 78-85 балов - оцінку "4", 51-77 - оцінку "3", менше 51 бала - оцінку "2". Підберіть звукові ефекти для різних випадків

  1.  

Підберіть нормальну швидкість для SpinEditl і зробіть його недоступним для внесення змін

  1.  

Видаліть об’єкт SpinEditl і задайте саму вдалу швидкість в самому проекті

  1.  

Збільшить кількість питань з малюнками і підписів до них

  1.  Оформіть звіт по лабораторній роботі: тема і мета роботи; послідовність виконання роботи, завдання до  лабораторної роботи.

 


Delphi 7.

Лабораторна робота №8.

Тема: Програмування гри «О, щасливчик!».

Мета роботи: Навчитись працювати з файлами.

ХІД РОБОТИ.

Всі питання, а також правильні і неправильні відповіді будуть зберігатися не в коді програми, а в зовнішньому INI-файлі, в якому всі дані розбиті на розділи.

  1.  Створіть в тому ж каталозі, що і майбутня програма, файл з ім'ям lucky.ini і введемо в нього наступний текст:

; початок файлу

[num]

num=3

[Questions]

1=Скільки клавіш на клавіатурі?

2=Основна несправність миші?

3=Основні файлові системи:

[Answers]

1=101

2=забруднення

3=FAT, NTFS

[Wrong]

1=100

11=96

111=116

2 =зависання

22=залипання

222=заїдання 

3=AFX, KFX

33=ATF,NFTS

333=TAF,TNFS

Перший рядок - це коментар. Тут можна писати все, що завгодно. Перший розділ num містить тільки один параметр з таким же ім'ям, який вказує на кількість питань в тесті. Цей параметр знадобиться для того, щоб питання задавалися в довільній послідовності. Наступний розділ - Questions. У ньому знаходяться всі питання. У розділі Answers знаходяться правильні відповіді. У розділі Wrong знаходяться неправильні відповіді.

Для того щоб не створювати три розділи, кожен з яких містить неправильний варіант відповіді, використовуємо ідентифікацію за номером питання. Неправильні відповіді до першого питання знаходяться в параметрах 1, 11 і 111, до другого - в параметрах 2, 22 і 222, до п'ятнадцятого - в параметрах 15, 1515, 151 515 і т.д.

  1.   Завантажте систему візуального програмування Delphi.
  2.  Створіть новий проект програми: виконайте команду меню FileNew Application.
  3.  Дайте значення деяким властивостям форми Form1 згідно з таблицею.


Властивості форми гри "О, щасливчик"

Властивість

Значення

Пояснення

BorderStyle

bsSingle

Тепер ніхто не зможе змінити розмір вікна і зробити нашу гру не привабливою.

Caption

Вітаємо вас на грі "О, счастливчик"!

Заголовок вікна

Height

414

Висота

Width

380

Ширина

  1.  Розмістіть на формі ряд компонентів з вкладки Standard палітри компонентів:
  •  три компоненти Button (кнопка) - кількість кнопок відповідає загальній кількості запитань (у нашому прикладі - 3);
  •  RadioGroup (група перемикачів) ;
  •   Memo (багаторядкове текстове поле) ;
  •  два компоненти Label (напис) .
  •  Тепер розмістимо на компоненті RadioGroup1 (не на формі!) Чотири компоненти RadioButton (перемикач) з тією ж вкладки Standard.
  •  І, нарешті, розмістимо на формі шість компонентів Image (зображення) з вкладки Additional палітри компонентів.
  1.  Змініть властивості перерахованих компонентів згідно з таблицею:

Компонент

Властивість

Значення

Пояснення

Buttonl, Button2

Caption

Наступне питання >>>>

Кнопка використовується для переходу до слідуючого питання

Left

104

Відступ зліва

Top

356

Відступ зверху

Button2

Visible

False

При запуску програми кнопка відповіді на друге питання не видна

RadioGroupl

Caption

Варианты ответов

Заголовок группи перемикачів

Font.Style

[fsBold]

Шрифт — напівжирний

Font.Color

clBlue

Колір шрифта — синій

Height

90

Висота

Left

12

Відступ зліва

Top

256

Відступ зверху

Width

348

Ширина

RadioButtonl

Name

an1

Перший варіант відповіді

Caption

Без надпису

Font.Style

[fsBold]

Шрифт — напівжирний

Font.Color

clNavy

Шрифт — темно-сиій

RadioButtonl

Left

24

Відступ зліва

Top

280

Відступ зверху

Width

160

Ширина

RadioButton2

Name

an2

Другий варіант відповіді

Caption

Без надпису

Font.Style

[fsBold]

Шрифт —напівжирний

Font.Color

clNavy

Шрифт — темно-синий

Left

192

Відступ зліва

Top

280

Відступ зверху

Width

160

Ширина

RadioButton3

Name

an3

Третій варіант відповіді

Caption

Без надпису

Font.Style

[fsBold]

Шрифт — напівжирний

Font.Color

clNavy

Шрифт — темно-синий

Left

24

Відступ зліва

Top

312

Відступ зверху

Width

160

Ширина

RadioButton4

Name

an4

Четвертий варіант відповіді

Caption

Без надпису

Font.Style

[fsBold]

Шрифт — напівжирний

Font.Color

clNavy

Шрифт — темно-синій

Left

192

Відступ зліва

Top

312

Відступ зверху

Width'

160

Ширина

Memol

Color

clActiveBorder

Замальовуєм поле питання

Height

90

Висота

Lines

Очистити вміст

Left

12

Відступ зліва

Top

156

Відступ зверху

Readonly

True

Заборона на зміну вмісту поля

Width

348

Ширина

Label1

Caption

О, счастливчик!

Назва гри

Align

a ITop

Розміщення вздовж верхнього краю форми

Alignment

taCenter

Вирівнювання тексту — по центру

Font.Style

[fsBold]

Шрифт — напівжирний

Font.Size

12

Размер шрифта — 12

Font.Color

clRed

Шрифт— червоний

Label2

Caption

Первый вопрос:

Відображає номер даного питання

Font.Style

[fsBold]

Шрифт — напівжирний

Left

16

Відступ зліва

Top

140

Відступ зверху

  1.   Компоненти Image використовуються для відображення малюнків, які відповідають використаним і невикористаним підказок типу "50 на 50", "Дзвінок другу" і "Допомога залу" (три малюнки - для використаних підказок і три - для невикористаних).
    1.   Присвойте властивостям кожного з компонентів Image значення згідно таблиці:

Властивість

Значення

Пояснення

AutoSize

True

Розмір компонену вибирається автоматично в залежності від властивостей Picture

Тор

32

Відступ зверху

Cursor

crHelp

При разміщенні над рисунком показник миші набуває форму ?

  1.   Тепер присвойте властивості, унікальні для кожного з шести компонентів Image:

Компонент

Властивість

Значення

Пояснення

Image1

Name

yes50

Малюнок, що відповідає не використаній підказці типу "50 на 50"

Left

16

Відступ зліва

Picture

Відповідний малюнок

Image2

Name

yesZvonok

Малюнок, що відповідає не використаній підказці типу «Звонок другу»

Left

132

Відступ зліва

Picture

Відповідний малюнок

Image3

Name

yesZаl

Малюнок, що відповідає не використаній підказці типу «Помощь зала»

Left

252

Відступ зліва

Picture

Відповідний малюнок

Image4

Name

no50

Малюнок, що відповідає використаній підказці типу "50 на 50"

Left

16

Відступ зліва

Picture

Відповідний малюнок

Visible

False

Спочатку невидимий

Image5

Name

noZvonok

Малюнок, що відповідає використаній підказці типу «Звонок другу»

Left

132

Відступ зліва

Picture

Відповідний малюнок

Visible

False

Спочатку невидимий

Image6

Name

noZаl

Малюнок, що відповідає використаній підказці типу «Помощь зала»

Left

252

Відступ зліва

Picture

Відповідний малюнок

Visible

False

Спочатку невидимий

  1.   Розробка програмного коду.
    1.   Оголосіть всі змінні, які будуть використані в програмі:

var

Forml: TForml;

rang: boolean;             // перевірка на наявність lucky.ini;

ss, dir: string;             // для зберігання шляху до робочої папки і до файлу lucky.ini

i, a, n, pd: integer;     // i - лічильник масивів;

// А - номер поточного питання;

// N - кількість питань у базі;

// Pd - для підказки 50/50, для того,

// Щоб випадково не прибрали 1 або 3 варіантів

win: TiniFile;           // для роботи з ini-файлом

mass: array [1 .. 10] of integer; // масив містить номери питань, які вже були задані, щоб уникнути повторення питань

  1.  
    Перша подія OnCreate форми:

procedure TForml.FormCreate (Sender: TObject);

label ran ;                   // оголошуємо мітку

begin

Randomize;              // дізнаємося поточний каталог, з якого запускається наша програма

dir: = GetCurrentDir;

ss: = dir + '\ lucky.ini';         // розміщення бази даних

// Перевіряємо чи існує файл з питаннями

rang: = FileExists (ss);

if rang = False

then begin                    // якщо файлу немає виводимо повідомлення про його відсутність

MessageDlg ('Файл не знайдений: lucky.ini!', MtError, [mbok], 0);

halt;                   // і виходимо з програми

end;

win: = TIniFile.Create (ss);

// З розділу num дізнаємося кількість питань

ss: = win.ReadString ('num', 'num', ss);

n: = strtoint (ss);

ran: / / мітка

a: = random (n) + 1;

for i: = l to n do         // порівнюємо з усіма, що були задані раніше

if mass [i] = a then goto ran; //і якщо таке питання вже був заданий, то згенерувати новий

for i: = 1 to n do

if mass [i] = 0 then begin mass [i]: = а; // запам'ятати, що це питання вже задавалося

break;

end;

// Заносимо в Memol випадково згенерований питання

Memol.Text: = win.ReadString ('Questions', IntToStr (a), Memol.text);

// Правильну відповідь

anl.Caption: = win.ReadString ('Answers', IntToStr (a), anl.Caption);

// Перший варіант

an2.Caption: = win.ReadString ('Wrong', IntToStr (a), an2.Caption);

/ / Другий

аn3.Caption: = win.ReadString ('Wrong', IntToStr (a) + IntToStr (a),

аn3.Caption);

/ / І третій

an4.Caption: = win.ReadString ('Wrong', IntToStr (a) + IntToStr (a) + IntToStr (a), an4.Caption);

win.Free;

end;

  1.   Для роботи з ini-файлами необхідно підключити модуль IniFiles:

unit Unitl;

interface

user Windows, Messages, ..., IniFiles;

  1.  
    Створіть обробник події OnCliсk кнопки Button1:

procedure TForml.ButtonlClick (Sender: TObject);

label ran;

begin

Label2.Caption: = 'Друге питання:';

if anl.Checked

then begin    // якщо відповідь правильна

Buttonl.Visible: = False;  // прибираємо поточну кнопку

Button2.Visible: = True;  // і показуємо наступну кнопку

anl.Checked: = False;   // приберемо галочку від минулого відповіді

// Виставимо всі пункти заново, на випадок якщо

// Користувач скористався підказкою 50/50

an2.Enabled: = True;

апЗ.Enabled: = True;

an4.Enabled: = True;

Randomize;

// ... тут код ідентичний тому, що знаходиться в

// ... обробнику події OnCreate форми

win.Free;

end

else begin   // якщо відповідь неправильна, виводимо повідомлення

// О неправильному відповіді і повідомляємо правильний

MessageDlg ('Да-а ... Не кожен зміг би на першому' +

'Питанні програти!' + # 13 # 10 +

'А правильну відповідь був "' + anl.Caption + '"',

mtError, [mbok], 0);

halt;   // завершуємо гру

end;

end;

  1.  Для розробки інших 15 питань слід розмістити на формі 15 кнопок, аналогічних Buttonl, і створити для них обробники подій OnClick, подібні розглянутому вище. Дивіться пункти 6 і 8.4
    1.   Розглянте подію, яка відбудеться при натисканні кнопки, відповідній останньому питанню:

procedure TForml.Button2Click (Sender: TObject);

begin

if anl.Checked

then begin   // якщо на питання відповіли вірно,

Hide;    // ховаємо першу форму

Form2.Show;  // показуємо другу форму

end

else begin   // якщо неправильно

// Виводимо повідомлення з правильною відповіддю.

MessageDlg ('Треба ж! На останньому питанні погорів! "+# 13 # 10 + "А правильна відповідь була: '+ anl.Caption + '!', mtError, [mbok], 0);

halt;

end;

end;

  1.  У разі перемоги пропадає сувора форма з питаннями і повинна з'явитися весела - з поздоровленнями (в коді програми вона називається Form2). Додайте до проекту нову форму, виконавши команду меню File New  Form або клацнувши на кнопці панелі інструментів New Form. На екрані з'явиться нова чиста форма. Її властивості Align присвойте значення alCustom, а властивості BorderStyle - bsNone.
    1.  

Потім розмістіть на формі компонент Image із вкладки Additional, його властивості Picture призначте який-небудь "веселий" рисунок (наприклад такий, як показано на рис.2.7 Або придумайте свій), а властивості Align присвойте значення alClient.

  1.  Після цього двічі клацніть на компоненті Image1, щоб створити обробник події OnClick (виникає при клацанні мишею):

procedure TForm2.ImagelClick (Sender: TObject);

begin

halt;

end;

  1.   Збережіть створюваний проект у своїй папці.
  •  Для цього виконайте команду головного меню File Save All або натисніть на кнопку Save All на панелі інструментів.
  •  У вікні Save Unit as за допомогою списку виберіть свою папку, створіть в ній папку Щасливчик і відкрийте її, задайте назву для файлу тексту програми Lucky1, попередньо видаливши запропоноване комп'ютером назву Unitl.pas => кнопка Сохранить.
  •  У наступному вікні «Save Projectl As» введіть назву файлу проекту Р_Lucky, видаливши запропоноване комп'ютером назву Project1.dpr Сохранить
  1.   Компіляція і запуск програми

Для компіляції програми з подальшим її виконанням можна натиснути клавішу <F9>, клацнути на кнопці Run панелі інструментів або виконати команду меню Run  Run.

При спробі відкомпілювати програму з'явиться повідомлення про те, що форма Forml посилається на форму Form2, оголошену в модулі Lucky2, і що необхідно додати посилання на цей модуль в розділ uses.

Якщо в цьому вікні натиснути кнопку Yes, то в розділ реалізації (implementation) програмного модуля Luckyl.pas буде автоматично додана відповідна посилання:

implementation

uses Lucky2;

  1.  Реалізуємо функціональність підказок. Для цього вийдіть з програми і поверніться в середовище Delphi.
    1.  Так, підказки типу "Дзвінок другу" і "Допомога залу" будуть просто видавати вікно з правильною відповіддю. Серед підказок щодо реалізації найскладніша - "50 на 50". Почнемо з неї:

Створіть oбpобник події OnClick для компонентів yes50:

procedure TForml.yes50Click (Sender: TObject);

begin:

yes50.Visible: = False;   // прибираємо підказку

no50.Visible: = True;   // показуємо малюнок, який повідомляє, що підказка вже використана

win: = TIniFile.Create ('ss');

if anl.Caption <>

win.ReadString ('Answers', IntToStr (a), anl.Caption)

then begin   // перевіряємо: якщо перший варіант, то це - неправильний варіант відповіді

anl.Enabled: = False;   // прибираємо його

pd: = pd + 1;   // збільшуємо лічильник прибраних варіантів

end;

if an2.Caption <>

win.ReadString ('Answers', IntToStr (a), an2.Caption)

then begin

an2.Enabled: = False;

pd: = pd + 1;

end;

if pd = 2

then

// Якщо два перші варіанти і є неправильні, то нема чого перевіряти далі

ShowMessage ('Тепер ви повинні вибрати з цих' +

'Двох варіантів!')

else begin

if аn3.Caption <>

Win.ReadString ('Answers', IntToStr (a), anl.Caption)

then begin

an3.Enabled: = False; pd: = pd + 1;

end;

if pd <> 2 then

// Якщо ми дійшли до 4 варіанти, а лічильник не дорівнює 2,

an4.Enabled: = False;   // то прибираємо і четвертий варіант

end;

win.Free;

end;

  1.  Тепер розглянте подію OnClick для компонента yesZal:

procedure TForml.yesZalClick (Sender: TOtrject);

begin

yesZal.Visible: = False;

noZal.Visible: = True;

win: = TIniFile.Create (ss);

ss: = win.ReadString ('Answers', IntToStr (a), anl.Caption);

ShowMessage ("Зал переконаний, що правильна відповідь - '+ ss);

win.Free;

end;

  1.  З "дзвінком другу" все те ж саме, тільки потрібно підставити відповідні змінні:

procedure TForml.yesZvonokClick (Sender: TObject);

begin

yesZvonok.Visible: = False;  noZvonok.Visible: = True;

win: = TIniFile.Create (ss);

ss: = win.ReadString ('Answers', IntToStr (a), anl.Caption);

ShowMessage ('Друг переконаний, що правильна відповідь -' + ss);

win.Free;

end;

  1.  Тепер необхідно зробити так, щоб щось відбувалося, коли користувач намагається скористатися підказкою кілька разів. Отже, подія OnClick для компонента no50, noZal, noZvonok:

procedure TForml.no50Click (Sender: TObject);

begin

MessageDlg ('Ви вже скористалися цією підказкою!'

mtError, [mbok], 0);

end;

procedure TForml.noZvonokClick (Sender: TObject);

begin

MessageDlg ('Ви вже скористалися цією підказкою!',

mtError, [mbok], 0);

end;

procedure TForml.noZalClick (Sender: TObject);

begin

MessageDlg ('Ви вже скористалися цією підказкою!',

mtError, [mbok], 0);

end;

  1.  Шифрування бази відповідей

Гра повністю написана, але, щоб правильно відповісти на питання, не обов'язково все знати. Що може перешкодити користувачеві відкрити файл lucky.ini і прочитати там правильну відповідь. Звідси висновок: базу даних відповідей необхідно зашифрувати! Ми не будемо використовувати складних шифраторів, а застосуємо просту операцію хоr. Отже, додамо на початку обробника події OnCreate форми Forml наступний код:

procedure TForml.FormCreate (Sender: TObject);

label ran;

begin

// Зіставимо змінну fl і повний шлях до файлу lucky.ini

AssignFile (fI, ss);

// Змінна f2 буде відповідати за файл C: \ xor.ini

AssignFile (f2, 'C: \ xor.ini');

Reset (fl);    // відкриваємо файл на читання

Rewrite (f2);   // відкриваємо файл на запис

while not eof (fl) do  // поки не досягнуть кінець файла

begin

Read (fl, cop);   // читаємо lucky.ini

cop: = chr (ord (сор) хог 123);   // Дешифруючи дані

Write (f2, cop);      // записуємо їх в xor.ini

end;

CloseFile (fl); CloseFile (f2); // Закриваємо файли

Randomize; // активізуємо генератор випадкових чисел

  1.  Тепер необхідно внести деякі зміни до розділу оголошення змінних.

var

fl, f2: file of char;

cop: char;

  1.  У процедурі обробки події OnCreate, перевизначте змінну ss:

ss: = 'c: \ xor.ini';  // розміщення бази даних

..І нарешті, зашіфруйте файл lucky.ini. Для цього на швидку руку створіть програму, скопіюйте з нашої гри фрагмент коду, який дешифрує базу питань. Так як хоr - абсолютно оборотна функція (тому й ненадійна) цим же способом можна зашифрувати і базу. Приклад зашифрованою бази питань зображений на рис. 2.11.

  1.  

Відкомпілюйте і запустіть програму.

  1.  Файл Close All.
  2.  Оформіть звіт по лабораторній роботі: тема і мета роботи; послідовність виконання роботи.


Delphi
7.

Лабораторна робота № 9.

Тема: Проектування СУБД в середовищі DELPHI. 

Мета: Ознайомитись з компонентами роботи з СУБД.

Постановка завдання:

У військкоматі ведеться облік юнаків допризовного та призовного віку. Є наступні дані: район, прізвище, рік народження, номер особової справи, придатність до служби ("придатний" або "не придатний"). Програма повинна відповідати наступним вимогам:

  •  Працювати в двох режимах: введення і пошуку інформації
  •  В режимі пошуку формувати такі запити:

1. вивести список юнаків, призваних на службу в заданому році (після досягнення 18 років);

2. кількість придатних юнаків для кожного з районів;

3. вивести список юнаків, придатних до служби;

4. кількість юнаків, придатних і непридатних до служби;

5. відсортувати список за абеткою в порядку зростання і в порядку убування;

6. знайти самого «старого» і самого молодого юнака;

7. список юнаків, прізвище яких починається на задану букву;

8. створити таблицю archive аналогічної структури, скопіювати в неї всі дані з основної таблиці.

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

Короткі теоретичні відомості.

Створення і перегляд псевдонімів баз даних

Створити або змінити шлях до існуючих псевдонімів БД можна двома способами.

Спосіб перший. Запустити утиліту BDE Administrator. Вибрати в меню Object - New. Визначити назву і шлях до файлів БД.

Спосіб другий. Запустити утиліту DataBase DeskTop. Вибрати в меню Tools - Alias Manager. Натиснувши кнопку New можна створити новий псевдонім, або змінити шлях до існуючого в області вікна Path.

Типи полей таблиці в Paradox 7

Тип

Позначення

Опис значення

Alpha

А

Рядок символів. Довжина не більше 255 символів

Number

N

Число з плаваючою крапкою. Діапазон -10307 ... 10308. Точність 15 цифр мантиси

Money

$

Грошова сума. Відрізняється від типу Number тим, що в значенні відображається грошовий знак. Позначення грошового знаку залежить від установок Windows

Short

S

Ціле число. Діапазон -32 768 ... 32767

Longlnteger

I

Ціле число. Діапазон -2 147 483 648 ... 2 147483647

BCD

#

Число в двіково – десятковому форматі

Date

D

Дата. Діапазон 01.01.9999 до н. э. ... 31.12.9999

Time

Т

Час

Timestamp

@

Дата и час

Memo

M

Рядок символів. Довжина не обмежена. Перші 240 символів зберігаються в файлі таблиці, інші в файлі з розширенням MB

Formatted Memo

F

Рядок символів. Відрізняється від типу Memo тим, що рядок може містити форматований текст

Graphic

G

Графічне зображення. Формати BMP, PCX, TIF, GIF і EPS. При завантаженні в поле зображення перетвориться до формату BMP. Для зберігання ізо-бражения використовується файл з розширенням MB

OLE

О

Дані у форматі, який підтримується технологією OLE. Дані зберігаються у файлі з розширенням MB

ХІД РОБОТИ.

Для створення таблиці скористаємося утилітою DataBase DeskTop. Вибрати шлях
(C :/ Program Files / Common Files / Borland Shared /
DataBase DeskTop/Dbd32.exe 

  1.  Для створення таблиці виберіть в меню програми File-New-Table. 
    1.  У даній СУБД будемо використовувати формат Paradox. Виберіть його зі списку у вікні.

На екрані з'явиться вікно створення бази даних. У стовпці Field Name введіть ім'я поля (не повинно містити пробілів).

У стовпці Type виберіть з контекстного меню (правий клік миші) тип поля. Для строкових полів необхідно вказати розмір (стовпець Size).

  1.  Створіть таблицю наступної структури:

Імя поля

Тип поля

Опис

Nomer

Longlnteger

Key

Rayon

Alpha[20]

Район проживания

Surname

Alpha[20]

Прізвище ініціали

DataBorn

Date

Дата народження

Goden

Logical

  1.   Після створення таблиці натисніть кнопку SaveAs. Виберіть шлях ð Створіть папку Військкомат ð вкажіть ім'я файлу maintable.db  У вікні в області Alias вибрати псевдонім бази даних Standard1.

  1.   Створення основного вікна програми:
    1.   Перейменуйте головне вікно програми - змініть властивість Caption для Form1.
    2.   Помістіть на форму компонент PageControl (вкладка Win32). Встановіть компоненту наступне властивість:
  •  Align (Вирівнювання) - alClent (на все вікно)

  1.   Клацніть правою клавішею мишки по компоненту і створіть дві нові сторінки New Page (TabSheet1, TabSheet2).
    1.   Перейменуйте сторінки відповідно - Введення інформації і Пошук інформації. Для цього необхідно в списку Інспектори об'єкта вибрати об'єкт і змінити його властивість Caption.
    2.   Помістіть на форму об'єкт MainMenu (вкладка Standard). Клацніть по компоненту два рази і створіть пункт меню Дані, який містить наступні підпункти: Введення інформації, Пошук даних, Копіювання таблиці, Вихід. Для створення роздільника в меню необхідно ввести «-» - дефіс.

  1.   Помістіть на форму (лист Введення Інформації) такі компоненти:
  •  Table (вкладка BDE);
  •  DataSource (вкладка Data Access);
  •  DBGrid, DBNavigator (вкладка Data Controls).
    1.   Встановіть компонентам наступні властивості: Table:
  •  DatabaseName (псевдонім бази даних) - вибираємо зі списку свій Alias.
  •   TableName - вибираємо ім'я своєї таблиці.
  •  AutoRefresh (оновлення структури таблиці) - встановлюємо значення true.
  •   Active - встановлюємо true - підключаємо таблицю.
  •  DataSource:
  •  DataSet (джерело даних) - вибираємо Table1.
  •  DBGrid, DBNavigator:
  •  властивості DataSource встановлюємо значення DataSource1.
  •   Align (вирівнювання):  DBGrid - alClient (на все вікно), DBNavigator - alBottom (внизу вікна).
    1.   Подвійним клацанням по компоненту Table1 викличте редактор полів. В контекстному меню (клацання правою клавішею по редактору), виберіть пункт Додати всі поля. Якщо якесь поле бачити на екрані не потрібно, визначте його властивість Visible - False. Для інших полів у властивості DisplayLabel напишіть відображаються заголовки стовпці: Номер особової справи, Район, П.І.Б., Дата народження, Годен.

На даному етапі вид форми повинен бути наступним:

  1.   Відкрийте програму і перевірте, як воно працює. Сформуйте базу даних.
    1.  Перейдіть на вкладку Пошук інформації. Помістіть на неї наступні компонентиі:
  •  DBGrid (Align - Top);
  •  Query (вкладка BDE)
  •  DataSorce;
  •  PageControl (додайте 3 нових листа);
  •  RadioGroup (вкладка Standard)
    1.  Розташуйте компоненти наступним чином:

  1.   Встановіть властивості Multiline компонент PageControl2 значення True. Перейменуйте сторінки: Список по початковій букві прізвища, Список призовників по року, Придатні призовники по району.
    1.   Задайте властивості Caption компонента RadioGroup1 значення: Сформувати список.
    2.   Клацніть по властивості Items компонента і заповніть Редактор списку рядків, як показано нижче:

  1.  Встановимо властивості ItemIndex компонента RadioGroup значення 0, щоб за замовчуванням був обраний перший перемикач.
    1.  Отримуємо наступний вигляд:

  1.  Клацніть по вкладці Список призовників по року. Помістіть на неї компоненти Label, Edit (вкладка Standard) і BitBtn (вкладка Additional).
    1.  Перейменуйте і розмістіть компоненти наступним чином:

Для того, щоб зробити шрифт жирним, використовуйте властивість Font компоненту. Щоб розмістити на кнопці малюнок використовуйте властивість Glyph. Стандартні заготовки Delphi розташовані в папці: С: \ Program Files \ Common Files \ Borland Shared \ Images. Виберіть каталог Buttons файл Chek.Возможни ваші варіанти.

  1.  Таким же чином оформимо вкладки Придатні призовники по району та Список по початковій букві прізвища.

На цьому «оформлювальна робота» закінчена. Приступимо до програмування.

  1.  Створіть наступний обробник події OnClick для компонента RadioGroup1:

procedure Tform1.RadioGroup1Click(Sender: Tobject);

var Kolp, Kolnp, I:integer;

begin

Case RadioGroup1.ItemIndex of

  0 : begin   {если выбран первый переключатель}

       query1.SQL.Clear;   {закрываем запрос}

       query1.SQL.Add('Select *from MainTable'); {в лапках йде SQL запрос}

       query1.Open;

      end;

  1 : begin

       query1.SQL.Clear;

       query1.SQL.Add(‘Select *from MainTable where goden = true’);

       query1.Open;

      end;

  2 : begin

       Table1.First;

       Kolp:=0;Kolnp:=0;

       for I:=1 to Table1.RecordCount do

          Begin

            if (Table1.FieldByName(‘goden’).AsBoolean = true) then

                   Kolp:=Kolp + 1

             else  KolnP:=KolnP + 1;

           Table1.Next;  

          end;

        Messagedlg(Кількість годних = '+IntToStr(KolP)+#13+

                   'Кількість негодних = '+IntToStr(KolnP),mtInformation,[mbOk],0);

      end;

  3 : begin

       query1.SQL.Clear;

       query1.SQL.Add(‘Select *from MainTable order by surname ASC’);

       query1.Open;

       end;

  4 : begin

       query1.SQL.Clear;

       query1.SQL.Add(‘Select *from MainTable order by surname DESC’);

       query1.Open;

      end;

  5 : begin

       query1.SQL.Clear;

       query1.SQL.Add(‘Select *from MainTable where databorn = (Select min(databorn) from MainTable)’);

       query1.Open;

      end;

  6 : begin

       query1.SQL.Clear;

       query1.SQL.Add(‘Select *from MainTable where databorn = (Select max(databorn) from MainTable)’);

       query1.Open;

      end;       end;    end;

  1.   Перейменуйте компонент DataSorce2 в QueryDataSorce (змінюючи властивість Name). Задайте його властивості DataSet значення Query1. 
  2.  Зв'яжіть компонент DBGrid2 з компонентом Query1 за допомогою компонента QueryDataSorce (виберіть його зі списку у властивості DataSorce компонента DBGrid2).
  3.   Для компонента Query1 виберіть у властивості DateBaseName свій Alias.
  4.  У властивості SQL компонента напишіть: select * from maintable.db
  5.   Задайте властивості Active компонента Query1 значення True.
  6.   Подвійним клацанням по компоненту Query1 викличте редактор полів. Перейменуйте поля, як це робили раніше, з компонентом Table1.
  7.  Запустіть програму на виконання і подивіться на результат.
  8.  Для події OnClick кнопки «Скласти список» вкладки «Список призовників по року» запишіть обробник:

procedure Tform1.BitBtn1Click(Sender: Tobject);

var sData,S:AnsiString;

begin

sData:=Edit1.Text;

if sData=’’ then

begin

ShowMessage(‘Рік не введен!’);

 exit

end;

S:=’Select *from MainTable where databorn <= ‘’01.01.’+ IntToStr(StrToInt(Edit1.Text)-18)+’’’’;

query1.SQL.Clear;

query1.SQL.Add(S);

query1.Open;

end;

  1.  14. Для події OnClick кнопки «Показати» вкладки «Список по початковій букві прізвища» запишіть обробник:

procedure Tform1.BitBtn3Click(Sender: Tobject);

var S,s1,s2 : AnsiString;

begin

s2:=’%’;

s1 := ‘’’’ + Edit3.Text + s2 +’’’’;

S:=’Select *from MainTable where surname Like’+s1;

 query1.SQL.Clear;

 query1.SQL.Add(S);

 query1.Open;

end;

  1.   Для події OnClick кнопки «Вивести кількість по району» вкладки «Придатні призовники по району» запишіть обробник:

procedure Tform1.BitBtn2Click(Sender: Tobject);

var KolP,I:integer;

begin

Table1.First;

       KolP:=0;

       for I:=1 to Table1.RecordCount do

          Begin

            if ((Table1.FieldByName(‘goden’).AsBoolean = true) and (Table1.FieldByName(‘rayon’).AsString = Edit2.Text)) then

            KolP:=Kolp + 1;

           Table1.Next;

          end;

        Messagedlg(‘Количество годных по району ‘+ Edit2.Text+’ = ‘+IntToStr(KolP),mtInformation,[mbOk],0);

Edit2.Text:=’’;

end;

  1.   Обробіть подію OnClick для пунктів меню:
    1.   Для підпункту Введення інформації:

procedure Tform1.N2Click(Sender: Tobject);

begin

       Pagecontrol1.ActivePageIndex := 0;

end;

  1.  Для підпункту Пошук даних:

procedure Tform1.N3Click(Sender: Tobject);

begin

       Pagecontrol1.ActivePageIndex := 1;

end;

  1.  Для підпункту Копіювання таблиці:

procedure Tform1.N6Click(Sender: Tobject);

begin

Query1.Close;    Query1.SQL.Clear;

Query1.SQL.Add(‘insert into ArhivTable select * from maintable’);

Query1.ExecSQL;   Query1.Close;

Query1.SQL.Clear;

Query1.SQL.Add(‘select * from ArhivTable’);

Query1.Open;

ShowMessage('Архивная таблица создана!')

end;

  1.  Для підпункту Вихід:

procedure Tform1.N5Click(Sender: Tobject);

begin

 close

end;

  1.  В обробнику події OnCloseQuery для Form1 напишіть:

procedure Tform1.FormCloseQuery(Sender: Tobject; var CanClose: Boolean);

begin

if (Messagedlg(‘Выйти из программы?’, mtConfirmation, [mbYes,mbNo], 0)=mrYes) then   Canclose := true

else CanClose := false;

end;

Створення звітів

  1.  Створіть нову форму. Помістіть на неї компонент QuickRep, який розташований на вкладці QReport.
  2.  Помістіть на форму компонент Query. Виберіть у властивості DatabaseName свій Alias. Клацніть по властивості SQL і напишемо в редакторі списку рядків наступне:select * from MainTable where goden = true
  3.  Встановіть властивості DataSet компонента QuickRep1 значення Query1.
  4.  Помістимо на створений звіт два компоненти QRBand (все знаходиться на вкладці QReport).Перший з них буде заголовком звіту. Помістіть на нього компонент QRLabel - статичний текст, який буде помешен на звіт. У його властивості Caption напишіть Список юнаків, придатних до служби. Відформатуйте заголовок, скориставшись властивістю компонента Font, на свій розсуд.
  5.  Для другого компонента QRBand2 змініть його властивість BandType на rbDetal.Помістіть на смугу звіту QRBand2 чотири компоненти QRDBText. У властивості DataSet кожного з них виберіть Query1. У властивості DataField виберіть назву полів. Для вирівнювання компонентів QRDBText виберіть їх усі, утримуючи клавішу Shift, потім клацніть по ним правою клавішею та виберіть у меню пункт Позиція - Вирівняти.У вікні Вирівнювання задайте параметри:

Клацнувши правою клавішею за звітом, можна вибрати пункт Preview і подивитися, що вийшло.

  1.  Для того щоб, в кінці звіту виводилося загальне число придатних або не придатних до служби юнаків необхідно помістити на звіт ще один компонент - QRBand3. Змініть його властивість BandType на rbSummary.
  2.  Помістіть на підсумкову смугу звіту QRExpr.
  3.  Клацнемо по властивості компонента Expression і виберемо у вікні функцію Count

  1.  Додайте самостійно на підсумкову смугу напис Загальне число. Для цього на нижню смугу звіту необхідно помістити компонент QRLabel і змінити відповідним чином властивість Caption.
  2.  Поверніться на Form1. Додайте в меню наступні пункти:

  1.  Для обробника події OnClick пункту меню Придатні напишіть код:

 form2.Query1.Close;   

form2.Query1.SQL.Clear;

form2.Query1.SQL.add('select * from MainTable where goden=true');

form2.Query1.Active:=true;   

form2.QuickRep1.Preview

  1.  Для обробника події OnClick пункту меню Чи не придатні напишіть код:

form2.Query1.Close;  form2.Query1.SQL.Clear;

form2.Query1.SQL.add('select * from MainTable where goden=false');

form2.Query1.Active:=true;  form2.QuickRep1.Preview

  1.  Додайте самостійно заголовки стовпців таблиці. Для цього на верхню смугу звіту необхідно помістити компоненти QRLabel і змінити відповідним чином властивість Caption.
  2.  Запус програму і попрацюйте в ній.
  3.  Збережіть проект у папці Військкомат, давши відповідну назву проекту та формами.
  4.  Виконайте самостійно наступне завдання.

Варіант контрольного завдання:

№ вар.

Завдання

1

У каталозі студій звукозапису є такі дані: назва групи, назва альбому, рік випуску альбому, назва студії.

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

  •   Працювати в двох режимах: введення і пошуку інформації
  •   В режимі пошуку сформувати такі запити:
  1.  вивести таблицю груп, що випустили альбом в заданому році.
  2.  вивести таблицю груп, що випустили альбом на заданій студії.
  3.  вивести таблицю груп, назва яких починається на задану букву.
  4.  в окремому вікні виводити таблицю назв груп і кількості, випущених ними альбомів.
  •   Забезпечити сортування по групам і за альбомами в порядку зростання або в порядку убування.
  •   Створити таблицю archive аналогічної структури. Скопіювати в неї всі дані з основної таблиці.
  •   Вивести до звіту відсортований за групами, а потім за назвами альбомів список. У кінці звіту має бути зазначена загальна кількість альбомів.
  1.  Оформіть звіт по лабораторній роботі: тема і мета роботи; послідовність виконання роботи, завдання до лабораторної роботи.




1. Правовое регулирование деятельности Федеральной службы охраны Российской Федерации 1
2.  Фазовый и структурный анализ диаграммы FeFeзС
3. Савиновского района г
4. Тема- Поточний ремонт вимикачі АБ2-3 та АБ2-4
5. наступает момент учета итогов дня определения потерь и завоеваний
6. статья основывается на гипотезе что развитие информационных технологий существенным образом видоизменяет
7. Тепло-, газоснабжение и вентиляция здания
8. ХIХ века общественная и политическая жизнь во многом ориентировалась на прошлое а не на будущее
9. Гомельский государственный университет имени Франциска Скорины Юридический факультет Кафедра пол
10. визначення стану злочинності її рівня структури й динаміки; виявлення причин і умов що сприяли вчиненн
11. 08.2006 584 Протокол медичного догляду за новонародженою дитиною з малою масою тіла при
12. Юзеф Пилсудский
13. РОЩИНСКОЕ ГОРОДСКОЕ ПОСЕЛЕНИЕ ВЫБОРГСКОГО РАЙОНА ЛЕНИНГРАДСКОЙ ОБЛАСТИ П О С Т А Н О В Л Е Н И Е от 2
14. консультант должен отправлять корректные отчеты вовремя Смсотчет.
15. Краткое доказательство гипотезы Билля
16. тематика Корана выборка по форме Контрольной работы 3
17. Оратор и его аудитория
18. Петропавловская крепость
19. на тему- ldquo;Культура класичного арабського Сходуrdquo; Виконав роботу студент групи ЗР2
20. Введение Медицина гордится тем что является основанной на науке практической деятельностью которая пров