Tri à bulles VB [Résolu/Fermé]

- - Dernière réponse : cptpingu
Messages postés
3830
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
19 novembre 2018
- 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 ;)
Afficher la suite 

8 réponses

Messages postés
1730
Date d'inscription
samedi 11 janvier 2014
Statut
Contributeur
Dernière intervention
16 décembre 2018
0
Merci
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. 
vb95
Messages postés
1730
Date d'inscription
samedi 11 janvier 2014
Statut
Contributeur
Dernière intervention
16 décembre 2018
> Utilisateur anonyme -
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
Utilisateur anonyme > vb95
Messages postés
1730
Date d'inscription
samedi 11 janvier 2014
Statut
Contributeur
Dernière intervention
16 décembre 2018
-
ok donc ça ajoute à l'emplacement ,
If MonTableau(i) > MonTableau(i + 1)


pourquoi on dois mettre le signe supérieur ?
vb95
Messages postés
1730
Date d'inscription
samedi 11 janvier 2014
Statut
Contributeur
Dernière intervention
16 décembre 2018
> Utilisateur anonyme -
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 !
Utilisateur anonyme > vb95
Messages postés
1730
Date d'inscription
samedi 11 janvier 2014
Statut
Contributeur
Dernière intervention
16 décembre 2018
-
ok mais pourquoi on dois mettre
MonTableau(i) > MonTableau(i + 1)
au début est pas à la fin ?
Utilisateur anonyme > Utilisateur anonyme -
c'est bon j'ai compris ;)
Messages postés
12409
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
17 décembre 2018
0
Merci
Si i vaut 2, alors tableau(i) veut dire tableau à l'emplacement 2, du coup tableau(i+1) est tableau à l'emplacement 3.
Utilisateur anonyme -
ok mais pourquoi ya le signe supérieur ? tableau(i) se sera jamais supérieur à tableau(i + 1) ?
Messages postés
12409
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
17 décembre 2018
0
Merci
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).
Utilisateur anonyme -
ah ok d'accord merci , maintenant faut que je comprenne le reste du code :)
Messages postés
12409
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
17 décembre 2018
0
Merci
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.
Utilisateur anonyme > vb95
Messages postés
1730
Date d'inscription
samedi 11 janvier 2014
Statut
Contributeur
Dernière intervention
16 décembre 2018
-
ok ok bref jvais pas vous faire plus de temps je vais mettre un code et vous me direz si il est bon ou pas si oui je mettrais en résolu



Dim EnOrdre As Boolean = False

While Not EnOrdre 'Tant que EnOrdre ne sera pas Vrai While sera Vrai , si EnOrdre sera Vrai alors le While sera Faux et le tri sera bon


EnOrdre = True

For i = 0 To tailletableau - 2

If tableau(i) > tableau(i + 1) Then
intermediaire = tableau(i)
tableau(i) = tableau(i + 1)
tableau(i + 1) = intermediaire
EnOrdre = False

End If

Next


dites moi si c'est correct :) ?
jvais juste t'entais une dernière explication de mon point de vue

Bon un booléenne peut être Vrai ou Faux Mais en réalité il s'agit de 1 ou 0 et en informatique le 1 c'est du courant et 0 pas de courant bref , Donc en Booléenne on à associer le Vrai avec le 1 et le Faux avec le 0 , Une fois arriver au While si il est Vrai donc 1 il rentre dans la boucle parce que il y a un courant électrique mais si il est 0 le programme vas ignorer cette boucle car il n'y à pas eu d'impulsion électrique comme si ce code n’exister pas , donc 1 = Vrai 0 = Faux , et on pourrai très mettre directement 1 ou 0 à la place de Vrai ou Faux comme ceci :

Dim EnOrdre As Boolean = 0

While Not EnOrdre ' Tant que EnOrdre n'est pas 1 ce qui est Vrai donc While 1 donc un courant (Vrai)


EnOrdre = 1

For i = 0 To tailletableau - 2

If tableau(i) > tableau(i + 1) Then
intermediaire = tableau(i)
tableau(i) = tableau(i + 1)
tableau(i + 1) = intermediaire
EnOrdre = 0

End If

Next



Donc un Booléenne c'est juste quelque chose qu'on à associer le 1 en Vrai et le 0 en Faux. exemple: Lumière allumée (Vrai donc 1) Pourquoi ? car 1 c'est du courant

donc ma question de tout a l'heure est: pourquoi on ne pourrai pas inverser le Vrai et Faux , que 1 soit Faux (donc courant) et que 0 soif Vrai (pas de courant) , encore mieux 0 à du courant(qu'on pourrai associer au Vrai) et que 1 n'a pas de courant(qu'on pourrai associer au Faux) , peut être que ça dois vous faire ça dans vos tete <supprimé par la modération> LOL
vb95
Messages postés
1730
Date d'inscription
samedi 11 janvier 2014
Statut
Contributeur
Dernière intervention
16 décembre 2018
> Utilisateur anonyme -
ton code est presque bon

POUR UNE VARIABLE DE TYPE BOOLEAN LES 2 SEULES VALEURS POSSIBLES SONT TRUE et FALSE et c'est TOUT

Avec mon analogie avec les ampoules ou les portes dans mon message précédent où as-tu vu des 1 et des 0 ? j'ai juste évoqué des états par VRAI ou FAUX .


Dim EnOrdre As Boolean = True ' pas de 1 ou 0 c'est CLAIR ou pas ?
While Not EnOrdre ' Tant que EnOrdre n'est pas True et
'While n'est pas une variable : c'est un mot clé

EnOrdre = True ' pas de 0 ou de 1 c'est CLAIR ou pas ?

For i = 0 To tailletableau - 1 ' un tableau de 10 chiffres va de 0 à 9 pour les indices donc de 0 à tailletableau - 1

If tableau(i) > tableau(i + 1) Then
intermediaire = tableau(i)
tableau(i) = tableau(i + 1)
tableau(i + 1) = intermediaire
EnOrdre = False ' pas de 0 ou 1 c'est CLAIR ou pas
End If
Next
TailleTableau = TailleTableau - 1 ' on diminue la taille du tableau ( voir note)
End While


Note : si le tableau va de 0 à 9 ( soit 10 nombres) à la sortie du For Next le plus grand nombre est à la fin du tableau ( en position 9 )
On diminue la taille du tableau de 1 ce qui fait que le tableau va des positions 0 à 8 et on va fait le tri des valeurs aux positions 0 à 8 ( inutile de tester le nombre en position 9 car au For Next précédent on l'a mis en fin de tableau vu que c'est le plus grand des 10 nombres .)

Maintenant si tu ne comprends pas ceci un conseil : arrête la programmation

Par contre ton commentaire en vidéo Youtube est déplacé et démontre un manque de respect envers ceux qui s'acharnent à t'aider
Utilisateur anonyme > vb95
Messages postés
1730
Date d'inscription
samedi 11 janvier 2014
Statut
Contributeur
Dernière intervention
16 décembre 2018
-
fait des recherche sur internet tu verra que Vrai et 1 et Faux est 0 même certains langage utilise bien des booléenne 1 ou 0 et non Vrai et faux , et au chapitre de la boucle While quand il à dit " 1 est toujours Vrai " ça prouve bien se que je veux dire.

ta fais une faute à ton code jcrois c'est pas - 1 mais - 2 non ?
 For i = 0 To tailletableau - 1 ' un tableau de 10 chiffres va de 0 à 9 pour les indices donc de 0 à tailletableau - 1


"Par contre ton commentaire en vidéo Youtube est déplacé et démontre un manque de respect envers ceux qui s'acharnent à t'aider"

désolé j'avais mis ça juste pour le fun
vb95
Messages postés
1730
Date d'inscription
samedi 11 janvier 2014
Statut
Contributeur
Dernière intervention
16 décembre 2018
> Utilisateur anonyme -
Bonjour
VB 6 utilisait 1 et 0 c'est vrai ou quelque chose comme cela !
Mais tu es en VB NET et il n'y a plus de 1 ou de 0 : c'est TRUE ou FALSE

Exact c'est - 2 qu'il faut écrire vu que l'on teste une valeur avec la valeur à l'indice suivant : erreur de ma part
Whismeril
Messages postés
12409
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
17 décembre 2018
> Utilisateur anonyme -
en informatique le 1 c'est du courant et 0 pas de courant

Non, le 1 c'est une tension positive, le 0 c'est une tension négative, pas de tension c'est une panne.

Ensuite la valeur entière 1 ça n'est pas juste un 1 électrique, c'est un octet pour un int8, 2 octets pour 1 int16 et 4 octects pour un int32, composé chacun de 8 bits.

Enfin, si en C++, on peut caster un int en bool, ça n'est pas le cas en VB.Net. Caster, ça veut dire forcer la conversion, donc il y a conversion, donc 1 n'est pas Vrai, mais C++ sait faire la relation
Messages postés
1730
Date d'inscription
samedi 11 janvier 2014
Statut
Contributeur
Dernière intervention
16 décembre 2018
0
Merci


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. 
Utilisateur anonyme > Utilisateur anonyme -
pourtant quand je tape 1 ça fonctionne quand même sans mettre de booléenne
While 1

Console.WriteLine("gogo")


End While
Utilisateur anonyme > Utilisateur anonyme -
 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
Utilisateur anonyme > Utilisateur anonyme -
http://plasserre.developpez.com/cours/vb-net/?page=langage-vb1#LV-B-3-e

Le terme booléen vient de "l'algèbre de Boole", cet algèbre ne travaille que sur les valeurs 1 ou 0 (True ou False)

c'est pas moi qui le dis...
vb95
Messages postés
1730
Date d'inscription
samedi 11 janvier 2014
Statut
Contributeur
Dernière intervention
16 décembre 2018
> Utilisateur anonyme -
C'est l'algèbre de Boole qui travaille sur les valeurs 1 et 0 ( voir https://fr.wikipedia.org/wiki/George_Boole). et Monsieur Boole vivait il y a 150 ans à peu près . L'informatique n'existait pas
Il a conçu cette algèbre avec des circuits électriques rudimentaires avec interrupteurs et ampoule
Dans un circuit avec 2 interrupteurs en série il faut que les 2 interrupteurs sont fermés( 1) pour que l'ampoule s'allume (1) : donc 1 et 1 = 1 . Si un interrupteur est ouvert( donc 0) ou les 2 ( donc 0 et 0) l'ampoule est éteinte (donc 0) donc 0 et 0 = 0 et 0 et 1 = 0
Dans un circuit avec 2 interrupteurs en parallèle il faut qu' un seul ou les 2 interrupteurs sont fermés pour que l'ampoule s'allume : donc 1 ou 1 = 1 et 1 ou 0 = 1 et 0 ou 0 = 0

Quand on veut ramener sa science on doit savoir de quoi on parle !

Vb net ne connait que TRUE et FALSE pour une valeur booléenne
Ce sera ma dernière intervention
Utilisateur anonyme > vb95
Messages postés
1730
Date d'inscription
samedi 11 janvier 2014
Statut
Contributeur
Dernière intervention
16 décembre 2018
-

Dim a As Boolean = True

While Not a = False ' tant que a n'est pas Faux

a = False


Console.WriteLine("go")

a = True

End While



Dim a As Boolean = False

While Not a = True ' tant que a n'est pas Vrai

a = True


Console.WriteLine("go")

a = False

End While




Dim a As Boolean = False

While Not a

a = True


Console.WriteLine("go")

a = False

End While



Dim a As Boolean = True

While Not a ' pourquoi ça ne fonctionne pas ?


Console.WriteLine("go")



End While



Dim a As Boolean = False

While Not a ' et la ça fonctionne ...


Console.WriteLine("go")



End While
Messages postés
12409
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
17 décembre 2018
0
Merci
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
Ç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
Messages postés
14297
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
17 décembre 2018
0
Merci
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 ;)
Messages postés
3830
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
19 novembre 2018
0
Merci
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.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.