Написать программу печати чисел фибоначчи от 1 до 1000, являющихся простыми числами, а также их порядковых номеров в ряду фибоначчи. с программой на паскале .
Var f1,f2,s:longint; k:integer; function prost(n:longint):boolean; var j,m:integer; begin m:=0; for j:=2 to trunc(sqrt(n)) do if n mod j = 0 then inc(m); prost:=m=0; end; begin f1:=1; f2:=1; writeln('№ - Число'); writeln('1 - ',f1); s:=1; k:=2; while s<=1000 do begin if prost(s) then writeln(k,' - ',s); inc(k); s:=f1+f2; f1:=f2; f2:=s; end; end.
1) похоже здесь ошибка if a ? b 7)Если остаток от деления а на 2 НЕ равен 3, то а увеличить на 1. Остаток от деления а на 2 никогда не будет равен 3, так что a:=a+1 более короткая запись 8)если остаток от деления a на 2 равен или 1 или 0, и а больше нуля, то а сделать отрицательным. Так как остаток от деления на 2 всегда равен или 0 или 1, то более короткая запись if a<0 a:=-a 9) если а - отрицательно, то b присвоить значение a, если больше
, то сделать а отрицательным и b присвоить значение отрицаетльного
1) Независимо от условия будет выполнен оператор присваивания. a:=b 2) Условие ложное, значит будет выполнен оператор после else write('b') 3) Условие истинное, значит будет выполнен оператор после then write('a') 4) Функции операторов присваивания одинаковы, значит не зависят от условия (a + b - 14 = b - 14 + a) a := a + b - 14 5) Оператор a := a практически ничего не изменяет, значит можно избавится от него if a<b then a:=b 6) То же самое, что и в пункте 5, только нужно поменять истину на ложь if not(a>b) then a:=b 7) Остаток деления на 2 не может быть равен трем, значит условие всегда ложно. Else нет, значит условный оператор можно смело откинуть 8) Остаток от деления на может быть равен или 0 или 1, значит в любом случае условие истинно. Первый условный оператор можно смело откинуть, но вложеннный остается! if a<0 then a:=-a 9) Если a отрицательное, тогда b = a, то есть тоже отрицательно. Если a неотрицательное, тогда b = -a, то есть b отрицательное. Можно записать как модуль числа a, умноженный на -1 b := -abs(a)
function prost(n:longint):boolean;
var j,m:integer;
begin
m:=0;
for j:=2 to trunc(sqrt(n)) do
if n mod j = 0 then inc(m);
prost:=m=0;
end;
begin
f1:=1; f2:=1;
writeln('№ - Число');
writeln('1 - ',f1);
s:=1; k:=2;
while s<=1000 do
begin
if prost(s) then writeln(k,' - ',s);
inc(k);
s:=f1+f2;
f1:=f2;
f2:=s;
end;
end.
Результат:
№ - Число
1 - 1
2 - 1
3 - 2
4 - 3
5 - 5
7 - 13
11 - 89
13 - 233