Автор работы: Пользователь скрыл имя, 15 Декабря 2011 в 15:26, курсовая работа
Целью данной курсовой работы является разработка программ на языках С, Pasсal и в среде Delphi для описания процессов развития динамики популяции. Данные процессы описываются моделью Ферхюльда, представляющей собой дифференциальное уравнение первого порядка. Решение данного уравнения будем искать с помощью метода Эйлера. В ходе курсового проектирования будет проведен обзор теоретических вопросов, разработан алгоритмы решения поставленной задачи.
Введение 3
1 Аналитический обзор 4
1.1 Определение популяции 4
1.2 Модель Ферхюльста (рождаемость и смертность с учетом роста численности) 5
1.3. Решение дифференциальных уравнений 6
1.4 Метод Эйлера. 7
1.5 Улучшенный метод Эйлера 9
2Язык Pascal 11
3 Язык С 14
4Среда быстрой разработки Delphi 15
5 Алгоритм решения задачи 17
6 Тестирование программ 18
6.1. Тестирование на языке С 18
6.2 Тестирование на языке Pascal 19
6.3 Тестирование приложения в Delphi 19
7 Листинг программ на языке С 22
8 Листинг программ на языке Pascal 24
9 Листинг программы в Delphi 26
Выводы 30
Список использованной литературы 31
Программа
разделана на 3 вкладки – решение
3 задач. Каждая вкладка подразделяется
еще на 2 вкладки – условие задачи и решение
задачи.
Рисунок
9 – Просмотр условия задачи
На вкладке решения
задач задаются параметры начальной
численности популяции p, время и
другие параметры модели. После нажатия
кнопки «Расчет» полученные значения
отображаются в таблице и строится график
зависимости численности популяции от
времени.
Рисунок
10 – Решение задачи №1
Рисунок
11 – Решение задачи №2
Рисунок
12 – Решение задачи №3
Задача 1
#include <stdio.h>;
#include <math.h>;
float fun(float p)
{
float p1;
p1=1*p-0.0001*pow(p,2);
return p1;
}
void euler(float p,int n)
{
int i;
float f1,p1;
p1=p;
i=1;
do
{
f1=fun(p);
p=p+f1;
p=p1+(f1+fun(p))/2;
printf("p1=%2.2f\n",p);
p1=p;
i++;
}
while (n>=i);
}
main()
{
int n;
float p;
clrscr();
printf("p=");
scanf("%f",&p);
printf("n=");
scanf("%d",&n);
euler(p,n);
getch();
}
Задача 2
#include <stdio.h>;
#include <math.h>;
float fun(float p)
{
float p1;
p1=-1*p+0.001*pow(p,2);
return p1;
}
void euler(float p,int n)
{
int i;
float f1,p1;
p1=p;
i=1;
do
{
f1=fun(p);
p=p+f1;
p=p1+(f1+fun(p))/2;
printf("p1=%2.2f\n",p);
p1=p;
i++;
}
while (n>=i);
}
main()
{
int n;
float p;
clrscr();
printf("p=");
scanf("%f",&p);
printf("n=");
scanf("%d",&n);
euler(p,n);
getch();
}
Задача 3
#include <stdio.h>;
#include "math.h";
float fun(float pp,float p)
{
float p1;
p1= 0.00001*1*(pp-p)+0.001*pow((
return p1;
}
void euler(float pp,float p,int n)
{
int i;
float f1,p1;
p1=p;
i=1;
do
{
f1=fun(pp,p);
p=p+f1;
p=p1+(f1+fun(pp,p))/2;
printf("p1=%2.2f\n",p);
p1=p;
i++;
}
while (n>=i);
}
main()
{
int n;
float p,pp;
clrscr();
printf("p=");
scanf("%f",&p);
printf("P=");
scanf("%f",&pp);
printf("n=");
scanf("%d",&n);
euler(pp,p,n);
getch();
}
Задача 1
uses crt;
function fun(p:double):double;
begin
fun := 1*p-0.0001*sqr(p);
end;
procedure euler(p:double;n:integer);
var
i:integer;
f1,p1:double;
begin
p1:=p;
i:=1;
repeat
f1:=fun(p);
p:=p+f1;
p:=p1+(f1+fun(p))/2;
writeln('p1=',p:2:2);
p1:=p;
i:=i+1;
until i>n
end;
var p: Double;
n: integer;
begin
clrscr;
write('p=');
read(p);
write('n=');
read(n);
euler(p, n);
read(n);
end.
Задача 2
uses crt;
function fun(p:double):double;
begin
fun := -1*p+0.001*sqr(p);
end;
procedure euler(p:double;n:integer);
var
i:integer;
f1,p1:double;
begin
p1:=p;
i:=1;
repeat
f1:=fun(p);
p:=p+f1;
p:=p1+(f1+fun(p))/2;
writeln('p1=',p:2:2);
p1:=p;
i:=i+1;
until i>n
end;
var p: Double;
n: integer;
begin
clrscr;
write('p=');
read(p);
write('n=');
read(n);
euler(p, n);
read(n);
end.
Задача 3
uses crt;
function fun(pp:double;p:double):
begin
fun := 0.00001*1*(pp-p)+0.001*exp(0.
end;
procedure euler(pp:double;p:double;n:
var
i:integer;
f1,p1:double;
begin
p1:=p;
i:=1;
repeat
f1:=fun(pp,p);
p:=p+f1;
p:=p1+(f1+fun(pp,p))/2;
writeln('p1=',p:2:2);
p1:=p;
i:=i+1;
until i>n
end;
var p,pp: Double;
n: integer;
begin
clrscr;
write('p=');
read(p);
write('P=');
read(pp);
write('n=');
read(n);
euler(pp,p,n);j
read(n);
end.
unit Unit2;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, jpeg, ExtCtrls, ComCtrls, StdCtrls, Buttons, TeEngine, Series,
TeeProcs, Chart, Grids,Math;
type
TForm2 = class(TForm)
PageControl1: TPageControl;
TabSheet1: TTabSheet;
TabSheet2: TTabSheet;
TabSheet3: TTabSheet;
PageControl2: TPageControl;
TabSheet4: TTabSheet;
TabSheet5: TTabSheet;
PageControl3: TPageControl;
TabSheet6: TTabSheet;
TabSheet7: TTabSheet;
Image1: TImage;
PageControl4: TPageControl;
TabSheet8: TTabSheet;
TabSheet9: TTabSheet;
Image2: TImage;
Image3: TImage;
Image4: TImage;
BitBtn1: TBitBtn;
Label1: TLabel;
Edit1: TEdit;
Label2: TLabel;
Edit2: TEdit;
StringGrid1: TStringGrid;
Chart1: TChart;
Series1: TLineSeries;
Label3: TLabel;
Edit3: TEdit;
Label4: TLabel;
Edit4: TEdit;
StringGrid2: TStringGrid;
Chart2: TChart;
BitBtn2: TBitBtn;
Series2: TLineSeries;
Label5: TLabel;
Edit5: TEdit;
Label6: TLabel;
Edit6: TEdit;
StringGrid3: TStringGrid;
Chart3: TChart;
Label7: TLabel;
Edit7: TEdit;
BitBtn3: TBitBtn;
Series3: TLineSeries;
Label8: TLabel;
Edit8: TEdit;
Label9: TLabel;
Edit9: TEdit;
Label10: TLabel;
Edit10: TEdit;
procedure BitBtn1Click(Sender: TObject);
procedure BitBtn2Click(Sender: TObject);
procedure BitBtn3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form2: TForm2;
a,b,c,pp,p,p1, f1: double;
i,n: integer;
implementation
{$R *.dfm}
function fun(p:double):double;
begin
fun := 1*p-0.0001*sqr(p);
end;
function fun2(p:double):double;
begin
fun2 := -1*p+0.001*sqr(p);
end;
function fun3(pp:double;p:double;a:
begin
fun3 := a*p*(pp-p)+b*exp(c*ln(pp-p));
end;
procedure TForm2.BitBtn1Click(Sender: TObject);
begin
p1:=StrToFloat(Edit1.Text);
n:=StrToInt(Edit2.Text);
Series1.Clear;
StringGrid1.RowCount:=n+1;
StringGrid1.Cells[0,0]:='t';
StringGrid1.Cells[1,0]:='p';
i:=1;
repeat
f1:=fun(p);
p:=p+f1;
p:=p1+(f1+fun(p))/2;
Информация о работе Технолгия разработки програмных продуктов