Besoin d'aide à toute la communauté

bienfaitmurhula Messages postés 21 Statut Membre -  
[Dal] Messages postés 6122 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonsoir la communauté

je voulais savoir comment ecrire un programme en langage C qui permet à l'utilisateur de saisir une chaine de caractères après le programme affiche le temps(minutes) que vous avez saisie, le nombre des fautes et nombre des mots.

ex:

#include<stdio.h>
#include<string.h>
#include<conio.h>
#include<time.h>
int main(){
char s[1000];
double minutes;
int mot;

printf("bonjour les informaticiens bientôt le delais de paiement est proche");

//l'utilisateur doit répeter la même phrase en bas

printf("repeter la même phrase");
scanf("%s",&s);

printf("vous avez saisis <mot> des mots dans <time> minutes", mot,minutes)

//alors s'il y a une erreur le programme affiche cette erreur, si non il affiche seulement le résultat

printf("vous avez saisis %d <mot> des mots dans %f <time> minutes et %d <faute>", mot,minutes;faute)

return 0;
}
votre suite me fera plaisir !!!

2 réponses

  1. [Dal] Messages postés 6122 Date d'inscription   Statut Contributeur Dernière intervention   1 108
     
    Bonjour bienfaitmurhula,

    Tu insères l'entête
    time.h
    ... une étude des fonctions accessibles par cet entête devrait te permettre de décompter le temps assez facilement avec une précision à la seconde près. Par contre, je ne comprends pas pourquoi le temps devrait être représenté sous forme d'un
    double
    .

    http://www.cplusplus.com/reference/ctime/

    Le
    scanf("%s",&s);
    devrait être
    scanf("%s",s);
    car
    s
    étant un tableau de
    char
    , en indiquant juste
    s
    tu passes déjà le pointeur vers le premier élément du tableau.

    Tu ne définis pas ce qu'est "une" faute. Cela se complique, si par exemple, en écrivant "infromaticien" tu dois compter deux fautes parce qu'il y a une permutation de lettres et qu'il manque le pluriel. Par contre, si tu dois juste comparer le mot tapé "infromaticien" et "informaticiens" et, s'ils sont différents, indiquer qu'il y a une faute, cela se fait très facilement avec
    strcmp()
    accessible par
    string.h
    ou simplement en comparant successivement les
    char
    des deux mots.

    Si tu dois définir des fautes comme étant l'absence d'identité entre les mots les uns à la suite des autres, tu dois :

    - définir comment délimiter les mots
    - décider quoi faire si l'utilisateur oublie un mot (par exemple, s'il tape toute la phrase sauf le mot "les", est-ce que tu comptes 1 faute, ou 9 fautes ?)

    Sinon, quelques détails non informatiques, mais puisque ton programme consiste à vérifier l'existence de fautes, c'est dommage que le programme en contienne lui-même :

    - l'orthographe de "le delais" devrait être "le délai"
    - l'orthographe de "repeter" devrait être "répéter" ou "répétez"
    - l'orthographe "vous avez saisis" devrait être "vous avez saisi"
    - je dirais "des mots en %f <time> minutes" plutôt que "des mots dans %f <time> minutes"

    Dal
    0
    1. bienfaitmurhula Messages postés 21 Statut Membre
       
      alors je voulais savoir comment imbriqué les boucles qui vont tournées pour comparer ces 2 phrases
      0
    2. [Dal] Messages postés 6122 Date d'inscription   Statut Contributeur Dernière intervention   1 108
       
      Cela se fait différemment selon ce que tu définis comme étant une "faute" et comment tu les comptes (cf. mon message précédent). Commence par cela, le choix de l'algorithme et des instructions particulières à mettre en oeuvre pour atteindre le but fixé doit se faire dans un second temps.
      0
  2. [Dal] Messages postés 6122 Date d'inscription   Statut Contributeur Dernière intervention   1 108
     
    Un autre problème avec ton code est que
    scanf("%s",s);
    va arrêter sa lecture au premier espace rencontré.

    http://www.cplusplus.com/reference/cstdio/scanf/

    | specifier | Description | Characters extracted                                           |
    +-----------+-------------+----------------------------------------------------------------+
    |    s      | String of   | Any number of non-whitespace characters, stopping at the first |
    |           | characters  | whitespace character found. A terminating null character is    |
    |           |             | automatically added at the end of the stored sequence.         |
    +-----------+-------------+----------------------------------------------------------------+


    En fait, tu peux te servir de cette propriété pour décider que les mots sont délimités par des espaces (ce qui est le cas dans ton exemple, qui ne comporte pas de ponctuation), et faire une boucle répétant l'instruction
    scanf()
    ci-dessus tant qu'il y a des mots saisis disponibles dans le tampon de l'entrée standard
    stdin
    .

    Par exemple, comme cela :

    #include <stdio.h>
    
    #define NB_MOTS_ATTENDUS 10
    
    int main(void) {
        char s[1000];
        int nb_mots = NB_MOTS_ATTENDUS;
    
        printf("tapez : \"bonjour les informaticiens bientôt le délai de paiement est proche\"\n");
    
        while (1) {
            int recup = scanf("%s", s);
            nb_mots = nb_mots - recup;
            printf("J'ai récupéré : [%s] (il faut encore %d mots)\n", s, nb_mots);
            if (nb_mots == 0)
                break;
        }
        printf("J'ai récupéré %d mots\n", NB_MOTS_ATTENDUS);
    
        return 0;
    }

    cela donne ceci :

    $ gcc -Wall 35977319.c
    $ ./a.out
    tapez : "bonjour les informaticiens bientôt le délai de paiement est proche"
    bonjour les informaticiens bientôt le délai de paiement est proche
    J'ai récupéré : [bonjour] (il faut encore 9 mots)
    J'ai récupéré : [les] (il faut encore 8 mots)
    J'ai récupéré : [informaticiens] (il faut encore 7 mots)
    J'ai récupéré : [bientôt] (il faut encore 6 mots)
    J'ai récupéré : [le] (il faut encore 5 mots)
    J'ai récupéré : [délai] (il faut encore 4 mots)
    J'ai récupéré : [de] (il faut encore 3 mots)
    J'ai récupéré : [paiement] (il faut encore 2 mots)
    J'ai récupéré : [est] (il faut encore 1 mots)
    J'ai récupéré : [proche] (il faut encore 0 mots)
    J'ai récupéré 10 mots
    $

    Dal
    0