casdio Posted May 15, 2009 at 03:25 PM Report #264422 Posted May 15, 2009 at 03:25 PM 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?
Rui Carlos Posted May 15, 2009 at 03:28 PM Report #264426 Posted May 15, 2009 at 03:28 PM 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 ':'. Rui Carlos Gonçalves
casdio Posted May 15, 2009 at 03:33 PM Author Report #264429 Posted May 15, 2009 at 03:33 PM 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.
nata79 Posted May 15, 2009 at 06:59 PM Report #264495 Posted May 15, 2009 at 06:59 PM 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. arithmeticoverflow.wordpress.com
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now