Menu

Besoin d'aide à toute la communauté

Messages postés
11
Date d'inscription
lundi 8 mai 2017
Statut
Membre
Dernière intervention
16 avril 2019
-
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 !!!
Afficher la suite 

Votre réponse

2 réponses

Messages postés
5047
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
16 avril 2019
929
0
Merci
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
bienfaitmurhula
Messages postés
11
Date d'inscription
lundi 8 mai 2017
Statut
Membre
Dernière intervention
16 avril 2019
-
alors je voulais savoir comment imbriqué les boucles qui vont tournées pour comparer ces 2 phrases
[Dal]
Messages postés
5047
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
16 avril 2019
929 -
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.
Commenter la réponse de [Dal]
Messages postés
5047
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
16 avril 2019
929
0
Merci
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
Commenter la réponse de [Dal]