Курсовая работа: Программа Калькулятор
Название: Программа Калькулятор Раздел: Рефераты по информатике Тип: курсовая работа | |
Пояснительная запискак курсовой работепо дисциплине программирование на языке высокого уровня Калькулятор 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. |