Указания по выполнению Задания 2.




Соотношения между градусами Фаренгейта (°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

настройка сегментного регистра DS на сегмент данных
mov ax,@data

mov ds,ax

pop ax

ret

initds endp

 

setcur proc

push ax

mov ah,2

установка позиции курсора
mov bh,0

int 10h

pop ax

ret

setcur endp

 

 

outstr proc

push ax

вывод строки на экран
mov ah,9

int 21h

pop ax

ret

outstr endp

 

dectohex proc

mov dh,al

перевод 8-битового числа в ASCII-коды цифр 16-ой системы; в DL содержится ASCII код старшей цифры числа, а в DH - ASCII код младшей цифры числа
shr dx,4

shr dl,4

call numcorr

xchg dh,dl

call numcorr

ret

dectohex endp

 

коррекция 4-битового числа до ASCII; на входе процедуры в регистре DL содержится 8-битовое число, а на выходе в DL содержится ASCII код шестнадцатеричного числа.  
numcorr proc

cmp dl,9

jna @@L

add dl,7

@@L: add dl,30h

ret

numcorr endp

 

outascii proc

push ax

mov ah,2

завершение работы программы
вывод двух символов на экран
int 21h

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

вызовы процедур
MOV DL,10

переход на следующую строку
MOV DH,3

ADD DH,CL

CALL setcur

POP DX - в DL находится первый символ, в DH - второй

CALL outascii - вывод двух символов на экран

LOOP l

MOV DH,17

CALL setcur

CALL term - вызов процедуры выхода в dos

END s

 


Задание 2.

Создайте пользовательский интерфейс, показанный на рисунке.

 



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2016-08-08 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: