Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторні роботи КПЗ.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
2.24 Mб
Скачать

Лабораторна робота № 3 Тема: Створення незалежних модулів для зберігання незалежних процедур

Ціль заняття: отримати практичні навички по створенню програмних модулів і їх використанню в різних проектах

 

Хід роботи

 

Завдання 1. Модуль із діалогами

Створіть модульний файл із описом стандартних діалогів для видалення даних, очищення даних, виходу із програми. Усі діалоги оформити у вигляді логічних функцій.

 

Вказівки: У середовищі Delphi виконайте команду File - New - Unit. У вікні, що з'явилося, уведіть назву модуля Dialogy. За допомогою команди File - Save As збережіть модуль під ім'ям Dialogy.pas.

У вікні коду перейдіть на закладку Unit1 і скопіюйте всі модулі з розділу Uses у код створюваного вами модуля.

У розділі Interface уведіть заголовки підпрограм-функцій:

 

function delete_data:boolean; //функція видалення даних

function clear_data:boolean; //функція очищення даних

function exit:boolean; //функція виходу

 

У розділі Implementation уведіть код реалізації функцій:

 

//функція діалогу видалення даних

function delete_data:boolean;

begin

    if application.messagebox('Вилучити дані?', 'Підтвердьте операцію', mb_yesno + mb_iconquestion + mb_defbutton2) = idyes then

            delete_data:=true

    else

            delete_data:=false;

end;

 

//функція діалогу очищення даних даних

function clear_data:boolean;

begin

    if application.messagebox('Очистити дані?', 'Підтвердьте операцію', mb_yesno + mb_iconquestion + mb_defbutton2)=idyes then

            clear_data:=true

    else

            clear_data:=false;

end;

 

//функція діалогу виходу із програми

function exit:boolean;

begin

    if application.messagebox('Вийти із програми?', 'Підтвердьте вихід', mb_yesno + mb_iconquestion + mb_defbutton2)=idyes then

            exit:=true

    else

            exit:=false;

end;

 

Створіть новий проект із довільною формою.

 

 

 

На формі розмістіть два текстові поля й кнопку для очищення полів. Використовуючи підпрограми-функції зі створеного модуля написати код для очищення полів і виходу із програми.

 

Вказівки. Скопіюйте створений файл модуля Dialogy.pas у папку з новою програмою. У коді форми в розділі Uses підключіть створений модуль Dialogy.

Для кнопки на формі напишіть код:

 

procedure Tform1.Button1Click(Sender: Tobject);

begin

    //якщо функція рівна true   

    if clear_data=true then

    begin

        edit1.text:='';

        edit2.text:='';

    end;

end;

 

Для обробки виходу із програми в події Onclosequery напишемо код:

 

procedure Tform1.Formclosequery(Sender: Tobject; var Canclose: Boolean);

begin

    canclose:=exit;

end;

 

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

 

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

 

Вказівки: У середовищі Delphi виконайте команду File - New - Unit. У вікні, що з'явилося, уведіть назву модуля Massiv. За допомогою команди File - Save As збережіть модуль під ім'ям Massiv.pas.

У вікні коду перейдіть на закладку Unit1 і скопіюйте всі модулі з розділу Uses у код створюваного вами модуля.

 

Усі підпрограми будуть мати вхідний параметр :

 

f:tform - змінна для звертання до деякої віртуальної форми.

 

У розділі Interface уведіть заголовки підпрограм:

 

function max_mas(f:tform):real; //функція знаходження максимального

function min_mas(f:tform):real; //функція знаходження мінімального

function sum_mas(f:tform):real; //функція знаходження суми

function sred_mas(f:tform):real; //функція знаходження середнього

procedure clear_mas(f:tform); //процедура очищення масиву

 

У розділі Implementation уведіть код реалізації підпрограм:

 

//функція знаходження максимального

function max_mas(f:tform):real;

var rez:real; i:integer;

begin

    //спочатку максимум нескінченно малий

    rez:=-100000;

    //у циклі проходимо по всіх компонентах форми

    for i:=0 to f.controlcount-1 do

        //якщо i-й компонент - текстове поле

        if f.controls[i].classname='TEdit' then

            //якщо i-й компонент-поле не порожній

            if tedit(f.controls[i]).text<>'' then

                //якщо значення i-го компонента більше максимуму

                if rezrez<strtofloat(tedit(f.controls[i]).text) then<="" p="">

                    //запам'ятовуємо це поле як максимальне

                    rez:=strtofloat(tedit(f.controls[i]).text);

 

    //якщо результат не нескінченно малий (були введені дані)

    if rez<>-100000 then

        //функції привласнюємо результат

        max_mas:=rez

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

    else

        //функції привласнюємо 0

        max_mas:=0;

end;

 

//функція знаходження мінімального

function min_mas(f:tform):real;

var rez:real; i:integer;

begin

    //спочатку мінімум нескінченно великий

    rez:=100000;

    //у циклі проходимо по всіх компонентах форми

    for i:=0 to f.controlcount-1 do

        //якщо i-й компонент - текстове поле

        if f.controls[i].classname='TEdit' then

            //якщо i-й компонент-поле не порожній

            if tedit(f.controls[i]).text<>'' then

                //якщо значення i-го компонента менше мінімуму

                if rez>strtofloat(tedit(f.controls[i]).text) then

                    //запам'ятовуємо це поле як мінімальне

                    rez:=strtofloat(tedit(f.controls[i]).text);

 

    //якщо результат не нескінченно великий (були введені дані)

    if rez<>100000 then

        //функції привласнюємо результат

        min_mas:=rez

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

    else

        //функції привласнюємо 0

        min_mas:=0;

end;

 

//функція знаходження суми

function sum_mas(f:tform):real;

var rez:real; i:integer;

begin

    //спочатку сума обнулюється

    rez:=0;

    //у циклі проходимо по всіх компонентах форми

    for i:=0 to f.controlcount-1 do

        //якщо i-й компонент - текстове поле

        if f.controls[i].classname='TEdit' then

            //якщо i-й компонент-поле не порожній

            if tedit(f.controls[i]).text<>'' then

                // до суми додаємо значення цього поля

                rez:=rez+strtofloat(tedit(f.controls[i]).text);

 

    //функції привласнюємо результат

    sum_mas:=rez;

end;

 

//функція знаходження середнього

function sred_mas(f:tform):real;

var rez:real; i,kol:integer;

begin

    //обнулюємо суму й кількість

    rez:=0;

    kol:=0;

    //у циклі проходимо по всіх компонентах форми

    for i:=0 to f.controlcount-1 do

        //якщо i-й компонент - текстове поле

        if f.controls[i].classname='TEdit' then

            //якщо i-й компонент-поле не порожній

            if tedit(f.controls[i]).text<>'' then

            begin

                // до суми додаємо значення цього поля

                rez:=rez+strtofloat(tedit(f.controls[i]).text);

                //збільшуємо кількість елементів на 1

                kol:=kol+1;

            end;

   

    //якщо кількість > 0 ( є непусті елементи)

    if kol>0 then

        //функції привласнюємо знайдене середнє

        // для використання функції roundto підключіть модуль Math

        sred_mas:=roundto(rez/kol,-2)

    //інакше, якщо кількість = 0 (немає введених елементів)

    else

        //функції привласнюємо 0

        sred_mas:=0;

end;

 

//процедура очищення масиву

procedure clear_mas(f:tform);

var rez:real; i,kol:integer;

begin

    //у циклі проходимо по всіх компонентах форми

    for i:=0 to f.controlcount-1 do

        //якщо i-й компонент - текстове поле

        if f.controls[i].classname='TEdit' then

            //очищаємо поле

            tedit(f.controls[i]).text:='';

end;

 

Створіть новий проект із формою виду:

 

 

Вказівки: Для форми задайте властивості: Bordericon-bimaximized=false, Borderstyle=bssingle, Caption=Робота з модулями, Position=Desktopcenter.

На форму нанесіть поле Edit (Standard) і очистіть його властивість Text. Скопіюйте це поле ще 19 разів і розмістіть масив полів як показано на малюнку.

Нанесіть на форму компонент Radiogroup (Standard). У властивості Items уведіть назви перемикачів, у властивості Itemindex укажіть значення 0, щоб перший перемикач був обраний за замовчуванням.

Нанесіть на форму дві кнопки Button (Standard) і у властивості Caption задайте їхні написи.

Нанесіть на форму компонент Label (Standard). У властивості Caption задайте текст 'Відповідь:', у властивості Font укажіть параметри форматування тексту.

 

Для кнопки Розрахунок напишіть код, який залежно від обраного перемикача підраховує потрібне значення й відображає на формі за допомогою мітки Label1. Розрахунки виконувати за допомогою підпрограм-функцій з модуля Massiv.

 

Вказівки. Скопіюйте файл модуля Massiv.pas у папку з вашою програмою. Для використання створених підпрограм-функцій у коді модуля форми підключіть модуль Massiv.

Для кнопки напишіть код:

 

procedure Tform1.Button1Click(Sender: Tobject);

begin

    //викликаємо функції з параметром:

    //form1 - ім'я форми, на якій ці поля розташовані

    case radiogroup1.Itemindex of

        0: label1.caption:='Відповідь: '+floattostr(max_mas(form1));

        1: label1.caption:='Відповідь: '+floattostr(min_mas(form1));

        2: label1.caption:='Відповідь: '+floattostr(sum_mas(form1));

        3: label1.caption:='Відповідь: '+floattostr(sred_mas(form1));

    end;

end;

 

Для кнопки Очистити напишіть код, який очищає масив полів. При цьому діалог запиту на очищення викликається за допомогою функції clear_data з модуля Dialogy.

 

Вказівки. Скопіюйте файл модуля Dialogy.pas у папку із програмою. У коді форми підключіть модуль Dialogy.

Для кнопки напишіть код:

 

procedure Tform1.Button2Click(Sender: Tobject);

begin

    //якщо функція clear_data=true

    if clear_data=true then

        //викликаємо процедуру очищення масиву

        clear_mas(form1);

end;

 

Для форми напишіть запит на вихід із програми з використання функції Exit з модуля Dialogy.

 

Вказівки: модуль Dialogy уже підключений у попередньому пункті завдання. Тому для форми в події Onclosequery напишемо код:

 

procedure Tform1.Formclosequery(Sender: Tobject; var Canclose: Boolean);

begin

    canclose:=exit;

end;