Proc30. Описать функцию DigitN($$K$$, $$N$$) целого типа, возвращающую $$N$$-ю цифру целого положительного числа $$K$$ (цифры в числе нумеруются справа налево). Если количество цифр в числе $$K$$ меньше $$N$$, то функция возвращает -1. Для каждого из пяти данных целых положительных чисел $$K_1, K_2, …, K_5$$ вызвать функцию DigitN с параметром $$N$$, изменяющимся от 1 до 5.
Решение:
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 |
program Proc30; Function DigitN(K,N:Integer):Integer; var i :integer; begin for i:=1 to N-1 do begin K:=K div 10; end; if K<> 0 then DigitN:=K mod 10 Else DigitN:=-1; end; var i,i2,K:Integer; begin for i:=1 to 5 do begin Write('K :'); Readln(K); for i2:=1 to 5 do begin Writeln(DigitN(K,i2)); end; end; 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 26 27 28 29 30 |
program Proc30; function DigitN(k,n:integer):integer; var s:string; temp,error:integer; begin str(K,S); if n>length(s) then result:=-1 else begin s:=s[length(s)-n+1]; val(S,temp,error); result:=temp; end end; var i,i1,k,n:integer; begin for i:=1 to 5 do begin read(k); for i1:=1 to 5 do begin n:=i1; write(DigitN(k,n)); end; end; end. |
Другие задачи из раздела Proc можно посмотреть здесь.
[/crayon]
Добавил в шапку изменив функции strtoint и inttostr, на процедуры val и str.
Объясните, пожалуйста, почему после вывода пяти цифр (включая ‘-1’) в результате выводится шестой цифрой ноль?
при k=12345
5 4 3 2 1 выводится в 15 строке «If (n>=i) then Write(k mod 10,’ ‘)»
а 0 это выводиться в 29 строке в Writeln(dn(k));
тоесть dn(k) = 0;
но по сути в Function dn вы не задаёте значение вывода.
И уж совсем по брюзжать в задании просят созать функцию DigitN(K, N), которое выдаёт n-ую цифру числа k 🙂
Понял, спасибо огромное! 😉
Это вам спасибо за активность на сайте. 🙂