Соотношения между градусами Фаренгейта (°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.
Создайте пользовательский интерфейс, показанный на рисунке.