Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
му_кп_матм_2203.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
932.86 Кб
Скачать

1. Техническое задание

на разработку программного продукта «Конкуренция»

1.1. Разработать программный продукт «Конкуренция»

1.1.1. Назначение программы.

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

1.1.2. Структура или входные данные.

Вводится начальное количество овец, зайцев, волков (Рисунок 1).

Рис. 1 Входные данные.

1.1.2. Интерфейс программы.

Интерфейс реализован с помощью меню (Рисунок 2):

  • Начальная расстановка случайная

  • Начальная расстановка из файла

  • Выход из программы

Рис. 2 Интерфейс программы.

1.1.4. Тип результата (выходные данные Рисунок 3).

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

Рис.3 Выходные данные.

1.2. Разработать руководства программиста.

1.3. Разработать руководства пользователя.

Приложение 4

4. Листинг программы:

4.1. Файл-проект life2.pas

uses crt,dos;

const menu_number: byte=1; {номер пункта меню}

revim : byte=1; {режим отображения: 1-пошаговый 2-быстрый 3-медленный}

ww1 : integer=100; {количество фигур по умолчанию}

ww2 : integer=180;

ww3 : integer=60;

menu_kol=3; {количество пунктов меню}

ky=22; kx=25; {размер матрицы}

var menu_a,menu_b : array [1..menu_kol] of byte; {для меню}

menu_c : array [1..menu_kol] of string;

a,b : array [0..ky+1,0..kx+1] of byte; {конфигурация: a-текущая, b-будущая}

prov : boolean; {для проверки существования файла}

n : longint; {номер поколения}

k1,k2,k3 : integer; {количество фигур}

t : string; {для работы с файлом}

filename : string; {имя файла}

s1,s2,s3,s4,s0: byte; {количество соседей}

x,y : byte; {текущие координаты в матрице}

j : byte; {счетчик}

d,e,key : char; {для опроса клавиатуры}

fig : char; {символ фигуры в тексте}

f : text; {файловая переменная}

label start;

{звук}

procedure beep(f,d:word);

begin

sound(f);

delay(d);

nosound;

end;

{заставка}

procedure zastavka;

var p,y,x,y1,x1,dx1,y2,x2,dx2: integer;

k: longint;

q: char;

begin

textcolor(7); textbackground(0);

clrscr; textbackground(2);

for y:=5 to 21 do begin gotoxy(9,y); write('│':63); end;

for y:=1 to 25 do

begin

textbackground(4);

gotoxy(1,y); write(' ');

gotoxy(78,y); write(' ');

end;

for y:=2 to 24 do

begin

textbackground(1);

gotoxy(3,y); write(' ');

gotoxy(76,y); write(' ');

end;

for y:=3 to 23 do

begin

textbackground(7);

gotoxy(5,y); write(' ');

gotoxy(74,y); write(' ');

end;

k:=1; p:=1;

x1:=11; dx1:=1; y1:=1;

x2:=11; dx2:=1; y2:=23;

repeat

textcolor(p+8); textbackground(2);

if int(k/2)=k/2 then

begin

gotoxy(x1,y1);

textbackground(4); write(' ');

textbackground(0); write(' ');

textbackground(4); write(' ');

gotoxy(x1,y1+1);

textbackground(1); write(' ');

textbackground(0); write(' ');

textbackground(1); write(' ');

gotoxy(x1,y1+2);

textbackground(7); write(' ');

textbackground(0); write(' ');

textbackground(7); write(' ');

x1:=x1+dx1;

if (x1=69) or (x1=6) then begin beep(900,100); dx1:=-dx1; end;

end;

if int(k/1)=k/1 then

begin

gotoxy(x2,y2);

textbackground(7); write(' ');

textbackground(0); write(' ');

textbackground(7); write(' ');

gotoxy(x2,y2+1);

textbackground(1); write(' ');

textbackground(0); write(' ');

textbackground(1); write(' ');

gotoxy(x2,y2+2);

textbackground(4); write(' ');

textbackground(0); write(' ');

textbackground(4); write(' ');

x2:=x2+dx2;

if (x2=69) or (x2=6) then begin beep(100,100); dx2:=-dx2; end;

end;

if int(k/100)=k/100 then p:=p+1;

if p=2 then p:=3; if p=8 then p:=1; k:=k+1;

if k=1000000 then k:=1;

if keypressed then q:=readkey;

if q=#13 then break;

delay(200);

until false;

end;

{печать всех фигур из матрицы a}

procedure prints;

begin

for y:=1 to ky do

for x:=1 to kx do

begin

if a[y,x]=0 then begin textcolor(0); fig:=' '; end;

if a[y,x]=1 then begin textcolor(11); fig:=#15; end;

if a[y,x]=2 then begin textcolor(10); fig:=#248; end;

if a[y,x]=3 then begin textcolor(12); fig:=#254; end;

gotoxy(x*2,y); write(fig);

end;

end;

{очистка матрицы a}

procedure cls;

begin

for y:=1 to ky do for x:=1 to kx do a[y,x]:=0; {элементы}

for y:=0 to ky+1 do begin a[y,0]:=4; a[y,kx+1]:=4; end; {вертикальные границы}

for x:=0 to kx+1 do begin a[0,x]:=4; a[ky+1,x]:=4; end; {горизонтальные границы}

b:=a; {в матрицу b то же самое}

end;

{случайное заполнение матрицы}

procedure slutch;

begin

j:=1;

repeat {генерация 1 фигуры}

y:=random(ky+1); x:=random(kx+1);

if a[y,x]=0 then a[y,x]:=1 else continue;

j:=j+1;

until j>k1;

j:=1;

repeat {генерация 2 фигуры}

y:=random(ky+1); x:=random(kx+1);

if a[y,x]=0 then a[y,x]:=2 else continue;

j:=j+1;

until j>k2;

j:=1;

repeat {генерация 3 фигуры}

y:=random(ky+1); x:=random(kx+1);

if a[y,x]=0 then a[y,x]:=3 else continue;

j:=j+1;

until j>k3;

end;

{печать номера поколения и количеств видов}

procedure printres;

begin

textcolor(9);

for y:=1 to 24 do begin gotoxy(53,y); write('│'); end;

gotoxy(55,5); textcolor(11); write('овечек ',k1,' ');

gotoxy(55,7); textcolor(10); write('зайцев ',k2,' ');

gotoxy(55,9); textcolor(12); write('волков ',k3,' ');

gotoxy(55,13); textcolor(15);

if revim=1 then write('Пошаговый режим ');

if revim=2 then write('Быстрый режим ');

if revim=3 then write('Медленный режим ');

gotoxy(55,2); textcolor(14); write('Поколение ',n);

end;

{подсчет количеств фигур}

procedure kol;

begin

k1:=0; k2:=0; k3:=0;

for y:=1 to ky do

for x:=1 to kx do

begin

if a[y,x]=1 then k1:=k1+1;

if a[y,x]=2 then k2:=k2+1;

if a[y,x]=3 then k3:=k3+1;

end;

end;

{определение количества соседей}

procedure sosed(y,x: word);

var z: byte;

procedure sos;

begin

if z=1 then s1:=s1+1;

if z=2 then s2:=s2+1;

if z=3 then s3:=s3+1;

if z=0 then s0:=s0+1;

if z=4 then s4:=s4+1;

end;

begin

s1:=0; s2:=0; s3:=0; s4:=0; s0:=0;

z:=a[y-1,x-1]; sos;

z:=a[y-1,x ]; sos;

z:=a[y-1,x+1]; sos;

z:=a[y+1,x-1]; sos;

z:=a[y+1,x ]; sos;

z:=a[y+1,x+1]; sos;

z:=a[y ,x-1]; sos;

z:=a[y ,x+1]; sos;

end;

{генерация нового поколения}

procedure gener;

var aa, bb :byte;

begin

for y:=1 to ky do

for x:=1 to kx do

begin

sosed(y,x);

aa:=a[y,x]; {что есть в этой клетке}

bb:=aa;

if aa=0 then {рождение}

begin {количество соседей:}

{овец зайцев волков}

if (s1=3) and (s2<3) and (s3=0) then bb:=1; {родилась овца}

if (s1<3) and (s2=3) and (s3=0) then bb:=2; {родился заяц}

if (s1<4) and (s2<6) and (s3=3) then bb:=3; {родился волк}

end;

if aa=1 then {смерть овцы}

begin

if (s1>3) then bb:=0; {теснота}

if (s1<2) then bb:=0; {одиночество}

if (s2>6) then bb:=0; {конкуренты}

if (s3>1) then bb:=0; {хищники}

if k3=0 then bb:=0; {болезни}

end;

if aa=2 then {смерть зайца}

begin

if (s2>3) then bb:=0; {теснота}

if (s2<2) then bb:=0; {одиночество}

if (s1>3) then bb:=0; {конкуренты}

if (s3>0) then bb:=0; {хищники}

if k3=0 then bb:=0; {болезни}

end;

if aa=3 then {смерть волка}

begin

if (s3>3) then bb:=0; {теснота}

if (s3<2) then bb:=0; {одиночество}

if (s1>4) then bb:=0; {защита}

if (s2>6) then bb:=0; {защита}

if k1+k2=0 then bb:=0; {еды не осталось}

end;

b[y,x]:=bb; {что будет в этой клетке}

end;

end;

{ввод с клавиатуры}

function wwod(xx,yy: integer; stroka: string; cvet: byte; ww: byte): integer;

var w,e,pr: integer;

ch: char;

z: string;

begin

write(stroka);

repeat

{$I-}

textcolor(cvet); readln(z);

{SI+}

val(z,w,e); if z='' then w:=ww;

pr:=ioresult;

if not ((pr=0) and ((w>0) and (w<ky*kx/3))) then

begin

textcolor(14);

write(' Введено неправильное значение!');

ch:=readkey;

if ch=#13 then

begin

gotoxy(1,wherey); clreol;

gotoxy(xx,yy); clreol;

end;

end;

until (pr=0) and ((w>0) and (w<ky*kx/3));

wwod:=w;

end;

{проверкa существования файла}

function proverka_file(name: string):boolean;

var p: boolean;

begin

p:=true;

{$I-}

assign(f,name);

reset(f);

close(f);

if ioresult<>0 then p:=false;

{$I+}

proverka_file:=p;

end;

begin

randomize;

zastavka;

{подсказка}

textcolor(0); textbackground(2); clrscr;

assign(f,'help');

reset(f);

while not eof(f) do

begin

readln(f,t);

writeln(t);

end;

close(f);

repeat

if keypressed then d:=readkey;

if d=' ' then break;

until false;

start:

revim:=1;

{меню}

menu_a[1]:=8; menu_b[1]:=25; menu_c[1]:=' Начальная расстановка случайная ';

menu_a[2]:=10; menu_b[2]:=25; menu_c[2]:=' Начальная расстановка из файла ';

menu_a[3]:=12; menu_b[3]:=25; menu_c[3]:=' Выход из программы ';

repeat

textbackground(0); clrscr;

gotoxy(29,4); textcolor(15); writeln('Выберите нужное действие:');

textbackground(0); textcolor(7);

for j:=1 to menu_kol do

begin

gotoxy(menu_b[j],menu_a[j]);

writeln(menu_c[j]);

end;

repeat

textcolor(14); textbackground(6);

gotoxy(menu_b[menu_number],menu_a[menu_number]);

write(menu_c[menu_number]);

d:=readkey;

textcolor(7); textbackground(0);

gotoxy(menu_b[menu_number],menu_a[menu_number]);

write(menu_c[menu_number]);

if d=#0 then e:=readkey;

if (d=#0) and (e=#72) then menu_number:=menu_number-1;

if menu_number<1 then menu_number:=3;

if (d=#0) and (e=#80) then menu_number:=menu_number+1;

if menu_number>3 then menu_number:=1;

until d=#13;

textcolor(14); textbackground(6);

gotoxy(menu_b[menu_number],menu_a[menu_number]);

write(menu_c[menu_number]);

textbackground(0);

gotoxy(1,15); textcolor(7);

for j:=1 to 80 do write('─'); writeln; writeln;

case menu_number of

1: {начальное расположение - случайное}

begin

cls;

textcolor(3); textbackground(0);

write(' Введите начальное количество');

k1:=wwod(38,18,' овечек ',11,ww1); writeln;

textcolor(2);

write(' Введите начальное количество');

k2:=wwod(38,20,' зайцев ',10,ww2); writeln;

textcolor(4);

write(' Введите начальное количество');

k3:=wwod(38,22,' волков ',12,ww3);

slutch;

end;

2: {начальное расположение - из файла}

begin

cls;

textcolor(2);

write(' Введите имя файла с начальной конфигурацией популяций ');

textcolor(10); readln(filename);

if filename='' then filename:='0';

prov:=proverka_file(filename);

if prov=false then filename:='0';

assign(f,filename);

reset(f);

y:=1;

while (not eof(f)) and (y<25) do

begin

readln(f,t);

for x:=1 to kx do t:=t+' ';

t:=copy(t,1,kx);

for x:=1 to length(t) do

begin

if t[x]='1' then a[y,x]:=1;

if t[x]='2' then a[y,x]:=2;

if t[x]='3' then a[y,x]:=3;

end;

y:=y+1;

end;

close(f);

end;

3: halt;

end;

{основной блок}

clrscr;

gotoxy(55,16); textcolor(6); write('Esc - выход в меню');

gotoxy(55,17); textcolor(6); write('Enter - быстрый режим');

gotoxy(55,18); textcolor(6); write('Tab - медленный режим');

gotoxy(55,19); textcolor(6); write('Пробел - пошаговый режим');

n:=0; {номер поколения}

repeat

prints; {печать поколения}

n:=n+1;

kol; {подсчет количества фигур}

printres; {печать номера поколения и количества фигур}

if k1+k2+k3=0 then

begin

gotoxy(21,10); textcolor(12); write('Все вымерли!');

gotoxy(12,13); textcolor(7); write(' Для продолжения нажмите ENTER');

gotoxy(55,16); textcolor(0); write(' ':25);

gotoxy(55,17); textcolor(0); write(' ':25);

gotoxy(55,18); textcolor(0); write(' ':25);

gotoxy(55,19); textcolor(0); write(' ':25);

gotoxy(55,13); textcolor(0); write(' ':25);

beep(200,400); readln; break;

end;

if revim=1 then {если пошаговый режим}

begin

beep(200,200);

key:=readkey;

if key=#27 then goto start; {ESC-выход в меню}

if key=#13 then revim:=2; {Enter-быстрый режим}

if key=#9 then revim:=3; {Tab-медленный режим}

end;

if revim=3 then {если медленный режим}

begin

beep(6000,200);

delay(10000);

end;

if keypressed then {смена режима из пошагового}

begin

key:=readkey;

if key=#27 then goto start; {ESC-выход в меню}

if key=' ' then revim:=1; {ПРОБЕЛ-пошаговый режим}

if key=#13 then revim:=2; {Enter-быстрый режим}

if key=#9 then revim:=3; {Tab-медленный режим}

end;

gener; {генерация нового поколения в b}

a:=b; {передача значений}

until false;

until false;

end.

Приложение 5

ОТЗЫВ

на курсовую работу (проект)

студента ___________________________________________ группы ______________

на тему «________________________________________________________________

_______________________________________________________________________»

по дисциплине «__________________________________________________________

_______________________________________________________________________»

1. Курсовая работа (проект) заявленной теме соответствует, не соответствует.

не нужное зачеркнуть

2. Оценка качества выполнения курсовой работы (проекта) (перечислить имеющиеся недостатки)

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

3. Оценка полноты разработки поставленных вопросов в курсовой работе (проекте)_____________

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

4. Оценка соответствия пояснительной записки требованиям ГОСТа 2.105-95 __________________

__________________________________________________________________________________________________________________________________________________________________________

5. Оценка курсовой работы (проекта) __________________________

_____________________/ _______________________

«____»_____________ 20___ г.

Приложение 6

Г ОУ СПО Марийский радиомеханический техникум

Допущен к защите

Зам. директора по УВР

__________Р.Н.Морозов

«___»___________200_г.

НАЗВАНИЕ КУРСОВОГО ПРОЕКТА

Пояснительная записка к курсовому проекту

по дисциплине «Математические методы»

МРМТ 230105_ _ _П3-КП

Разработчик

студент группы______

______________И.О.Ф.

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

______________И.О.Ф.

Нормоконтролер

_______________И.О.Ф.

Консультант по практичес- кому разделу

_____________И.О.Ф.

2006

Приложение 7

Г ОУ СПО Марийский радиомеханический техникум

Допущен к защите

Зам. директора по УВР

__________Р.Н.Морозов

«___»___________200_г.

ИМИТАЦИОННОЕ МОДЕЛИРОВАНИЕ МЕЖВИДОВОЙ КОНКУРЕНЦИИ В ТРЕХ ПОПУЛЯЦИЯХ.

ПРОГРАММА «КОНКУРЕНЦИЯ»

Пояснительная записка к курсовому проекту

по дисциплине «Математические методы»

МРМТ 230105_ _ _П3-КП

Разработчик

студент группы______

______________П.П. Петров

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

______________Н.Я. Смирнова

Нормоконтролер

_______________Г.А. Долгорукова

Консультант по практичес-кому разделу

______________Н.Я. Смирнова

2006

Литература

  1. Агальцов В.П., Волдайская И.В. Математические методы в программировании: Учебник. М: ИД «Форум»: ИНФА-М, 2006.

  2. Дегтярев Ю.П. Исследование операций. - М.: Высшая школа, 1986.

  3. Корбут А.А., Финкелыптейн Ю.Ю. Дискретное программирование. -М.:Мир, 1978.

  4. Кристофвдес Н. Теория графов. Алгоритмический подход. - М.: Мир, 1978.

  5. Липский В. Комбинаторика для программистов. - М.: Мир, 1988.

  6. Клейнрок Л. Теория массового обслуживания. - М.: Машиностроение, 1979.

  7. Ивченко Г.И. и др. Теория массового обслуживания. - М. Высшая школа, 1982.

  8. Шенок Р. Имитационное моделирование систем - искусство и наука.-М.: Мир, 1978.

  9. Гудман С, Хидегниеми С. Введение в разработку и анализ алгоритмов. - М.: Мир, 1981.

  10. Гмурман В.Е. Теория вероятностей и математическая статистика. Москва «Высшая школа» 1998.