Урок 89 Інформатика (АП)
Оператор приєднання WITH.
Мета.
Навчальна. Ознайомлення з додатковими можливостями мови Паскаль, зокрема з оператором приєднання WITH.
Розвиваюча. Розвивати логічне мислення, самостійність, вміння розуміти і бачити структуру програми, що працює з масивом.
Виховна. Виховувати наполегливість, зібраність, уважність, грамотно висловлювати свої думки, вміння раціонально використовувати час.
Тип уроку. Засвоєння нових знань, вмінь і навичок.
Матеріали для роботи з учнями:
План
1 Перевірка домашнього завдання.
2 Актуалізація опорних знань.
3 Викладення нового матеріалу.
4 Розв’язування вправ.
5 Підсумки уроку.
6 Домашнє завдання.
Пам’ятка для учня!
1 Пригадайте правила техніки безпеки при роботі з ПК.
2 Через кожні 15 хв виконуйте вправи для очей та для зняття м’язової втоми.
Хід уроку
1. Перевірка домашнього завдання.
1. Наявність.
2. Питання.
2. Актуалізація опорних знань.
а) позначення поля шахівниці а5, е8...
б) комплексне число а+ bі.
3. Мотивація.
Оператор With - для тих, хто не любить багато писати.
Він дозволяє скоротити звертання до полів запису.
4. Вивчення нового матеріалу.
Оператор приєднання With
Синтаксис оператора:
With <ім’я запису» Do Begin
<оператори опрацювання полів запису>
End;
Оператор приєднання With указує загальне для всіх полів ім'я змінної типу запис, що дозволяє опускати це ім'я запису при звертанні до поля, транслятор додасть його сам.
Приклад 7. Змінну D описано таким чином:
var D: Record
Year, Day: Integer;
Month: String[20];
End;
Begin
with D Do Begin
Year:=1998; Month:='Dec'; Day:=15;
End;
Приклад 8. Якщо поле запису теж є записом, в операторі With можна указати імена записів в порядку їх вкладення:
Type Pupil = Record
Name : String[20];
Rik : 1980..1990;
Ball : Record Alg, Fiz, Inf : 1..12 End;
End;
var Class : Array [1..B] of Pupil; і : Integer;
Begin
For i:=l To 3 Do
With Cl ass[i], Ball Do Begin
Write ('=>'); Readln (Name);
Readln (Rik, Alg, Fiz, Inf);
End
End.
Послідовний пошук у масиві записів
При роботі з різного роду табличною інформацією (каталогами, довідниками, списками тощо), яка зберігається у вигляді масиву записів, часто виникає необхідність знайти запис за значенням деякого поля і отримати доступ до інших полів цього запису. Найпростіший алгоритм пошуку полягає в тому, що у всіх записів послідовно перевіряється наявність ознаки, за якою здійснюється пошук.
Приклад 9. Інформація про оцінки 5 учнів зберігається в масиві записів:
Type Pupil = Record
Nomer: Byte;
Name: String[20];
Ball: Array [1..6] of Byte;
End;
var Page : Array [1..5] of Pupil;
і, N, K : Byte; P : Pupil;
Нехай у масиві Page потрібно знайти запис, значення поля Name якого дорівнює 'Петренко', і вивести на друк середнє арифметичне оцінок цього учня.
For і:=1 То 5 D
With Page [і] Do Begin
Sr:=0;
if Name='neTpeHKo' Then Begin
For j:=l To б Do Sr:=Sr+Ball[j];
Sr:=Sr/6;
WriteLn (Name, Sr:5:1)
End; {Then}
End; { With j
Може виникнути ситуація, коли у масиві не знайдено запису, який має дану ознаку. Тому бажано передбачити можливість повідомлення після завершення циклу, знайдено запис чи ні.
Приклад 10. Введемо змінну Prap: Boolean, яка отримує значення True, якщо запис знайдено.
Prap:=False;
For і:=1 То 5 Do
With Page[і] Do Begin Sr:=0;
if Name=‘Петренко' Then Begin Prap:= True;
For j:=l To 6 Do sr:=Sr+Ball[j];
Sr:=Sr/6;
WriteLn (Name, Sr:5:1)
End;
End; { With I
If Not Prap Then WriteLn ('Запис не знайдено');
5. Створення та реалізація програми
Задача. Значення часу Т1 і T2 задані у форматі Год:Хв:Сек. Скласти програму, яка визначає:
а) чи передує час Т1 часу Т2 (у межах доби);
б) який проміжок часу відокремлює моменти Т1 і Т2;
в) час (Т1 + 1 секунда), враховуючи зміну доби.
Tуре Time= Record
Hour:0..23;
Min, Sec:0..59
End;
var Т1, T2: Time;
Запишемо оператори введення значень полів записів Т1 і Т2:
Begin
Write ('T1=>');
with T1 Do
ReadLn (Hour, Min, Sec);
Write ('T2=>');
With T2 do
ReadLn (Hour, Min, Sec);
Опишемо змінні
Timel, Тіme2: Integer.
With Т1 Do Timel:= Hour*3600+Min*60+Sec;
With Т2 Do Time2:= Hour*3600+Min*60+Sec;
If Timel<Time2 Then writeLn (’так1)
Else writeLn C’Hi1);
D:=Abs(Timel-Time2);
Hd:= D Div 3600;
D:= D Mod 3600;
Md:= D Div 60;
Sd:= D Mod 60;
WriteLn (Hd, ‘: ‘, Md, ‘ : ', Sd);
6. Складемо програму обчислення часу (Т1+1 сек) за блок-схемою.
Begin
Write ('T1=>');
with ті DO
ReadLn (Hour, Min, sec);
With Tl Do
If Sec<59 Then Sec:=Sec+l Else Begin Sec:=0;
If Min<59 Then Min:=Min+l Else Begin Min:=0;
Hour:=(Hour+l)Mod 24
End
End;
with Tl Do
writeLn ('Tl=',Hour, Min, Sec)
End.
6. Підсумки уроку.
Re, Im: Real
End;
Point = Record
X, Y: Real
End;
Var Z, W: Complex;
P: Point; Re: Real;
Визначте, які значення будуть мати змінні Z, W, Р, Re після виконання нааведених операторів (заповніть таблицю):
R: Real;
C: Record
X,Y: Real
End;
End;
Потрібно змінній Krug присвоїти значення, що відповідає колу радіуса 2.5 з центром у точці (0, 1.8). У яких з наведених операторів приєднання ця задача розв'язується правильно?
а) with Krug Do Begin R:=2.5;
X:=0;
Y:=1.8 End;
б) with Krug Do Begin R:=2.5;
C.X:=0;
C.Y:=1.8 End;
c) with Krug Do Begin R:=2.5;
with C Do Begin X:=0;
Y:=1.8 End;
d) with Krug,C Do Begin R:=2.5;
X:=0;
Y:=1.8 End;
є) with C,Krug Do Bkgin R:=2.5;
X:=0;
Y:=1.8 End;
Program Errors;
Type Zap=Record A:lnteger;
B:Char
End;
Var X,Y,F: Zap; C:Char;
Begin Readln (C);
With X Do Begin A:=Ord(C);
B:=C End;
Zap:=X;
If X=Y Then Y:=F.P;
With Y Do Writeln (A,X)
End.
7. Домашнє завдання.
1. Задача. Скласти список навчальної групи з 5 учнів. Для кожного учня вказати рік народження та оцінки з фізики, алгебри, інформатики. Інформацію про кожного учня оформити у вигляді запису. Сукупність записів об'єднати в масив.
2. Проаналізуйте програму, яка забезпечує введення інформації про 5 учнів. Результатом роботи програми є список відмінників.
Type PUPIL = Record
Name : Stri ng[20];
God : 1980..1990;
Ball : Record Alg,Fiz,lnf:l..12 End;
End;
Var Class: Array [1..5] of Pupil; і : integer;
Begin
For і:=1 To 5 Do
With Class[i], Ball Do Begin
write ('=>'); Readln (Name);
Readln (God, Alg, Fiz, inf)
End;
writeln ('Список відмінників');
For і:=1 То 5 Do
with cl ass[і], Ball Do
If (Alg+Fiz+lnf) >= 30 Then Writeln (Name);
End.
3. Надрукуйте список учнів, прізвища яких починаються з літери А, та їх оцінки.
4. Надрукуйте список учнів, які мають оцінки не нижче 8, та прізвища яких починаються з літер В і Г.
5. Обчисліть середній бал класу і виведіть список учнів, які мають середній бал, вищий за середній бал класу.
6. Надрукуйте список учнів, упорядкований за убуванням середнього балу. Для розв'язування завдання найпростіше використати такий прийом: для кожної можливої суми балів К від максимального значення (3x12=36) до мінімального (3x1=3) переглянути весь масив записів, і, якщо сума елементів поля запису Ball дорівнює К, вивести на друк значення поля Name.
For К:=36 DownTo 3 Do
For i:=l To 5 Do
with Cl ass[i], Ball Do
If (Alg+Fiz+lnf) = К Then writeln (Name);
Таким чином ми отримаємо на екрані рейтинг учнів, але сам масив записів в пам'яті комп'ютера залишається не- упорядкованим.
8. Опрацювати завдання.
“Комбіновані типи. Записи”
Type Book = Record
Nazv : String[45];
God : 1000..2000;
Price : Real;
End;
Type Fam = Record
Glava: String[15];
Age : 18..100;
Child : Array[1..2] of Record
Name: Stri ng[15];
Godr:1900..2000
End
End
var A, в: Fam;
Занесіть вихідну інформацію до змінної А та продублюйте її до змінної В.
Type Time = Record
Hour:0..23;
Min, Sec:0..59 End;
var T1,T2:Time;
Напишіть програму, яка вводить значення полів запису Т1 і Т2 та друкує True, якщо Т1 передує Т2, і друкує False у протилежному випадку.
Type Kniga = Record
Nazva : String [50];
Avtor : String [20];
Rik, Kilk : Integer; vart : Real;
End;
Опишіть масив Katalog записів типу Kniga, призначений для збереження каталога книжкового магазину (5 найменувань).