Види навчальної діяльності
Виконуємо самостійно
- Завдання 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;