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

Langage Delphi Discussion :

Compter le nombre de voyelle d'une chaine de caractères


Sujet :

Langage Delphi

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    244
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2005
    Messages : 244
    Points : 85
    Points
    85
    Par défaut Compter le nombre de voyelle d'une chaine de caractères
    bonsoir, je dois compter le nombre de voyelles présentes dans une chaine de caractère.
    je ne comprend pas pourquoi il affiche le nombre totale de caractère dans le mot et non le nombre totale de voyelle

    merci

    voici mon 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
    function compte(c:char;st:string):integer;
    var i,cpt:integer;
    begin
    cpt:=0;
           for i:= 1 to length(st) do
           cpt:=cpt+1;
     
            CASE st[i] of
            'a':cpt:=cpt+1;
            'e':cpt:=cpt+1;
            'i':cpt:=cpt+1;
            'o':cpt:=cpt+1;
            'u':cpt:=cpt+1;
            'y':cpt:=cpt+1;
           end;
           compte:=cpt;
          end;
     
     
    procedure TForm1.BTNcalculeClick(Sender: TObject);
    var s:string;
        car:char;
        n:integer;
        begin
          s:=editentree.text;
          car:=editcar.text[1];
          n:=compte(car,s);
          showmessage(IntToStr(n));
    end;
    Modération : Ajout des balises [ CODE] par NoisetteProd

  2. #2
    Membre confirmé

    Homme Profil pro
    Chef de Projet ATIC
    Inscrit en
    Novembre 2005
    Messages
    274
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Chef de Projet ATIC
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2005
    Messages : 274
    Points : 508
    Points
    508
    Par défaut
    1/ Il te faut encadrer ta boucle for par un Begin/End
    2/ Tu augmentes ton compteur cpt à chaque lettre à cause de la ligne située juste en dessous du For (cpt:=cpt+1;). Il faut donc supprimer aussier cette ligne.

    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
    function compte(c:char;st:string):integer; 
    var i,cpt:integer; 
    begin 
    cpt:=0; 
    for i:= 1 to length(st) do 
    begin                             // Ligne à ajouter
    // Ligne à supprimer : cpt:=cpt+1; 
    CASE st[i] of 
    'a':cpt:=cpt+1; 
    'e':cpt:=cpt+1; 
    'i':cpt:=cpt+1; 
    'o':cpt:=cpt+1; 
    'u':cpt:=cpt+1; 
    'y':cpt:=cpt+1; 
    end; 
    end;                             // Ligne à ajouter
    compte:=cpt; 
    end;
    Autres conseils :

    - Le 1er argument de ta fonction n'est jamais utilisé, autant la supprimer.
    - Tu devrais convertir ta chaîne en minuscules avant de la traiter, car sinon la lettre A ne sera pas comptée car il est en majuscule.
    - Il te manque la gestion des caractères accentués.
    - Tu devrais indenter tes blocs begin/end pour qu'ils soient plus lisibles

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    244
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2005
    Messages : 244
    Points : 85
    Points
    85
    Par défaut comptage de voyelle
    merci, fallais juste supprimer la ligne: cpt:=cpt+1; et ca fonctionne

  4. #4
    Expert éminent sénior

    Avatar de sjrd
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2004
    Messages
    4 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Suisse

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2004
    Messages : 4 517
    Points : 10 154
    Points
    10 154
    Par défaut
    Tu peux faire plus simple et plus efficace comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    function Compte(C : Char; St : string) : integer;
    var I : integer;
    begin
      Result := 0;
      for I := 1 to Length(St) do if St[I] in ['a', 'e', 'i', 'o', 'u', 'y'] then inc(Result);
    end;
    Et si tu dois traiter des chaînes interminables, tu peux vouloir miser plus sur l'efficacité que sur la lisibilité, alors ça donne qqch comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    function Compte(C : Char; St : string) : integer;
    var I : integer;
    const
      Voyelles : array[0..25] of integer =
        [1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0];
    begin
      Result := 0;
      for I := Length(St) downto 0 do inc(Result, Voyelles[Ord(St[I])-Ord('a')]);
    end;
    Oui je sais c'est pas vraiment très joli...

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    244
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2005
    Messages : 244
    Points : 85
    Points
    85
    Par défaut
    oui c sur que c plus court mais bon il fonctionne donc je garde celui que j'ai fait,
    merci

  6. #6
    Membre expert
    Avatar de e-ric
    Homme Profil pro
    Apprenti chat, bienfaiteur de tritons et autres bestioles
    Inscrit en
    Mars 2002
    Messages
    1 561
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Apprenti chat, bienfaiteur de tritons et autres bestioles

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 561
    Points : 3 951
    Points
    3 951
    Par défaut
    Salut

    Petite remarque : le paramètre c de type Char ne sert pas à grand chose.

    cdlt

    e-ric

  7. #7
    Membre averti
    Avatar de delphichem
    Inscrit en
    Octobre 2002
    Messages
    280
    Détails du profil
    Informations forums :
    Inscription : Octobre 2002
    Messages : 280
    Points : 338
    Points
    338
    Par défaut
    Et binsûr pour généraliser, tu peux faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for I := 1 to Length(St) do if UpCase(St[I]) in ['A', 'E', 'I', 'O', 'U', 'Y'] then

  8. #8
    Membre expert
    Avatar de e-ric
    Homme Profil pro
    Apprenti chat, bienfaiteur de tritons et autres bestioles
    Inscrit en
    Mars 2002
    Messages
    1 561
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Apprenti chat, bienfaiteur de tritons et autres bestioles

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 561
    Points : 3 951
    Points
    3 951
    Par défaut
    Salut

    Je vois que tout le monde s'amuse alors je contribue ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    function Compte(const st : string) : integer; 
    var 
      I : integer; 
    begin 
      Result := 0; 
      for I := 1 to Length(St) do 
        Inc(Result,Ord(LowerCase(st[I])[1] in ['a', 'e', 'i', 'o', 'u', 'y'] ));
    end;
    Amusant, non?

    cdlt

    e-ric

  9. #9
    Expert éminent sénior

    Avatar de sjrd
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2004
    Messages
    4 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Suisse

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2004
    Messages : 4 517
    Points : 10 154
    Points
    10 154
    Par défaut
    Citation Envoyé par e-ric
    Amusant, non?
    Tiens c'est joli ça Chapeau bas

    PS : j'arrive pas à croire que j'avais pas vu pour le C : Char

  10. #10
    Membre expert
    Avatar de e-ric
    Homme Profil pro
    Apprenti chat, bienfaiteur de tritons et autres bestioles
    Inscrit en
    Mars 2002
    Messages
    1 561
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Apprenti chat, bienfaiteur de tritons et autres bestioles

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 561
    Points : 3 951
    Points
    3 951
    Par défaut
    C'est un métier ;-)

    Bonne soirée à tous !

    e-ric

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Compter le nombre de 'e' dans une chaine de caractère.
    Par vital_net dans le forum Général Python
    Réponses: 7
    Dernier message: 11/11/2009, 18h33
  2. Réponses: 1
    Dernier message: 13/05/2009, 13h49
  3. Réponses: 4
    Dernier message: 04/03/2009, 10h18
  4. Compter le nombre de caractere dans une chaine
    Par jmjmjm dans le forum C++
    Réponses: 13
    Dernier message: 19/11/2006, 11h37
  5. [Tableaux] compter le nombre de caractere d'une chaine
    Par phpaide dans le forum Langage
    Réponses: 3
    Dernier message: 01/06/2006, 15h00

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