Boucles imbriquées paraissant ne jamais se terminer

mel00000
Messages postés
6
Date d'inscription
dimanche 24 novembre 2013
Statut
Membre
Dernière intervention
24 novembre 2013
- 24 nov. 2013 à 10:37
 mel00000 - 28 nov. 2013 à 16:54
Bonjour,


Il faut que je fasse un programme sous Visual Basic 5.0 afin d'afficher l'évolution des températures sur une image, représentées par des couleurs.
Je n'arrive déjà pas à faire fonctionner mon programme qui est censé résoudre l'équation de la chaleur. Visual Basic 'ne répond plus' quand j'exécute.

Pouvez vous m'aider s'il vous plaît ?

'équation de la chaleur
dtp = 0.1

For Tp = 0 To 6000 Step dtp
    
    'boucle sur espace :
    For i = 15 To 624
        For j = 15 To 464
            dTi = k(i - 1, j) * (T(i - 1, j) - T(i, j)) + k(i + 1, j) * (T(i + 1, j) - T(i, j))
            dTj = k(i, j - 1) * (T(i, j - 1) - T(i, j)) + k(i, j + 1) * (T(i, j + 1) - T(i, j))
            dT(i, j) = (dTi + dTj) * dtp
            Ttemp(i, j) = T(i, j) + dT(i, j)
        Next j
    Next i
    
    'boucle sur temps:
    For i = 15 To 624
        For j = 15 To 464
            T(i, j) = Ttemp(i, j)
        Next j
    Next i
    
Next Tp




Merci !

9 réponses

cs_ShayW
Messages postés
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019
56
24 nov. 2013 à 11:30
Bonjour
tu codes en vb6 ? ou vb.net
Visual Basic 'ne répond plus'
il a été vexé LOL

tu n'as aucun message d'erreur ?
quand tu lances l'application ton cpu monte en fleche et reste ainsi

sers toi du debugger
comme j'ai le vb6 en anglais
onglet debug -> add watch
dans le texbox expression Tp > 1000
et coches break when value is true
lances ton appli et que se passe t'il
0
mel00000
Messages postés
6
Date d'inscription
dimanche 24 novembre 2013
Statut
Membre
Dernière intervention
24 novembre 2013

24 nov. 2013 à 12:12
merci pour ta réponse !

- je code sur Visual Basic 5.0

- quand j'exécute ça fait tout bugger, vb est vexé ^^
je n'ai pas de message d'erreur et je dois le tuer.

et désolée mais je suis vraiment débutante en informatique, ça veut dire quoi 'ton cpu monte en flèche' ?

- quand je fais débogage avec un espion comme tu m'as dit il ne se passe rien non plus et je suis obligée de le tuer
0
ucfoutu
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
235
24 nov. 2013 à 13:41
Bonjour,
- je déplace cette discussion. Tu ne développes pas sous VB.Net et la plus proche est VB6 (quasi identique à nVB5). Prens-en bonne note
- Je modifie le titre de cette discussion. Rien à voir avec ceci (la chaleur) ou cela ... mais, plus généralement, avec une boucle qui ne semble pas vouloir se terminer
- pour en venir à ton problème :
--- je ne vois pas pourquoi une boucle sur la valeur de tp, que tu ne sembles utiliser nulle part, ce qui ne t'empêche apparemment pas de faire 6000 fouis tous tes calculs !
--- tu dis n'avoir aucun message d'erreur et on te croit. Ce qui veut alors dire que le nombre impressionnant de tes calculs mobilise TOUT pendant un certain temps (un temps certain, devrait-on dire) !
La question est donc : si tu laisses "faire" très patiemment : au bout de combien de temps la main t'est-elle rendue ?
0
NHenry
Messages postés
14973
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
19 août 2022
161
Modifié par NHenry le 24/11/2013 à 16:18
Visual Basic ne répond plus

En même temps, ça se comprend :
Déjà, on évite les boucle For avec des flottants, essayes plutot des entiers, puis divise la valeur par 10 ensuite.

Pour le nombre de calcul :
For Tp = 0 To 6000 Step dtp
Donc 6001*10 fois

For i = 15 To 624
For j = 15 To 464
610*450 = 274500

Ce qui donne :
16 472 745 000 calculs ...

Je pense que tu en demandes un peu trop à VB là.
Rien que pour stocker ton résultat sur des Floats, cela demanderait 65 890 980 000 octet de RAM, soit environ 65 Go de RAM environ, sachant que VB5 bosse au mieux en 32 bits, ce qui limite son usage à 2Go de RAM, je te laisse trouver ton erreur.

On peut discuter avec celui qui sait.
On peut discuter avec celui qui ne sait pas.
On ne peut pas discuter avec celui qui croit savoir.
En VB.NET pensez à activer "Option Explicit" et "Option Strict"
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
mel00000
Messages postés
6
Date d'inscription
dimanche 24 novembre 2013
Statut
Membre
Dernière intervention
24 novembre 2013

24 nov. 2013 à 16:22
bonjour ucfoutu,
déolée pour avoir mal classé le sujet, et merci de l'avoir déplacé tout d'abord.

- en faisant une boucle pour tp allant de 0 à 6000 step dtp=0.1
je pensais que du coup la boucle allait se faire 10 fois en 1 intervalle de temps tp.
(ce sont les consignes du projet. Je suis censée calculer la température d'un pixel tous les dtp=0.1 intervalle de temps, et ceci pendant 6000 intervalles. La boucle s'arrête au bout de 6000 intervalles de temps.)

- un des problèmes auquel le prof veut qu'on soit confronté est justement le problème du grand nombre de calculs à effectuer...

- j'ai arrêté le programme au bout de 8 minutes en le tuant, je pense que ce n'est pas la peine d'aller plus loin ?
0
NHenry
Messages postés
14973
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
19 août 2022
161
Modifié par NHenry le 24/11/2013 à 16:25
As-tu essayé la combinaison de touche Control+ScrollLock pour passer en mode pause ?

VB5 est totalement dépassé, utilises plutot VB.NET (version Express gratuite, librement téléchargeable sur le site de M$ )
0
mel00000
Messages postés
6
Date d'inscription
dimanche 24 novembre 2013
Statut
Membre
Dernière intervention
24 novembre 2013

24 nov. 2013 à 16:35
à quoi ça sert de passer en mode pause ? (j'ai essayé, ça marche, et merci du coup j'ai découvert un truc pour l'arrêter sans devoir tout le temps le fermer pour le rouvrir...)

mon projet doit être codé en VB5...
0
NHenry
Messages postés
14973
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
19 août 2022
161
24 nov. 2013 à 16:45
Les profs, toujours à la pointe du progrès ...

Tu peux regarder le contenu d'une variable par exemple (Shift+F9, aussi appelé "espion" ), stopper une boucle infinie ou trop longue, ...
0
mel00000
Messages postés
6
Date d'inscription
dimanche 24 novembre 2013
Statut
Membre
Dernière intervention
24 novembre 2013

24 nov. 2013 à 16:58
en même temps il doit se dire qu'une bande d'incapables de l'informatique n'a peut être pas besoin de logiciels plus pointus ? ^^
Sachant que le but du projet est une initiation, histoire d'avoir touché à un ordinateur dans sa vie..
0
mel00000
Messages postés
6
Date d'inscription
dimanche 24 novembre 2013
Statut
Membre
Dernière intervention
24 novembre 2013

24 nov. 2013 à 16:27
Je vais déjà essayer de réduire le nombre de calculs, ce qui est du coup évidemment le premier problème.

Je verrais ensuite pour augmenter le nombre de calculs...
0
ucfoutu
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
235
Modifié par ucfoutu le 24/11/2013 à 17:05
" mon projet doit être codé en VB5..."
Quel que puisse être l'outil de développement utilisé, ce sera de ton processeur, que tout dépendra avant tout. Et là ... tu le mobilises à fond, avec cette quantité incroyable de calculs.
Et tu le mobiliserais tout autant avec un autre langage de développement !

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviend
0
33solo
Messages postés
5
Date d'inscription
jeudi 15 mars 2007
Statut
Membre
Dernière intervention
26 novembre 2013

26 nov. 2013 à 11:36
Plus de 82 000 000 000 traitements ... Tu devrais afficher un compteur dans la boucle principale pour voir le temps d'un traitement et si le prog est vraiement mort ou au travail.

--
0
Bonjour,

Merci à tous pour vos réponses.
L'erreur venait tout d'abord du fait que même l'initialisation de mon projet ne se faisait pas à cause des propriétés de ma picturebox mal définies (autoredraw, autosize, scalemode).

Ce code marche donc à présent !
0