Proc27. Описать функцию IsPowerN($$K$$, $$N$$) логического типа, возвращающую True, если целый параметр $$K$$ ($$> 0$$) является степенью числа $$N$$ ($$> 1$$), и False в противном случае. Дано число $$N$$ ($$> 1$$) и набор из 10 целых положительных чисел. С помощью функции IsPowerN найти количество степеней числа $$N$$ в данном наборе.
Решение:
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 30 31 32 |
program Proc27; Function IsPowerN(K,N:Integer):Boolean; begin While (K>=N) do begin if ((k mod N)<>0) and (k<>1) then begin K:=0; IsPowerN:=False; end; K:=K div N; end; if K=1 then IsPowerN:=True else IsPowerN:=False; end; var i,N,K,Res:Integer; begin Write('N :'); Readln(N); for i:=1 to 10 do begin Write('K :'); Readln(K); if IsPowerN(K,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 25 |
function IsPowerN(k,n:integer):boolean; var PowerN:integer; begin PowerN:=1;//нулевая степень числа N result:=false; while PowerN<=k do//перебор и сравнение степеней N не выше числа K begin if PowerN=k then result:=true; PowerN:=PowerN*n;//очередная степень числа N end; end; var i,k,n,n1:integer; begin n1:=0; read(n); for i:=1 to 10 do begin read(k); if IsPowerN(k,n) then inc(n1); end; write(n1); end. |
Другие задачи из раздела Proc можно посмотреть здесь.
Точно не реагирует на 1(нулевую степень любого числа), скорее недостатки как и в предыдущей задаче(использован тот же метод).
[/crayon]
строку 9 удалить, строку 12 заменить на
result:=(PowerN=k);
Поправил. Добавил в шапку.
В задании сказано, что K (>0) и N(>1) то есть прямо сказано, что нулевую степень числа не рассматриваем.
Всё равно не выдержал, и поправил:
Поправил
Было:
Стало:
K=1 и есть N в степени ноль
а да … попутал N и К
..только i:=1 to 10, а не до 4
Считает правильно, но в задание просят созадать функцию IsPowerN(K, N) , а у вас IsPowerN(N), что не может не печалить. 🙁
Для любых целых чисел K и N: