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

Лабораторна робота № 2 Тема: "Прийоми обробки однотипних компонентів "

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

 

Хід роботи

 

Завдання 1 (універсальний оброблювач для групи компонентів)

 

1. Створити програму, яка емулює вікно набору телефонного номера. Програма містить форму виду:

 

 

 

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

 

Вказівки: Для форми задайте властивості: Borderstyle=bsdialog, Caption=Універсальний код. На форму нанесіть потрібну кількість кнопок Button (Standard).

Для кожної з кнопок задайте властивості: Caption=цифра або символи "*", "#".

Для розміщення зображення нанесіть на форму компонент Image (Additional) і задайте властивості: Stretch=true, Picture=файл зображення, Transparent=true. Зображення телефону знайдіть на сайті http://www.findicons.com у формат bmp.

 

2. Для реакції кнопок на натискання потрібно створити універсальну процедуру, яка залежно від натиснутої кнопки буде вводити відповідний символ. Кнопки можна розрізнити за властивостю Captrion, яку ми задали раніше.

 

Вказівки: Для першої кнопки у події OnClick введіть код:

 

procedure Tform1.Button1Click(Sender: Tobject);

begin

     edit1.Text:=edit1.Text+tbutton(activecontrol).caption;

end;

 

Усі кнопки повинні при натисканні виконувати такий самий код. Для цього втримуючи Shift виділіть всі кнопки на формі, у вікні завдання властивостей перейдіть на закладку Events і у події Onclick оберіть у списку рядок Button1Click.

Таким чином для всіх кнопок у події OnClick буде виконуватися код із події першої кнопки.

 

Завдання 2. Робота з масивами однотипних компонентів

 

1. Створіть програму для обробки масиву текстових полів. Програма має форму виду:

 

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

 

Вказівки: для форми задайте властивості: Borderstyle=bsdialog, Caption=Масиви компонентів. На форму нанесіть потрібну кількість полів Edit (Standard) для вихідних даних, ще одне поле для результату. Для кожного поля очистіть властивість Text. Поле результату потрібно відділити від масиву полів. Для цього в його властивості Tag введіть 1.

Для створення групи перемикачів нанесіть на форму Radiogroup (Standard) і задайте властивості: Items = перелік назв перемикачів, Itemindex=0 (номер обраного перемикача за замовчуванням).

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

 

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

 

Вказівки: для кнопки Button1 у події Onclick уведіть код:

 

procedure Tform1.Button1Click(Sender: Tobject);

var rez:real; i,kol:integer;

begin

    //визначаємо, який перемикач обраний в radiogroup

    case radiogroup1.Itemindex of

       

        //якщо обрано перший перемикач, то знаходимо максимальне значення

        0:

        begin

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

             rez:=-100000;

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

            for i:=0 to controlcount-1 do

                //якщо i-й компонент поле (classname='TEdit')

                //і якщо i-й компонент не поле відповіді (це поле має tag=1)

                if (controls[i].classname='TEdit') and (controls[i].tag<>1) then

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

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

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

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

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

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

 

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

            if rez<>-100000 then

                //у полі відображаємо результат

                edit31.Text:=floattostr(rez)

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

            else

                //поле залишається пустим

                edit31.text:='';

        end;

       

        //якщо обрано другий перемикач, то знаходимо мінімальне значення

        1:

        begin

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

             rez:=100000;

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

            for i:=0 to controlcount-1 do

                //якщо i-й компонент поле (classname='TEdit')

                //і якщо i-й компонент не поле відповіді (це поле має tag=1)

                if (controls[i].classname='TEdit') and (controls[i].tag<>1) then

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

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

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

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

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

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

 

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

            if rez<>100000 then

                //у полі відображаємо результат

                edit31.Text:=floattostr(rez)

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

            else

                //поле залишається пустим

                edit31.text:='';

        end;

 

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

        2:

        begin

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

            rez:=0;

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

            for i:=0 to controlcount-1 do

                //якщо i-й компонент поле (classname='TEdit')

                //і якщо i-й компонент не поле відповіді (це поле має tag=1)

                if (controls[i].classname='TEdit') and (controls[i].tag<>1) then

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

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

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

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

             //у полі відображаємо результат

            edit31.Text:=floattostr(rez)

        end;

       

        //якщо обрано четвертий перемикач, то знаходимо середнє

        3:

        begin

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

            rez:=0;

            kol:=0;

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

            for i:=0 to controlcount-1 do

                //якщо i-й компонент поле (classname='TEdit')

                //і якщо i-й компонент не поле відповіді (це поле має tag=1)

                if (controls[i].classname='TEdit') and (controls[i].tag<>1) then

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

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

                    begin

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

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

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

                        kol:=kol+1;

                    end;

   

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

            if kol>0 then

                //у полі відображаємо результат

                edit31.Text:=floattostr(rez)

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

            else

                //поле залишається пустим

                edit31.text:='';

        end;

    end;

end;

 

3. Кнопка "Очистити" очищає всі текстові поля на формі.

 

Вказівки:  Для кнопки "Очистити" у події OnClick введіть код:

 

procedure Tform1.Button2Click(Sender: Tobject);

var i:integer;

begin

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

    for i:=0 to controlcount-1 do

        //якщо i-й компонент - поле (classname='TEdit')

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

            //очищаємо цей компонент

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

end; 

 

Завдання 3. Сортування даних

 

1. Створіть програму для сортування даних у текстових полях. Програма містить форму виду:

 

 

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

 

Вказівки: Для форми задайте властивості: Borderstyle=bsdialog, Caption=Сортування даних. На форму нанесіть потрібну кількість полів Edit (Standard) для вихідних даних. Для кожного поля очистіть властивість Text.

Для створення групи перемикачів нанесіть на форму Radiogroup (Standard) і задайте властивості: Items = перелік назв перемикачів, Itemindex=0 (номер обраного перемикача за замовчуванням), Columns=2 (число стовпчиків перемикачів).

Нанесіть кнопку Button (Standard) і у властивості Caption укажіть її напис.

 

Для кнопки введіть код:

 

procedure TForm1.Button1Click(Sender: TObject);

var

    //лічильники

    i,k,n:integer;

    //буферна змінна для обміну даними

    b:real;

    //масив для сортування

    mas:array[1..100] of real;

 

begin

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

    n:=0;

 

    //переписуємо у масив значення полів

    for i:= 0 to controlcount-1 do

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

        begin

            n:=n+1;

            mas[n]:=strtofloat(tedit(controls[i]).text);

        end;

 

    //сортуємо массив

    case radiogroup1.ItemIndex of

    //якщо обрано перший перемикач

    0:

        //сортуємо масив за зростанням

        for k:= n-1 downto 1 do

            for i:= 1 to k do

                if mas[i]>mas[i+1] then

                begin

                    b:= mas[i];

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

                    mas[i+1]:= b;

                end;

    //якщо обрано другий перемикач

    1:

        //сортуємо масив за убуванням

        for k:= n-1 downto 1 do

            for i:= 1 to k do

                if mas[i]<mas[i+1] then

                begin

                    b:= mas[i];

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

                    mas[i+1]:= b;

                end;

    end;

 

    //виводимо масив в поля на формі

    //спочатку жодного елементу масиву не виведено

    n:=0;

 

    //цикл для виведення масиву

    for i:= 0 to controlcount-1 do

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

        begin

            n:=n+1;

            tedit(controls[i]).text:=floattostr(mas[n]);

        end;

end;