Процедуры Read и Readln в языках семейства Паскаль (Pascal) предназначены для организации ввода данных с клавиатуры или их чтения из файла. Процедура Read завершает чтение непосредственно после получения последнего символа исходных данных, ограниченного пробелом или признаком смены строки (который получается при нажатии клавиши Enter). Процедура Readln, кроме того, осуществляет принудительный переход к следующей строке, пропуская признак смены строки.
Пример. Пусть надо ввести значения для переменных a и b типа integer.
Read(a, b); выполнит такой ввод независимо от того, как разделять значания - одним или более пробелами, нажатием Enter или комбинацией этих действий.
Readln(a, b); поведет себя точно так же. Поэтому нет разницы, какую из двух процедур использовать (зато Read короче писать!) для ввода данных числового типа.
<em>Но для ввода символов и символьных строк разница есть!</em>
Пробел и признак смены строки - это тоже символы, поэтому тут нужно использовать только Readln, поскольку признаком разделения данных для строк является только смена строки. Строка также может быть и пустой, т.е. не содержать символов.
Поэтому правило такое: если нет ввода символьных данных - используем Read. Если вводятся символьные данные, используем Readln, причем, если перед вводом таких данных вводятся числовые данные, их также надо вводить посредством Readln. Почему? Чтобы после Read не остался ко вводу признак смены строки и не получить в качестве вводимой затем строки пустую.
<em>Подробнее обо всем этом можно прочесть в литературе по языку Паскаль. Например, в книге "PascalABC.NET: Введение в современное программирование", стр 214. Она легко ищется в Интернет, расположена на официальном сайте PascalABC.NET и бесплатна для скачивания.</em>
1. Если первый игрок (П) удвоит число камней в первой кучке, то всего будет 4 + 3 + 4 = 11 камней. Если второй игрок (В) добавит в каждую кучку по 2 камня, то всего станет (4 + 2) + (3 + 2) + (4 + 2) = 17 камней => П проиграет при любом своём ходе. Если В удвоит число камней в первой кучке, то будет 8 + 3 + 4 = 15 камней => выиграет П, удвоив число камней в первой кучке (однако это можно расценивать как поддавки). Если В удвоит число камней во второй кучке, то будет 4 + 6 + 4 = 14 камней => П проиграет при любом своём ходе. Если В удвоит число камней в третьей кучке, то будет 4 + 3 + 8 = 15 камней => выиграет П, удвоив число камней в третьей кучке (тоже очевидные поддавки со стороны В).
2. Если П удвоит число камней во второй кучке, то всего будет 2 + 6 + 4 = 12 камней. В, добавив по 2 камня в каждую кучку, получит (2 + 2) + (6 + 2) + (4 + 2) = 20 камней, и тогда П легко сможет выиграть, удвоив число камней во второй кучке или добавив в каждую кучку по 2 камня. Если В удвоит число камней в первой кучке, то всего будет 4 + 6 + 4 = 14 камней => П проиграет при любом своём ходе. Если же В удвоит число камней во второй или третьей кучке, то П выиграет, удвоив число камней в этой же кучке.
3. Если П удвоит число камней в третьей кучке, то всего будет 2 + 3 + 8 = 13 камней. В, удвоив число камней в третьей кучке, получит 2 + 3 + 16 = 21 камень и выиграет, ибо в третьей кучке 16 камней. Однако в таком случае можно сказать, что П поддался, ибо очевидно, что не стоит делать в одной кучке 8 камней.
4. Если П добавит по 2 камня в каждую кучку, то станет (2 + 2) + (3 + 2) + (4 + 2) = 15 камней. Если В удвоит число камней в любой кучке, то П, удвоив в этой же кучке число камней, выиграет. Если В добавит в каждую кучку по 2 камня, то П, также добавив в каждую кучку по 2 камня, выиграет.
Получается, П абсолютно точно выиграет, если добавит по 2 камня в каждую кучку.
Надеюсь, я нигде не напутала.
Операторы вывода
<span>Эти операторы позволяют выводить на экран
монитора данные из списка вывода. Элементами списка вывода могут являться имена
переменных, выражения, константы. Прежде чем вывести на экран значения
выражений, компьютер сначала их вычислит. Элементы списка, также как и в
операторах ввода, разделяются запятыми.
Операторы ввода
</span>
Эти команды позволяют вводить данные в
одиночные переменные или в несколько переменных сразу во время выполнения
программы с клавиатуры. Элементами списка ввода могут быть имена переменных,
которые должны быть заполнены значениями, введенными с клавиатуры.
<span> </span>
<span>
</span>
Var a,b,i,nod:integer
Begin
a:=-1;
b:=-1;
//ввод первого числа
Writeln('Введите первое число');
While a<0 do
begin
readln(a);
if a<0 then writeln('Ввод ошибочен, повторите ввод первого числа');
end;
//ввод второго числа
Writeln('Введите второе число');
While b<0 do
begin
readln(b);
if b<0 then writeln('Ввод ошибочен, повторите ввод второго числа');
end;
//определение минимального числа
if a>b then i:=b else i:=a;
//перебор чисел от минимального до 0 (т.к. НОД не может быть больше минимального числа)
While nod=0 do
begin
i:=i-1;
if (a mod i = 0) and (b mod i = 0) then nod:=i;
end;
//вывод НОД
Writeln('НОД ', a,' и ', b, ' = ', nod);
end.