Смекни!
smekni.com

Програма переводу з однієї системи числення у іншу (стр. 2 из 3)

В модулі реалізовано ряд процедур.

Процедура Hide_cursor. Робить курсор невидимим. Використовує процедуру Set_cursor та стандартну процедуру Intr .

Процедура Max_cursor. Встановлює вказівник курсора у вигляді прямокутника. Використовує процедуру Set_cursor.

Процедура Standart_cursor. Перетворює вказівник курсора до стандартного вигляду NBU(Non blinking nderline). Використовує процедуру Set_cursor.

Процедура Inf. Виводить на екран інформацію по програму та автора.

Процедура Check. Виконує перевірку на коректність числа‚ яке підлягає переводу. Перевірка здійснюється для всіх систем числення‚ вказаних вище. Для всіх систем числення довжина числа‚ що підлягає переводу не повинна перевищувати 20 цифр. Якщо ж ця умова не виконується‚ то виводиться повідомлення “Переповнення!”. Крім того‚ процедура перевіряє введене число на допустимість цифр. Для двійкової системи числення число може містити тільки цифри 0 та 1. Для вісімкової системи числення число повинно містити цифри від 0 до 7. Для шістнядцяткової системи число може містити довільні цифри (від 0 до 9) та символи A,B,C,D,E,F. Якщо перелічені умови не виконуються‚ то виводиться повідомлення “Недопустиме число!”.

Процедура Convert_to_10. Здійснює перевід числа з довільної системи числення у десяткову систему. В якості вхідного параметра використовує основу системи числення (system). Викликає процедуру Check.

Процедура Ten_to. Здійснює перевід з десяткової системи числення у довільну (з перелічених вище). Основа системи числення передається у процедуру у якості вхідного параметра (system). Викликає процедуру Check.

В програмі реалізовано наступні процедури:

Процедура Golovnemenu. Виводить на екран дисплея меню програми‚ котре пропонує користувачеві наступні опції: “Перевід з 10”‚ “Перевід в 10”‚ “Допомога”‚ “Вихід”. Переміщення по пунктах меню здійснюється з допомогою клавіш керування курсором‚ вибір опції меню здійснюється при натисканні клавіші Enter.

Процедура Sub_ten_to_. При виборі опції “Перевід з 10” реалізує спадне меню‚ яке пропонує користувачеві наступні опції “У двійкову”‚ “У вісімкову”‚ “У шістнадцяткову”. Переміщення по пунктах меню здійснюється з допомогою клавіш керування курсором‚ вибір опції меню здійснюється при натисканні клавіші Enter.

Процедура Sub_to_ten. При виборі опції “Перевід в 10” реалізує спадне меню‚ яке пропонує користувачеві наступні опції “З двійкової”‚ “З вісімкової”‚ “З шістнадцяткової”. Переміщення по пунктах меню здійснюється з допомогою клавіш керування курсором‚ вибір опції меню здійснюється при натисканні клавіші Enter.

При роботі з програмою встановлюються такі вимоги до системи:

- x86 персональний комп'ютер (386 мінімум; 486, Pentium, або Pentium Pro)

- Microsoft DOS 3.30 або вище

- Microsoft Windows 3.1, Microsoft Windows for Workgroups, Microsoft Windows 95, Microsoft Windows NT 3.51 чи 4.0

- 512 Kb RAM

- розмір програми 18112 байтів

Для запуску програми необхідно запустити на виконання файл Kurs2.exe і далі використовувати головне меню програми.

Висновки

Завершивши роботу над курсовим проектом можна зробити висновок про те, що мені вдалося досягти своєї мети і розробити програму переводу з однієї системи числення у іншу. За допомогою засобів алгоритмічної мови Turbo Pascal було створено програму Kurs2‚ яка дозволяє здійснювати перевід чисел з двійкової‚ вісімкової та шістнадцяткової систем числення у десяткову систему числення та навпаки. Використання методики процедурного програмування дало змогу досить просто справитись з поставленою задачею.

В програмі реалізовано дворівневе меню‚ що дає змогу користувачеві просто користуватись нею. Програма протестована і скопільована у вигляді незалежного exe-файла‚ що значно спрощує її запуск і понижує вимоги до обладнання.


Список використаної літератури

1. Н.А. Криницкий‚ Г.А. Миронов‚ Г.Д. Фролов. Программирование и алгоритмические языки. М., Наука. 1978. 512 с.

2. В.Я. Сердюченко. Розробка алгоритмів та прграмування мовою Turbo Pascal. - Х.: «Паритет», 1995. - 349 с.

3. Д. Ван Тассел. Стиль, разработка, эффективность, отладка и испытание программ. М.: «Мир», 1985. - 332 с.

Додаток А. Текст програми

program Kurs2;

uses Crt,dos,calc;

label m1,m2,m3,m4;

const poz=2;

poz1=3;

type fak=(ten_to_,_to_ten,fild1,help,exit);

fak1=(ten_to_two,ten_to_eight,ten_to_sixteen);

fak2=(two_to_ten,eight_to_ten,sixteen_to_ten);

const rab:array[fak] of string [16] =

(' ПЕРЕВЎД З 10 ',' ПЕРЕВЎД В 10 ',' ',' ДОПОМОГА ',' ВИХЎД ');

rab1:array[fak1] of string [17] =

(' В ДВЎЙКОВУ ',' В ВЎСЎМКОВУ ',' В ШЎСНАДЦЯТКОВУ ');

rab2:array[fak2] of string [18] =

(' З ДВЎЙКОВО° ',' З ВЎСЎМКОВО° ',' З ШЎСНАДЦЯТКОВО° ');

var dov:fak;

dov1:fak1;

dov2:fak2;

sim:char;

x1,x2,y1,y2:integer;

procedure ramka1;

var i:integer;

begin

TextColor(0);

gotoxy(x1,y1);write('-');

for i:=1 to x2-x1-1 do write('-');write('¬');

for i:=1 to y2-y1-1 do begin

gotoxy(x2,y1+i);write('¦');

gotoxy(x1,y1+i);write('¦');end;

gotoxy(x1,y2); write('L');

for i:=1 to x2-x1-1 do write('-');write('-');

end;

procedure Golovnemenu;

var s:fak;nom:integer;

begin

textbackground(white);textcolor(0); x1:=1;y1:=0;

for s:=ten_to_ to exit do

if s=dov then begin

textbackground(green);

gotoxy(x1,y1+1); write(rab[s]);

textcolor(2); textbackground(white);

textcolor(0); x1:=x1+16;

end

else begin

gotoxy(x1,y1+1); write(rab[s]);

x1:=x1+16;

end;

gotoxy(1,24);write(' *** Calculator Version 1.0 Copyright (c) 1997 by L.Tarasenko *** ');

end;

procedure sub_ten_to_;

var s:fak1;

n:integer;

begin

x1:=1;y1:=2;x2:=19;y2:=6;ramka1;

for s:=ten_to_two to ten_to_sixteen do

if s=dov1 then begin

n:=poz1+ord(s);

textbackground(green);

gotoxy(x1+1,n); write(rab1[s]);

textcolor(2); textbackground(white);

textcolor(0);

end

else begin

textbackground(white);textcolor(0);

n:=poz1+ord(s);

gotoxy(x1+1,n); write(rab1[s]);

end;

end;

procedure sub_to_ten;

var s:fak2;

n:integer;

begin

textbackground(white);textcolor(0);

x1:=16;y1:=2;x2:=35;y2:=6; ramka1;

for s:=two_to_ten to sixteen_to_ten do

if s=dov2 then begin

n:=poz1+ord(s);

textbackground(green); textcolor(0);

gotoxy(x1+1,n);

write(rab2[s]);

textcolor(2);

textbackground(white);

end

else begin

textbackground(white);

textcolor(0);

n:=poz1+ord(s);

gotoxy(x1+1,n);

write(rab2[s]);

end;

end;

begin

window(1,1,80,25);textbackground(0);

m2:screen;

dov:=ten_to_;

repeat{1}

golovnemenu;

repeat{2}

sim:=readkey;

if(sim=#0) and keypressed then sim:=readkey;

case sim of

#77:begin

if dov <> exit then dov:=succ(dov)

else dov:=ten_to_;

if dov=fild1 then dov:=help;

end;

#75:begin

if dov<> ten_to_ then dov:=pred(dov)

else dov:=exit;

if dov=fild1 then dov:=_to_ten;

end;

#27:begin;clrscr;halt;end;

end;

golovnemenu;

until sim=#13;

case dov of

ten_to_:begin

repeat{1}

sub_ten_to_;

repeat{2}

sim:=readkey;

if(sim=#0) and keypressed then sim:=readkey;

case sim of

#80:if dov1 <> ten_to_sixteen then dov1:=succ(dov1)

else dov1:=ten_to_two;

#72:if dov1<> ten_to_two then dov1:=pred(dov1)

else dov1:=ten_to_sixteen;

#27:begin screen;goto m1;end;

#75:begin

if dov<> ten_to_ then dov:=pred(dov)

else dov:=exit;screen;goto m1;

end;

#77:begin

if dov <> exit then dov:=succ(dov)

else dov:=ten_to_;screen;goto m1;

end;

end;

sub_ten_to_;

until sim=#13;

case dov1 of

ten_to_two:begin ten_to(2);screen;

golovnemenu;goto m4;end;

ten_to_eight:begin ten_to(8);screen;

golovnemenu;goto m4;end;

ten_to_sixteen:begin ten_to(16);screen;

golovnemenu;goto m4;end;

end;

m4:until false;

end;

_to_ten:begin

repeat{1}

sub_to_ten;

repeat{2}

sim:=readkey;

if(sim=#0) and keypressed then sim:=readkey;

case sim of

#80:if dov2 <> sixteen_to_ten then dov2:=succ(dov2)

else dov2:=two_to_ten;

#72:if dov2<> two_to_ten then dov2:=pred(dov2)

else dov2:=sixteen_to_ten;

#27:begin screen;goto m1;end;

#75:begin

if dov<> ten_to_ then dov:=pred(dov)

else dov:=exit;screen;goto m1;

end;

#77:begin

if dov <> exit then begin

dov:=succ(dov);dov:=succ(dov);end

else dov:=ten_to_;screen;goto m1;

end;

end;

sub_to_ten;

until sim=#13;

case dov2 of

two_to_ten:begin convert_to_10(2);screen;

golovnemenu;goto m3;end;

eight_to_ten:begin convert_to_10(8);screen;

golovnemenu;goto m3;end;

sixteen_to_ten:begin convert_to_10(16);screen;

golovnemenu;goto m3;end;

end;

m3:until false;

end;

help:begin;inf;screen;end;

exit:begin;clrscr;halt;end;

end;

m1:screen;

until false;

end.

unit calc;

interface

procedure inf;

procedure screen;

procedure hide_cursor;

procedure max_cursor;

procedure standart_cursor;

procedure convert_to_10(system:integer);

procedure ten_to(system:integer);

implementation

uses crt,strings,dos,time;

procedure set_cursor(begline,endline:byte);

var regs:registers;

begin

with regs do

begin

ah:=$01;

ch:=begline;

cl:=endline;

end;

intr($10,regs);

end;

procedure hide_cursor;

var begline,endline:byte;

begin

begline:=$20;

endline:=$00;

set_cursor(begline,endline);

end;

procedure max_cursor;

var begline,endline:byte;

begin

begline:=$00;

if lastmode=mono then endline:=$0c

else endline:=$07;

set_cursor(begline,endline);

end;

procedure standart_cursor;

var begline,endline:byte;

begin

if lastmode=mono then begin

begline:=$0b;

endline:=$0c;

end else

begin

begline:=$06;

endline:=$07;

end;

set_cursor(begline,endline);

end;

procedure ramka(x1,y1,x2,y2:integer);

var i:integer;

begin

textbackground(white);textcolor(0);

gotoxy(x1,y1);write('-');

for i:=1 to x2-x1-1 do write('-');write('¬');

for i:=1 to y2-y1-1 do begin

gotoxy(x2,y1+i);write('¦');

gotoxy(x1,y1+i);write('¦');

end;

gotoxy(x1,y2);write('L');

for i:=1 to x2-x1-1 do write('-');write('-');

end;


procedure screen;

var i: integer;

begin

clrscr;

textbackground(0);

TextColor(Blue);

for i:=2 to 25 do begin

write('--------------------------------------------------------------------------------');

end;

end;

procedure init;

begin

screen; ramka(1,3,80,24);

get_date(3,3); gotoxy(1,2);

textbackground(0); textcolor(green);

write(' " К У Р С О В А " ');

gotoxy(1,25);write(' *** Версўя 1.0 (с) 2002 Л.Тарасенко *** ');

end;

procedure inf;

begin

init;

gotoxy(24,8);write('г=============================¬');

gotoxy(24,9);write('¦ Програма переводу ¦ ');

gotoxy(24,10);write('¦ чисел з однўї• системи ¦ ');

gotoxy(24,11);write('¦ числення в ўншу ¦ ');

gotoxy(24,12);write('¦ Версўя 1.0 ¦ ');

gotoxy(24,13);write('¦ 17.09.2002 ¦ ');

gotoxy(24,14);write('¦ Автор : Л.Тарасенко ¦ ');

gotoxy(24,15);write('¦ ¦ ');

gotoxy(24,16);write('L=============================- ');

gotoxy(25,17);write(' ');

readkey;

end;

procedure check(system:integer;num:string);

var i,error:integer;

label e,ok,m2;

begin

for i:=1 to length(num) do begin

num[i]:=upcase(num[i]);

if length(num) >= 20 then begin

gotoxy(24,12);write(' ');

gotoxy(35,15);

write('Переповнення');goto ok;

end;

if system=2 then if (num[i]<>'1') and (num[i]<>'0') then goto e;

if system=16 then

if (num[i]<>'A') and (num[i]<>'B') and

(num[i]<>'C') and (num[i]<>'D') and

(num[i]<>'E') and (num[i]<>'F') and