• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

casdio

Ler condições 'infinitas' de um ficheiro

4 mensagens neste tópico

Boas.

Temos um trabalho para entregar e um dos problemas é ler regras (de crescimento de uma cidade) de um ficheiro, do tipo: s=C | P, C>2, C<=5 : R (ou seja, se a célula actual for igual a C ou P e se, na vizinhança, houver mais de 2 C e menos que 6, entao a actual passa a R).

O problema está nas condições com >, >=, <, <=. Não há limite para estas condições, ou seja, o prof pode por 150 condições diferentes nas regras.

Nós sabemos que temos que por as regras em structs e interpreta-las a partir daí, mas não estamos a ver como vamos conseguir fazer isso.

Ou melhor, a única ideia que tivemos foi separar o que está entre as ",", do genero: "s=C | P" pra um lado, "C>2" pra outro e por aí fora. Mas depois temos o problema de não saber quantas condições são.

Alguma ideia?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Podes ir lendo uma regra de cada, e avalias-la de imediato. Se isso no for viável no problema em causa, vais ter que usar uma estrutura de dados dinâmica, e vais lendo as regras até encontrares um ':'.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Podes ir lendo uma regra de cada, e avalias-la de imediato. Se isso no for viável no problema em causa, vais ter que usar uma estrutura de dados dinâmica, e vais lendo as regras até encontrares um ':'.

Esqueci-me de dizer isso. Quando uma regra for válida, a célula é actualizada e passa para a próxima célula sem processar as restantes. O problema é que nós temos que armazenar cada condição numa variável diferente e não sabemos como faze-lo. Sabemos que temos que utilizar uma lisa ligada para considerar todas as possiveis condicoes mas n sabems como.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

não tens d armazenar cada regra numa variavel diferente... tens de armazenar as regras numa estrutura de dados, que como não sabes quantas são deve ser dinâmica.

para isso o melhor é usares uma lista ligada. precisas de uma estrutura do tipo:

typedef struct L{
void * info; //ou que quiseres
struct L * next; //apontador para o proximo elemento da lista
} l;

portanto, cada elemento da lista aponta para o elemento seguinte e só precisas de uma variavel que aponte para o 1º elemento. sp que quiseres inserir uma regra nova é só alocar espaço com o malloc e ajustar os apontadores como te der mais jeito (o mais simples é inserir na cabeça). e para saberes qd a lista acaba basta meteres o next do ultimo elemento a null.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora