|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité de passage
![]() Étudiant Inscription : février 2012 Messages : 2 ![]() |
Bonjour
dans l programme de tri (fortran) suivant: program tri integer T(10) read (*,*) T do 10 i=1,9 do 20 j=i+1,10 if (T(j).LT.T(i)) then box = T(i) T(i)=T(j) T(j)=box endif 20 continue 10 continue write (*,*) T end pouvez vous svp m expliquer comment ces trois lignes box = T(i) T(i)=T(j) T(j)=box fait trier ce tableau? et pourquoi on les remplace p par T(i)=T(j) ? (je suis débutante en PROGRAMMATION) |
|
|
00
|
|
|
#2 |
|
Membre actif
![]() ![]() Guillaume Développeur informatique Inscription : janvier 2012 Messages : 27 ![]() |
Bonjour, c'est de la logique ^^.
On va essayer d'expliquer. L'idée principale est de permuter les valeurs en plaçant toujours la plus petite du sous-tableau (i:) en position i. Ceci permet de trier le tableau. Donc on commence par I=1. Le bloc do 20 j=i+1,10 if (T(j).LT.T(i)) then parcours un par un les éléments suivants du tableau pour trouver s'il existe un plus petit élément que l'élément en cours T(i). Pour une position J, deux cas de figures se présentent:
Puis on va chercher la deuxième plus petite valeur. Elle ne peut être en i=1, donc on peut commencer à i=2. On va donc se ramener à chercher la plus petite valeur dans le sous-tableau T(3:) que l'on va positionner en i=2. Et ainsi de suite, on réitère la procédure. A l'étape i=9, on compare T(9) et T(10) que l'on permute si nécessaire. Donc pour résumer, à chaque étape i (1<=i<=9), on est sûr d'avoir la ième plus petite valeur en position i. Pour i=10, il ne reste plus qu'une valeur, donc elle est triée ^^. Pour finir voici une explication des commandes
Pour finir, on illustre par un exemple: T(:)=10,80,30,40,50,60,70,20,90 pour i=2, on doit permuter T(2) avec T(8) car T(2)>T(8) box=80=T(2) T(2)=20=T(8) A ce stade, on a T(:)=10,20,30,40,50,60,70,20,90 Et donc il manque un paramètre que l'on remplace T(8)=80=box Et l'on obtient T(:)=10,20,30,40,50,60,70,80,90 Et le tour est joué ^^. PS: Merci pour l'option pour désactiver les smileys :D. |
|
|
00
|
|
|
#3 |
![]() ![]() Inscription : août 2006 Messages : 712 ![]() |
Nanzilla : Pour désactiver les smileys, il y a une case à cocher dans les « options supplémentaires » apparaissant sous la boîte de création de message. Très utile en Fortran pour entrer des (:).
|
|
|
00
|
|
|
#4 |
|
Membre actif
![]() ![]() Guillaume Développeur informatique Inscription : janvier 2012 Messages : 27 ![]() |
|
|
|
00
|
|
|
#5 | |
|
Invité de passage
![]() Étudiant Inscription : février 2012 Messages : 2 ![]() |
Citation:
Bonsoir merci beaucoup pour l tres bonne explication, j ai bien compris la nécessité de l variable box sinon on va ecraser ls valeurs pour chaq remplacement. pr une variable temporaire, svp je veux confirmer si on peux l attribuer un nom différent de box? ou bien box en FORTRAN est utilisé pr lorsqu il s'agit d'une variable temporaire? MERCI bonne soirée |
|
|
|
00
|
|
|
#6 |
|
Membre actif
![]() ![]() Guillaume Développeur informatique Inscription : janvier 2012 Messages : 27 ![]() |
Oui, on peut lui donner un autre nom que box.
Il suffit de bien la déclarer comme suit: INTEGER :: autrenom Ce qui me fait penser que toutes tes variables ne sont pas déclarées. Si tu veux que fortran contrôle la déclaration, il faut rajouter la commande implicit none juste en dessous de programme. Cette commande indique que fortran va contrôler que toutes les variables utilisées sont bien déclarées. Dans ton exemple il manque la déclaration des variables I,J et box qui sont des entiers. |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com