В проекте представлена разработка наглядного калькулятора чисел с нормализованными мантиссами: выполнение сложения двух целых положительных чисел; рассмотрен вариант перевода исходных данных и полученного результата в шестнадцатеричную систему счисления, затем, с помощью тетрад, в двоичную с нормализацией мантисс.
Число в нормальной форме хранится в памяти компьютера с нормализованными мантиссами. Сложение таких чисел сводится к сложению мантисс при одинаковых смещенных порядках слагаемых. Выравнивание порядка осуществляется засчет изменения мантиссы меньшего числа.
Компьютерная модель
Создать программный код, который будет осуществлять перевод чисел в систему триад и осуществлять сложения. Код оформить в виде подпрограмм для более наглядного представления кода и читаемости. Программный код:
Интерфейс
Unit Project; {Коноводов Виктор}
interface
uses crt;
procedure zagolovok;
procedure vivod;
procedure mantissi;
procedure summa;
procedure podpis;
procedure vvod_znach;
implementation
procedure vvod_znach;
begin
window(35,7,100,18);
textbackground(3); clrscr;
end;
procedure zagolovok;
begin
textcolor(white);
textbackground(7); clrscr;
window(20,2,120,5);
textbackground(3); clrscr;
writeln(' Проект ');
write(' Задание : ');
end;
procedure vivod;
begin
window(15,10,40,50);
textbackground(3); clrscr;
end;
procedure mantissi;
begin
textcolor(white);
window(45,10,95,50);
textbackground(3); clrscr;
end;
procedure summa;
begin
textcolor(white);
window(100,10,140,50);
textbackground(3); clrscr;
writeln;
end;
procedure podpis;
begin
window(40,56,120,60);
textbackground(3); clrscr;
writeln(' VK ');
readkey;
end;
Begin
End.
Программа
Program Project_Normaliz_form;
Uses CRT,Project;
Const Massiv_16: String[16]='0123456789ABCDEF';
type mas = array[1..32] of string;
var a:mas;
N_16,k_16,b_16,N_2,K_2,znak:string;
N_10,k_10,b,n,i,q,z:integer;
Procedure vvod(var n: integer);
begin
read(n);
end;
Procedure vivod_chisel(n,i:integer);
begin
writeln(' A(',i,') = ',n:4);
end;
Procedure perevod_v_16(n:integer; var z,s:string);
begin
if n<0 then begin
n:=Abs(n);
z:='-' ;
s:=Massiv_16[n mod 16+1] +s;
end
else z:='';
if n=0 then S:='0'
else S:='';
While n>0 do begin
s:=Massiv_16[n mod 16+1]+s;
n:=n div 16;
end;
end;
Procedure Mantissa(s:string );
begin
write(' Мантиссачисла ', s ,':');
writeln(' 0,',s,'*10^',length(s));
end;
Procedure Perevod_v_2(s:string);
var nomer,i:integer;
s_nomer:char;
begin
nomer:=0;
for i:=0 to length(s) do begin
s_nomer:=s[nomer];
case s_nomer of
'0': a[nomer]:= '0000';
'1': a[nomer]:= '0001';
'2': a[nomer]:= '0010';
'3': a[nomer]:= '0011';
'4': a[nomer]:= '0100';
'5': a[nomer]:= '0101';
'6': a[nomer]:= '0110';
'7': a[nomer]:= '0111';
'8': a[nomer]:= '1000';
'9': a[nomer]:= '1001';
'A' : a[nomer]:= '1010';
'B' : a[nomer]:= '1011';
'C' : a[nomer]:= '1100';
'D' : a[nomer]:= '1011';
'E' : a[nomer]:= '1110';
'F' : a[nomer]:= '1111';
end;
inc(nomer);
end;
end;
Procedure vivod_v_16(n:integer; s:string);
begin
writeln(' Число ', n, ' в 16-ойСС = ', s );
end;
Procedure Mantissa_1(s,s1:string);
begin
if (length(N_16)<length(K_16)) then for i:=1 to length(k_16)-length(N_16) do begin
write('0000', ' ');
inc(q);
end;
for i:=1 to length(N_16) do write(' ',a[i]);
if length(N_16)< 8 then for i:=1 to 8 - length(N_16) - q do write(' ','0000');
writeln;
end;
Procedure Mantissa_2(s,s1:string);
begin
if (length(N_16)>length(K_16)) then for i:=1 to length(N_16) - length(k_16) do begin
write('0000', ' ');
inc(z);
end;
for i:=1 to length(k_16) do write(' ', a[i]);
if length(k_16)< 8 then for i:=1 to 8 - length(K_16) - z do write(' ','0000');
writeln;
end;
Procedure Mantissa_Summi(s2:string);
begin
for i:=1 to length(b_16) do write(' ',a[i]);
if length(b_16)< 8 then for i:=1 to 8 - length(b_16) do write(' ','0000');
writeln;
end;
Begin
zagolovok;
writeln(' Сложение целых положительных чисел с нормализованными мантиссами ' );
vvod_znach;
write(' Введите 2 числа в 10-ой системе счисления: ');
vvod(N_10);
vvod(k_10);
textbackground(7); clrscr;
vivod;
writeln(' Даны числа в 10-ой СС: ');
vivod_chisel(N_10,1);
readkey;
vivod_chisel(K_10,2);
perevod_v_16(N_10,znak,N_16);
perevod_v_16(k_10,znak,k_16);
vivod_v_16(N_10,N_16);
readkey;
vivod_v_16(K_10,K_16);
readkey;
mantissi;
Mantissa(N_16);
writeln;
readkey;
Mantissa(K_16);
writeln;
readkey;
Perevod_v_2(N_16);
write(' M[N] = ');
Mantissa_1(N_16,K_16);
writeln;
readkey;
Perevod_v_2(k_16);
write(' M[K] = ');
Mantissa_2(N_16,K_16);
writeln;
readkey;
b:=N_10+K_10;
perevod_v_16(b,znak,b_16);
Perevod_v_2(b_16);
write(' M[N+K] =');
Mantissa_Summi(b_16);
readkey;
summa;
writeln(' Сумма таких чисел в 16-ой СС = ', b_16);
readkey;
podpis;
End.
Запустить проект на выполнение: ввести значения первого и второго числа, нажать enter.
Рис. 1. Ввод данных
Рис. 2 Вывод данных
Рис. 3. Перевод чисел в двоичную СС
Рис. 4. Интерфейс
После ввода двух целых положительных чисел (рис. 1) и нажатия на Enter в окне “Дано” (рис. 2) указывается вводимые данные и их перевод в 16-ичную СС. В следующем окне происходит поиск мантиссы числа и перевод по системе триад в 2-ую систему счисления и вычисление суммы (рис. 3). Конечная программа оформляется в виде наглядного интерфейса (рис. 4).
Программу можно доработать: добавив работу с отрицательными и вещественными числами. Таким образом, при переводе числа по системе триад, учитывать отрицательный знак этих чисел.
Подводя итог, рассмотренный проект на языке программирования Паскаль для подсчетов суммы чисел с нормализованными мантиссами с графическим интерфейсом можно применять на уроках информатики при изучении машинных кодов и действий над ними. Это обеспечит более лучшее понимание работы компьютера и обработки информации у обучающихся.
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ
Е. Р. Алексеев О. В. Чеснокова Т. В. Кучер Free Pascal и Lazarus Учебник по программированию. - Москва: ALT Linux; Издательский дом ДМК-пресс, 2010. - 442 с.
Онлайн компилятор паскаль // Online GDB pascal URL: https://www.onlinegdb.com/online_pascal_compiler