![]() |
1. Заголовок или название темы должно быть информативным !
2. Все тексты фрагментов программ должны помещаться в теги [code] ... [/code] или [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ" и используйте ПОИСК !
4. НЕ используйте форум для личного общения!
5. Самое главное - это раздел теоретический, т.е. никаких задач и программ (за исключением небольших фрагментов) - для этого есть отдельный раздел!
![]() ![]() |
![]() |
Skrip |
![]()
Сообщение
#1
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 33 Пол: Мужской Репутация: ![]() ![]() ![]() |
У меня прога виснет если 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 - 16.11.2004 17:28 |
Altair |
![]()
Сообщение
#2
|
![]() Ищущий истину ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 824 Пол: Мужской Реальное имя: Олег Репутация: ![]() ![]() ![]() |
Процессор долго вычисляет.
Это не зависание, ждите. Если у вас не Крэй, то это, при n>2500 будет долго вычислятся... -------------------- Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С) |
APAL |
![]()
Сообщение
#3
|
![]() Смотрю... ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 1 055 Пол: Мужской Реальное имя: Пшеничный Алексей Анатольевич Репутация: ![]() ![]() ![]() |
А еще si не инициализирована в самом начале...
А может в процессе ее значение переваливает за 32767 ?... Но скорее всего выходит за рамки 0..10000 - надо проверку ставить, так сказать "защиту от дурака" -------------------- |
Altair |
![]()
Сообщение
#4
|
![]() Ищущий истину ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 824 Пол: Мужской Реальное имя: Олег Репутация: ![]() ![]() ![]() |
Сомневаюсь, я думаю, что просто время вычисления, т.к. вот на этом коде:
Код 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; количество итераций растет лавиобразно ... а что делает прога? -------------------- Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С) |
volvo |
![]()
Сообщение
#5
|
Гость ![]() |
Skrip
Можно вопрос ? Задание звучит так ? "Дано натуральное n. Вывести n-ую цифру последовательности 12345678910111213…, в которой выписаны подряд все натуральные числа." |
Altair |
![]()
Сообщение
#6
|
![]() Ищущий истину ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 824 Пол: Мужской Реальное имя: Олег Репутация: ![]() ![]() ![]() |
volvo чародей
![]() Откуда узнал? может прога вообще написанна на 100 неправильно? Но если угадал, то это точно без магии не обошлось ![]() -------------------- Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С) |
volvo |
![]()
Сообщение
#7
|
Гость ![]() |
Oleg_Z
А Debugger зачем? (Кстати, программа-таки дает неверные ответы... :yes:) Хотя, может условие было другим.... ![]() Ждем автора... А если я все-таки прав насчет условия, то эта задача решается без массивов по 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 - 17.11.2004 0:23 |
Skrip |
![]()
Сообщение
#8
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 33 Пол: Мужской Репутация: ![]() ![]() ![]() |
Задание было такое.
Вводим n. По данному числу n (1<=n<=10000) определить n-ю по счуту цифру в последовательности чисел от 1 до n. Oleg_Z, наврятли это комп. долго думает, потому что 2487 высчитывает молнееносно, а 2500 вообще прога выключается. Это я что-то в коде обшибся, получается... ![]() |
Ozzя |
![]()
Сообщение
#9
|
![]() Гуру ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 220 Пол: Мужской Репутация: ![]() ![]() ![]() |
Цитата(Skrip @ 17.11.04 7:02) Кстати, что такое Крэй? Cray - это суперкомпьютеры http://cs.mipt.ru/docs/comp/rus/develop/pa...vodin/lec2.html |
Altair |
![]()
Сообщение
#10
|
![]() Ищущий истину ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 824 Пол: Мужской Реальное имя: Олег Репутация: ![]() ![]() ![]() |
ТОгдапросто алгоритм неверен.
Цитата Вводим n. По данному числу n (1<=n<=10000) определить n-ю по счуту цифру в последовательности чисел от 1 до n. Ьред какой-то, если число n, последовательность до n и вывести надо n-й член последовательности, то это просто последний элемент последовательности. -- Крэй это древний суперкомпьютер, который мог обрабатывать сразу 8 байт (!) информации, вместо одного. -------------------- Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С) |
volvo |
![]()
Сообщение
#11
|
Гость ![]() |
Skrip
А сколько цифр содержится в последовательности чисел от 1 до 10000? 1*9 + 2*90 + 3*900 + 4*9000 = 38799... А не 10000, как описано....Может, здесь проблема? Oleg_Z Цитата n-ю по счуту цифру Это как раз моя программа и делает... :yes: Сообщение отредактировано: volvo - 17.11.2004 9:17 |
Skrip |
![]()
Сообщение
#12
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 33 Пол: Мужской Репутация: ![]() ![]() ![]() |
Цитата А сколько цифр содержится в последовательности чисел от 1 до 10000? 1*9 + 2*90 + 3*900 + 4*9000 = 38799... А не 10000, как описано....Может, здесь проблема? Сдесь я точно затупил. Стыд-то какой... ![]() Но прога все равно корректно не работает: то вылетает, то затупает. Поэтому ее мне придется переписать. Сообщение отредактировано: Skrip - 17.11.2004 10:30 |
volvo |
![]()
Сообщение
#13
|
Гость ![]() |
Skrip
Я же привел пример рабочей программы. Или он тебе не подходит? |
Skrip |
![]()
Сообщение
#14
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 33 Пол: Мужской Репутация: ![]() ![]() ![]() |
volvo, прога то подходит, но я должен сделать ее сам. ;)
|
Romtek |
![]()
Сообщение
#15
|
![]() Знаток ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 303 Пол: Мужской Реальное имя: Роман Репутация: ![]() ![]() ![]() |
Цитата(Skrip) прога то подходит, но я должен сделать ее сам Уважаю! Операции со строками очень непроизводительны. Более того, они неприменимы при работе с числами ! -------------------- Romiras HomeLab- материалы и статьи по разработке ПО, моделирование алгоритмов, обработка и анализ информации, нейронные сети, машинное зрение и прочее.
|
Altair |
![]()
Сообщение
#16
|
![]() Ищущий истину ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 824 Пол: Мужской Реальное имя: Олег Репутация: ![]() ![]() ![]() |
Цитата Уважаю! И я! Это замечательно! -------------------- Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С) |
![]() ![]() |
![]() |
Текстовая версия | 20.07.2025 15:39 |