Программирование с использованием подпрограмм пользователя
Министерство образования и науки Российской Федерации
Федеральное агентство по образованию
Георгиевский технологический институт (филиал)
Государственное образовательное учреждение высшего профессионального образования
«Северо-Кавказский
Государственный Технический Университет»
Факультет Автоматизации и управления
Кафедра
Математических и естественнонаучных
дисциплин
Утверждаю
зав. Кафедрой МиЕНД
«
» 2008 г.
ПОЯСНИТЕЛЬНАЯ
ЗАПИСКА
к курсовому
проекту по дисциплине «Программирование
и основы алгоритмизации»
на тему:
Программирование с использованием
подпрограмм пользователя
Автор
проекта
Шиянова Дарья Игоревна
Специальность
220301(Автоматизация
Группа
АТП-071
Руководитель
проекта Мордасова Елена
Борисовна
Проект защищен
______________________________
Члены комиссии
г.
Георгиевск, 2008 г.
Оглавление
Введение…………………………………………………………
1. Математическая постановка задачи…………………………….……….4
2. Описание алгоритма решения……………………………………..……..5
3.Обоснование выбора языка и средств поддержки
Технического
программирования……………………………………
4.Описание процедур и функций ……………………………….…….…...8
5. Листинг программы…………..…………………………………….
6. Результаты работы программы…..……………………………………20
Заключение……………………………………………………
Список использованной
литературы……………………..………..……..
Введение.
Тема
моей курсовой работы: программирование
с использованием подпрограмм пользователя.
Задача курсового проектирования заключается
в создание программы реализующую работу
обычного кнопочного калькулятора, выполняющего
основные арифметические операции. Данная
программа позволяет вычислять выражения,
содержащие численные значения. Программа
предназначена для упрощения вычислений
арифметических выражений. В современном
мире использование калькулятора облегчает
работу экономистов, инженеров и людей
других профессий. В первую очередь это
экономия времени и точность вычислений.
Калькулятор, созданный в электронном
виде имеет больше преимуществ, чем обычный
кнопочный калькулятор. В первую очередь
это удобство пользования и усовершенствование
выполняемых функций.
1.Математическая постановка задачи
Необходимо создать библиотечный модуль, содержащий процедуры выполнения основных арифметических операций:
n=x+y, n=x-y, n=n*y, n=x/y, n= x div y, n=x mod y.
В программе
нужно осуществлять проверку на неверно
введенные символы и ошибочно нажатые
клавиши. Использованы приемы модульного
программирования. Тип результата операций
«+», «*», «-» является INTEGER. Результатом
операции «/» всегда является тип REAL, а
результат операций DIV и MOD всегда имеет
тип INTEGER. Тип вводимых данных строковый.
2. Описание алгоритма решения
Начала работы с калькулятором происходит с ввода первого операнда. После ввода, проводится проверка корректности введенных данных. Если найдена ошибка, на экран выводится сообщение «ошибка ввода». Если ошибка не была обнаружена, пользователь продолжает работу выбором арифметической операции. Далее вводится второй операнд, который также подвергается проверке. Для получения результата необходимо нажать кнопку «Результат», если требуется продолжение вычислений, выбирается следующая операция.
Алгоритм составленной
программы:
Данная программа позволяет вычислять выражения, содержащие численные значения. Следовательно, в алгоритме нужно осуществлять проверку на неверно введенные символы и ошибочно нажатые кнопки. Так же должна проверяется длина введенной строки, которая не должна превышать 8 символов.
Алгоритм проверки
корректности введенных данных:
Алгоритм работы функций:
3. Обоснование выбора языка и средств поддержки технического программирования.
Для создания программы было предложено две альтернативных среды Delphi и Pascal. Между тем синтаксисы Delphi и Pascal близки, обе программы – продукты Borland. Я предпочла использовать интегрированную среду программирования Delphi, позволяет достаточно быстро разрабатывать приложения для Windows. Так как среда Delphi создает программы полностью совместимые с графической оболочкой ОС MS Windows, то позволяет сделать интерфейс программы интуитивно понятным и простым в реализации. Так же среда позволяет использовать функции, предоставляемые операционной системой
Использована версия среды программирования Borland Delphi 7.0, компьютер Celeron 845 (оп. память 256 Мбайт). Delphi— английское написание названия древнегреческого города Дельфы, используемое как товарный знак некоторых программных продуктов компании Borland Software Corporation.
4.Описание процедур и функций
Процедура отображения ошибки
function TextToInt(str: string) : integer;
var n: integer;
label error, endofproc;
begin
if length(str)>8 then goto error;
for n:=1 to length(str) do
begin
//ShowMessage(str[n]);
if (str[n]<'0') or (str[n]>'9') then goto error;
end;
TextToInt:=StrToInt(str);
goto endofproc;
error:
Процедура сложения чисел
function OpPlus(x : integer; y : integer): integer;
begin
OpPlus:=x+y;
end;
Процедура вычитания чисел
function OpMinus(x : integer; y : integer): integer;
begin
OpMinus:=x-y;
end;
Процедура целочисленного деления
function OpDiv(x : integer; y: integer): integer;
begin
OpDiv:=x div y;
end;
Процедура возвращения остатка от целочисленного деления
function OpMod(x: integer; y : integer): integer;
begin
OpMod:=x mod y;
end;
Процедура умножения чисел
function OpUmnojenie(x : integer; y : integer): integer;
begin
OpUmnojenie:=x*y;
end;
Процедура деления чисел
function OpDelenie(x : integer; y : integer): real;
begin
OpDelenie:=x/y;
end;
5.Листинг программы.
Interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Unit2, ExtCtrls, Buttons;
type
TForm1 = class(TForm)
Pole: TEdit;
ltext: TLabel;
Shape1: TShape;
BitBtn1: TBitBtn;
Shape2: TShape;
Shape3: TShape;
Shape4: TShape;
Shape5: TShape;
Shape6: TShape;
Shape7: TShape;
Shape8: TShape;
Shape9: TShape;
Shape10: TShape;
Shape11: TShape;
Shape12: TShape;
Shape13: TShape;
Shape14: TShape;
Shape15: TShape;
Shape16: TShape;
Shape17: TShape;
Shape18: TShape;
Shape19: TShape;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
Label7: TLabel;
Label8: TLabel;
Label9: TLabel;
Label10: TLabel;
Label11: TLabel;
Label12: TLabel;
Label13: TLabel;
Label14: TLabel;
Label15: TLabel;
Label16: TLabel;
Label17: TLabel;
Label18: TLabel;
procedure FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure Shape1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure BitBtn1Click(Sender: TObject);
procedure Shape13MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure Shape3MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure Shape15MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure Shape8MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure Shape2MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure Shape7MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure Shape17MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure Shape9MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure Shape12MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure Shape16MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure Shape6MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure Shape11MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure Shape19MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure Shape14MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure Shape4MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure Shape10MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure Shape5MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure Shape18MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
xx, yy: integer;
d : integer;
{число описывающее действие
1 - +
2 - -
3 - *
4 - /
5 - div
6 - mod
}
implementation
{$R *.dfm}
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
Pole.CanFocus;
end;
procedure TForm1.Shape1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
ReleaseCapture();
SendMessage(Handle, WM_SYSCOMMAND, $F012, 0);
end;
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
Close();
end;
procedure TForm1.Shape13MouseDown(
Shift: TShiftState; X, Y: Integer);
begin
Pole.Text:=Pole.Text+'1';
end;
procedure TForm1.Shape3MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
Pole.Text:=Pole.Text+'2';
end;
procedure TForm1.Shape15MouseDown(
Shift: TShiftState; X, Y: Integer);
begin
Pole.Text:=Pole.Text+'3';
end;
procedure TForm1.Shape8MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
Pole.Text:=Pole.Text+'4';
end;
procedure TForm1.Shape2MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
Pole.Text:=Pole.Text+'5';
end;
procedure TForm1.Shape7MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
Pole.Text:=Pole.Text+'6';
end;
procedure TForm1.Shape17MouseDown(
Shift: TShiftState; X, Y: Integer);
begin
Pole.Text:=Pole.Text+'7';
end;
procedure TForm1.Shape9MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
Pole.Text:=Pole.Text+'8';
end;
procedure TForm1.Shape12MouseDown(
Shift: TShiftState; X, Y: Integer);
begin
Pole.Text:=Pole.Text+'9';
end;
procedure TForm1.Shape16MouseDown(
Shift: TShiftState; X, Y: Integer);
begin
Pole.Text:=Pole.Text+'0';
end;
procedure TForm1.Shape6MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
d:=1;
xx:=TextToInt(Pole.Text);
ltext.Caption:=Pole.Text+' + ';
Pole.Text:='0';
end;
procedure TForm1.Shape11MouseDown(
Shift: TShiftState; X, Y: Integer);
begin
d:=2;
xx:=TextToInt(Pole.Text);
ltext.Caption:=Pole.Text+' - ';
Pole.Text:='0';
end;
procedure TForm1.Shape19MouseDown(
Shift: TShiftState; X, Y: Integer);
begin
d:=3;
xx:=TextToInt(Pole.Text);
ltext.Caption:=Pole.Text+' * ';
Pole.Text:='0';
end;
procedure TForm1.Shape14MouseDown(
Shift: TShiftState; X, Y: Integer);
begin
d:=4;
xx:=TextToInt(Pole.Text);
ltext.Caption:=Pole.Text+' / ';
Pole.Text:='0';
end;
procedure TForm1.Shape4MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
d:=5;
xx:=TextToInt(Pole.Text);
ltext.Caption:=Pole.Text+' div ';
Pole.Text:='0';
end;
procedure TForm1.Shape10MouseDown(
Shift: TShiftState; X, Y: Integer);
begin
d:=6;
xx:=TextToInt(Pole.Text);
ltext.Caption:=Pole.Text+' mod ';
Pole.Text:='0';
end;
procedure TForm1.Shape5MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
d:=0;
Pole.Text:='0';
end;
procedure TForm1.Shape18MouseDown(
Shift: TShiftState; X, Y: Integer);
begin
yy:=TextToInt(Pole.Text);
case d of
1: Pole.Text:=IntToStr(OpPlus(xx, yy));
2: Pole.Text:=IntToStr(OpMinus(
3: Pole.Text:=IntToStr(
4: Pole.Text:=FloatToStr(
5: Pole.Text:=IntToStr(OpDiv(xx, yy));
6: Pole.Text:=IntToStr(OpMod(xx, yy));
end;
ltext.Caption:='Результат';
end;
end.
unit Unit2;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
function textToInt (str: string): integer;
function OpPlus (x : integer; y : integer): integer;
function OpMinus (x : integer; y : integer): integer;
function OpDiv (x : integer; y : integer): integer;
function OpMod (x : integer; y : integer): integer;
function OpUmnojenie (x : integer; y : integer): integer;
function OpDelenie (x : integer; y : integer): real;
implementation
function TextToInt(str: string) : integer;
var n: integer;
label error, endofproc;
begin
if length(str)>8 then goto error;
for n:=1 to length(str) do
begin
//ShowMessage(str[n]);
if (str[n]<'0') or (str[n]>'9') then goto error;
end;
TextToInt:=StrToInt(str);
goto endofproc;
error:
ShowMessage('Ошибка ввода');
endofproc:
end;
function OpPlus(x : integer; y : integer): integer;
begin
OpPlus:=x+y;
end;
function OpMinus(x : integer; y : integer): integer;
begin
OpMinus:=x-y;
end;
function OpDiv(x : integer; y : integer): integer;
begin
OpDiv:=x div y;
end;
function OpMod(x : integer; y : integer): integer;
begin
OpMod:=x mod y;
end;
function OpUmnojenie(x : integer; y : integer): integer;
begin
OpUmnojenie:=x*y;
end;
function OpDelenie(x : integer; y : integer): real;
begin
OpDelenie:=x/y;
end;
end.
6. Результаты работы программы
Программа начинается с запуска ярлыка на рабочем столе. Происходит формирование изображения созданного калькулятора, которое можно перемещать по экрану. Внешне калькулятор состоит из кнопок с цифрами(1), с боку располагаются кнопки с операциями: сложения, вычитания, деления, умножения, операция целочисленного деления и возвращение остатка от деления.(2),в низу кнопка с функцией вывода результата(3) и удаление введенной цифры(4). Имеется окно вывода и ввода результатов(5).Выход из программы осуществляется с помощью кнопки с изображение «крестика»(6)
5
6
1
3 4
1)Пользователь вводит число (число может быть введено как с клавиатуры, так и самого калькулятора):
2)Выбирает алгебраическую операцию (в данном случаи «+»), вводит второе число:
3)После нажатия клавиши «результат» выводится ответ:
1)
Заключение:
В результате работы была создана программа калькулятор, созданная в среде программирования Delphi, которая осуществляет функции: сложения, вычитания, умножения, деления двух и более операндов. При необходимости программа может быть дополнена функциями инженерного калькулятора. Например, такими как: преобразование чисел из одной системы счисления в другую, вычисление тригонометрических, показательных, логарифмических функций и вычисление квадратного корня.
В создания данной программы, мне понравилось
работать в среде программирования Delphi,
поскольку она имеет удобный интерфейс
и достаточно не сложное написание программного
кода, а также более наглядно представляет
программу визуально.
Список использованной литературы.
- Культин Н.Б. Delphi 6. Программирование на Object Pascal.– СПб.: БХВ-Петербург, 2002. – 528 с.
- Иванова Г.С. Основы программирования: Учебник для вузов. – 2-е изд., перераб. и доп. – М.: Изд-во МГТУ им. Н.Э. Баумана, 2002. – 416 с.
- Давыдов В.Г. Программирование и основы алгоритмизации: Учебное пособие. – М.: Высш. школа, 2003. – 447 с.: ил.
4.Фаронов В.В. Delphi 6: Учебный курс. – М.: Издатель Молгачева С.В., 2001. – 672 с