Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Titulnye_listy (Восстановлен) (Восстановлен).docx
Скачиваний:
0
Добавлен:
26.09.2019
Размер:
325.79 Кб
Скачать

5 Заключение

По результатам проделанной работы можем сделать следующие выводы:

  • проведен сравнительный анализ языков программирования высокого уровня Си и Паскаль и сделан вывод, что для реализации курсового проекта эффективнее использовать язык программирования Си;

  • была поставлена задача провести сравнительный анализ языков программирования Си и Паскаль, а также разработать игру «Ханойская башня» с возможностью демонстрации для трех дисков;

  • разработан и реализован алгоритм игры «Ханойская башня», для демонстрации игры реализован рекурсивный алгоритм «Ханойская башня»;

  • создана компьютерная программа «Ханойская башня»;

  • проведены отладка и тестирование программы.

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

  1. Введение – История компьютера [Электронный ресурс] – URL: http://chernykh.net/content/view/12/36 (дата обращения: 19.05.2012).

  2. Паскаль (язык программирования) – Википедия [Электронный ресурс]: энциклопедия. – URL: http://ru.wikipedia.org/wiki/Паскаль_(язык_программирования) (дата обращения: 19.05.2012).

  3. Си (язык программирования) – Википедия [Электронный ресурс]: энциклопедия. – URL: http://ru.wikipedia.org/wiki/Си_(язык_программирования) (дата обращения: 19.05.2012).

  4. Йенсен К., Вирт Н. Паскаль. Руководство для пользователя и описание языка / Пер. с англ., предисл. И послесл. Д. Б. Подшивалова. – М: Финансы и статистика, 1982. – 151 с., ил.

  5. Брайан Керниган, Деннис Ритчи. Язык программирования C. – Москва: Вильямс, 2006. — 304 с.

  6. Строки в С и С++ [Электронный ресурс] – URL: http://www.rsdn.ru/article/cpp/cstr.xml (дата обращения: 19.05.2012).

  7. Разветвляющиеся алгоритмы. Оператор If [Электронный ресурс] - URL: http://informatics.mccme.ru/moodle/mod/book/view.php?id=533&chapterid=251 (дата обращения: 20.05.2012).

  8. Оператор выбора CASE [Электронный ресурс] – URL: http://informatics.mccme.ru/moodle/mod/book/view.php?id=533&chapterid=254 (дата обращения: 20.05.2012).

  9. Оператор ветвления – Википедия [Электронный ресурс]: энциклопедия. – URL: http://ru.wikipedia.org/wiki/Оператор_ветвления (дата обращения: 20.05.2012).

  10. Цикл (программирование) – Википедия [Электронный ресурс]: энциклопедия. – URL: http://ru.wikipedia.org/wiki/Цикл_(программирование) (дата обращения: 20.05.2012).

  11. Визуальный словарь [Электронный ресурс]: словарь. – URL: http://vslovar.org.ru

Приложение а (справочное)

Исходный код программы

Файл kurs.h

#include<graphics.h>

#include<stdlib.h>

#include<math.h>

#include<dos.h>

#include<mem.h>

#include <time.h>

#include<string.h>

#include<conio.h>

#include<stdio.h>

#include<ctype.h>

#define st_w getmaxx()/6

#define ry (rx)/3

#define hm 75//высота пунктов меню

#define y1m 100

extern int mas[3][10],disk_kol[3],count,h,m;

extern double tog;

void menu();

void info();

void demo();

void newgame();

void hanoy(int,int,int,int);

void perenos(int,int);

void game();

int win();

void getrecords();

void setrecords();

void records();

void show_records();

void input_str(char *);

void timer(int);

void pm(int,int);

void back();

void resst();

void cylinder(int,int,int,int,int,int);

void disk_add(int,int);

void disk_del();

void out_disk(int);

void out_from(int);

void out_to(int);

void out_count(int);

void strelka(int,int);

Файл hanoy.cpp

#include "kurs.h"

#include"drawing.h"

#include"records.h"

int mas[3][10],disk_kol[3],count,h,m;

void main(){int gd=9,gm=2;

initgraph(&gd,&gm,"");

setbkcolor(8);

setrgbpalette(2,19,65,108);

setrgbpalette(5,20,200,100);

getrecords();

menu();

}

void menu(){int key,sel=0;

settextjustify(CENTER_TEXT,CENTER_TEXT);

cleardevice();

setcolor(14);

settextstyle(0,0,4);

outtextxy(getmaxx()/2,60,"Ханойcкая башня");

settextstyle(0,0,2);

for(int i=0;i<5;i++)pm(i,0);

pm(0,1);

for(;;){

key=getch();

pm(sel,0);

switch(key){

case 80:{

if(sel<4)sel++;else sel=0;

break;}

case 72:{

if(sel>0)sel--;else sel=4;

break;}

case 13:{

switch(sel){

case 0:{game();break;}

case 1:{demo();break;}

case 2:{show_records();break;}

case 3:{info();break;}

case 4:{setrecords();closegraph();getch();exit(1);}

}

break;

}

}

pm(sel,1);

}

}

void info(){

char str[80];int x=75,y=120;

cleardevice();

setcolor(14);

settextstyle(0,0,4);

outtextxy(getmaxx()/2,50,"О программе");

settextstyle(0,0,1);

settextjustify(LEFT_TEXT,CENTER_TEXT);

FILE *f1=fopen("info.txt","rt");

for(;!feof(f1);x+=strlen(str)*8+16){

fscanf(f1,"%s",str);

if(x>getmaxx()-strlen(str)*8-50){x=50;y+=16;}

outtextxy(x,y,str);}

fclose(f1);

settextstyle(0,0,4);

settextjustify(CENTER_TEXT,CENTER_TEXT);

outtextxy(getmaxx()/2,y+50,"Управление:");

settextstyle(0,0,1);

settextjustify(LEFT_TEXT,CENTER_TEXT);

outtextxy(getmaxx()/2,y+88,"Взять диск:стрелка вверх");

outtextxy(getmaxx()/2,y+104,"Положить диск:стрелка вниз");

outtextxy(getmaxx()/2,y+120,"Сменить колышек:стрелки влево и вправо");

outtextxy(50,getmaxy()-30,"Выполнил: Одинецкий Анатолий, 841");

getch();

menu();

}

void game(){char str[20]="";

int st,key,up=0,from;

cleardevice();

setcolor(14);

outtextxy(getmaxx()/2,40,"Введите количество дисков от 3 до 10");

outtextxy(getmaxx()/2,80,"и нажмите Enter");

do {input_str(str);

m=atoi(str);}

while(m<3||m>10);

newgame();

st=0;

strelka(st,2);

key=getch();

for(timer(0);!win()&&(key=getch())!=27;)

switch(key){

case 80://вниз

{

if(up&&st!=from&&(disk_kol[st]==0||

mas[st][disk_kol[st]-1]>mas[from][disk_kol[from]-1]))

{

out_to(st);

perenos(from,st);

up=0;

}

break;}

case 72://вверх

{

if(disk_kol[st]){

from=st;

up=1;

out_from(from);

out_disk(mas[from][disk_kol[from]-1]);}

break;}

case 75://влево

{

strelka(st,0);

st--;

if(st<0)st=2;

strelka(st,2);

break;}

case 77://вправо

{

strelka(st,0);

st++;

if(st>2)st=0;

strelka(st,2);

break;}

}

menu();

}

void newgame(){

h=(getmaxy()-210)/m;

setmem(mas,30*sizeof(int),0);

setmem(disk_kol,3*sizeof(int),0);

count=0;

cleardevice();

back();

for(int i=0;i<m;i++){

mas[0][i]=m-i;

disk_add(0,mas[0][i]);

disk_kol[0]++;}

}

void perenos(int from,int to){

disk_kol[from]--;

mas[to][disk_kol[to]]=mas[from][disk_kol[from]];

mas[from][disk_kol[from]]=0;

count++;

disk_add(to,mas[to][disk_kol[to]]);

disk_kol[to]++;

disk_del(from,mas[to][disk_kol[to]-1]);

out_count(count);

}

int win(){

if(disk_kol[1]==m||disk_kol[2]==m){

timer(1);

cleardevice();

setcolor(14);

settextstyle(0,0,4);

outtextxy(getmaxx()/2,50,"Победа");

records();

return 1;}

else return 0;

}

void demo(){

m=3;

newgame();

setcolor(7);

outtextxy(getmaxx()/2,70,"Для продолжения нажмите любую кнопку");

hanoy(m,0,1,2);

getch();

menu();

}

void hanoy(int num,int from,int temp,int to){

if(num>0){

hanoy(num-1,from,to,temp);

getch();

out_from(from);

out_to(to);

out_disk(num);

perenos(from,to);

hanoy(num-1,temp,from,to);}

}

Файл drawing.h

#include "kurs.h"

void pm(int nomer,int nach){

const char *mas_menu[5]={"Новая игра","Демонстрация игры","Рекорды","О программе","Выход"};

if(nach){

setcolor(4);

setfillstyle(1,14);}

else{

setcolor(1);

setfillstyle(1,15);}

bar3d(getmaxx()/2-200,y1m+hm*nomer,getmaxx()/2+200,y1m+hm*(1+nomer)-hm/2,0,1);

outtextxy(getmaxx()/2,y1m+hm*nomer+hm/4,mas_menu[nomer]);

}

void back(){

setcolor(8);

setfillstyle(1,3);

settextstyle(0,0,1);

bar(0,10,getmaxx(),30);

outtextxy(110,20,"Перенести диск:");

outtextxy(270,20,"с ");

outtextxy(340,20,"колышка на");

outtextxy(500,20,"Перекладываний:");

setcolor(5);

setfillstyle(3,5);

bar3d(0,getmaxy()-85,getmaxx(),getmaxy(),0,1);

for(int i=0,y=getmaxy()-50;i<=5;i+=2,setcolor(5)){

int x=(i+1)*st_w;

setfillstyle(1,5);

fillellipse(x,y,st_w-5,(st_w-5)/3);

cylinder(x,y,10,1,3,20+m*h);}

}

void resst(int x, int y){

setcolor(1);

ellipse(x,y,180,360,10,3);

line(x-10,y,x-10,getmaxy()-70-m*h);

line(x+10,y,x+10,getmaxy()-70-m*h);

setfillstyle(1,3);

floodfill(x,y,1);

}

void cylinder(int x,int y,int rx,int color1,int color2,int height=0){

if(!height)height=h;

setcolor(color1);

setfillstyle(1,color2);

ellipse(x,y,180,360,rx,ry);

ellipse(x,y-height,0,180,rx,ry);

line(x-rx,y,x-rx,y-height);

line(x+rx,y,x+rx,y-height);

floodfill(x,y-height,color1);

ellipse(x,y-height,180,360,rx,ry);

}

void disk_add(int st,int num){

char nomer[3];

int x=(2*st+1)*st_w,

rx=10+num*(st_w-25)/m,

y=getmaxy()-50-h*disk_kol[st];

setcolor(0);

setfillstyle(1,0);

bar(x-rx,y-h-ry,x+rx,y);

cylinder(x,y,rx,14,2);

resst(x,y-h);

setcolor(15);

itoa(num,nomer,10);

outtextxy((2*st+1)*st_w,y+ry-h/2,nomer);

}

void disk_del(int st,int num){

int rx=10+num*(st_w-25)/m,

x=(2*st+1)*st_w,

y=getmaxy()-50-h*disk_kol[st];

cylinder(x,y,rx,0,0);

if(!disk_kol[st]){

setcolor(5);

line(x-st_w,getmaxy()-85,x+st_w,getmaxy()-85);

setfillstyle(3,5);

floodfill(x,y,5);

setfillstyle(1,5);

fillellipse(x,y,st_w-5,(st_w-5)/3);}

else{

rx=10+mas[st][disk_kol[st]-1]*(st_w-25)/m;

setcolor(14);

setfillstyle(1,2);

fillellipse(x,y,rx,ry);}

resst(x,y);

}

void out_disk(int disk){

char str[3];

setfillstyle(1,3);

bar(170,10,192,30);

setcolor(5);

itoa(disk,str,10);

outtextxy(181,20,str);

}

void out_from(int from){

char str[2];

setfillstyle(1,3);

bar(278,10,290,30);

bar(385,10,395,30);

setcolor(5);

itoa(from+1,str,10);

outtextxy(284,20,str);

}

void out_to(int to){

char str[2];

setfillstyle(1,3);

bar(385,10,395,30);

setcolor(5);

itoa(to+1,str,10);

outtextxy(390,20,str);

}

void out_count(int i){

char str[5];

setfillstyle(1,3);

bar(560,10,600,30);

setcolor(5);

itoa(i,str,10);

outtextxy(580,20,str);

}

void strelka(int st,int color){

int x=(2*st+1)*st_w,

y=110;

setcolor(color);

if(color){

int poly[24]={

x,y+15,

x-30,y-30,

x-25,y-35,

x-10,y-35,

x-10,y-50,

x-5,y-55,

x+5,y-55,

x+10,y-50,

x+10,y-35,

x+25,y-35,

x+30,y-30,

x,y+15};

drawpoly(12,poly);

setfillstyle(9,9);

floodfill(x,y,color);}

else{

setfillstyle(1,0);

bar(x-30,y-55,x+30,y+15);}

}

Файл records.h

#include "kurs.h"

double tog;

struct inf{

int count;

double time;

char name[20];

}rec[8];

void getrecords(){

FILE *f1=fopen("records.dat","rb");

fread(rec,sizeof(rec),1,f1);

fclose(f1);

}

void setrecords(){

FILE *f1=fopen("records.dat","wb");

fwrite(rec,sizeof(rec),1,f1);

fclose(f1);

}

void records(){

int koldisk;

char str[20]="",str2[10];

settextjustify(LEFT_TEXT,CENTER_TEXT);

settextstyle(0,0,1);

outtextxy(10,85,"Перекладываний:");

outtextxy(10,101,"Оптимально:");

outtextxy(10,117,"время:");

itoa(count,str2,10);

outtextxy(300,85,str2);

itoa(pow(2,m)-1,str2,10);

outtextxy(300,101,str2);

gcvt(tog,6,str2);

outtextxy(300,117,str2);

if(count<rec[m-3].count||count==rec[m-3].count&&tog<rec[m-3].time||!rec[m-3].count){

settextjustify(CENTER_TEXT,CENTER_TEXT);

outtextxy(getmaxx()/2,174,"Поздравляем! Рекорд побит! Введите имя и нажмите Enter");

input_str(str);

rec[m-3].count=count;

rec[m-3].time=tog;

strcpy(rec[m-3].name,str);}

getch();

menu();

}

void show_records(){

int p,y=120;

char str[10];

cleardevice();

setcolor(14);

settextstyle(0,0,4);

outtextxy(getmaxx()/2,50,"Рекорды");

settextstyle(0,0,1);

outtextxy(getmaxx()/2,y-40,"Bakspace - удалить");

outtextxy(30,y-20,"Дисков");

outtextxy(150,y-20,"Перекладываний");

outtextxy(250,y-20,"Время");

outtextxy(430,y-20,"Имя");

for(int i=0;i<8;i++,y+=24){

line(0,y-10,getmaxx(),y-10);

itoa(i+3,str,10);

outtextxy(30,y,str);

itoa(rec[i].count,str,10);

outtextxy(150,y,str);

gcvt(rec[i].time,6,str);

outtextxy(250,y,str);

outtextxy(430,y,rec[i].name);}

if(getch()==8){

setmem(rec,sizeof(rec),0);

show_records();}

menu();

}

void input_str(char *str){

char ch;

setfillstyle(1,0);

bar(0,getmaxy()/2-10,getmaxx(),getmaxy()/2+10);

settextstyle(0,0,2);

for(int i=0;(ch=getch())!=13&&i<19;){

if(ch==8){

if(i>0)str[--i]=0;}

if(isprint(ch)){

str[i]=ch;

str[++i]=0;}

bar(0,getmaxy()/2-10,getmaxx(),getmaxy()/2+10);

setcolor(14);

outtextxy(getmaxx()/2,getmaxy()/2,str);

}

}

void timer(int i){

static struct time t0,t1;

static double v0;

if(!i){

gettime(&t0);

v0=t0.ti_hour*3600+t0.ti_min*60+t0.ti_sec+(double)t0.ti_hund/100;}

else{

gettime(&t1);

double v1=t1.ti_hour*3600+t1.ti_min*60+t1.ti_sec+(double)t1.ti_hund/100;

tog=v1-v0;}

}

Тут вы можете оставить комментарий к выбранному абзацу или сообщить об ошибке.

Оставленные комментарии видны всем.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]