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

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

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

> Нелогичная работа программы (в среде Дельфи), Непредсказуемые значение переменных
Sozialist
сообщение 10.08.2010 9:44
Сообщение #1


Клавиатурный тиран
**

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

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


Всем привет. В кои-то веки решил написать универсальный алгоритм решения судоку. Ввиду того, что схемы рисовать я не люблю, решил сварганить все на старом и добром паскале. Писал под Дельфи, если что.
Ну если с алгоритмом все понятно, то с написанием возникли проблемы. Раньше вроде было нечто подобное, но было не критично. В общем, привожу код.

Модуль soSol (Показать/Скрыть)

Основная часть (Показать/Скрыть)

Файл с входными данными прилагаю.
Программа сырая, но я помощи прошу не с алгоритмом, а с логикой работы написанного выше.
Программа работает следующим образом.
1. Выбираем пункт меню "2", пишем имя файла "e2"
2. Выбираем пункт меню "4".
3. Выбираем пунтк меню "5".
Проблема с переменными процедуры STransMSets(var SMas:TMBlock).
Перед запуском ставим брейкпоинт на первой строке исполнительного блока процедуры.
Пошаговая отладка показала, что в блоке

FRo:=true;
for k:=1 to 3 do
for i:=1 to 3 do
for p:=1 to 3 do
for j:=1 to 3 do
if MBSet[k,p][i,j]<>[] then
begin
_Set:=MBSet[k,p][i,j];
// for n:=1 to 9 do
// if [n]=_Set then Fl:=false else Fl:=true;
for ex1:=1 to 3 do
for ex2:=1 to 3 do
if (ex1<>p) and (ex2<>j) then _Set:=_Set-MBSet[k,ex1][i,ex2];
for n:=1 to 9 do
if [n]=_Set then begin
MBSet[k,p][i,j]:=_Set;
// if Fl then FRo:=false;
end;
end;


первое значение переменных i, k=3, MBSet[k,p][i,j]=[], но после строки _Set:=MBSet[k,p][i,j] множество _Set не равно [].

Компилировал под Delphi 7, Delphi 7.3, Delphi 2009. Проблема остается. Думал уже переписать код под FreePascal. Очевидно, что это не приведет к решению проблемы.
Думается мне, что проблемы с памятью. Но почему так происходит? И как можно узнать, что на самом деле происходит? С языком ассемблера не дружу.

Сообщение отредактировано: Lapp - 11.08.2010 5:44


Прикрепленные файлы
Прикрепленный файл  e2.txt ( 161 байт ) Кол-во скачиваний: 182
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
Sozialist
сообщение 15.08.2010 21:43
Сообщение #2


Клавиатурный тиран
**

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

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


Тему можно закрыть. Откликнувшимся спасибо.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме


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

 



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