Você está na página 1de 13

Mtodos de Programao

Relatrio do Projecto do 1 Semestre

Nome:
N :
E-Mail:

Gilberto Gomes Morim


65214
a65214@alunos.uminho.pt

Introduo

Este projecto servir para pr prova os conhecimentos adquiridos nas


aulas de Programao que tive ao longo do semestre, nomeadamente aos
contedos programticos de leitura de dados, ciclos, estruturas de
comparao e armazenamento de variveis.
Esses contedos sero a base para a construo de um programa em
linguagem ANSI C que leve um pequeno robot a executar uma misso de
reconhecimento e mapeamento num planeta desconhecido. Este programa
dever ser capaz de contemplar as capacidades de anlise do robot e de
deciso conforme o cenrio apresentado.
Espero que este projecto contribua o mais possvel para o desenvolvimento
das minhas capacidades enquanto programador e para o desenvolvimento
da capacidade de resolver os problemas com que me deparar.

O Problema
2

O problema colocado foi o seguinte:


Admita que a EASA (Agncia Espacial da Terra) descobriu um novo planeta.
Este planeta foi baptizado de Atlantis devido s suas semelhanas com o
velho e lendrio continente desaparecido uma vez que a sua superfcie
apresenta um imenso oceano. Para alm do referido oceano, a superfcie do
planeta Atlantis possui milhares de pequenas ilhas. Como forma de traar
os mapas dessas ilhas, a EASA construiu um robot dedicado
especificamente a essa tarefa. Esse robot colocado junto costa ocenica
de uma das ilhas, devendo percorr-la totalmente de forma a traar os
diversos mapas
Ento, a tarefa que nos foi dirigida foi: escrever o programa que controle o
robot na sua misso de explorao e mapeamento. E que caractersticas
deveria o programa ter para concretizar o sucesso do robot? Que operaes
deveria realizar? Que opes possuiria?
O exemplo que nos foi dado foi o seguinte:

Figura 1 - Mapa-exemplo (NOTA: Este mapa no representa obrigatoriamente


Atlantis, logo a soluo no foi concebida para este mapa)

Como pode ser observado, o mapa da ilha a ser percorrida foi dividido em
quadrados, e a cada um dos quadrados pertencia um tipo de superfcie:
Terra ou gua.
Ou seja, dito de outra maneira, o objectivo do robot era identificar as partes
Terra junto ao oceano, de modo a delinear a fronteira da ilha. Portanto, o
robot devia ser programado de modo a reconhecer o tipo de superfcie sua
volta e mover-se de acordo com a informao recolhida.

Soluo
Como j foi referido, o objectivo do robot identificar as superfcies sua
volta e agir de acordo com a informao recolhida.
A forma de agir a seguinte: Temos o robot numa determinada posio, e
necessrio avaliar as superfcies. Imaginemos a seguinte situao:
O robot analisa o terreno em seu redor e pensa:
- Existe gua nas posies x e y minha volta e as restantes so terra, isso
significa que vou ter de me deslocar na direco z
este o raciocnio necessrio fazer em cada cenrio, ou seja, de cada vez
que o robot se move. ento claro que, dependendo das posies em que
exista terra e gua, o robot vai se comportar de maneira diferente.
Supondo o seguinte cenrio:
Legenda:
Cinzento
gua
Branco Terra

Qual a prxima direco do robot?


A resposta seria imediata: ele tomar a direco Nordeste. Porqu? Porque
tem gua nas posies a Este a Sudeste dele e se se mover para essa
direco continua com gua por perto, logo continua junto costa.
Esta a chave para a resoluo deste problema.
Uma pequena observao: tambm poderia ser argumentado que mover-se
para Noroeste ou para Sudeste tambm seria possvel. de facto verdade,
mas na minha resoluo do problema, decretei prioridade em verificar
movimentos para Norte e para Este, e que se houvesse movimentos
possveis nestas direces, deveriam ser estas executadas em vez de outra
direco tambm disponvel.
E em que posies deve existir gua para que o robot se mova numa
determinada direco?
o que vai ser demonstrado em seguida.

Para facilitar a indicao, vamos numerar as posies.

2
3

7
6

Para se movimentar para:

Norte:
Legenda:
Cinzento gua
Branco Terra
Verde Movimento

Tem de ter pelo menos a posio 7 com gua e a 0 com terra.


Nordeste:

Tem de ter pelo menos a posio 6 com gua e a 7 com terra.

Noroeste:

Tem de ter pelo menos a posio 0 com gua e a 1 com terra.

Oeste:

Tem de ter pelo menos a posio 1 com gua e a 2 com terra.

Sudeste:

Tem de ter pelo menos a posio 4 com gua e a 5 com terra.

Sudoeste:

Tem de ter pelo menos a posio 2 com gua e a 3 com terra.

Sul

Tem de ter pelo menos a posio 3 com gua e a 4 com terra.

No entanto, a ordem pela qual se verifica as casas em volta do robot de


extrema importncia. necessrio verificar primeiro as casas que verificam
as direces Norte, Nordeste e Noroeste, pois so essas as casas mais
propensas a fazer o robot avanar. Caso estas se encontrem bloqueadas
que se deve verificar se possvel mover-se nas direces Oeste, Sudoeste,
Sul e Sudeste.
Mas para esta soluo poder ser directamente incutida no robot, ter de ser
escrita em cdigo, nomeada mente em linguagem C.

Para comear, necessrio criar dois vectores para armazenar as


coordenadas da posio do robot e das casas em seu redor.

ORIENTA
SUP-0 SUP-1 SUP-2 SUP-3 SUP-4 SUP-5 SUP-6 SUP-7
O
O vector dirsup responsvel por armazenar a orientao actual do robot
e o tipo de superfcies das posies volta. Este vector pode ser
representado da seguinte maneira:
Ex.: Sup-1 Superfcie
da posio 1.

O vector coord serve para armazenar a coordenada actual e as


coordenadas das casas volta. Pode ser representado assim:

COORDENADA X DA POSIO DO
ROBOT
COORDENADA X DA POSIO 0

COORDENADA Y DA POSIO DO
ROBOT
COORDENADA Y DA POSIO 1

Em seguida necessrio recolher as coordenadas das posies circundantes


ao robot e o tipo de superfcie. Para tal usa-se um ciclo que guarda a
coordenada X na primeira coluna do vector coord, a coordenada Y na
segunda coluna do vector coord e o tipo de superfcie no vector dirsup.
Neste vector, as casas com terra esto representadas pelo nmero um,
enquanto as casas com gua esto representadas com o nmero zero.
Depois de os dados serem recolhidos, vai ser necessrio comparar os tipos
de superfcie em cada casa, e conforme a existncia de zeros ou uns em
diferentes casas vai determinar a direco.
Para o robot se mover para:
Norte se a posio 8 do vector dirsup (correspondente casa 7 do
esquema de posio do robot) contiver um 0 e a posio 1 (correspondente
casa 0) contiver um 1. Vai imprimir o nmero 0 para indicar a direco
8

SUP-8

Norte.
Noroeste se a posio 1 do vector dirsup (correspondente casa 0 do
esquema de posio do robot) contiver um 0 e a posio 2 (correspondente
casa 1) contiver um 1. Vai imprimir o nmero 1 para indicar a direco
Noroeste.
Oeste se a posio 2 do vector dirsup (correspondente casa 1 do
esquema de posio do robot) contiver um 0 e a posio 3 (correspondente
casa 2) contiver um 1. Vai imprimir o nmero 2 para indicar a direco
Oeste.
Sudoeste se a posio 3 do vector dirsup (correspondente casa 2 do
esquema de posio do robot) contiver um 0 e a posio 4 (correspondente
casa 3) contiver um 1. Vai imprimir o nmero 3 para indicar a direco
Sudoeste.
Sul se a posio 4 do vector dirsup (correspondente casa 3 do esquema
de posio do robot) contiver um 0 e a posio 5 (correspondente casa 4)
contiver um 1. Vai imprimir o nmero 4 para indicar a direco Sul.
Sudeste se a posio 5 do vector dirsup (correspondente casa 4 do
esquema de posio do robot) contiver um 0 e a posio 6 (correspondente
casa 5) contiver um 1. Vai imprimir o nmero 5 para indicar a direco
Sudeste.
Nordeste se a posio 7 do vector dirsup (correspondente casa 6 do
esquema de posio do robot) contiver um 0 e a posio 8 (correspondente
casa 7) contiver um 1. Vai imprimir o nmero 7 para indicar a direco
Nordeste.

No entanto h dois procedimentos de extrema importncia para garantir o


sucesso do programa. a ordem pela qual as opes so analisadas e a
necessidade de parar a verificao quando encontrar uma direco vlida.
A verificao deve dar prioridade s direces Norte, Nordeste e Noroeste,
pois so estas as direces mais propensas para fazer o robot avanar,
apenas se deve verificar as outras no caso de estas serem invlidas.
O procedimento de parar a verificao faz com que o robot tome apenas
uma direco, fazendo com que, na presena de vrias opes vlidas, ele
execute a de maior prioridade.

Concluso
Com este trabalho posso concluir que este projecto ajudou a melhorar as
minhas capacidades de programao, exercitar os contedos leccionados.
Senti que tive a oportunidade de aplicar os conhecimentos adquiridos, alm
de exercitar e desenvolver o raciocnio matemtico, vital para o mundo da
programao.
Posso dizer que este projecto ajudou-me imenso no s minha vida
enquanto futuro programador mas como me ajudou a desenvolver enquanto
pessoa, em como encarar e resolver os problemas e obstculos que vo
surgindo na vida.

10

Anexos

#include <stdio.h>

int main()
{
int dirsup[9];
int coord[9][2];

int x=0, y=0, dec=0,p=0;

printf("\t x y d\n\n");

for(x=0; x<9; x++)


{
printf("Posicao %d ",p);
scanf("%d %d %d",&coord[x][y], &coord[x][y+1], &dirsup[x]);

p++;
}

while (dec != -1)


{
if (dirsup[8]==0 && dirsup[1]==1)
{
printf("0"); break;
}

11

if (dirsup[1]==0 && dirsup[2]==1)


{
printf("1"); break;
}

if (dirsup[2]==0 && dirsup[3]==1)


{
printf("2"); break;
}

if (dirsup[3]==0 && dirsup[4]==1)


{
printf("3"); break;
}

if (dirsup[4]==0 && dirsup[5]==1)


{
printf("4"); break;
}

if (dirsup[5]==0 && dirsup[6]==1)


{
printf("5"); break;
}

if (dirsup[7]==0 && dirsup[8]==1)


{

12

printf("7"); break;
}

}
printf("\nSe esta for a posio final, insira -1");
scanf("%d",&dec);

getchar();getchar();
}

13

Você também pode gostar