Besoin d'aide en FORTRAN (help mayday mayday mayday)
Répondre à la discussion
Affichage des résultats 1 à 12 sur 12

Besoin d'aide en FORTRAN (help mayday mayday mayday)



  1. #1
    invitedbef360d

    Question Besoin d'aide en FORTRAN (help mayday mayday mayday)


    ------

    Bonjour,
    je dois faire un programme qui met 20 valeurs aléatoires dans un tableau (tableau d'une seule colonne). et ecrire se tableau dans un fichier .TXT. Ensuite je dois faire un tri a bulles de ces valeurs pour les classer dans l'ordre croissant et le mettre dans un autre fichier.txt.
    Donc j'y ai passé toute mon aprem et il me met une erreur, je ne comprend pas...

    voici le code :
    Code:
    program tri
    use dflib
    implicit none 
    integer, parameter	::n=20
    real				::tab(n),A,B
    integer				::i,k
    
    open (10,file='tab.txt')
    	do i=1,n
    		call RANDOM (A)
    		B=100*A
    		write (10,*)B
    		tab(i)=B				!*100 parce que random genere des valeurs de 0 a 1
    	enddo
    close (10)
    
    Write(*,*)tab
    call trier(tab)
    end
     
    subroutine trier(tab)
    implicit none
    integer i
    real tab(20),temp
    open (12,file='tab.txt')
    read(12,*)tab
    do i=1,20
    	if (tab(i)>tab(i+1)) then
    	temp=tab(i)
    	tab(i)=tab(i+1)
    	tab(i+1)=temp
    	endif
    enddo
    close(12)
    open(13,file='tri.txt')
    write(13,*)tab
    close(13)
    end
    aidez moi s'il vous plait. dites moi ce qu'il ne va pas

    thibaut

    -----

  2. #2
    invite88ef51f0

    Re : Besoin d'aide en FORTRAN (help mayday mayday mayday)

    Salut,
    Il te met quoi comme erreur ?

  3. #3
    invitedbef360d

    Re : Besoin d'aide en FORTRAN (help mayday mayday mayday)

    j'arrive à compiler (sans erreur ni warning) mais quand je l'execute, voici ce qu'il me met

  4. #4
    invite1d0949fd

    Re : Besoin d'aide en FORTRAN (help mayday mayday mayday)

    Salut,

    dans ta routine Trier, l'index i ne doit courir que de 1 à 19.
    Sinon ton tab(i+1) déborde du tableau.

    René

  5. A voir en vidéo sur Futura
  6. #5
    invite1d0949fd

    Re : Besoin d'aide en FORTRAN (help mayday mayday mayday)

    Re-salut,

    je pense que de toutes façons ton algrithme a un petit problème:
    il ne suffira pas de passer une seule fois au travers de ton tableau pour compléter le tri.

  7. #6
    invitedbef360d

    Re : Besoin d'aide en FORTRAN (help mayday mayday mayday)

    comment est ce que je peux faire pour que ça fonctionne bien parce que là, j'ai corrigé le 20 par le 19 mais il n'y toujours pas de triage. pourtant j'ai fait une boucle, alors pourquoi il ne trie pas?

  8. #7
    invite9c9b9968

    Re : Besoin d'aide en FORTRAN (help mayday mayday mayday)

    Il ne trie pas parce que tu ne passes qu'une seule fois dans le tableau, si tu regardes bien tu ne fais qu'échanger le suivant avec le précédent, mais en aucun cas tu auras trié. Par exemple, si le plus petit élément du tableau est en dernière position, après ton programme il se retrouvera en avant-dernière, et pas en 1ère comme il devrait.

    Il faut que tu implantes une sous-boucle au coeur de ta boucle pour que ça marche (et c'est pourquoi le tri-bulle est si mauvais, c'est un tri en O(n2) )

  9. #8
    invitedbef360d

    Re : Besoin d'aide en FORTRAN (help mayday mayday mayday)

    Citation Envoyé par Gwyddon Voir le message
    Il ne trie pas parce que tu ne passes qu'une seule fois dans le tableau, si tu regardes bien tu ne fais qu'échanger le suivant avec le précédent, mais en aucun cas tu auras trié. Par exemple, si le plus petit élément du tableau est en dernière position, après ton programme il se retrouvera en avant-dernière, et pas en 1ère comme il devrait.

    Il faut que tu implantes une sous-boucle au coeur de ta boucle pour que ça marche (et c'est pourquoi le tri-bulle est si mauvais, c'est un tri en O(n2) )
    comme ça?
    Code:
    program tri
    use dflib
    implicit none 
    integer, parameter	::n=20
    real				::tab(n),A,B
    integer				::i,k,j
    open (10,file='tab.txt')
    	do i=1,n
    		call RANDOM (A)
    		B=100*A
    		write (10,*)B
    		tab(i)=B				!*100 parce que random genere des valeurs de 0 a 1
    	enddo
    close (10)
    
    Write(*,*)tab
    call trier(tab)
    end
     
    subroutine trier(tab)
    implicit none
    integer i,j
    real tab(20),temp
    open (12,file='tab.txt')
    read(12,*)tab
    do j=1,20
    	do i=1,19
    		if (tab(i)>tab(i+1)) then
    		temp=tab(i)
    		tab(i)=tab(i+1)
    		tab(i+1)=temp
    		endif
    	enddo
    enddo
    close(12)
    open(13,file='tri.txt')
    write(13,*)tab
    close(13)
    end
    Mais il ne trie pas

  10. #9
    invitedbef360d

    Re : Besoin d'aide en FORTRAN (help mayday mayday mayday)

    qu'est ce qu'il ne va pas là dans mon algorithme?

  11. #10
    invite6de5f0ac

    Re : Besoin d'aide en FORTRAN (help mayday mayday mayday)

    Citation Envoyé par thibaut123 Voir le message
    qu'est ce qu'il ne va pas là dans mon algorithme?
    Bonjour,

    C'est ta boucle DO J=1, 20.
    Il n'y a pas de raison pour que 20 passages suffisent à tout trier. Il vaut mieux mettre un flag, basculé à TRUE chaque fois qu'un échange a été nécessaire. Comma ça:
    Code:
    LOGICAL FLAG
    DO
        FLAG = FALSE
        DO I=1, 19
            IF (TAB(I) > TAB(I+1)) THEN
                FLAG = TRUE
                * échanger TAB(I) et TAB(I+1)
            END IF
        END DO
    WHILE (FLAG)
    Désolé, je n'ai pas fait de FORTRAN depuis longtemps, ma syntaxe n'est probablement pas correcte, mais l'idée est là.

    -- françois

  12. #11
    invite6eae1772

    Re : Besoin d'aide en FORTRAN (help mayday mayday mayday)

    Salut

    Dans ta double boucle tu te trompes d'indices
    En gros ta boucle j pour le moment elle sert a rien

    Bref tu peux faire comme ca :

    Citation Envoyé par thibaut123 Voir le message
    comme ça?
    Code:
    program tri
    use dflib
    implicit none 
    integer, parameter	::n=20
    real				::tab(n),A,B
    integer				::i,k,j
    open (10,file='tab.txt')
    	do i=1,n
    		call RANDOM (A)
    		B=100*A
    		write (10,*)B
    		tab(i)=B				!*100 parce que random genere des valeurs de 0 a 1
    	enddo
    close (10)
    
    Write(*,*)tab
    call trier(tab)
    end
     
    subroutine trier(tab)
    implicit none
    integer i,j
    real tab(20),temp
    open (12,file='tab.txt')
    read(12,*)tab
    do i=1,20
    	do j=i,20
    		if (tab(i).gt.tab(j)) then
    		temp=tab(j)
    		tab(j)=tab(i)
    		tab(i)=temp
    		endif
    	enddo
    enddo
    close(12)
    open(13,file='tri.txt')
    write(13,*)tab
    close(13)
    end
    Mais il ne trie pas


    Ca devrait mieux marcher

  13. #12
    invite6eae1772

    Re : Besoin d'aide en FORTRAN (help mayday mayday mayday)

    Pardon : j'espere que tu vois bien les modifs, mais dans ta boucle tu dois a vois des indices i ET j courants

    Si tu ne vois pas bien comment ca marche le plus simple et de prendre une feuille de papier et de regarder comment ca marche pas a pas

Discussions similaires

  1. besoin d'un correcteur et besoin d'aide
    Par invite850a2440 dans le forum Mathématiques du collège et du lycée
    Réponses: 8
    Dernier message: 16/12/2007, 20h00
  2. Besoin d'aide, beaucoup d'aide...
    Par invite3b3656b3 dans le forum TPE / TIPE et autres travaux
    Réponses: 3
    Dernier message: 30/11/2007, 14h20
  3. [Divers] besoin d'aide
    Par invitea34fdd1d dans le forum Biologie
    Réponses: 1
    Dernier message: 18/09/2007, 10h24
  4. besoin d'aide
    Par invite59749b45 dans le forum Matériel - Hardware
    Réponses: 0
    Dernier message: 25/08/2007, 16h38
  5. Besoin d'aide pour coder en fortran !
    Par invite778899b7 dans le forum Logiciel - Software - Open Source
    Réponses: 8
    Dernier message: 29/11/2006, 23h35
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...