Forum INFOMATH
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
Le Deal du moment :
Boutique Nike : -25% dès 50€ sur TOUT le ...
Voir le deal

Nombre de mots d'une phrase

5 participants

Aller en bas

Nombre de mots d'une phrase Empty Nombre de mots d'une phrase

Message par Napoléon Sam 5 Jan - 22:52

Salut,

Un petit exercice pour ceux qui sont intéressés:

Faire une fonction en C/C++ qui retoune le nombre de mots d'un texte donné. Un mot est une suite de lettres. On suppose qu'on dispose d'une fonction qui vérifie si un caractère est une lettre ou non.
Code:

    int isLettre(char c) {
      return (c>=65&&c<=90) || c>=97&&c<=122 ||
          c=='à' || c=='é' || c=='è' || c=='ê';
    }
   
Napoléon
Napoléon
Admin
Admin

Masculin
Nombre de messages : 2934
Localisation : Tunisie
Réputation : 122
Points : 7875
Date d'inscription : 19/03/2007

Feuille de personnage
Capacité linguistique:
Nombre de mots d'une phrase Left_bar_bleue999/1000Nombre de mots d'une phrase Empty_bar_bleue  (999/1000)

https://infomath.1fr1.net

Revenir en haut Aller en bas

Nombre de mots d'une phrase Empty Re: Nombre de mots d'une phrase

Message par manianis Sam 5 Jan - 23:59

Cette fois je ne donnerai pas de solutions jusqu'a voir les contributions des autres.

manianis
Nombre Réel
Nombre Réel

Masculin
Nombre de messages : 975
Localisation : Tunisie
Réputation : 4
Points : 6258
Date d'inscription : 11/10/2007

Feuille de personnage
Capacité linguistique:
Nombre de mots d'une phrase Left_bar_bleue999/1000Nombre de mots d'une phrase Empty_bar_bleue  (999/1000)

http://manianis.sitesled.com/

Revenir en haut Aller en bas

Nombre de mots d'une phrase Empty Re: Nombre de mots d'une phrase

Message par Napoléon Dim 6 Jan - 0:11

Bien fait Smile C'est ce que j'allais dire.
Napoléon
Napoléon
Admin
Admin

Masculin
Nombre de messages : 2934
Localisation : Tunisie
Réputation : 122
Points : 7875
Date d'inscription : 19/03/2007

Feuille de personnage
Capacité linguistique:
Nombre de mots d'une phrase Left_bar_bleue999/1000Nombre de mots d'une phrase Empty_bar_bleue  (999/1000)

https://infomath.1fr1.net

Revenir en haut Aller en bas

Nombre de mots d'une phrase Empty Re: Nombre de mots d'une phrase

Message par informix Dim 6 Jan - 18:09

En JAVA, j'ai une solution. On peut la traduire en C++ aisément:

Code:
    static public ArrayList<Object> allWords(String text) {
        if (text==null || text.length()==0) return null;
        ArrayList<Object> all = new ArrayList<Object>();
        String word = "";
        boolean _begin = false;
        int nbr = 0;
        for (int i=0;i<text.length();i++) {
            if (_begin && !MotAlpha.isLettre(text.charAt(i))) {
                _begin = false;
                all.add(word);
                nbr = nbr + 1;
            }
            if (!_begin && MotAlpha.isLettre(text.charAt(i))) {
                _begin = true;
                word = "";
            }
            if (_begin)
                word = word + text.charAt(i);           
        }
       
        if (_begin) {
            all.add(word);
        }
        return all;
    }

Vos commentaires?
informix
informix
Nombre Rationnel
Nombre Rationnel

Nombre de messages : 399
Réputation : 4
Points : 6529
Date d'inscription : 19/03/2007

Feuille de personnage
Capacité linguistique:
Nombre de mots d'une phrase Left_bar_bleue1000/1000Nombre de mots d'une phrase Empty_bar_bleue  (1000/1000)

Revenir en haut Aller en bas

Nombre de mots d'une phrase Empty Re: Nombre de mots d'une phrase

Message par manianis Dim 6 Jan - 22:57

Je crois que la solution la plus simple consiste à sauter les espaces de début et de fin et de compter ensuite le nombre de séparateurs entre les mots : nbSep (tabulations, esapces, retours à la ligne, signes de ponctuation...)

Le nombre de mots doit être égal à : nbSep + 1

manianis
Nombre Réel
Nombre Réel

Masculin
Nombre de messages : 975
Localisation : Tunisie
Réputation : 4
Points : 6258
Date d'inscription : 11/10/2007

Feuille de personnage
Capacité linguistique:
Nombre de mots d'une phrase Left_bar_bleue999/1000Nombre de mots d'une phrase Empty_bar_bleue  (999/1000)

http://manianis.sitesled.com/

Revenir en haut Aller en bas

Nombre de mots d'une phrase Empty Re: Nombre de mots d'une phrase

Message par manianis Dim 6 Jan - 22:58

informix a écrit:En JAVA, j'ai une solution. On peut la traduire en C++ aisément:

Code:
    static public ArrayList allWords(String text) {
        if (text==null || text.length()==0) return null;
        ArrayList all = new ArrayList();
        String word = "";
        boolean _begin = false;
        int nbr = 0;
        for (int i=0;i
            if (_begin && !MotAlpha.isLettre(text.charAt(i))) {
                _begin = false;
                all.add(word);
                nbr = nbr + 1;
            }
            if (!_begin && MotAlpha.isLettre(text.charAt(i))) {
                _begin = true;
                word = "";
            }
            if (_begin)
                word = word + text.charAt(i);           
        }
       
        if (_begin) {
            all.add(word);
        }
        return all;
    }

Vos commentaires?

Votre solution me parait bonne. Bien que je trouve que l'utilisation des Templates n'est pas justifiée dans ce cas.

manianis
Nombre Réel
Nombre Réel

Masculin
Nombre de messages : 975
Localisation : Tunisie
Réputation : 4
Points : 6258
Date d'inscription : 11/10/2007

Feuille de personnage
Capacité linguistique:
Nombre de mots d'une phrase Left_bar_bleue999/1000Nombre de mots d'une phrase Empty_bar_bleue  (999/1000)

http://manianis.sitesled.com/

Revenir en haut Aller en bas

Nombre de mots d'une phrase Empty Re: Nombre de mots d'une phrase

Message par methodiX Dim 6 Jan - 23:30

le nombre de mots n'est pas connu d'avance. Donc, le recours aux tableaux dynamiques est justifié. Ceci est dit, ArrayList implémente bien un tableau dynamique.
De toute façon, l'idéal à mon avis c'est de retourner une liste chainée.
methodiX
methodiX
Admin
Admin

Masculin
Nombre de messages : 1260
Localisation : Le couloir de l'école polytechnique de Tunis
Réputation : 68
Points : 7257
Date d'inscription : 22/03/2007

Feuille de personnage
Capacité linguistique:
Nombre de mots d'une phrase Left_bar_bleue1000/1000Nombre de mots d'une phrase Empty_bar_bleue  (1000/1000)

Revenir en haut Aller en bas

Nombre de mots d'une phrase Empty Re: Nombre de mots d'une phrase

Message par methodiX Dim 6 Jan - 23:34

manianis a écrit:Je crois que la solution la plus simple consiste à sauter les espaces de début et de fin et de compter ensuite le nombre de séparateurs entre les mots : nbSep (tabulations, esapces, retours à la ligne, signes de ponctuation...)

Le nombre de mots doit être égal à : nbSep + 1

pourtant, je trouve cette solution un peu plus compliquée que celle postée ci-dessus Smile celle ne prend en compte que les char où isLettre(char) retourne True. Donc, elle ignore bien les autres char.

Ca me plait ce genre de discussion/défi Very Happy
methodiX
methodiX
Admin
Admin

Masculin
Nombre de messages : 1260
Localisation : Le couloir de l'école polytechnique de Tunis
Réputation : 68
Points : 7257
Date d'inscription : 22/03/2007

Feuille de personnage
Capacité linguistique:
Nombre de mots d'une phrase Left_bar_bleue1000/1000Nombre de mots d'une phrase Empty_bar_bleue  (1000/1000)

Revenir en haut Aller en bas

Nombre de mots d'une phrase Empty Re: Nombre de mots d'une phrase

Message par manianis Dim 6 Jan - 23:38

Faire une fonction en C/C++ qui retoune le nombre de mots d'un texte donné.
On demande bien le nombre de mots et non pas les mots.

methodiX a écrit:le nombre de mots n'est pas connu d'avance. Donc, le recours aux
tableaux dynamiques est justifié. Ceci est dit, ArrayList implémente
bien un tableau dynamique.
De toute façon, l'idéal à mon avis c'est de retourner une liste chainée.
Oui, c'est correct. Mais, la réponse donnée ne répond pas à aucune des questions posées ci-dessus.

- fonction en C/C++ (car on est dans la rubrique C++)
- nombre de mots (pour se conformer à l'énoncé)

Cependant, la réponse reste acceptable. Personnellement je lui donne 10/10. Elle est bien claire et trés bien rédigée.

manianis
Nombre Réel
Nombre Réel

Masculin
Nombre de messages : 975
Localisation : Tunisie
Réputation : 4
Points : 6258
Date d'inscription : 11/10/2007

Feuille de personnage
Capacité linguistique:
Nombre de mots d'une phrase Left_bar_bleue999/1000Nombre de mots d'une phrase Empty_bar_bleue  (999/1000)

http://manianis.sitesled.com/

Revenir en haut Aller en bas

Nombre de mots d'une phrase Empty Re: Nombre de mots d'une phrase

Message par manianis Dim 6 Jan - 23:43

methodiX a écrit:pourtant, je trouve cette solution est un peu plus compliquée que celle postée ci-dessus Smile celle ci ne prend en compte que les chars où isLettre(char) retourne True. Donc, elle ignore bien les autres char.
Je crois que Nabil ne voulait pas nous limiter à isLettre. Mais il donnait un exemple comment on pourrait faire. Il est possible d'ajouter une autre fonction :
Code:
bool estSeparateur(char c)

methodiX a écrit:Ca me plait ce genre de discussion/défi Very Happy
Je suis de votre avis.

manianis
Nombre Réel
Nombre Réel

Masculin
Nombre de messages : 975
Localisation : Tunisie
Réputation : 4
Points : 6258
Date d'inscription : 11/10/2007

Feuille de personnage
Capacité linguistique:
Nombre de mots d'une phrase Left_bar_bleue999/1000Nombre de mots d'une phrase Empty_bar_bleue  (999/1000)

http://manianis.sitesled.com/

Revenir en haut Aller en bas

Nombre de mots d'une phrase Empty Re: Nombre de mots d'une phrase

Message par methodiX Dim 6 Jan - 23:58

à la manière d'informix une méthode JAVA qui détermine uniquement le nombre de mots:

Code:

    static public int wordsCount(String text) {
        if (text==null || text.length()==0) return 0;
        int nbr = 0;
        boolean _begin = false;
       
        for (int i=0;i < text.length() ; i++) {
            if (_begin && !MotAlpha.isLettre(text.charAt(i))) {
                _begin = false;
                nbr = nbr + 1;
            }
            if (!_begin && MotAlpha.isLettre(text.charAt(i)))
                _begin = true;
        }
        if (_begin) ++nbr;           
        return nbr;
    }
methodiX
methodiX
Admin
Admin

Masculin
Nombre de messages : 1260
Localisation : Le couloir de l'école polytechnique de Tunis
Réputation : 68
Points : 7257
Date d'inscription : 22/03/2007

Feuille de personnage
Capacité linguistique:
Nombre de mots d'une phrase Left_bar_bleue1000/1000Nombre de mots d'une phrase Empty_bar_bleue  (1000/1000)

Revenir en haut Aller en bas

Nombre de mots d'une phrase Empty Re: Nombre de mots d'une phrase

Message par manianis Lun 7 Jan - 0:03

Chokran jazilen king
Bonne adaptation methodiX

manianis
Nombre Réel
Nombre Réel

Masculin
Nombre de messages : 975
Localisation : Tunisie
Réputation : 4
Points : 6258
Date d'inscription : 11/10/2007

Feuille de personnage
Capacité linguistique:
Nombre de mots d'une phrase Left_bar_bleue999/1000Nombre de mots d'une phrase Empty_bar_bleue  (999/1000)

http://manianis.sitesled.com/

Revenir en haut Aller en bas

Nombre de mots d'une phrase Empty Re: Nombre de mots d'une phrase

Message par moudhafer Mar 1 Juin - 19:58

j'ai une idée

les mots sont séparés par des espaces(une ou plusieurs)et par des virgules ou des points.supposons avoir une fonction qui retourne vrai si une lettre est un séparateur,la fin d'une chaine en C est la lettre '\0'.la fonction remplit un tableau par les mots détectés.
char **tab;
char *tmp;
tab=malloc(sizeof(char*)*5);
j=0;
i=0;
nb=0;
while(ch[i]!='\0')//c'est utile dans le cas oû on a plus des espaces a la fin
{
while(separateur(ch[i])){i++;}
j=i;
while(islettre(ch[j])){j++;}
nb++;//on a identifié un mot
if(ch[j]!='\0')
{ch [j]='\0';tmp=strcpy(ch+i);if(nb%5)==0){tab=realloc(tab,sizeof(char*)*nb+5)};tab[nb]=tmp;}
//strcpy copie caractere par caractere jusqu'a trouver le \0,et allocation du grand tab par blocde 5
else{tmp=strcpy(ch+i);break;}//on fait un break car on est arrivé a la fin naturelle de la chaine identifiée par le \0.
i=j+1;

}//fin du while

je suis pas sure a 100%(je suis en metro :p) j'attends vos critiques s'il y en a des erreurs Smile
merci

moudhafer
Entier Naturel
Entier Naturel

Masculin
Nombre de messages : 58
Age : 35
Localisation : france
Réputation : 0
Points : 5367
Date d'inscription : 26/05/2010

Revenir en haut Aller en bas

Nombre de mots d'une phrase Empty Re: Nombre de mots d'une phrase

Message par methodiX Mar 1 Juin - 23:17

1) je te propose d'utiliser les balises [ code] [/ code]. ça embellit plus ton code source.
Code:
char **tab;
char *tmp;
tab=malloc(sizeof(char*)*5);
j=0;
i=0;
nb=0;
while(ch[i]!='\0')//c'est
 utile dans le cas oû on a plus des espaces a la fin

2) à première vue, c'est bon.
methodiX
methodiX
Admin
Admin

Masculin
Nombre de messages : 1260
Localisation : Le couloir de l'école polytechnique de Tunis
Réputation : 68
Points : 7257
Date d'inscription : 22/03/2007

Feuille de personnage
Capacité linguistique:
Nombre de mots d'une phrase Left_bar_bleue1000/1000Nombre de mots d'une phrase Empty_bar_bleue  (1000/1000)

Revenir en haut Aller en bas

Nombre de mots d'une phrase Empty Re: Nombre de mots d'une phrase

Message par moudhafer Mer 2 Juin - 0:04

1)okkk merci je savais pas ce truc Wink merci
2)j'ai verifié et je vois que a 99% c'est bon
merciii

moudhafer
Entier Naturel
Entier Naturel

Masculin
Nombre de messages : 58
Age : 35
Localisation : france
Réputation : 0
Points : 5367
Date d'inscription : 26/05/2010

Revenir en haut Aller en bas

Nombre de mots d'une phrase Empty Re: Nombre de mots d'une phrase

Message par moudhafer Mar 26 Oct - 8:37

salut
a propos j'ai verifié vos solutions,j'ai remarqué que vos algo ne gerent pas le cas ou on a plusieurs espaces entre 2mots!!
Merci

moudhafer
Entier Naturel
Entier Naturel

Masculin
Nombre de messages : 58
Age : 35
Localisation : france
Réputation : 0
Points : 5367
Date d'inscription : 26/05/2010

Revenir en haut Aller en bas

Nombre de mots d'une phrase Empty Re: Nombre de mots d'une phrase

Message par Contenu sponsorisé


Contenu sponsorisé


Revenir en haut Aller en bas

Revenir en haut

- Sujets similaires

 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum