Цикл выполняется 4 раза, почему? Program zad2; Var c:char; i, n, k:integer; begin For...

0 голосов
37 просмотров

Цикл выполняется 4 раза, почему?
Program zad2;
Var c:char;
i, n, k:integer;
begin
For i:=1 to 10 do
begin
read (c);
n:=ord(c);
If (n>64) and (n<91) then <br> k:=k+1;
end;
Write (k);
end.


Информатика (101 баллов) | 37 просмотров
Дан 1 ответ
0 голосов
Правильный ответ

Вы вводите символьную информацию (данное типа char) при помощи процедуры Read(). В языке Паскаль ввод должен ВСЕГДА завершаться посылкой пары кодов "перевод строки" и "возврат каретки", что и происходит при нажатии клавиши "Enter". Так, если Вы вводите латинское "А", программа получает не один символ, а три: с кодом "А", с кодом "перевод строки" и с кодом "возврат каретки". И чтение в цикле происходит сразу три раза до очередного обращения к клавиатуре. Итого получается четыре прохода по циклу: первые три символа на самом деле воспринимаются, как девять, а затем считывается четвертый, что дает десять и цикл завершается.

Для правильной работы с символьными данными (char, string) следует использовать не Read(), а Readln() и все у Вас получится. Процедура Readln() "отрезает" коды "перевод строки" и "возврат каретки".

(150k баллов)