Вывести к-ую цифру арифмитической последовательности 1234567891011... - как решить такую задачу на языке Паскаль попытаемся рассказать на этой странице.
На уроках программирования в 9 классе преподаватель предложил решить эту задачу. На следующий день отличник принес такой вариант:
program f;
uses crt;
var k,i,n:integer; {описание переменных}
s,x:string;
begin
write('До какого натурального числа сформировать последовательность? ');
readln(n); {считываем натуральное число}
x:='';
for i:=1 to n do {цикл от 1 до введенного числа }
begin
str(i,s);
x:=x+s; {формируем строку из последовательности цифр}
end;
clrscr; {чистим экран}
writeln (x); {выводим получившуюся последовательность цифр}
writeln;
write('Введите K: '); readln(k); {считываем K}
writeln('Ответ: ',x[k]); {выводим ответ}
readln;
end.
Программа работает без замечаний, и правильно выводит к-ую цифру арифмитической последовательности, но преподаватель предложил выполнить задание без использования строковых переменных. Для тех, кто хорошо понимал в программировании возникли трудности. В общем получилась вот такая программа.
program wsegfer;
var a,c,d,k,col,n,a1,col1,s,n1,ost,nom:integer;
label metka1;
begin
writeln('введите число');
readln(k);
col:=0; {общее количество цифр в числах}
col1:=0; {количество цифр в числе}
s:=1;{Вспомогательная переменная}
n:=1; {Число в котором считаем количество цифр, для обработки в программе}
n1:=1;
metka1: repeat
col1:=col1+1;
s:=n mod 10;
n:= n div 10;
until n=0;
{Начинаем новый блок №1}
if (col1+col)< k then
begin
col:=col1+col;
col1:=0;
n1:=n1+1;
n:=n1;
goto metka1
end;
{новый блок 2 }
s:=0;
col1:=0;
c:=n1;{нужное число}
while n1<>0 do
begin
s:=n1 mod 10;
n1:=n1 div 10;
col1:=col1+1;
end;
ost:=k-col;
nom:=abs(ost-(col1+1));{номер нужной цифры цифры с конца числа n1}
d:=0;{переменная для счёта количества цифр с конца числа n1}
s:=0;
repeat
d:=d+1;
s:=c mod 10;
c:=c div 10;
until d=nom;
writeln ('к-ая цифра в арифметической последовательности = ',s);
end.
Возможно есть способы ее оптимитизировать, но мы остановились на данном варианте. Программу разбивали на логические блоки, что бы не запутаться. Как видите в программе несколько раз используется алгоритм выделение цифр из числа, разными методами. И самое сложное в этом варианте вот эта формула, которая позволяет вычислить порядковый номер номер нужной нам цифры в числе начиная с конца nom:=abs(ost-(col1+1)), где ost-порядковый номер цифры в числе с начала, col1- количество цифр в числе.
Автор: Лобанева Анастасия 9 класс