IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB 6 et antérieur Discussion :

Opérations tableau avec double indice


Sujet :

VB 6 et antérieur

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 3
    Par défaut Opérations tableau avec double indice
    Bonjour à tous,

    J'aurai besoin d'aide à propos d'un programme que je souhaite faire please!
    Le problème est un problème physique (de thermique) mais pas besoin de raisonner dans ce domaine.

    On suppose un carré (ou rectangle) initialement à 500°C et à un temps petit t>0, on impose une température de paroi de 50°C et je dois trouver l'évolution de la température sur toute la plaque au bout d'un temps infini.
    (il y a bien sure un formule physique à rentrer f(T) pour trouver la température).

    Mon problème est que je n'arrive pas à faire les n(=100) itérations afin de déterminer les températures finales. Voici ce que j'ai fait:

    Je définit un tableau (géométrie de la plaque) de dimensions arbitraires 40*11 et je dis quelles sont les conditions de température au départ. Aux bords (sauf le bord de droite), la température imposée est de 50°C. Pour les points intérieurs à la plaque, c'est 500°C
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    Dim Temp1(1 To 40, 1 To 11) As Double
     
    For i = 1 To 40
         Temp1(i, 1) = 50
         Temp1(i, 11) = 50
    Next
     
    For j = 1 To 11
        Temp1(1, j) = 50
    Next
     
    For i = 2 To 40
      For j = 2 To 11
        Temp1(i, j) = 500
       Next
    Next
    Ensuite donc ce que je souhaite faire c'est faire d'autres itérations jusqu'un nombre 100 pour trouver la température finale en tous points de la plaque, ceci grâce à une formule physique liant la température des points voisins.

    Je définie donc un nouveau tableau, ceci afin de faire subir les changements après 100 itérations et de transférer les résultats dans ce tableau. Un tableau 40*11...puis je réimpose la température de 50°C aux parois
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Dim Temp2(1 To 40, 1 To 11) As Double 
     
    For j = 1 To 11
        Temp2(1, j) = Temp1(1, j)
    Next
     
    For i = 1 To 40
       Temp2(i, 1) = Temp1(i, 1)
       Temp2(i, 11) = Temp1(i, 1)
    Next
    Mon problème vient de l'intérieur des points, en entrant ces lignes, le programme me donne simplement la température au point T22 après 100 itérations (visible grâce au debug.print). Le problème doit venir du fait que j'ai mal programmé le loop avec double indicage
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    For i = 2 To 39
      For j = 2 To 10
        Temp2(i, j) = Temp1(i - 1, j) + Temp1(i + 1, j) + Temp1(i, j - 1) + Temp1(i, j + 1) + Temp1(i, j))
      Next
    Next
    ici j'impose la conditions d'arrêt (100 itérations)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Dim a As Integer
    a = 100 
     
    Do While a > 0
     
    a = a - 1
    For i = 2 To 39
      For j = 2 To 10
        Temp2(i, j) = Temp2(i - 1, j) + Temp2(i + 1, j) + Temp2(i, j - 1) + Temp2(i, j + 1) + Temp2(i, j))
      Next
    Next
     
    Loop
    Donc ce que je souhaiterai avoir c'est que le programme me calcule après 100 itérations de chaque points de la plaque la température.
    T1,1
    T1,2
    ...
    T1,11
    T2,1
    ....
    T40,11


    Merci par avance pour votre aide

    Alexandre

  2. #2
    Membre émérite Avatar de avigeilpro
    Homme Profil pro
    Ambulancier
    Inscrit en
    Janvier 2004
    Messages
    880
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Creuse (Limousin)

    Informations professionnelles :
    Activité : Ambulancier
    Secteur : Transports

    Informations forums :
    Inscription : Janvier 2004
    Messages : 880
    Par défaut
    Bonjour et bienvenu.

    Je ne suis pas physicien et peu de personnes doivent l'être sur ce forum.
    Ton problème est bien trop surchargé d'information pour être compréhensible.
    Commence par le simplifier, travailler avec des tableau à dimensions plus petites com 3*3 et donner un exemple concret (contenu des tableau ...).
    De plus qu'est-ce que le point T22 ????
    La connaissance seule ne suffit pas. La vraie compréhension vient de la mise en expérience.
    Règles|FAQ|Tuto

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 3
    Par défaut
    Hello,

    Je vais essayer de simplifier le problème pour que le sujet soit plus clair!

    On considère une plaque (carré) à température initiale de 500°C en tous points. On maille la plaque de façon a ce qu'il y ait 16 points de mesure de température (en gros on définit 16 points de mesure). CF. dessin.

    à t>0, on fixe une température de 50°C sur les parois (donc les points 1.1 1.2 1.3 1.4... 2.1 3.1 .....les points situés sur les segments rouges ont une température de 50°C imposée pour un temps infini). Il reste donc les points intérieurs 2.2 2.3 3.2 3.3 à calculer (température). Or en physique, la température en ces points en un instant t est régie suivant une loi liant les points voisins et la température à l'état précédent (t-1).
    Supossons T(i,j)=T(i-1,j)+T(i,j-1) (i étant l'abscisse)


    Donc tout d'abord à t>0, j'impose les température de paroi à 50°C
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    Dim Temp1(1 To 4, 1 To 4) As Double
     
    For i = 1 To 4
         Temp1(i, 1) = 50
         Temp1(i, 4) = 50
    Next
     
    For j = 1 To 4
        Temp1(1, j) = 50
        Temp1(4, j) = 50
    Next
     
    For i = 2 To 3
      For j = 2 To 3
        Temp1(i, j) = 500
       Next
    Next
    Maintenant ce que je souhaite faire c'est faire par exemple 10 itérations (=10 calculs par points) sur chaque point de mon maillage afin de déterminer au bout des 10 itérations la température finale en chaque point.

    Pour ce qui est des températures du bord, pas de problème, les points sont toujours à 50°C. Mais pour les 4 points du centre, on utilise la formule précédente. tout d'abord je redefinie les points au bord à 50°C

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    Dim Temp2(1 To 4, 1 To 4) As Double 
     
    For j = 1 To 4
        Temp2(1, j) = 50
        Temp2(4, j) = 50
    Next
     
    For i = 1 To 4
       Temp2(i, 1) = 50
       Temp2(i, 4) = 50
    Next
     
    For i = 2 To 3
      For j = 2 To 3
        Temp2(i, j) = Temp1(i-1,j)+Temp1(i,j-1)
      Next
    Next
    Maintenant pour les points au centre. Je définie un paramètre a comme condition d'arrêt de l'itération (lorsque a=10, c'est que 10 itérations auront été faites et le calcul s'arrête)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Dim a As Integer
    a = 10 
     
    Do While a > 0
     
    a = a - 1
    For i = 2 To 3
      For j = 2 To 3
       Temp2(i, j) = Temp2(i-1,j)+Temp2(i,j-1)
      Next
    Next
     
    Loop
    Mais le problème c'est que cela ne marche pas. Le programme ne calcul que la température au point 2.2 et zap le 2.3 3.2 3.3
    Images attachées Images attachées  

  4. #4
    Membre émérite
    Inscrit en
    Décembre 2007
    Messages
    512
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 512
    Par défaut Un seul problème bien précis...
    Bonjour,

    Et ce serait plus simple pour comprendre car je ne vois toujours pas l'erreur...
    Où se produit-elle? A quel endroit du code?
    Maintenant il y a des redondances dans ton code,mais celà c'est à toi de l'améliorer.

    Bon courage A+

  5. #5
    Membre émérite Avatar de avigeilpro
    Homme Profil pro
    Ambulancier
    Inscrit en
    Janvier 2004
    Messages
    880
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Creuse (Limousin)

    Informations professionnelles :
    Activité : Ambulancier
    Secteur : Transports

    Informations forums :
    Inscription : Janvier 2004
    Messages : 880
    Par défaut
    Essaye en pas à pas, j'ai pris ta boucle (sans le calcul) et on a bien les incrementations de i et j. Verifie que tu passe bien dans les boucles (F8 pour le pas à pas). Il semblerait que cela fonctionne correctement.

    Ton deuxième problème sera le suivant :
    tu ne "fige" pas les données. Je m'explique :
    prenont une suite de nombre (tableau simple) :
    {1,1,1,1,1,1}
    et appliquons plusieurs itérations qui font un calcul simple :
    on ajoute une valeur du tableau avec celle qui le précède
    on obtient avec ta façon de calculer dès la première itération :
    {1,2,3,4,5,6}

    car lorsque tu fais le calcul de la troisième valeur, la deuxième est déjà passé à 2 ....

    J'éspère que je suis clair ....
    La connaissance seule ne suffit pas. La vraie compréhension vient de la mise en expérience.
    Règles|FAQ|Tuto

  6. #6
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 3
    Par défaut
    Ha oui en effet pour le problème du "fixage des données"
    Quelle fonction faut-il utiliser pour y remédier? (je suis très novice en vba :p)

Discussions similaires

  1. Réponses: 6
    Dernier message: 15/07/2010, 19h00
  2. [MySQL] probleme affichage dans un tableau avec double requetes
    Par roy-mustang dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 25/05/2009, 09h25
  3. problème sur l'indice d'un tableau avec le compilateur du C gcc
    Par aefmaaradji dans le forum Autres éditeurs
    Réponses: 1
    Dernier message: 12/11/2008, 17h27
  4. Problème avec opération sur les double
    Par luimême dans le forum C#
    Réponses: 2
    Dernier message: 17/04/2008, 10h19
  5. Indicer un tableau avec une chaine de caractères
    Par petdelascar dans le forum C
    Réponses: 10
    Dernier message: 08/11/2007, 14h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo