IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Fortran Discussion :

programme tri d un tableau


Sujet :

Fortran

  1. #1
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    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 : 1
    Points
    1
    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)

  2. #2
    Membre habitué

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Janvier 2012
    Messages : 27
    Points : 170
    Points
    170
    Par défaut
    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.

  3. #3
    Modérateur

    Profil pro
    Inscrit en
    Août 2006
    Messages
    974
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Août 2006
    Messages : 974
    Points : 1 346
    Points
    1 346
    Par défaut
    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 (:).

  4. #4
    Membre habitué

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Janvier 2012
    Messages : 27
    Points : 170
    Points
    170
    Par défaut
    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 ^^.

  5. #5
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    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 : 1
    Points
    1
    Par défaut
    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

  6. #6
    Membre habitué

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Janvier 2012
    Messages : 27
    Points : 170
    Points
    170
    Par défaut
    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.

Discussions similaires

  1. Programme de tri d'un tableau d'entiers
    Par hamza_java dans le forum x86 16-bits
    Réponses: 0
    Dernier message: 09/05/2010, 20h52
  2. [Débutant] Programme de tri d'un tableau pour 8086
    Par incontrolable dans le forum x86 16-bits
    Réponses: 0
    Dernier message: 09/05/2010, 04h36
  3. [langage] Probleme de tri d'un tableau de tableau
    Par Ludo167 dans le forum Langage
    Réponses: 1
    Dernier message: 25/08/2004, 10h32
  4. [] Tri d'un tableau par ordre alphabétique
    Par cafeine dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 17/09/2002, 08h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo