Proc26. Описать функцию IsPower5($$K$$) логического типа, возвращающую True, если целый параметр $$K$$ ($$> 0$$) является степенью числа 5, и False в противном случае. С ее помощью найти количество степеней числа 5 в наборе из 10 целых положительных чисел.
Решение:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
program Proc26; Function IsPower5(K:Integer):Boolean; begin While (K>=5) do begin if ((k mod 5)<>0) and (k<>1) then begin K:=0; IsPower5:=False; end; K:=k div 5; end; if K=1 then IsPower5:=True else IsPower5:=False; end; var i,N,Res:Integer; begin for i:=1 to 10 do begin Write('N :'); Readln(N); if IsPower5(N) then Inc(Res); end; Writeln(Res); end. |
Решение olegst1975:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
function IsPower5(k:integer):boolean; var n1:integer; begin n1:=1; result:=false; while n1<=k do//перебор и сравнение степеней 5 не выше числа К begin if n1=k then result:=true; n1:=n1*5; end; end; var i,k,n:integer; begin n:=0; for i:=1 to 10 do begin read(k); if IsPower5(k) then inc(n); end; write(n); end. |
Решение Newton:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
program Proc26; Function IsPower5 (K : integer) : boolean; var Test : integer; begin Test := 5; while Test < K do Test := Test * 5; IsPower5 := (Test = K); end; var i,N,Res:Integer; begin for i:=1 to 10 do begin Write('N :'); Readln(N); if IsPower5(N) then Inc(Res); end; Writeln(Res); end. |
Другие задачи из раздела Proc можно посмотреть здесь.
нужно доработать, сейчас на 10,20 реагирует true(как на кратность 5), учесть 50=1(первым сравнением отсекается);
Поправил
Было:
Стало:
[/crayon]
Добавил в шапку.
Еще вариант:
Добавил в шапку.. принцип такой же как у olegst1975, но элегантней. 🙂
Newton единицу потерял (K=1). Строка пятая Test:=1.