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

Shell et commandes GNU Discussion :

Méthode de Calcul d'exponentiel


Sujet :

Shell et commandes GNU

  1. #21
    Débutant Avatar de étoile de mer
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    978
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 978
    Points : 117
    Points
    117
    Par défaut
    Bonjour voilà le code entier:
    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
    #!/bin/bash
     
    fichier=xwp
    fichier2=xwp2
    declare -a tab tab2
    touch xwp2
     
    ExPow ()
    {
        exp=$(echo "(1*2.718281828459)" | bc) 
        value=1
     
        if [ $x -lt 0 ]
        then
            x2=$(echo $x | awk 'BEGIN{FS="-"} {print $2}')
        else
            x2=$x
        fi
     
        for (( i=1 ; i<=$x2 ; i++ ))
        do
            value=$(echo "$value*$exp" | bc -l)
        done
        if [ $x -lt 0 ]
        then
            value=$(echo "1/$value" | bc -l)
        fi
    }
    k=0
     
    cat $fichier | while true
    do
        read ligne
        if [ "$ligne" = "" ]
        then
            # tri à bulle
            for (( m=0 ; m<k ; m++ ))
            do
                let k2=$k-$m
                for (( n=0 ; n<k2 ; n++ ))
                do
                    comp=$(echo "${tab[n]} < ${tab[m]}" | bc)
                    if [ $comp -eq 1 ]
                    then
                        tampon1=${tab[m]}
                        tampon2=${tab2[m]}
     
                        tab[m]=${tab[n]}
                        tab2[m]=${tab2[n]}
     
                        tab[n]=$tampon
                        tab2[n]=$tampon2
                    fi
                done
            l=0
                until [ $k -eq 0 ] || [ $l -eq 100 ]
                do
                    let k=$k-1
                    echo ${tab2[k]} >> $fichier2
            let l=$l+1
                done
     
            done
            exit
        else
            set -- $ligne
            x=$(echo $3 | awk 'BEGIN{FS="e"} {print $2}')
            value2=$(echo $3 | awk 'BEGIN{FS="e"} {print $1}')
            x=$(echo "$x" | bc -l)
            ExPow
            tab[k]=$(echo "$value*$value2" | bc -l)
            tab2[k]=$(echo $ligne)
            let k=$k+1    
        fi
        let SIZE=$k+1
    done
     
    rm $fichier
    cat $fichier2 | grep insister > $fichier
    cat $fichier2 | grep joindre >> $fichier
    rm $fichier2
    http://www.developpez.net/forums/d85...l/#post4891690
    Le jour est le père du labeur et la nuit est la mère des pensées.

  2. #22
    Rédacteur

    Avatar de ok.Idriss
    Homme Profil pro
    IS Consultant
    Inscrit en
    Février 2009
    Messages
    5 220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : IS Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 5 220
    Points : 19 452
    Points
    19 452
    Par défaut
    Bonjour.

    Le code fonctionne bien chez moi et le for en question a une syntaxe correcte (comme celle décrite par Mygale1978) .

    Sinon le touch xwp2 à la ligne 6 est inutile, tu peut l'enlever (c'était pour débugger mais j'ai oublié de l'enlever). Pareil pour le let SIZE=$k+1, inutile.

    Pour le declare -a tab tab2, essayes de le retirer et regardes si ça marche ...

  3. #23
    Débutant Avatar de étoile de mer
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    978
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 978
    Points : 117
    Points
    117
    Par défaut
    Bonjour Idriss,
    Bizarre chez moi ca fonctionne pas
    quand je retire l'erreur disparait, mais l'autre persiste encore
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    /home/cyrine/Bureau/script.sh: 20: Syntax error: Bad for loop variable
    Le jour est le père du labeur et la nuit est la mère des pensées.

  4. #24
    Rédacteur

    Avatar de ok.Idriss
    Homme Profil pro
    IS Consultant
    Inscrit en
    Février 2009
    Messages
    5 220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : IS Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 5 220
    Points : 19 452
    Points
    19 452
    Par défaut
    Re.

    Remplaces for (( i=1 ; i<=$x2 ; i++ )) par for (( i=1 ; i<=x2 ; i++ )).

    J'ai modifié un peu le code ... il s'exécute maintenant comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ./script.sh fichierEntrée fichierSortie
    ou comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    [ ~]./script.sh 
    Saisir fichier d'entrée : fichierEntrée
    Saisir fichier de sortie : fichierSortie
    [ ~]
    Si tu veut que le fichier de sortie soit le même que le fichier d'entrée tu met le même nom aux deux fichiers à l'exécution.

    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
    #!/bin/bash
     
    if [ $# -lt 2 ]
    then
        printf "Saisir fichier d'entrée : "
        read fichierEnt
        printf "Saisir fichier de sortie : "
        read fichierSort
    else
        fichierEnt=$1
        fichierSort=$2
    fi
    fichierInt=fichier_int
     
    ExPow ()
    {
        exp=$(echo "(1*2.718281828459)" | bc) 
        value=1
     
        if [ $x -lt 0 ]
        then
            x2=$(echo $x | awk 'BEGIN{FS="-"} {print $2}')
        else
            x2=$x
        fi
     
        for (( i=1 ; i<=x2 ; i++ ))
        do
            value=$(echo "$value*$exp" | bc -l)
        done
        if [ $x -lt 0 ]
        then
            value=$(echo "1/$value" | bc -l)
        fi
    }
    k=0
     
    cat $fichierEnt | while true
    do
        read ligne
        if [ "$ligne" = "" ]
        then
            # tri à bulle
            for (( m=0 ; m<k ; m++ ))
            do
                let k2=$k-$m
                for (( n=0 ; n<k2 ; n++ ))
                do
                    comp=$(echo "${tab[n]} < ${tab[m]}" | bc)
                    if [ $comp -eq 1 ]
                    then
                        tampon1=${tab[m]}
                        tampon2=${tab2[m]}
     
                        tab[m]=${tab[n]}
                        tab2[m]=${tab2[n]}
     
                        tab[n]=$tampon
                        tab2[n]=$tampon2
                    fi
                done
                l=0
                until [ $k -eq 0 ] || [ $l -eq 100 ]
                do
                    let k=$k-1
                    echo ${tab2[k]} >> $fichierInt
                    let l=$l+1
                done
     
            done
            exit
        else
            set -- $ligne
            x=$(echo $3 | awk 'BEGIN{FS="e"} {print $2}')
            value2=$(echo $3 | awk 'BEGIN{FS="e"} {print $1}')
            x=$(echo "$x" | bc -l)
            ExPow
            tab[k]=$(echo "$value*$value2" | bc -l)
            tab2[k]=$(echo $ligne)
            let k=$k+1    
        fi
    done
     
    cat $fichierInt | grep insister > $fichierSort
    cat $fichierInt | grep joindre >> $fichierSort
    rm $fichierInt
    Essayes ce code pour voir.

  5. #25
    Rédacteur

    Avatar de ok.Idriss
    Homme Profil pro
    IS Consultant
    Inscrit en
    Février 2009
    Messages
    5 220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : IS Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 5 220
    Points : 19 452
    Points
    19 452
    Par défaut
    C'est normale, fait un chmod +x NomDuScript.sh avant de l'exécuter une première fois. Il faut lui donner les droits d'exécution ...

  6. #26
    Débutant Avatar de étoile de mer
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    978
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 978
    Points : 117
    Points
    117
    Par défaut
    voilà ce qu'il m'affiche
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     line 21: [: -lt : opérateur unaire attendu
     line 32: [: -lt : opérateur unaire attendu
    Le jour est le père du labeur et la nuit est la mère des pensées.

  7. #27
    Rédacteur

    Avatar de ok.Idriss
    Homme Profil pro
    IS Consultant
    Inscrit en
    Février 2009
    Messages
    5 220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : IS Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 5 220
    Points : 19 452
    Points
    19 452
    Par défaut
    Étrange ...

    Bon on va pas s'embêter, remplaces :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    if [ $# -lt 2 ]
    then
        printf "Saisir fichier d'entrée : "
        read fichierEnt
        printf "Saisir fichier de sortie : "
        read fichierSort
    else
        fichierEnt=$1
        fichierSort=$2
    fi
    Par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    printf "Saisir fichier d'entrée : "
    read fichierEnt
    printf "Saisir fichier de sortie : "
    read fichierSort
    Et pendant qu'on y est dit moi quelle est la distro que tu utilises et poste moi le résultat de cette commande :


  8. #28
    Débutant Avatar de étoile de mer
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    978
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 978
    Points : 117
    Points
    117
    Par défaut
    Citation Envoyé par ok.Idriss Voir le message
    Étrange ...

    Bon on va pas s'embêter, remplaces :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    if [ $# -lt 2 ]
    then
        printf "Saisir fichier d'entrée : "
        read fichierEnt
        printf "Saisir fichier de sortie : "
        read fichierSort
    else
        fichierEnt=$1
        fichierSort=$2
    fi
    Par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    printf "Saisir fichier d'entrée : "
    read fichierEnt
    printf "Saisir fichier de sortie : "
    read fichierSort
    Et pendant qu'on y est dit moi quelle est la distro que tu utilises et poste moi le résultat de :

    Non l'erreur c'est à ce niveau
    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
        if [ $x -lt 0 ]
        then
            x2=$(echo $x | awk 'BEGIN{FS="-"} {print $2}')
        else
            x2=$x
        fi
     
        for (( i=1 ; i<=x2 ; i++ ))
        do
            value=$(echo "$value*$exp" | bc -l)
        done
        if [ $x -lt 0 ]
        then
            value=$(echo "1/$value" | bc -l)
        fi
    Le jour est le père du labeur et la nuit est la mère des pensées.

  9. #29
    Rédacteur

    Avatar de ok.Idriss
    Homme Profil pro
    IS Consultant
    Inscrit en
    Février 2009
    Messages
    5 220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : IS Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 5 220
    Points : 19 452
    Points
    19 452
    Par défaut
    Je ne vois pas vraiment d'où ça peut venir (étant donné que ça marche parfaitement chez moi). Vers la fin tu as :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    set -- $ligne
    x=$(echo $3 | awk 'BEGIN{FS="e"} {print $2}')
    value2=$(echo $3 | awk 'BEGIN{FS="e"} {print $1}')
    x=$(echo "$x" | bc -l)
    ExPow
    tab[k]=$(echo "$value*$value2" | bc -l)
    tab2[k]=$(echo $ligne)
    let k=$k+1
    Remplaces x=$(echo "$x" | bc -l) par x=$(echo $x | bc -l).

    Sinon, dans ton fichier, toutes les valeurs de la 3ème colonne se présentent avec des exponentielles ?

    Sinon, quel est le résultat de ls -l /bin | grep bash et quelle est ta distribution ?

  10. #30
    Débutant Avatar de étoile de mer
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    978
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 978
    Points : 117
    Points
    117
    Par défaut
    Sinon, dans ton fichier, toutes les valeurs de la 3ème colonne se présentent avec des exponentielles ?
    Oui il sont tous exprimés en exponentiel
    quel est le résultat de ls -l /bin | grep bash
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    -rwxr-xr-x 1 root root  729040 2009-03-02 15:22 bash
    lrwxrwxrwx 1 root root       4 2009-09-12 18:07 rbash -> bash
    lrwxrwxrwx 1 root root       4 2009-09-12 18:07 sh.distrib -> bash
    La distribution que j'ai : ubunto 9.04
    Le jour est le père du labeur et la nuit est la mère des pensées.

  11. #31
    Rédacteur

    Avatar de ok.Idriss
    Homme Profil pro
    IS Consultant
    Inscrit en
    Février 2009
    Messages
    5 220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : IS Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 5 220
    Points : 19 452
    Points
    19 452
    Par défaut
    Re

    Je ne vois pas trop d'où vient le problème car chez moi le code s'exécute comme prévus ...

    Alors le problème chez toi parrait-il, c'est que x n'est pas interprété comme une valeur avant le test if qui génère l'erreur.

    As-tu remplacé x=$(echo "$x" | bc -l) par x=$(echo $x | bc -l) à l'endroit que je t'ai indiqué ? Je ne suis pas sur que le problème vienne de la (je ne pense pas mais bon).

    Peut-tu également mettre un echo "x = $x" juste avant le if défectueux et me poster le résultat de l'exécution du script ?

  12. #32
    Débutant Avatar de étoile de mer
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    978
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 978
    Points : 117
    Points
    117
    Par défaut
    Re,
    là il affiche 3 erreurs : il les affiche sans arret
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    : erreur de syntaxe : opérande attendue (error token is ".")
    il n'arrete pas le defilement de ces 3 erreurs
    il affiche x=.
    Le jour est le père du labeur et la nuit est la mère des pensées.

  13. #33
    Rédacteur

    Avatar de ok.Idriss
    Homme Profil pro
    IS Consultant
    Inscrit en
    Février 2009
    Messages
    5 220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : IS Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 5 220
    Points : 19 452
    Points
    19 452
    Par défaut
    Et si juste avant echo "x=$x" tu met un x=1 ? ça à l'air d'être un problème de portée des variables ... si tu confirmes ce que je pense (en postant l'exécution du script), on va utiliser des paramètres pour la fonction ExPow ().

  14. #34
    Débutant Avatar de étoile de mer
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    978
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 978
    Points : 117
    Points
    117
    Par défaut
    ok,
    il affiche en boucle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    x = 1
    (standard_in) 2: syntax error
    Le jour est le père du labeur et la nuit est la mère des pensées.

  15. #35
    Rédacteur

    Avatar de ok.Idriss
    Homme Profil pro
    IS Consultant
    Inscrit en
    Février 2009
    Messages
    5 220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : IS Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 5 220
    Points : 19 452
    Points
    19 452
    Par défaut
    Bon, voilà, je pense qu'il s'agit bel et bien d'un problème de portée des variables ... j'ai adapté le code en conséquence (il fonctionne chez moi) :

    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
    #!/bin/bash
     
    if [ $# -lt 2 ]
    then
        printf "Saisir fichier d'entrée : "
        read fichierEnt
        printf "Saisir fichier de sortie : "
        read fichierSort
    else
        fichierEnt=$1
        fichierSort=$2
    fi
     
    fichierInt=fichier_int
     
    ExPow ()
    {
        exp=$(echo "(1*2.718281828459)" | bc) 
        value=1
        x=$1
        if [ $x -lt 0 ]
        then
            x2=$(echo $x | awk 'BEGIN{FS="-"} {print $2}')
        else
            x2=$x
        fi
     
        for (( i=1 ; i<=x2 ; i++ ))
        do
            value=$(echo "$value*$exp" | bc -l)
        done
        if [ $x -lt 0 ]
        then
            value=$(echo "1/$value" | bc -l)
        fi
    }
    k=0
     
    cat $fichierEnt | while true
    do
        read ligne
        if [ "$ligne" = "" ]
        then
            # tri à bulle
            for (( m=0 ; m<k ; m++ ))
            do
                let k2=$k-$m
                for (( n=0 ; n<k2 ; n++ ))
                do
                    comp=$(echo "${tab[n]} < ${tab[m]}" | bc)
                    if [ $comp -eq 1 ]
                    then
                        tampon1=${tab[m]}
                        tampon2=${tab2[m]}
     
                        tab[m]=${tab[n]}
                        tab2[m]=${tab2[n]}
     
                        tab[n]=$tampon
                        tab2[n]=$tampon2
                    fi
                done
                l=0
                until [ $k -eq 0 ] || [ $l -eq 100 ]
                do
                    let k=$k-1
                    echo ${tab2[k]} >> $fichierInt
                    let l=$l+1
                done
     
            done
            exit
        else
            set -- $ligne
            x=$(echo $3 | awk 'BEGIN{FS="e"} {print $2}')
            value2=$(echo $3 | awk 'BEGIN{FS="e"} {print $1}')
            x=$(echo $x | bc -l)
            ExPow $x
            tab[k]=$(echo "$value*$value2" | bc -l)
            tab2[k]=$(echo $ligne)
            let k=$k+1    
        fi
    done
     
    cat $fichierInt | grep insister > $fichierSort
    cat $fichierInt | grep joindre >> $fichierSort
    rm $fichierInt
    Espérons que ça marche cette fois ...

  16. #36
    Débutant Avatar de étoile de mer
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    978
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 978
    Points : 117
    Points
    117
    Par défaut
    Ah desolée vraiment
    ca fonctionne pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Saisir fichier d'entrée : /home/etoile/Bureau/test.txt
    Saisir fichier de sortie : /home/etoile/Bureau/test.txt
    /home/etoile/Bureau/script.sh: line 21: [: -lt : opérateur unaire attendu
    /home/etoile/Bureau/script.sh: line 32: [: -lt : opérateur unaire attendu
    Le jour est le père du labeur et la nuit est la mère des pensées.

  17. #37
    Rédacteur

    Avatar de ok.Idriss
    Homme Profil pro
    IS Consultant
    Inscrit en
    Février 2009
    Messages
    5 220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : IS Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 5 220
    Points : 19 452
    Points
    19 452
    Par défaut
    Bon, bah je sèche ...

    Je peut te proposer un dernier truc "bourrin", on laisse tomber la fonction ExPow () et on traite les calculs exponentiels directement :

    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
    97
    98
    99
    100
    101
    102
    103
    #!/bin/bash
     
    if [ $# -lt 2 ]
    then
        printf "Saisir fichier d'entrée : "
        read fichierEnt
        printf "Saisir fichier de sortie : "
        read fichierSort
    else
        fichierEnt=$1
        fichierSort=$2
    fi
     
    fichierInt=fichier_int
     
    ExPow ()
    {
        exp=$(echo "(1*2.718281828459)" | bc) 
        value=1
        x=$1
        echo "x=$x"
        if [ $x -lt 0 ]
        then
            x2=$(echo $x | awk 'BEGIN{FS="-"} {print $2}')
        else
            x2=$x
        fi
     
        for (( i=1 ; i<=x2 ; i++ ))
        do
            value=$(echo "$value*$exp" | bc -l)
        done
        if [ $x -lt 0 ]
        then
            value=$(echo "1/$value" | bc -l)
        fi
    }
    k=0
     
    cat $fichierEnt | while true
    do
        read ligne
        if [ "$ligne" = "" ]
        then
            # tri à bulle
            for (( m=0 ; m<k ; m++ ))
            do
                let k2=$k-$m
                for (( n=0 ; n<k2 ; n++ ))
                do
                    comp=$(echo "${tab[n]} < ${tab[m]}" | bc)
                    if [ $comp -eq 1 ]
                    then
                        tampon1=${tab[m]}
                        tampon2=${tab2[m]}
     
                        tab[m]=${tab[n]}
                        tab2[m]=${tab2[n]}
     
                        tab[n]=$tampon
                        tab2[n]=$tampon2
                    fi
                done
                l=0
                until [ $k -eq 0 ] || [ $l -eq 100 ]
                do
                    let k=$k-1
                    echo ${tab2[k]} >> $fichierInt
                    let l=$l+1
                done
     
            done
            exit
        else
            set -- $ligne
            x=$(echo $3 | awk 'BEGIN{FS="e"} {print $2}')
            value2=$(echo $3 | awk 'BEGIN{FS="e"} {print $1}')
            x=$(echo $x | bc -l)
            exp=$(echo "(1*2.718281828459)" | bc) 
            value=1
            if [ $x -lt 0 ]
            then
                x2=$(echo $x | awk 'BEGIN{FS="-"} {print $2}')
            else
                x2=$x
            fi
            for (( i=1 ; i<=x2 ; i++ ))
            do
                value=$(echo "$value*$exp" | bc -l)
            done
            if [ $x -lt 0 ]
            then
                value=$(echo "1/$value" | bc -l)
            fi
            tab[k]=$(echo "$value*$value2" | bc -l)
            tab2[k]=$(echo $ligne)
            let k=$k+1    
        fi
    done
     
    cat $fichierInt | grep insister > $fichierSort
    cat $fichierInt | grep joindre >> $fichierSort
    rm $fichierInt
    ça marche ?

  18. #38
    Débutant Avatar de étoile de mer
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    978
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 978
    Points : 117
    Points
    117
    Par défaut
    MErci Idriss,
    le probleme persiste encore
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    /home/etoile/Bureau/script.sh: line 81: [: -lt : opérateur unaire attendu
    /home/etoile/Bureau/script.sh: line 9: [: -lt : opérateur unaire attendu
    (standard_in) 2: syntax error
    /home/etoile/Bureau/script.sh: line 81: [: -lt : opérateur unaire attendu
    /home/etoile/Bureau/script.sh: line 91: [: -lt : opérateur unaire attendu
    Meme erreur qui se repete avec de multiple version.
    Bon je laisse tomber donc
    En tout je vous remercie énormément pour l'effort fourni
    Cordialment
    Cyrine
    Le jour est le père du labeur et la nuit est la mère des pensées.

  19. #39
    Débutant Avatar de étoile de mer
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    978
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 978
    Points : 117
    Points
    117
    Par défaut
    Bon je casse la crane autre fois
    c'est quoi l'erreur ici, franchement je comprends pas
    tous les messages sont sur cette syntaxe
    En plus c'est bizarre qu'un programme marche chez une personne et pas chez une autre
    Le jour est le père du labeur et la nuit est la mère des pensées.

  20. #40
    Rédacteur

    Avatar de ok.Idriss
    Homme Profil pro
    IS Consultant
    Inscrit en
    Février 2009
    Messages
    5 220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : IS Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 5 220
    Points : 19 452
    Points
    19 452
    Par défaut
    Voici l'exécution du script chez moi ...

    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
    ~> cd Desktop/
    ~/Desktop> cat xwp # j'affiche le fichier d'entrée
    insister->to put        -3.553851e-05
    insister->to vote       -7.547198e-06
    insister->to respect    -1.091798e-05
    joindre->to join        -2.994884e-06
    joindre->to alter        2.090002e-06
    ~/Desktop> ./script.sh xwp xwp2 # exécution du script
    ~/Desktop> cat xwp2 # j'affiche le fichier de sortie
    insister->to respect -1.091798e-05
    insister->to vote -7.547198e-06
    insister->to put -3.553851e-05
    joindre->to alter 2.090002e-06
    joindre->to join -2.994884e-06
    ~/Desktop>
    J'ai modifié l'ordre des lignes du fichier d'entrée plusieurs fois, j'ai toujours la même sortie comme prévus (grâce au tri à bulle).

    Citation Envoyé par étoile de mer Voir le message
    c'est quoi l'erreur ici, franchement je comprends pas
    C'est que x n'est pas vu comme une valeur sans doute ... il ne peut donc pas être comparé ... remet un echo "x = $x" juste au dessus pour voir ?

    Citation Envoyé par étoile de mer Voir le message
    En plus c'est bizarre qu'un programme marche chez une personne et pas chez une autre

    change de distribution ^^ ...

Discussions similaires

  1. Réponses: 18
    Dernier message: 23/08/2010, 16h44
  2. Réponses: 0
    Dernier message: 16/07/2009, 17h15
  3. Méthode de calcul d'un échantillon représentatif
    Par auredura dans le forum SAS STAT
    Réponses: 5
    Dernier message: 24/04/2009, 19h12
  4. [débutant]problème pour calculer une exponentielle
    Par sissi25 dans le forum Débuter avec Java
    Réponses: 5
    Dernier message: 11/10/2008, 20h43
  5. Calculer un exponentiel
    Par Bossju dans le forum VB.NET
    Réponses: 1
    Dernier message: 07/02/2007, 19h16

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