Разработка приложений в Lazarus. курсач. Литература по кту в тс, данные из сети Интернет 5 Перечень заданий, подлежащих разработке
Скачать 2.15 Mb.
|
Министерство науки и высшего образования Российской Федерации ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ «ОРЕНБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ» Аэрокосмический институт Кафедра управления и информатики в технических системах КУРСОВАЯ РАБОТА по дисциплине «Программирование на языке высокого уровня» Разработка приложения в среде программирования «Lazarus» ОГУ 27.03.03.3222.037 ПЗ Руководитель работы: ________Шрейдер М.Ю. «__»________2022 г. Исполнитель: Студент гр. 20САУ(ба)САУИТ __________Сафонова И.В. «__»________2022 г. Оренбург 2022 Утверждаю Заведующий кафедрой УиИТС А.С.Боровский подпись инициалы фамилия «» 2022 г. ЗАДАНИЕ на выполнение курсовой работы студенту Сафоновой Ирине Владимировне по направлению подготовки (специальности) 27.03.03 – Системный анализ и управление по дисциплине Программирование на языке высокого уровня 1 Тема работы «Разработка приложения в среде программирования «Lasarus»» 2 Срок сдачи студентом работы « » июня 2022 г. 3 Цель и задачи к работе: закрепление теоретических знаний, полученных за время обучения, а также закрепление навыков разработки алгоритмов, написания и отладки программ для решения прикладных задач с использованием языка программирования высокого уровня 4 Исходные данные к работе литература по КТУ в ТС, данные из сети Интернет 5 Перечень заданий, подлежащих разработке: 5.1 Написание программы для расчета по двум формулам. 5.2 Написание программы, которая по введенному значению аргумента вычисляет значение функции, заданной в виде графика. 5.3 Написание программы для вычисления и вывода на экран в виде таблицы значения функции, заданной с помощью ряда Тейлора. 6 Перечень графического (иллюстративного) материала: блок-схемы алгоритмов решения задач, а также скриншоты работы программ. Дата выдачи получения задания Руководитель «» февраля 2022 г. М.Ю. Шрейдер подпись инициалы фамилия Студент «» февраля 2022 г. И.В. Сафонова подпись инициалы фамилия Аннотация Содержание Введение Цель курсовой работы – закрепление теоретических знаний, полученных за время обучения, а также закрепление навыков разработки алгоритмов, написания и отладки программ для решения прикладных задач с использованием языка программирования высокого уровня. Язык высокого уровня (или высокоуровневый язык) — это язык программирования, наиболее приближенный к человеческому языку. Он содержит смысловые конструкции, описывает структуры данных, выполняет над ними различные операции. Современные языки высокого уровня оперируют уже целыми объектами - сложными конструкциями, обладающими определенным состоянием и поведением. На смену структурному программированию в начале 1990-х гг. пришло объектно-ориентированное программирование — ООП. Его можно рассматривать как модульное программирование нового уровня, когда вместо во многом случайного, механического объединения процедур и данных главным становится их смысловая связь. Объект рассматривается как логическая единица, которая содержит данные и правила (методы) их обработки. Объектно-ориентированный язык создает «программное окружение» в виде множества независимых объектов, каждый из которых отличается своими свойствами и способами взаимодействия с другими объектами. ООП основано на трех важнейших принципах (инкапсуляция, наследование, полиморфизм), придающих объектам новые свойства. Инкапсуляция — объединение в единое целое данных и алгоритмов их обработки. Данные здесь — поля объекта, а алгоритмы — объектные методы. Наследование — свойство объектов порождать своих потомков. Объект-потомок автоматически наследует все поля и методы, может дополнять объекты новыми полями, заменять и дополнять методы. Полиморфизм — свойство родственных объектов решать схожие по смыслу проблемы разными способами. В силу того, что подавляющее большинство пользователей по-прежнему работает в операционной системе Windows, мы будем рассматривать работу с Lazarus именно в этой среде. Lazarus — это IDE (Integrated Development Environment) - Интегрированная Среда Разработки программ, использующая компилятор FPC (Free Pascal Compiler), редакторы кода, форм, Инспектор Объектов, отладчик и многие другие инструменты. Еще говорят, что среда Lazarus — это RAD (Rapid Application Development) - среда Быстрой Разработки Приложений. Актуальность курсовой работы обусловлена широким использованием объектно-ориентированного программирования для создания программных средств. Объектом исследования являются технологии программирования, предметом – модульное и объектно-ориентированное программирование. Основным методом работы является анализ литературы по разработке приложения в среде программирования «Lasarus». Работа состоит из введения и двух частей - теоретической и практической. Теоретическая частьПостановка задачиРазработать программы на Lasarus, позволяющие решить три типовых задания. Будут представлены три типа программ, таких как: линейная программа; разветвляющиеся вычислительные процессы; организация циклов. Анализ особенностей среды программирования LazarusLazarus - открытая среда разработки программного обеспечения на языке Object Pascal для компилятора Free Pascal(часто используется сокращение FPC - Free Pascal Compiler, бесплатно распространяемый компилятор языка программирования Pascal). Интегрированная среда разработки предоставляет возможность кроссплатформенной разработки приложений в Delphi-подобном окружении [1,3]. Позволяет достаточно несложно переносить Delphi-программы с графическим интерфейсом в различные операционные системы: Linux, FreeBSD, Mac OS X, Microsoft Windows, Android. Начиная с Delphi XE2 в самом Delphi имеется возможность компиляции программ для Mac OS X, с версии XE4 - для iOS, с версии XE5 - для Android, с версии 10.2 Tokyo - для Linux (x64): работает на многих платформах; открытый исходный код для создания любых проектов; возможность использовать 200 компонентов; внедрении необходимых компонентов через пакет файлов; возможность использовать программу для коммерческих целей. Окружающая среда Lazarus подходит для всех разработчиков и особенно для тех, кто намерен создавать программы с нуля. Интерфейс программы очень прост, как для новичков, так и для тех, кто уже занимается программированием на профессиональном уровне. Этого удалось достичь принципом перетаскивания выбранного компонента. Программа позволяет создавать приложения с помощью перетаскивания всех необходимых элементов и помещать их в специальные окна. Большим преимуществом этой программы является возможность компиляции для любых операционных систем (Windows, OSX, Linux и Windows CE). [] Очередным преимуществом программы является быстрый переход между различными интерфейсами и системами обеспечения библиотеки интерфейса. На данный момент, Lazarus поддерживается следующими типами интерфейсов: WIN32 GDI, GTK + 1.2.x (Unix, Mac OS X), GTK + 2.x, Qt 4 (C ++) и Windows. К тому же, Лазарус является одним из немногих инструментов, в отличии от своих конкурентов, который может создавать приложения для ПК (Windows CE, Qtopia). Историю развития языков программирования, пожалуй, можно начать с первой в мире программистки Ады Лавлейс (Августа Ада Кинг, графиня Лавлейс, математик). Ада Лавлейс родилась 10 декабря 1815 г. в Лондоне, была известна описанием вычислительной машины (механическая машина Ч. Бэббиджа), в разработке которой она принимала участие, и созданием первой программы для нее. Ввела в употребление термины "цикл" и "рабочая ячейка". В честь Ады Лавлейс в 1975 году был назван язык программирования Ада. [] Реально языки программирования получили развитие в 1945-1955 гг., когда появились первые ЭВМ (Электронные Вычислительные Машины), для которых программы составлялись вначале на машинном языке, а затем и на Ассемблере - мнемоническом представлении машинного языка. И если "чистым" машинным языком уже давно никто не пользуется, то Ассемблер все еще применяется там, где требуется либо сверхмалый размер программы, либо большая скорость ее работы, то есть, в основном, для создания критических участков ОС (Операционных Систем) или драйверов, для программирования микропроцессоров в различных платах, устройствах. Написать большую современную программу на Ассемблере - невероятно сложная, а то и невыполнимая задача. [] В 1954 году появился первый язык программирования высокого уровня Фортран, и началась новая эра развития программирования. Язык высокого уровня (или высокоуровневый язык) — это язык программирования, наиболее приближенный к человеческому языку. Он содержит смысловые конструкции, описывает структуры данных, выполняет над ними различные операции. Современные языки высокого уровня оперируют уже целыми объектами – сложными конструкциями, обладающими определенным состоянием и поведением. [] Для обучения программированию и для решения задач общего назначения наибольшее распространение получил язык программирования высокого уровня Паскаль, созданный в 1968-1969 гг. профессором Никлаусом Виртом, и названный в честь выдающегося французского математика Блеза Паскаля (между прочим, создателя первой в мире механической машины, складывающей два числа). Этот язык выгодно отличается от других языков программирования более строгими правилами в описании и использовании данных различного типа. Паскаль – структурный язык, небольшой и эффективный, способствующий выработке у программиста хорошего стиля программирования. В школах и ВУЗах всех стран в мире по сей день изучают ту или иную реализацию Паскаля. Поскольку Lazarus основан на Паскале (точнее, на Объектном Паскале), историю других высокоуровневых языков в рамках данного курса мы рассматривать не будем. [] В 1983 г. фирма Borland, известная разработкой Delphi – платного предшественника Lazarus, выпустила Turbo Pascal - интегрированную среду разработки программ на языке Паскаль. Turbo Pascal –это компилятор, компоновщик, редактор кода и отладчик в одном окне. Он подобен швейцарскому ножу, где множество разных инструментов вмонтировано в единое устройство. Для программистов Turbo Pascal примечателен тем, что он стал своеобразным прародителем сред быстрой разработки программ. В 1986 г. появился язык Object Pascal (Объектный Паскаль), разработанный в фирме Apple Computer. Этот диалект Паскаля уже мог оперировать объектами. В 1989 г. объектное расширение Паскаля было добавлено и в Turbo Pascal фирмы Borland. [] В 1994 г. была выпущена первая версия Delphi – Графическая интегрированная среда быстрой разработки программ для Windows. Этот факт дал невероятный толчок развитию таких сред, в которых разработка интерфейса программы для программиста вместо нудной рутины, превращалась в забавный конструктор форм. В современных средах можно создать программу, даже не дотрагиваясь до клавиатуры - исключительно с помощью мыши. Правда, подобной программе вряд ли можно будет придать сколь-либо полезные функции. Все эти языки и среды были платными, часто оказывались недоступны образовательным учреждениям в силу своей дороговизны. В 1993 г. начались работы над проектом Free Pascal (FPC - Free Pascal Compiler). Первая версия FPC появилась лишь в июле 2000 г., она была полностью бесплатная и поддерживала множество платформ: Windows, Linux, FreeBSD, Mac OS X и т.п. FPC - это бесплатный открытый проект, его исходные коды для изучения или модификации доступны каждому! Чуть позже появился Lazarus – единственная в мире бесплатная графическая среда для быстрой разработки программ, использующая компилятор FPC. Как и FPC, Lazarus распространяется на условиях лицензии GNU GPL (General Public License). Если не особо вдаваться в юридические подробности, то GNU GPL – это лицензия, предоставляющая пользователю права свободно и бесплатно копировать, модифицировать и распространять (в том числе и на коммерческой основе) данный продукт. По этой же лицензии распространяются все версии ОС (Операционной Системы) Linux - бесплатном и довольно серьезном конкуренте Windows. [1] Итак, мы с вами будем говорить о последней (на момент написания курса) версии Lazarus - 1.0.10, работающей с компилятором FPC 2.6.2. Lazarus - молодой и бурно-развивающийся проект, новые версии выходят довольно часто, так что вы, вероятно, будете пользоваться более свежей версией. Тем не менее, на курсе рассматриваются фундаментальные вопросы программирования, которые едва ли будут пересматриваться. Так что можете изучать предоставленный материал, пользуясь версией Lazarus 1.0.10 или любой более свежей. [4] В силу того, что подавляющее большинство пользователей попрежнему работает в операционной системе Windows, мы будем рассматривать работу с Lazarus именно в этой среде (автор использовал ОС Windows XP SP3). Рамки курса небезграничны, а описание особенностей работы в других платформах может лишь запутать учащихся на начальном этапе. Впрочем, разработка программ под другие платформы имеет не так уж много отличий, чтобы создать непреодолимые трудности при переходе на другую платформу. [6] 2 Разработка приложений для решения поставленных задач2.1 Разработка программного приложения к задаче №1 «Линейные программы»2.1.1 Математическое описание задачи №1. Написать программу для решения по двум формулам: 2.1.2 Словесно-формульное описание и графическое представление алгоритма решения задачи №1. Для решения данной задачи будем использовать линейный алгоритм. Словесное описание алгоритма: Начало. Ввод аргумента «a». Вычисление по формулам. Вывод значение z1 и z2. Конец алгоритма. Графическое представление алгоритма представлено в виде блок-схемы на рисунке 1. Рис. 1 – Графическое представление алгоритма решения задачи №1 2.1.3 Создание кода программы №1. После открытия программы создаем новую форму, добавляем на форму метку Edit три метки Label и одну метку Button. Рис. 2 – Окно главной формы Сгенерируем событие нажатия на кнопку: procedure TForm1.Button1Click(Sender: TObject); Присваиваем аргументам z1 иz2 все действительные числа: var arg, z1, z2: Real; Прописываем проверку того, что строка является вещественным числом: begin if (not TryStrToFloat(Edit1.Text, arg)) then begin Label2.Caption := 'Z1: ошибка'; Label3.Caption := 'Z2: ошибка'; end else Вычисляем значений z1 иz2 по формулам: begin //вычисление z1:= 1 - 1/4 * Sqr(Sin(2 * arg)) + Cos(2*arg); z2:= Sqr(Cos(arg)) + Sqr(Sqr(Cos(arg))); Label2.Caption := 'Z1: ' + FloatToStr(z1); Label3.Caption := 'Z2: ' + FloatToStr(z2); end; 2.1.4 Листинг и протокол работы программы №1. Листинг программ: procedure TForm1.Button1Click (Sender: TObject); var arg, z1, z2: Real; begin if (not TryStrToFloat(Edit1.Text, arg)) then begin Label2.Caption := 'Z1: ошибка'; Label3.Caption := 'Z2: ошибка'; end else begin //вычисление z1:= 1 - 1/4 * Sqr(Sin(2 * arg)) + Cos(2*arg); z2:= Sqr(Cos(arg)) + Sqr(Sqr(Cos(arg))); Label2.Caption := 'Z1: ' + FloatToStr(z1); Label3.Caption := 'Z2: ' + FloatToStr(z2); end; end; В данном листинге представлен работоспособный код программы. Протокол работы и интерфейс программы, а также проверка вычислений программы представлены на рисунках 3, 4 и 5. Рис. 3 – Протокол работы и интерфейс программы Рис. 4 – Проверка вычислений программы при аргументе равным 110 Рис. 5 – Проверка вычислений программы при аргументе равным 5665 2.2 Разработка программного приложения к задаче №22.2.1 Математическое описание задачи №2. Написать программу, которая по введенному значению аргумента вычисляет значение функции, заданной в виде графика. Параметр R вводится с клавиатуры. Функция графика представлена на рисунке 6. Рис. 6 – Функция, заданная в виде графика 2.2.2 Словесно-формульное описание и графическое представление алгоритма решения задачи №2. Для решения данной задачи буду использовать разветвляющийся алгоритм. Словесное описание алгоритма: Начало. Ввод значений R и X. Проверка значения X, входит оно в диапазон [-4;10] или нет. Если «нет», то вывод данных «Вне диапазона». Если «да», то производится вычисление значения Y. Вывод значения Y. Конец. Графическое представление алгоритма представлено на рисунке 7, в виде блок-схемы. Рис. 7 – Графическое представление алгоритма решения задачи №2 2.2.3 Создание кода программы №2. После открытия программы создаем новую форму, добавляем на форму две метки Edit, три метки Label и одну метку Button. Рис. 8 – Окно главной формы Сгенерируем событие нажатия на кнопку: procedure TForm1.Button1Click(Sender: TObject); Присваиваем аргументам x, R, y все действительные числа: var x, R, y: Real; Прописываем проверку того, что строки являются вещественным числом, если это не так, то программа будет выдавать ошибку: begin if (not TryStrToFloat(Edit1.Text, R) or not TryStrToFloat(Edit2.Text, x) then begin Label3.Caption := 'Y: ошибка'; end else Прописываем вычисление значения Y: begin //вычисление if (x < -4) then Label3.Caption := 'Y: вне диапазона' else if ((x >= -4) and (x < -2)) then Label3.Caption := 'Y: ' + FloatToStr(x + 3) else if ((x >= -2) and (x < 4)) then Label3.Caption := 'Y: ' + FloatToStr(-x/2) else if ((x >= 4) and (x < 6)) then Label3.Caption := 'Y: -2' else if ((x >= 6) and (x <= (6 + 2 * R))) then Label3.Caption := 'Y: ' + FloatToStr(Sqrt(Sqr(R) - Sqr(x - 6 - R)) - 2) else if ((x > (6 + 2 * R))) then Label3.Caption := 'Y: вне диапазона' end; 2.2.4 Листинг и протокол работы программы №2. Листинг программы: procedure TForm1.Button1Click(Sender: TObject); var x, R, y: Real; begin if (not TryStrToFloat(Edit1.Text, R) or not TryStrToFloat(Edit2.Text, x)) then begin Label3.Caption := 'Y: ошибка'; end else begin //вычисление if (x < -4) then Label3.Caption := 'Y: вне диапазона' else if ((x >= -4) and (x < -2)) then Label3.Caption := 'Y: ' + FloatToStr(x + 3) else if ((x >= -2) and (x < 4)) then Label3.Caption := 'Y: ' + FloatToStr(-x/2) else if ((x >= 4) and (x < 6)) then Label3.Caption := 'Y: -2' else if ((x >= 6) and (x <= (6 + 2 * R))) then Label3.Caption := 'Y: ' + FloatToStr(Sqrt(Sqr(R) - Sqr(x - 6 - R)) - 2) else if ((x > (6 + 2 * R))) then Label3.Caption := 'Y: вне диапазона' end; end; В данном листинге представлен полностью работоспособный код программы. Протокол работы и интерфейс программы, а также проверка вычислений представлены на рисунках 9, 10, 11, 12. Рис. 9 – Протокол работы и интерфейс программы Рис. 10 – Проверка вычислений программы при отрицательном значении Х=-2 Рис. 11 – Проверка вычислений программы при положительном значении Х=6 Рис. 12 – Проверка вычислений программы при положительном значении Х=12 2.3 Разработка программного приложения к задаче №32.3.1 Математическое описание задачи №3. Вычислить и вывести на экран в виде таблицы значения функции, заданной с помощью ряда Тейлора, на интервале от хнач до хкон с шагом dx с точностью ξ. Таблицу снабдить заголовком и шапкой. Каждая строка таблицы должна содержать значение аргумента, значение функции и количество просуммированных членов ряда. Задание, выданное в соответствии с вариантом: 2.3.2 Словесно-формульное описание и графическое представление алгоритма решения задачи №3. Для решения данной задачи буду использовать линейный алгоритм. Словесное описание алгоритма: Начало. Ввод n. Вычисляем сумму ряда. Если сумма n<ξ, то добавляем еще слагаемые n. Если нет, то выводим значение суммы у и n. Конец алгоритма. Графическое представление алгоритма представлено на рисунке 13, в виде блок-схемы. начало Рис. 13 – Графическое представление алгоритма решения задачи 3 нет да n=n+1 конец Ʃn <ξ Вывод y и n Вычисляем сумму ряда Ввод n 2.3.3 Создание кода программы №3. После открытия программы создаем новую форму, добавляем на эту форму 4 метки Edit, 5 меток Label и одну метку Button. Рис. 14 – Окно главной формы Сгенерируем событие нажатия на кнопку: procedure TForm1.Button1Click(Sender: TObject); Присваиваем значениям xs, xe, d, e, y, xвсе действительные числа, а значениям Col, Row, n присваиваем целочисленный тип данных: var xs, xe, d, e, y, x : Real; Col, Row, n : Integer; Создаем диалоговое окно для сообщения об ошибке: begin ShowMessage('Ошибка. Все параметры должны быть числами.'); end else if ((Abs(xs) >= 1) or (Abs(xe) >= 1) or (Abs(d) >= 1) or (Abs(e) >= 1)) then begin ShowMessage('Ошибка. Все параметры должны быть меньше единицы по модулю'); end else if (xs > xe) then begin ShowMessage('Ошибка. Левая граница должна быть не больше правой'); end else Прописываем создание таблицы с помощью кода: begin //задаём количество столбцов и колонок StringGrid1.ColCount := 4; StringGrid1.RowCount := round((xe - xs) / d) + 1; //задаём заголовки таблицы StringGrid1.Cells[0,0]:= '№'; StringGrid1.Cells[1,0]:= 'X'; StringGrid1.Cells[2,0]:= 'Y'; StringGrid1.Cells[3,0]:= 'N'; //проходим построчно таблицу и заполняем for Row:= 1 to StringGrid1.RowCount-1 do begin x := xs + (Row - 1) * d; // текущее значение аргумента StringGrid1.Cells[0,Row]:=IntToStr(Row);//номер строки StringGrid1.Cells[1,Row]:=FloatToStr(x);//значение аргумента //обнуляем переменные после прошлой итерации y := 0; n := 0; //вычисляем сумму ряда с заданной точностью while (exp((2 * n + 1) * ln(x))/(2 * n + 1) >= e) do begin //добавляем к значению функиции слагаемые, пока эти слагаемые больше, чем эпсилон y := y + exp((2 * n + 1) * ln(x))/(2 * n + 1); n := n + 1; end; StringGrid1.Cells[2,Row]:=FloatToStr(2 * y); // значение ряда StringGrid1.Cells[3,Row]:=IntToStr(n); //количество слагаемых end; |