Пояснительная записка
к курсовой работе
по дисциплине программирование на языке высокого уровня
Калькулятор
2002 г.
Содержание
Введение
1.Метод решения
2. Описание программы
3. Руководство пользователя
Работа с памятью:
Горячие клавиши:
Использование меню
Измерение углов в градусах и радианах
4. Результаты моделирования
Программы, работающие на компьютере, можно разделить на три категории:
1. Прикладные программы, непосредственно обеспечивающие выполнение необходимых пользователям работ: редактирование текстов, рисование, обработку информационных массивов и т.д.
2. Системные программы, выполняющие различные вспомогательные функции, например диагностика компьютера или резервное копирование информации.
3. Инструментальные системы (системы программирования), обеспечивающие создание новых программ.
Данные категории программ в свою очередь так – же разделяются на несколько разделов. Например, прикладные программы можно разделить по уровню сложности обработки информации и результатов. Для математических вычислений существует множество различных програмных продуктов. Это известные всем пакеты MathCad, MathLab, Mathematika, Axum. Есть и более порстые: всевозможные программы – калькуляторы (имитирующие работу обычного калькулятора). В среде Windows есть такая программа (Calc.exe), по аналогии с ней было сделано данное задание.
Задание
Написать программу «Калькулятор». Использовать одно поле для ввода операторов и для вывода результата. Предусмотреть возможность выбора типа калькулятора: обычный или инженерный. С помощью инженерного можно вычислять: тригонометрические функции (для углов в градусах и радианах), возведение в степень, факториал, логарифм, экспоненту, целочисленное деление и т.п.
В программе «Калькулятор» использовано одно поле для ввода операторов и для вывода результата. В поле вывода данных числа отображаются с точностью 6 знаков после запятой. Проект имеет 6 модулей, каждый из которых содержит свою форму. Главный модуль проекта называется CALC, связанный с первой формой Form1. На данной форме находится меню управления (для выбора действий программы), строка состояния (вывод подсказки), фоновый рисунок (обращение к файлу Fon.jpg).
Формы модулей Unitcalc3 и Unitcalc5 содержат одно поле для ввода и вывода результата. Unitcalc3 – обычный калькулятор, Unitcalc5 – инженерный (расширенный набор действий).
Для представления справочной информации в программе использован модуль Unitcalc2, с обращением компонента Memo к файлу помощи Help.txt.
Модуль Unitcalc4 с формой Form4 имеет заголовок «About». Данный модуль обращается к файлу – рисунку Im.bmp и выводит на экран информацию об авторе.
Модуль Unit6 - выводит на экран мигающую заставку (использован компоненты Timer и Image). Окно заставки содержит кнопку для ее закрытия.
Примечание: файлы Help.txt, Fon.jpg, Im.bmp и Skull1.jpgдолжны находится в том же каталоге, что и основной файл программы.
Предусмотрена возможность выбора типа калькулятора: обычный или инженерный. С помощью обычного режима можно вычислять только четыре элементарные функции: сложение (x + y), вычитание (x - y), умножение (x * y) и деление (x / y). С помощью инженерного можно вычислять: тригонометрические функции для углов в градусах и радианах (блок-схема алгоритма приведена в Приложении 2), возведение в квадрат (y2
), куб (y3
) степень (), факториал (y!=1*2*3*…*y), натуральный логарифм (ln(y)), деление (1/y) и т.п. (блок-схема алгоритма вычисления результатов по нажатию кнопки = приведена в Приложении 1). В тригонометрических вычислениях функция тангенс угла вычисляется с помощью отношения синуса к косинусу (sin/cos).
Программа Calcforwin(calc4win.exe) разработана в среде Delphi версии 6.
Для хранения данных в программе используются глобальные переменные типа string, char, real, integer.
Вывод рисунка из файла на диске в форму осуществляется с помощью процедуры LoadFromFile(Name).
Вывод текстовой информации из файла помощи Help.txt производится процедурой Form2.Memo1.lines.Add(s).
Предусмотрен вывод сообщений с помощью функции MessageDlg при делении на нуль, извлечении корня из отрицательного числа, а также вычислению логарифма отрицательного числа и выхода значений числовой переменной за пределы определенных числовых типов.
Данная программа предназначена для выполнения математических вычислений, имитируя действия калькулятора. Для работы с ней нужно запустить файл Calc4win.exe. В каталоге, содержащем файл Calc4win.exe, есть графический файл использующийся для оформления информационной формы. Аппаратные требования: мышь/клавиатура. Системные требования: 486 или совместимый процессор, 16 MbRAM, ОС Windows9x. Для работы программы требуется 707 kb дискового пространства.
Для начала работы нужно запустить исполнимый файл Calс4win.exe.
Программа Calcforwin имеет два режима работы: Обычный и Инженерный, которые можно выбрать в меню Вид.
В Обычном режиме калькулятор вычисляет только четыре элементарные функции (сложение, вычитание, умножение и деление).
В Инженерном выполняются такие функции как возведение в степень, факториал, логарифм, тригонометрические вычисления, округление результата до целого, работа с памятью и т.п. Предусмотрен вы
бор угла: градусы или радианы.
Инструкция по эксплуатации программы:
1. Выполнение простых вычислений:
· В меню Вид выберите Обычный или нажмите клавишу F2;
· Введите первое число;
· Нажмите кнопку + (сложение), - (вычитание), * (умножение) или / (деление);
· Введите следующее число;
· Введите необходимый оператор;
· Введите остальные числа и операторы;
· Нажмите кнопку =.
2. Выполнение инженерных вычислений:
· В меню Вид выберите Инженерный или нажмите клавишу F3;
· Выберите систему счисления;
· Введите первое число;
· Выберите нужный оператор;
· Введите следующее число;
· Введите остальные операторы и числа;
· Нажмите кнопку =.
·Чтобы занести число в память, нажмите кнопку M write;
·После сохранения числа над кнопками памяти на панели калькулятора появится индикатор M. Каждое новое число, занесенное в память, заменяет предыдущее;
·Чтобы вызвать число из памяти, нажмите кнопку M read;
·Чтобы очистить память, нажмите кнопку M clear;
·Чтобы сложить
или вычесть
отображаемое число с числом, хранящимся в памяти, нажмите кнопку M +
или M
-
. Чтобы вызвать результат, нажмите кнопку M read;
F1 – Вызов справки;
F10 – Выход из программы;
F2 – Обычный режим работы;
F3 – Инженерный режим;
Для более быстрого и удобного использования Калькулятора создано меню, содержащее все основные функции программы.
1. Вид:
– Обычный F2 (определяет Обычный режим работы Калькулятора);
– Инженерный F3 (определяет Инженерный режим работы Калькулятора);
2. Справка:
– Помощь F1 (открывает окно справки для облегченной и правильной работы пользователя с программой);
– About (выводит на экран информацию об авторе);
3. Выход:
– Выход F 10 (служит для правильного выхода их программы).
Режим калькулятора Инженерный дает возможность изменять меру измерения углов. Для этого необходимо только указать в чем должен измеряться аргумент тригонометрической функции. По умолчанию это градусы DEG.
Блок–схема алгоритма к кнопке =
Список идентификаторов, использованных в блок-схеме с кратким описанием:
-X, Y, Z – идентификаторы типа real. Переменные используются как в
-Обычном режиме, так и в Инженерном.
Блок–схема алгоритма вычисления факториала
Список идентификаторов, использованных в блок-схеме с кратким описанием:
-Y, Z, Fact - идентификаторы типа real.
-K – идентификатор типа Integer.
ТексткFORM 5
unit Unitcalc5;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;
type
TForm5 = class(TForm)
Edit1: TEdit;
Edit2: TEdit;
Button1: TButton;
Button2: TButton;
.
.
Button39: TButton;
Label1: TLabel;
Label2: TLabel;
Bevel1: TBevel;
Bevel2: TBevel;
Bevel3: TBevel;
Bevel4: TBevel;
Bevel5: TBevel;
Bevel6: TBevel;
Bevel7: TBevel;
Bevel8: TBevel;
RadioGroup1: TRadioGroup;
RadioButton1: TRadioButton;
RadioButton2: TRadioButton;
procedure Button1Click(Sender: TObject);
.
.
procedure Button39Click(Sender: TObject);
procedure RadioButton1Click(Sender: TObject);
procedure RadioButton2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form5: TForm5;
s,s1,c:string;t,i,j:integer;
x,y,z,m,f:real;cf:char;
implementation
{$R *.dfm}
procedure operat(x,y:real;c:string;var z:real);
begin
if c='+' then z:=x+y;
if c='-' then z:=x-y;
if c='*' then z:=x*y;
if c='x^y' then z:=exp(y*ln(x));
if (c='/') then
if (y<>0) then z:=x/y else
messagedlg('На 0 делить нельзя',mterror,[mbok],0);
if c='' then z:=y;
end;
procedure okr(var c:string);
var i,j:integer;x:real;
begin
i:=length(c); j:=i;
while copy(c,j,1)='0' do
begin
delete(c,j,1);
j:=j-1;
end;
val(c,x,i);
if (x>1E+16) or (x<-1E+16) then
begin
s:=' 0';
messagedlg('Слишком большое чиссло',mtcustom,[mbok],0);
end;
end;
procedure o(p:string; var c,c1:string);
begin
if length(c)<16 then
begin
c:=c+p;c1:=c;
end;
end;
procedure TForm5.Button10Click(Sender: TObject);
begin
o('0',s,s1);
edit1.text:=(' '+s)
end;
procedure TForm5.Button1Click(Sender: TObject);
begin
o('1',s,s1);
edit1.text:=(' '+s)
end;
.
.
.
procedure TForm5.Button9Click(Sender: TObject);
begin
o('9',s,s1);
edit1.text:=(' '+s)
end;
procedure TForm5.Button20Click(Sender: TObject);
begin
if copy(s,1,1)='-'
then delete(s,1,1)
else s:='-'+s ;
s1:=s;
edit1.text:=(' '+s)
end;
procedure TForm5.Button16Click(Sender: TObject);
begin
val(s1,y,i);
operat(x,y,c,z);
x:=z; c:='+';
str(z:6:6,s); okr(s);
edit1.text:=(' '+s);
s:='' ;t:=0;
end;
procedure TForm5.Button21Click(Sender: TObject);
begin
val(s1,y,i);
operat(x,y,c,z);
x:=z; c:='-';
str(z:6:6,s);okr(s);
edit1.text:=(' '+s);
s:='' ;t:=0;
end;
procedure TForm5.Button15Click(Sender: TObject);
begin
val(s1,y,i);
operat(x,y,c,z);
x:=z; c:='*';
str(z:6:6,s);okr(s);
edit1.text:=(' '+s);
s:='';t:=0;
end;
procedure TForm5.Button14Click(Sender: TObject);
begin
val(s1,y,i);
operat(x,y,c,z);
x:=z; c:='/';
str(z:6:6,s); okr(s);
edit1.text:=(' '+s);
s:='';t:=0;
end;
procedure TForm5.Button26Click(Sender: TObject);
begin
val(s1,y,i);
z:=y*y;
str(z:6:6,s);okr(s);s1:=s;
edit1.text:=(' '+s);
s:='';t:=0;
end;
procedure TForm5.Button27Click(Sender: TObject);
begin
val(s1,y,i);
z:=y*y*y;
str(z:6:6,s);okr(s);s1:=s;
edit1.text:=(' '+s);
s:='';t:=0;
end;
procedure TForm5.Button12Click(Sender: TObject);
begin
c:='';
t:=0;
s:='';
s1:=s;
y:=0;
edit1.text:=(' 0');
end;
procedure TForm5.Button30Click(Sender: TObject);
begin
val(s1,y,i);
z:=round(y);
str(z:6:6,s);okr(s);s1:=s;
edit1.text:=(' '+s);
s:='';t:=0;
end;
procedure TForm5.Button13Click(Sender: TObject);
begin
val(s1,y,i);
operat(x,y,c,z);
x:=z;
c:='';
str(z:6:6,s);
okr(s);
s1:=s;
edit1.text:=(' '+s);
s:='';t:=0;
end;
procedure TForm5.Button19Click(Sender: TObject);
begin
val(s1,y,i);
if y<>0 then
begin
z:=1/y;
str(z:6:6,s);okr(s);s1:=s;
edit1.text:=(' '+s);
end else
begin
messagedlg('На 0 делитьнельзя',mterror,[mbok],0);
{ edit1.text:=('E ') ;}
end;
s:='';t:=0;
end;
procedure TForm5.Button37Click(Sender: TObject);
begin
t:=0;
s:='';
s1:=s;
edit1.text:=(' 0');
end;
procedure TForm5.Button18Click(Sender: TObject);
begin
val(s1,y,i);
begin
if radiobutton1.Checked then
f:=y*3.14159265359/180
else f:=y; end;
z:=cos(f);
str(z:6:6,s);okr(s);s1:=s;
edit1.text:=(' '+s);
s:='';t:=0;
end;
procedure TForm5.Button22Click(Sender: TObject);
begin
val(s1,y,i);
begin
if radiobutton1.Checked then
f:=y*3.14159265359/180
else f:=y; end;
z:=sin(f);
str(z:6:6,s);okr(s);s1:=s;
edit1.text:=(' '+s);
s:='';t:=0;
end;
procedure TForm5.Button23Click(Sender: TObject);
begin
val(s1,y,i);
if y<>0
then begin
if radiobutton1.Checked
then
f:=y*3.14159265359/180
else f:=y;
z:=sin(f)/cos(f);
str(z:6:6,s);okr(s);s1:=s;
edit1.text:=(' '+s);
end else
begin
messagedlg('На 0 делитьнельзя',mterror,[mbok],0);
end;
s:='';t:=0;
end;
procedure TForm5.Button24Click(Sender: TObject);
begin
val(s1,y,i);
if y<>0
then begin
if radiobutton1.Checked
then
f:=y*3.14159265359/180
else f:=y;
z:=cos(f)/sin(f);
str(z:6:6,s);okr(s);s1:=s;
edit1.text:=(' '+s);
end else
begin
messagedlg('На 0 делитьнельзя',mterror,[mbok],0);
end;
s:='';t:=0;
end;
procedure TForm5.Button25Click(Sender: TObject);
begin
val(s1,y,i);
if y>=0 then begin
z:=sqrt(y);
str(z:6:6,s);okr(s);s1:=s;
edit1.text:=(' '+s);
end else begin
messagedlg('Кореньизотрицательногочислаизвлечьнельзя',mterror,[mbok],0);
end;
s:='';t:=0;
end;
procedure TForm5.Button28Click(Sender: TObject);
begin
val(s1,y,i);
operat(x,y,c,z);
x:=z;
c:='x^y';
str(z:6:6,s);okr(s);
edit1.text:=(' '+s);
s:='';t:=0;
end;
procedure TForm5.Button32Click(Sender: TObject);
begin
z:=3.14159265359;
str(z:6:6,s);okr(s);s1:=s;
edit1.text:=(' '+s);
s:='';t:=0;
end;
procedure TForm5.Button29Click(Sender: TObject);
begin
val(s1,y,i);
if y>=1 then begin
z:=ln(y);
str(z:6:6,s);okr(s);s1:=s;
edit1.text:=(' '+s);
end else
begin
messagedlg('LN X<=0 неопределён',mterror,[mbok],0);
end;
s:='';t:=0;
end;
procedure TForm5.Button31Click(Sender: TObject);
var k:integer; fact:real;
begin
val(s1,y,i);
fact:=1;
k:=1;
if (y>1) and (y<=18) then
begin
y:=round(y);
repeat
k:=k+1;
fact:=fact*k;
until k=y;
end
else
begin
s:=' 0';
messagedlg('Слишком большое чиссло',mtcustom,[mbok],0);
end;
z:=round(fact);
str(z:6:6,s);okr(s);s1:=s;
edit1.text:=(' '+s);
s:='';t:=0;
end;
procedure TForm5.Button38Click(Sender: TObject);
begin
val(s1,y,i); m:=m+y;
s:='';t:=0;
if m<>0 then edit2.text:=('M ')
else edit2.text:=(' ');
end;
procedure TForm5.Button39Click(Sender: TObject);
begin
val(s1,y,i); m:=m-y;
s:='';t:=0;
if m<>0 then edit2.text:=('M ')
else edit2.text:=(' ');
end;
procedure TForm5.Button34Click(Sender: TObject);
begin
val(s1,y,i); m:=y;
s:='';t:=0;
if m<>0 then edit2.text:=('M ')
else edit2.text:=(' ');
end;
procedure TForm5.Button35Click(Sender: TObject);
begin
str(m:6:6,s);okr(s);s1:=s;
edit1.text:=(' '+s);
s:='';t:=0;
end;
procedure TForm5.Button36Click(Sender: TObject);
begin
m:=0;
if m<>0 then edit2.text:=('M ')
else edit2.text:=(' ');
end;
procedure TForm5.Button11Click(Sender: TObject);
begin
if t=0 then
begin
s:=s+'.'; s1:=s;
edit1.text:=(' '+s);
t:=1
end;
end;
procedure TForm5.RadioButton1Click(Sender: TObject);
begin
radiobutton1.checked:=true;
radiobutton2.checked:=false;
end;
procedure TForm5.RadioButton2Click(Sender: TObject);
begin
radiobutton2.checked:=true;
radiobutton1.checked:=false;
end;
procedure TForm5.Button17Click(Sender: TObject);
begin
val(s1,y,i);
z:=random;
str(z:6:6,s);okr(s);s1:=s;
edit1.text:=(' '+s);
s:='';t:=0;
end;
end.
|