Автор работы: Пользователь скрыл имя, 29 Апреля 2013 в 12:28, курсовая работа
На всех этапах технического обеспечения информационных процессов для информатики ключевым вопросом есть эффективность. Для аппаратных средств под эффективностью понимают соотношение производительности оснащения к его стоимости. Для программного обеспечения под эффективностью принято понимать производительность работающих с ним пользователей. В программировании под эффективностью понимают объем программного кода, созданного программистами за единицу времени. В информатике все жестко ориентированно на эффективность. Вопрос как осуществить ту или другую операцию, для информатики важный, но не основной. Основным есть вопрос, как совершить данную операцию эффективно.
Введение……………………………………………………………………………
1. Решение задач на массив. Работа в Delphi…………………………………
1.1. Решение задачи на одномерный массив данных на Delphi……………….
1.2. Решение задачи на двумерный массив данных на Delphi…………………
2.Численные методы решения задач. Создать проект на Delphi, позволяющий решать задачи на численные методы. Выполнить проверку решения данных задач в программе MathCAD.............................
2.1. Вычисление определенного интеграла (метод трапеции)………..............
2.2. Решение трансцендентных уравнений (метод половинного деления)….
2.3. Решение системы линейных уравнений (метод Гаусса)………………….
2.4. Решение дифференциального уравнений (методом Эйлера)……….........
3. Оптимизационные модели. Составить в табличном процессоре Excel таблицу, заполнить таблицу, выполнить вычисления. Описать
теоретически выполненную работу……………................................................
3.1. Решение задачи линейного программирования симплекс-методом……...
3.2. Решение транспортной задачи………………………………………………
4. Создание презентации. Создать в программе PowerPoint презентацию, представляющую курсовую работу…………………….....................................
Заключение...............................................................................................................
Приложение 1. блок-схема алгоритма решения задачи на одномерный массив.........................................................................................................................
Приложение 2. блок-схема алгоритма решения задачи на двумерный массив
Приложение 3. блок-схема алгоритма решения задачи на двумерный массив
Приложение 4. блок-схема алгоритма решения задачи на двумерный массив
Приложение 5. блок-схема алгоритма решения задачи на двумерный массив
Линейный (одномерный) массив – это просто список элементов данных.
Примеры описания одномерных массивов:
Var B : array [0..5] ofreal
R : array [1..34] of char;
N : array [’A’..’Z’] of integer;
M: array of integer; {динамический массив}
Для доступа к элементу массива следует указать имя массива с последующим числом (индексом), заключенном в квадратные скобки.
Элементы массива можно использовать в любом выражении точно также как и значение константы или переменной.
Например, a[0]=11.2; a[1]=10.
Y = a[0] * 2 – a[1];
Часто бывает необходимо представить таблицы данных в формате строк и столбцов. Для этого используют многомерные массивы.
Доступ к элементам, например, двухмерного массива (матрицы) осуществляется с помощью двух индексов. Первый индекс отвечает за строку, второй – за столбец: а[1,3],а[0,4] и т.д., например:
Формат описания двумерного массива в разделе объявления переменных:
Var
<имя_массива>: array <[тип_индекса,тип_индекса]>of <тип_данных>
Например
Var
A: array [1..10, 1..10] of real;
Описывается двухмерный массив вещественных чисел A, который максимально может состоять из 10 строк и 10 столбцов. Нижняя граница индексов по обоим измерениям равна 1, верхняя –10.
1.1. Решение задачи на одномерный массив данных на Delphi
Дан массив целых чисел из n элементов, заполненный случайным образом числами из промежутка [-20,50].Удалить из него все элементы, в записи которых есть цифра 5.
Алгоритм решения задачи на одномерный массив в виде блок-схемы приведен в приложение 1.Форма с решением задачи одномерного массива на рис.1.
Рис.1.Форма с решением одномерного массива
Ниже приведена распечатка программы:
var
Form1: TForm1;
n:integer;
m: array of integer;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
begin
Randomize;
N:=strtoint(edit1.text);
SetLength(M,N);
edit2.text:='';
for i:=0 to N-1 do
begin
M[i]:=Round(Sin(Random(-20))*
edit2.text:=edit2.text+' '+inttostr(M[i]);
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
var
i,j,k,l:integer; s:string;
begin
edit3.text:=’’;
for i:=0 to n-1 do
begin
s:=inttostr(a[i]);
l:=length(s);
for k:=1 to l do
if s[k]='5' then
begin
for j:=i to n-2 do a[j]:=a[j+1];
n:=n-1;
end;
end;
for i:=0 to n-1 do edit3.Text:=edit3.Text+
end;
end.
procedure TForm1.Button3Click(Sender: TObject);
begin
edit1.text:='';
edit2.text:='';
edit3.text:='';
end;
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
case key of
'0'..'9',chr(8):;
',':if pos('.',edit1.text)>0 then key:=chr(0);
'-':if length(edit1.text)>0 then key:=chr(0);
else key:=chr(0);
end;
end;
end.
1.2. Решение задачи на двумерный массив данных на Delphi
Дан двумерный массив размером n*m. 1)Заменить каждый элемент четной строки нулем. Алгоритм решения задачи на двумерный массив в виде блок-схемы приведен в приложение 2.Форма с решением задачи двухмерного массива на рис.2.
Рис.2.Форма с решением задачи 1.2-1 на двухмерный массив
Ниже приведена распечатка программы:
var
Form1: TForm1;
a:array [0..30,0..30] of integer;
n,m,i,j:integer;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
Randomize;
n:=strtoint(edit1.Text);
m:=strtoint(edit2.Text);
for i:=0 to n-1 do
for j:=0 to m-1 do
a[i,j]:=Round(Sin(Random(100))
StringGrid1.RowCount:=n+1;
StringGrid1.ColCount:=m+1;
with StringGrid1 do
begin
i:=0;
for j:=1 to RowCount do
Cells[i,j]:=inttostr(j);
j:=0;
for i:=1 to ColCount do
Cells[i,j]:=inttostr(i);
end;
with StringGrid1 do
for i:=1 to n do
for j:=1 to m do
Cells[j,i]:=inttostr(a[i-1,j-
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
for i:=0 to n-1 do
for j:=0 to m-1 do
if a[i,j]mod 2=0 then
a[i,j]:=0 ;
with StringGrid2 do
begin
i:=0;
for j:=1 to RowCount do
Cells[i,j]:=inttostr(j);
j:=0;
for i:=1 to ColCount do
Cells[i,j]:=inttostr(i);
end;
with StringGrid2 do
for i:=1 to n do
for j:=1 to m do
Cells[j,i]:=inttostr(a[i-1,j-
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
edit1.Text:='';
edit2.Text:='';
end;
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
case key of
'0'..'9',chr(8):;
'.': if pos('.',edit1.text)>0 then key:=chr(0);
'–': if length( edit1.text)>0 then key:=chr(0);
chr(13): edit2.SetFocus;
else key:=chr(0);
end;
end;
procedure TForm1.Edit2KeyPress(Sender: TObject; var Key: Char);
begin
case key of
'0'..'9',chr(8):;
'.': if pos('.',edit2.text)>0 then key:=chr(0);
'–': if length( edit2.text)>0 then key:=chr(0);
chr(13): edit1.SetFocus;
else key:=chr(0);
end;
end;
end.
1.2. Решение задачи на двумерный массив данных на Delphi
Дан двумерный массив размером n*m. 2) Вставить после столбца, содержащего максимальный элемент столбец из нулей. Алгоритм решения задачи на двумерный массив в виде блок-схемы приведен в приложение 3.Форма с решением задачи двухмерного массива на рис.3.
Рис.3. Форма с решением задачи 1.2-2 на двухмерный массив
Ниже приведена распечатка программы:
var
Form1: TForm1;
a:array [0..30,0..30] of integer;
i,j,n,m:integer;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
Randomize;
n:=strtoint(edit1.Text);
m:=strtoint(edit2.Text);
for i:=0 to n-1 do
for j:=0 to m-1 do
a[i,j]:=Round(Sin(Random(30))*
StringGrid1.RowCount:=n+1;
StringGrid1.ColCount:=m+1;
with StringGrid1 do
begin
i:=0;
for j:=1 to RowCount do
Cells[i,j]:=inttostr(j);
j:=0;
for i:=1 to ColCount do
Cells[i,j]:=inttostr(i);
end;
with StringGrid1 do
for i:=1 to n do
for j:=1 to m do
Cells[j,i]:=inttostr(a[i-1,j-
end;
procedure TForm1.Button2Click(Sender: TObject);
var
k,j,i,max,jmax:integer;
begin
max:=a[0,0];
for i:=0 to n-1 do
for j:=0 to m-1 do
if a[i,j]>max then begin max:=a[i,j]; jmax:=j; end;
m:=m+1;
begin
for i:=0 to n-1 do
begin
for j:=m-1 downto jmax+1 do
a[i,j]:=a[i,j-1];
end;
for i:=0 to n-1 do
a[i,jmax+1]:=0;
StringGrid2.RowCount:=n+1;
StringGrid2.ColCount:=m+1;
with StringGrid2 do
begin
i:=0;
for j:=1 to RowCount do
Cells[i,j]:=inttostr(j);
j:=0;
for i:=1 to ColCount do
Cells[i,j]:=inttostr(i);
end;
with StringGrid2 do
for i:=1 to n do
for j:=1 to m do
Cells[j,i]:=inttostr(a[i-1,j-
end;
end;
procedure TForm1.Button3Click(Sender: TObject);
var
k,j,i,max,jmax:integer;
begin
max:=a[0,0];
for i:=0 to n-1 do
for j:=0 to m-1 do
if a[i,j]>max then begin max:=a[i,j]; edit3.text:=inttostr(max);
end;
end;
procedure TForm1.Button4Click(Sender: TObject);
begin
edit1.Text:='';
edit2.Text:='';
end;
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
case key of
'0'..'9',chr(8):;
'.': if pos('.',edit1.text)>0 then key:=chr(0);
'–': if length( edit1.text)>0 then key:=chr(0);
chr(13): edit2.SetFocus;
else key:=chr(0);
end;
end;
procedure TForm1.Edit2KeyPress(Sender: TObject; var Key: Char);
begin
case key of
'0'..'9',chr(8):;
'.': if pos('.',edit2.text)>0 then key:=chr(0);
'–': if length( edit2.text)>0 then key:=chr(0);
chr(13): edit1.SetFocus;
else key:=chr(0);
end;
end;
end.
1.2. Решение задачи на двумерный массив данных на Delphi
Дан двумерный массив размером n*m. 3) Удалить из него строку и столбец, на перекрестье которых находится максимальный по модулю элемент. Алгоритм решения задачи в двумерный массив в виде блок-схемы приведен на приложение 4.Форма с решением задачи двухмерного массива на рис.4.
Рис.4. Форма с решением задачи 1.2-3 на двухмерный массив
Ниже приведена распечатка программы:
var
Form1: TForm1;
a:array [0..30,0..30] of integer;
i,j,n,m,z:integer;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
Randomize;
n:=strtoint(edit1.Text);
m:=strtoint(edit2.Text);
for i:=0 to n-1 do
for j:=0 to m-1 do
a[i,j]:=Random(201)-100;
StringGrid1.RowCount:=n+1;
StringGrid1.ColCount:=m+1;
with StringGrid1 do
begin
i:=0;
for j:=1 to RowCount do
Cells[i,j]:=inttostr(j);
j:=0;
for i:=1 to ColCount do
Cells[i,j]:=inttostr(i);
end;
with StringGrid1 do
for i:=1 to n do
for j:=1 to m do
Cells[j,i]:=inttostr(a[i-1,j-
end;
procedure TForm1.Button3Click(Sender: TObject);
var
c:array [0..30] of integer;
i,j:integer;
p,k,f,st:integer;
begin
edit3.Text:='';k:=0;
for j:=0 to m-1 do
begin
for i:=0 to n-1 do
if a[i,j]<0 then
begin
k:=k+1;
c[k-1]:=j;
edit3.Text:=edit3.Text+
break;
end;
end;
for p:=0 to k-1 do
begin
st:=c[p];
for i:=0 to n-1 do
begin
for j:=st to m-1 do
begin
a[i,j]:=a[i,j+1];
end;
end;
for z:=p+1 to k do c[z]:=c[z]-1;
end;
m:=m-k;
StringGrid2.RowCount:=n+1;
StringGrid2.ColCount:=m+1;
with StringGrid2 do
begin
i:=0;
for j:=1 to RowCount do
Cells[i,j]:=inttostr(j);
j:=0;
for i:=1 to ColCount do
Cells[i,j]:=inttostr(i);
end;
with StringGrid2 do
for i:=1 to n do
for j:=1 to m do
Cells[j,i]:=inttostr(a[i-1,j-
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
edit1.Text:='';
edit2.Text:='';
end;
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
case key of
'0'..'9',chr(8):;
'.': if pos('.',edit1.text)>0 then key:=chr(0);
'–': if length( edit1.text)>0 then key:=chr(0);
chr(13): edit2.SetFocus;
else key:=chr(0);
end;
end;
procedure TForm1.Edit2KeyPress(Sender: TObject; var Key: Char);
begin
case key of
'0'..'9',chr(8):;
'.': if pos('.',edit2.text)>0 then key:=chr(0);
'–': if length( edit2.text)>0 then key:=chr(0);
chr(13): edit1.SetFocus;
else key:=chr(0);
end;
end;
end.
1.2. Решение задачи на двумерный массив данных на Delphi
Дан двумерный массив размером n*m. 4) Поменять местами последний и предпоследний столбцы. Алгоритм решения задачи на двумерный массив в виде блок-схемы приведен в приложение 5.Форма с решением задачи двухмерного массива на рис.5.
Рис.5. Форма с решением задачи 1.2-4 на двухмерный массив
Ниже приведена распечатка программы:
var
Form1: TForm1;
a:array [0..30,0..30] of integer;
n,m,i,j:integer;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
Randomize;
n:=strtoint(edit1.Text);
m:=strtoint(edit2.Text);
for i:=0 to n-1 do
for j:=0 to m-1 do
a[i,j]:=Round(Sin(Random(100))
StringGrid1.RowCount:=n+1;
StringGrid1.ColCount:=m+1;
with StringGrid1 do
begin
i:=0;
for j:=1 to RowCount do
Cells[i,j]:=inttostr(j);
j:=0;
for i:=1 to ColCount do
Cells[i,j]:=inttostr(i);
end;
with StringGrid1 do
for i:=1 to n do
for j:=1 to m do
Cells[j,i]:=inttostr(a[i-1,j-
end;
procedure TForm1.Button2Click(Sender: TObject);
var
p,k:integer;
begin
for i:=0 to n-1 do
begin
p:=a[i,m-2];
a[i,m-2]:=a[i,m-1];
a[i,m-1]:=p;
end;
with StringGrid2 do
begin
i:=0;
for j:=1 to RowCount do
Cells[i,j]:=inttostr(j);
j:=0;
for i:=1 to ColCount do
Cells[i,j]:=inttostr(i);
end;
with StringGrid2 do
for i:=1 to n do
for j:=1 to m do
Cells[j,i]:=inttostr(a[i-1,j-
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
edit1.Text:='';
edit2.Text:='';
end;
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
case key of
'0'..'9',chr(8):;
'.': if pos('.',edit1.text)>0 then key:=chr(0);
'–': if length( edit1.text)>0 then key:=chr(0);
chr(13): edit2.SetFocus;
else key:=chr(0);
end;
end;
procedure TForm1.Edit2KeyPress(Sender: TObject; var Key: Char);
begin
case key of
'0'..'9',chr(8):;
'.': if pos('.',edit2.text)>0 then key:=chr(0);
'–': if length( edit2.text)>0 then key:=chr(0);
chr(13): edit1.SetFocus;
else key:=chr(0);
end;
end;
end.
2.Численные методы решения задач
Решение задачи на ЭВМ разделяется на несколько этапов. Прежде всего, задача должна быть описана математически. В разных областях техники и экономики приходится встречаться с математическими задачами, для которых невозможно описать точное решение классическими методами. Для решения этих задач разработаны приближенные численные методы вычислительной математики, например, для решения дифференциального уравнения, системы линейных или нелинейных алгебраических уравнений и.т.п. Важно в этих методах оценивать точность вычисления, которая может расти за счет увеличения количества вычислений.
2.1. Вычисление определенного интеграла (метод трапеции)
Если функция f(x) непрерывна на отрезке [a,b] и известна ее первообразная F(х), то определенный интеграл от этой функции в пределах от a до b может быть вычислен по формуле Ньютона-Лейбница
— это площадь ограниченная подынтегральной кривой, осью абсцисс и ординатами.
Довольно часто в научно-
Кроме того, на практике подынтегральная функция f(x)часто задается таблично и тогда само понятие первообразной теряет смысл. Поэтому наиболее удобными методами вычисления определенных интегралов являются численные методы, основанные в вычислении знания определенного интеграла на основания ряда значений подынтегральной функции.
Широко известными алгоритмами
такого рода, использующими для