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

duvida de como executar ciclo for em datagrid visualbasic

Discussão em 'Programação' iniciada por AMRF, 19 de Julho de 2018. (Respostas: 6; Visualizações: 283)

  1. Bom dia!

    Estou a meio de um projecto e necessitava de ajuda a resolver uma questão que não estou a conseguir.

    No meu projecto tenho uma datagridview, sendo que, para os valores da segunda coluna quero executar um cálculo para cada linha. No entanto, dentro do ciclo for para executar cada linha tenho um outro ciclo cujos diversos valores são somados. Assim, isto faz com que quando é calculado o valor para a segunda linha da minha datagried o código some o valor da linha anterior e eu não quero que ocorra esta soma. Isto é, por exemplo o código que tenho actualmente dá me os seguintes resultados: 4, 8 e 13 e o que eu quero obter é 4, 4, 5.

    No fundo será o valor obtido para cada linha subtraido do valor da linha anterior, mas neste momento não consigo ter acesso a esse valor no meu código. Alguém tem uma sugestão?

    Seria muito grata se alguém me pudesse dar uma dica de como resolver isto, é a primeira vez que estou a programar e neste momento não tenho ideia de como resolver.

    Deixo abaixo algumas linhas do meu código para que possa ser mais perceptível o que estou a tentar dizer.

    For Each Linha In DataGrid_RHR.Rows

    RHR = Convert.ToDouble(Linha.Cells("Column2").Value)

    RHRW = RHR * 1000 'converter kW em W

    'calcular a origem virtual

    origem_virtual = (-1.02 * d_fogo) + (0.00524 * (RHRW ^ 0.4))



    'calcular o comprimento da chama

    hf = (-1.02 * d_fogo) + (0.0148 * (RHRW ^ 0.4))



    'Calcular o fator de vista para a face 1

    For j = 0 To limite Step 0.5

    'calcular A temperatura da chama

    t_chama = 20 + (0.25 * ((0.8 * RHRW) ^ (2 / 3)) * ((j - origem_virtual) ^ (-(5 / 3))))

    'fator de vista dos cilindros



    y_fv = 0

    r = d_fogo / 2

    rij = r - ((0.5 * d_fogo * (hf - (hf - j))) / hf) 'verificado

    s = s_fv / rij 'VERIFICADO

    x = x_fv / rij 'verificado

    y = y_fv / rij ' isto estava mal

    h_fv = Math.Abs(z_coluna - j) 'verificado

    hh = h_fv / rij

    A = (x ^ 2) + (y ^ 2) + (s ^ 2) 'verificado

    B = (s ^ 2) + (x ^ 2) 'verificado

    C = (hh - y) ^ 2 'VERIFICADO

    equacao1 = (Math.Acos(((y ^ 2) - B + 1) / (A - 1))) + (Math.Acos((C - B + 1) / (C + B - 1)))

    equacao2 = y * (((A + 1) / ((((A - 1) ^ 2) + (4 * y ^ 2)) ^ 0.5)) * (Math.Acos((y ^ 2 - B + 1) / ((B ^ 0.5) * (A - 1)))))

    equacao3 = (C ^ 0.5) * ((C + B + 1) / (((((C + B - 1) ^ 2) + (4 * C)) ^ 0.5)) * (Math.Acos((C - B + 1) / ((B ^ 0.5) * (C + B - 1)))))

    equacao4 = hh * Math.Acos(1 / ((B) ^ (1 / 2)))

    fator_de_vista_1 = (s / B) - (((s / (2 * B * 3.14)) * (equacao1 - equacao2 - equacao3 + equacao4)))

    fv_anel = (hh_anel / 2) * ((((hh_anel ^ 2) + (rr2_anel ^ 2) + 1) / (Math.Sqrt((((hh_anel ^ 2) + (rr2_anel ^ 2) + 1) ^ 2) - (4 * (rr2_anel ^ 2))))) - (((hh_anel ^ 2) + (rr1_anel ^ 2) + 1) / (Math.Sqrt((((hh_anel ^ 2) + (rr1_anel ^ 2) + 1) ^ 2) - (4 * (rr1_anel ^ 2))))))

    If j > z_coluna + 1.0E-23 Then

    fv_anel = 0

    '

    '6º calcular o fator de vista total (soma do fator de vista do cilindro e do anel) para a face 1

    fv_total = fator_de_vista + fv_anel

    '7º calcular o fluxo absorvido pela face 1

    fluxo_por_Segmento = (constante_de_stephan_Boltzmann * (((temperatura_chama + kelvin) ^ 4) * fv_total)) / 1000

    somatorio_face_1 += fluxo_por_Segmento

    Next

    fluxo_absorvido_face_1 = emissividade_chama * somatorio_face_1


    ' MessageBox.Show(fluxo_absorvido_face_1)

    Next
     
  2. lpa

    lpa Power Member

    Boas,
    Não estou muito a vontade com o VisualBasic mas penso que o teu problema está no valor da variável "somatorio_face_1" certo?

    Antes de entrares no segundo ciclo for tens que inicializar "somatorio_face_1=0" porque senão o scope da variável existe até terminar o procedure.

    Espero ter ajudado.
     
  3. Muito obrigada pela sua dica. Era mesmo isso que estava a faltar no meu código para obter os resultados que pretendia.
    Posteriormente é possível obter os valores do ciclo para traçar um gráfico? alguma dica de como o poderei fazer?
    Muito obrigada.
     
  4. lpa

    lpa Power Member

    Para traçares o gráfico precisas dos valores de "somatorio_face_1" ou de "fluxo_absorvido_face_1" ?
     
  5. Preciso de fluxo_absorvido_face_1.
     
  6. lpa

    lpa Power Member

    Uma solução simples será o de ires guardando os valores num array.

    1- Dim myContainer(Tamanho) As Double 'Crias o array sendo Tamanho o número de DataGrid_RHR.Rows

    2- Para não alterares a estrutura do teu código crias uma variável global para indexar o array. Ex: Dim idx As Integer = 0

    3- myContainer(idx) = fluxo_absorvido_face_1
    idx += 1

    Depois lês do array
     
  7. Muito obrigada pelas suas dicas.
     

Partilhar esta Página