Вопросы (1110763), страница 6
Текст из файла (страница 6)
Такое отделение операции ввода от операции вывода на экран позволяет запрограммировать свой редактор ввода, который «в темную»вводит символ за символом и определяет, что делать с каждым из них.Для ввода «без эха» можно использовать следующую процедуру из модуля CRT1:inkey(var c:char; var spec:boolean)21Трифонов Н.П., Пильщиков В.Н.
Практикум на ЭВМпроцедура вводит «без эха» символ первой из клавиш, нажатых на клавиатуре, иприсваивает его параметру c (если никакая клавиша еще не была нажата, процедура ждет нажатия первой же клавиши); при нажатии клавиши с обычным символом параметру spec присваивается значение false, при нажатии управляющей клавиши — значение trueЗамечание. Количество символов, которые можно ввести с клавиатуры (с учетомуправляющих клавиш и комбинаций типа Ctrl+Shift), столь велико, что для них нехватает имеющихся 256 кодов.
Поэтому все эти символы разделены на две группы, в одну из которых включены обычные символы (буквы, цифры, знаки операций и т.п.), а в другую — управляющие символы (и их комбинации). При этом вкаждой группе символы имеют одни и те же коды — от 0 до 255 (например, код83 имеет и буква 'S', и клавиша Del), поэтому знание только кода еще не определяет символ. Именно из-за этого процедура inkey и сообщает через свой параметрspec, символ из какой группы был введен.Ниже приведены (десятичные) коды некоторых управляющих символов, выдаваемые процедурой inkey:↑72↓80←→7Enter13Del83Backspace 8Ins82Esc27Tab9HomeEnd79F159F260...F10687571Рекомендуется ввести в программе константы с подходящими именами, например:constEnter = #13;Left= #75;EndKey = #79;F3= #61;...и уже ими пользоваться.Другие процедуры модуля CTR1В модуле CRT1 имеются также следующие две процедуры без параметров:waitожидать нажатия на клавиатуре любой клавиши (введенный символ «глотается»)bellподача звукового сигналаРабота с полями и окнамиНа основе процедур и функций из модулей CRT и CTR1 рекомендуется реализовать более крупные операции для работы с экраном.
(При этом желательно использовать типstring, описывающий в языке Турбо Паскаль строки переменной длины.)22Методическое пособиеОперации над полямиПрежде всего следует реализовать в виде процедур операции над полями. Под «полем»понимается часть одной строки экрана; оно задается тремя параметрами: x, y — координатами начальной точки поля, n — длиной поля.
Процедуры могут быть следующими:putfield(x,y,n:byte; s:string)записать в поле, определяемое параметрами x, y и n, все символы строки s; еслидлина s больше n, то лишние символы строки s не выводятся, если меньше - в конец поля дописываются пробелы (в частности, при пустой строке s происходиточистка поля);getfield(x,y,n:byte; var s:string)скопировать в строку s все символы из поля, заданного параметрами x, y и n;paintfield(x,y,n:byte; a:byte)закрасить поле заданным цветом; точнее, записать цветовой атрибут a во все позиции поля, заданного параметрами x, y и n (не меняя при этом символы поля);readfield(x,y,n:byte; stopkeys:string; var s:string; var key:char)ввод любого текста (с возможностью редактирования) в рамках поля, заданногопараметрами x, y и n, и запись введенного текста в строку s; в параметре stopkeysперечисляются все управляющие клавиши (Enter, Esc, ↓, ...), нажатие которых означает конец ввода; та из них, которая была действительно нажата, присваиваетсяпараметру keyЗамечания относительно процедуры readfield:— процедура не должна предварительно очищать поле ввода (если надо, такуюочистку следует делать до обращения к процедуре); это нужно для того, чтобыпри неправильно набранном ранее тексте пользователь мог вносить исправления в уже набранный текст, а не вводить весь текст заново;— процедура должна высвечивать курсор, установив его вначале в левую позицию поля ввода, а затем перемещая по мере ввода и редактирования текста;курсор не должен выходить за рамки поля ввода;— процедура должна реагировать на клавиши редактирования (←, →, Del,Backspace, Ins), смысл которых объяснен в описании этапа 3 сценария 1;— процедура не должна проверять правильность набираемого текста (например,не должна «ловить» нецифровые символы при вводе числа), такую проверкунадо делать только по окончании работы процедуры; это позволяет использовать данную процедуру для ввода любого текста — длины, даты или еще чеголибо.Операции над окнамиНа основе перечисленных операций над полями рекомендуется реализовать следующиепроцедуры для работы с окнами и меню (названия процедур и их параметры определить самим):— выдача в нижней строке экрана (не окна!) строки-подсказки;23Трифонов Н.П., Пильщиков В.Н.
Практикум на ЭВМ— выдача на экран (например, в его нижней строчке) текста «Нажмите любую клавишу», ожидание нажатия пользователем любой клавиши и последующее восстановление соответствующей части экрана;— показ на экране основного меню и выбор раздела в этом меню; результат — номер выбранного раздела (для сценария 2);— показ на экране меню методов и выбор раздела в этом меню; результаты — номер выбранного метода и код клавиши выхода (Enter или Esc);— показ окна режима и выбор режима; результаты — номер выбранного режима икод клавиши выхода (Enter или Esc);— показ окна длины и ввод длины (с проверкой); результаты — введенная длина икод клавиши выхода (Enter или Esc);— показ окна для ввода дат (в режиме отладки), сам ввод дат (с проверкой) и заполнение ими соответствующего массива; результат должен указывать, завершен ли полностью ввод дат или была нажата клавиша Esc;— выдача текущего содержимого упорядочиваемого массива (для режима отладки);— выдача таблицы с характеристиками (сравнениями и перемещениями) работыпроцедуры сортировки в режиме счета.Замечания:— установка окна и последующая запись в него не сохраняют прежнее содержимое(символы и цветовые атрибуты) этой части экрана; поэтому, если позже надобудет восстановить это содержимое, то следует его предварительно где-то сохранить, а затем снова воспроизвести на экране;— для выдачи текста (например, строки-подсказки) вне текущего окна следует запомнить координаты текущего окна, затем сделать окном весь экран и вывеститекст в нужном месте экрана, а затем по запомненным координатам снова установить текущее окно;— для рисования рамок вокруг окон следует с помощью процедуры putchar записывать в граничные позиции окон символы так называемой псевдографики.
Ониимеют следующие (десятичные) коды:24218: ┌ 196: ─ 191: ┐201: ╔ 205: ═187: ╗179: │ 197: ┼ 179: │186: ║ 206: ╬186: ║192: └ 196: ─ 217: ┘200: ╚ 205: ═188: ╝Методическое пособиеЗадание 5. ЯЗЫК ПАСКАЛЬ. РАБОТА С ФАЙЛАМИ.5.1. ПОСТАНОВКА ЗАДАЧИВо внешнем текстовом файле, специально подготовленном для данного задания, хранится информация о некотором множестве студентов 3-го курса. Количество студентовзаранее не известно, данные о них в файле никак не упорядочены.
Сведения о каждомстуденте записаны (без ошибок) в одной строке файла и имеют следующий формат:<фамилия> <имя> <отчество> <пол> <дата рождения> <место рождения><номер группы> <1-я оценка> <2-я оценка> <3-я оценка>Причем в фамилии, имени, отчестве и месте рождения (названии города) содержится неболее 12 (заглавных) букв, пол указывается буквой М или Ж, дата задается в виде31.5.80 и т.п., номер группы — это целое от 301 до 329, а оценки (за экзамены) — целые от 3 до 5.
Элементы строки разделены одним или несколькими пробелами. Возможные примеры:МАРКОВ РОМАН ПЕТРОВИЧ М 1.10.81 УФА 309 4 3 3ГОЛОВКО ВЕРА ОЛЕГОВНА Ж 2.1.82 КИЕВ 325 5 4 5Требуется среди всех этих студентов сначала отобрать студентов тех групп, которыеудовлетворяют свойству А, а затем из их числа отобрать студентов, удовлетворяющихсвойству В, и напечатать соответствующие данные о них. Для контроля следует такженапечатать некоторые промежуточные сведения (см. вариант задания).5.2. ВАРИАНТЫ ЗАДАНИЯСвойство А (искомые группы):1) В группе юношей больше, чем девушек.2) В группе больше половины студентов, которым на 1 сентября текущего годабыло более 19 лет.3) Средний возраст студентов группы (на 1 сентября текущего года) меньше19.5 лет.4) В группе более трети студентов из городов Владимир, Иваново, Калуга, Москва, Рязань, Смоленск, Тверь.5) Средняя успеваемость в группе выше 4.0.6) В группе есть хотя бы два «хорошиста» (т.е.
не имеющих троек, но и не отличников).В качестве промежуточной информации напечатать по каждой (непустой) группе курсаобщее число студентов, а также: в 1-м варианте — число юношей, во 2-м варианте —число студентов старше 19 лет, в 3-м — средний возраст (в годах) студентов группы, в4-м — число студентов из указанных городов, в 5-м — среднюю успеваемость в группе, в 6-м — число «хорошистов». Кроме того, напечатать номера отобранных групп иобщее число студентов во всех этих группах.Свойство В (искомые студенты из отобранных групп):1) Студенты, модальные по следующему набору параметров:фамилия, имя, год рождения.25Трифонов Н.П., Пильщиков В.Н.
Практикум на ЭВМ2) Студенты, модальные по следующему набору параметров:имя, пол, возраст (в полных месяцах).3) Студенты, модальные по следующему набору параметров:отчество, город, месяц рождения.4) Студенты, модальные по следующему набору параметров:город, 1-я оценка, 2-я оценка, 3-я оценка.5) Студенты, средние по следующему набору параметров:1-я оценка, 2-я оценка, 3-я оценка.6) Студенты, средние по следующему набору параметров:средняя успеваемость (с точностью до 0.1), возраст (в полных месяцах).В качестве промежуточной информации напечатать все модальные значения или среднее арифметическое значение каждого из указанных в варианте параметров.Как основной результат работы программы напечатать (упорядочив по ФИО) следующие сведения о найденных студентах: фамилия, имя, отчество, номер группы и значение каждого из указанных параметров.5.3.