Решение вычислительных задач в объективно-ориентированной среде визуального программирования

Описание:
Доступные действия
Введите защитный код для скачивания файла и нажмите "Скачать файл"
Защитный код
Введите защитный код

Нажмите на изображение для генерации защитного кода

Текст:

Министерство сельского хозяйства Российской Федерации

КРАСНОЯРСКИЙ ГОСУДАРСТВЕННЫЙ АГРАРНЫЙ УНИВЕРСИТЕТ

Институт менеджмента и информатики

Кафедра «Информационных систем

и технологий в экономике»

Курсовая работа

по дисциплине Объектно-ориентированный анализ и программирование на тему

«Решение вычислительных задач в объективно-ориентированной среде визуального программирования Delphi»

Выполнил(а) студент(ка) направления 080500.62 – «Бизнес-информатика»,

 2 курса, группы                ,

 


Руководитель                                                        

 


Представлена на проверку                         «____» ____________20__г.

Проверена                                                    «____» ____________20__г.

Примечание _______________________________________________

Оценка ___________________________________________________

Красноярск 20__

Содержание

Введение. 3

Описание задания. 4

Решение задачи 1. 5

Решение задачи 2. 8

Решение задачи 3. 11

Решение задачи 4. 15

Решение задачи 5. 18

Заключение. 23

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

Приложение 1. 25

 


Введение

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

Наибольшее распространение находят языки программирования, имеющие высокий уровень формализации и позволяющие создавать хорошо структурированные программы, предназначенные для решения достаточно обширного класса задач из самых разнообразных сфер деятельности. К таким языкам относятся Паскаль, Си, Модула, Ада и т. д.

Одним из простых для первоначального изучения, но в то же время достаточно универсальным языком программирования является Паскаль, лежащий в основе широко распространенных сред программирования, таких как Borland Pascal, Delphi, Free Pascal Compiler, Lazarus и т.п.

Главным требованием к алгоритму, несомненно, является его работоспособность. Однако создавая алгоритм, необходимо помнить о дальнейшей работе над ним, об отладке программы, которая будет создана по этому алгоритму, а также о вероятных пользователях, которым, возможно, потребуется этот алгоритм. Поэтому одним из важнейших требований к алгоритму является его простота и понятность.

Исходя из этих требований, особенно удобным представляется при разработке алгоритмов использование основных алгоритмических структур. Их важной особенностью является то, что они имеют один вход и один выход и могут соединяться друг с другом в любой последовательности. Это дает наглядную и простую структуру алгоритма, по которой легче составить программу.

Развитие идей структурного и событийного программирования существенно подняло производительность труда программистов и позволило в разумные сроки создавать приложения объемом в сотни тысяч строк. Однако такой объем уже приблизился к пределу возможностей человека, и потребовались новые технологии разработки программ.

Объекты могут иметь идентичную структуру и отличаться только значениями свойств. В таких случаях в программе создается новый тип, основанный на единой структуре объекта. Он называется классом, а каждый конкретный объект, имеющий структуру этого класса, называется экземпляром класса.

Описание нового класса похоже на описание новой структуры данных, только к полям добавляются методы — подпрограммы.

При определении подпрограмм, принадлежащих конкретному классу, его методов, в заголовке подпрограммы перед ее названием явно указывается, к какому классу она принадлежит.

Объектно-ориентированное программирование базируется на трех ключевых концепциях — инкапсуляции, наследовании и полиморфизме.

Описание задания

Разработка программы для решения 5-ти задач в интегрированной среде объективно-ориентированного программирования визуальной программы Delphi.

В рамках данного задания необходимо обеспечить решение следующих задач:

Задача 1: Найти y в данном выражении:  y =  (sin x)+ e- ln(x+1).

Задача 2:  Вычислить выражение y =  +

Задача 3: Вычислить сумму  S = c погрешностью E > 0

Задача 4: Дан одномерный массив [Ai]. Сформировать одномерный [Bi] массив из элементов массива [Ai] по закону B= Ai+j,  i = ; N = M – i.

Задача 5: Получить квадратную матрицу [Aij],  i,j=, элементами побочной  диагонали которой будут числа, получающиеся в результате перемножения i*(i+1), где i – номер строки.

Программа состоит из 1-ой формы с 5-тью вкладками из 5-ти задач.


Решение задачи 1

Для решения задачи нужны элементы ввода, вывода и элемент запуска счёта чисел. Для ввода и вывода чисел будет использоваться объект Edit. Для запуска вычисления чисел будет использоваться объект Button.

Внешний вид вкладки приведён на рисунке 1.

Рис. 1 (Внешний вид вкладки для решения первой задачи)

Процедура, вызываемая при нажатии на кнопку расчета чисел, приведена ниже:

procedure TForm1.ButtonRez1Click(Sender: TObject);

begin

   if EditX1.Text="  "

    then ShowMessage ("Укажите X")

    else

     if (StrToFloat(EditX1.Text))>1

      then ShowMessage ("Sin(X)>1")

      else

       if (StrToFloat(EditX1.Text))<-1

        then ShowMessage ("Sin(X)<-1")

        else

          EditRez1.Text:=FloatToStr((Sqr(Sin(StrToFloat(EditX1.Text)))+

          Exp(Exp(5*Ln(Abs(Sqr(StrToFloat(EditX1.Text))+1))))-

          Ln(Sqr(StrToFloat(EditX1.Text))+1)))

end;

На рисунках со 2-ой по 5-ую приведены иллюстрации работы процедуры:

Рис. 2 (Результат вычисления при корректных данных)

Рис. 3 (Результат вычисления при некорректных данных)

Рис. 4 (Результат вычисления при некорректных данных)

Рис. 5 (Результат вычисления при некорректных данных)


Решение задачи 2

Для решения задачи нужны элементы ввода, вывода и элемент запуска счёта чисел. Для ввода и вывода чисел будет использоваться объект Edit. Для запуска вычисления чисел будет использоваться объект Button.

Внешний вид вкладки приведён на рисунке 6.

Рис. 6 (Внешний вид вкладки для решения второй задачи)

Процедура, вызываемая при нажатии на кнопку расчета чисел, приведена ниже:

procedure TForm1.ButtonRez2Click(Sender: TObject);

begin

  if EditX2.Text="  "

   then ShowMessage ("Укажите X")

   else

     if (StrToFloat(EditX2.Text))<-1

      then ShowMessage ("Sin(X) и Cos(X)<-1")

      else

        if (StrToFloat(EditX2.Text))<4

         then ShowMessage ("Логарифмическая ошибка")

         else

           EditRez2.Text:=FloatToStr(((Sqr(Sin(StrToFloat(EditX2.Text))))/

           (Sqr(Cos(StrToFloat(EditX2.Text))))+5)+Exp((1/3)*

           Ln(((Ln(StrToFloat(EditX2.Text)-2))))/

           ((Sqr(Sin(StrToFloat(EditX2.Text))))

           +Sqr(StrToFloat(EditX2.Text))+1)))

end;

На рисунках с 7-ой по 10-ую приведены иллюстрации работы процедуры:

Рис. 7 (Результат вычисления при корректных данных)

Рис.8 (Результат вычисления при некорректных данных)

Рис. 9 (Результат вычисления при некорректных данных)

Рис. 10 (Результат вычисления при некорректных данных)


Решение задачи 3

Для решения задачи нужны элементы ввода, вывода и элемент запуска счёта чисел. Для ввода и вывода чисел будет использоваться объект Edit. Для запуска вычисления чисел будет использоваться объект Button.

Внешний вид вкладки приведён на рисунке 11.

Рис. 11 (Внешний вид вкладки для решения третьей задачи)

Процедура, вызываемая при нажатии на кнопку расчета чисел, приведена ниже:

procedure TForm1.ButtonRez3Click(Sender: TObject);

var D,S:Real;

    i:Integer;

begin

  if EditEps.Text="  "

   then ShowMessage ("Укажите Eps")

   else

    if EditX3.Text="  "

     then ShowMessage ("Укажите X")

     else

      if EditN.Text="  "

       then ShowMessage ("Укажите N")

       else

       begin

        for i:=0 to StrToInt(EditN.Text)-1 do

          begin

            D:=(Exp((Exp(i*Ln(2)))*Ln(StrToFloat(EditX3.Text))));

            while (D)

            begin

              S:=(S)+(D);

              D:=(Exp((Exp(i*Ln(2)))*Ln(StrToFloat(EditX3.Text))));

            end;

          end;

       end;

       EditRez3.Text:=FloatToStr(s)

end;

На рисунках с 12-ой по 15-ую приведены иллюстрации работы процедуры:

Рис. 12 (Результат вычисления при корректных данных)

Рис. 13 (Результат вычисления при некорректных данных)

Рис. 14 (Результат вычисления при некорректных данных)

Рис. 15 (Результат вычисления при некорректных данных)


Решение задачи 4

Для решения задачи нужны элементы ввода, вывода и элемент запуска обработки массива. Для ввода и вывода чисел будет использоваться объект Memo. Для запуска обработки массива будет использоваться объект Button.

Внешний вид вкладки приведён на рисунке 16.

Рис. 16 (Внешний вид вкладки для решения четвертой задачи)

Процедура, вызываемая при нажатии на кнопку обработки массива, приведена ниже:

procedure TForm1.ButtonRez4Click(Sender: TObject);

var i,j:Integer;

begin

  if Memo1.Lines.Count=0

   then ShowMessage ("Укажите массив")

   else

     Memo2.Lines.Clear;

     for i:=0 to Memo1.Lines.Count-1 do

      begin

        Memo2.Lines.Add("0");

        for j:=0 to Memo1.Lines.Count-1-i do

          begin

        Memo2.Lines.Strings[i]:=FloatToStr(StrToFloat(Memo2.Lines.Strings[i])

            +StrToFloat(Memo1.Lines.Strings[i+j]))

          end;

      end;

end;

На рисунках с 17-ой по 18-ую приведены иллюстрации работы процедуры:

Рис. 17 (Результат вычисления при корректных данных)

Рис. 18 (Результат вычисления при некорректных данных)


Решение задачи 5

Для решения задачи нужны элементы ввода, вывода, отображение строк и столбцов  и элемент запуска обработки матрицы. Для ввода и вывода чисел будет использоваться объект Edit. Для отображения строк и столбцов будет использоваться объект StringGrid. Для запуска обработки матрицы будет использоваться объект Button.

Внешний вид вкладки приведён на рисунке 19.

Рис. 19 (Внешний вид вкладки для решения пятой задачи)

Процедуры, изменения размера матрицы при вводе их значений:

procedure TForm1.EditMChange(Sender: TObject);

begin

  if EditM.Text<>"   "

   then

     begin

       StringGrid1.RowCount:=strtoint(EditM.Text);

       StringGrid2.RowCount:=strtoint(EditM.Text)

     end;

end;

procedure TForm1.EditWChange(Sender: TObject);

begin

  if EditW.Text<>"   "

   then

     begin

       StringGrid1.ColCount:=strtoint(EditW.Text);

       StringGrid2.ColCount:=strtoint(EditW.Text);

     end;

end;

Процедура, вызываемая при нажатии на кнопку обработки матрицы, приведена ниже:

procedure TForm1.ButtonRez5Click(Sender: TObject);

var i,j,z:Integer;

begin

  if EditM.Text="   "

   then  ShowMessage ("Укажите количество строк")

   else

    if EditW.Text="   "

     then  ShowMessage ("Укажите количество столбцов")

     else

       if stringgrid1.RowCount<>stringgrid1.ColCount

        then showmessage("Матрица не квадратная!!!")

        else

        begin

          z:=0;

          for i:=0 to stringgrid1.RowCount-1 do

          begin

             for j:=0 to stringgrid1.ColCount-1 do

              begin

                if StringGrid1.Cells[i,j]=" "

                 then z:=1

              end;

          end;

        end;

          if z=1 then ShowMessage ("Введите числа массива")

          else

          for i:=0 to stringgrid1.RowCount-1 do

            begin

              for j:=0 to StringGrid1.ColCount-1 do

                begin

                  if j=StringGrid1.ColCount-1-i

                   then

                     StringGrid2.Cells[i,j]:=FloatToStr((i+1)*(i+2))

                   else

                  StringGrid2.Cells[i,j]:=FloatToStr(0)

                end;

            end

end;

На рисунках с 20-ой по 24-ую приведены иллюстрации работы процедуры:

Рис. 20 (Результат вычисления при корректных данных)

Рис. 21 (Результат вычисления при некорректных данных)

Рис. 22 (Результат вычисления при некорректных данных)

Рис. 23 (Результат вычисления при некорректных данных)

Рис. 24 (Результат вычисления при некорректных данных)

 


Заключение

  В результате выполнения курсовой работы по дисциплине «Объектно-ориентированный анализ и программирование», я освоила язык программирования Delphi, в виде составления и написания программ. Приобрела навыки решения прикладных задач, а так  же навыки разработки и отладки программ в современных системах программирования. Пользуясь литературой, я  углубленно изучила материал по программированию. Я узнала такие объекты как: «Edit» - объект ввода и вывода данных, «Button» - объект для реализации в программе команд, «StringGrid» - объект для отображения различных данных в табличной форме, «Label» - объект для отображения надписей и меток на форме, которые не меняются в течение всего времени работы программы и «Memo» - текстовый редактор. В итоге всего мной изученного, я могу сказать что дисциплина «Объектно-ориентированный анализ и программирование» не легка, но очень интересна и пригодиться, для дальнейшей работы по направлению «Бизнес-инфоматика».


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

1.             http://www.tadviser.ru/index.php/  - TAdviser – портал выбора технологий и поставщиков

2.            http://nad-vasiluk.narod.ru/met_prog.htm - Методы и технологии программирования

3.             http://pas1.ru/ - Язык Pascal. Программирование для начинающих

4.            В.В.Фаронов «Турбо Паскаль Начальный курс Учебное пособие»// Издательство «ОМД Групп» 2003, 579 стр.

5.            Брантд З. «Анализ данных. Статистические и вычислительные методы для научных работников и инженеров» // АСТ МИР, 2008, 688стр.

6.            Кулаичев А.П. «Методы и средства комплексного анализа данных» // Инфра-М, 2011. 512стр.

7.            Владимир Попов. «Паскаль и Дельфи. Самоучитель.» // Питер, 2003 г., 544 с.

8.            Потопахин В.В. «Turbo Pascal: решение сложных задач.» // Издательство "БХВ-Петербург", 2006, 208 с.

9.            Шпак Ю.А. «Turbo Pascal 7.0 на примерах» // Издательство "Юниор", 2003, 498 с.

10.       Рапаков Г.Г., Ржеуцкая С.Ю. «Turbo Pascal для студентов и школьников.» // СПб.: БХВ-Петербург, 2004.

11.       Каплан В.Е. и др. «Статистическая обработка и анализ экономических данных» // Феникс, 2007. 336стр.

12.       Тюрин Ю.Н. «Анализ данных на компьютере» // Форум, 2010. 368стр.

13.       Гмурман В.Е. «Теория вероятностей и математическая статистика» // М.: Высшая школа, 2009. 479стр.

14.       Павловская Т.А. «Паскаль. Программирование на языке высо­кого уровня: Учебник для вузов.» // СПб.: Питер, 2007. – 293 с.

15.       Бугров Я.С., Никольский С.М. Высшая математика: В 3-х т.М: Дрофа,2005.

16.       Алексеев Е.Р., Чеснокова О.В., Кучер Т.В. Free Pascal и Lazarus. Учебник по программированию. – М.: ALT Linux: Издательский дом ДМК-пресс, 2010. – 440 с.

17.       Мельников С.В. Delphi и Turbo Pascal на занимательных примерах. – СПб.: БХВ-Петербург, 2006. – 448 с.

18.       Алексеев Е.Р., Чеснокова О.В., Кучер Т.В. Самоучитель по программированию на Free Pascal и Lazarus. – М.: ALT Linux: Издательский дом ДМК-пресс, 2011. – 503 с.

19.       Рубанцев В. Большой самоучитель Delphi XE3. – 2013.


Приложение 1

Текстпрограммы

program ZadaniaDoma;

uses

  Forms,

  MainUnit in "MainUnit.pas" {Form1};

{$R *.res}

begin

  Application.Initialize;

  Application.CreateForm(TForm1, Form1);

  Application.Run;

end.

unit MainUnit;

interface

uses

  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

  Dialogs, StdCtrls, ComCtrls, Grids;

type

  TForm1 = class(TForm)

    PageControl1: TPageControl;

    Zadanie1: TTabSheet;

    Zadanie2: TTabSheet;

    Zadanie3: TTabSheet;

    Zadanie4: TTabSheet;

    Zadanie5: TTabSheet;

    LabelX1: TLabel;

    LabelRez1: TLabel;

    EditX1: TEdit;

    EditRez1: TEdit;

    ButtonRez1: TButton;

    LabelX2: TLabel;

    LabelRez2: TLabel;

    EditX2: TEdit;

    EditRez2: TEdit;

    ButtonRez2: TButton;

    LabelEps: TLabel;

    LabelX3: TLabel;

    LabelN: TLabel;

    LabelRez3: TLabel;

    EditEps: TEdit;

    EditX3: TEdit;

    EditN: TEdit;

    EditRez3: TEdit;

    ButtonRez3: TButton;

    ButtonRez4: TButton;

    Memo1: TMemo;

    Memo2: TMemo;

    EditM: TEdit;

    LabelStrok: TLabel;

    LabelStolb: TLabel;

    EditW: TEdit;

    StringGrid1: TStringGrid;

    StringGrid2: TStringGrid;

    ButtonRez5: TButton;

    procedure ButtonRez1Click(Sender: TObject);

    procedure ButtonRez2Click(Sender: TObject);

    procedure ButtonRez3Click(Sender: TObject);

    procedure ButtonRez4Click(Sender: TObject);

    procedure EditMChange(Sender: TObject);

    procedure EditWChange(Sender: TObject);

    procedure ButtonRez5Click(Sender: TObject);

  private

    { Private declarations }

  public

    { Public declarations }

  end;

var

  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.ButtonRez1Click(Sender: TObject);

begin

   if EditX1.Text="  "

    then ShowMessage ("Укажите X")

    else

     if (StrToFloat(EditX1.Text))>1

      then ShowMessage ("Sin(X)>1")

      else

       if (StrToFloat(EditX1.Text))<-1

        then ShowMessage ("Sin(X)<-1")

        else

          EditRez1.Text:=FloatToStr((Sqr(Sin(StrToFloat(EditX1.Text)))+

          Exp(Exp(5*Ln(Abs(Sqr(StrToFloat(EditX1.Text))+1))))-

          Ln(Sqr(StrToFloat(EditX1.Text))+1)))

end;

procedure TForm1.ButtonRez2Click(Sender: TObject);

begin

  if EditX2.Text="  "

   then ShowMessage ("Укажите X")

   else

     if (StrToFloat(EditX2.Text))<-1

      then ShowMessage ("Sin(X) è Cos(X)<-1")

      else

        if (StrToFloat(EditX2.Text))<4

         then ShowMessage ("Логарифмическая ошибка")

         else

           EditRez2.Text:=FloatToStr(((Sqr(Sin(StrToFloat(EditX2.Text))))/

           (Sqr(Cos(StrToFloat(EditX2.Text))))+5)+Exp((1/3)*

           Ln(((Ln(StrToFloat(EditX2.Text)-2))))/

           ((Sqr(Sin(StrToFloat(EditX2.Text))))

           +Sqr(StrToFloat(EditX2.Text))+1)))

end;

procedure TForm1.ButtonRez3Click(Sender: TObject);

var D,S:Real;

    i:Integer;

begin

  if EditEps.Text="  "

   then ShowMessage ("Укажите Eps")

   else

    if EditX3.Text="  "

     then ShowMessage ("Укажите X")

     else

      if EditN.Text="  "

       then ShowMessage ("Укажите N")

       else

       begin

        for i:=0 to StrToInt(EditN.Text)-1 do

          begin

            D:=(Exp((Exp(i*Ln(2)))*Ln(StrToFloat(EditX3.Text))));

            while (D)

            begin

              S:=(S)+(D);

              D:=(Exp((Exp(i*Ln(2)))*Ln(StrToFloat(EditX3.Text))));

            end;

          end;

       end;

       EditRez3.Text:=FloatToStr(s)

end;

procedure TForm1.ButtonRez4Click(Sender: TObject);

var i,j:Integer;

begin

  if Memo1.Lines.Count=0

   then ShowMessage ("Укажите массив")

   else

     Memo2.Lines.Clear;

     for i:=0 to Memo1.Lines.Count-1 do

      begin

        Memo2.Lines.Add("0");

        for j:=0 to Memo1.Lines.Count-1-i do

          begin

            Memo2.Lines.Strings[i]:=FloatToStr(StrToFloat(Memo2.Lines.Strings[i])

            +StrToFloat(Memo1.Lines.Strings[i+j]))

          end;

      end;

end;

procedure TForm1.EditMChange(Sender: TObject);

begin

  if EditM.Text<>"  "

   then

     begin

       StringGrid1.RowCount:=strtoint(EditM.Text);

       StringGrid2.RowCount:=strtoint(EditM.Text)

     end;

end;

procedure TForm1.EditWChange(Sender: TObject);

begin

  if EditW.Text<>"  "

   then

     begin

       StringGrid1.ColCount:=strtoint(EditW.Text);

       StringGrid2.ColCount:=strtoint(EditW.Text);

     end;

end;

procedure TForm1.ButtonRez5Click(Sender: TObject);

var i,j,z:Integer;

begin

  if EditM.Text="  "

   then  ShowMessage ("Укажите количество строк")

   else

    if EditW.Text="  "

     then  ShowMessage ("Укажите количество столбцов")

     else

       if stringgrid1.RowCount<>stringgrid1.ColCount

        then showmessage("Матрица не квадратная!!!")

        else

        begin

          z:=0;

          for i:=0 to stringgrid1.RowCount-1 do

          begin

             for j:=0 to stringgrid1.ColCount-1 do

              begin

                if StringGrid1.Cells[i,j]=""

                 then z:=1

              end;

          end;

        end;

          if z=1 then ShowMessage ("Введите числа матрицы")

          else

          for i:=0 to stringgrid1.RowCount-1 do

            begin

              for j:=0 to StringGrid1.ColCount-1 do

                begin

                  if j=StringGrid1.ColCount-1-i

                   then

                     StringGrid2.Cells[i,j]:=FloatToStr((i+1)*(i+2))

                   else

                  StringGrid2.Cells[i,j]:=FloatToStr(0)

                end;

            end

end;

end.

Информация о файле
Название файла Решение вычислительных задач в объективно-ориентированной среде визуального программирования от пользователя Гость
Дата добавления 5.5.2020, 18:17
Дата обновления 5.5.2020, 18:17
Тип файла Тип файла (zip - application/zip)
Скриншот Не доступно
Статистика
Размер файла 460.06 килобайт (Примерное время скачивания)
Просмотров 354
Скачиваний 134
Оценить файл