Помощь - Поиск - Пользователи - Календарь
Полная версия: Последовательность
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
asu2006
7,9,13,21,37,..... и т.д
Вот код
uses
crt;
var
n,i:byte;
begin
clrscr;
i:=0;
for n:=7 to 100 do
begin

i:=i+2;
n:=n+i;

if n<100 then

write('n=', n);
break;
end;
readln;
end.



но он почему то выдает одну 9?
Lapp
Во-первых, убери Break. Зачем ты его поставил вообще? Ессно отработается только один проход..

Во-вторых - никогда не меняй параметр цикла в самом цикле. Табу.
volvo
А в третьих - шаг в последовательности - 2n, гораздо проще сдвигать переменную влево на 1 бит на каждой итерации, чем использовать вот такие навороты для ее вычисления...
Гость
Цитата(Lapp @ 28.11.2007 12:25) *

Во-первых, убери Break. Зачем ты его поставил вообще? Ессно отработается только один проход..

Во-вторых - никогда не меняй параметр цикла в самом цикле. Табу.

Точнее, типичные циклы, где счетчик цикла меняется внцутри самого цикла, - это while и repeat.

n := 7
i := 1
repeat
writeln ('n=',n)
i := 2*i
n := n + i
until n > 100

Сойдет?
Гость
А почему глюки начинаются когда изменешь 100 на 150 до максимального типа byte 255
volvo
Потому что:
repeat
writeln ('n=',n); { <--- Когда здесь 133 }
i := 2*i; { <--- Тут i становится равным 128 }
n := n + i; { <--- N перескакивает через 256, и становится равно (133+128) mod 256 = 5 }
until n > 150;

, а 5 - меньше чем 150... И опять все заново...
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.