Tri à bulles VB

Résolu/Fermé
Utilisateur anonyme - 15 avril 2017 à 13:53
cptpingu
Messages postés
3834
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
20 octobre 2021
- 21 avril 2017 à 14:28
Bonjour , j'airais besoin d'un petit coup de main sur un morceau de code car je débute :)


While Not EnOrdre
EnOrdre = True
For i = 0 To TailleTableau - 2
If MonTableau(i) > MonTableau(i + 1) Then
Intermediaire = MonTableau(i)
MonTableau(i) = MonTableau(i + 1)
MonTableau(i + 1) = Intermediaire
EnOrdre = False
End If
Next
TailleTableau = TailleTableau - 1
End While


ce que je comprend c'est ce code

If MonTableau(i) > MonTableau(i + 1) then


comment la condition peut être correct si on ajoute 1 à l'index de l'emplacement ? MonTableau(i) sera toujours inférieur à MonTableau(i + 1)

si j'ai bien compris ?

merci d'avance ;)
A voir également:

8 réponses

vb95
Messages postés
2636
Date d'inscription
samedi 11 janvier 2014
Statut
Modérateur
Dernière intervention
27 mai 2022
151
Modifié le 15 avril 2017 à 17:59
Bonjour
Tu confonds l'indice d'un tableau et la valeur contenue dans un tableau

i dans ce cas est l'indice dans le tableau et non la valeur contenue dans le tableau
Un exemple : un tableau nommé MonTableau

12 --> premier élément : indice 0
3 --> deuxième élément : indice 1
5 --> etc .......
1

12 est la valeur MonTableau(0)
3 est la valeur Montableau(1)

ATTENTION en VB Net les indices commencent à 0

If MonTableau(i) > MonTableau(i + 1)


si i = 0 on a bien
12 dans MonTableau(i) est > à 3 dans MonTableau(i+1)

donc pour ces 2 éléments on fait une permutation : on échange les valeurs entre les 2 emplacements du tableau

La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi. 
0
Utilisateur anonyme
15 avril 2017 à 18:02
j'ai bien compris que le i étais l'index d'un emplacement du tableau

mais le + 1 il correspond à quoi ? + 1 d'un emplacement ? ou + 1 dans une valeur de l'emplacement ?
0
vb95
Messages postés
2636
Date d'inscription
samedi 11 janvier 2014
Statut
Modérateur
Dernière intervention
27 mai 2022
151 > Utilisateur anonyme
Modifié le 15 avril 2017 à 18:16
c'est l'emplacement suivant
Si i = 0
Montableau(0) est la valeur à l'emplacement 0 du tableau

MonTableau(i + 1) est la valeur à l'emplacement suivant soit l'emplacement 1

De plus les parenthèses montrent bien que c'est i qui est augmenté de 1 et non la valeur contenue dans le tableau

Et ici si Valeur = MonTableau(i+5) + 2 signifie
- on va à l'emplacement (i+5) du tableau ( si i = 8 on va au 13 comme emplacement)
- on prend la valeur que cet emplacement contient
- on ajoute 2 a la valeur contenue dans cet emplacement
- la nouvelle valeur reste à cet emplacement
0
Utilisateur anonyme > vb95
Messages postés
2636
Date d'inscription
samedi 11 janvier 2014
Statut
Modérateur
Dernière intervention
27 mai 2022

15 avril 2017 à 19:06
ok donc ça ajoute à l'emplacement ,
If MonTableau(i) > MonTableau(i + 1)


pourquoi on dois mettre le signe supérieur ?
0
vb95
Messages postés
2636
Date d'inscription
samedi 11 janvier 2014
Statut
Modérateur
Dernière intervention
27 mai 2022
151 > Utilisateur anonyme
Modifié le 15 avril 2017 à 21:12
Cela n'ajoute pas à l'emplacement : cela fait référence à l'emplacement i + 1
Tu as 2 boites : la boite 0 et la boite 1
Dans la boite 0 tu mets 5 billes
Dans la boite 1 tu mets 2 billes
Donc billes(0) est bien supérieur à billes(1)
donc si i = 0
billes(i) est supérieur à billes(i+1)

Pourquoi mettre le signe >
pour mettre ensuite les valeurs dans l'ordre numérique car il faut les inverser pour qu'elles sont dans l'ordre croissant
Dans l'exemple des 2 boites 2 doit être avant 5

Quand tu comprendras que i est l'index ( ou l'indice) dans le tableau et que MonTableau(i) est la valeur contenue dans la case i du tableau tu auras tout compris !
si tu n'arrives pas à comprendre cela je ne peux rien pour toi !
0
Utilisateur anonyme > vb95
Messages postés
2636
Date d'inscription
samedi 11 janvier 2014
Statut
Modérateur
Dernière intervention
27 mai 2022

16 avril 2017 à 15:50
ok mais pourquoi on dois mettre
MonTableau(i) > MonTableau(i + 1)
au début est pas à la fin ?
0
Whismeril
Messages postés
17346
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
27 mai 2022
596
15 avril 2017 à 18:07
Si i vaut 2, alors tableau(i) veut dire tableau à l'emplacement 2, du coup tableau(i+1) est tableau à l'emplacement 3.
0
Utilisateur anonyme
15 avril 2017 à 19:07
ok mais pourquoi ya le signe supérieur ? tableau(i) se sera jamais supérieur à tableau(i + 1) ?
0
Whismeril
Messages postés
17346
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
27 mai 2022
596
15 avril 2017 à 20:04
Dans la précédente discussion, je t'ai dit qu'un tableau est comparable à une colonne dans un tableur.


Dans cette capture, il y à 12 dans A1, qui en VB.Net s'écrit A(1), et 7 dans A(2), donc A(1) est bien supérieur à A(2).
0
Utilisateur anonyme
16 avril 2017 à 01:41
ah ok d'accord merci , maintenant faut que je comprenne le reste du code :)
0
Whismeril
Messages postés
17346
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
27 mai 2022
596
16 avril 2017 à 08:41
Pour comprendre comment fonctionne un code, une bonne façon de faire est de le faire tourner en pas à pas, et de regarder à chaque ligne comment évoluent les variables.
0
Utilisateur anonyme
16 avril 2017 à 15:44
alors

If MonTableau(i) > MonTableau(i + 1) Then
Intermediaire = MonTableau(i)
MonTableau(i) = MonTableau(i + 1)
MonTableau(i + 1) = Intermediaire
EnOrdre = False
End If


intermédiaire = montableau(i) qui est (0) , donc intermédiaire = la valeur de montableau(i) ? qui pourrai être 5 ?

montableau(i) = montableau(i + 1) , donc montableau(i) qui est de (0) devient (1) ?

montableau(i + 1) = intermédiaire , donc montableau(i) qui est de (1) devient (2) est que la valeur à cette emplacement (2) devient 5 ?

EnOrdre = False , Il sert à quoi ? :)
0
Whismeril
Messages postés
17346
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
27 mai 2022
596
16 avril 2017 à 16:02
Il sert au while.

Je ne t'ai pas demander de lire le code et de faire comme si tu l'exécutais, mais de vraiment l'exécuter en pas à pas.

Tu mets un point d'arrêt avant le while, et tu regardes ce qui se passe ensuite en pas à pas.
0
Utilisateur anonyme > Whismeril
Messages postés
17346
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
27 mai 2022

16 avril 2017 à 17:04
ça me montre juste les lignes d'instructions avec une flèche sur la gauche , c'est bien le pas à pas détaille que tu peux faire avec la touche F8?
0
Whismeril
Messages postés
17346
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
27 mai 2022
596
16 avril 2017 à 17:32
F8 peut être, si tu utilises une vieille version de Visual Studio.

Par contre ça ne montre pas juste une ligne avec une flèche.
Tu peux regarder le contenu des variables, et donc voir comment elles évoluent.
Il y a 2 façon de faire, en mettant des espions, ou en survolant la variable avec la souris. Avec un espion tu peux changer le contenu d'une variable, pour voir comment ça se comporte.
Dans la fenêtre d'exécution, tu peux aussi taper des instructions pour changer tel ou tel truc.

Avant même de savoir coder, il faut savoir débugger et donc se servir de son IDE.
0
Utilisateur anonyme > Whismeril
Messages postés
17346
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
27 mai 2022

Modifié le 16 avril 2017 à 18:50
c'est bon ! j'ai presque tout compris merci pour l'astuce pour voir les variables etc.. merci ! :) donc le (i) (i + 1) se s'additionne pas à chaque fois sinon ça ferais (0) (0 + 1) (1 + 1) (2 + 1) etc... le (0) reste (0) et pas (1) c'est juste la valeur qui change de place , enfaîte faut que je visualise directement les valeurs les nombres etc sinon jme perd lol

le seule truc que je ne comprend pas c'est le
while not variable

variable = true

pourquoi on dois mettre variable = true alors while not variable fait déjà le boulot ?

et ça
variable = False
0

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

Posez votre question
vb95
Messages postés
2636
Date d'inscription
samedi 11 janvier 2014
Statut
Modérateur
Dernière intervention
27 mai 2022
151
Modifié le 20 avril 2017 à 16:34


Image prise dans le cours que tu as au chapitre des variables
Boolean = tu vois un 1 et un 0 . c'est Vrai ou Faux ( True ou False)

0 et 1 sont des valeurs Integer ( ou Double aussi )

La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi. 
0
Utilisateur anonyme
20 avril 2017 à 18:53
https://openclassrooms.com/courses/apprenez-a-programmer-en-vb-net/jouer-avec-les-mots-les-dates

Pourquoi While 1 ?
Parce que le « 1 » est toujours vrai, cela signifie donc : « Tourne, mon grand, ne t'arrête pas ! ».

??

https://openclassrooms.com/courses/apprenez-a-programmer-en-vb-net/conditions-et-boucles-conditionnelles

Tu parlais de booléens…
Eh oui, lorsque vous écrivez MaVariable = 10, le programme va faire un petit calcul dans son coin afin de vérifier que la valeur de MaVariable est bien égale à 10 ; si c'est le cas, il transforme cela en un booléen de type Vrai.

??

https://openclassrooms.com/courses/apprenez-a-programmer-en-vb-net/conditions-et-boucles-conditionnelles

En gros, si j'écris le code suivant :

Dim x As Integer = 0
If x = 10 Then
End If
… c'est comme si j'écrivais ceci :

Dim x As Integer = 0
Dim b As Boolean = false
b = (x = 10)
If b Then
End If
Eh oui, quelle découverte ! Si je place un boolean dans la condition, il est inutile d'ajouter If b = true Then.

??
0
vb95
Messages postés
2636
Date d'inscription
samedi 11 janvier 2014
Statut
Modérateur
Dernière intervention
27 mai 2022
151 > Utilisateur anonyme
20 avril 2017 à 19:06
Pourquoi While 1 ?
Parce que le « 1 » est toujours vrai, cela signifie donc : « Tourne, mon grand, ne t'arrête pas ! ».

il faut comprendre
While 1 = True


Comme quoi ce cours est très mal fait

Un simple Do Loop suffisait pour l'exemple
0
Utilisateur anonyme > vb95
Messages postés
2636
Date d'inscription
samedi 11 janvier 2014
Statut
Modérateur
Dernière intervention
27 mai 2022

20 avril 2017 à 19:10
ok et pour


Dim x As Integer = 0
If x = 10 Then
End If
… c'est comme si j'écrivais ceci :

Dim x As Integer = 0
Dim b As Boolean = false
b = (x = 10)
If b Then
End If
0
Utilisateur anonyme > Utilisateur anonyme
20 avril 2017 à 20:25
pourtant quand je tape 1 ça fonctionne quand même sans mettre de booléenne
While 1

Console.WriteLine("gogo")


End While
0
Utilisateur anonyme > Utilisateur anonyme
20 avril 2017 à 20:30
 Dim a As Boolean = True


While Not a

Console.Write("gogo")


End While


fonctionne pas


 Dim a As Boolean = False


While Not a

Console.Write("gogo")


End While


ça fonctionne

pourtant l'un ou l'autre le while est Vrai
0
Whismeril
Messages postés
17346
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
27 mai 2022
596
Modifié le 20 avril 2017 à 18:00
A l'instar de VB95, je trouve ta vidéo déplacée.

Lorsque je suis passé au C#, je codais depuis plusieurs années en VB6.
L'organisme formateur en contrat avec mon employeur ne proposait pas de stage de "reconversion", j'ai donc suivi un stage pour débutant en programmation, avec le langage C#.
5 jours 35H.
Les types de bases (y compris le booléen et le tableau) et les boucles (for, while, do), ça a été vu dans la première demi-journée.
Sachant qu'il y a aussi eu un tour de table, un rapide historique de la programmation, une présentation du framework et de visual studio.

Certes le temps du forum, n'est pas celui de la vraie vie, mais deux fils étalés sur presque 3 semaines totalisant 85 messages c'est largement plus que l'équivalent d'une demi journée.

Et ces notions sont simplissimes en regard à ce qu'est VB.Net, si tu bloques là, qu'en sera t il devant une base de données, l'héritage, le polymorphisme, un réseau de neurones?

Je pense qu'il est temps de te poser sérieusement la question, si la programmation c'est fait pour toi.

Ça fait plusieurs jours que je pensais écrire ces lignes, mais je l'ai auraient envoyés en MP pour qu'en plus tu ne te sentes pas humilié de les voir étalés au grand jour.

Déjà, que plusieurs fois, j'ai eu le sentiment que tu ne prends pas en compte ce qu'on te dis et que tu ne fais aucun effort pour chercher et comprendre par toi-même, et qu'en plus, c'est fun de se foutre ouvertement de ceux qui passe un temps fou à essayé de t'aider, non seulement je n’hésite plus, je les poste ici et ce sera mon dernier message en ton encontre.


Quand j'étais petit, la mer Morte n'était que malade.
George Burns
0
Ça fait plusieurs jours que je pensais écrire ces lignes, mais je l'ai auraient envoyés en MP pour qu'en plus tu ne te sentes pas humilié de les voir étalés au grand jour.

lol je te connais pas , tu me connais pas et internet aujourd'hui t'es la et demain t'es plus la donc jmen bah les reins , si toi tu comprends comment une machine sait faire la différence entre Vrai et Faux t'en mieux pour toi , moi je cherche le pourquoi du comment , merci pour tout le temps passer à me répondre , bye
0
BunoCS
Messages postés
15256
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
17 mai 2022
103
21 avril 2017 à 10:08
Bien le bonjour!

Wow...z'avez été bavards. Pédagogues pour les uns, curieux pour les autres, c'est cool!
Mais, au final, Hixale, as-tu la réponse à ta question d'origine? Si oui, on ferme ici et je t'invite à poster d'autres sujets concernant tes autres questions.
Pour tout ce qui touche à l'algorithmie, on peut se retrouver ici
Pour les questions VB.Net, tu es au bon endroit et tu as des interlocuteurs "talentueux".

Inutile de s'énerver pour un rien. Tu as des questions, et c'est légitime de les poser. Par contre, "rembarrer" ceux qui prennent le temps de t'expliquer, c'est pas sympa. Ce n'est pas à Whis ou à VB que tu va apprendre l'algorithmie et l'algèbre booléen. Ce sont des notions qu'ils connaissent par coeur ;)
0
cptpingu
Messages postés
3834
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
20 octobre 2021
125
21 avril 2017 à 14:28
Bonjour.

Il est clair qu'on a affaire un quelqu'un de très borné, et je trouve que Whis et VB95 ont été particulièrement patients (bien plus que je ne saurais l'être :p).

Comme on dit: "On ne fait pas boire un âne qui n'a pas soif". Le pinaillage qu'il fait sur un détail masque sûrement l'inconfort de ne pas maîtriser ce domaine. C'est d'autant plus flagrant qu'il s'énerve et se braque quand vous essayez de l'aider. Il n'est pas dans l'esprit "d'apprendre", mais de montrer qu'il "sait" (et comme ce n'est pas le cas...).

Je pense qu'on peut au moins considérer le sujet comme clos (à défaut que celui-ci ait résolu la question ou non). Je me permet donc de fermer celui-ci.
0