Автор работы: Пользователь скрыл имя, 11 Декабря 2011 в 21:45, курсовая работа
Человеку достаточно сложно произвести в уме математические операции над двоичными числами. Для облегчения расчетов люди создают специальные приложения, выполняющие функции калькулятора. Одним из средств разработки таких программ является Borland Delphi.
В данной курсовой работе предложено создать Windows-приложение на языке Object Pascal в среде визуального программирования Borland Delphi, которое должно обеспечивать выполнение операций по вводу, обработке и выводу информации, содержащей двоичные числа.
Введение 2
Глава1. Двоичная система счисления. 2
§ 1История 2
§ 2 Целочисленные и вещественные типы данных языка Object Pascal 2
Глава 2. Приложение для реализации алгоритмов над данными целочисленных типов 2
§ 1 Система программирования Borland Delphi 2
§ 2 Описание компонентов Delphi 2
Компонент TButton 2
Компонент TEdit 2
Компонент TLabel 2
Компонент RadioButton 2
Компонент TMainMenu 2
Компонент TSaveDialog 2
§ 3 Инструкция пользователя 2
Заключение 2
Список источников 2
Приложение 1. Текст программных модулей 2
Приложение 2. Система тестов 2
{Cтрока у1 хранит вещественное число 2 в 10сс}
{ y1:=y1+','+y2; }
{////Проверка}
{edit3.Text:=y1;}
end;
if k1=0 then begin
{\\\\\Число 2 не вещественное}
{перевод числа
2 в десятичную систему
n:=length(parametr2);
x2:=0;
for i:=1 to n do
begin
val(parametr2[i],x,code2);
x2:=x2+x*(exp((n-i)*ln(2)));
end;
str(x2:0:0,y3); {/////Проверка}
{edit4.Text:=y1; }
end;
begin
{y-целая часть числа 1
y1-дробная часть числа 1
y2-целая часть числа 2
y3-дробная часть числа 2}
val(y,x1,code1);
val(y1,x2,code2);
val(y2,x3,code3);
val(y3,x4,code4);
x2:=x2+x4; {дробные части}
x1:=x1+x3; {целые части}
str(x1:0:0,y2);
str(x2:0:0,y3);
val(y2,x6,code1);
val(y3,x7,code2);
otvet2:=x6 div x7;
str(otvet2,otvet1);
edit1.Text:=otvet1;
if otvet2=0 then edotv.Text:='0'
else
{/////////////Переводим
ответ в двоичную систему
begin
if k=0 then begin
val(otvet1,otvet2,code1);
while otvet2>0 do
begin
x5:=otvet2 div 2;
x1:=otvet2 mod 2;
otvet2:=x5;
str(x1:0:0,y);
y1:=y1+y;
{Получаем ответ в двоичной
сс,но записанный справа
{///////Запишем ответ слева направо}
for i:=length(y1)-1 downto 1 do
y:=y+y1[i];
edotv.Text:=y
end;
end;
end;
end;
end;
end;
end;
end;
procedure TForm1.BtModClick(Sender: TObject);
begin
edit2.Text:='Остаток от деления';
y:='';
y1:='';
y2:='';
y3:='';
y4:='';
{проверяем числовое ли значение у параметров}
{////////////// число1 }
parametr1:=EdParametr1.Text;
if parametr1='' then
begin
beep;
showmessage('Вы не ввели первое число!');
edParametr1.SetFocus;
edParametr1.SelectAll;
end;
if parametr1<>'' then begin
{//////////////число2}
parametr2:=EdParametr2.Text;
if parametr2='' then
begin
beep;
showmessage('Вы не ввели второе число!');
edParametr2.SetFocus;
edParametr2.SelectAll;
end
else
begin
k:=0;
val(parametr1,prmtr1,code1);
for i:=1 to length(parametr1) do
if (parametr1[i]<>'0') and (parametr1[i]<>'1') and (parametr1[i]<>',') then
k:=k+1;
if k<>0 then
begin
beep;
showmessage('Вы некорректно ввели число1!');
edparametr1.SetFocus;
edparametr1.SelectAll;
end
else
begin
k:=0;
val(parametr2,prmtr2,code2);
for i:=1 to length(parametr2) do
if (parametr2[i]<>'0') and (parametr2[i]<>'1') and (parametr2[i]<>',') then
k:=k+1;
if k<>0 then
begin
beep;
showmessage('Вы некорректно ввели число2!');
edparametr2.SetFocus;
edparametr2.SelectAll;
end
else
begin
btPlus.Enabled:=false;
btMinus.Enabled:=false;
btMod.Enabled:=false;
btDiv.Enabled:=false;
btUmn.Enabled:=false;
btDel.Enabled:=false;
save.Enabled:=true;
{///////////// Проверяем вещественные ли числа???}
k:=0;
k1:=0;
for i:=1 to length(parametr1) do
if parametr1[i]=',' then {Число 1 вещественное!}
begin
k:=k+1;
y1:=copy(parametr1,i+1,length(
y:=copy(parametr1,1,i-1);
{cчитаем целую часть числа 1}
n:=length(y);
n1:=length(y1);
x1:=0;
x2:=0;
for i:=1 to n do
begin
val(y[i],x,code1);
x1:=x1+x*(exp((n-i)*ln(2)));
end;
str(x1:0:0,y);
{cчитаем дробную часть числа 1}
for i:=1 to n1 do
begin
val(y1[i],x,code2);
x2:=x2+x*(exp((-i)*ln(2)));
end;
str(x2:0:5,y1);
{y1:=copy(y1,3,n1); }
{Cтрока у хранит вещественное число 1 в 10сс}
{y:=y+','+y1; }
{////Проверка}
{edit1.Text:=y; }
end;
if k=0 then
begin
{Число 1 не вещественное}
{перевод числа
1 в десятичную систему
n:=length(parametr1);
x1:=0;
for i:=1 to n do
begin
val(parametr1[i],x,code1);
x1:=x1+x*(exp((n-i)*ln(2)));
end;
str(x1:0:0,y);
end;
end;
{Проверяем вещественное ли Число 2 }
for i:=1 to length(parametr2) do
if parametr2[i]=',' then begin {Число 2 вещественное!}
k1:=k1+1;
y3:=copy(parametr2,i+1,length(
y2:=copy(parametr2,1,i-1);
{cчитаем целую часть числа 2}
n:=length(y2);
n1:=length(y3);
x1:=0;
x2:=0;
for i:=1 to n do
begin
val(y2[i],x,code1);
x1:=x1+x*(exp((n-i)*ln(2)));
end;
str(x1:0:0,y2);
{cчитаем дробную часть числа 2}
for i:=1 to n1 do
begin
val(y3[i],x,code2);
x2:=x2+x*(exp((-i)*ln(2)));
end;
str(x2:0:5,y3);
{y3:=copy(y3,3,n1); }
{Cтрока у1 хранит вещественное число 2 в 10сс}
{ y1:=y1+','+y2; }
{////Проверка}
{edit3.Text:=y1;}
end;
if k1=0 then begin
{\\\\\Число 2 не вещественное}
{перевод числа
2 в десятичную систему
n:=length(parametr2);
x2:=0;
for i:=1 to n do
begin
val(parametr2[i],x,code2);
x2:=x2+x*(exp((n-i)*ln(2)));
end;
str(x2:0:0,y3); {/////Проверка}
{edit4.Text:=y1; }
end;
begin
{y-целая часть числа 1
y1-дробная часть числа 1
y2-целая часть числа 2
y3-дробная часть числа 2}
val(y,x1,code1);
val(y1,x2,code2);
val(y2,x3,code3);
val(y3,x4,code4);
x2:=x2+x4; {дробные части}
x1:=x1+x3; {целые части}
str(x1:0:0,y2);
str(x2:0:0,y3);
val(y2,x6,code1);
val(y3,x7,code2);
otvet2:=x6 mod x7;
str(otvet2,otvet1);
edit1.Text:=otvet1;
if otvet2=0 then edotv.Text:='0'
else
{/////////////Переводим
ответ в двоичную систему
begin
if k=0 then begin
val(otvet1,otvet2,code1);
while otvet2>0 do
begin
x5:=otvet2 div 2;
x1:=otvet2 mod 2;
otvet2:=x5;
str(x1:0:0,y);
y1:=y1+y;
{Получаем ответ в двоичной
сс,но записанный справа
{///////Запишем ответ слева направо}
for i:=length(y1)-1 downto 1 do
y:=y+y1[i];
edotv.Text:=y
end;
end;
end;
end;
end;
end;
end;
end;
procedure TForm1.VuxodClick(Sender: TObject);
begin
{Выйти из программы}
Form1.Close;
end;
procedure TForm1.SpravkaClick(Sender: TObject);
begin
{ выведем данные о программе
символы #13#10 задают перевод курсора и
в итоге строка выводится в виде ряда подстрок}
ShowMessage(
'Курсовая
работа'#13#10'Программа "
'Выполнила студентка III курса'#13#10 +
'Алехина Дарья');
end;
procedure TForm1.BtOchClick(Sender: TObject);
begin
RBt1.Checked:=false;
lb10cc.Visible:=false;
edit1.Visible:=false;
btPlus.Enabled:=true;
btMinus.Enabled:=true;
btMod.Enabled:=true;
btDiv.Enabled:=true;
btUmn.Enabled:=true;
btDel.Enabled:=true;
save.Enabled:=false;
form1.Height:=209;
edParametr1.Clear;
edParametr2.Clear;
edOtv.Clear;
end;
procedure TForm1.RBt1Click(Sender: TObject);
begin
edit1.Clear;
Form1.Height:=240;
lb10cc.Visible:=true;
edit1.Visible:=true;
edit1.Text:=otvet1;
end;
{Обработка меню Сохранить}
procedure TForm1.SaveClick(Sender: TObject);
begin
{вызываем стандартный диалог для для записи файла }
if sdMyCalc.Execute then
begin
{связываем
файловую переменную с
AssignFile(fFile, sdMyCalc.FileName);
{пересоздаем файл для записи (старые данные очищаются) }
Rewrite(fFile);
{записываем данные в файл
функция Now возвращает текущую дату и время в числовом формате
функция DateTimeToStr преобразует значение в строку}
writeln(fFile, 'Дата вычисления: ' + DateTimeToStr(Now));
writeln(fFile);
writeln(fFile, 'Операнд 1 : ' + parametr1);
writeln(fFile, 'Операнд 2 : ' + parametr2);
writeln(fFile, 'Вид операции : ' + edit2.text);
writeln(fFile, 'Результат : ' + EdOtv.text);
writeln(fFile, 'Результат в 10сс : ' + otvet1);
//закрываем файл
CloseFile(fFile);
ShowMessage('Сведения
о последней выполненой
'в файл: '#13#10#13#10 + sdMyCalc.FileName);
Информация о работе Разработка приложения «Двоичный калькулятор» средствами Borland Delphi