![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() ![]() |
![]() |
kramolnic |
![]() ![]()
Сообщение
#1
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 24 Пол: Мужской Реальное имя: Алексей Репутация: ![]() ![]() ![]() |
Всем доброго времени суток.
В институте задали написать такую программку. В принципе, ничего особо сложного, но я не имею никакого опыта создания псевдографических интерфейсов под консоль и поэтому прошу ваших советов по реализации. ![]() Необходимо написать программу "матрицы". Программа должна предоставлять возможность создания, хранения и загрузки из файлов матриц произвольной размерности (один файл - одна матрица). Редактирование матриц должно осуществляться посредством перемещения курсора по её ячейкам и вводом числа в выбранную ячейку (желательно предоставлять возможность прокрутки, иначе следует ограничить размерность матрицы так, чтобы она умещалась на экране). Программа должна позволять выполнять такие действия над созданными матрицами, как сложение, вычитание и умножение с предварительной проверкой возможности данной операции исходя из размерностей матриц (в случае невозможности операции должно быть выдано соотв. сообщение). Результат операции должен выводиться на экран и, при желании юзера, сохраняться в файле. Пользовательский интерфейс должен быть текстовым. К программе приложить инструкцию пользователю. Вообще интерфейс программы я представляю себе примерно так: После запуска программы показываем пользователю меню:
Далее пользователь выбирает пункт меню и открывается соответственно калькулятор, справка или выходим из проги. Калькулятор запрашивает размерность новой матрицы. После ввода ширины и высоты программа выводит пустую табличку с заданной размерностью с нулями в её ячейках. Далее пользователь перемещает курсор по ячейкам и вводит туда нужные числа. После заполнения программа запрашивает вторую матрицу и выполняемое действие (сложение, вычитание, умножение).... В любой момент времени пользователь может нажать для вызова справки F1. Должно открыться что то вроде окна с инструкцией. После нажатия на какую-нибудь клавишу окно должно закрыться и пользователь может продолжить заполнение матрицы. Вот как раз с этим проблемы. С меню я разобрался частично сам, частично помог форум. Но когда я выбираю пункт меню, то открывается по идее совершенно иная программа. И все нажатые клавиши будут выполнять уже совершенно иные действия (перемещение курсора по ячейкам таблицы, редактирование ячеек и т.п. вместо перемещения по пунктам меню). КАК вообще можно реализовать ТАКОЕ?? Я себе представляю только такое решение: заводим что то вроде флага режима работы (чтобы определять, где мы находимся в данный момент и выполнять в зависимости от этого соотв. действия). Затем при перемещении по пунктам меню меняем флаг и в зависимости от флага и нажатой клавиши выполняем те или иные действия (рисуем табличку, запрашиваем данные и т.п...) Но что-то страшное решение получается.. даже толком не знаю в каком направлении копать... уже весь этот форум перерыл - ничего конкретного не нашел. Буду признателен, если кинетесь в меня ссылками на учебники/пособия/сайты в Инете по данной тематике или сами посоветуете, как проще и красивше можно реализовать подобное... ![]() P.S. знаю,что существует модуль F_Mouse... думаю, может его заюзать? подскажите, где в Инете его найти можно, а то я поискал немного и не смог найти... а времени совсем нет его искать... Заранее спасибо и респект всем откликнувшимся. ![]() |
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
Цитата С меню я разобрался частично Вот тут и возникает вопрос: "Как, собственно, у тебя реализовано меню?" По какому пути ты пошел? Я бы предложил тебе такой путь (совместная моя разработка с Romtek-ом):uses crt; Чем хороша такая структура? Когда ты работаешь с меню, то обрабатываются только нажатия клавиш, заданных именно для меню, ничего лишнего... Как только ты запустишь процедуру DoCalc, внутри нее ты сможешь обрабатывать нужные тебе клавиши так, как ты этого хочешь, это не будет взаимодействовать с меню, оно - само по себе, обработка матриц - сама по себе... Модульность... Каждый модуль занимается только своей работой... Еще одно - не забывай, что функции и процедуры тоже могут быть вложенными, т.е. DoCalc должна делать ВСЁ внутри себя... Не выходя наружу, пока работа с матрицей не будет закончена, и тебе не понадобится выйти из программы. И никаких флагов - это будут глобальные переменные, а они есть зло... Я, как видишь, в приведенной выше программе глобальными переменными не пользовался, только константы... С реализацией таблицы, по которой можно перемещаться с помощью клавиатуры, проблемы есть? |
kramolnic |
![]()
Сообщение
#3
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 24 Пол: Мужской Реальное имя: Алексей Репутация: ![]() ![]() ![]() |
Чем хороша такая структура? Когда ты работаешь с меню, то обрабатываются только нажатия клавиш, заданных именно для меню, ничего лишнего... Как только ты запустишь процедуру DoCalc, внутри нее ты сможешь обрабатывать нужные тебе клавиши так, как ты этого хочешь, это не будет взаимодействовать с меню, оно - само по себе, обработка матриц - сама по себе... Модульность... Каждый модуль занимается только своей работой... Еще одно - не забывай, что функции и процедуры тоже могут быть вложенными, т.е. DoCalc должна делать ВСЁ внутри себя... Не выходя наружу, пока работа с матрицей не будет закончена, и тебе не понадобится выйти из программы. И никаких флагов - это будут глобальные переменные, а они есть зло... Я, как видишь, в приведенной выше программе глобальными переменными не пользовался, только константы... С реализацией таблицы, по которой можно перемещаться с помощью клавиатуры, проблемы есть? Большое спасибо, отличное решение. Примерно к такому же варианту я пришел сам. Однако, у меня проблемы возникли когда я попытался вернуться в меню из-под вызванной подпрограммы. Я не использовал дополнительную функцию, которая смотрит, какая клавиша нажата. В главном блоке программы я запрашивал номер пункта меню (по его номеру - 1 - 4) и в зависимости от этого вызывал ту или иную процедуру (как у тебя). А теперь обратимся к твоей программе. Допустим, что процедура DoCalc запросила размер матрицы. Затем она вызывает процедуру, которая рисует матрицу заданной размерности и инициализирует некоторый массив нулями (операции-то в дальнейшем я буду над массивами производить). Затем она вызывает некоторую функцию, которая в цикле ловит код нажатой клавиши, перемещается по элементам таблички и позволяет их редактировать. Все отлично, первый массив заполнен. Аналогично заполняем второй массив. Затем запрашиваем действие над массивами и выводим результат. Но как после всего этого вернуться опять в главное меню? или вызвать справку во время заполнения массива, а затем вернуться туда же, где мы находились до этого? Я сегодня-завтра еще поработаю над этой проблемой и постараюсь решить её самостоятельно, хотя, признаться честно, что-то особо мыслей у меня нет. :mad: Если возникнут проблемы, то я с Вашего позволения, обращусь сюда еще раз. P.S. Ответил на пост, чтобы поблагодарить за помощь, хотя пока что не вдумывался в этот код - только прогнал его пару раз. Прошу не судить строго за мой ламеризм, ибо Turbo pascal вижу первый раз в жизни. До этого имел дело только с Delphi, а там такая программа - пара пустяков. P.P.S. модуль F_Mouse уже нашел. Разбираюсь с примерами. Сообщение отредактировано: kramolnic - 30.09.2006 16:57 |
![]() ![]() |
![]() |
Текстовая версия | 19.06.2025 7:04 |