Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ОП Конспект лекций - Паскаль.doc
Скачиваний:
20
Добавлен:
30.11.2018
Размер:
1.46 Mб
Скачать

Тема 4: Введення і виведення у Pascal-і. Форматоване виведення

Операції введення в Pascal-і виконують дві процедури: Read і ReadLn, що забезпечують введення з клавіатури даних.

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

read (x1,x2,...xn);

де Х1,Х2,...Хn - змінні, які послідовно приймають ті значення, що вводяться з клавіатури. Дані для змінних вводяться після запуску програми на виконання. При цьому, на екрані з'явиться курсор і процедура Read буде чекати введення значень. Значення, що вводяться, відображаються на екрані монітора.

Якщо мається кілька значень, то їх вводять по одному, натискаючи після кожного введеного значення Enter, або розділяючи кожне значення пробілом (але не комою!), а потім натискають Enter.

Розглянемо приклад введення трьох числових значень для змінних А=3, У=-5, З=7.

Процедура введення буде наступною:

read (a,b,c);

Усі три числові значення набираємо на клавіатурі, розділяючи їх пробілами:

3 -5 7 і натискаємо Enter,

чи

3 і натиснути Enter

-5 і натиснути Enter

7 і натиснути Enter

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

Приклад введення числових даних:

Процедура: Дії, що виконуються:

ReadLn (a,b); 3 -5 Enter;

ReadLn (c); 7 Enter;

ReadLn (d); 8.34 Enter;

Read (e, f); -4.76 Enter;

Read (g); 3.35 Enter;

Read (h); -0.56 Enter;

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

Операції виведення виконують так само дві процедури: Write і WriteLn. Вони здійснюють виведення числових даних, символів, рядків і булевих значень.

Процедура WriteLn аналогічна процедурі Write, але після її виконання курсор переміщаєтьсянав початок нового рядка. Формат запису:

write( x1, x2, ...xn,‘фіксований текст‘);

Тут - Х1,Х2 і т.д., результати виконання вираження і змінних; фіксований текст - це текст пояснень, що друкується точно таким, як він введений. Фіксований текст повинен заключатися в апострофи:

writeln (‘Сума чисел ‘, х1, х2 ‘та’ , х3, ‘дорівнює:’, Sum );

writeln ('Кінотеатр "Космос" ');

Для друку самого апострофа його потрібно повторити два рази:

writeln (‘Об’’єм призми = ,’ Vpris);

Процедура WriteLn без параметрів друкує порожній рядок. Наприклад:

writeln (‘Значення А=’, А); writeln;

writeln (‘Значення В=’, B);

У процедурі Write можна виконувати форматоване виведення даних. Для цього, у списку після імені змінної чи вираження через двокрапку вказують ширину поля виведення. Наприклад:

write (y1 : 5, sum : 8);

Тут для виведення результату буде відведене поле в 5 місць, а для результату Sum - 8 знакомісць. Якщо результат - речовинне число, то ширину поля задають для цілої і дробової частини числа:

write (res : 6 : 3);

У цьому випадку виведене на екран число буде займати шість позицій, у тому числі з трьома значеннями після десяткової крапки. З огляду на те, що одну позицію займає десяткова крапка, для виведення цілої частини числа залишається 6-3-1=2 позиції.

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

writeln (a : 4 :2);

де для виведення цілої частини числа залишається 4-2-1=1 позиція, а число насправді має тризначну цілу частину, наприклад, 327,43. У цьому випадку помилки не буде - ціла частина числа, усупереч зазначеному формату, буде виведена на екран цілком.

Розглянемо приклади завдання форматів.

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

write (655.456)= 6.5545600000E+2

Тут 6,5545600000- мантиса числа з плаваючою крапкою, яка завжди складається з цілої частини, крапки і 10 знаків після неї, що визначає точність числа (точність залежить від типу ЕОМ), за якими йде технічне Е и порядок. Ціла частина мантиси - завжди зображується однією цифрою.

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

write(655.456 : 1) = 6.6E+02

write(655.456 : 5) = 6.6E+02

Якщо у виведеного числа дробова частина не укладається в кількість відведених для неї позицій , то число округляється (саме ж значення змінної в пам'яті залишається без змін):

write(655.456 : 3 : 1) = 655.5

Якщо для цілої частини відведений нуль позицій, чи недостатня кількість, то ціла частина все рівно буде виведена цілком:

write(655.456 : 0 : 3) = 655.456

write(655.456 : 2 : 3) = 655.456

Для виведення цілої частини числа без її дробової частини і без експоненти, потрібно у форматі відвести для дробової частини нуль позицій:

write(655.456 : 3 : 0) = 655

Ціла частина виведеного числа в цьому випадку округляється, наприклад:

write(655.556 : 3 : 0) = 656

Форматоване виведення обов'язково потрібно застосовувати при виведенні в одному рядку двох і більш результатів:

writeln(x1 : 4, x2 : 4, sum : 6);

При виведенні на екран цілих чисел, наприклад:

writeln(17,22,341) = 1722341 , тобто результати злилися .

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

writeln(17,22:3,341:4) = 17 22 341

Можна вивести ці числа в кожному рядку окремо:

writeln(17);

writeln(22);

writeln(341);

але при цьому, тричі приходиться використовувати процедуру WriteLn.

Замість використання формату для поділу результатів можна застосовувати і пробіли:

writeln(res1,’ ‘,res2);

Питання для контролю:

  1. Яким чином виконуються операції введення даних у Pascal?

  2. Як виконуються операції виведення даних у Pascal?

  3. Як записуються імена вводимих змінних?

  4. Чим відрізняються процедури ReadLn від Read; WriteLn від Write?

  5. Коли вводяться дані в програму?

  6. Як варто вводити значення декількох даних?

  7. Чи можна в процедурі Read використовувати фіксований текст?

  8. Що, де і як вказується в процедурі Write для організації форматованого виведення?

  9. Якщо для цілої частини числа відведений нуль позицій, то ...?

  10. Якщо для дробової частини числа відведений нуль позицій, то ...?

  11. Крім форматованого виведення як можна розділити дані?

  12. Що потрібно зробити для виведення результатів на принтер?

  13. Що виводить процедура WriteLn без параметрів?