Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на языке Pascal


Информационный Канал Subscribe.Ru

RusFAQ.ru: Программирование на языке Pascal

Выпуск № 345
от 27.11.2004, 14:30

Администратор:
Имя: Sensey
URL: Информационный ресурс
ICQ: 105679124
Украина, Харьков
О рассылке:
Задано вопросов: 552
Отправлено ответов: 2098
Активность: 380.0 %
[Задать вопрос >>][Регистрация эксперта >>]
[Поиск в базе][Обсудить на форуме]


 Список экспертов, ответы которых опубликованы в данном выпуске

sir henry
Статус: Профессиональный
Общий рейтинг: 163.94
[Подробней >>]
Boriss
Статус: Профессиональный
Общий рейтинг: 156.07
URL: Программирование на Паскале
[Подробней >>]
Василевский Александр
Статус: Опытный
Общий рейтинг: 115
[Подробней >>]
 
Strory
Статус: Опытный
Общий рейтинг: 159.64
URL: МУАТ
Телефон: +7 (845-3) 54-16-74
[Подробней >>]
Snowm@n
Статус: Опытный
Общий рейтинг: 107.62
URL: Олимпиадное программирование в Чебоксарах
[Подробней >>]
Ayl
Статус: Профессиональный
Общий рейтинг: 116.02
[Подробней >>]


 Краткий перечень вопросов

Вопрос № 548. Дан стек. Нужно его реверсировать, т.е. изменить направление ссылок в стеке на противоположное, т.е. после реверсирования вершина и дно стека меняются местами. Подскажите пожалуйста, как это можно сделать ... (ответов: 2)
Вопрос № 549. Здраствуйте. Вот программа, но она не запускается - выводит ошибку переполнения в стеке. В меню OPtions->Memory sizes - уставнавливал стек побольше вплоть до 65520, но не помогло.Чё делать??... (ответов: 6)

Вопросов: 2, ответов: 8


 Вопрос № 548

Дан стек. Нужно его реверсировать, т.е. изменить направление ссылок в стеке на противоположное, т.е. после реверсирования вершина и дно стека меняются местами.
Подскажите пожалуйста, как это можно сделать



Вопрос отправлен: 22.11.2004, 07:51
Отправитель: rewer8 (rewer8@mail.ru)

[Следующий вопрос >>] [Список вопросов]

Отвечает sir henry

Приветствую Вас, rewer8!
Создать второй, аналогичный, стек и забросить в него данные из первого стека. Потом ссылке на первый стек присвоить ссылку на второй.

Ответ отправлен: 22.11.2004, 09:24
Отправитель: sir henry


Отвечает Boriss

Приветствую Вас, rewer8!
А как Вы стек реализовали? Через статический массив, через динамические структуры?
По-умному, надо запомнить, где начало стека, где конец и направление перехода (+1 или -1).
Тогда, то, что Вы просили делается просто - просто надо поменять местами.
Без более подробной исходной информации вряд ли можно ответить точнее :((

Ответ отправлен: 22.11.2004, 11:21
Отправитель: Boriss


 Вопрос № 549

Здраствуйте.
Вот программа, но она не запускается - выводит ошибку переполнения в стеке.
В меню OPtions->Memory sizes - уставнавливал стек побольше вплоть до 65520, но не помогло.Чё делать??


Приложение:


Вопрос отправлен: 24.11.2004, 14:20
Отправитель: Семен

[Следующий вопрос >>] [Список вопросов]

Отвечает Василевский Александр

Добрый день, Семен!
Если я правильно понял, то функция dec2hex переводит число в строку с 16-ой записью числа.
Ошибка (переполнение стека) заключается в следующем:
if dec2hex(a)='' then dec2hex:='0';
Этот оператор образует рекурсию, которая никогда не закончится (ср. со следующим фрагментом:
s:=dec2hex(a) ;
значение перемнной a НИГДЕ не изменяется) и ведёт к переполнению стека. Один из вариантов устранения - введение локальной переменной.
Ещё одна ошибка:
dec2hex:=hexdigit[succ(value and $F)];
предыдущее значение стирается.
Правильный (работоспособный) вариант приведён в приложении.


Приложение:

Ответ отправлен: 24.11.2004, 14:47
Отправитель: Василевский Александр


Отвечает Boriss

Здравствуйте, Семен!
!!!!!!!!!!! if dec2hex(a)='' then dec2hex:='0'; !!!!!!!!!!!
Это означает вызов функции вновь!!!!!!!!!
Тут никакого стека и не хватит.
Нужно завести локальную переменную и с ней иметь дело. А потом присвоить ее имени функции

Ответ отправлен: 24.11.2004, 15:37
Отправитель: Boriss


Отвечает Strory

Приветствую Вас, Семен!
Могу посоветовать поставить размер стека равным бесконечности, в теории должно помочь. ;)
Семен, ты набодяжил бесконечную рекурсию, поэтому в один прекрасный момент тысячи загруженных в пямять копий функции dec2hex заполняют её всю.
ЗЫ Цитата из толкового словаря: "Рекурсия - см. Рекурсия"

Ответ отправлен: 25.11.2004, 21:14
Отправитель: Strory


Отвечает sir henry

Здравствуйте, Семен!
А Вы бы в своих опциях о размере стека полюбопытсвовали. :)
Может быть какой-то шутник его в 0 выставил. :)

Ответ отправлен: 25.11.2004, 09:03
Отправитель: sir henry


Отвечает Snowm@n

Доброе время суток, Семен!
2 ошибки:
1) в строке "if dec2hex(a)='' then dec2hex:='0';" ты рекурсивно вызываешь саму функцию. Условия выхода нет, следовательно рекурсия бесконечна, вот стек и переполняется.
Можно завести доп переменную r для результата
2) не "dec2hex:=hexdigit[succ(value and $F)];" а "r:=r+hexdigit[succ(value and $F)];" сам подумай почему
3) рабочий вариант в приложении

Приложение:

Ответ отправлен: 24.11.2004, 16:29
Отправитель: Snowm@n


Отвечает Ayl

Приветствую Вас, Семен!
Ну ты и наворотил! Еще бы она не вылетала, когда у тебя в конце функции dex2hex производится безусловный вызов ее же. Рекурсия с неограниченной глубиной - это всегда нехватка стека при любом его размере.
Твоя функция должна выглядеть примерно так (см. Приложение)


Приложение:

Ответ отправлен: 24.11.2004, 17:44
Отправитель: Ayl



Форма отправки вопроса

Внимание!
Мы рекомендуем открывать рассылку в программе Internet Explorer 5.0+ или отправлять вопросы с сайта по адресу: http://rusfaq.ru/cgi-bin/Message.cgi.

(C) 2002-2003 Команда RusFAQ.ru.

 Персональные данные

Ваше имя:

Ваш e-mail:

Опубликовать мой e-mail в рассылке


 Вопрос и дополнение

Ваш вопрос:


Приложение (если необходимо):


Получить ответов:


 Выбор рассылки

Программисту
Assembler (20)
C / C++ (19)
Perl (4)
Builder / Delphi (18)
Pascal (18)
Basic / VBA (10)
Java / JavaScript (5)
PHP (16)
Криптография (6)
WinAPI (19)
Радиоэлектроника (13)
Пользователю
Windows 95/98/Me (40)
Windows NT/2000/XP (60)
"Железо" (39)
Поиск информации (21)
Администратору
Windows NT/2000/XP (34)
Linux / Unix (17)
Юристу
Гражданское право (11)
Семейное право (5)
Трудовое право (9)
КоАП (5)

Отправить вопрос всем экспертам выбранной рассылки.





http://subscribe.ru/
http://subscribe.ru/feedback/
Подписан адрес:
Код этой рассылки: comp.soft.prog.pasplus
Отписаться

В избранное