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

sss

modelo em cascata

5 mensagens neste tópico

Sou INICIANTE em visual basic e preciso de ajuda para construir um modelo ambiental.

Omodelo é o seguinte:

criar um modelo flexível que permita distribuir a água no solo após uma chuvada. O utilizador pode escolher o dia do início e do fim da simulação, nº e espessura das camadas de solo, a profundidade a que se encontra a última camada e suas características físicas (capacidade de campo [CC, m3 m-3] e coeficiente de emurchecimento permanente [CEP, , m3 m-3]), o perfil de água inicial [m3 m-3] é também uma entrada. O perfil do teor de água no início e no fim da simulação deve ser apresentado sobre a forma de tabela e gráfico. A percolação (i.e., abaixo da última camada) deve ser contabilizada também.

Tenho um ficheiro de dados genericos de entrada para 10 camadas. E de preferência é para utilizar o programador do exel.

Já fiz algumas coisas, mas sei que têm de ser usados loops na formulação e o meu maior problema é coloca-los.

Será que alguém me pode ajudar?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Se é para usar o Excel estás a fazer a pergunta no quadro errado, tens que colocar a pergunta em:

http://www.portugal-a-programar.pt/forum/128-visual-basic-for-applications-vba/

Se é para usar o VB .NET estás a colocar no quadro certo, se é para misturar, usar uma partem em VB.NET e outra em Excel também estás no quadro certo (não invalida de consultares o outro)

Independentemente disso, para te ajudar temos que perceber a tua dúvida, não a parte técnica do que queres fazer, mas a tua dúvida em questões de programação.

Ao ler a tua questão fiquei na dúvida do que queres ao certo, para loops podes usar:

* Ciclos For..Next

* Ciclos Do..While

* Ciclos While..Do

* Recursividade

Queres ajuda para isso? Que partes do código já fizeste?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ok, talvez esteja mesmo a usar o quadro errado, porque preciso de usar a aplicação vb do excel.

Usei um For..next para a resolução do problema, mas tem erros, pois quando dá a volta não vai para o sitio certo e não consigo com que dê uma resultado satisfatório. Já agora, essa parte que fiz foi:

Sub main()

Dim k, m As Integer

For k = FDOY To LDOY
    If precip(k) > 0 Then
    m = 1
    precip(m) = precip(k)
        For m = 1 To Nlayers
            If precip(m) < FC * Lthickness(m) * 1000 - volwater(m, k) * Lthickness(m) * 1000 Then
                water(m, k) = volwater(m, k) + precip(m)
                pout(m) = 0
            ElseIf precip(m) = FC * Lthickness(m) * 1000 - volwater(m, k) * Lthickness(m) * 1000 Then
                water(m, k) = FC * Lthickness(m) * 1000
                pout(m) = 0
            ElseIf precip(m) > FC * Lthickness(m) * 1000 - volwater(m, k) * Lthickness(m) * 1000 Then
                water(m, k) = FC * Lthickness(m) * 1000
                pout(m) = precip(m) - FC * Lthickness(m) * 1000 + volwater(m, k) * 1000
            End If
            precip(m + 1) = pout(m)
        Next m
    
    End If
    volwater(m, k + 1) = water(m, k)
Next k

Em que "m" e "k" designam as camadas e os dias.

De qualquer forma agradeço a predisposição para ajudar.

Obrigada

edit: adicionado geshi

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Em primeiro lugar recomendava que atribuísses a formula: "FC * Lthickness(m) * 1000 - volwater(m, k) * Lthickness(m) * 1000" a uma variável.

Vantagens:

1ª consegues ver o resultado da formula (nessa variável)

2ª simplificas os ifs porque estás a comparar 2 variáveis, e como conheces os valores das variáveis consegues prever mais facilmente o resultado do if e para onde vai parar

Em segundo lugar, sabes fazer debug?

Se mandares correr a rotina, o Excel (ou outro software) corre até ao fim (em alguns milisegundos) ou até encontrar um erro de programação. Se no teu programa fizeres um erro que não seja de programação, por exemplo meteres a formula errada, ele corre até ao fim, não dá erro mas ficas com valores errados.

Em vez de fazeres F5 (ou carregar no botão verde de play) faz F8, isto faz com que corras o programa linha-a-linha, cada vez que carregas em F8 corre mais uma linha. A linha que está a correr fica com fundo amarelo.

Se deixares o rato em cima de uma variável, vai-te aparecer uma caixinha amarela com o valor da variavel.

Se o programa for muito extenso, e tiveres a certeza que a 1ª parte funciona, não vale a pena correr linha a linha até à parte que queres verificar, então, uma linha antes dessa parte metes um Breakpoint, vais com o cursor ou rato para a linha e carregas em F9 ou com o rato na barra carregas na barra vertical cinza do lado esquerdo do código. Essa linha fica com um ponto e fundo avermelhado. Então carregas em F5, o programa corre todo até este ponto e para, a partir daqui carregas em F8 para ir linha a linha ou em F5 para ir até ao próximo Breakpoint (ou até ao fim do programa)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Obrigada pela sugestão, é realmente mais vantajoso!

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