Published using Google Docs
Інформатика 10 (АП) Урок 18
Updated automatically every 5 minutes

Урок 18                                                                         Інформатика 10 (АП)

Можливості введення та виведення інформації.


Мета.  

Навчальна. ознайомити учнів з можливості введення та виведення інформації, з    правилами запису  при введення та виведені даних. Навчити  застосовувати набуті знання до складання простих програм.

Розвиваюча. Розвивати логічне та алгоритмічне мислення.

Виховна. Виховувати культуру оформлення

Матеріали для роботи з учнями:

План

  1. Актуалізація опорних знань.
  2. Арифметичні операції.
  3. Правила запису арифметичних виразів.
  4. Стандартні функції
  5. Оператор присвоювання.
  6. Запитання до уроку.
  7. Домашнє завдання.

Хід уроку


1. Актуалізація опорних знань.

  1. Що називають арифметичними виразами?
  2. Назвіть арифметичні операції Паскаля в порядку їх пріоритетності.
  3. Над якими величинами можна виконувати операції div та mod?
  4. Які правила запису арифметичних виразів у Паскалі?
  5. Як на машинному рівні виконується оператор присвоювання?


2. Перевірка домашнього завдання.

1. Записати мовою Паскаль такі вирази.

2. Тестування “Поняття змінної. Типи змінних”


3. Вивчення нового матеріалу.

Вказівка введення інформації

Для створення простої програми необхідно познайомитися з можливістю введення значень аргументів та виведення результатів виконання програми.

У Паскалі для цієї мети існують вже готові, а значить стандар­тні, процедури. Подекуди ці процедури називають операторами. Але кінець кінцем, важлива суть, а не форма.

Загальний вигляд процедури введення інформації:

read (<список елементів введення>) або

readln (<список елементів введення >).

Елементами списку введення можуть бути один або декілька ідентифікаторів, записаних через кому.

Наприклад:

read (a,b,c);

read (alfa);

readln (m,n).

При виконанні процедур read та readln програма переходить у стан очікування введення даних. Причому процедури read та readln при введенні інформації з клавіатури мало чим відрізняються одна від одної.

При виконанні програми можна помітити те, що після введення інформації за допомогою процедури readln курсор переходить на початок нового рядка, а після роботи процедури read - ні.

Зауваження:

Як ви думаєте?

 Яке значення одержить змінна а після виконан­ня процедури read(a,a,a), якщо буде набраний такий рядок значень: 10 -5 1 ?

Змінна а одержить значення 1 (з третього разу)!

Вказівка виведення інформації

Загальний вигляд процедури виведення інформації:

write (<список елементів виведення>) або

writeln (<список елементів виведення>).

Список елементів виведення інформації набагато ширший. В ньому можуть використовуватися:

Різниця між процедурами write та writeln така: процедура write після виведення інформації лишає курсор на першій вільній позиції, а процедура writeln - переводить курсор на початок нового рядка.

Приклади:

write ('Задайте значення трьох цілих чисел');

write (a+b,' - така одержана сума двох чисел');

write ('а=',а,' b=',b);

writeln ('а=',і0).

Ще раз зверніть увагу на те, що всі коментарі є рядковими ста­лими величинами і їх необхідно брати в апострофи. Причому, апострофів у списку елементів виведення повинна бути парна кількість (третій приклад). Якщо текст коментаря передбачає використання апострофів, то замість одного апострофа в тексті необхідно поставити два ('комп''ютер').

Оскільки елементами процедур введення інформації не можуть бути тексти, необхідно обов'язково використовувати перед ними процедури виведення інформації з відповідними текстами для того, щоб ваша програма не була «німою», щоб вам було зрозуміло, скільки даних та які саме необхідно задати для її виконання.

У четвертому прикладі на екран монітора завжди буде виво­дитися один і той же вираз, незалежно від того, яке значення змінна а буде одержувати у програмі: а=10.

А як ви думаєте, що виведе ваша програма у другому прикла­ді, якщо величинам а та b не будуть задані значення?

Арифметич­ний вираз буде обчислено, але в якості значень а та b буде взяте з пам'яті комп'ютера так зване «сміття», тобто те, що знаходилося там в той момент, коли частина пам'яті розподілялася для цих змінних. Це можуть бути залишки інформації попередньої програми, яка знаходилися на цьому місці, або випадково нулі, якщо ви тільки увімкнули комп'ютер, і в цю область оперативної пам'яті ще ніяка інформація не була занесена. Згадайте це зауваження, якщо зустрінетеся з ситуацією, коли програма при кожному запускові видає непередбачувані результати!

І ще одна можливість процедур виведення інформації, яку можна використовувати для одержання результатів у зручному, не показниковому вигляді.

Форматування вихідних даних

Це форматування значень змінних.

Вигляд форматування: <ім я змінної>: n : т,

де n - загальна кількість символів, що відводяться під зна­чення змінної, а т - кількість знаків дробової частини.

У загальну кількість символів входить і знак числа, і крапка, що відділяє дробову частину числа від цілої. Цей тип форматуван­ня, звісно, задається тільки для дійсних чисел. Для форматування цілих чисел параметр т зайвий.

Для більшої ясності наведемо кілька прикладів з поясненнями:

write('cyмa=',S:10:6);

write('кількість елементів:',n:5);

writeln('a=',a:0:3,' b=',b).

У першому прикладі при S=-101.697 буде виведена на екран сума=-101.697.

У другому при n=57 -кількість елементів:_ _ _57.

У третьому при а=10.2458 та b=-132.879 - а=10.246 b=-1.32879Е+2.

З цих прикладів можна зробити такий висновок. При форма­туванні у дробовій частині при зайвих зарезервованих позиціях у кінці числа дописуються нулі, а при їх нестачі відбувається округлення останньої можливої цифри. У цілій частині надрукується стільки цифр, скільки необхідно для даного числа, навіть якщо є нестача позицій, або ж перед цілою частиною буде виведена необхідна кількість пробілів, якщо вказано позицій більше, ніж потрібно. При відсутності форматування значення дійсних чисел будуть надруковані у показниковій формі.

Скориставшись цією інформацією, ви швидко оціните зруч­ність форматування вихідних даних.

Використання процедур та функцій модуля CRT

Монітори персональних комп'ютерів можуть працювати у двох режимах - текстовому та графічному. Після запуску програми на виконання автоматично задається текстовий режим роботи, при якому на екран може виводитися 80 символів у 25 рядках. Ознайомлення з графічним режимом роботи монітора буде попереду. Але й для текстового режиму існує багато цікавих додаткових можливостей. Усі вони реалізовані у вигляді процедур та функцій, розміщених у модулі CRT. У Паскалі під модулями розуміють бібліотеки, в яких розміщені процедури та функції, що виконують роль допоміжних алгоритмів. Вони знаходяться в окре­мих файлах і підключаються до вашої програми тільки тоді, коли їх імена вказані у розділі Uses. Це дозволяє не «перевантажувати» Паскаль-програму зайвою інформацією.

Найбільш використовувані модулі (серед них і модуль CRT) поміщені у файл turbo.tpl (tpl - Turbo Pascal Library). Тому перед використанням можливостей цього модуля перевірте наявність файла turbo.tpl на диску.

Для підключення модуля CRT до програми необхідно до неї включити такий рядок: program my_prog;

uses crt;

     begin

---------------------  

end.

Наведемо список основних процедур модуля CRT.

ClrScr                                 - очищення екрану монітора;

GoToXY(x,y)          - встановлення курсора в позицію х рядка у (1<=х<=80, 1<=:у<=25);

TextCoIor(color)               - встановлення кольору тексту;

TextBackGround(сolor)  - встановлення кольору фону символів;

Delay (Ms)                    -затримка виконання програми на вказаний у мікросекундах термін часу (спробуйте Delay(200));

Sound(Hz)            -увімкнення    звукового        сигналу вказаної частоти (у герцах);

NoSound            -відключення звукового сигналу.

Залишилися невідомими значення параметрів (аргументів) процедур для роботи з кольорами. Наведемо їх значення у вигляді таблиці:

0

Black

чорний

1

Blue

синій

2

Green

зелений

3

Cyan

блакитний

4

Red

червоний

5

Magenta

фіолетовий

6

Brown

коричневий

7

LightGrey

яскраво-сірий

8

DarkGrey

темно-сірий

9

LightBlue

яскраво-синій

10

LightGreen

яскраво-зелений

11

 LightCyan

яскраво-блакитний

12

Light Red

рожевий

13

LightMagenta

бузковий

14

Yellow

жовтий

15

White

білий

128

Blink

блимання символа

При вказанні необхідного кольору можна користуватися або числовими значеннями, або ж їх мнемонічними альтернативними позначеннями - це одне й те ж саме. Паскаль все зрозуміє!

Процедури дуже схожі на оператори Паскаля, бо записуються окремими «реченнями» та завершуються символом «;». Серед них є такі, яким необхідно передати для виконання аргументи, а інші виконуються без усякої додаткової інформації.

Вам, напевно, доводилося писати заяви?

Завдання

Давайте розберемо алгоритм цієї задачі за домовленості, що ми заповнюємо уявний бланк заяви при оформленні на роботу.

Задати ім'я директора організації, якому подається заява.

Задати ім'я заявника.

Вказати дату подачі заяви.

Внести дані, зазначені у п.п.1-3, до тексту заяви.

Програма, що відповідає наведеному алгоритму та використо­вує можливості виведення інформації на екран монітора, передбачає зображення на екрані монітора тексту заяви за всіма вимогами щодо оформлення цього документу. Переконайтеся в цьому, набравши її текст і запустивши на виконання,

program statement;

   uses crt;

   var name_direct, my_name, data: string;

       begin

writeln ('Введіть ім"я директора організації');

readln (name_direct);

writeln ('Введіть своє ім'’я');

readln (myjname);

writeln ('Введіть дату подачі заяви');

readln (data);

ClrScr;

TextColor(Red);

Sound(200);

GoToXY(50,l);

write ('Директору ‘, name_direct);

GoToXY(50,2);

write (my_name);

GoToXY(35,6);

write ('ЗАЯВА ');

GoToXY(5,8);

write('Прошу прийняти мене,’ ,my_name,' на роботу.');

GoToXY(5,10);

write (data);

NoSound;

Delay(500)

    end.

Зверніть увагу на те, що значення змінних величин типу string треба задавати лише процедурами readln, а після використання процедур GoToXY йдуть процедури write, адже після встановлення курсора в потрібне місце екрана процедура writeln перемістить його на початок наступного рядка.

А тепер розглянемо дві цікаві функції модуля CRT.

KeyPressed         - повертає значення true, якщо була натиснена будь-яка клавіша, та false - у протилежному випад­ку;

ReadKey - повертає значення символу, що відповідає натисненій клавіші.

Ви вже помітили, чим відрізняються функції від процедур? Процедури зразу виконують передбачені в них дії, а функції одержують певні значення, з якими далі необхідно виконати деякі дії. І ми зараз цьому навчимося!

Перш за все розберемося, як відбувається введення вами інформації з клавіатури. Клавіатура, як і інші периферійні пристрої, має свій буфер, тобто виділену частину оперативної пам'яті. Саме в ньому послідовно «збираються» коди тих клавіш, які ви натискаєте. Робота стандартних процедур read та readln організована таким чином, що тільки при натисканні клавіші ENTER всі накопичені в буфері дані певним чином перетворюються і присвоюються черговій змінній. Після цього буфер клавіатури спорожнюється і готовий для одержання нових даних.

Повернемося до наших функцій. Функція ReadKey читає з буфера клавіатури код натиснутої клавіші, що знаходиться у буфері першою. Якщо перед виконанням цієї функції буфер був порожнім, то програма переходить у режим очікування, поки у буфер щось не буде занесене. У цьому випадку після виконання функції ReadKey буфер знову стає порожнім. Якщо ж при виконанні функції ReadKey буфер не був порожнім, то він спорожниться тільки тоді, коли функцію виконають стільки разів, скільки кодів клавіш є у

буфері. Саме цією особливістю можна скористатися, щоб зробити затримку виконання вашої програми до натискання будь-якої клавіші. Цією особливістю дуже зручно користуватися наприкінці програми, щоб мати можливість проаналізувати одержані результати, перш ніж середовище Turbo Pascal перейде у режим роботи з текстом вашої програми,

program my__prog;

    uses crt;

    var k: char;

   begin

      { тіло програми }

      k:=ReadKey;

  end.

Затримку виконання програми можна зробити і використавши процедуру readln без аргументів:

program my_prog;

   begin

        { тіло програми }

        readln;

   end.

Особливість використання такої «затримки» полягає в тому, що процедура readln реагує лише на натискання клавіші «Enter».

І ще один, третій варіант організації «затримки» роботи вашої програми. Це використання функції KeyPressed. Для пояснення нам доведеться забігти трошки наперед. Справа в тім, що функція KeyPressed нічого з буфера не вичитує, а лише перевіряє, чи там щось є. Скориставшись цією особливістю, запишемо оператор: repeat until KeyPressed.

Прочитати цей запис можна таким чином: «повторювати, поки не буде натиснена якась клавіша». Поки буфер буде порожній, функція KeyPressed повертатиме значення false і ми будемо «висіти» на цьому фрагменті програми. Але як тільки буде натиснена будь-яка клавіша, функція KeyPressed поверне значення true і зазначену дію буде завершено.

Отже, варіант використання функції KeyPressed:

program my_prog;

     uses crt;

        begin

          { тіло програми }

          repeat until KeyPressed;

       end.

До речі, інформація у буфері після використання функції KeyPressed залишиться, тобто ця функція лише перевіряє наявність інформації в буфері клавіатури. Це означає, що всередині програми такий спосіб «затримки» треба використовувати дуже обережно і лише тоді, коли ви переконані, що перед цією операцією буфер клавіатури був порожнім. Може, колись вам стане у пригоді порада, яким чином спорожнити буфер клавіатури. Для цього можна використати такий фрагмент програми:

program empty;

     uses crt;

     var k: char;

        begin

          { тіло програми }

          while KeyPressed do

                   k:=ReadKey;

           { продовження тіла програми }

    end.

На останок розглянемо алгоритм обчислення середнього арифметичного значення будь-яких трьох чисел. Алгоритм зредбачає послідовність виконання таких дій:

Задати три числа, наприклад, х, у, z. Обчислити їх середнє арифметичне   за  формулою   s = .

Вивести значення результату, яке отримала змінна s.

Тепер наведемо приклад програми, що реалізує наведений алгоритм:

program my_prog;

     uses crt;

     var  x,y,z,s: real; k: char;

        begin

              ClrScr;

              TextColor (Green);

              GoToXY(30,10);

              write ('Введіть три будь-яких числа:');

              readln (x,y,z);

              s:=(x+y+z)/3;

              GoToXY(30,15);

              write ('Середнє арифметичне чисел \x:7:3,y:7:3,z:7:3);

              GoToXY(45,16);

              write (s: 10:5);

              k:=ReadKey;

       end.

НЕ ПРИПУСКАЙТЕСЯ ПОМИЛОК!

У цих розділах буде зроблена спроба застерегти вас від типових помилок, яких допускають майже усі початківці. Будуть вони обов'язково і у вас, але звертайтеся до цих розділів і скоріше за все ви знайдете в них відповіді майже на всі запитання.

І ще одне зауваження. Частину помилок ви будете одержувати під час компіляції програми - це частіше за все помилки синтаксичного характеру. В результаті компіляції програми буде вказано на розташування таких помилок. Коли ж усі вони будуть ~ виправлені, можуть з'явитися помилки на етапі виконання вашої програми - це вже арифметичні або ж логічні помилки. їх аналізувати важче, але можливо.

Якщо компілятор видав помилку

Error 85: «;» expected,

то це означає, що перед символом, на який вказує курсор, відсутній символ ";». Ця помилка, швидше за все, зроблена вами в кінці попереднього рядка.

Якщо ви зробите помилку в записові самого оператора Паскалю, то компілятор зреагує на це повідомленням Error 113: Error in statement.

Якщо при компіляції вашої програми було видане повідом­лення про помилку

Error 4: Duplicate identifier, то це може означати, що ім'я програми та деякої змінної або двох змінних однакові.

Якщо компілятор видасть повідомлення про помилку

Error 3: Unknown identifier, то це означає, що вказане ім'я змінної не описане в розділі змінних.

При непарній кількості апострофів в процедурі write компіля­тор видає повідомлення про помилку з таким коментарем: Error 8: String constant exceeds line, що означає «рядкова константа перевищує розміри рядка».

Будьте уважні при введенні дуже довгих рядків. На такі ситуації компілятор реагує повідомленням про помилку: Error 1 і: Line too long.

Якщо у кінці програми немає крапки, то буде видане повідом­лення про помилку

Error 10: Unexpected end of file,

що означає «несподіване закінчення файла».

Якщо при компіляції програми не розпізнається ім'я будь-якої процедури або функції з модуля CRT, то в першу чергу перевірте, чи підключений цей модуль.

4. Виконання вправ.

Задача1.

Вивести на зеленому тлі у центрі екрана червоним кольором миготливе слово Привіт.

Розв'язування задачі забезпечать такі команди: gotoxy(38,12);

textcolor(red+blink);

textbackgroimd(3);

write('Привіт').

Задача 2.


5. Підведення підсумків уроку.


6. Типові запитання до уроку.

  1. Яка команда призначена для введення даних?
  2. Для чого використовують команду readln?
  3. Опишіть дію команди виведення даних на екран.
  4. Для чого використовують формати виведення?
  5. Який формат використовують для виведення цілих чисел?
  6. Який формат використовують для виведення дійсних чисел?
  7. Який формат використовують для виведення тексту?
  8. Для чого призначені коментарі, як їх записують у програмі?
  9.  Назвіть текстові координати центра екрана.
  10. Яке призначення команди clrscr?
  11. Якими кольорами можна вивести на екран тексти?
  12. Яка команда задає колір символів, а яка — колір тла?


7. Домашнє завдання

1. Підготуватися до опитування (конспект).

2. Підготуватися до тестування  по темам “Арифметичні операції. Арифметичні вирази” та “Можливості введення та виведення інформації”

3. Виконайте    завдання.