Мітки та переходи
Якщо замість набирання сталої натиснути на Ctrl-Z, то значення змінної v не читається, і вона зберігає своє старе значення. Якщо задати кінець послідовності відразу, то змінна v залишиться з невизначеним значенням. Тому радимо ініціалізувати змінні, значення яких читаються в циклі. Втім, варто ініціалізувати всі змінні, значення яких мають бути прочитані.
Відзначимо, що з повторних викликів функції eof, що виконуються вже після натискання на Ctrl-Z, буде повертатися значення true.
Приклад 3. Напишемо програму, за якою комп'ютер працює "майже як найпростіший калькулятор".
"Найпростіший калькулятор" працює так. Вхідні дані для нього утворюють послідовність вигляду
стала знак стала знак … стала,де сталі задають дійсні числа, а знаки – операції +, -, *, /. Результат застосування чергової операції виводиться на екран і стає першим операндом наступної операції (якщо вона буде задана). Наприклад, результатом читання послідовності 1+2*4 буде 12, а не звичні 9 тому, що обчислюється 1+2=3 і потім 3*4=12.
Алгоритм роботи "найпростішого калькулятора" дуже простий:
Спочатку читається перше число і стає поточним результатом. Далі циклічно читаються знак операції і нове число і результат застосування операції до поточного результату і нового числа стає новим поточним результатом.
Ми поки що не знаємо, як прочитати й подати символи "+", "-", "*", "/". Замість знаків "+", "-", "*", "/" будемо вживати цілі сталі 1, 2, 3, 4 відповідно. Нехай кожна стала набирається з нового рядка на клавіатурі й ознакою закінчення є натискання на Ctrl-Z замість уведення чергового знака операції.
Означимо змінні first і second для зберігання першого й другого операндів чергової операції. Позначення операції читається в змінну signop і після читання другого операнда застосовується операція. Результат операції записується на місце її першого операнда.
Найперше число не виводиться, тому що воно з'являється на екрані при набирании першої сталої. Одержуємо програму simplecalculator ("простий калькулятор"):
program simplecalculator (input, output);
var first, second : real;
signop : integer;
begin
writeln('Операції +, -, *, / позначаються числами 1, 2, 3, 4');
writeln('Задайте дійсне число : '); readln(first);
writeln('Задайте знак операції (1, 2, 3, 4) : ');
while not eof do
begin
readln(signop);
{Увага 1! }