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 :

Appel de 2 fonctions


Sujet :

C++

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2014
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2014
    Messages : 2
    Points : 2
    Points
    2
    Par défaut Appel de 2 fonctions
    Bonsoir,

    J'essaye actuellement de compter le nombre d’occurrences d'un caractère (une lettre) dans une suite de lettres et je veux ensuite afficher la masse de cette lettre (puisque cette lettre correspond a un acide aminé).
    Le nombre d’occurrence marche et est affiché, cependant, à la suite de cela le programme fait comme si je n'avais rien mis après alors que je veux afficher une certaine phrase, savez vous d'ou cela pourrait venir ?

    Voici mon programme :

    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
     
    #include <cstdio>
    #include <cstdlib>
    #include <string>
    #include <iostream>
    #include <cmath>
    #include <conio.h>
     
    using namespace std; 
     
    double A,B,C,D,E,F,G,H,I,J,K,L,M,N,P,Q,R,S,T,V,W,Y;
    float i, n, res=1;
    int p;
     
    K = 128.094 * res;
     
    int nb_occ(char* chaine,char car)                                              
    {
        int c,nbocc = 0,
        size = strlen(chaine);                                       //Taille de la chaine
     
        for (c = 0 ; c < size ; c++)
        {
            if (chaine[c] == car)                                                  
                nbocc ++;                                                           
        }
     
        return nbocc;                                                              
    }
     
    int main(void)                                                         //Fonction principale
    {
     
    n = 1.66054 * 10;                                                               
    p = -27;
    if (p>0) for (i=0; i<p; i++) res=res*n;
    else for (i=0; i<(-p); i++) res=res/n;
     
    getch();
     
        char maChaine[] = "MTYVKKYHPTTKYYGIIHGEKYELQDVLF";
        int nb = nb_occ(maChaine,'K');                                             
     
        cout<<"La chaine : "<<maChaine<<" contient "<<nb<<" fois le caractere 'K'"<<endl;
        cout<<endl;
        fin = nb*K;
        cout<<"La masse de cet acide aminé est : "<<fin<<" Kilogrammes";
     
        system ("PAUSE");
        return 0;
    }


    Cordialement.

  2. #2
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 136
    Points
    23 136
    Par défaut
    Bonjour,

    Plusieurs remarques :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    double A,B,C,D,E,F,G,H,I,J,K,L,M,N,P,Q,R,S,T,V,W,Y;
    Utilise un tableau.

    En C++, on utilise plus des char * mais des std::string.
    En C++, il existe des algorithmes comme count, count_if.

    Tu as oublié un std::endl à la fin de ton programme.

  3. #3
    Membre expert
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 415
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 415
    Points : 3 159
    Points
    3 159
    Par défaut
    Salut

    Je passe rapidement, c'est dommage de s'embêter avec du C quand on peut faire hyper simple en C++11.

    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
    #include <unordered_map>
    #include <iostream>
    #include <algorithm>
    #include <string>
     
    size_t nb_occ(std::string const& chaine, char needle) {
      return std::count(chaine.begin(), chaine.end(), needle);
    }
     
    int main() {
      std::string chaine = "MTYVKKYHPTTKYYGIIHGEKYELQDVLF";
     
      // Methode 1 : on compte par caractère isolé
      std::cout << "La chaîne " << chaine << " contient " << nb_occ(chaine,'K') << " fois le caractère 'K'." << std::endl;
     
      // Methode 2 : on compte toutes les occurences de tous les caractères d'un coup
      std::unordered_map<char,size_t> occurences;
      for(char c : chaine) ++occurences[c];
     
      std::cout << "La chaîne " << chaine << " contient " << occurences['K'] << " fois le caractère 'K'." << std::endl;
      std::cout << "La chaîne " << chaine << " contient " << occurences['Y'] << " fois le caractère 'Y'." << std::endl;
     
      return 0;
    }

  4. #4
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 136
    Points
    23 136
    Par défaut
    Pourquoi lui donner une solution toute faite ?
    Ce n'est pas comme cela qu'il progressera

  5. #5
    Membre chevronné Avatar de Ehonn
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    788
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

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

    Informations forums :
    Inscription : Février 2012
    Messages : 788
    Points : 2 160
    Points
    2 160
    Par défaut
    Citation Envoyé par Neckara Voir le message
    Utilise un tableau.
    Petite précision : les tableaux en C++ c'est std::vector ou std::array si la taille est connue à la compilation (et qu'il tiens sur la pile).

  6. #6
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 136
    Points
    23 136
    Par défaut
    Petite précision pour la précision d'Ehonn, std::array vient du C++11, (option -std=c++11 avec gcc).

    Donc si on veut un tableau de taille fixe alloué automatiquement sans faire du C++11 (compilateur trop vieux par exemple), utiliser un tableau n'est pas un drame .

  7. #7
    Membre chevronné Avatar de Ehonn
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    788
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

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

    Informations forums :
    Inscription : Février 2012
    Messages : 788
    Points : 2 160
    Points
    2 160
    Par défaut
    Et à défaut d'utiliser un compilateur à jour ou n'importe quel équivalent à boost::array, on choisira d'encapsuler le tableau dans une classe pour accéder facilement à sa taille de façon sûre via une méthode (voire on ajoutera les méthodes pour avoir des itérateurs sur ce tableau).

  8. #8
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 136
    Points
    23 136
    Par défaut
    Citation Envoyé par Ehonn Voir le message
    Et à défaut d'utiliser un compilateur à jour ou n'importe quel équivalent à boost::array, on choisira d'encapsuler le tableau dans une classe pour accéder facilement à sa taille de façon sûre via une méthode (voire on ajoutera les méthodes pour avoir des itérateurs sur ce tableau).
    Taille de façon sûre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    int tab[54];
    size_t size = sizeof(tab)/sizeof(*tab);
    Itérateurs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    int tab[54];
    int * iterator_begin = tab; // normalement ça devrait fonctionner avec les algo de la stl
    int * iterator_end = tab + taille_tab;
    Pourquoi s'enquiquiner à faire une classe/réinventer std::array ?

  9. #9
    Membre chevronné Avatar de Ehonn
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    788
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

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

    Informations forums :
    Inscription : Février 2012
    Messages : 788
    Points : 2 160
    Points
    2 160
    Par défaut
    Ton size est même pas const ! :p
    Des méthodes .size() .begin() .end() .cbegin() .cend() sont plus simples à utiliser et à se souvenir, elles sont "STL-friendly".

    Citation Envoyé par Neckara Voir le message
    Pourquoi s'enquiquiner à faire une classe/réinventer std::array ?
    Car je me place dans ton contexte, pas de support de C++11. Pas envie d'utiliser boost::array ou équivalement.
    std::array n'a pas été normalisé sur un coup de tête.

  10. #10
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 136
    Points
    23 136
    Par défaut
    std::array n'a pas été normalisé sur un coup de tête.
    Je ne dis pas le contraire.

    Mais sans C++11 et si tu tiens absolument à avoir begin()/end()/... autant utiliser un std::vector non?

    Pourquoi perdre du temps à développer une classe qui ne t'apportera au final presque rien ?

    Parce que bon, dans les rares cas où tu as besoin d'un tableau constant avec impérativement begin() et compagnie... et que tu ne veux absolument pas d'allocation dynamique... ça se compte sur les doigts d'une main.

  11. #11
    Membre chevronné Avatar de Ehonn
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    788
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

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

    Informations forums :
    Inscription : Février 2012
    Messages : 788
    Points : 2 160
    Points
    2 160
    Par défaut
    Citation Envoyé par Neckara Voir le message
    Mais sans C++11 et si tu tiens absolument à avoir begin()/end()/... autant utiliser un std::vector non?
    Plutôt d'accord

    Citation Envoyé par Neckara Voir le message
    Pourquoi perdre du temps à développer une classe qui ne t'apportera au final presque rien ?

    Parce que bon, dans les rares cas où tu as besoin d'un tableau constant avec impérativement begin() et compagnie... et que tu ne veux absolument pas d'allocation dynamique... ça se compte sur les doigts d'une main.
    Citation Envoyé par Neckara Voir le message
    Citation Envoyé par Ehonn Voir le message
    std::array n'a pas été normalisé sur un coup de tête.
    Je ne dis pas le contraire.
    Si ça été normalisé, c'est que ça doit servir
    On aura même peut être std::dynarray en C++17

    (C'est surtout la dissociation entre le tableau et sa taille qui me dérange.)

  12. #12
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 136
    Points
    23 136
    Par défaut
    Citation Envoyé par Ehonn Voir le message
    Si ça été normalisé, c'est que ça doit servir
    Je ne dis pas le contraire.
    Mais en C++11, le rapport coût/bénéfice de l'utilisation de std::array est quasi-nul.

  13. #13
    Membre chevronné Avatar de Ehonn
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    788
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

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

    Informations forums :
    Inscription : Février 2012
    Messages : 788
    Points : 2 160
    Points
    2 160
    Par défaut
    Citation Envoyé par Neckara Voir le message
    Mais en C++11, le rapport coût/bénéfice de l'utilisation de std::array est quasi-nul.
    Bench (si tu parles de performence) !

  14. #14
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 136
    Points
    23 136
    Par défaut
    Je parlais de coût en développement (quasi-nul car on a juste un #include à rajouter)

Discussions similaires

  1. Appel d'une fonction
    Par georgeabitbol dans le forum ASP
    Réponses: 4
    Dernier message: 08/07/2004, 14h29
  2. Réponses: 4
    Dernier message: 02/06/2004, 16h35
  3. Appel d'une fonction
    Par jfphan dans le forum ASP
    Réponses: 4
    Dernier message: 14/04/2004, 15h06
  4. A la recherche de l'appel d'une fonction...
    Par karl3i dans le forum C
    Réponses: 3
    Dernier message: 24/09/2003, 12h34
  5. appel xmlservice via fonction javascript
    Par pram dans le forum XMLRAD
    Réponses: 2
    Dernier message: 06/05/2003, 14h24

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