Problème avec un programme C

Fermé
GH - 22 mars 2008 à 21:48
 Gen - 24 mars 2008 à 02:38
Bonjour,
Je dois faire:
Numéro 2 (18 pts)

Matière: boucles while, do while, for imbriqués, validation, fonctions,

Description:
Écrire un programme C qui permet de dessiner un des chiffres, décrits plus loin, et choisi dans un menu interactif présentant différentes options.
Chiffres à dessiner
Chiffre 0 Chiffre 7
***** *****
* * *
* * *
* * *
***** *
Le programme doit :
• afficher le menu suivant : Menu
O : chiffre 0
S : chiffre 7
Q : quitter
• permettre à l’usager de faire le choix du chiffre à dessiner
• valider le choix de l’usager et lui permettre d'entrer le bon choix
• demander à l’usager de fournir la hauteur du chiffre (nombre de lignes et de colonnes du dessin)
• valider les données (hauteur comprise entre 5 et 11 et impaire)
• permettre à l’usager de recommencer en cas d’erreurs (fournir une autre hauteur)
• permettre à l’usager de faire d’autres dessins (les mêmes chiffres évidement)
• quitter le programme avec l’option Q
Note : Vous devez vous inspirer du squelette du main donné en annexe( page 3 et sur page web)

Critères de correction:
Fonctionnement (compilation et exécution)
: 10 pts
Fonctions et codage (boucles, validation…….) : 7 pts
Présentation du programme (commentaires, indentation, ...) et de l'affichage : 1 pt






Mais là, ça fais un bout que je travaille dessus... et je ne vois plus mes erreurs... quelquerci!'un peux m'aider svp?


voilà ce que ça donne: (il n'y a que la ligne du haut qui affiche pour le chiffre 7, le chiffre 0 n'affiche pas et le quitter lui fonctionne)
Menu
O : Chiffre 0
S : Chiffre 7
Q : Quitter
Entrez votre choix : S
Entrez la hauteur du chiffre : 6
*****

Menu
O : Chiffre 0
S : Chiffre 7
Q : Quitter
Entrez votre choix :
Entrez votre choix : O
Entrez la hauteur du chiffre : 7
Menu
O : Chiffre 0
S : Chiffre 7
Q : Quitter
Entrez votre choix :
Entrez votre choix : Q

Appuyer sur une touche pour continuer


et voilà mon programme:

/* T.p.2 Numero 2

*/
#include <stdio.h>
#include <ctype.h>

//Fonctions

void afficherMenu ()
{
printf ("Menu");
printf ("\n O : Chiffre 0");
printf ("\n S : Chiffre 7");
printf ("\n Q : Quitter");
}
// Fin afficher menu

// Lire choix

char lirechoix (){
char O,S,Q,choix;
do
{
printf(" \nEntrez votre choix : ");
scanf("%c", &choix);
}
while ( choix !='O' && choix !='S' && choix !='Q');
return choix;
}
// Fin lire choix

// Lire hauteur

int lirehauteur() {
int min,max,hauteur;
min=5;
max=11;
do
{
printf(" Entrez la hauteur du chiffre : ");
scanf("%d", &hauteur);
}
while ( hauteur < min && hauteur > max );
return hauteur ;
}
//fin lire hauteur

//Dessiner le chiffre 0

void dessiner0 (int hauteur) {
int i;

for(i=0;i<5;i++)

printf("*");
printf("\n");

for ( hauteur=0; hauteur<4; hauteur++) {
printf ("* *");
printf("\n"); }

for(i=0;i<5;i++)

printf("*");
printf("\n");

}
// Fin dessiner le chiffre0

//Dessiner le chiffre7

void dessiner7 (int hauteur){
int u;
for(u=0;u<5;u++)
printf ("*");
printf ("\n");
for (u =1; u<=4; u++)
{
for (u=1; u <=11; u++)
{
if (u+hauteur==5)
printf ("*");
else
printf (" ");
}
printf ("\n");
}
}
// Fin dessiner le chiffre 7

// Faire une pause
void fairepause ()
{
printf ("\n Appuyer sur une touche pour continuer");
getch();
}
// Fin de faire une pause




//fonction principale

void main()
{
char choix; // choix de l'usager
int hauteur; // hauteur de la lettre

do
{
afficherMenu();
choix = lirechoix();
if ( choix != 'Q' )
{
hauteur = lirehauteur();
switch (choix)
{
case '0' : dessiner0(hauteur); break;
case 'S' : dessiner7(hauteur); break;
}// fin switch
} // fin if
}// fin while
while (choix != 'Q');

fairepause();


} // fin main











M

6 réponses

Bonjour

Tu as bien avancé...

Dans le dessin du 7, tu utilises la même variable u dans 2 boucles imbriquées. Quand tu sors de ta boucle intérieure u vaut 12 et tu sors immédiatement de ta boucle extérieure.
De toutes manières, je ne comprens rien du tout à la logique ce tes boucles. Pour dessiner un 7 d'une hauteur donnée, après avoir tracé la barre du haut, il te reste à écrire hauteur-1 lignes de 4 espaces + 1 *. Je ne vois pas du tout le rapport avec ton u+hauteur==5. Mais je n'ai peut-être pas tout compris.

Dans le dessin du 0,
D'abord le switch. Il ne faut pas confondre le chiffre 0 et la lettre O
ensuite, ta fonction dessiner0 : tu lui donnes une variable hauteur comme paramètre, mais ta boucle for commence par remplacer hauteur par 0. Tu ne pourras plus jamais faire la hauteur voulue, tu l'as oubliée. Alors tu fait 5 boucles au lieu d'en faire hauteur-2 comme il est demandé.
En fait il faudrait faire for (u=0; u<hauteur-2;u++)

Dernières remarques : enlève les char O,S,Q qui ne servent à rien dans lirechoix
et pour afficher 5 *, tu n'as peut être pas besoin d'une boucle, un printf ("*****\n") devrait suffire.
0
encore une remarque

min=5;
max=11;
do
{
printf(" Entrez la hauteur du chiffre : ");
scanf("%d", &hauteur);
}
while ( hauteur < min && hauteur > max ); <--------- incorrect
4<5 vrai 4>11 faux resultat (vrai && faux) = faux sortie de la boucle avec hauteur=4

le test correct est
while ( hauteur < min || hauteur > max );

J'ai corrigé et testé le prog, à part l'ecriture du 7 qui n'est pas belle si hauteur > 7 le reste est bon.
Si tu ne trouve pas tes erreurs je te le passerai.

Salut
0
Premierement, merci...

J'ai tout corrigé mes erreurs, mais là il reste encore deux bog... ce fameux 7 qui affiche toujours la même grandeur et non celle que l'utilisateur entre

Menu
O : Chiffre 0
S : Chiffre 7
Q : Quitter
Entrez votre choix : S
Entrez la hauteur du chiffre : 6
*****
*
*
*
*
Menu
O : Chiffre 0
S : Chiffre 7
Q : Quitter
Entrez votre choix :
Entrez votre choix :

le deuxieme bug c qu'il m'affiche deux fois entrez votre choix en dernier... ??

/* T.p.2 Numero 2

*/
#include <stdio.h>
#include <ctype.h>

//Fonctions

void afficherMenu ()
{
printf ("Menu");
printf ("\n O : Chiffre 0");
printf ("\n S : Chiffre 7");
printf ("\n Q : Quitter");
}
// Fin afficher menu

// Lire choix

char lirechoix (){
char O,S,Q,choix;
do
{
printf("\nEntrez votre choix : ");
scanf("%c", &choix);
}
while ( choix !='O' && choix !='S' && choix !='Q');
return choix;
}
// Fin lire choix

// Lire hauteur

int lirehauteur() {
int min,max,hauteur;
min=5;
max=11;
do
{
printf(" Entrez la hauteur du chiffre : ");
scanf("%d", &hauteur);
}
while ( hauteur < min || hauteur > max );
return hauteur ;
}
//fin lire hauteur

//Dessiner le chiffre 0

void dessiner0 (int hauteur) {
int i;

for(i=0;i<5;i++)

printf("*");
printf("\n");

for ( i=0; i<hauteur-2; i++) {
printf ("* *");
printf("\n"); }

for(i=0;i<5;i++)

printf("*");
printf("\n");

}
// Fin dessiner le chiffre0

//Dessiner le chiffre7

void dessiner7 (int hauteur){
int u;
for(u=0;u<5;u++)
printf ("*");
printf ("\n");
for (u =1; u<=4; u++)
{
for (hauteur=1; hauteur <=4; hauteur++)
{
if (hauteur+u==5)
printf ("*");
else
printf (" ");
}
printf ("\n");
}
}
// Fin dessiner le chiffre 7

// Faire une pause
void fairepause ()
{
printf ("\n Appuyer sur une touche pour continuer");
getch();
}
// Fin de faire une pause




//fonction principale

void main()
{
char choix; // choix de l'usager
int hauteur; // hauteur de la lettre

do
{
afficherMenu();
choix = lirechoix();
if ( choix != 'Q' )
{
hauteur = lirehauteur();
switch (choix)
{
case 'O' : dessiner0(hauteur); break;
case 'S' : dessiner7(hauteur); break;
}// fin switch
} // fin if
}// fin while
while (choix != 'Q');

fairepause();


} // fin main
0
BoonDu06 Messages postés 186 Date d'inscription lundi 7 janvier 2008 Statut Membre Dernière intervention 14 décembre 2010 25
23 mars 2008 à 22:15
Bonjour ,

Je ne sais pas si tu l'a encore appris mais pour tout ce qui est menu à ta place j'aurai utilisé les switch

Exemple :

{
long choixMenu;

printf("=== Menu ===\n\n");
printf ("\n O : Chiffre 0");
printf ("\n S : Chiffre 7");
printf ("\n Q : Quitter");
printf("\nQuel est votre choix ? ");
scanf("%ld", &choixMenu);

printf("\n");

switch (choixMenu)
{
case 1:
printf("Vous avez choisi le chiffre 0 !");
break;
case 2:
printf("Vous avez choisi le chiffre 7");
break;
case 3:
printf("Vous avez choisi de quitter);
break;
default:
printf("Vous n'avez pas rentre une commande valide");
break;
}

Voilà voilà : je sais que ce n'est pas le sens de ta question mais j'ai pensé que sa pourrait t'intéresser ...
Merci de me dire ce que tu en pense ;-)

Ps: je n'ai pas de compilo sous la main donc je ne sais pas si je n'ai pas fait de fautes mais à premières vu il a l'air bon :p

Boon'
0
Bonjour,

Tu es pratiquement arrivé au bout.
Pour dessiner le chiffre 7 voila comment e me suis pris.
//Dessiner le chiffre7

void dessiner7 (int hauteur){
int u;
int h;
int d;

d=div((hauteur-5), 2)-1;
if (d<0) d=0;
printf("\n");
printf ("*****\n");

for(u=0;u<d;u++) printf("    *\n");

for (h=1; h<hauteur-d; h++)
{
    for (u=0;u<5;u++){
      if (((u+h)==5) || ((h>5) && (u==0)))
          printf ("*");
      else
         printf (" ");
    }
printf ("\n");
}
printf ("\n\n");
}
// Fin dessiner le chiffre 7
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
TBC Messages postés 3 Date d'inscription lundi 24 mars 2008 Statut Membre Dernière intervention 24 mars 2008
24 mars 2008 à 02:31
bonjour,peux tu m'aider a comprendre turbo c++
0
C'est-à-dire??
0