Помощь - Поиск - Пользователи - Календарь
Полная версия: Паскаль, циклические алгоритмы > Информатика / Программирование
Образовательный студенческий форум > Другие дисциплины > Информатика / Программирование
kate17
Можете помочь решить задачу в паскале на тему циклические алгоритмы?
граф Монте-Кристо
Помочь можем. Решать будете сами.
kate17
Числа 1,10,100,1000..выписаны подряд без пробелов между ними.Ввести N (1<=N<=1000000) и определить,какая цифра стоит на N-ом месте.

Я думала записать саму эту последовательность как k1:=K*10...K2=K1*10...., где k:=1.Но не знаю как ввести еще один счетчик, чтобы считалось само место числа, потому что в любом случае ответ будет либо 1,либо 0. Или я вообще неправильно рассуждаю?(
Vahappaday
неправильно) записывать последовательность не надо...
точнее записать-то можно, но это крайне неэкономично.
Я бы сделал так.
Есть текущая длина числа, обзовём её буквой C, изначальна равна 1 (для 1 равна одному, для 10 - двум и т.д.).
Есть N - позиция числа.
Каждую итерацию уменьшаем N на C, и увеличиваем C на единицу.
Итерации проводим пока N>C.
Как только N <= C смотрим значение N. Если N=1, то мы попали в первую цифру какого-то числа, то бишь, в единичку. Если не равно 1, то попали в нолик.

Если что непонятно, прошу обращаться)
kate17
А как представить уменьшение итерации С на N?
Vahappaday
N:=N-C;
kate17
Получилось) Но, если проверить, то зачастую программа выдает 0, когда должна быть единица. Может я неправильно записала?

Var N,C:integer;
begin
write('Введите место числа N=');
read(N);
c:=1;
While N<=C do N:=N-C; c:=c+1;
If N<=C then begin read(N) end;
If N=1 then begin write(1)end;
If N<>1 then begin write(0)end;
end. sad.gif
Vahappaday
хм... чего-то ерунда какая-то....
1. Во-первых,
Код
While N>C


2. Во-вторых, у меня вопрос к паскалянтам, после do вся строчка выполняется каждую итерацию или только первое выражение?
Я про строку
Код
While N<=C do N:=N-C; c:=c+1;

Не стоит ли её заменить на
Код
While N<=C do begin N:=N-C; c:=c+1; end;

Оговорюсь, паскаля не знаю вообще, так что по этому пункту могу ошибаться.

3. В-третьих, строка
Код
If N<=C then begin read(N) end;

вообще не понятна.
граф Монте-Кристо
Насколько я помню, после do, если нет begin'а, выполняется только первая строчка. Так что заменить стоитsmile.gif
kate17
эх...третья строка вообще не нужна. После do выполняется вся строка.

Ура) все верно) Спасибо большое вам.
Vahappaday
На здоровьице))
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.
Русская версия Invision Power Board © 2001-2024 Invision Power Services, Inc.