IPB
ЛогинПароль:

> Правила раздела!

1. Заголовок или название темы должно быть информативным !
2. Все тексты фрагментов программ должны помещаться в теги [code] ... [/code] или [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ" и используйте ПОИСК !
4. НЕ используйте форум для личного общения!
5. Самое главное - это раздел теоретический, т.е. никаких задач и программ (за исключением небольших фрагментов) - для этого есть отдельный раздел!

 
 Ответить  Открыть новую тему 
> Почему моя прога виснет?
сообщение
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 33
Пол: Мужской

Репутация: -  0  +


У меня прога виснет если n> 2500 (примерно), при этом диспетчер задач не говорит, что она повисла. Почему?

Код
type sm_type=array [0..10000] of char;
var sm: sm_type;
st:string;
i,n,is,si: integer;

begin

n:=1;
While n<>0 do begin
  Write('>');
  readln(n);
case n of
0: exit end;

for i:=1 to n do begin
str(i, st);
 for is:=1 to length(st) do begin si:=si+1;
 sm[si]:=st[is] end;

end;
Writeln('Number ',n,'= ',sm[n]);
Writeln;
end;
end.


Сообщение отредактировано: Skrip -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Ищущий истину
******

Группа: Пользователи
Сообщений: 4 825
Пол: Мужской
Реальное имя: Олег

Репутация: -  45  +


Процессор долго вычисляет.
Это не зависание, ждите.
Если у вас не Крэй, то это, при n>2500 будет долго вычислятся...


--------------------
Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Смотрю...
*****

Группа: Пользователи
Сообщений: 1 055
Пол: Мужской
Реальное имя: Пшеничный Алексей Анатольевич

Репутация: -  6  +


А еще si не инициализирована в самом начале...
А может в процессе ее значение переваливает за 32767 ?...
Но скорее всего выходит за рамки 0..10000 - надо проверку ставить, так сказать "защиту от дурака"


--------------------
Если что-то не делает того, что вы запланировали ему делать - это еще не означает, что оно бесполезно.
--------------------
Прежде, чем задать вопрос - Правила :: FAQ :: Поиск
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Ищущий истину
******

Группа: Пользователи
Сообщений: 4 825
Пол: Мужской
Реальное имя: Олег

Репутация: -  45  +


Сомневаюсь, я думаю, что просто время вычисления, т.к. вот на этом коде:

Код
for i:=1 to n do begin
str(i, st);
for is:=1 to length(st) do begin si:=si+1;
sm[si]:=st[is] end;

количество итераций растет лавиобразно ...

а что делает прога?


--------------------
Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Гость






Skrip

Можно вопрос ? Задание звучит так ?

"Дано натуральное n. Вывести n-ую цифру последовательности 12345678910111213…, в которой выписаны подряд все натуральные числа."
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Ищущий истину
******

Группа: Пользователи
Сообщений: 4 825
Пол: Мужской
Реальное имя: Олег

Репутация: -  45  +


volvo чародей smile.gif
Откуда узнал? может прога вообще написанна на 100 неправильно?
Но если угадал, то это точно без магии не обошлось smile.gif :D


--------------------
Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Гость






Oleg_Z

А Debugger зачем? (Кстати, программа-таки дает неверные ответы... :yes:)

Хотя, может условие было другим.... rolleyes.gif
Ждем автора...

А если я все-таки прав насчет условия, то эта задача решается без массивов по 10000 элементов и безо всяких задержек, т.е. практически мгновенно:
Код

Function Power(a, x: LongInt): LongInt;
 Begin
   Power := Trunc( Exp(x * Ln(a)) )
 End;

Const
 n: Integer = {110}  (* result = 6 *)
              {18}   (* result = 1 *)
              19   (* result = 4 *)
              {1992} (* result = 0 *)
              {100}  (* result = 5 *)
              {201}  (* result = 3 *)
              {215}  (* result = 6 *)
              {621}  (* result = 3 *)
              {154}  (* result = 8 *)
            ;
Var
 TPower, nPrev: Integer;
 i, nCount, nPosIn: Integer;
 Decr: Integer;
 s: String;
Begin
 TPower := 0; nPrev := n;
 Repeat
   Inc(TPower);
   Decr := 9 * TPower * Power(10, Pred(TPower));
   n := n - Decr;
 Until n < 0;
 n := n + Decr;

 nCount := (n div TPower) + (n mod TPower);
 Dec(TPower);
 For i := 1 To TPower do
   Inc( nCount, 9 * Power(10, Pred(i)) );
 nPosIn := Succ(TPower) - (n mod Succ(TPower));

 Str(nCount, s);
 WriteLn('Digit #', nPrev, ' = ', s[nPosIn])
End.


Сообщение отредактировано: volvo -
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Новичок
*

Группа: Пользователи
Сообщений: 33
Пол: Мужской

Репутация: -  0  +


Задание было такое.
Вводим n. По данному числу n (1<=n<=10000) определить n-ю по счуту цифру в последовательности чисел от 1 до n.

Oleg_Z, наврятли это комп. долго думает, потому что 2487 высчитывает молнееносно, а 2500 вообще прога выключается. Это я что-то в коде обшибся, получается... sad.gif Кстати, что такое Крэй?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Гуру
*****

Группа: Пользователи
Сообщений: 1 220
Пол: Мужской

Репутация: -  16  +


Цитата(Skrip @ 17.11.04 7:02)
Кстати, что такое Крэй?

Cray - это суперкомпьютеры
http://cs.mipt.ru/docs/comp/rus/develop/pa...vodin/lec2.html
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Ищущий истину
******

Группа: Пользователи
Сообщений: 4 825
Пол: Мужской
Реальное имя: Олег

Репутация: -  45  +


ТОгдапросто алгоритм неверен.
Цитата
Вводим n. По данному числу n (1<=n<=10000) определить n-ю по счуту цифру в последовательности чисел от 1 до n.

Ьред какой-то, если число n, последовательность до n и вывести надо n-й член последовательности, то это просто последний элемент последовательности.

--
Крэй это древний суперкомпьютер, который мог обрабатывать сразу 8 байт (!) информации, вместо одного.


--------------------
Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


Гость






Skrip
А сколько цифр содержится в последовательности чисел от 1 до 10000?
1*9 + 2*90 + 3*900 + 4*9000 = 38799... А не 10000, как описано....Может, здесь проблема?

Oleg_Z
Цитата
n-ю по счуту цифру


Это как раз моя программа и делает...
:yes:

Сообщение отредактировано: volvo -
 К началу страницы 
+ Ответить 
сообщение
Сообщение #12


Новичок
*

Группа: Пользователи
Сообщений: 33
Пол: Мужской

Репутация: -  0  +


Цитата
А сколько цифр содержится в последовательности чисел от 1 до 10000?
1*9 + 2*90 + 3*900 + 4*9000 = 38799... А не 10000, как описано....Может, здесь проблема?

Сдесь я точно затупил. Стыд-то какой... unsure.gif
Но прога все равно корректно не работает: то вылетает, то затупает.
Поэтому ее мне придется переписать.

Сообщение отредактировано: Skrip -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #13


Гость






Skrip
Я же привел пример рабочей программы. Или он тебе не подходит?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #14


Новичок
*

Группа: Пользователи
Сообщений: 33
Пол: Мужской

Репутация: -  0  +


volvo, прога то подходит, но я должен сделать ее сам. ;)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #15


Знаток
****

Группа: Пользователи
Сообщений: 303
Пол: Мужской
Реальное имя: Роман

Репутация: -  2  +


Цитата(Skrip)
прога то подходит, но я должен сделать ее сам

Уважаю!

Операции со строками очень непроизводительны. Более того, они неприменимы при работе с числами !


--------------------
Romiras HomeLab- материалы и статьи по разработке ПО, моделирование алгоритмов, обработка и анализ информации, нейронные сети, машинное зрение и прочее.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #16


Ищущий истину
******

Группа: Пользователи
Сообщений: 4 825
Пол: Мужской
Реальное имя: Олег

Репутация: -  45  +


Цитата
Уважаю!

И я!
Это замечательно!


--------------------
Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 17.05.2024 3:00
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name