Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


Использование функции ReadKey и функций управления цветом




Пример 1.5. Построить программу, которая, используя модуль Triangle, находит для заданного треугольника площадь S, периметр Р, радиусы Rv и Ro вписанной и описанной окружностей, при этом должны быть реализованы четыре варианта исходных данных:

а) заданы три стороны А, В, С;

b) заданы координаты вершин а,Ь,с треугольника (шесть координат);

с) заданы две стороны А, В и угол между ними;

d) задана сторона А и прилежащие углы.

В экране пользователя выделим синее окно для исходных данных и зеленое - для результатов:

 

Пользователь задает данные выбранного им варианта, например координаты вершин, и получает в зеленом окне значения результатов. Данные, относящиеся к другим вариантам, пропускаются нажатием клавиши Enter. Необходимо, чтобы программа не прекращала работы из-за ошибок пользователя при наборе данных, таких как набор запятой вместо десятичной точки, случайное нажатие буквы и т.п. Вместо операторов Read, Readln следует воспользоваться функцией ReadKey. Программа может анализировать коды клавиш на их допустимость в данном контексте. Например, в записи числа –289.49.4 предпоследний символ должен быть признан недопустимым.

Если символ недопустим, то занесения его в окно не будет, а программа будет выдавать краткий звуковой сигнал, пробуждающий “дремлющего” пользователя. В формируемой строке символов st также будут запоминаться только допустимые символы, а когда набор значения параметра заканчивается, пользователь нажимает Enter и содержимое строки преобразуется в число с помощью процедуры Val. Число символов в записи параметра ограничим 12.

Программа, реализующая интерфейс пользователя:

 

Program Primer_3;

Uses CRT, {Вызов стандартного модуля CRT}

Triangle; {Вызов модуля пользователя}

Const V: Array[1..12] of String[17] =

(‘Длина стороны А:’,’Длина стороны В:’,’Длина стороны С:’,

‘Угол между А и В:’,’Угол между А и С:’,’Координаты вершин’,

‘Xa=’,’Ya=’,’Xb=’,’Yb=’,’Xc=’,’Yc=’);

Var j:Word; ch:Char; prm:Array[1..12] of Real; S,P,Rv,Ro: Real;

 

Function Value: Real; {Блок перевода набора символов в число}

Var i,er:Word;z:Real;ch:Char;st:String[12];Perv: Boolean;

Begin Perv:= True; i:=0;

Repeat ch:= ReadKey; {Считывание кода нажатой клавиши}

If (ch>#47) And (ch < #58) Or {“Если цифра или...}

(ch = #46) And Perv Or {...точка - впервые или...}

(ch = #45) And (i =0) Then {... минус в 1-й позиции...}

Begin i:=i+1: st[i]:=ch; {... то заполняется строка st”}

If ch = #46 Then Perv: = False;

Write(ch) Вывод символа на экран

End

Else If ch <> #13 Then Write(#7); {3вукoвoй сигнал при ошибке}

Until (ch = #13) Or (i >12); {Ввод символов продолжается, пока}

{не нажата клавиша Enter или число символов i не превысит 12}

st[0]:=Char(i); {В начальный компонент строки пишем ее длину}

Val(st, z, er);

Value:= z {Получение из строки st числа z}

End; {Конец блока Value}

 

Procedure Vivod; {Блок вывода результатов}

Begin

Writeln (#13#10' Результаты:’#13#10);

Writeln (‘Площадь S =’,5:7:3,#13#10'Периметр P=’,P:7:3);

Writeln (‘Радиус Rv =’,Рv:7:3,#13#10'Радиус Ro =’,Ro:7:3);

Write (#13#10'Изучив результаты, ‘#13#10’нажмите Enter’)

End; {Конец блока Vivod}

 

BEGIN

TextBackGround (0);ClrScr; {Очистка всего экрана}

TextColor (14); Window (2,1,35,16);

TextBackGround (Blue); {Заполнение окна синим цветом}

CIrScr;

For j:= 1 to 12 do {Цикл заполнения поля данных}

Begin

Write (#13#10' ‘+ V[j]); {Выводим название параметра}

if j<>6 Then prm[j]:=Value; {в 6-й строчке числа не будет}

End;

Write (#13#10' Укажите вариант:’#13#10' нажмите а,Ь,с или d’);

Repeat ch:= ReadKey;

Case ch of {Оператор выбора альтернатив от ‘а’до ‘d’}

‘a’: Tr_a (prm[1],prm[2],prm[3],S,P,Rv,Ro);

‘b’: Tr_b (prm[7],prm[8],prm[9],prm[10],prm[11],prm[12],S,P,Rv,Ro):

‘c’: Tr_c (prm[1],prm[2],prm[4],S,P,Rv,Ro);

‘d’: Tr_d (prm[1],prm[3],prm[4],S,P,Rv,Ro)

Else Write(#7) {Звуковой сигнал пользователю при ошиб. букве}

End

Until ch in[‘a’..’d’]; {Расчет произведен; оформляем результат}

Window (45,1,75,16);TextBackGround(2);

CIrScr; {Очистка экрана. Образование нового окна}

Window (48,2,75,16); {“Урезаем” строки окна слева на 3-й позиции}

Vivod; {Заполнение поля результатов}

Readln {Задержка вывода на экране}

END. {Подробно о применении подобных программ см. работу [6], с.178-179}

 

В этой программе не хватает анализа корректности совокупности заданных пользователем параметров (неполные, предусмотренные совокупности параметров). Это несложное добавление можно сделать самостоятельно.





Поделиться с друзьями:


Дата добавления: 2016-11-18; Мы поможем в написании ваших работ!; просмотров: 1267 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Самообман может довести до саморазрушения. © Неизвестно
==> читать все изречения...

2513 - | 2362 -


© 2015-2024 lektsii.org - Контакты - Последнее добавление

Ген: 0.008 с.