Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Образовательный студенческий форум _ Информатика / Программирование _ Паскаль, циклические алгоритмы

Автор: kate17 1.10.2010, 10:13

Можете помочь решить задачу в паскале на тему циклические алгоритмы?

Автор: граф Монте-Кристо 1.10.2010, 10:25

Помочь можем. Решать будете сами.

Автор: kate17 2.10.2010, 18:54

Числа 1,10,100,1000..выписаны подряд без пробелов между ними.Ввести N (1<=N<=1000000) и определить,какая цифра стоит на N-ом месте.

Я думала записать саму эту последовательность как k1:=K*10...K2=K1*10...., где k:=1.Но не знаю как ввести еще один счетчик, чтобы считалось само место числа, потому что в любом случае ответ будет либо 1,либо 0. Или я вообще неправильно рассуждаю?(

Автор: Vahappaday 2.10.2010, 19:47

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

Если что непонятно, прошу обращаться)

Автор: kate17 3.10.2010, 6:34

А как представить уменьшение итерации С на N?

Автор: Vahappaday 3.10.2010, 8:14

N:=N-C;

Автор: kate17 3.10.2010, 8:33

Получилось) Но, если проверить, то зачастую программа выдает 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 3.10.2010, 8:56

хм... чего-то ерунда какая-то....
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;

вообще не понятна.

Автор: граф Монте-Кристо 3.10.2010, 9:01

Насколько я помню, после do, если нет begin'а, выполняется только первая строчка. Так что заменить стоитsmile.gif

Автор: kate17 3.10.2010, 9:09

эх...третья строка вообще не нужна. После do выполняется вся строка.

Ура) все верно) Спасибо большое вам.

Автор: Vahappaday 3.10.2010, 9:18

На здоровьице))

Русская версия Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)