标题:请教各位C语言的专家一道关于“吸尘机器人”程序的题目改如何编写
只看楼主
sodimi
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2014-11-19
结帖率:100%
已结贴  问题点数:20 回复次数:4 
请教各位C语言的专家一道关于“吸尘机器人”程序的题目改如何编写
题目要求是这样:有一个吸尘机器人在一个已经生成好的地图里进行吸尘工作(地图由多个正方的单位格子组成,地图的X和Y轴的长度或者说是格子数由编程者输入,地图在生成的时候会随机在此地图上出现1-20个障碍物),地图上的灰尘位置也是随机的但是灰尘的数量和一个变量Y有关(比如Y=1表示地图上每个格子都有灰尘,如果Y=4则是每4个格子会随机出现1个有灰尘的格子)而且同时还会和另一个变量X有关(X表示在机器人做了N个‘动作’所消耗的时间,经过这段时间会有一个新的灰尘随机出现在机器人走过的格子中),机器人带有扫描仪可以预先扫描到障碍物和灰尘的位置以便选择最近的灰尘和最捷径的路线。机器人有一个电池容量为C,机器人每做一个‘动作’就会消耗掉一个单位的电量(通俗点就是一格电),机器人的‘动作’包括‘走一个格子’、‘吸一个灰尘’或是‘旋转一次’(例如:如果机器人在一个格子里做了走、吸、转三个动作也就代表在一个格子里它消耗个三格电)。地图的起始点也是随机生成的(会出现在地图的任何一个格子上),在地图的起始点有一个充电器,机器人要在没电之前返回起始点进行充电,充电的时间为CT,充满电后机器人将继续执行吸尘工作。如果在没电之前机器人未能返回起始点进行充电程序将结束。此外机器人的储灰囊也是有容量限制的,容量为S,一旦储灰囊满程序将自动结束。程序开始之前会为机器人定义一个总的模拟动作的数量T如果在完成T个动作后程序将自动结束(也就是说:“T-走的数-吸的数-转的数==0”程序结束)。最后题目要求要在屏幕上显示机器人行走的步数和旋转的次数。下面有个一个地图生成的PAP希望能给大家有一定帮助,由于只有德语版PAP的所以只能请大家见谅了,不过相信专家们一看就懂了,(*^__^*) 嘻嘻……。我在编程遇到的最大问题就是不知道如何编写机器人在随机生成的障碍物前如何绕开障碍物还要保持最捷径的路径。
粗略翻译:Initialiserung der Umgebung:环境生成
                 Bitte geben Sie die Größe des Feldes in x-Richtung ein: 请输入地图的X方向的值。
                 Tabelle_max_X: X方向最大值
                 Feld_X=1:格子_X=1
                 radom(0,99)>=Hindernisse:随机生成0-99个障碍物(我的题目里要求是1-20个,所以不要理这个,呵呵!)
期待各位大人们的指导..
刚刚写出了完整的PAP流程图,希望各位大人能够继续帮助我写完这个C语言程序
roboter.pdf (119.41 KB)


[ 本帖最后由 sodimi 于 2014-11-21 19:23 编辑 ]
搜索更多相关主题的帖子: 机器人 扫描仪 C语言 如何 
2014-11-19 05:45
espier
Rank: 2
等 级:论坛游民
帖 子:8
专家分:85
注 册:2014-11-12
得分:20 
/*做到赋值路障了,不过一直赋值失败!程序作用:输入x y值,然后绘制坐标系,然后赋值坐标生成标识1234...x*y,然后产生小于x*y范围内的20个随机数,然后判断若与坐标标识相等则赋值为零,否则正常显示坐标,若判断e+=1数组为零则显示石否则正常显示。现在就是无法将石和正常坐标显示正确。*/
#include<stdio.h>
#include<stdlib.h>
#include<dos.h>
#define N 10000
main()
{
    int y0, x0, a, b, c[N], d[N], e, f, i, x, y;
    printf("智能机器启动中\n\n");
  v:srand((int)time(0));
    printf("请输入 x 和 y 绘制地图:\n");
    scanf("%d %d", &x, &y);
    printf("绘制中\n");
    sleep(3);
    i = x * y;e=0;
    for (y0 = 1; y0 <= y; y0++)
    {
        printf("\n");
        for (x0 = 1; x0 <= x; x0++)
        {
            printf(" [%d,%d]", x0, y0);
            e += 1;
            c[e] = (x0 - 1) * y + y0;
        }
    }
    printf("\n正在赋值随机数据...\n");
    sleep(3);
    for (a = 1; a <= 20; a++)
    {
        d[a] =(int)(rand() % i);
        printf(" %d ", d[a]);
        for (b = 1; b <= i; b++)
        {
            if (d[a] == c[b])
                c[b] = 0;
            else
                break;
        }
    }f=0;
    for (y0 = 1; y0 <= y; y0++)
    {
        printf("\n");
        for (x0 = 1; x0 <= x; x0++)
        {
            f += 1;
            if (c[f] == 0)
                printf("石");
            else
                printf(" [%d,%d]", x0, y0);
        }
    }
    sleep(3);
    printf("\n正在分析地图坐标...\n");
    sleep(3);
    for (a = 1; a <= i; a++)
        printf("%d ", c[a]);
    printf("\n");
    goto v;
}

[ 本帖最后由 espier 于 2014-11-20 08:08 编辑 ]
2014-11-20 02:32
sodimi
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2014-11-19
得分:0 
回复 2 楼 espier
十分感谢,已经对我有很大很大的帮助了,非常感谢
2014-11-20 07:01
fogmaple
Rank: 4
来 自:江西省赣州市于都县
等 级:业余侠客
威 望:1
帖 子:119
专家分:233
注 册:2014-7-28
得分:0 
以下是引用espier在2014-11-20 02:32:27的发言:

/*做到赋值路障了,不过一直赋值失败!程序作用:输入x y值,然后绘制坐标系,然后赋值坐标生成标识1234...x*y,然后产生小于x*y范围内的20个随机数,然后判断若与坐标标识相等则赋值为零,否则正常显示坐标,若判断e+=1数组为零则显示石否则正常显示。现在就是无法将石和正常坐标显示正确。*/
#include<stdio.h>
#include<stdlib.h>
#include<dos.h>
#define N 10000
main()
{
    int y0, x0, a, b, c[N], d[N], e, f, i, x, y;
    printf("智能机器启动中\n\n");
  v:srand((int)time(0));
    printf("请输入 x 和 y 绘制地图:\n");
    scanf("%d %d", &x, &y);
    printf("绘制中\n");
    sleep(3);
    i = x * y;e=0;
    for (y0 = 1; y0 <= y; y0++)
    {
        printf("\n");
        for (x0 = 1; x0 <= x; x0++)
        {
            printf(" [%d,%d]", x0, y0);
            e += 1;
            c[e] = (x0 - 1) * y + y0;
        }
    }
    printf("\n正在赋值随机数据...\n");
    sleep(3);
    for (a = 1; a <= 20; a++)
    {
        d[a] =(int)(rand() % i);
        printf(" %d ", d[a]);
        for (b = 1; b <= i; b++)
        {
            if (d[a] == c)
                c = 0;
            else
                break;
        }
    }f=0;
    for (y0 = 1; y0 <= y; y0++)
    {
        printf("\n");
        for (x0 = 1; x0 <= x; x0++)
        {
            f += 1;
            if (c[f] == 0)
                printf("石");
            else
                printf(" [%d,%d]", x0, y0);
        }
    }
    sleep(3);
    printf("\n正在分析地图坐标...\n");
    sleep(3);
    for (a = 1; a <= i; a++)
        printf("%d ", c[a]);
    printf("\n");
    goto v;
}

嗯,非常的不错 ,值得借鉴
2014-11-20 11:59
sodimi
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2014-11-19
得分:0 
刚刚写出了完整的PAP流程图,希望各位大人能够继续帮助我写完这个C语言程序。完整PAP在附件里PDF格式,谢谢各位了
2014-11-21 19:26



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-438844-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.757068 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved