和韵字搭配的女孩名字:龟图问题?算法,程序源码

来源:百度文库 编辑:高校问答 时间:2024/05/01 07:16:07
4.23(龟图)Logo语言在个人计算机用户中非常流行,该语言形成了龟图的概念。
假设有两个机器海龟,通过C++程序控制在房子中移动。在两个方向之一打开画笔,即向上或向下。画笔向下时,海龟跟踪移动的形状并留下移动的路径,画笔向上时,海龟自由移动不写下任何东西。在这个问题中,要模拟海龟的操作和生成计算机化的草图框。
用20*20数组floor,初始化为0。从数组中读取命令。跟踪任何时候海龟的当前位置和画笔的向上或向下状态。假设海龟总是从位置0,0开始,画笔向上。程序要处理的海龟命令如下:
命令 含义
1 笔向上
2 笔向下
3 右转
4 左转
5,10 前进10格(或几格)
6 打印20*20数组
9 数据结束(标记)
假设海龟接近平面中心。下列“程序”绘制和打印12*12正方形并让画笔向上:
2
5,12
3
5,12
3
5,12
3
5,12
1
6
9
画笔向下并移动海龟时,将数组floor的相应元素设置为1。指定命令6(打印)时,只要数组中右1,就显示星号或选择的其他符号,画一些有趣的图形。增加其他命令以增加龟图语言的功能

下面的程序可以让海龟转任意角度,我用它画了一个五角星,并且画了我的名字。
画五角星的输入为:
5,4
4,90
5,19
4,180
2
5,38
3,144
5,38
3,144
5,38
3,144
5,38
3,144
5,38
1
6
9

画我的名字的输入为:
1
5,10
4,90
5,19
2
4,180
5,18
4,180
5,9
4,90
5,10
3,90
5,8
3,180
5,16
3,180
5,8
4,90
5,10
3,90
5,9
3,180
5,18
1
5,2
4,90
5,20
2
3,135
5,4
1
3,45
5,4
2
3,135
5,4
1
4,135
5,16
2
4,165
5,10
3,180
5,10
1
3,165
5,20
3,90
5,10
3,135
5,1
2
5,6
3,180
5,3
3,45
5,9
3,180
5,5
3,90
5,3
3,180
5,8
3,90
5,6
3,180
5,12
3,180
5,10
1
4,90
5,3
2
4,90
5,8
3,90
5,9
3,90
5,8
3,90
5,9
6
9

源码如下:

#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include <math.h>

const int left_bound = -19;
const int right_bound = 20;
const int up_bound = -19;
const int down_bound = 20;

bool sea[down_bound - up_bound + 1][right_bound - left_bound + 1];
bool pen_down;
float row, col;
float drow = -1, dcol = 0;

void print_sea()
{
for (int i = up_bound; i <= down_bound; i++)
{
for (int j = left_bound; j <= right_bound; j++)
{
printf("%c ", ((sea[i-up_bound][j-left_bound])?'*':' '));
}
printf("\n");
}
}

void up_pen()
{
pen_down = 0;
}

void down_pen()
{
pen_down = 1;
if (pen_down && up_bound - 0.4 <= row && row <= down_bound + 0.4 && left_bound - 0.4 <= col && col <= right_bound + 0.4)
{
sea[(int)(row - up_bound + 0.5)][(int)(col - left_bound + 0.5)] = true;
}
}

void turn_left(int deg)
{
float pi = 3.1415926;
float alpha = deg*pi/180;
float drow_new = -sin(alpha)*dcol + cos(alpha)*drow;
float dcol_new = sin(alpha)*drow + cos(alpha)*dcol;
drow = drow_new;
dcol = dcol_new;
}

void turn_right(int deg)
{
turn_left(-deg);
}

void forward_n(int n)
{
for (int i = 0; i < n; i++)
{
row += drow;
col += dcol;
if (pen_down && up_bound - 0.4 <= row && row <= down_bound + 0.4 && left_bound - 0.4 <= col && col <= right_bound + 0.4)
{
sea[(int)(row - up_bound + 0.5)][(int)(col - left_bound + 0.5)] = true;
}
}
}

int main()
{
for (;;)
{
int cmd = 9;
scanf(" %d", &cmd);
switch (cmd)
{
case 1:
up_pen();
break;
case 2:
down_pen();
break;
case 3:
cmd = 90;
scanf(", %d", &cmd);
turn_right(cmd);
break;
case 4:
cmd = 90;
scanf(", %d", &cmd);
turn_left(cmd);
break;
case 5:
cmd = 0;
scanf(", %d", &cmd);
forward_n(cmd);
break;
case 6:
print_sea();
break;
case 9:
return 0;
default:
return 1;
}
}
return 0;
}

这么复杂的东西就给10分????
不干

#include <iostream>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
bool isup = true; //画笔向上
bool a[20][20];
int x=0,y=0; //(x,y)的起始点为(0,0)
int position=0; //海龟爬行的初始方向为向右

for(int i=0; i<20; i++)
for(int j=0; j<20; j++)
a[i][j] = 0;
int command1 = -1, command2=-1;

while(true)
{
cout << "Input command:/>";
cin >> command1;
switch(command1)
{
case 5: //前进command2格
{
cin >> command2;

switch(position)
{
case 0: //向右
for(i=0;i<command2;++i)
{y++;if(!isup)a[x][y]=1;}
break;
case 1: //向下
for(i=0;i<command2;++i)
{x++;if(!isup)a[x][y]=1;}
break;
case 2: //向左
for(i=0;i<command2;++i)
{y--;if(!isup)a[x][y]=1;}
break;
case 3: //向上
for(i=0;i<command2;++i)
{x--;if(!isup)a[x][y]=1;}
break;
default:
cout << "Error!" << endl;
}
break;
}
case 1: isup = 1;break;
case 2: isup = 0;break;
case 3: if(++position>4)position=0;break;
case 4: if(--position<0)position=4;break;
case 6:
for(i=0;i<20;++i)
{ for(int j=0;j<20;++j) cout<<'\t'<<a[i][j];
cout<<endl;
}
break;
case 9:return 0;
default:cout<<"Error!"<<endl;
}
}
return 0;
}

有错误,没有检查,太困了,要睡觉了,你自己查吧