Программа Умножение многочленов

Содержание



Введение

1. Анализ предметной области

2. Постановка задачи 

3. Техническая часть

3.1 Разработка схемы алгоритма

3.2 Реализация программы на языке программирования

Заключение 

Список использованных источников





Введение



Курсовая работа, выполненная на тему «Умножение многочленов», разработана с целью сделать программу, способную выполнять умножение двух многочленов между собой. 

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

Данная программа позволяет производить операцию умножения двух многочленов между собой и получать результат в виде нового многочлена.

Данная программа может быть использована как одно из средств в областях, связанных с математическими вычислениями и расчетами.

Пояснительная записка состоит из трех разделов: анализа предметной части, постановки задачи и технической части.

В разделе «Анализ предметной части рассмотрены теоретические основы математической модели, приведено обоснование и словесное описание разрабатываемого алгоритма.

В разделе «Постановка задачи» рассматривается вопросы назначения программы, предъявлены требования к программе, выполнен выбор среды разработки и языка программирования.

	В разделе «Техническая часть» рассматривается назначения каждого блока, характеристика вычислительного процесса и его организация, приведен текст исходного программного модуля на выбранном языке программирования


1 Анализ предметной области



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

Математическая модель умножения многочленов представлена в формулах (1) и (2).



 	(1)

 	(2)



В частности,







Алгоритм умножения многочленов:

перемножение i-го и (k-i)-го элементов многочленов между собой, где k – номер элемента в многочлене-результате, а i – порядковый номер первого многочлена, (k-i) – порядковый номер второго многочлена;

сложение полученного результата с предыдущим произведением элементов многочленов;

переход к следующим элементам многочленов;

повторение пунктов 1-3 k раз для i-го элемента многочленов, где k – номер элемента в многочлене-результате, а i – порядковый номер для перемножающихся многочленов;

переход к следующему элементу многочлена-результата;

повторение пунктов 1-5 по числу элементов в многочлене-результате. 


2. Постановка задачи



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

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

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

Программа предназначена для следующих основных функций:	

		ввод размеров многочленов;

		ввод элементов многочленов;

		вывод результата перемножения многочленов.

Входной информацией будет являться:

- размер первого многочлена;

- размер второго многочлена;

- массив элементов первого многочлена;

- массив элементов второго многочлена.

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

Все внесенные изменения тут же визуально отображаются на экране.

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

Входная информация представлена в виде:

- массива элементов результирующего многочлена.

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

Для вывода выходной информации используется монитор.

Для решения выберем следующие идентификаторы:

- n - размер первого многочлена;

- m - размер второго многочлена;

- a[0..10] - массив элементов первого многочлена;

- b[0..10] - массив элементов второго многочлена;

- d[0..20] - массив элементов результирующего многочлена.

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

		комфорт и дружественность;

		развитая система подсказок;

		целостность и надежность данных.

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

		система должна обеспечивать машинное формирование входной информации и ее проверку, 

		выдачу информации на экран монитора.

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

Разрабатываемая система должна работать в любой версии операционных систем семейства Windows. 

Для этого рассмотрим наиболее распространенные средства реализации.

Необходимо сказать, что революционным шагом явилось появление визуального программирования основанного на принципе WYSIWYG (What you see is what you get), возникшего в Visual Basic и нашедшего блестящее воплощение в системах Delphi и C++Builder фирмы Borland. 

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

Благодаря визуальному объектно-ориентированному программированию была создана технология, получившая название быстрая разработка приложений, по-английски - RAD-Rapid Application Development. 

Системы Delphi и C++Builder это следующий шаг в развитии среды быстрой разработки приложений. 

Для реализации была выбрана системы Delphi и язык программирования Object Pascal, так как хотя C++Builder и Delphi похожи, но предпочтительнее использовать Delphi, как более простой и удобный для разработки небольших приложений и баз данных.


3 Техническая часть



3.1 Разработка схемы алгоритма



Алгоритм отражает последовательность выполнения задач системы, режимы работы системы и возможности перехода из одного режима работы в другой. Укрупненный алгоритм функционирования системы представлен на рисунке 1.

	Блок «начало» соответствует загрузке системы и выдачи главной формы. 





начало

к стр. 10

Ввод n

Ввод m

for i:=0 to 10 do

a[i] := 0

b[i] := 0

for k:=0 to 20 do

d[k] := 0

1

2

3

4

5

6

7

8



со стр. 9 

к стр.  11

for i:=0 to n-1 do

Если

a[i] число

Exit

Вы ввели ошибочное число в элементы 1-го многочлена. Повторите ввод.

a[i]:=StrToInt(StringGrid1.Cells[i,1]);

for i:=0 to m-1 do

Если

b[i] число

Exit

Вы ввели ошибочное число в элементы 2-го многочлена. Повторите ввод.

b[i]:=StrToInt(StringGrid2.Cells[i,1]);

StringGrid3.ColCount := n+m-1;

9

10

11

12

13

14

15

17

16

18

19



со стр.  10

конец

for k:=0 to n+m-2 do

for i:=0 to k do

d[i] := d[k];

d[k] := d[i] + a[i] * b[k-i];

StringGrid3.Cells[k,0] := 

'd' + IntToStr(k);

StringGrid3.Cells[k,1] := IntToStr(d[k]);

20

21

22

23

24

25

26

Рисунок 1 – Алгоритм функционирования системы



Блок 1 – Начало программы.

Блок 2 – Ввод количества элементов в 1-го многочлена.

Блок 3 – Ввод количества элементов в 2-го многочлена.

Блок 4 – Цикл по всем элементам массивов a и b.

Блок 5 – Инициализация нулями массива a.

Блок 6 – Инициализация нулями массива b.

Блок 7 – Цикл по всем элементам массива d.

Блок 8 – Инициализация нулями массива d.

Блок 9 – Цикл по количеству введенных элементов массива a.

Блок 10 – Проверка условия является ли введенное значение элемента 1-го массива числом.

Блок 11 – Присваивание введенного значения в i-ый элемент массива.

Блок 12 – Вывод сообщения об ошибке на экран.

Блок 13 – Прекращения выполненных следующих далее инструкций.

Блок 14 – Цикл по количеству введенных элементов массива b.

Блок 15 – Проверка условия является ли введенное значение элемента 2-го массива числом.

Блок 16 – Присваивание введенного значения в i-ый элемент массива.

Блок 17 – Вывод сообщения об ошибке на экран.

Блок 18 – Прекращения выполненных следующих далее инструкций.

Блок 19 – Задать количество ячеек таблицы элементов многочлена-результата.

Блок 20 – Цикл для всех элементов многочлена-результата.

Блок 21 – Цикл для суммирования произведений a[i]*b[k-i], из которых складывается значение элемента многочлена-результата.

Блок 22 – Вычисление значения части суммы, из которой складывается значение элемента многочлена-результата.

Блок 23 – Вычисление значения элемента многочлена-результата.

Блок 24 – Вывод подписи для ячейки таблицы многочлена-результата..

Блок 25 – Вывод в заданную ячейку таблицы значения элемента многочлена-результата. 

Блок 26 – Выход из программы.



3.2 Реализация программы на языке программирования



Программный продукт, выполнен при помощи языка программирования Object Pascal в интегрированной среде разработки Delphi.

Код программы на языке программирования Object Pascal, разработанной в системе разработки Delphi.



unit Unit1; // название модуля


interface // область описывающая интерфейс

uses // подключаемые модули

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

Dialogs, StdCtrls, Grids, Spin;

Type // описываемые типы

TForm1 = class(TForm)

Button1: TButton;

GroupBox1: TGroupBox;

Label3: TLabel;

SpinEdit1: TSpinEdit;

StringGrid1: TStringGrid;

GroupBox2: TGroupBox;

Label1: TLabel;

Label5: TLabel;

SpinEdit2: TSpinEdit;

StringGrid2: TStringGrid;

StringGrid3: TStringGrid;

Label2: TLabel;

procedure SpinEdit1Change(Sender: TObject);

procedure SpinEdit2Change(Sender: TObject);

procedure Button1Click(Sender: TObject);

procedure FormCreate(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var // объявление глобальных переменных

Form1: TForm1;

implementation // область описания реализации

{$R *.dfm}

// обработчик изменения значения в счетчике

procedure TForm1.SpinEdit1Change(Sender: TObject);

begin

StringGrid1.ColCount:=SpinEdit1.Value; // установить количество столбцов в таблице

StringGrid1.Cells[SpinEdit1.Value-1,0] := 'a' + IntToStr(SpinEdit1.Value-1); // установить надпись для столбца

end;

// обработчик изменения значения в счетчике

procedure TForm1.SpinEdit2Change(Sender: TObject);

begin

StringGrid2.ColCount:=SpinEdit2.Value;

StringGrid2.Cells[SpinEdit2.Value-1,0] := 'b' + IntToStr(SpinEdit2.Value-1);

end;

// обработчик нажатия кнопки

procedure TForm1.Button1Click(Sender: TObject);

var //объявление локальных переменных

a,b:array[0..10] of integer; // массивы элементов перемножаемых многочленов

d:array[0..20] of integer; // массив элементов результирующего многочлена

k,i:integer;

n,m:integer; // размеры многочленов

begin //начало процедуры

n:=SpinEdit1.Value; // размер 1-го многочлена

m:=SpinEdit2.Value; // размер 2-го многочлена

// инициализация многочленов нулями

for i:=0 to 10 do 

begin 

a[i] := 0;

b[i] := 0;

end;

for i:=0 to 20 do d[i] := 0;

// инициализация 1-го многочлена введенными значениями из таблицы формы

for i:=0 to n-1 do

begin

try 

a[i]:=StrToInt(StringGrid1.Cells[i,1]); // инициализация элемента массива введенным значением

except // исключение

Application.MessageBox('Вы ввели ошибочное число в элементы первого многочлена. Повторите ввод.', 'Умножение многочленов ', MB_OK + MB_ICONSTOP); // вывод сообщения на экран

Exit; // выход из процедуры

end;

end; 

// инициализация 2-го многочлена введенными значениями из таблицы формы

for i:=0 to m-1 do

begin

try

b[i]:=StrToInt(StringGrid2.Cells[i,1]); // инициализация элемента массива введенным значением

except

Application.MessageBox('Вы ввели ошибочное число в элементы второго многочлена. Повторите ввод.', 'Умножение многочленов ', MB_OK + MB_ICONSTOP); // вывод сообщения на экран

Exit; // выход из процедуры

end;

end;

StringGrid3.ColCount := n+m-1; // задать размер таблицы для многочлена-результата

// перемножение многочленов

for k:=0 to n+m-2 do

begin

for i:=0 to k do

begin

d[i] := d[k]; // нахождение произведения элементов многочленов

d[k] := d[i] + a[i] * b[k-i]; // нахождение элемента многочлена-результата

end;

StringGrid3.Cells[k,0] := 'd' + IntToStr(k); // вывод подписи для столбца таблицы со значениями элементов многочлена-результата 

StringGrid3.Cells[k,1] := IntToStr(d[k]); // вывод значения элемента многочлена-результата в таблицу на офрму 

end;

end; // конец процедуры обработчика нажатия кнопки

// события создания формы

procedure TForm1.FormCreate(Sender: TObject);

begin

Form1.SpinEdit1Change(Sender); // вызов обработчика счетчика

Form1.SpinEdit2Change(Sender); // вызов обработчика счетчика

end;

end. // конец всех инструкций


Заключение



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

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

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

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

Внедрение данной программы позволит автоматически перемножать многочлены с помощью компьютера.

В ходе выполнения курсовой работы был разработана программа «Project1.exe», выполненный при помощи языка программирования Object Pascal в интегрированной среде разработки Delphi.

Все этапы разработки программного комплекса описаны в пояснительной записке.


Список использованных источников



		Грис Д. Наука программирования. М.: Мир, 1984. – 416 с.,ил 

		Немюгин С.А. TURBO PASCAL. Программирование на языке высокого уровня.- СПБ.: Питер, 2003.

		Котов В.М., Волков И.А., Харитонович А.И. Методы алгоритмизации. Мн.: Нар.асвета, 1996. – 127 с.: ил.

		Культин Н.б. Delpi в примерах и задачах. – СПб.: БХВ – Петербург, 2006.

		Поган А.М. Delpi руководство программиста. – М.: Ескмо, 2006.

		Кандзюба С.П., Громов В.Н. Delphi базы данных и приложения. – М., СПб., К.: Diasoft, 2005.

		Иртегов Д. В. Введение в операционные системы. – СПб.: БХВ-Петербург, 2002. – 624 с.: ил.

		Системы отображения информации: Учебн. пособие для ВУЗов / Алиев Т.М., Пигдоров Д.И., Кривошеев В.П. – М.: Высш. школа, 1988. – 223 с.: ил.