VAR a, b. Integer; BEGIN a: = 20; b: = 16; WriteLn (a + b) END.
VAR a, b. Integer; BEGIN ReadLn (a, b); WriteLn (a + b) END.
Програми відрізняються тільки одним рядком. Перша програма не вимагає пояснень - вона друкує число 36. У другій програмі ніде не сказано, чому дорівнюють a і b, а замість цього включений оператор ReadLn. Поговоримо про нього.
ReadLn читається "рід'лайн", перекладається "читай рядок". Він наказує комп'ютера зупинитися і чекати, коли людина введе з клавіатури певну інформацію, після чого продовжити роботу. Зокрема, ReadLn (a, b) буде чекати введення двох цілих чисел.
Таким чином, якщо перша програма після запуску буде працювати без зупинки до самого кінця і без клопоту видасть результат, то друга програма на операторі ReadLn зупиниться і буде чекати. Під час цього очікування людина повинна на клавіатурі набрати число 20 (так як першим в списку оператора ReadLn варто a), потім натиснути клавішу пробілу, потім набрати 16 і натиснути клавішу Enter. Паскаль сприймає натискання пробілу, як сигнал людини про те, що закінчено набір на клавіатурі одного числа і зараз почнеться набір іншого. Після набору на клавіатурі останнього числа необхідно натиснути клавішу Enter в знак того, що введення чисел для даного оператора ReadLn закінчений і комп'ютер може продовжувати роботу. Відповідно до цього комп'ютер відразу ж після натискання Enter припиняє очікування і перш за все звертає число 20 в пам'ять, в осередок a, число ж 16 - в клітинку b. На цьому він вважає виконання оператора ReadLn закінченим і переходить до наступного оператору - WriteLn. В результаті буде надруковано число 36.
Таким чином, обидві програми роблять одне і те ж. Навіщо ж тоді застосовувати ReadLn замість оператора присвоювання? Адже перша програма зрозуміліше, та й працює без зупинки. Одна з причин в тому, що програма з ReadLn набагато універсальніше, "вільніше": якщо перша програма вирішує завдання складання тільки двох конкретних чисел, то друга програма складає два будь-яких числа. Друга причина в тому, що програма з ReadLn дозволяє програмісту під час написання програми не замислюватися над конкретними значеннями вихідних даних, залишаючи цей головний біль на момент виконання програми. Але найголовніша причина в тому, що ReadLn дозволяє людині спілкуватися з комп'ютером, вести з ним діалог під час виконання програми.
На підтвердження важливості першої причини напишемо програму для вирішення наступного завдання: У зоопарку три слона і досить багато кроликів, причому кількість кроликів часто змінюється. Слону належить з'їдати в добу сто морквин, а кролику - дві. Щоранку служитель зоопарку повідомляє комп'ютера кількість кроликів. Комп'ютер у відповідь на це повинен повідомити служителю загальна кількість морквин, які сьогодні потрібно згодувати кроликам і слонам.
Придумаємо імена змінним величинам:
kol_krol - кількість кроликів в зоопарку
kol_slon - кількість слонів в зоопарку
norma_krol - скільки морквин в день належить кролику
norma_slon - скільки морквин в день належить слону
vsego - скільки всього потрібно морквин
А тепер напишемо програму:
VAR kol_krol, kol_slon, norma_krol, norma_slon, vsego: Integer;
vsego: = norma_krol * kol_krol + norma_slon * kol_slon;
Написавши програму, програміст вводить її в комп'ютер, налагоджує і записує на диск. На цьому його місія закінчена. Вранці служитель, перерахувавши кроликів і знайшовши, що їх 60 штук, підходить до комп'ютера і запускає програму на виконання.
Комп'ютер, виконавши автоматично перші два оператора (norma_krol: = 2 і norma_slon: = 100), зупиняється на операторі ReadLn. Служитель вводить число 60, після чого комп'ютер посилає це число в клітинку kol_krol і переходить до виконання наступного оператора (kol_slon: = 3). Зрештою на моніторі з'явиться відповідь: 420.
Ось схематичне зображення процесу виконання програми:
ПОРЯДОК ВИКОНАННЯ ОПЕРАТОРІВ
ЩО ЗНАХОДИТЬСЯ В комірки пам'яті