
- •Методические указания
- •1. Предисловие
- •2. Тематика курсовых проектов
- •3.2.3. Содержание
- •3.2.4. Введение
- •3.2.5. Техническое задание
- •3.2.6. Теоретический раздел
- •3.2.7. Практический раздел
- •3.2.8. Листинг программы
- •3.2.9. Заключение
- •4. Оформление курсового проекта
- •1. Техническое задание
- •4. Листинг программы:
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
Литература
Агальцов В.П., Волдайская И.В. Математические методы в программировании: Учебник. М: ИД «Форум»: ИНФА-М, 2006.
Дегтярев Ю.П. Исследование операций. - М.: Высшая школа, 1986.
Корбут А.А., Финкелыптейн Ю.Ю. Дискретное программирование. -М.:Мир, 1978.
Кристофвдес Н. Теория графов. Алгоритмический подход. - М.: Мир, 1978.
Липский В. Комбинаторика для программистов. - М.: Мир, 1988.
Клейнрок Л. Теория массового обслуживания. - М.: Машиностроение, 1979.
Ивченко Г.И. и др. Теория массового обслуживания. - М. Высшая школа, 1982.
Шенок Р. Имитационное моделирование систем - искусство и наука.-М.: Мир, 1978.
Гудман С, Хидегниеми С. Введение в разработку и анализ алгоритмов. - М.: Мир, 1981.
Гмурман В.Е. Теория вероятностей и математическая статистика. Москва «Высшая школа» 1998.