Précédent   Forum des professionnels en informatique > Autres langages > Autres langages > Fortran
Fortran Forum d'entraide sur la programmation en Fortran. Avant de poster -> FAQ Fortran
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 03/02/2012, 21h39   #1
Invité de passage
 
Femme
Étudiant
Inscription : février 2012
Messages : 2
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : Algérie

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Électronique et micro-électronique

Informations forums :
Inscription : février 2012
Messages : 2
Points : 0
Points : 0
Par défaut programme tri d un tableau

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)
veronica est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/02/2012, 12h32   #2
Membre actif
 
Homme Guillaume
Développeur informatique
Inscription : janvier 2012
Messages : 27
Détails du profil
Informations personnelles :
Nom : Homme Guillaume
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : janvier 2012
Messages : 27
Points : 169
Points : 169
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:
  • T(j)>=T(i): donc on ne fait rien car T(j) est plus grand ou égal
  • T(j)<T(i): donc on va permuter les deux valeurs. On commence par stocker T(i) dans la variable temporaire box (box=T(i)). Puis on stocke T(j) dans T(i) (T(i)=T(j)) et pour finir T(j)=box. Ce qui nous permet de permuter les deux valeurs.
Donc à la fin de la première étape, on a parcouru tout le sous-tableau T(2:) et on est sûr d'avoir en position 1 la plus petite valeur (ne pas oublier qu'en cas de permutation le sous-tableau est modifié).
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
  • box = T(i) ! Mise en mémoire temporaire
  • T(i)=T(j) ! On écrase T(i) par T(j), la valeur T(i) ayant été sauvegardé plus haut
  • T(j)=box ! On écrase T(j) par box
En fait, elles ne servent qu'à permuter deux valeurs dans un tableau
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.
Nanzilla est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/02/2012, 14h36   #3
Modérateur
 
Inscription : août 2006
Messages : 712
Détails du profil
Informations personnelles :
Localisation : Canada

Informations forums :
Inscription : août 2006
Messages : 712
Points : 917
Points : 917
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 (:).
Sylvain Bergeron est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/02/2012, 15h19   #4
Membre actif
 
Homme Guillaume
Développeur informatique
Inscription : janvier 2012
Messages : 27
Détails du profil
Informations personnelles :
Nom : Homme Guillaume
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : janvier 2012
Messages : 27
Points : 169
Points : 169
Citation:
Envoyé par Sylvain Bergeron Voir le message
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 (.
Merci, je viens de voir, je mets à jour le post ^^.
Nanzilla est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/02/2012, 20h11   #5
Invité de passage
 
Femme
Étudiant
Inscription : février 2012
Messages : 2
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : Algérie

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Électronique et micro-électronique

Informations forums :
Inscription : février 2012
Messages : 2
Points : 0
Points : 0
Citation:
Envoyé par Nanzilla Voir le message
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:
  • T(j)>=T(i): donc on ne fait rien car T(j) est plus grand ou égal
  • T(j)<T(i): donc on va permuter les deux valeurs. On commence par stocker T(i) dans la variable temporaire box (box=T(i)). Puis on stocke T(j) dans T(i) (T(i)=T(j)) et pour finir T(j)=box. Ce qui nous permet de permuter les deux valeurs.
Donc à la fin de la première étape, on a parcouru tout le sous-tableau T(2 et on est sûr d'avoir en position 1 la plus petite valeur (ne pas oublier qu'en cas de permutation le sous-tableau est modifié).
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
  • box = T(i) ! Mise en mémoire temporaire
  • T(i)=T(j) ! On écrase T(i) par T(j), la valeur T(i) ayant été sauvegardé plus haut
  • T(j)=box ! On écrase T(j) par box
En fait, elles ne servent qu'à permuter deux valeurs dans un tableau
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 .

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
veronica est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/02/2012, 11h45   #6
Membre actif
 
Homme Guillaume
Développeur informatique
Inscription : janvier 2012
Messages : 27
Détails du profil
Informations personnelles :
Nom : Homme Guillaume
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : janvier 2012
Messages : 27
Points : 169
Points : 169
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.
Nanzilla est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 17h45.


 
 
 
 
Partenaires

Hébergement Web