Файл: КЛАССИФИКАЦИЯ ЯЗЫКОВ ПРОГРАММИРОВАНИЯ ВЫСОКОГО УРОВНЯ (язык программирование бортовой компьютер).pdf

ВУЗ: Не указан

Категория: Курсовая работа

Дисциплина: Не указана

Добавлен: 31.03.2023

Просмотров: 229

Скачиваний: 1

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

Первое отличие – в заголовке [7]: через двоеточие указывается тип возвращаемого параметра. Второе отличие состоит в том, что в теле функции хотя бы один раз имени функции должно быть присвоено значение. Для вызова функции необходимо в выражении, где используется ее значение, указать имя функции.

В качестве примера рассмотрим функцию, возвращающую наибольшее значение из двух чисел.

uses crt;var a,b:byte;function max(a,b:byte):byte; {a,b – формальные параметры функции}begin {начало функции} if a>b then max:=a else max:=b;

end; {конец функции}

{ основная программа}

begin

clrscr;

readln(a,b);

write(max(a,b)); {фактические параметры a,b передаются функции max}

readkey

end.

С использованием процедур и функций появляется вопрос применения переменных. Понятие места работы данных переменных можно пояснить на простом примере [10]. Есть некоторый внутригородской транспорт и междугородний. Естественно, что внутригородской не работает на маршрутах между городами, т.е. его применение ограничено (локализовано). Это является прямой аналогией работы переменной внутри процедуры (работа транспорта внутри города) ⎯ подобные переменные именуются локальными. Но междугородний транспорт может перемещаться как между городами, так и внутри любого города переменная работает не только между процедурами, но и внутри каждой из них. Такие переменые именуются глобальными [10].

Если программа включает множество процедур и переменных, то может образоваться ситуация, когда глобальные и локальные идентификаторы имеют одинаковые имена. Для компилятора это не является важным. Дело в том, что в подобном случае [18,20] с входом в процедуру запоминается значение глобальной переменной, а при выходе из нее ⎯ возвращается первоначальное значение. Из этого следует, что Паскаль позволяет нескольким программистам писать одну программу, не заботясь об опасности перепутать идентификаторы [7,9].

Всякая большая программа, прежде всего, собирается из процедур и функций. В свою очередь процедуры и функции аккумулируются в большие блоки, именующиеся программными модулями. Каждый программный модуль транслируется отдельно [10], объединяясь в реализуемую программу. Для подключения модуля к программе нужно упомянуть его имя в предложении:

USES имя модуля (модулей - через запятые) ;

Объявление модулей должно записываться в программе второй строкой после имени программы. При объявленном модуле процедуры и функции, интегрированные в данный модуль, вписываются в программу только своим именем, без раскрытия их программного содержания. Это значительно сокращает текстовую часть основной программы [8]. Ниже, в краткой форме, приведено содержание и назначение некоторых программных модулей [1].


Модуль SYSTEM: есть средства ввода - вывода, процедуры и функции для работы со строками, вещественными числами и динамической памятью. Данный модуль нужен так часто, что он автоматически подсоединяется к программе, без предварительного его объявления.

Модуль CRT: здесь есть средства управления дисплеем в текстовом режиме, клавиатурой и динамиком. С помощью его процедур можно изменять цвет, выводить данные в любом месте экрана, создавать окна, обрабатывать расширенные коды клавиш и воспроизводить звуки различной тональности.

Модуль DOS: обеспечивает доступ к возможностям операционной системы MS DOS - обработка даты и времени, информация о состоянии дисков, вызов программы или установить программу резидентной и т.д.

Модуль GRAPH: включает процедуры, дающие возможность воспроизводить точки, отрезки, многоугольники, окружности и многое другое в различной цветовой гамме и начертании, вывода текста в графическом режиме.

Ниже приведена простая программа использования модулей:

Program Pascal ;

Uses Crt, Graph ;

Var D,M : Integer ;

Key : Char ;

BEGIN

D := Detect ;

InitGraph(D, M, '') ;

SetTextStyle(0,0,10) ;

SetColor(4) ;

OutTextXY(80,150,'Turbo') ;

OutTextXY(60,250,'Pascal') ;

Key:=ReadKey;

CloseGraph;

END.

Результатом работы данной программы является написание по центру экрана дисплея, на темном фоне, красными буквами: Turbo Pascal.

Итак, во второй главе курсовой работы были изучены ключевые принципы применения подпрограмм – процедур и функций в алгоритмическом языке Паскаль. Также затронута смежная тема использования модулей для оптимальной организации блочного использования процедур и функций. Приведены примеры программной реализации описанных структур.

3. Практическая реализация программы «Бортовой компьютер»

3.1 Постановка задачи и интерфейс программы

Для иллюстрации практического использования подпрограмм в языке высокого уровня Паскаль, а также специфики проектирования пользовательского меню, разработаем следующую программу.

Данная программа эмулирует действия бортового компьютера. В качестве исходных данных принимает значения расстояния до «Финиша», желаемого время достижения «Финиша» и интервал вывода сообщений бортового компьютера.


Скорость на заданном интервале генерируется случайным образом. Отклонение составляет +- 1-цу от скорости, рекомендуемой в начале пути. Работа программы осуществляется в режиме «онлайн».

Через определенный временной промежуток программа выводит информацию о времени с момента старта, пройденном пути, средней скорости на предыдущем отрезке, средней скорости к данному моменту, времени достижения «Финиша». Программа также рекомендует скорость, которую следует развивать, чтобы успеть к «Финишу» к сроку. По истечении времени на экран выводится сообщение о том, успел ли автомобиль достигнуть «Финиша» в желаемое время.

Программа выполнена в среде Turbo Pascal 7.1.

Рассмотрим интерфейс пользователя программы. После запуска программы на экране появляется главное меню (рис. 1). Здесь пользователь программы при помощи курсора может выбрать необходимый ему пункт. При этом выбранный пункт меню подсвечивается. После нажатия клавиши Enter запускается соответствующая подпрограмма, отвечающая за реализацию данного действия. На рис. 2 отражено окно программы в режиме ввода исходных данных. После нажатия любой клавиши на экране вновь появляется меню пользователя.

Рис.1. Меню пользователя программы

Рис.2. Ввод исходных данных

После выбора пункта меню «Работа программы» издается звуковой сигнал и запускается таймер. На экран выводится время старта – текущее системное время, используемые условные обозначения, а также скорость, рекомендуемая в начале пути. С определенным временным интервалом на экран выводятся расчетные характеристики.

Рис.3. Окно программы в режиме эмуляции работы

бортового компьютера

После истечения времени необходимого, чтобы достичь финиша, на экран выводится сообщение, успела ли машина его достичь. Т.к. скорость машины в установленном диапазоне изменяется случайным образом, при каждом запуске получается разный результат.

После нажатия любой клавиши на экране вновь появляется главное меню. При выборе пункта меню «Справка» (рис. 4) запускается соответствующая процедура, при помощи которой на экран выводится содержимое файла HLP.TXT. Этот файл должен размещаться в том же каталоге, что и исполнимый файл программы. При этом, если это необходимо, содержимое этого файла может быть легко отредактировано в текстовом редакторе без изменения исходного кода программы.


Пункт меню «Exit» дает возможность завершить работу программы.

Таким образом, использование меню пользователя, дающее возможность при помощи курсора легко выбрать нужное действие, существенно упрощает работу пользователя с программой.

Рис.4. Окно справки о работе программы

3.2 Программная реализация

Рассмотрим программную реализацию разработанной программы. Структура и назначение основных блоков соответствует материалу, который был исследован в теоретической части курсовой работы.

Сперва подключаются необходимые модули, определяются метки, константы, массивы и прочие глобальные переменные программы.

uses Crt,dos; { подключаются модули, их назначение описано в теоретической части курсовой работы}

const {определяются константы, необходимые для реализации пользовательского меню}

NORM=$17; { цвет невыделенного пункта }

SEL=$70; { цвет выделенного пункта } N=4;

var menu:array[1..N] of string[50];{ названия пунктов меню } punkt:integer; { номер выделенного пункта }

ch:char; { введенный символ }

i,j,x,y,col:integer; { координаты первой строки меню }

tin,tf,ss:integer; {описываются глобальные переменные, здесь tin - интервал вывода сообщений на экран, tf - желаемое время финиша, ss - расстояние до финиша,

f,f1,f2:boolean; {логические переменные, необходимые для контроля правильности ввода данных пользователем}

В следующем блоке реализуется определение процедур и функций пользователя.

В разработанной программе применялись следующие подпрограммы.

Procedure MenuToScr;{ вывод меню на экран }

begin

ClrScr; { очистка экрана}

WRITELN;

writeln(' ГЛАВНОЕ МЕНЮ');

WRITELN;

WRITELN;

for i:=1 to N do {перебираются все пункты меню в цикле}

begin

GoToXY(x,y+i-1); {перевод курсора в нужную позицию}

write(menu[i]); {вывод пункта меню, содержащегося в массиве констант}

end;

TextAttr:=SEL; {изменение атрибутов текста - выделенный}

GoToXY(x,y+punkt-1);

write(menu[punkt]);{ выделяется строка меню }

TextAttr:=NORM; {изменение атрибутов текста - невыделенный}

end;

Следующая описываемая процедура отвечает за ввод данных пользователем.

procedure punkt1; {процедура ввода данных – соответствует первому пункту меню}

begin

CLRSCR;

f:=false;f1:=false;f2:=false; {признак того, что данные еще не введены}

textcolor(13); {изменяется цвет текста}

writeln;

WRITELN(' ВВЕДИТЕ ИСХОДНЫЕ ДАННЫЕ ');

writeln;

textcolor(14);

writeln;

repeat {заголовок цикла ввода значений }


if f=false {если первый параметр еще не введен}

then begin Write(' Введите расстояние до финиша -> ');

{$I-} {директива, выключающая автоматическую генерацию объектного кода – нужна для избежания ошибки ввода значения}

ReadLn(ss);

{$I+}{директива, включающая автоматическую генерацию объектного кода }

if (ioresult<>0) { если возникла ошибка – в данном случае, введено некорректное значение}

or (ss<1) then {если введенное значение меньше допустимого}

begin

textcolor(4);

writeln('Ошибка! Расстояние задано неверно!');

textcolor(14);

continue; {возвращение в начало цикла}

end

else f:=true; {признак того, что значение введено корректно}

end;

{Таким же образом реализован ввод двух остальных параметров}

if f1=false then

begin write(' Введите желаемое время финиша (секунды) -> ');

{$I-}

ReadLn(tf);

{$I+}

if (ioresult<>0) or (tf<=0) then begin

textcolor(4);

writeln('Ошибка! Время финиша введено неверно!');

textcolor(14);

continue; end

else f1:=true;

end;

if f2=false then begin

write(' Введите интервал вывода сообщений на экран (секунды) -> ');

{$I-}ReadLn(tin);

{$I+}

if (ioresult<>0) or (tin<=0) or (tin>=tf) then begin

textcolor(4);

writeln('Ошибка! Интервал вывода сообщений введен неверно!');

textcolor(14);

continue;

end

else f2:=true;

end;

until (f=true) and (f1=true) and (f2=true); { условие выхода из цикла – все три параметра введены верно}

Writeln('Press any key ...');

ch:=readkey; { ожидание нажатия любой клавиши}

ch:=#0;

end; {завершение процедуры}

Следующая процедура отвечает за эмуляцию работы персонального компьютера в режиме «онлайн».

Procedure punkt2; { процедура, соответствующая пункту 2 меню}

var vnp,tvr,h,min,s,ds,t:word; {описываются локальные переменные, используемые в данной процедуре}

vr:integer;

rs,vs,vsz,vszs,sp,v,vsr,vrk:real;

begin

ClrScr;

if (tf=0) then begin {проверка – введены ли исходные данные}

textcolor(13); writeln; writeln;

writeln('Сначала необходимо ввести исходные данные!');

readkey; textcolor(14);

exit; {завершение работы процедуры}

end;

GetTime(h,min,s,ds);{Вызов текущего времени}

vnp:=s+(min*60)+(h*3600); {время старта в секундах}

sound(3000); delay(2000); nosound; {звуковой сигнал}

TextColor(12); {Установка цвета "времени"}

GoToXY(40,1);

Write('Время старта ->:');

Write(h,' час ',min,' мин ',s,' сек'); {выводится на экран время старта}

textcolor(13);

writeln(' ':15,'Условные обозначения');

textcolor(14);

writeln('Время с момента старта ->TPR');

writeln ('Пройденный к данному моменту времени путь->PRS');

writeln ('Средняя скорость на отрезке ->VS');

writeln ('Средняя скорость к данному моменту времени ->VSZ');

writeln('Время, оставшееся до момента финиша ->TOST');

writeln('Рекомендуемая скорость в начале пути->',ss/tf:4:4);