Види навчальної діяльності
Обговорюємо
- Опишіть двовимірний масив цілих чисел із 5 рядків і 8 стовпців.
- Як запрограмувати введення значень елементів двовимірного масиву з клавіатури?
- Як заповнити двовимірний масив випадковими числами?
- Запишіть фрагмент програми, що дозволяє створити такі масиви:
Діємо разом
- Вправа 1. Створіть проект, у якому знаходять суму додатних елементів заданої таблиці.
- Створення проекту з використанням мови Object Pascal
- Відкрийте середовище Lazarus, створіть новий проект, розмістіть на екранній формі об'єкти, як показано на скріншоті.
- Заповніть таблицю значеннями. Для цього в контекстному меню об'єкта StringGrid1 оберіть команду Змінити StringGrid1... і у вікні редактора введіть потрібні значення.
- Створіть процедуру опрацювання події натиснення кнопки Розрахувати. У вікні редактора коду опишіть змінні, які будуть використовуватись у проекті: а - масив дійсних чисел, i (номер рядка) та j (номер стовпця) - номери (індекси) елемента двовимірного масиву, s - сума додатних елементів масиву.
- У вікні редактора коду запишіть команди для присвоювання значень елементам масиву із таблиці, їх опрацювання та виведення значення суми додатних елементів.
- Виконайте проект і проаналізуйте результати. Якщо є помилки, виправте їх і збережіть зміни. Обчисліть суму додатних елементів самостійно і порівняйте з результатами роботи програми.
var i, j : integer;
s : real;
a : array[1..4, 1..4] of real;
begin
s := 0;
for i := 1 to 4 do
for j := 1 to 4 do
begin
a[i,j] := StrToFloat(StringGrid1.Cells[i,j]);
if a[i,j] > 0 then s := s + a[i,j];
end;
Edit1.Text := FloatToStr(s);
end;
- Створення проекту з використанням мови Python
- Відкрийте середовище програмування мовою Python, створіть новий файл і збережіть його під іменем Сума додатних елементів.
- У вікні редактора коду запишіть команди для реалізації поставленого завдання.
- Запустіть проект на виконання. Якщо є помилки - виправте їх. Обчисліть суму додатних елементів самостійно і порівняйте з результатами роботи програми.
# імпорт модуля генерування випадкових чисел
import random
# створюємо два порожніх списки для утворення вкладеного
a = []
b = []
for i in range(4):
for j in range(4):
# додаємо згенеровані виипадковим чином елементи до списку a
a.append(round(random.uniform(-10, 10), 1))
# формуємо список а у списку b
b.append(a[-4:])
# вводимо змінну s для обчислення суми елементів, значення яких більші нуля
s = 0
for i in range(4):
for j in range(4):
if b[i][j] > 0:
s += b[i][j] # знаходимо суми відібраних елементів
# виводимо вкладений список
print(b)
# виводимо результат суми
print(round(s, 1))
- Вправа 2. На 10 земельних ділянках проведено обстеження рівня pH ґрунту. Результати обстеження подано в таблиці. Створіть проект Ґрунти, у якому можна визначити кількість земельних ділянок з кислими (pH < 7), нейтральними (pH = 7) та лужними (pH > 7) ґрунтами.
- Створення проекту з використанням мови Object Pascal
- Відкрийте середовище Lazarus і створіть новий проект, розмістіть на екранній формі об'єкти, як на скріншоті, самостійно надайте значення їхнім властивостям.
- Створіть процедуру опрацювання події натискання на кнопку Визначити. Проаналізуйте програмний код нижче і використайте його у процедурі.
- Запустіть проект на виконання і проаналізуйте результати виконання. У разі появи помилок, виправте їх і збережіть зміни.
procedure TForm1.Button1Click(Sender: TObject);
var i, kk, kn, kl: integer;
a: array[1..10] of integer;
begin
kk := 0;
kn := 0;
kl := 0;
for i := 1 to 10 do
begin
a[i] := StrToInt(StringGrid1.Cells[i,1]);
if a[i] < 7 then
kk := kk + 1
else if a[i] > 7 then
kl := kl + 1
else
kn := kn + 1
end;
Edit1.Text := IntToStr(kk);
Edit2.Text := IntToStr(kn);
Edit3.Text := IntToStr(kl);
end;
Виконуємо самостійно
- Завдання 1. У ході вивчення теми 5 учнів отримали оцінки з 10 тестів. Створіть проект у середовищі Lazarus під назвою Тестові оцінки для визначення суми балів, набраної кожним учнем.
procedure TForm1.FormCreate(Sender: TObject);
var i: integer;
begin
// заповнення заголовків стовпців і рядків двовимірної таблиці
for i := 1 to 10 do
StringGrid1.Cells[i,0] := 'Тест ' + IntToStr(i);
for i := 1 to 5 do
StringGrid1.Cells[0,i] := 'Учень ' + IntToStr(i);
end;
procedure TForm1.Button1Click(Sender: TObject);
var i, j, k, sum: integer;
begin
// очищення поля з результатами
ListBox1.Clear;
// заповнення двовимірного масиву оцінками
Randomize;
for i := 1 to 10 do
for j := 1 to 5 do
StringGrid1.Cells[i,j] := IntToStr(random(12));
// обчислення суми оцінок за тести по кожному учню і виведення результатів
ListBox1.Items.Add('Сума балів за тести: ');
k := 1; // лічильник рядка таблиці
sum := 0; // початкове значення суми
for j := 1 to 5 do
begin
for i := 1 to 10 do
begin
sum := sum + StrToInt(StringGrid1.Cells[i,j]);
end;
ListBox1.Items.Add(StringGrid1.Cells[0,k] + ': ' + IntToStr(sum) + ' балів.');
k := k + 1;
end;
end;
- Завдання 2. Магічний квадрат - квадратна таблиця (n = m), в якій суми чисел кожного рядка, стовпця і діагоналі є рівними. Створіть у середовищі Lazarus ігровий проект, в якому гравець (або програмно випадковим чином) має заповнити порожні клітинки квадрата 3х3 числами від 4 до 12 таким чином, щоб утворити магічний квадрат.
unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls,
Grids;
type
{ TForm1 }
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Edit4: TEdit;
Edit5: TEdit;
Edit6: TEdit;
Edit7: TEdit;
Edit8: TEdit;
Label1: TLabel;
StringGrid1: TStringGrid;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ private declarations }
public
{ public declarations }
end;
var
Form1: TForm1;
mk: array[1..3, 1..3] of Integer; // числа магічного квадрата
Numbers: array[1..9] of Integer; // масив чисел від 4 до 12
edit_array: array[1..8] of TEdit;
implementation
{$R *.lfm}
{ TForm1 }
procedure TForm1.FormCreate(Sender: TObject);
begin
edit_array[1] := Edit1;
edit_array[2] := Edit2;
edit_array[3] := Edit3;
edit_array[4] := Edit4;
edit_array[5] := Edit5;
edit_array[6] := Edit6;
edit_array[7] := Edit7;
edit_array[8] := Edit8;
end;
// кнопка Нова гра
procedure TForm1.Button1Click(Sender: TObject);
var i, j, k, n: Integer;
begin
Randomize;
For i := 1 to 3 do // заповнення масиву mk нулями
For j := 1 to 3 do mk[i,j] := 0;
For i := 0 to 2 do StringGrid1.Rows[i].Clear; // очищення таблиці
For i := 1 to 9 do Numbers[i] := i + 3; // заповнення масиву Numbers
k := 0;
While k < 9 do
begin // k — лічильник виведених до таблиці значень
{ задавання індексів клітинок для початкових значень }
i := random(3) + 1;
j := random(3) + 1;
n := random(12) + 1; // випадковий вибір числа з масиву Numbers
If (mk[i,j] = 0) and (Numbers[n] <> 0) Then
begin
{ якщо клітинка mk[i,j] вільна і значення Numbers[n] ще не задіяне }
mk[i,j] := Numbers[n];
k := k + 1;
Numbers[n] := 0; // використаний елемент Numbers[n] обнуляється
StringGrid1.Cells[j-1,i-1] := IntToStr(mk[i,j]);
end;
end;
end;
// кнопка Перевірити
procedure TForm1.Button2Click(Sender: TObject);
var i, j, sum_row, sum_col, sum_diag: Integer;
prap: Boolean;
begin
// присвоєння масиву значень, якими заповнений квадрат
For i := 1 to 3 do
For j := 1 to 3 do mk[i,j] := StrToInt(StringGrid1.Cells[j-1,i-1]);
// обчислення суми по рядках (сума має = 24)
prap := True;
For i := 1 to 3 do
begin
sum_row := 0;
For j := 1 to 3 do
sum_row := sum_row + mk[i,j];
edit_array[i].Text := IntToStr(sum_row);
If sum_row <> 24 Then
prap := False;
end;
// обчислення суми по стовцях (сума має = 24)
For j := 1 to 3 do
begin
sum_col := 0;
For i := 1 to 3 do
sum_col := sum_col + mk[i,j];
edit_array[j+3].Text := IntToStr(sum_col);
If sum_col <> 24 Then
prap := False;
end;
// обчислення суми по діагоналі (зліва-направо, згори-вниз) (сума має = 24)
sum_diag := 0;
for i := 1 to 3 do
sum_diag := sum_diag + StrToInt(StringGrid1.Cells[i-1,i-1]);
edit_array[7].Text := IntToStr(sum_diag);
if sum_diag <> 24 then prap := False;
// обчислення суми по діагоналі (cправа-наліво, згори-вниз) (сума має = 24)
sum_diag := 0;
for i := 1 to 3 do
sum_diag := sum_diag + StrToInt(StringGrid1.Cells[3-i,i-1]);
edit_array[8].Text := IntToStr(sum_diag);
if sum_diag <> 24 then prap := False;
// виведення результату
If prap = True Then Label1.Caption := 'Перемога!'
else Label1.Caption := 'Спробуй ще!';
end;
end.
Домашнє завдання
- Опрацювати підручник: §38 с. 212-217 (Інформатика, 9 клас, автори: Бондаренко О. О., Ластовецький В. В., Пилипчук О. П., Шестопалов Є. А.)