var a,b:integer;
Begin
randomize;
a:=random(99);
writeln('Дополните ', a);
read(b);
if (a+b=100) then writeln(':-)')
else writeln(':-(');
end.
А код верный? Судя по тому, что в условии цикла стоит знак <=, цикл будет работать до тех пор, пока i меньше или равно некоторого числа. То есть цикл должен остановиться, когда i станет больше выбранного числа (которое нужно поставить вместо многоточия). Но в цикле стоит операция уменьшения параметра i. То есть i будет только уменьшаться! Цикл будет бесконечным!
Пример 1:
i:=5;
while i<=4 do begin writeln('Привет'); i:=i-1; end;
Цикл не сработает ни разу, т.к. условие с самого начала неверное!
Пример 2:
i:=5;
while i<=5 do begin writeln('Привет'); i:=i-1; end;
Условие верное, программа "заходит в цикл", выполняет вывод текста, а затем уменьшает значение i на 1, т.е. i=4. Далее идет автоматическая проверка условия цикла, и оно снова верное: 4<=5!
Идет снова выполнение всех операторов цикла, и опять уменьшение i на 1, то есть i=3. И снова условие цикла верное: 3<=5!
И так далее. Теперь каждое следующее значение параметра i меньше предыдущего, а значит, и условие цикла всегда верное! Цикл никогда не остановится!
Пример 3:
i:=5;
while i<=6 do begin writeln('Привет'); i:=i-1; end;
И даже если вместо многоточия поставить число более 5, получим аналогичный результат: условие верное, программа "заходит в цикл", выполняет вывод текста, а затем уменьшает значение i на 1, т.е. i=5. Далее идет автоматическая проверка условия цикла, и оно снова верное: 5<=5!
Идет снова выполнение всех операторов цикла, и опять уменьшение i на 1, то есть i=4. И снова условие цикла верное: 4<=5!
И так далее. Теперь каждое следующее значение параметра i меньше предыдущего, а значит, и условие цикла всегда верное! Цикл никогда не остановится!
Возможно, ошибка в условии цикла? Если записать while i>=3 do..., то цикл сработает 3 раза: при i, равном 5, 4, 3. Либо неверно указано действие в цикле: i:=i-1. Если записать i:=i+1, а вместо многоточия поставить i<=7, то цикл также сработает ровно 3 раза, т.к. i будет менять свое значение 5, 6, 7.
Program asd;
var i,n:integer;
begin
read(n);
while n>0 do begin
i:=i + n mod 10;
n:=n div 10;
end;
write(i);
end.
Var a,b,c: real;
s: string;
begin
write('длины сторон через пробел: ');
readln(a,b,c);
if (a+b>c) and (a+c>b) and (c+b>a) then
begin
if (sqr(a)+sqr(b)=sqr(c)) or
(sqr(a)+sqr(c)=sqr(b)) or
(sqr(b)+sqr(c)=sqr(a)) then
s:='треугольник прямоугольный'
else
if (sqr(a)+sqr(b)>sqr(c)) and
(sqr(b)+sqr(c)>sqr(a)) and
(sqr(a)+sqr(c)>sqr(b)) then
s:='треугольник остроугольный'
else s:='треугольник тупоугольный';
writeln(s);
end
else writeln('треугольник составить нельзя');
<span>end.
</span>