Соотношения между градусами Фаренгейта (°F) и Цельсия (°C) имеют вид
°F = 32 + (9 / 5) °C °C = (5 / 9) (F - 32).
Код символа " ° " в таблице ASCII равен 176.
На рис. показана форма, используемая в этой программе, и результат выполнения программы.
Создайте форму, содержащую эти компоненты, и установите значения свойств компонентов, перечисленные в табл.
Таблица. Значения свойств компонентов формы программы преобразования значений температуры
Компонент | Свойство | Значение |
Форма Надпись Поле ввода Кнопка Кнопка Область просмотра | Name Caption Name Caption Name Text Name Caption Name Caption Name Lines ReadOnly ScrollBars | frmTempConv Преобразование значения температуры lblTempData Введите значение температуры edtTempData (Пусто) btnFtoC Преобразование градусов Фаренгейта в градусы &Цельсия btnСtoF Преобразование градусов Цельсия в градусы & Фаренгейта memOutput (Пусто) True ssVertical |
В инспекторе объектов измените имена обработчиков событий OnClick обеих кнопок. Для этого введите в полях рядом с OnClick новые имена обработчиков, как показано в табл.
Имя компонента | Событие | Новое имя обработчика |
btnFtoC btnCtoF | OnClick OnClick | ConvertFtoC() ConvertCtoF() |
Код программы
unit TemperatureConversion;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
type
TfrmTempConv = class(TForm)
lblTempData: TLabel;
EdtTempData: TEdit;
btnFtoC: TButton;
btnCtoF: TButton;
MemOutput: TMemo;
procedure ConvertFtoC(Sender: TObject);
procedure ConvertCtoF(Sender: TObject);
private { Private declarations }
public { Public declarations }
end;
const degree = chr(176);
var
frmTempConv: TfrmTempConv;
implementation
{$R *.dfm}
procedure TfrmTempConv.ConvertCtoF(Sender: TObject);
var
code:Integer;
degreesF:Real; degreesC:Real;
fromC: String; toF: String;
begin
val(edtTempData.Text,degreesC,code);
degreesF:= 32.0+(9.0/5.0)*degreesC;
str(degreesF:6:2,toF);
str(degreesC:6:2,fromC);
toF:=trim(toF+degree+'F');
fromC:=Trim(fromC+degree+'C');
|
memOutput.Lines.Add(fromC+' равно '+toF);
end;
procedure TfrmTempConv.ConvertFtoC(Sender: TObject);
var
code:Integer;
degreesF:Real; degreesC:Real;
fromF: String; toC: String;
begin
val(edtTempData.Text,degreesF,code);
degreesC:= (5.0/9.0)*(degreesF-32.0);
str(degreesF:6:2,fromF);
str(degreesC:6:2,toC);
fromF:=trim(fromF+degree+'F');
toC:=Trim(toC+degree+'C');
memOutput.Lines.Add(fromF+' равно '+toC);
end;
end.
Билет 8
Задание 1.
Часть 1. Разработайте библиотеку подпрограмм общего назначения: настройка сегментного регистра DS на сегмент данных, установка позиции курсора, вывод строки на экран, перевод 8-битового числа в ASCII-коды цифр 16-ой системы, коррекция 4-битового числа до ASCII, вывод двух символов на экран, завершение работы программы.
Часть 2. Используя библиотеку подпрограмм, разработайте, оттранслируйте и отладьте программу преобразования чисел в ASCII коды 16-ой системы.
Указания по выполнению Задания 1.
Часть 1.
Библиотеку нужно сохранить в отдельном текстовом файле.
В результате работы процедуры перевода 8-битового числа в ASCII-коды цифр 16-ой системы в DL должен содержаться ASCII код старшей цифры числа, а в DH - ASCII код младшей цифры числа.
На входе процедуры коррекции 4-битового числа до ASCII в регистре DL должно быть 8-битовое число, а на выходе в DL должен быть ASCII код шестнадцатеричного числа.
Часть 2.
В вызывающей программе библиотека должна подключаться с помощью директивы INCLUDE "имя файла". Директива должна быть указана в том же кодовом сегменте, где будут выполняться вызовы процедур.
Инициализируйте сегментный регистр данных.
Позиционируйте курсор. Перед вызовом процедуры установки позиции курсора в регистры DH и DL необходимо поместить номер строки и столбца соответственно.
|
Выведите сообщение. Перед вызовом процедуры вывода строки на экран смещение строки необходимо поместить в DX.
Заведите счётчик первых 15 чисел. Перед вызовом процедуры перевода 8-битового числа в ASCII-коды цифр 16-ой системы в AL должно быть помещено выводимое число.
Осуществите переход на следующую строку.
При выводе двух символов на экран в DL должен находиться первый символ, в DH - второй.
Вызовите процедуру выхода в dos.
Библиотека подпрограмм
initds proc
push ax
|
mov ds,ax
pop ax
ret
initds endp
setcur proc
push ax
mov ah,2
|
int 10h
pop ax
ret
setcur endp
outstr proc
push ax
|
int 21h
pop ax
ret
outstr endp
dectohex proc
mov dh,al
|
shr dl,4
call numcorr
xchg dh,dl
call numcorr
ret
dectohex endp
|
cmp dl,9
jna @@L
add dl,7
@@L: add dl,30h
ret
numcorr endp
outascii proc
push ax
mov ah,2
|
|
xchg dh,dl
int 21h
pop dx
ret
outascii endp
term proc
push ax
mov ax,4c00h
int 21h
pop ax
ret
term endp
Программа, использующая библиотеку
MODEL SMALL
.STACK 128
.DATA
MSG DB "Преобразование чисел в ASCII коды 16-ой системы $"
.CODE - кодовый сегмент
INCLUDE iomisc.asm - подключение отдельного текстового файла с сохранённой библиотекой
|
s: CALL initds - инициализация сегментного регистра данных
MOV DH,2 - в DH помещён номер строки
MOV DL,10 - в DL помещён номер столбца
CALL setcur - позиционирование курсора, т.е. вызов процедуры
установки позиции курсора
LEA DX,MSG - смещение строки помещено в DX
CALL outstr - вывод сообщения, т.е. вызов процедуры
вывода строки на экран
MOV CL,15 - счётчик первых 15 чисел
l: MOV AL,CL - в AL помещено выводимое число
CALL dectohex - вызов процедуры перевода 8-битового числа
в ASCII-коды цифр 16-ой системы
PUSH DX
|
|
ADD DH,CL
CALL setcur
POP DX - в DL находится первый символ, в DH - второй
CALL outascii - вывод двух символов на экран
LOOP l
MOV DH,17
CALL setcur
CALL term - вызов процедуры выхода в dos
END s
Задание 2.
Создайте пользовательский интерфейс, показанный на рисунке.