Види навчальної діяльності
Виконуємо самостійно
- Завдання 1. У магазині утворилася черга з 5-ти покупців. Час обслуговування кожного покупця в черзі подано в таблиці. У вибраному середовищі програмування створіть проект Черга, у якому можна отримати: а) номер покупця, якого обслуговували найкоротший час; б) час найтривалішого обслуговування у черзі; в) лінійну таблицю або список із сумарним часом очікування свого обслуговування кожним покупцем.
- Створення проекту з використанням мови Object Pascal
- Відкрийте середовище Lazarus, створіть новий проект, розмістіть на екранній формі об'єкти, як показано на скріншоті, надайте значення їхнім властивостям самостійно.
- Опишіть глобальний масив duration_of_service[1..5], який зберігатиме значення часу обслуговування для кожного покупця.
- Створіть процедуру опрацювання події OnCreate для форми. Проаналізуйте програмний код і використайте його у процедурі.
- Створіть процедуру опрацювання події OnClick для кнопки Визначити.
- Виконайте проект і проаналізуйте результати. Якщо є помилки, виправте їх і збережіть зміни. Зверніть увагу, для компонента StringGrid2 змінюється значення його властивості Visible, що дозволяє приховувати компонент після створення форми і показувати його на формі після натискання кнопки Визначити.
var
Form1: TForm1;
duration_of_service: array[1..5] of integer = (140, 215, 75, 130, 85);
implementation
procedure TForm1.FormCreate(Sender: TObject);
var i: Integer;
begin
StringGrid1.Cells[0,0] := 'Покупці';
StringGrid1.Cells[0,1] := 'Тривалість, с';
StringGrid2.Cells[0,0] := 'Покупці';
StringGrid2.Cells[0,1] := 'Тривалість, с';
For i := 1 to 5 do
begin
StringGrid1.Cells[i,0] := IntToStr(i) + ' покупець';
StringGrid2.Cells[i,0] := IntToStr(i) + ' покупець';
// виведення елементів масиву у таблицю
StringGrid1.Cells[i,1] := IntToStr(duration_of_service[i]);
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var i, nmin, tmax, min, s: integer;
begin
// пошук номера найменшого
nmin := 1;
min := duration_of_service[1];
for i := 2 to 5 do
if duration_of_service[i] < min then
begin
nmin := i;
min := duration_of_service[i];
end;
Edit1.Text := IntToStr(nmin);
// пошук найбільшого елемента
tmax := duration_of_service[1];
for i := 2 to 5 do
if duration_of_service[i] > tmax then tmax := duration_of_service[i];
Edit2.Text := IntToStr(tmax);
// створення та виведення нової таблиці із часом очікування
s := 0;
for i := 1 to 5 do
begin
s := s + duration_of_service[i];
StringGrid2.Cells[i,1] := IntToStr(s);
end;
StringGrid2.Visible := True;
end;
- Створення проекту з використанням мови Python
- Відкрийте середовище програмування мовою Python, створіть новий файл і збережіть його під іменем Обслуговування черги.
- У вікні редактора коду запишіть команди для реалізації проекту. Проаналізуйте кожен рядок програмного коду.
- Запустіть проект на виконання. Якщо є помилки - виправте їх. Збережіть зміни.
# список із значеннями часу обслуговування 5-ти покупців
service_time = [140, 215, 75, 130, 85]
# номер покупця, якого обслуговували найшвидше
min_n = service_time.index(min(service_time))
# максимальне значення списку - час найтривалішого обслуговування у черзі
max_element = max(service_time)
# новий список - міститиме значення часу очікування у черзі для кожного покупця
waiting_time = []
# t - час очікування
t = 0
print('Час обслуговування: ')
for i in range(len(service_time)):
print('{0}-й покупець: {1} сек.'.format(i + 1, service_time[i]))
t += service_time[i]
waiting_time.append(t)
print('\nНомер покупця, якого обслуговували найшвидше:', min_n + 1)
print('\nЧас найтривалішого обслуговування у черзі:', max_element, 'ceк.')
print('\nТривалість очікування: ')
for i in range(len(waiting_time)):
print('{0}-й покупець: {1} сек.'.format(i + 1, waiting_time[i]))
- Завдання 2. Створіть проект Табель, у якому реалізовано електронний табель. У проекті передбачте, що в лінійній таблиці задають назви предметів, які вивчає учень. Елементи управління екранної форми передбачають можливість: а) за номером предмета дізнатись оцінку з відповідного предмета; б) отримати дані про максимальну оцінку з предметів, що вивчаються; в) отримати кількість предметів, які мають найвищу та найнижчу оцінки; г) середній бал успішності.
- Створення проекту з використанням мови Object Pascal
- Відкрийте середовище Lazarus і створіть новий проект, розмістіть на екранній формі об'єкти, як на скріншоті, самостійно надайте значення їхнім властивостям.
- Створіть процедуру опрацювання події OnClick для кнопки Обчислити. Використовуючи поданий програмний код, проаналізуйте і застосуйте його.
- Запустіть проект на виконання і проаналізуйте результати виконання. У разі появи помилок, виправте їх і збережіть зміни.
procedure TForm1.Button1Click(Sender: TObject);
var i, n, oz, max, kmax, kmin, min: integer;
s: real;
a: array[1..7] of integer;
begin
// введення елементів масиву
for i := 1 to 7 do
a[i] := StrToInt(StringGrid1.cells[i,1]);
// виведення елемента масиву за номером
n := StrToInt(Edit1.Text);
oz := a[n];
Edit2.Text := IntToStr(oz);
// знаходження найбільшого та найменшого елемента масиву, суми елементів
max := a[1];
min := a[1];
s := a[1];
for i := 2 to 7 do
begin
s := s + a[i];
if a[i] < min then min := a[i];
if a[i] > max then max := a[i];
end;
// виведення найбільшого та середнього значення елеменів масиву
s := s / 7;
Edit3.Text := IntTostr(max);
Edit6.Text := FloatToStr(s);
// знаходження кількості найбільших та найменших елементів масиву
kmin := 0;
kmax := 0;
for i := 1 to 7 do
begin
if a[i] = max then kmax := kmax + 1;
if a[i] = min then kmin := kmin + 1;
end;
Edit4.Text := IntToStr(kmin);
Edit5.Text := IntToStr(kmax);
end;
- Завдання 3. Створіть проект Шаховий турнір за поданою таблицею результатів шкільного шахового турніру, у якому брало участь 5 команд. Визначте команду-переможницю і призерів турніру.
- Створення проекту з використанням мови Object Pascal
- Відкрийте середовище Lazarus і створіть новий проект, розмістіть на екранній формі об'єкти, як на скріншоті, самостійно надайте значення їхнім властивостям. Компонент StringGrid призначено для виведення турнірної таблиці (таблиця заповнюється через контекстне меню, пункт Змінити StringGrid...); компонент Memo - для виведення масиву рейтингу; компонент ListBox - для виведення списку призерів.
- Опишіть глобальний масив Tur: array[1..5, 1..6] of Integer; для збереження турнірної таблиці.
- У процедурі обробки події OnCreate для форми запишіть оператори для виведення заголовків рядків і стовпців таблиці StringGrid1. Заголовку шостого стовпця надайте значення Сума.
- У процедурі обробки події OnClick для кнопки Занести бали до масиву запишіть програмний код, що реалізує читання значень із таблиці StringGrid1 і присвоєння цих значень елементам масиву Tur.
- Обчисліть суму балів кожної команди-учасниці. Для цього в процедурі обробки події OnClick для кнопки Знайти суму балів команд запишіть оператори для заповнення шостого стовпця таблиці.
- Визначте рейтинг команд і розташуйте їхні номери за зменшенням суми балів. Найбільша сума балів, яку може отримати кожна команда в ході турніру, дорівнює 8 (чотири перемоги). Тому для кнопки Визначити рейтинг процедура додавання до масиву Memo1.Lines[k] номерів команд за зменшенням суми балів може бути наступною:
- У процедурі обробки події OnClick для кнопки Визначити переможців запишіть програмний код для виведення трьох перших елементів масиву Memo1.Lines[k] як номерів команд-призерок турніру.
- Перевірте правильність роботи програми, заповнивши турнірну таблицю, як на зразку. Числа в таблиці означають: 2 - виграш, 1 - нічия, 0 - програш.
- Запустіть проект на виконання для різних варіантів заповнення турнірної таблиці.
- Збережіть проект. Зробіть висновок: як застосувати алгоритми пошуку значень у масиві до розв'язування задач.
var
Form1: TForm1;
Tur: array[1..5, 1..6] of Integer;
implementation
procedure TForm1.FormCreate(Sender: TObject);
var i, j: Integer;
begin
For i := 1 to 5 do StringGrid1.Cells[0, i] := IntToStr(i);
For j := 1 to 5 do StringGrid1.Cells[j, 0] := IntToStr(j);
StringGrid1.Cells[6, 0] := 'Сума';
end;
procedure TForm1.Button1Click(Sender: TObject);
var i, j: Integer;
begin
For i := 1 to 5 do
For j := 1 to 5 do
If Length(StringGrid1.Cells[j,i]) <> 0
then Tur[i,j] := StrToInt(StringGrid1.Cells[j,i])
else Tur[i,j] := 0;
end;
procedure TForm1.Button2Click(Sender: TObject);
var sum, i, j: Integer;
begin
For i := 1 to 5 do
begin
sum := 0;
For j := 1 to 5 do Sum := sum + Tur[i,j];
Tur[i,6] := sum;
StringGrid1.Cells[6,i] := IntToStr(Tur[i,6]);
end;
end;
procedure TForm1.Button3Click(Sender: TObject);
var i, N, k: Integer;
begin
k := 0;
For N := 8 downto 0 do
For i := 1 to 5 do
If Tur[i, 6] = N Then
begin
Memo1.Lines[k] := IntToStr(i);
k := k + 1;
end;
end;
procedure TForm1.Button4Click(Sender: TObject);
begin
ListBox1.Items.Add('І місце - ' + Memo1.Lines[0] + ' команда.');
ListBox1.Items.Add('ІІ місце - ' + Memo1.Lines[1] + ' команда.');
ListBox1.Items.Add('ІІІ місце - ' + Memo1.Lines[2] + ' команда.');
end;
Домашнє завдання
- Опрацювати підручник: повторити §36-§39, с. 177-224 (Інформатика, 9 клас, автори: Бондаренко О. О., Ластовецький В. В., Пилипчук О. П., Шестопалов Є. А.)