Консультация № 187225
24.03.2013, 22:47
134.20 руб.
0 3 0
Здравствуйте, уважаемые эксперты! Прошу вас ответить на следующий вопрос: Мне нужно было портировать код, написанный на паскале в C#, впринципе с этим я справился но програмы на паскале и на C# дают разный результат, не пойму в чем загвоздка, в чем моя проблема ? помогите найти причину, понимаю что дело в какой-то мелоче!

исходный код на паскале http://pastebin.com/aD22qH2T
мой код на c# http://pastebin.com/P0RDGgZP

или в текстовом документе

Обсуждение

Неизвестный
24.03.2013, 23:03
общий
да, кстати, это пример использования метод Хука – Дживса, вычисление минимума функции
Неизвестный
25.03.2013, 22:39
общий
25.03.2013, 22:40
Портировать желательно начинать с побуквенного переводаКонсольная программа может выглядеть абсолютно также, как и паскалевская. Иначе потом вообще не разберешься.
Самым главным кандидатом я бы считал массив. Смещение индексов очень часто приводит к ошибкам. Надо бы это все проверить.
Real это скорее float, а не double, вроде. Но погрешность не должна быть большой.
Злоупотребление передачей параметров по ссылке тоже до добра не доводит. Программа на Паскале менее корявая, чем портированная.
Все глобальные переменные из паскалевской программы надо также сделать полями класса - это гораздо логичнее, чем передача ссылки. Это C#, а не COM.

Еще могут быть проблемы, если старый Паскаль эмулирует матсопроцессор. Он может не совсем по стандарту считать. Но это тоже будут погрешности. Если очень большая разница в результатах, то ошибка в алгоритме. А ее при таком запутанном коде проще не искать а переписать как в правильном коде.
Неизвестный
27.03.2013, 23:53
общий
28.03.2013, 00:59
Просто в значение, передаваемое по ссылке нужно подставить атрибут ref.

Evgenijm, спасибо вам! вы натолкнули меня на мою недоработку, хоть и косвенно.
Форма ответа