Среда программирования программы Borland Pascal 7.0
ВведениеДанная программа, написанная в среде программирования Borland Pascal 7.0, является электронным тестирующим пособием в области химии для 8-11 классов. В данное время существует достаточное количество программ, охватывающих различные области наук, в частности химии, использующиеся учеными. В связи с тем, что химические закономерности весьма разнообразны, одной программой их невозможно описать. Так как сейчас в школах осуществляется более основательное внедрение компьютерных технологий в систему обучения, но тем не менее, узко распространены автоматизированные проверки знаний учащихся, мною решено представить программу, позволяющую тестировать знания в системе обучения среднего образования. Создание подобных программ предусматривает значительное облегчение работы преподавателей и позволяет учащимся расширить знания в области информационных технологий.Разработка программыМодель и метод решения задачиПоставленная задача требует выполнения считывания данных из файлов, вводом данных с клавиатуры и их последующим сравнением. В процессе сопоставления возникает задача выявления правильности сравнения и учета в ходе работы программы. Также требуется подключения драйвера мыши и реализация программы на его основе. Описание структуры данных В процессе работы программы осуществляется считывание данных из четырех текстовых файлов, в которых используются данные строкового типа длиной равной 72 символам. Задается запись с полем строкового типа, который записывается в массив и производится его вывод на экран. Переменная строкового типа, введенная с клавиатуры ставится в соответствие дополнительной строке из файла вне массива. Алгоритм решения задачи a - переменная, вводимая с клавиатуры b - переменная из дополнительной строки из файла, сравниваемая с переменной а c - строковая переменная, считываемая из массива n - количество истинности сравнения переменных a и b k - номер считанного массива m - количество массивов из файла Руководство программиста Для осуществления задачи используются основная программа, выполняющая все основные функции и модульная программа, содержащая интерфейсную часть знакомства пользователя с программой. А также используются четыре входных файла. В программе используются: Функция Button Pressed(x1,y1,x2,y2: integer): boolean. Функция осуществляет проверку на нажатие клавиши в области заданной формальными параметрами целочисленного типа. Процедура GraphInit - выполняет инициализацию графика и предусматривает проверку на ошибку, в результате чего, программа выходит из графического режима работы. Процедура Face - прорисовывает интерфейс с помощью стандартных процедур библиотеки Graph. Используются следующие процедуры библиотеки Graph: SetFillStyle(pattern, color: word) - устанавливает образец штриховки и цвет. Bar(x1,y1,x2,y2: integer) - рисует полосу заданного размера, используя текущий стиль и цвет. SetColor(color: word) - устанавливает основной цвет, которым будет осуществляться рисование. Line(x1,y1,x2.y2: integer) - рисует линию от точки (x1,y1) до точки (x2,y2). OutTextxy(x,y: integer, textstring: string) - выводит текст в заданную область экрана. Процедура PressButton - с помощью мыши производит нажатие кнопки, прорисованной в интерфейсе. Задается условие нажатия кнопки мыши в определенной области экрана, с последующим выполнением процедур указанных в условии. Процедуры Question4, Question3, Question2, Question1 - выполняют считывание строковых данных длиной в 72 символа из файлов, указанных в процедурах. Задаются файловые переменные текстового типа. С помощью массива с девятью составляющими на экран выводятся строки записи q. Десятая дополнительная строка сравнивается со строковой переменной, введенной с клавиатуры и в случае истинности сравнения значение целочисленной переменной sum увеличивается на единицу. Результирующая сумма выводится на экран. Также в процедурах создается эффект протекания времени, которая выполняется переменной timer целочисленного типа, прибавляющей единицу в цикле, приостанавливая работу процедурой Delay до 50000 миллисекунд. Модуль Entr реализуется с помощью библиотеки Graph для создания интерфейса в процедуре Enter. Свеления о модулях. Модуль - это автономно компилируемая программная единица, включающая в себя различные компоненты раздела описаний и, возможно, некоторые исполняемые операторы инициирующей части. В них выделяется некоторая видимая интерфейсная часть, в которой сконцентрированы описания глобальных типов, констант и переменных, а также приводятся заголовки глобальных процедур и функций. Появление объектов в интерфейсной части делает их доступными для других модулей и для основной программы. Тела процедур и функций располагаются в исполняемой части модуля, которая может быть скрыта от пользователей. Модуль имеет следующую структуру: UNIT<имя>; {начинает заголовок модуля} INTERFACE {начинает интерфейсную часть модуля} <интерфейсная часть> IMPLEMENTATION { начинает исполняемую часть} <исполняемая часть> BEGIN {начинает инициирующую часть модуля} <инициирующая часть> END. {признак конца модуля} Таким образом, модуль состоит из заголовка и трех составных частей, любая из которых может быть пустой. Для правильной работы среды Турбо Паскаля и возможности подключения средств, имя следующее за UNIT должно совпадать с именем дискового файла, в который помещается исходный текст модуля. Имя модуля служит для его связывания с другими модулями и основной программой. В интерфейсной части содержатся объявления всех глобальных объектов модуля, которые должны стать доступными основной программе и другим модулям. При объявлении глобальных подпрограмм в интерфейсной части указывается только их заголовок. Исполняемая часть содержит описания подпрограмм, объявленных в интерфейсной части. В ней могут объявляться локальные для модуля объекты - вспомогательные типы, константы, переменные и блоки. Описанию подпрограммы, объявленной в интерфейсной части модуля, в исполняемой части должен предшествовать заголовок, в котором можно опускать список формальных переменных, так как они уже описаны в интерфейсной части. Инициирующая часть завершает модуль. Она может отсутствовать вместе с начинающим словом BEGIN или быть пустой. В инициирующей части размещаются исполняемые операторы, содержащие некоторый фрагмент программы. Эти операторы исполняются до передачи управления основной программе и обычно используются для подготовки ее к работе. Определены три режима компиляции модулей: При компиляции в режиме COMPILE, все упоминающиеся в предложении USES модули должны быть предварительно откомпилированы и результаты помещены в одноименные файлы с расширением TPU. В режиме MAKE компилятор проверяет наличие TPU-файлов для каждого объявленного модуля. Если какой-либо из файлов не обнаружен, система пытается отыскать одноименный файл с расширением PAS, и если искомый файл найден, приступает к его компиляции. Кроме того, в этом режиме система следит за возможными изменениями исходного текста любого используемого модуля. Если в PAS-файл внесены какие-либо изменения, то независимо от того, есть ли уже в каталоге соответствующий TPU-файл или нет, система осуществляет его компиляцию перед компиляцией основной программы. В режиме BUILD существующие TPU-файлы игнорируются, и система пытается отыскать и компилировать соответствующий PAS-файл для каждого объявленного в предложении USES модуля. Файловые переменные, использованные в программе являются текстовыми. Сведения о файлах Файл это либо именованная часть внешней памяти ПК, либо логическое устройство - потенциальный источник или приемник информации. Любой файл имеет три характерные особенности. У файла есть имя, что дает возможность программе работать одновременно с несколькими файлами. Файл содержит компоненты одного типа. Длина вновь создаваемого файла не оговаривается при его объявлении и ограничивается только емкостью устройств внешней памяти. Файловый тип можно задать одним из трех способов: <имя> = file of <тип> - типизированные файлы; <имя> = text - текстовые файлы; <имя> = file - нетипизированные файлы. Файловая переменная связывается с именем файла в результате обращения к стандартной процедуре Assign: Assign(<файловая переменная>, <имя файла>) Инициировать файл означает указать для этого файла направление передачи данных. В Турбо Паскале можно открыть файл для чтения, для записи информации, а также для чтения и записи одновременно. Для чтения файл инициируется с помощью стандартной процедуры Reset(<файловая переменная>). Стандартная процедура Rerite(<файловая переменная>) инициирует запись информации в файл, связанный ранее с файловой переменной. Этой процедурой нельзя инициировать запись информации в ранее существовавший дисковый файл: при выполнении старый файл уничтожается. Стандартная процедура Append(<файловая переменная>) инициирует запись в ранее существовавший текстовый файл для его расширения. Руководство пользователя После запуска программы, программы, производится прорисовка интерфейса, после чего пользователю предоставляется выбор уровней сложности тестирования. Первые три уровня, с соответствующим увеличением сложности, содержат теоретические вопросы, на которые пользователь отвечает введением номера варианта с клавиатуры. На обдумывание вопроса дается 30 секунд, после чего экран очищается и программа ожидает ввод ответа. В процессе работы следует дождаться истечения времени и появления курсора в области ответов, после этого программа примет выбранный вариант. После завершения вывода на экран всех вопросов, программа выставляет оценку в зависимости от количества правильных ответов, которое также выводится на экран. Четвертый уровень содержит задачи по химии, на решение которых дается 120 секунд. Первый и третий уровни составляют по 30 вопросов, второй 20, четвертый 10. Листинг программыОсновная программаuses CRT, Graph, Mouse, DOS, Entr;type q = recorda: string[72];end;varf1,f2,f3,f4: text;mas: array[1..9] of q;e: array[1..670] of string[72];i,j,x,y,sum,timer: integer;z,mark,s1,s2,s3,s4: string;procedure GraphInit;var Driver, Mode, Error: integer;beginDriver:=Detect;InitGraph(Driver,Mode,'');Error:=GraphResult;if Error<>grok thenbeginWriteln(GraphErrorMsg(Error));halt;end;end;function ButtonPressed(x1,y1,x2,y2:integer):boolean;{функция на проверку нажатия кнопки}varMx,My:integer;ctt:integer;beginGetMouse;ButtonPressed:= (but=1)and(m>x1)and(m<x2)and(n>y1)and(n<y2);end;procedure Face; {прорисовка интерфейса}beginSetFillStyle(1,10);Bar(10,10,GetMaxx-10,GetMaxy-10);SetColor(15);Line(20,20,620,20);Line(20,20,20,150);SetColor(0);Line(620,20,620,150);Line(20,150,620,150);SetColor(15);Line(20,195,450,195);Line(20,195,20,210);SetColor(0);Line(20,210,450,210);Line(450,195,450,210);SetColor(15);Line(20,215,450,215);Line(20,215,20,230);SetColor(0);Line(20,230,450,230);Line(450,215,450,230);SetColor(15);Line(20,235,450,235);Line(20,235,20,250);SetColor(0);Line(20,250,450,250);Line(450,235,450,250);SetColor(15);Line(20,255,450,255);Line(20,255,20,270);SetColor(0);Line(20,270,450,270);Line(450,255,450,270);OutTextxy(35,340,'время');OutTextxy(140,340,'ответ');SetColor(15);Line(20,390,100,390);Line(100,360,100,390);
Страницы: 1, 2
|