49321

Пароходик догоняет большой пароход

Курсовая

Информатика, кибернетика и программирование

Целью работы также является проведение сравнительного анализа языков программирования. Сравнить языки потребуется как в общем, так и применительно поставленной задаче. Одной из подзадач является создание описание алгоритма программы и составление математической модели. Пароходы будут состоять из линий и окружностей. Для написания выбран язык программирования, среда Delphi 7.

Русский

2013-12-25

49.92 KB

5 чел.

ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ

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

«Ижевский государственный технический университет им. М.Т.Калашникова»

Кафедра АСОИУ

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

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

по дисциплине «Программирование»

на тему «Пароходик догоняет большой пароход».

Выполнил

студент гр. Б02-782-1                                       Д.А.Шутов

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

преподаватель кафедры АСОИУ         А.С.Харина

Ижевск 2012

СОДЕРЖАНИЕ

ВВЕДЕНИЕ 3

1 АНАЛИТИЧЕСКИЙ ОБЗОР ЯЗЫКОВ ПРОГРАММИРОВАНИЯ 4

2 МАТЕМАТИЧЕСКАЯ ГЛАВА 7

3 ОПИСАНИЕ АЛГОРИТМА РАБОТЫ ПРОГРАММЫ

ВЫВОД

СПИСОК ЛИТЕРАТУРЫ

ПРИЛОЖЕНИЕ А. Результат работы программы

ВВЕДЕНИЕ

Тема моей курсовой работы – Пароходик догоняет большой пароход.

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

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

Одной из подзадач является создание описание алгоритма программы и составление математической модели.

Пароходы будут состоять из линий и окружностей.

Для написания  выбран язык программирования , среда  Delphi 7.

1. АНАЛИТИЧЕСКИЙ ОБЗОР ЯЗЫКОВ ПРОГРАММИРОВАНИЯ.

Delphi

Delphi (Делфи) — язык программирования, который используется в одноимённой среде разработки. Сначала язык назывался Object Pascal. Начиная со среды разработки Delphi 7.0, в официальных документах Borland стала использовать название Delphi для обозначения языка Object Pascal.

История языка

Delphi — результат развития языка Турбо Паскаль, который, в свою очередь, развился из языка Паскаль. Паскаль был полностью процедурным языком, Турбо Паскаль, начиная с версии 5.5, добавил в Паскаль объектно-ориентированные свойства, а в Object Pascal — динамическую идентификацию типа данных с возможностью доступа к метаданным классов (то есть к описанию классов и их членов) в компилируемом коде, также называемом интроспекцией — данная технология получила обозначение RTTI. Так как все классы наследуют функции базового класса TObject, то любой указатель на объект можно преобразовать к нему, после чего воспользоваться методом ClassType и функцией TypeInfo, которые и обеспечат интроспекцию.

Также отличительным свойством Object Pascal от С++ является то, что объекты по умолчанию располагаются в динамической памяти. Однако можно переопределить виртуальные методы NewInstance и FreeInstance класса TObject. Таким образом, абсолютно любой класс может осуществить «желание» «где хочу — там и буду лежать». Соответственно организуется и «многокучность».

Object Pascal (Delphi) являются результатом функционального расширения Turbo Pascal.

Delphi оказал огромное влияние на создание концепции языка C# для платформы .NET. Многие его элементы и концептуальные решения вошли в состав С#. Одной из причин называют переход Андерса Хейлсберга, одного из ведущих разработчиков Дельфи, из компании Borland Ltd. в Microsoft Corp.

Версия 1 была предназначена для разработки под 16-разрядную платформу Win16;  Версии со второй компилируют программы под 32-разрядную платформу Win32;

Версия 8 способна генерировать байт-код исключительно для платформы .NET. Это первая среда, ориентированная на разработку мультиязычных приложений;

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

С++

При создании C++ стремились сохранить совместимость с языком Си. Большинство программ на Си будут исправно работать и с компилятором C++. C++ имеет синтаксис, основанный на синтаксисе Си.

История


Язык возник в начале 1980-х годов, когда сотрудник фирмы Bell Laboratories Бьёрн Страуструп придумал ряд усовершенствований к языку Си под собственные нужды. До начала официальной стандартизации язык развивался в основном силами Страуструпа в ответ на запросы программистского сообщества. В 1998 году был ратифицирован международный стандарт языка C++: ISO/IEC 14882:1998 «Standard for the C++ Programming Language»; после принятия технических исправлений к стандарту в 2003 году — нынешняя версия этого стандарта — ISO/IEC 14882:2003.
Ранние версии языка, известные под именем «C с классами», начали появляться с 1980 года. Идея создания нового языка берёт начало от опыта программирования Страуструпа для диссертации. Он обнаружил, что язык моделирования Симула (Simula) имеет такие возможности, которые были бы очень полезны для разработки большого программного обеспечения, но работает слишком медленно. В то же время язык BCPL достаточно быстр, но слишком близок к языкам низкого уровня и не подходит для разработки большого программного обеспечения. Страуструп начал работать в Bell Labs над задачами теории очередей (в приложении к моделированию телефонных вызовов). Попытки применения существующих в то время языков моделирования оказались неэффективными. Вспоминая опыт своей диссертации, Страуструп решил дополнить язык Си (преемник BCPL) возможностями, имеющимися в языке Симула. Язык Си, будучи базовым языком системы UNIX, на которой работали компьютеры Bell, является быстрым, многофункциональным и переносимым. Страуструп добавил к нему возможность работы с классами и объектами. В результате, практические задачи моделирования оказались доступными для решения как с точки зрения времени разработки (благодаря использованию Симула-подобных классов) так и с точки зрения времени вычислений (благодаря быстродействию Си). В начале в Си были добавлены классы (с инкапсуляцией), производные классы, строгая проверка типов, inline-функции и аргументы по умолчанию.
Разрабатывая Си с классами (позднее C++), Страуструп также написал программу cfront — транслятор, перерабатывающий исходный код Си с классами в исходный код простого Си. Новый язык, неожиданно для автора, приобрёл большую популярность среди коллег и вскоре Страуструп уже не мог лично поддерживать его, отвечая на тысячи вопросов.
В 1983 году произошло переименование языка из Си с классами в C++. Кроме того, в него были добавлены новые возможности, такие как виртуальные функции, перегрузка функций и операторов, ссылки, константы, пользовательский контроль над управлением свободной памятью, улучшенная проверка типов и новый стиль комментариев (//). Его первый коммерческий выпуск состоялся в октябре 1985 года. В 1985 году вышло также первое издание «Языка программирования C++», обеспечивающее первое описание этого языка, что было чрезвычайно важно из-за отсутствия официального стандарта. В 1989 году состоялся выход C++ версии 2.0. Его новые возможности включали множественное наследование, абстрактные классы, статические функции-члены, функции-константы и защищённые члены


С++

Если требуется обеспечить хорошую скорость работы приложения и экономию ресурсов памяти и процессора традиционно считается, что лучше использовать C++. Однако, в последнее время разница в скорости работы программ, собранных различными компиляторами, становится все менее и менее заметной. Почему? Потому что большинство сред разработки имеет встроенный конвертор кода в ассемблер, а он – как ни крути самый быстрый. Delphi 2007 например имеет опцию работы компилятора {$PUREPASCAL}. Когда она включена – компилятор компилирует классический паскалевский код, когда выключена – используются функции и процедуры, написанные в ассемблере. По умолчанию, кстати, она выключена.Единственное приемущество C++ – мощная модель работы с указателями. В общем случае это очень полезно, так как переменные в памяти не дублируются. Но, если проект сложный – всегда приводит к ошибками доступа к памяти.В качестве очевидного приемущества C++ зачастую называют его модел работы с классами и шаблонами. Но, имхо, весь функционал C++ реализуем и в любом другом языке программирования. Да, в С++ можно например переопределить действие операторов + – / *, правда зачем, можно просто написать доп. функцию. Что же касается шаблонов функций и процедур С++, которые очень часто ставятся в достоинство – на это в Delphi есть вариантные типы. То есть мы просто не указываем тип переменной в Delphi, по сути – та же шаблонная функция.

Delphi

Противоположный случай – когда требуется разработать ПО в максимально сжатые сроки и обеспечить хороший рефакторинг (читабельность, модифицируемость, удобство и оптимизацию) кода приложения. Тут Delphi просто нет равных. Код хорошо структурируется, названия всех функций по сути есть сокращения английских слов (IntToStr – целое в строку; Now – возвращает дату и время сейчас; UpperCase – приводит к верхнему регистру и тд), хорошая модульность и видимость кода – все это способствует скорости разработки, а также позволяет производить ее в командном режиме более эффективно.Еще одно очевидное приемущество Delphi – компоненты, число которых исчисляется миллионами. В Delphi есть возможность скомпилировать участок кода и предоставить его в свободное пользование как компонент. Что получается? Гигантское количество энтузиастов и организаций предоставляют в свободное пользование готовые решения. Хочешь фтп клиент? Нет вопросов – скачал компонент, кинул на форму и вуаля! Дело 2ух кликов.Более того, большое комьюнити Delphi кодеров (в котором больше непрофессионалов в силу легкости языка) порождает в интернете большое количество справочной информации в самых разных областях программирования.

С точки зрения создания программ -разница между Borland C++ Builder(если изучать, то его, а не Delphi, как более продвинутую систему) и VC++ просто огромна. Например, разный подход к структуре приложений. VC++ каркасная структура, а Builder - компонентная. При каркасном подходе изначально приложение создается на основе каркаса и программист в него добавляет функциональность. При этом необходимо хорошо представлять структуру приложения.Компонентный - когда приложение изначально создается на основе одного каркаса, который не дается программисту для изменения. А вся функциональность создается путем добавления и изменения программных компонентов.Я бы сказал, что в VC++ возможностей больше для профессионала, но Builder легче для начинающего. Может быть он более понятен интуитивно, если не слишком обременять себя чтением литературы.У Microsoft аналогичными возможностями обладает Visual Basic (кстати, используется для программирования MSOffice, рекомендую, как более простой в изучении, но не такой универсальный как VC++).Delphi вырос из паскаля, за это его и любят паскалисты. Builder - это смесь Delphi и BC++, а VC++ изначально рос сам по себе, еще и поэтому он мне нравится больше. В начале своей карьеры я написал несколько простых программ на паскале, но С++ стройнее и мне более симпатичен.У Borland лучше дело с описаниями и HELP. Но VC++, как мне кажется,знает большее число людей. Я имею ввиду на профессиональной основе, хотя данные для таких выводов чисто субъективны кто подсчитает?Глючность программ от Microsoft, вошла в историю, но, что действительно точно, так это то, что глюков в MsVC++ значительно меньше, чем в других продуктах Microsoft (FoxPro, например с которым я достаточно поработал). Не знаю как в Builder, на нем много не работал. Да и достать CD с Visual Studio проще, чем продукты Borland.
И самый наверное убийственный аргумент в пользу Microsoft так это поддержка VC++ таким CASE средством для разработки приложений как Rational Rose. Поддержка   именно VC++, позволяет по графическим диаграммам классов создавать исходный код проекта. По себе знаю, когда за тебя может создать код программа, хотя бы и просто шаблон для классов, то совершенно нет желания писать его руками.Теперь я исхожу только из времени, затраченного на  изучение. Если вы уже затратили несколько месяцев на работу, то жалко начинать все с начала и изучать еще один инструмент. Лучше знать один язык, но хорошо, чем иметь понятия о нескольких, без возможности написать что либо серьезное...

В чем плюсы языка С++ относительно Delphi:
1. Относительная кроссплатформенность компиляторов (GCC и его порт MinGW например).
2. Невероятная мощность и функциональность языка.
3. Реализованные алгоритмы и структуры данных, даже декартово дерево по явному ключу есть.
4. Возможность применения различных парадигм программирования (ООП, ФП ит.д.)

Минусы в сравнении с Делфи:
1. Сложность изучения.
2. Неоднозначность многих конструкций.
3. Необходимость сторонних библиотек для создания GUI.
4. Неоднозначность стандартов языка из за нескольких ведущих компиляторов.(MSVC,GCC, Borland C++)

2. МАТЕМАТИЧЕСКАЯ ГЛАВА.

ВЫВОД

Был произведен анализ существующих языков программирования, который показал, что язык Delphi более подходит для выполнения данного задания, чем C++.

В ходе выполнения работы были изучены: синтаксис языка С++, способы создания графики в Microsoft Visual Studio 2010, в частности работа с классами Graphics, BufferedGraphics, BufferedGraphicsContext.Была составлена математическая модель задачи, где описаны основные математические формулы, на основании которых была написана программа.

Кроме того, для алгоритма определения текущего времени была составлена блок-схема.

Для верификации и тестирования разработанного алгоритма была реализована программа, представляющая собой 2 парохода плывущие друг за другом. Разработка велась на языке Delphi 7.

Программа выводит на экран 2 парохода, где один догоняет другой.(см. приложение Б).

В ходе тестов программы ошибок замечено не было.

СПИСОК ЛИТЕРАТУРЫ

1. Петр Дерахвелидзе, Евгений Марков, «Программирование в Delphi7»,  Санкт-Петербург, 2003;

2. В. М .Пестриков, А. Н. Маслобоев, Delphi на примерах. — СПб.: БХВ-Петербург, 2005. — с. 496

3. А. С. Лесневский Объектно-ориентированное программирование для начинающих, 2005

4. Гради Буч, Роберт А. Максимчук, Майкл У. Энгл, Бобби Дж. Янг, Джим Коналлен, Келли А. Хьюстон.Объектно-ориентированный анализ и проектирование с примерами приложений, 2008.

ПРИЛОЖЕНИЕ А

ТЕКСТ ПРОГРАММЫ

unit Unit1;

interface

uses

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

 Dialogs, ExtCtrls;

type

 TForm1 = class(TForm)

   Timer1: TTimer;

   tmr1: TTimer;

   procedure Timer1Timer(Sender: TObject);

   procedure FormCreate(Sender: TObject);

   procedure tmr1Timer(Sender: TObject);

 private

   { Private declarations }

 public

   { Public declarations }

 end;

var

 Form1: TForm1;

 x, y,x1,y1: integer; // координаты опорной точки

implementation

{$R *.dfm}

procedure Insert1(x1, y1: integer);

begin

   // контук кораблика

  Form1.Canvas.MoveTo(x1, y1);

  Form1.Canvas.LineTo(x1, y1 - 10);

  Form1.Canvas.LineTo(x1 + 50, y1 - 10);

  Form1.Canvas.LineTo(x1 + 55, y1 - 15);

  Form1.Canvas.LineTo(x1 + 85, y1 - 15);

  Form1.Canvas.LineTo(x1 + 70, y1);

  Form1.Canvas.LineTo(x1, y1);

   // палубные надстройки

  Form1.Canvas.MoveTo(x1 + 15, y1 - 10);

  Form1.Canvas.LineTo(x1 + 20, y1 - 15);

  Form1.Canvas.LineTo(x1 + 20, y1 - 20);

  Form1.Canvas.LineTo(x1 + 65, y1 - 20);

  Form1.Canvas.LineTo(x1 + 65, y1 - 15);

  Form1.Canvas.MoveTo(x1+ 25, y1 - 15);

  Form1.Canvas.LineTo(x1 + 45, y1 - 15);

  Form1.Canvas.Rectangle(x1 + 40, y1 - 20, x1 + 55, y1 - 25);

end;

procedure Insert(x, y: integer);

begin

   // контук кораблика

  Form1.Canvas.MoveTo(x, y);

  Form1.Canvas.LineTo(x, y - 10);

  Form1.Canvas.LineTo(x + 50, y - 10);

  Form1.Canvas.LineTo(x + 55, y - 15);

  Form1.Canvas.LineTo(x + 85, y - 15);

  Form1.Canvas.LineTo(x + 70, y);

  Form1.Canvas.LineTo(x, y);

   // палубные надстройки

  Form1.Canvas.MoveTo(x + 15, y - 10);

  Form1.Canvas.LineTo(x + 20, y - 15);

  Form1.Canvas.LineTo(x + 20, y - 20);

  Form1.Canvas.LineTo(x + 65, y - 20);

  Form1.Canvas.LineTo(x + 65, y - 15);

  Form1.Canvas.MoveTo(x + 25, y - 15);

  Form1.Canvas.LineTo(x + 45, y - 15);

  Form1.Canvas.Rectangle(x + 40, y - 20, x + 55, y - 25);

   // труба

  Form1.Canvas.Rectangle(x + 35, y - 20, x + 40, y - 35);

   // иллюминаторы

  Form1.Canvas.Ellipse(x + 55, y - 10, x + 60, y - 5);

  Form1.Canvas.Ellipse(x + 65, y - 10, x + 70, y - 5);

   // мачта

  Form1.Canvas.MoveTo(x + 50, y - 25);

  Form1.Canvas.LineTo(x + 50, y - 60{50});

  // флажок на мачте

  Form1.Canvas.LineTo(x + 30, y - 60);

  Form1.Canvas.LineTo(x + 40, y - 58);

  Form1.Canvas.LineTo(x + 30, y - 55);

  Form1.Canvas.LineTo(x + 50, y - 55);

   // тросы

  Form1.Canvas.MoveTo(x + 85, y - 15);

  Form1.Canvas.LineTo(x + 50, y - 50);

  Form1.Canvas.LineTo(x, y - 10);

end;

procedure TForm1.Timer1Timer(Sender: TObject);

begin

 // Стираем старый кораблик

 Form1.Canvas.Pen.Color := Form1.Color;

 Insert(x,y);

 // Смещаем координаты опорной точки

 if (Form1.ClientWidth > x) then

   Inc(x,5)

 else

 begin

   // Если вышли за границы экрана,

   // назначаем новые начальные координаты

   x := 100;

   y :=100;

 end;

 // Рисуем новый кораблик

 Form1.Canvas.Pen.Color := clYellow;

 Insert(x,y);

end;

procedure TForm1.FormCreate(Sender: TObject);

begin

 Form1.Width := 500;

 Form1.Height := 300;

 x := 100;

 y := 100;

 x1:=0;

 y1:=150;

 Form1.Color := clNavy;

 Timer1.Interval := 50;

 tmr1.Interval:=35;

end;

procedure TForm1.tmr1Timer(Sender: TObject);

begin

// Стираем старый кораблик

 Form1.Canvas.Pen.Color := Form1.Color;

 Insert1(x1,y1);

 // Смещаем координаты опорной точки

 if (Form1.ClientWidth > x1) then

   Inc(x1,5)

 else

 begin

   // Если вышли за границы экрана,

   // назначаем новые начальные координаты

   x1 := 0;

   y1 :=170;

 end;

 // Рисуем новый кораблик

 Form1.Canvas.Pen.Color := clRed;

 Insert1(x1,y1);

end;

end.

    Рис. 1.1


 

А также другие работы, которые могут Вас заинтересовать

60728. Пользовательский интерфейс графического редактора 339 KB
  Цель: дать учащимся понятие о пользовательском интерфейс графического редактора аdobe PhotoShop. Закрепить на практике умения учащихся использовать графический редактор аdobe PhotoShop.
60729. Сканирование изображений 3.05 MB
  Задачи: Актуализировать знания учащихся о компьютерной графике. Закрепить на практике умения учащихся использовать графический редактор Paint. Развивать творческое мышление через задания творческого характера.
60730. Форматы изображений растровой графики 182.5 KB
  Сохраните рисунок в другом формате воспользовавшись командой Файл Сохранить как в папке Эксперимент Имя файла: урок 1; Тип файла: 24-разрядный рисунок. Откройте первый рисунок Файл Открыть в папке Эксперимент Имя файла: урок 1...
60731. Компьютерная графика. Виды графических изображений 8.23 MB
  Цель: дать понятие компьютерной графике и видам графических изображений. Задачи: Актуализировать знания учащихся о компьютерной графике. Закрепить на практике умения учащихся различать виды графических изображений.
60732. Этапы решения задач с помощью компьютера 237 KB
  Построив модель задачи и исследовав ее можно найти оптимальное решение. 2 Этап: информационную модель процесса После постановки задачи построить информационную модель процесса выбора подарка а такая модель предполагает три составляющих...
60733. СТЫД И СОВЕСТЬ 42 KB
  Более того многие подростки отмечают что совесть мешает жить по законам современного общества. А между тем по русской православной традиции к 12-13 годам человек должен обладать достаточно зрелой совестью ведь с 7 лет ребенок допускается...
60735. Компьютерная графика. Графический редактор Paint 90 KB
  Цель урока: формирование практических навыков работы в среде графического редактора Pint с использованием ЭОР. Тип урока объяснение нового материала и закрепление практических навыков.
60736. Построение графиков функций 3.91 MB
  Задачи: сформировать у учащихся представления о построение диаграмм в среде Microsoft Excel, актуализировать и углубить знания о возможностях Microsoft Excel.