Увага! Під час роботи з комп'ютером дотримуйтеся правил безпеки і санітарно-гігієнічних норм.
Види навчальної діяльності
Виконуємо самостійно
- Завдання 1. Створити комп'ютерну програму, яка реалізує відому гру «Морський бій».
- Постановка задачі.
- Двовимірний масив А розмірністю 6x6 випадковим чином заповнено нулями та одиницями.
- Якщо A(i,j) = 1, то у відповідній позиції знаходиться корабель. Гравець задає координати елементу масиву і «стріляє».
- Якщо елемент з указаними індексами дорівнює 1, то виводиться повідомлення «Влучив!», значення лічильника влучень збільшується на 1. Якщо A(i,j) = 0, виводиться повідомлення «Не влучив!», місце влучення позначається кружком.
- Якщо гравець робить три невдалі спроби, виводиться повідомлення «Ти програв!».
- Якщо ж значення лічильника влучень зрівняється з кількістю кораблів, виводиться повідомлення «Ти виграв!».
- Побудова інформаційної моделі
- Визначення засобів опрацювання даних
- Підготовка графічних файлів за допомогою графічного редактора.
- Пошук в Інтернеті й опрацювання інформації про відображення графічних даних у комірках об'єкта StringGrid.
- Створення проекту з використанням мови Object Pascal і середовища Lazarus.
- Опрацювання даних
- Підготовка зображень. У графічному редакторі підготуйте малюнки для відображення етапів гри (або скористайтеся поданими нижче).
- Повторення навчального матеріалу
- Опрацювання двовимірних масивів.
- Використання компонентів Image, Edit, Button.
- Відображення графічних даних у комірках об'єкта StringGrid.
- Створення програми.
- Розробіть інтерфейс програми (наприклад, як на зразку).
- Опишіть глобальні змінні.
- У процедурі обробки події OnCreate для форми запрограмуйте заповнення випадковим чином нулями та одиницями масиву А і відображення значень A[i,j] у таблиці StringGrid.
- Для виведення малюнків у комірки StringGrid створіть для цього об'єкта обробник події OnDrawCell. Процедура StringGrid1DrawCell викликається під час кожного звернення до комірки StringGrid1DrawCell[j,i], значення індексів комірки (j,i) надаються параметрами aCol, aRow. Залежно від текстового значення StringGrid1DrawCell[j,i] до комірки виводиться малюнок з одного з об'єктів Image. Запишіть програмний код, поданий нижче.
- Реалізація алгоритму гри здійснюється в обробнику події для кнопки Стріляй!.
- Аналіз результатів.
- Перевірте роботу програми (нумерація клітинок ігрового поля починається з нуля).
- Оцініть повноту і вірогідність результатів розв'язування задачі.
Form1: TForm1;
A: array[0..5, 0..5] of Integer;
k, sum, sproba: Integer;
procedure TForm1.FormCreate(Sender: TObject);
var i, j: Integer;
begin
k := 0; sum := 0; sproba := 0;
For i := 0 to 5 do begin
StringGrid1.ColWidths[i] := 50;
StringGrid1.RowHeights[i] := 50;
end;
Randomize;
For i := 0 to 5 do
For j:=0 to 5 do begin
A[i,j] := Random(2);
sum := sum+A[i,j];
StringGrid1.Cells[j,i] := IntToStr(A[i,j]);
end;
end;
procedure TForm1.StringGrid1DrawCell(Sender: TObject; aCol, aRow: Integer;
aRect: TRect; aState: TGridDrawState);
begin
If StringGrid1.Cells[aCol, aRow] = '1' Then
begin
If sproba < 3 Then // якщо гру не закінчено, малюнок «Хвилі»
StringGrid1.Canvas.StretchDraw(aRect, Image1.Picture.Graphic)
Else StringGrid1.Canvas.StretchDraw(aRect,Image3.Picture.Graphic);
end;
If StringGrid1.Cells[aCol, aRow] = '2' Then // якщо влучив
StringGrid1.Canvas.StretchDraw(aRect, Image2.Picture.Graphic);
If StringGrid1.Cells[aCol, aRow] = '0' Then
StringGrid1 .Canvas.StretchDraw(aRect, Image1.Picture.Graphic);
If StringGrid1.Cells[aCol, aRow] = '3' Then // якщо не влучив
StringGrid1.Canvas.StretchDraw(aRect, Image4.Picture.Graphic);
end;
procedure TForm1.Button1Click(Sender: TObject);
var x, y, i, j: Integer;
begin
x := StrToInt(Edit1.Text); // введення координат корабля
y := StrToInt(Edit2.Text);
If a[x,y] = 1 Then
begin
sproba := 0;
k := k+1;
a[x,y] := 2;
StringGrid1.Cells[y,x] := IntToStr(A[x,y]);
Label2.Caption := 'Влучив!';
end
Else If a[x,y] = 0 Then
begin
a[x,y] := 3;
StringGrid1.Cells[y,x] := IntToStr(A[x,y]);
sproba := sproba+1;
Label2.Caption := 'Мимо!';
end;
If sproba = 3 Then
begin
Label2.Caption := 'Ти програв!';
Edit1.Visible := False; Edit2.Visible := False;
Button1.Visible := False;
{ якщо гру програно, виводяться кораблі, в які не влучили }
For i := 0 to 5 do
For j := 0 to 5 do StringGrid1.Cells[j,i] := IntToStr(A[i,j]);
end;
If k = sum Then
begin
Label2.Caption := 'Ти виграв!';
Edit1.Visible:= False;
Edit2.Visible:= False;
Button1.Visible := False;
sproba := 3; // кінець гри
end;
end;
- Завдання 2. Розробіть програму «Телефонний довідник».
- Постановка задачі. Довідник складається із двох полів: Прізвище та Номери телефонів. У програмі треба реалізувати завантаження із файлу прізвищ абонентів і запис у інший файл прізвищ і номерів телефонів абонентів через кому у вигляді, наприклад, Хокінг, 123456. Номери телефонів вводяться вручну в поле Номери телефонів навпроти відповідного прізвище з поля Прізвище. Запрограмуйте пошук номера телефону абонента за введеним прізвищем і пошук прізвище - за введеним номером телефону.
- Побудова інформаційної моделі.
- Визначення засобів опрацювання даних.
- Створення двох текстових файлів (input.txt - з прізвищами абонентів, вводяться вручну за допомогою текстового редактора, output.txt - із прізвищами і телефонами, розділеними через кому, записуються через саму програму довідника).
- Пошук в Інтернеті й опрацювання інформації про об'єкт MainMenu, завантаження даних із файлу і запис даних у файл.
- Створення проекту з використанням мови Object Pascal і середовища Lazarus.
- Опрацювання даних.
- Повторення навчального матеріалу.
- Використання компонентів Image, Edit, Button.
- Відображення даних у комірках об'єкта Memo, GroupBox.
- Створення програми.
- Розробіть інтерфейс програми (наприклад, як на зразку). Для додавання пунктів меню для об'єкта MainMenu викличте контекстне меню і оберіть команду Menu Editor... .
- Створіть процедуру обробки події OnClick для кнопки Відкрити із меню Файл.
- Створіть процедуру обробки події OnClick для кнопки Записати із меню Файл (аналогічно, як і на попередньому кроці).
- Створіть процедуру обробки події OnClick для кнопки Пошук по прізвищу.
- Створіть процедуру обробки події OnClick для кнопки Пошук по номеру.
- Аналіз результатів.
- Перевірте роботу програми. Зверніть увагу на вміст текстових файлів input.txt і output.txt.
- Вкажіть, на вашу думку, на позитивні та негативні моменти в роботі програми.
- Поміркуйте, як можна удосконалити програму.
// пункт Файл - Відкрити
// відкривання файлу з прізвищами і запис у поле Мемо1
procedure TForm1.MenuItem2Click(Sender: TObject);
var f: TextFile; // для текстових файлів
s: String; // міститиме кожний рядок з файлу
begin
AssignFile(f, 'input.txt'); // зв'язок файлової змінної з файлом на диску
Reset(f); // встановлення режиму для читання з файлу
while (not EOF(f)) do // доки не кінець файлу
begin
Readln(f, s); // зчитування порядково з файлу
Memo1.Lines.Add(s); // запис кожного рядка у поле Мемо
end;
CloseFile(f); // закриття роботи з файлом
end;
// пункт Файл - Записати
// записуються дані з двох полів Мемо1 і Мемо2 у файл
procedure TForm1.MenuItem3Click(Sender: TObject);
var f: TextFile;
i: Integer;
begin
AssignFile(f, 'output.txt');
Rewrite(f); // створюється новий файл або перезаписується старий
for i:=0 to Memo1.Lines.Count - 1 do
Writeln(f, Memo1.Lines[i] + ', ' + Memo2.Lines[i]); // запис у файл з поля Мемо
CloseFile(f);
end;
// Кнопка Пошук по прізвищу
// перед пошуком записати номери в поле Мемо2 навпроти прізвищ
procedure TForm1.Button1Click(Sender: TObject);
var i: integer;
begin
Edit2.Text := '';
for i := 0 to Memo1.Lines.Count - 1 do
if Edit1.Text = Memo1.Lines[i] then Edit2.Text := Memo2.Lines[i];
end;
// Кнопка Пошук по номеру
// перед пошуком записати номери в поле Мемо2 навпроти прізвищ
procedure TForm1.Button2Click(Sender: TObject);
var i: integer;
begin
Edit1.Text := '';
for i := 0 to Memo2.Lines.Count - 1 do
if Edit2.Text = Memo2.Lines[i] then Edit1.Text := Memo1.Lines[i];
end;
- Завдання 3. Розробіть програму «Текстовий редактор».
- Постановка задачі. Текстовий редактор матиме наступні функції: створення нового файлу, відкривання і зберігання файлів, форматування тексту (зміна шрифту, накреслення, розміру). У програмі також необхідно реалізувати кнопки: Вихід - для закривання текстового редактора і Про програму - з інформацією про текстовий редактор, ім'я розробника тощо.
- Побудова інформаційної моделі.
- Визначення засобів опрацювання даних.
- Пошук в Інтернеті й опрацювання інформації про об'єкти MainMenu, OpenDialog, SaveDialog, FontDialog.
- Створення проекту з використанням мови Object Pascal і середовища Lazarus.
- Опрацювання даних.
- Повторення навчального матеріалу.
- Використання компоненту Memo, функцій MessageDlg і ShowMessage.
- Відображення даних в об'єкті Memo.
- Створення програми.
- Розробіть інтерфейс програми (наприклад, як на зразку).Додайте на форму об'єкт MainMenu1. Для додавання пунктів меню для об'єкта MainMenu1 викличте контекстне меню і оберіть команду Menu Editor.... Додайте пункти меню.
- Додайте на форму інші компоненти (OpenDialog1, SaveDialog1, FontDialog1, Memo1), як на малюнку.
- Змініть властивість Caption доданих на форму компонентів.
- Створіть процедуру обробки події OnClick для кнопки Новий файл із меню Файл.
- Створіть процедуру обробки події OnClick для кнопки Відкрити файл із меню Файл (аналогічно, як і на попередньому кроці).
- Створіть процедуру обробки події OnClick для кнопки Зберегти файл із меню Файл.
- Створіть процедуру обробки події OnClick для кнопки Шрифт із меню Редагувати.
- Створіть процедуру обробки події OnClick для кнопки Про програму із меню Довідка.
- Створіть процедуру обробки події OnClick для кнопки Вихід із меню Файл.
- Аналіз результатів.
- Перевірте роботу програми. Створіть новий файл, збережіть його у форматі txt, відкрийте вже створений текстовий файл, відформатуйте текст у файлі.
- Вкажіть, на вашу думку, на позитивні та негативні моменти в роботі програми.
- Поміркуйте, як можна удосконалити програму, додавши необхідні функції.
// пункт Файл - Новий файл
procedure TForm1.MenuItem7Click(Sender: TObject);
begin
Memo1.Clear;
end;
// пункт Файл - Відкрити файл
procedure TForm1.MenuItem2Click(Sender: TObject);
begin
if OpenDialog1.Execute
then Memo1.Lines.LoadFromFile(OpenDialog1.FileName);
end;
// пункт Файл - Зберегти файл
procedure TForm1.MenuItem3Click(Sender: TObject);
begin
if SaveDialog1.Execute
then Memo1.Lines.SaveToFile(SaveDialog1.FileName);
end;
// пункт Редагувати - Шрифт
procedure TForm1.MenuItem5Click(Sender: TObject);
begin
if FontDialog1.Execute
then Memo1.Font := FontDialog1.Font;
end;
// пункт Довідка - Про програму
procedure TForm1.MenuItem9Click(Sender: TObject);
begin
// #13#10 - перехід на новий рядок
ShowMessage('Простий текстовий редактор.' + sLineBreak + 'Розробник - Мізюк Олександр Миколайович.');
end;
// пункт Файл - Вихід
procedure TForm1.MenuItem8Click(Sender: TObject);
begin
if MessageDlg('Вийти з програми?', mtConfirmation, [mbYes, mbNo], 0) = mrYes
then Application.Terminate;
end;
- Завдання 4. Розробіть програму «Тест».
- Постановка задачі. Текстова програма матиме наступні функції: вибір варіантів тесту (з текстових файлів variant1.txt, variant2.txt і т.д.), оцінювання тесту і виведення інформації про тест та результатів тестування. У програмі також необхідно реалізувати кнопки: Вихід - для закривання тестової програми і Про програму - з інформацією про тестову програму, ім'я розробника тощо. Тестова програма міститиме лише один тип запитань - одинарний вибір з багатьох.
- Побудова інформаційної моделі.
- Визначення засобів опрацювання даних.
- Пошук в Інтернеті й опрацювання інформації про об'єкт MainMenu, роботу з файлами.
- Створення проекту з використанням мови Object Pascal і середовища Lazarus.
- Опрацювання даних.
- Повторення навчального матеріалу.
- Використання компоненту RadioGroup, функції MessageDlg, операторів repeat until.
- Відображення даних в об'єкті ListBox.
- Створення програми.
- Розробіть інтерфейс програми (наприклад, як на зразку).Додайте на форму об'єкт MainMenu1. Для додавання пунктів меню для об'єкта MainMenu1 викличте контекстне меню і оберіть команду Menu Editor.... Додайте пункти меню.
- Змініть властивість Caption доданих на форму компонентів.
- Опишіть глобальні змінні.
- Створіть процедуру обробки події FormCreate (створення форми).
- Створіть процедуру обробки події OnClick для кнопки Варіант 1 меню Варіанти.
- Створіть процедуру обробки події OnClick для кнопки Варіант 2 меню Варіанти.
- Створіть процедуру обробки події OnClick для кнопки Запуск тесту із меню Тестування.
- Створіть процедуру обробки події OnClick для кнопки Далі в процесі проходження тесту.
- Створіть процедуру обробки події OnClick для кнопки Про програму із меню Довідка.
- Створіть процедуру обробки події OnClick для кнопки Вихід.
Аналіз результатів.
- Створіть файли variant1.txt, variant2.txt і т.д. наступного вмісту.
- Використовуються такі позначення: символом + починається рядок із запитанням (запитань можна створювати довільну кількість), символом * починається рядок із номером правильної відповіді на запитання, усі інші рядки - це варіанти відповідей, яких може бути довільна кількість.
- Перевірте роботу програми, пройшовши тест.
- Вкажіть, на вашу думку, на позитивні та негативні моменти в роботі програми.
- Поміркуйте, як можна удосконалити програму, додавши необхідні функції.
var
Form1: TForm1;
f: TextFile; // файлова змінна
s, v: String; // s - міститиме кожний рядок з файлу, v - назва варіанта
n, number, points: integer; // n - номер правильної відповіді, number - номер запитання, points - кількість набраних балів
rate: real; // відсоток правильних відповідей
implementation
// початкові налаштування при створенні форми
procedure TForm1.FormCreate(Sender: TObject);
begin
MenuItem7.Enabled := False; // кнопк Запуск тесту не активна
Button1.Enabled := False; // кнопк Далі не активна
RadioGroup1.Caption := 'Оберіть варіант тесту з меню Варіанти';
end;
// Варіанти - Варіант 1
procedure TForm1.MenuItem2Click(Sender: TObject);
begin
MenuItem2.Enabled := False; // вибір Варіант 1 стає недоступним
MenuItem3.Enabled := True; // вибір Варіант 2 стає доступним
MenuItem7.Enabled := True; // кнопк Запуск тесту стає активною
v := 'variant1.txt';
RadioGroup1.Items.Clear; // очищення вмісту радіогрупи для наступного запитання
ListBox1.Clear;
ListBox1.Items.Add('Тут відображатимуться результати тесту');
RadioGroup1.Caption := 'Запустіть тест з меню Тестування';
end;
// Варіанти - Варіант 2
procedure TForm1.MenuItem3Click(Sender: TObject);
begin
MenuItem3.Enabled := False; // вибір Варіант 2 стає недоступним
MenuItem2.Enabled := True; // вибір Варіант 2 стає доступним
MenuItem7.Enabled := True; // кнопк Запуск тесту стає активною
v := 'variant2.txt';
RadioGroup1.Items.Clear; // очищення вмісту радіогрупи для наступного запитання
ListBox1.Clear;
ListBox1.Items.Add('Тут відображатимуться результати тесту');
RadioGroup1.Caption := 'Запустіть тест з меню Тестування';
end;
// Тестування - Запуск тесту
procedure TForm1.MenuItem7Click(Sender: TObject);
begin
MenuItem7.Enabled := False; // кнопк Запуск тесту не активна
AssignFile(f, v); // зв'язок файлової змінної з файлом обраного варіанта
Button1.Enabled := True; // після обрання варіанта активізуємо кнопку Далі
Reset(f); // встановлення режиму для читання з файлу
points := 0; // початкова кількість балів рівна нулю
number := 1; // початковий номер запитання
Readln(f, s); // зчитування першого рядка з файлу
repeat
if (s[1] = '+') then // якщо перший символи "+" значить це запитання
begin
Delete(s,1,1); // видаляємо символ "+" із зчитаного рядка
RadioGroup1.Caption := 'Запитання №1. ' + s; // формування заголовка в радіогрупі
end
else if (s[1] = '*') then // якщо перший символ "*" значить це номер правильної відповіді
begin
Delete(s,1,1); // видаляємо символ "*" із зчитаного рядка
n := StrToInt(s); // записуємо номер правильної відповіді у змінну n
end
else
RadioGroup1.Items.Add(s); // інакше це варіант відповіді
Readln(f, s);
until (s[1] = '+') or (EOF(f));
number := number + 1; // збільшення номера запитань на 1
end;
// кнопка Далі
procedure TForm1.Button1Click(Sender: TObject);
begin
if (RadioGroup1.ItemIndex > -1) and (not EOF(f)) then
begin
if RadioGroup1.ItemIndex = n-1 then points += 1; // якщо обрано вірну відповідь, збільшуємо кількість балів
RadioGroup1.Items.Clear; // очищення вмісту радіогрупи для наступного запитання
repeat
if (s[1] = '+') then
begin
Delete(s,1,1);
RadioGroup1.Caption := 'Запитання №' + IntToStr(number) + '. ' + s;
end
else if (s[1] = '*') then
begin
Delete(s,1,1);
n := StrToInt(s);
end
else
RadioGroup1.Items.Add(s);
Readln(f, s);
until (s[1] = '+') or (EOF(f));
number += 1;
end
else if EOF(f) then
begin
Delete(s,1,1);
n := StrToInt(s);
if RadioGroup1.ItemIndex = n-1 then points += 1;
ListBox1.Clear; // очищення результатів тесту
ListBox1.Items.Add('Результати тесту: ');
ListBox1.Items.Add('----------');
ListBox1.Items.Add('Всього задано запитань: ' + IntToStr(number-1) + '.');
ListBox1.Items.Add('Система оцінювання: 2 бали за вірну відповідь.');
ListBox1.Items.Add('Максимально можна набрати: ' + IntToStr((number-1)*2) + ' балів.');
ListBox1.Items.Add('----------');
ListBox1.Items.Add('Вірних відповідей: ' + IntToStr(points) + '.');
rate := points/(number-1)*100;
if rate <> 0 then
ListBox1.Items.Add('Відсоток правильних відповідей: ' + FormatFloat('#,##', rate) + '%.')
else
ListBox1.Items.Add('Відсоток правильних відповідей: 0%.');
ListBox1.Items.Add('Ви набрали: ' + IntToStr(points*2) + ' бали(ів).');
// додаткове повідомлення
if (rate >= 80) and (rate <= 100) then ListBox1.Items.Add('Тест успішно пройдено! Молодець!')
else if (rate >= 60) and (rate < 80) then ListBox1.Items.Add('Тест пройдено! Але ти можеш краще!')
else if (rate >= 40) and (rate < 60) then ListBox1.Items.Add('Тест не пройдено! Забагато помилок, спробуй ще!')
else if (rate <40) then ListBox1.Items.Add('Тест не пройдено! Ще раз опрацюй навчальний матеріал, і тоді повертайся до тесту!');
CloseFile(f); // закриття роботи з файлом
Button1.Enabled := False;
end;
end;
// Довідка - Про програму
procedure TForm1.MenuItem6Click(Sender: TObject);
begin
// #13#10 - перехід на новий рядок
ShowMessage('Тестова програма.' + sLineBreak + 'Розробник - Мізюк Олександр Миколайович.');
end;
// кнопка Вихід
procedure TForm1.MenuItem8Click(Sender: TObject);
begin
if MessageDlg('Завершити тестування?', mtConfirmation, [mbYes, mbNo], 0) = mrYes
then Application.Terminate;
end;
СУБОТА, 17 БЕРЕЗНЯ 2018 Р.
Складання і виконання алгоритму пошуку значень у таблиці
Увага! Під час роботи з комп'ютером дотримуйтеся правил безпеки і санітарно-гігієнічних норм.
Види навчальної діяльностіВиконуємо самостійно- Завдання 1. У магазині утворилася черга з 5-ти покупців. Час обслуговування кожного покупця в черзі подано в таблиці.У вибраному середовищі програмування створіть проект Черга, у якому можна отримати: а) номер покупця, якого обслуговували найкоротший час; б) час найтривалішого обслуговування у черзі; в) лінійну таблицю або список із сумарним часом очікування свого обслуговування кожним покупцем.
- Створення проекту з використанням мови Object Pascal
- Відкрийте середовище Lazarus, створіть новий проект, розмістіть на екранній формі об'єкти, як показано на скріншоті, надайте значення їхнім властивостям самостійно.
- Опишіть глобальний масив duration_of_service[1..5], який зберігатиме значення часу обслуговування для кожного покупця.
var
Form1: TForm1;
duration_of_service: array[1..5] of integer = (140, 215, 75, 130, 85);
implementation
- Створіть процедуру опрацювання події OnCreate для форми. Проаналізуйте програмний код і використайте його у процедурі.
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;
- Створіть процедуру опрацювання події OnClick для кнопки Визначити.
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;
- Виконайте проект і проаналізуйте результати. Якщо є помилки, виправте їх і збережіть зміни.Зверніть увагу, для компонента StringGrid2 змінюється значення його властивості Visible, що дозволяє приховувати компонент після створення форми і показувати його на формі після натискання кнопки Визначити.
- Створення проекту з використанням мови 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; для збереження турнірної таблиці.
var
Form1: TForm1;
Tur: array[1..5, 1..6] of Integer;
implementation
- У процедурі обробки події OnCreate для форми запишіть оператори для виведення заголовків рядків і стовпців таблиці StringGrid1. Заголовку шостого стовпця надайте значення Сума.
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;
- У процедурі обробки події OnClick для кнопки Занести бали до масиву запишіть програмний код, що реалізує читання значень із таблиці StringGrid1 і присвоєння цих значень елементам масиву Tur.
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;
- Обчисліть суму балів кожної команди-учасниці. Для цього в процедурі обробки події OnClick для кнопки Знайти суму балів команд запишіть оператори для заповнення шостого стовпця таблиці.
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;
- Визначте рейтинг команд і розташуйте їхні номери за зменшенням суми балів. Найбільша сума балів, яку може отримати кожна команда в ході турніру, дорівнює 8 (чотири перемоги).Тому для кнопки Визначити рейтинг процедура додавання до масиву Memo1.Lines[k] номерів команд за зменшенням суми балів може бути наступною:
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;
- У процедурі обробки події OnClick для кнопки Визначити переможців запишіть програмний код для виведення трьох перших елементів масиву Memo1.Lines[k] як номерів команд-призерок турніру.
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;
- Перевірте правильність роботи програми, заповнивши турнірну таблицю, як на зразку. Числа в таблиці означають: 2 - виграш, 1 - нічия, 0 - програш.
- Запустіть проект на виконання для різних варіантів заповнення турнірної таблиці.
- Збережіть проект. Зробіть висновок: як застосувати алгоритми пошуку значень у масиві до розв'язування задач.
Домашнє завдання- Опрацювати підручник: повторити §36-§39, с. 177-224 (Інформатика, 9 клас, автори: Бондаренко О. О., Ластовецький В. В., Пилипчук О. П., Шестопалов Є. А.)
Опрацювання двовимірних масивів даних
Увага! Під час роботи з комп'ютером дотримуйтеся правил безпеки і санітарно-гігієнічних норм.
Види навчальної діяльностіДіємо разом- Вправа 1. На гральній дошці, яка має форму прямокутної таблиці із 5 стовпців і 5 рядків, випадково розміщуються білі і чорні фігури. У середовищі Lazarus створіть проект Гра, у якому після запуску гри фігури розташовуються у таблиці випадковим чином й виводиться повідомлення, фігур якого кольору на полі для гри виявилося більше.
- Створення проекту з використанням мови Object Pascal
- Відкрийте середовище Lazarus, створіть новий проект, розмістіть на екранній формі об'єкти, подані на скріншоті, надайте значення їхнім властивостям самостійно.
- Створіть процедуру опрацювання події натиснення кнопки Старт. Скористайтеся програмним кодом, поданим нижче, для реалізації проекту.
procedure TForm1.Button1Click(Sender: TObject);
var a: array[1..5,1..5] of string;
i, j, k: integer;
begin
Randomize;
k := 0;
for i := 1 to 5 do
for j := 1 to 5 do
begin
if random(2) = 0 then
a[i,j] := 'w' // w - white (білий)
else
a[i,j] := 'b'; // b - black (чорний)
StringGrid1.Cells[i,j] := a[i,j];
// обчислення кількості білих фігур
if StringGrid1.Cells[i,j] = 'w' then k := k + 1;
end;
Edit1.Text := IntToStr(k);
Edit2.Text := IntToStr(25 - k);
end;
- Виконайте проект.Виправте помилки, якщо такі з'являться, збережіть зміни.
- Вправа 2. У деяких видах спортивних змагань виступ спортсмена оцінюється десятьма суддями. Із сукупності виставлених ними балів вилучається найвищий і найнижчий бали. На основі решти балів обчислюється середнє арифметичне, яке й зараховується спортсмену як оцінка його виступу. Судді користуються системою, виставляючи оцінки від 0 до 10. Розробіть проект Спортивні змагання, у якому за виставленими суддівськими оцінками та вказаними правилами розрахунку визначити середню оцінку виступу спортсмена.
- Створення проекту з використанням мови Object Pascal
- Відкрийте середовище Lazarus і створіть новий проект, розмістіть на екранній формі об'єкти, як на скріншоті, надайте значенням їхнім властивостям самостійно.
- Створіть процедуру опрацювання події OnCreate, проаналізуйте і використайте наступний програмний код у цій процедурі.
procedure TForm1.FormCreate(Sender: TObject);
var i: integer;
begin
StringGrid1.Cells[0,0] := 'Суддя';
StringGrid1.Cells[0,1] := 'Оцінка';
for i := 1 to 10 do
StringGrid1.Cells[i,0] := IntToStr(i);
end;
- Створіть процедуру опрацювання події натиснення кнопки Підсумок. Скористайтеся наступним програмним кодом для даної процедури.
procedure TForm1.Button1Click(Sender: TObject);
var i, max, min: integer;
s: real;
a: array[1..10] of integer;
begin
// введення елементів масиву випадково із діапазону
Randomize;
for i := 1 to 10 do
begin
a[i] := random(10);
StringGrid1.Cells[i,1] := IntToStr(a[i]);
end;
// пошук найбільшого, найменшого елемента масиву та суми значень елементів
max := a[1];
min := a[1];
s := a[1];
for i := 2 to 10 do
begin
if a[i] < min then min := a[i];
if a[i] > max then max := a[i];
s := s + a[i];
end;
s := s - min - max;
s := s / 8;
Edit1.Text := FloatToStr(s);
end;
- Виконайте проект.Виправте помилки, якщо такі з'являться, збережіть зміни.
Працюємо в парах- Запишіть оператор для обчислення суми елементів першого рядка масиву A[1..5,1..5].
- Запишіть фрагмент програмного коду для заміни нулями парних елементів масиву A[1..5,1..5].
- Знайдіть максимальний елемент другого стовпця масиву B[1..4,1..5].
Виконуємо самостійно- Завдання 1. У 5 міст відправили вагони з десятьма різними видами товарів. Створіть проект Товарообіг у середовищі Lazarus для обчислення загальної маси продукції, відправленої в кожне місто, і загальної маси продукції кожного виду товару.
- У середовищі Lazarus створіть новий проект і розмістіть на екранній формі об'єкти, як на скріншоті, надайте значенням їхнім властивостям самостійно.
- Опишіть глобальні змінні і константу для збереження масивів: towns - назви 5-ти міст, goods - масив із 10 назв різних видів товарів, mass - двовимірний масив цілих значень маси товару кожного виду.
const towns: array[1..5] of string = ('Київ', 'Луцьк', 'Дніпро', 'Одеса', 'Харків'); // масив назв міст
var
Form1: TForm1;
goods: array[1..10] of string; // масив товарів
mass: array[1..5,1..10] of integer; // масив значень маси товарів
implementation
- Створіть процедуру опрацювання події OnCreate проаналізувавши і скориставшись поданим нижче програмним кодом.
procedure TForm1.FormCreate(Sender: TObject);
var i, j: Integer;
begin
ComboBox1.Items.Clear; // очищення списку Обрати місто
ComboBox2.Items.Clear; // очищення списку Обрати товар
For i := 1 to 5 do
begin
// формування у таблиці назв міст
StringGrid1.Cells[0,i] := towns[i];
// заповнення списку Обрати місто
ComboBox1.Items.Add(towns[i]);
end;
For i := 1 to 10 do
begin
// формування у таблиці назв товарів
goods[i] := 'Товар' + IntToStr(i);
StringGrid1.Cells[i,0] := goods[i];
// заповнення списку Обрати товар
ComboBox2.Items.Add(goods[i]);
end;
// заповнення масиву mass і таблиці значеннями маси товару випадковим чином
Randomize;
for i := 1 to 5 do
for j := 1 to 10 do
begin
mass[i,j] := random(100) + random(50);
StringGrid1.Cells[j,i] := FloatToStr(mass[i,j]);
end;
end;
- Створіть процедуру обробки події OnClick для кнопки Обчислити. Використайте для цього програмний код, поданий нижче.
procedure TForm1.Button1Click(Sender: TObject);
var i, j, s_town, s_good, row, col: Integer;
begin
s_town := 0; // сума маси продукції, відправленої в обране місто
s_good := 0; // сума маси продукції обраного виду товару
// вибір із списку міст
row := ComboBox1.ItemIndex;
If row <> -1 then
begin
for j := 1 to 10 do
s_town := s_town + mass[row+1,j];
Edit1.Text := IntToStr(s_town);
end
else
Edit1.Text := '';
// вибір із списку товарів
col := ComboBox2.ItemIndex;
If col <> -1 then
begin
for i := 1 to 5 do
s_good := s_good + mass[i,col+1];
Edit2.Text := IntToStr(s_good);
end
else
Edit2.Text := '';
end;
- Перевірте роботу програми, запустивши проект на виконання.Виправте помилки, якщо такі з'являться, збережіть зміни.
- Завдання 2. Створіть проект Робота з двовимірним масивом у середовищі Lazarus. Заповніть двовимірний масив a[1..6,1..7] випадковими цілими числами з діапазону [-50;50] і визначте: а) суму елементів k-того рядка; б) середні арифметичні значення елементів кожного рядка; в) максимальні значення для кожного стовпця; г) кількість додатних елементів k-того рядка.
- Створіть інтерфейс програми згідно зразка. Для таблиці StringGrid1 задайте значення властивостей ColCount = 8, RowCount = 7.
- Опишіть масив a[1..6,1..7] як глобальний.
var
Form1: TForm1;
a: array[1..6,1..7] of Integer;
implementation
- У процедурі обробки події OnCreate для форми запрограмуйте: виведення заголовків рядків і стовпців таблиці StringGrid1; заповнення масиву a випадковими числами з діапазону [-50;50] і виведення значень елементів до таблиці StringGrid1.
procedure TForm1.FormCreate(Sender: TObject);
var i, j:integer;
begin
Randomize;
For i := 1 to 6 do StringGrid1.Cells[0,i] := IntToStr(i);
For j := 1 to 7 do StringGrid1.Cells[j,0] := IntToStr(j);
For i := 1 to 6 do
For j := 1 to 7 do
begin
a[i,j] := random(100) - 50; // обчислення елемента масиву a
StringGrid1.Cells[j,i] := IntToStr(a[i,j]); // виведення a[i,j]
end;
end;
- У процедурі обробки події OnClick для кнопки Сума елементів рядка запрограмуйте: введення номера рядка k з текстового поля Edit1; знаходження суми елементів k-того рядка; виведення значення суми в текcтове поле Edit2.
procedure TForm1.Button1Click(Sender: TObject);
var s_row, j, k: integer;
begin
s_row := 0; // сума у вибраному рядку
k := StrToInt(Edit1.Text); // номер рядка
for j := 1 to 7 do
begin
s_row := s_row + StrToInt(StringGrid1.Cells[j,k]);
end;
Edit2.Text := IntToStr(s_row);
end;
- Створіть процедуру обробки події OnClick для кнопки Середні арифметичні по рядках. Проаналізуйте, які дії виконуються для кожного рядка програмного коду, поданого нижче.
procedure TForm1.Button2Click(Sender: TObject);
var i, j, sum: integer;
sr: real;
r: String;
begin
r := '';
For i := 1 to 6 do
begin
sum := 0; // перед початком додавання сума обнуляється
For j := 1 to 7 do sum := sum + a[i,j]; // додавання елементів і-го рядка
sr := sum / 7; // середнє арифметичне і-го рядка
r := r + FormatFloat('0.0', sr) + ' '; // формування рядка відповіді r
end;
Edit3.Text := r;
end;
- Створіть процедуру обробки події OnClick для кнопки Максимальні у стовпцях, скориставшись наступним програмним кодом.
procedure TForm1.Button3Click(Sender: TObject);
var i, j, max_col: integer;
r: String;
begin
r := '';
For j := 1 to 7 do
begin
max_col := StrToInt(StringGrid1.Cells[j,1]);
For i := 1 to 6 do
if StrToInt(StringGrid1.Cells[j,i]) > max_col then
max_col := StrToInt(StringGrid1.Cells[j,i]);
r := r + IntToStr(max_col) + ' '; // формування рядка відповіді r
end;
Edit4.Text := r;
end;
- Створіть процедуру обробки події OnClick для кнопки Кількість додатних рядка, скориставшись наступним програмним кодом (номер рядка задається в текстовому полі Edit5).
procedure TForm1.Button4Click(Sender: TObject);
var k_row, j, k: integer;
begin
k_row := 0; // кількість додатних у вибраному рядку
k := StrToInt(Edit5.Text); // номер рядка
for j := 1 to 7 do
begin
if StrToInt(StringGrid1.Cells[j,k]) > 0 then
k_row := k_row + 1;
end;
Edit6.Text := IntToStr(k_row);
end;
- Перевірте роботу програми. Збережіть проект.
Домашнє завдання- Опрацювати підручник: §39 с. 217-222 (Інформатика, 9 клас, автори: Бондаренко О. О., Ластовецький В. В., Пилипчук О. П., Шестопалов Є. А.)