Вывести к-ую цифру арифмитической последовательности 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 класс