Программирование с использованием подпрограмм пользователя

Министерство  образования и науки Российской Федерации

Федеральное агентство по образованию

Георгиевский  технологический институт (филиал)

Государственное образовательное учреждение высшего  профессионального образования

«Северо-Кавказский Государственный Технический Университет» 

Факультет Автоматизации и управления

Кафедра Математических и естественнонаучных дисциплин 

                Утверждаю

                зав. Кафедрой МиЕНД

                «      »   2008 г. 
                 
                 

ПОЯСНИТЕЛЬНАЯ ЗАПИСКА 

к курсовому  проекту по дисциплине «Программирование  и основы алгоритмизации» 

на тему: Программирование с использованием подпрограмм пользователя 

Автор проекта                  Шиянова Дарья Игоревна 

Специальность    220301(Автоматизация технологических  процессов и производств) 

Группа   АТП-071 

Руководитель  проекта     Мордасова Елена Борисовна 

Проект  защищен 

_______________________________ Оценка ________________________ 

Члены комиссии  
 
 
 
 
 

      г. Георгиевск, 2008 г. 
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       

Оглавление 

Введение…………………………………………………………….………..4

1. Математическая постановка задачи…………………………….……….4

2. Описание алгоритма решения……………………………………..……..5

3.Обоснование выбора языка и средств поддержки

Технического  программирования………………………………………….8

4.Описание процедур и функций ……………………………….…….…...8

5. Листинг программы…………..…………………………………….…..10

6. Результаты работы программы…..……………………………………20

Заключение………………………………………………………..…..……21

Список использованной литературы……………………..………..……..22  
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Введение. 

     Тема  моей курсовой работы: программирование с использованием подпрограмм пользователя. Задача курсового проектирования заключается в создание программы реализующую работу обычного кнопочного калькулятора, выполняющего основные арифметические операции. Данная программа позволяет вычислять выражения, содержащие численные значения. Программа предназначена для упрощения вычислений арифметических выражений. В современном мире использование калькулятора облегчает работу экономистов, инженеров и  людей других профессий. В первую очередь это экономия времени  и точность вычислений. Калькулятор, созданный в электронном виде имеет больше преимуществ, чем обычный кнопочный калькулятор. В первую очередь это удобство пользования и усовершенствование выполняемых функций.  
 
 

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(Sender: TObject; Button: TMouseButton;

  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(Sender: TObject; Button: TMouseButton;

  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(Sender: TObject; Button: TMouseButton;

  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(Sender: TObject; Button: TMouseButton;

  Shift: TShiftState; X, Y: Integer);

begin

Pole.Text:=Pole.Text+'9';

end;

procedure TForm1.Shape16MouseDown(Sender: TObject; Button: TMouseButton;

  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(Sender: TObject; Button: TMouseButton;

  Shift: TShiftState; X, Y: Integer);

begin

d:=2;

xx:=TextToInt(Pole.Text);

ltext.Caption:=Pole.Text+' - ';

Pole.Text:='0';

end;

procedure TForm1.Shape19MouseDown(Sender: TObject; Button: TMouseButton;

  Shift: TShiftState; X, Y: Integer);

begin

d:=3;

xx:=TextToInt(Pole.Text);

ltext.Caption:=Pole.Text+' * ';

Pole.Text:='0';

end;

procedure TForm1.Shape14MouseDown(Sender: TObject; Button: TMouseButton;

  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(Sender: TObject; Button: TMouseButton;

  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(Sender: TObject; Button: TMouseButton;

  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(xx, yy));

  3: Pole.Text:=IntToStr(OpUmnojenie(xx, yy));

  4: Pole.Text:=FloatToStr(OpDelenie(xx, yy));

  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                                                                                                                            2                                                                                                                

  3                    4

                                          
 
 
 

   
 

1)Пользователь вводит число (число может быть введено как с клавиатуры, так и самого калькулятора):

2)Выбирает  алгебраическую операцию (в данном случаи «+»), вводит второе число:

3)После нажатия клавиши «результат» выводится ответ:

 

1)                                          2)                                          3) 
 
 
 
 
 
 
 
 
 

Заключение:

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

       В создания данной программы, мне понравилось работать в среде программирования Delphi, поскольку она имеет удобный интерфейс и достаточно не сложное написание программного кода, а также более наглядно представляет программу визуально. 

    

Список  использованной литературы.

  1. Культин Н.Б. Delphi 6. Программирование на Object Pascal.– СПб.: БХВ-Петербург, 2002. – 528 с.
  2. Иванова Г.С. Основы программирования: Учебник для вузов. – 2-е изд., перераб. и доп. – М.: Изд-во МГТУ им. Н.Э. Баумана, 2002. – 416 с.
  3. Давыдов В.Г. Программирование и основы алгоритмизации: Учебное пособие. – М.: Высш. школа, 2003. – 447 с.: ил.

        4.Фаронов В.В. Delphi 6: Учебный курс. – М.: Издатель Молгачева С.В., 2001. – 672 с

Программирование с использованием подпрограмм пользователя