![]() |
Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.
![]() |
ninja |
![]()
Сообщение
#1
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 103 Пол: Мужской Реальное имя: Александр Репутация: ![]() ![]() ![]() |
Добрый день! Написал программу, которая выводит таблицу истинности для заданной функции, например:
функция F=x1^x2 выводится таблица истинности Код 0 0 0 1 Проблема заключается в том, что когда ввожу функцию состоящую из более чем 12 элементов, x1^x2^.....^x12 появляется ошибка ![]() Или если ввести например функцию состоящую из 8 элементов и многократно нажать на кнопку "Посчитать" появляется такая ошибка ![]() Также появляется ошибка "Invalid pointer operation" Делфи я изучаю не так давно, могу предположить что проблема связана с нехваткой памяти.... Сам алгоритм выполнения программы простой: Пользователем вводится количество элементов, затем заполняется таблица для этих элементов, одновременно заполнятеся 2я таблица для результата с количеством строк равном количеству строк в 1й таблице.
Далее пользователь вводит функцию например x1^x2^x3: Сначала отбрасываются x получается 1^2^3, цифры соответствуют номерам столбцов 1й таблицы из которых следует брать значения Берется 1я строка, 1-ой таблицы, цифры 1,2,3 заменяются значениями
получается 0^0^0 Далее запускается цикл который по определенным правилам производит определенные действия со значениями
результат получается "0" значение заносится во вторую таблицу и затем берется 2я строка из 1-ой таблицы, и так пока не пройдем по всем строкам 1й таблицы. Когда проверяю отладчиком, все нормально, т.е. алгоритм вроде правильный. Еще небольшая проблема, тоже скорей всего связанная с памятью, если не ошибаюсь, когда ввожу больше 17 элементов компьютер зависает. Сама программа ![]() Помогите разобраться с проблемой Заранее Благодарен за помощь. Сообщение отредактировано: ninja - 6.10.2009 15:51 |
![]() ![]() |
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
Ну, давай начнем с последней проблемы:
Цитата Еще небольшая проблема, тоже скорей всего связанная с памятью, если не ошибаюсь, когда ввожу больше 17 элементов компьютер зависает. Ты вообще представляешь, какой объем вычислений должен выполниться, когда ты задаешь "Количество элементов" = 18? Немаленький... Я где-то уже показывал, отключи постоянное обновление СтрингГрида, тогда заполнение пойдет быстрее:StringGrid1.RowCount := 1 shl StringGrid1.ColCount;- отрабатывает за 3-4 секунды при 18-ти элементах... Цитата Проблема заключается в том, что когда ввожу функцию состоящую из более чем 12 элементов, x1^x2^.....^x12 появляется ошибка Воспроизвести не удалось, нормально считается:![]() Цитата Или если ввести например функцию состоящую из 8 элементов и многократно нажать на кнопку "Посчитать" появляется такая ошибка Аналогично, воспроизвести не удалось, нажимал на кнопку "Посчитать" до 20 раз - вылетов не обнаружено.Тестировалось на Дельфи 2007/2009. |
![]() ![]() |
![]() |
Текстовая версия | 8.07.2025 9:51 |