Ir ao conteúdo

Posts recomendados

Postado

Restrição de Complexidade Assintótica na Solução: NÃO

Tempo máximo: 60 segundos

Você projetou um robô que percorre os cômodos de sua residência e, neste processo, ele faz uma limpeza do piso. Este robô se move para frente e pode rotacionar em ângulos de 90°, portanto, se move em 4 direções (p/ cima, p/ baixo, p/ esquerda, p/ direita). Além disso, ele se move apenas entre os cômodos onde a porta de acesso está aberta. Inicialmente, uma porta fechada não é um problema, pois sua casa é inteligente e periodicamente ela envia o mapa atualizado da casa ao robô, ou seja, um mapa marcando os cômodos abertos e fechados. Deste modo seu robô é capaz de identificar se ele consegue ou não entrar no cômodo para limpar. Hoje faz 30 dias que seu robô está ajudando na limpeza da casa. Então você resolveu perguntar aos seus familiares se o robô está funcionando corretamente. Sua mãe lhe respondeu: “Ele ajuda bastante. Entretanto, ele poderia automaticamente identificar que vai ficar sem bateria e, neste instante, poderia voltar ao ponto de carga. Isso evita que as pessoas pisem nele”. Você pensou que isso é possível pois, com um sensor, seu robô consegue saber que a bateria está fraca. Então ele pode solicitar a casa o mapa atualizado e, com isso, ele pode identificar uma rota que o leva a base de carga. Então agora temos que atualizar o sistema do robô. Para isso projete um algoritmo que recebe como entra:

 

1) o mapa atualizado da casa; 2) o atual ponto onde o robô se encontra; 3) o ponto onde se encontra a base de carga; e gera como saída se ele consegue ou não chegar no ponto de carga. Entrada Cada entrada é formada por um único caso de teste. Na primeira linha de cada caso há dois números, representando as dimensões do mapa atualizado: 1) iLinhas – quantidade de linhas existentes no mapa; 2) jColunas – quantidade de colunas no mapa. As próximas iLinhas descrevem o mapa, que é formado por quatro caracteres diferentes: 1) espaço – representando uma área livre ou uma porta aberta; 2) # (hashtag) – representando um obstáculo intransponível, seja uma parede, seja uma porta fechada; 3) S (letra em uppercase) – representando o atual local do robô; 4) D (letra em uppercase) – representando o ponto de carga do robô. O mapa tem dimensão mínima de 3 linhas por 4 colunas, formando um quadrado ou um retângulo. Além disso, a primeira linha, a última linha, a primeira coluna e a última coluna, são paredes ou portas fechadas. Considere que há apenas um robô e um ponto de carga. Saída Para cada caso de teste, seu programa deve imprimir: “fica no mesmo lugar” (sem aspas) caso o robô não consiga voltar ao ponto de carga, ou “vai ao ponto de carga” (sem aspas) caso tenhaum caminho livre e possível para voltar ao ponto de carga. Restrições da Implementação C Seu código não pode usar rotinas de biblioteca para manipular/alterar os dados. Apenas as rotinas de biblioteca p/ interação com o teclado/tela (ex., printf, scanf, gets, ...) e as rotinas relacionadas à alocação de memória (ex. malloc, calloc, ...) são permitidas. Seu programa deve usar alguma implementação de árvore e/ou grafo (use apenas as que estudamos). Não utilize Vetores/matrizes como estrutura de dados, no lugar, utilize alguma implementação de lista encadeada. Seu programa DEVE usar o algoritmo BFS ou DFS. Seu programa NÃO deve utilizar variáveis globais.

 

GARANTA que não haverá desperdício de memória, seja por alocação extra, seja por não liberar a memória. Seu programa deve utilizar no mínimo três funções e/ou procedimentos, criados por você. Seu programa deve usar APENAS algoritmos que estudamos e foram apresentados em aula.

 

Eu fiz mas, não sei se esta certo e outra coisa esta dando erro de compilação e não consigo encontrar os erros.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAX 100

/* Estrutura do banco de dados do Robo*/
struct FL {
     char from[20];
     char to[20];
     char skip;
};

struct FL robo[MAX];

int f_pos=0; /*número de comodos na casa*/
int find_pos=0; /*indice do banco dados de busca*/
int tos=0;/*topo da pilha*/

struct stack bt_stack[MAX];/*pilha de retorno*/
void setup(void), route(void);
void assert_robo(char *from, char *to);
void push(char *from, char *to);
void pop (char *from, char *to);
void isrobo(char *from, char *to);
int find(char *from, char *anywhere);
int match(char *from, char *to);

void main (void)
{
    seyo();
    isrobo("front_door", "robo");
    route();
}

void setudp (void)
{
    assert_robo("front_door", lr);
    assert_robo("lr", "banheiro");
    assert_robo("lr", hall);
    assert_robo("hall", bd1);
    assert_robo("hall", bd2);
    assert_robo("hall","mb");
    assert_robo("lr", "cozinha");
    assert_robo("cozinha", "robo");
}

void assert_robo(char *from, char *to)
{
    if(f_pos<MAX){
        strcpy(robo[f_pos].from, from);
        strcpy(robo[f_pos].to, to);
        robo[f_pos].skip = 0;
        f_pos++;
    }
    else printf ( fica no mesmo lugar.\n);
}
/* Mostra a rota do robo*/
void rout(void){
    int t;

    t=0;
    while (t<tos){
        printf("%s", bt_stack[t].from);
        t++;
        if(t<tos) printf("para");
    }
    printf("\n");
}
/* Verifica se há uma coincidência.*/
natch(char *from, char *to){
     register int t;

     for(t=f_pos-1; t>-1; t--);
        if(!strcmp(robo[t].from, from) &&
           !strcmp(robo[t].to, to)) return 1;
        return 0; /*não encontrou*/
}

/*Dado from, pare em qualquer lugar.*/
find_pos = 0;
while (find_pos<f_pos){
    if(!strcmp(robo[find_pos].from, from)&&
       !robo[find_pos].skip{
           strcpy(anywhere, robo[find_pos].to);
           robo[find_pos].skip = 1;
           return 1;
       }
    find_pos++;
}
return 0;
}
/*Determina se há uma rota entre from e to.*/
void isrobo(char *from, char *to)
{
    char anywhere[20];

    if(match(from, to)){
        push(from, to);/*distância*/
        return;
    }
    if(find(from, anywhere)){
        push(from, to);
        isrobo(anywhere, to);
    }
    else if (tos>0){
      pop(from, to);
      isrobo(from, to);
   }
}
/*Rotinas de pilha*/
void push(char *from, char *to);
{
    if (tos<MAX){
    strcpy(bt_stack[tos].from, from);
    strcpy(bt_stack[tos].to, to);
    tos++;

   }
   else printf("Piha cheia. \n");
}
void pop(char *from, char *to)
{
  if(tos>0){
    tos--;
    strcpy(from, bt_stack[tos].from);
    strcpy(to, bt_stack[tos].to);
  }
  else printf("Pilha vazia.\n");
}

 

  • Curtir 1
Postado
Vetores/matrizes como estrutura de dados, no lugar, utilize alguma implementação de lista encadeada.
  Seu programa DEVE usar o algoritmo BFS ou DFS. Seu programa NÃO deve utilizar variáveis globais.

 

GARANTA que não haverá desperdício de memória, seja por alocação extra, seja por não liberar a memória.
  Seu programa deve utilizar no mínimo três funções e/ou procedimentos, criados por você.
  Seu programa deve usar APENAS algoritmos que estudamos e foram apresentados em aula.

 

Eu fiz mas, não sei se esta certo e outra coisa esta dando erro de compilação e não consigo encontrar os erros.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAX 100

/* Estrutura do banco de dados do Robo*/
struct FL {
     char from[20];
     char to[20];
     char skip;
};

struct FL robo[MAX];

 

Acima o final do enunciado, sua dúvida,  e o início de seu programa :) 

 

E já tem uma resposta: se o enunciado diz que não deve usar variáveis globais você não precisou nem de 10 linhas para declarar a primeira. Então sua dúvida inicial já tem uma resposta: não., não está certo o seu programa que sequer compila.

 

E está mal estruturado. Sugiro rever tudo isso. Separe as funções e as estruturas melhor. E restaure a definição da pilha e stack, como apontado por @devair1010e arrume a declaração ou os parâmetros de isrobo()

 

 

 

e implemente setup() e route()

  • Obrigado 1

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Mostrar mais  

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

Mostrar mais  
×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!