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

> Прочтите прежде чем задавать вопрос!

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

2 страниц V < 1 2  
 Ответить  Открыть новую тему 
> хеш-таблица, построение, просмотр
Гость
сообщение 15.11.2010 22:50
Сообщение #21


Гость






Интереснее (и полезнее) врубиться, где ошибка в старых исходниках, вместо того, чтобы новые писать. Охота за ошибками весьма увлекательна, зачем лишать себя такого интересного занятия?
 К началу страницы 
+ Ответить 
*оля*
сообщение 15.11.2010 23:35
Сообщение #22


Пионер
**

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

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


да, хотелось бы эту программу доделать по возможности. в общем пыталась и так переписать:


procedure Udalenie ( x: string; var A: TABL );
var nomerSegm: integer; ukaz,ud: ^zapis;
begin
nomerSegm:= h(x);
if A[nomerSegm] <> nil then begin
if A[nomerSegm] ^.element = x then
A[nomerSegm]:= A[nomerSegm] ^.next
else begin
ukaz:= A[nomerSegm];
ud:=ukaz^.next;
while (ukaz^.next <> nil ) do
if ud^.element = x then
begin
ukaz^.next := ud^.next;
dispose(ud); exit;
end
else begin
ukaz:= ukaz^.next ;
ud:=ud^.next;
end;
end
end
end;


.

и все равно не то(((

Добавлено через 9 мин.
если при ошибке выводит в строчке слова ненужные: "элемент добавлен, такой элемент уже записан...."
так может это не в процедуре удаления, а в процедуре добавления ошибка?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 16.11.2010 1:05
Сообщение #23


Гость






Ну вот не могу я заставить программу вылетать, и все тут... до 200 слов вводил, удалял по 15 раз каждую из строк хеш-таблицы, начинал заполнять снова, опять удалял, НЕ ВЫЛЕТАЕТ. Запускал и из оболочки, и "Без связи с оболочкой".

В самой программе тоже есть несколько моментов, которые я бы исправил:
1) у тебя в одном месте тип данных описан как string[255], а в другом - как string. Если в Турбо Паскале это одно и то же, то в PascalABC.NET это совсем не так. Поменяй везде на shortstring. Несоответствие типов может тоже привести к проблеме.
2) сбой может быть связан с тем, что в процедуре Print значение Current не всегда определено. В частности, при обработке первой строки таблицы, там может оказаться любой мусор, из-за чего программа может и вылететь (сама переменная Current описана локально, значит - не инициализируется nil-ом)
3) как всегда - мое любимое изменение в программе: переменные должны иметь минимальное время жизни, то есть, описывать их желательно как можно ниже по тексту. Поэтому я бы в Print тоже передавал массив, а описание самого массива A перенес бы ниже.
4) ну, и косметическое изменение цикла Repeat/Until в Menu_1, избавляемся от лишней переменной.

В общем, под спойлером - моя программа, которую я гонял больше 4-х часов (удаление делать не стал, попробуй погонять эту программу, НИЧЕГО в ней не изменяя, ни единого символа). Сбой воспроизвести не удалось ни при каких условиях. Приводи ТОЧНУЮ ПОСЛЕДОВАТЕЛЬНОСТЬ действий для того, чтоб увидеть, наконец, этот сбой.

Спойлер (Показать/Скрыть)
 К началу страницы 
+ Ответить 
*оля*
сообщение 16.11.2010 10:25
Сообщение #24


Пионер
**

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

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


поступаю так же,как и в тот раз: ввожу элементы. Если использовать Crt, то картинка получается такая же, как и в тот раз Прикрепленное изображение

ну а если не менять ни одного символа, то в окне вывода получается следующее: пока программа работает хорошо, только ввожу элементы и после каждого нажимаю просмотр

 
0:ррр
1:
2:
3:
4:ороро
5:
6:оро
7:
8:ро
9:




далее ввожу еще один элемент "про" и таблица сбивается:

 

0:ррр
1:
2:
3:
4:ороро
5:
6:оро
7:про
8:㳮￿9:



в общем, если дальше вводить, он две в одну строчку почему-то вводит:

8:ролл 㳮￿9:пр

всегда с 8ой и 9ой строчкой проблемы.

Сообщение отредактировано: *оля* - 16.11.2010 10:29
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 16.11.2010 11:02
Сообщение #25


Гость






Издеваешься? Я просил ТОЧНУЮ последовательность!!! Точную, понимаешь? В каком порядке ты вводишь все эти элементы? При вводе в произвольном порядке (картинка - такая же, как и у тебя вверху) ввожу "про" - сбоя НЕТ!!! Этот элемент корректно заносится в 7 строку таблицы... Что я делаю не так? В общем, давай закончим на этом обсуждать мифологию, надоело. Уточняй номер сборки PascalABC.NET, какой у тебя установлен .NET, собственно, и ТОЧНУЮ ПОСЛЕДОВАТЕЛЬНОСТЬ действий - в студию. Пока всего вышеперечисленного не будет - я больше здесь не отвечаю.
 К началу страницы 
+ Ответить 
TarasBer
сообщение 16.11.2010 11:37
Сообщение #26


Злостный любитель
*****

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

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


Так что насчёт автоматического тестирования (см пост 15)?


--------------------
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 



- Текстовая версия 18.07.2025 10:12
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"