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 :

Audit programme et avis


Sujet :

Fortran

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Août 2010
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 1
    Par défaut Audit programme et avis
    Bonjour à tous,

    N’étant pas développeur, je me permets de solliciter votre aide car je suis dans l’embarra pour ne pas dire autre chose.
    Il y a très longtemps j’avais un VAX (je sais c’est la préhistoire) sur lequel je faisais tourner un programme en Fortran qui est vraiment très important pour moi. Malheureusement ce qui devais arriver, arriva et ce brave ordinateur à rendu l’âme avec tout le développement qui va avec.

    Par bonheur j’ai récupéré tout de même le code source qui d’après les dires d’un ancien, devrait être la version que l’on utilisait.
    Malheureusement je n’y connais rien en développement et malgré de nombreuses tentatives pour essayer de le compiler, cela ne donne rien.

    En conclusion, il y a-t-il une bonne âme sur ce forum qui serait capable de me donner un coup de main afin de connaitre exactement la version utilisée pour ce programme, me dire si l’exemple ci-dessus est utilisable et par la même occasion, m’orienter afin de trouver une solution pour porter cet outil vers un langage plus contemporain…

    Merci d’avance.

    Exemple d'un des morceaux récupéré:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    programme main
        character*10 CHAR
        real*8 X
    !
    10    call INPUT (X,IERR)
        if (IERR.eq.2) goto 20
        if (IERR.eq.1 .or. IERR.eq.3) then
            print *,'ERREUR -------------'
            goto 10
        end if
        print *,'X ',X
    !
    20    end
    !
    ! SOUS PROGRAMME "INPUT"
        integer*2 function INPUT(VAL,IERR)
        character*40 CHAINE
        character*1 CAR
        real*8 val,XINT,XDEC
        IERR = 0
     
    !  On entre une chaine de caracteres et on sort un reel
    !  On tolere les chiffres le point et la virgule
    !  IERR = 0 si ok. IERR = 1 si erreur de caractere (lettre,espace,signes)
    !  IERR = 2 si pas d'entree
    !  IERR = 3 si trop de virgules ou de points
     
     
    200    format (Q,A)
        read (5,200) NCHAR,CHAINE
        if (NCHAR .eq. 0) goto 902    ! RETURN seul
    !   Longueur de la chaine
        I = len (CHAINE)
    !   ILEN = position du dernier caractere
        do while (CHAINE(I:I) .eq. ' ')
            I = I-1
        end do
        ILEN = I
    !
        NPV = 0        !nombre de point et de virgule
        do I=1,ILEN
            CAR = CHAINE (I:I)
            ICAR = ichar (CAR)
    !         On tolere les caracteres virgule,point et les chiffres de 0 a 9
    C        if (CAR.eq.' ' .or. CAR.eq.',' .or. CAR.eq.'.') goto 10
            if (CAR.eq.',' .or. CAR.eq.'.') goto 10
            if (ICAR.ge.'30'X .and. ICAR.le.'39'X) goto 11
            goto 901
    10        NPV = NPV + 1
            if (NPV .gt.1) goto 903    ! On admet 1 seul POINT ou VIRGULE
    11    end do
     
    !   Position du POINT ou de la VIRGULE
        IPOINT = index (CHAINE,'.')
        IVIRGULE = index (CHAINE,',')
        IM = max (IPOINT,IVIRGULE)
        if (IM .ne. 0) then            ! Traitement de la virgule ou point
    !
    100    format (E12.0)
    !            Conversion CHARACTERE en REEL
            if (IM.eq.1) then
                XINT=0.     ! pas de valeur entiere
            else
                read (CHAINE (:IM-1),100) XINT
            end if
            read (CHAINE (IM+1:I),100) XDEC
    !            Mise a echelle des decimales
            do J=1,(I-IM)
                XDEC = XDEC/10.
            end do
    !            Calcul de la valeur finale
            VAL = XINT+XDEC
    !
        else 
    !            Traitement de l'entier
            read (CHAINE (:ILEN),100) VAL
        end if
        goto 999
     
    !
    901    print *,'erreur au caractere n°',I,' pour le carac
        1tere *',CHAINE (I:I),'*'
        IERR=1
        goto 999
    !
    902    print *,'Pas d''entree'
        IERR=2
        goto 999
    !
    903    print *,'Trop de . ou de ,'
        IERR=3
        goto 999
    !
    999    return
     
        end

  2. #2
    Membre émérite Avatar de genteur slayer
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2002
    Messages
    710
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2002
    Messages : 710
    Par défaut
    cela ressemble à du fortran 77 mais je te conseil de remplacer les les '!' en début de ligne par des 'c' (à la même position' pour plus de compatibilité avec les compilateurs...

    ton code source est-il en un seul fichier ou plusieurs?

    sur quelle machine veux-tu faire tourner ça? et quel os?
    pour PC (win ou linux) il y a les compilo gfortran ou g95 (gratuits) qui doiuvent te compiler tout ça!

  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
    Par défaut
    C'est bien du Fortran 77.

    Si tu as le choix du compilateur, tu as probablement intérêt à prendre le compilateur Intel. Ce dernier supporte mieux les extensions VAX/DEC et il peut y en avoir beaucoup dans des programmes Fortran 77.

    Pour compiler avec Intel Visual Fortran, j'ai dû :
    • Changer "Programme" pour "program" à la première ligne
    • Déplacer le commencement de chaque ligne pour qu'elle commence à la colonne 7 ou plus (sauf une ligne commençant par "1" presqu'à la fin : colonne 6). Le problème vient possiblement de la copie sur le Forum et non de la source.

    J'ai laissé les commentaires en ! et le compilateur comprenait. Il y avait un avertissement de type : La fonction INPUT est integer*2, mais elle est utilisée sans déclaration dans le programme. Elle est alors integer 4 (par défaut).

    Finalement, quand j'ai entré 123.45 en test, le programme a retourné 123.04500

Discussions similaires

  1. Programme multilangue (Avis?)
    Par Brain3D dans le forum Débuter
    Réponses: 4
    Dernier message: 18/08/2012, 18h12
  2. [ENSIBS] Programme et avis
    Par Quatre_Couleurs dans le forum Etudes
    Réponses: 1
    Dernier message: 24/06/2009, 16h55
  3. [Avis] Les meilleurs programmes Java ?
    Par christopheJ dans le forum ImageJ
    Réponses: 69
    Dernier message: 07/10/2008, 01h12
  4. audit securité(votre avis)
    Par lorie52 dans le forum Stages
    Réponses: 5
    Dernier message: 27/06/2008, 11h14
  5. [] Utiliser AVI d'une DLL dans mon programme
    Par seb.49 dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 02/05/2003, 14h52

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