Скачать .docx  

Курсовая работа: Программа Калькулятор

Пояснительная записка

к курсовой работе

по дисциплине программирование на языке высокого уровня

Калькулятор

2002 г.


Содержание

Введение

1.Метод решения

2. Описание программы

3. Руководство пользователя

Работа с памятью:

Горячие клавиши:

Использование меню

Измерение углов в градусах и радианах

4. Результаты моделирования


Введение

Программы, работающие на компьютере, можно разделить на три категории:

1. Прикладные программы, непосредственно обеспечивающие выполнение необходимых пользователям работ: редактирование текстов, рисование, обработку информационных массивов и т.д.

2. Системные программы, выполняющие различные вспомогательные функции, например диагностика компьютера или резервное копирование информации.

3. Инструментальные системы (системы программирования), обеспечивающие создание новых программ.

Данные категории программ в свою очередь так – же разделяются на несколько разделов. Например, прикладные программы можно разделить по уровню сложности обработки информации и результатов. Для математических вычислений существует множество различных програмных продуктов. Это известные всем пакеты MathCad, MathLab, Mathematika, Axum. Есть и более порстые: всевозможные программы – калькуляторы (имитирующие работу обычного калькулятора). В среде Windows есть такая программа (Calc.exe), по аналогии с ней было сделано данное задание.

Задание

Написать программу «Калькулятор». Использовать одно поле для ввода операторов и для вывода результата. Предусмотреть возможность выбора типа калькулятора: обычный или инженерный. С помощью инженерного можно вычислять: тригонометрические функции (для углов в градусах и радианах), возведение в степень, факториал, логарифм, экспоненту, целочисленное деление и т.п.


1. Метод решения

В программе «Калькулятор» использовано одно поле для ввода операторов и для вывода результата. В поле вывода данных числа отображаются с точностью 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).

2. Описание программы

Программа Calcforwin(calc4win.exe) разработана в среде Delphi версии 6.

Для хранения данных в программе используются глобальные переменные типа string, char, real, integer.

Вывод рисунка из файла на диске в форму осуществляется с помощью процедуры LoadFromFile(Name).

Вывод текстовой информации из файла помощи Help.txt производится процедурой Form2.Memo1.lines.Add(s).

Предусмотрен вывод сообщений с помощью функции MessageDlg при делении на нуль, извлечении корня из отрицательного числа, а также вычислению логарифма отрицательного числа и выхода значений числовой переменной за пределы определенных числовых типов.

3. Руководство пользователя

Данная программа предназначена для выполнения математических вычислений, имитируя действия калькулятора. Для работы с ней нужно запустить файл 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.


4. Результаты моделирования

Блок–схема алгоритма к кнопке =


Список идентификаторов, использованных в блок-схеме с кратким описанием:

-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.