1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

[Ajuda Urgente] Simulação de Crescimento Urbano

Discussão em 'Programação' iniciada por kripton2007, 1 de Maio de 2009. (Respostas: 3; Visualizações: 666)

  1. kripton2007

    kripton2007 Power Member

    Boas pessoal,

    Estou aqui com dificuldades na forma como irei definir a estrutura de dados que melhor se adeque ao projecto que tenho que desenvolver. Uma vez que esta tem que ser robusta, e ao mesmo tempo tem que ser bastante eficiente.


    Não quero com isto, que ninguém faça o trabalho por mim, apenas coloquei aqui o enunciado para não haver dúvidas acerca daquilo que se trata realmente o projecto, e facilitar a sua compreensão.


    Sendo assim, deixo aqui a explicação do projecto:

    Neste projecto pretende-se implementar vários modelos de simulação. Os modelos são uma forma de simular situações reais com o intuito de as compreender melhor. Neste projecto pretende-se implementar no sistema operativo Linux utilizando a linguagem de programação C usando a plataforma gráfica OpenGL/GLUT vários modelos com um grau crescente de complexidade.


    Utilizando um processo semelhante ao anterior pretende-se simular o crescimento
    urbano de uma cidade. Neste caso, o programa lê de um ficheiro o mapa
    da cidade. Pretende-se que cada sector do mapa possa ter os seguintes valores
    possíveis:

    R residencial;
    C comercial;
    E estrada;
    A aquático;
    F forestal;
    G agrícola.

    O programa lê também de um ficheiro as regras de crescimento da cidade.
    Estas regras exprimem o novo estado de um sector em funçãoo do valor actual e
    dos valores dos sectores vizinhos. Este ficheiro explicita primeiro qual o tipo de
    vizinhança:

    cruz os 4 sectores ortogonais;
    quadrado os 8 sectores vizinhas (ortogonais e diagonais);
    círculo composto por 12 sectores (os 8 vizinhos mais os 4 ortogonais distantes de um sector).


    Cada regra é explicitada utilizando uma sintaxe simples. Essa sintaxe é da forma:

    antecedente : novo valor


    onde antecedente é uma conjunção de condições separadas por vírgulas sendo
    cada condição da forma valor op número onde valor pode ser um dos valores
    R, C, E, A, F, G ou s sendo s o sector actual e op é um operador de comparação =, >, <, >= ou <=. Nas condições da forma s = valores o campo valores pode ser um valor ou um conjunto de valores separado pelo operador |. Seguem-se alguns exemplos ilustrativos:


    s = C : C se o sector é comercial, continua a ser comercial

    s = F | G, C = 3 : C se o sector é florestal ou agrícola e 3 sectores vizinhos são comerciais, o sector passa a ser comercial


    No caso de várias regras se poderem aplicar, aplica-se a primeira regra.
    Assim, logo que uma regra se possa aplicar a um sector, não é necessário verificar as regras seguintes para esse sector.



    Aquilo que eu pretendo é descobrir a melhor estrutura de dados para desenvolver o projecto, tal como ja disse anteriormente, para este ser robusto e ao mesmo tempo eficiente.

    Já agora, convém salientar o facto de que posteriormente, este projecto terá de ser adaptado, ou seja, a partir de todo o código teremos que desenvolver um simulador genério que seja capaz de simular uma outra coisa qualquer com um diferente número de parâmetros. Deste modo, ao desenvolver o código correspondente a este projecto, devo já estar a pensar na fase seguinte do projecto.


    Se alguém puder sugerir uma forma para desenvolver o projecto, de modo a minimizar os problemas futuros, ficava muito agradecido!

    Cumprimentos, kripton2007
     
  2. slack_guy

    slack_guy Power Member

  3. kripton2007

    kripton2007 Power Member

    Sim.. tem a ver com isso.
    Mas a dúvida que está nesse tópico que referiste já é um pouco avançada para as dúvidas que tenho neste momento, e também não queria causar confusão no outro tópico.

    Cumps
     
  4. MPalhas

    MPalhas Power Member

    o trabalho é o mesmo, mas como ele disse as dúvidas dele são outras.

    kripton o que eu fiz foi uma estrutura deste tipo (é um bocado confuso de explicar por palavras mas vou tentar):

    a minha estrutura é uma lista ligada em que cada elemento contém uma Regra (cada regra é um conjunto de condições e um valor final, e corresponde a uma linha do ficheiro que é dado)
    cada Regra é uma estrutura com a Lista de Condições, e o Valor Final
    a Lista de Condições é outra lista ligada em que cada elemento é uma condição.
    uma condiçao é constituida pelo valor da esquerda, o valor da direita, e o operador.

    podes guardar o operador como achares melhor, eu preferi guardar como um int, e usar um enum para corresponder cada int a um operador, mas é a tua escolha


    se fosse para complicar um bocado mais, também podias fazer o mesmo que o prof me sugeriu, que era separar as condições que começam por "s=" porque são diferentes das outras (s tem um significado diferente das outras letras, o operador é sempre igual, e o valor da direita é uma letra em vez de ser um int. além disso, estas condições são não só as mais restritivas, mas também as mais eficientes porque apenas precisam de aceder a propria celula, e não a vizinhança.
    Portanto se conseguires, é sempre uma boa ideia por essas condições a serem executadas antes de todas as outras, para tornar a simulação mais eficiente
     

Partilhar esta Página