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

C++ Discussion :

C-Array et division


Sujet :

C++

  1. #1
    Membre actif
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2013
    Messages : 11
    Par défaut C-Array et division
    bonjour,

    je suis en train de traduire l'algorithme d'alignement local "smith_waterman" en un programme c++ mais je suis vraiment coincée là!
    l'algorithme ne doit pas rester tel qu'il est! il y a des modifications à faire.
    en effet:
    -le score d'alignement est égal à: 100/(nombre de caractères de la promière séquence) dans le cas d'un match
    -le score d'alignement est égal à: -(100/(nombre de caractères de la promière séquence)) dans le cas d'un mismatch.
    d'une manière à ce que le score maximal existant dans la matrice ne dépasse pas 100.

    Mon problème c'est que je trouve des valeurs supérieures à 100 dans la matrice ce qui n'est pas admissible.

    qui parmi vous aura l'amabilité de m'aider s'il vous plait?

    merci,

  2. #2
    Membre très actif
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 176
    Par défaut
    l'erreur est là: suis la direction de mon doigt...

    Plus sérieusement, ça va être dur de t'aider sans voir ce que tu as fait.

  3. #3
    Membre actif
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2013
    Messages : 11
    Par défaut
    vous voulez que je vous copie tout le programme?

  4. #4
    Membre très actif
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 176
    Par défaut
    Citation Envoyé par salma1990 Voir le message
    vous voulez que je vous copie tout le programme?
    ben au moins la partie qui alimente la matrice

  5. #5
    Membre très actif
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 176
    Par défaut
    juste une tentative dans le vide... es-tu sure que "nombre de caractères de la première séquence" est toujours > 0 ?

  6. #6
    Membre actif
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2013
    Messages : 11
    Par défaut
    oui oui! en fait c'est l'utilisateur qui tape les deux séquences comme entrées à chaque fois que je fais un essai je tape deux séquences qui ne sont pas vides

  7. #7
    Membre actif
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2013
    Messages : 11
    Par défaut
    maintenant j'ai modifié le programme mais la matrice ne contient que des 0

    voilà le code:

    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
     
    #include <iostream>
    #include <cstdlib>
    #include <string>
    #include <cmath>
    #include <sys/time.h>
    using namespace std;
     
    double similarity_score(char a,char b);
    double find_array_max(double array[],int length);
    int N_a,N_b;
    string seq_a, seq_b;
    int main(){
        cout<<" tapez la premiere sequence"<<endl; cin>> seq_a;
        cout<<" tapez la deuxieme sequence"<<endl; cin>> seq_b;
        N_a = seq_a.length()+1;                     // get the actual lengths of the sequences
        N_b = seq_b.length()+1;
     
        double H[N_a+1][N_b+1];
         for(int i=0;i<=N_a+1;i++){
            H[i][0]=0;
          }
         for(int j=0;j<=N_b+1;j++){
          H[0][j]=0;
          }
     
        double temp[3];
        int I_i[N_a+1][N_b+1],I_j[N_a+1][N_b+1];
     
        for(int i=1;i<=N_a;i++){
        for(int j=1;j<=N_b;j++){
         if(seq_a[i]==seq_b[j])
     
         H[i][j] = H[i-1][j-1]+similarity_score(seq_a[i],seq_b[j]);
          else
     
     
          temp[0] = H[i-1][j]-similarity_score(seq_a[i],seq_b[j]);
          temp[1] = H[i][j-1]-similarity_score(seq_a[i],seq_b[j]);
          temp[2] = 0.;
          H[i][j] = find_array_max(temp,3);
        }
        }
     
      cout<<"**********************************************"<<endl;
      cout<<" la matrice de scores est: "<<endl<<endl;
      for(int i=0;i<=N_a-1;i++){
        for(int j=0;j<=N_b-1;j++){
          cout<<H[i][j]<<"   ";
        }
        cout<<endl;
        }
      double H_max = 0.;
      int i_max=0,j_max=0;
      for(int i=0;i<=N_a-1;i++){
        for(int j=0;j<=N_b-1;j++){
          if(H[i][j]>H_max){
    	H_max = H[i][j];
    	i_max = i;
    	j_max = j;
          }
        }
      }
     
      double similarity_score(char a,char b){
     
      double result;
     
          result=100/(N_a-1);
     
      return result;
    }
     
    double find_array_max(double array[],int length){
     
      double max = array[0];            // start with max = first element
      ind = 0;
     
      for(int i = 1; i<length; i++){
          if(array[i] > max){
    	max = array[i];
    	ind = i;
          }
      }
      return max;                    // return highest value in array
    }
     
     
     
    }

  8. #8
    Membre très actif
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 176
    Par défaut
    c'est la totalité du code ? Je demande parce que ça ne compile pas, pour plusieurs raisons.
    Les tableaux style C avec [] doivent être déclarés avec des valeurs constantes entre les crochets (c'est le cas pour H, I_i et I_j) alors que dans le code ils sont alloués dynamiquement avec la longueur des chaines entrées. Pourquoi ne pas utiliser des vector ?

    dans la fonction find_array_max, ind n'est pas déclarée et ne sert pas à grand chose d'après ce que j'ai pu voir.

  9. #9
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    double similarity_score(char a,char b){
     
      double result;
     
          result=100/(N_a-1);
     
      return result;
    }
    Tu fais une division entière, mais tu retournes le résultat en double, je pense donc que ton intention était de faire une division à virgule flottante:
    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    double similarity_score(char a,char b){
     
      double result;
     
          result=100.0/(N_a-1.0);
     
      return result;
    }
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  10. #10
    Membre très actif
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 176
    Par défaut
    attention également à tes boucles, par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for(int i=0;i<=N_a+1;i++){
            H[i][0]=0;
        }
    alors que la première dimension de H va de 0 à N_a, ta boucle va 1 "cran" trop loin...

  11. #11
    Membre actif
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2013
    Messages : 11
    Par défaut
    merci

Discussions similaires

  1. Diviser un array toutes les deux valeurs
    Par MrWazo dans le forum Langage
    Réponses: 5
    Dernier message: 07/05/2015, 14h40
  2. [PHP 5.4] Diviser un array en 3
    Par Rifton007 dans le forum Langage
    Réponses: 9
    Dernier message: 26/08/2013, 10h54
  3. TStringList en array of string
    Par JediKerian dans le forum Langage
    Réponses: 2
    Dernier message: 20/03/2003, 15h37
  4. Réponses: 2
    Dernier message: 23/02/2003, 00h49
  5. passage en paramètre d'un array dynamique 2D
    Par Guigui_ dans le forum Langage
    Réponses: 4
    Dernier message: 27/11/2002, 19h47

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