Jump to content

Ler condições 'infinitas' de um ficheiro


Recommended Posts

Posted

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?

Posted

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.

Posted

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.

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.