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
    Candidat au Club
    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
    Points : 2
    Points
    2
    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 actif
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 176
    Points : 258
    Points
    258
    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
    Candidat au Club
    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
    Points : 2
    Points
    2
    Par défaut
    vous voulez que je vous copie tout le programme?

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

    Informations forums :
    Inscription : Avril 2004
    Messages : 176
    Points : 258
    Points
    258
    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 actif
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 176
    Points : 258
    Points
    258
    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
    Candidat au Club
    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
    Points : 2
    Points
    2
    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
    Candidat au Club
    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
    Points : 2
    Points
    2
    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 actif
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 176
    Points : 258
    Points
    258
    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 sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    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 actif
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 176
    Points : 258
    Points
    258
    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
    Candidat au Club
    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
    Points : 2
    Points
    2
    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