Demande d'aide pour programme en C

Résolu/Fermé
Dumouth Messages postés 6 Date d'inscription lundi 16 mars 2009 Statut Membre Dernière intervention 16 mars 2009 - 16 mars 2009 à 17:51
Dumouth Messages postés 6 Date d'inscription lundi 16 mars 2009 Statut Membre Dernière intervention 16 mars 2009 - 16 mars 2009 à 19:13
Bonjour à tous,
Voila, je dois faire un petit programme en C pour mes cours, j'utilise Dev C++ mais j'avoue que j'ai quelques soucis.
Premièrement je voudrais savoir si mon utilisation du type Booléen est correcte.
En suite quand je compile mon programme le logiciel me dit que dans mon sous-programme mini par exemple j est une variable non déclarée alors qu'elle est passée par valeur et que ma variable res n'est pas non plus déclarée alors qu'elle l'est en debut du sous-programme.

Programme :

#include <stdio.h>
#define VRAI = 1
#define FAUX = 0
typedef int BOOL;

int mini (int i, int j);
int maxi (int i,int j);
int multiple (int i,int j);

int main (void)
{int a, b, n;
BOOL resultat;
char rec;
printf("Choisissez une fonction :\n 1 pour minimum\n 2 pour maximum\n 3 pour multiple\n 0 pour sortir\n Votre choix?\n");
scanf("%d",&n);
do
{
switch (n)
{
case 0 :
printf("Aurevoir\n");
break;

case 1 :
printf("Entrez votre premier nombre :\n");
scanf("%d",&a);
printf("Entrez votre second nombre :\n");
scanf("%d",&b);
resultat = mini (a ,b);
printf("Le plus petit des deux nombres est : %d.",resultat);
break;

case 2 :
printf("Entrez votre premier nombre :\n");
scanf("%d",&a);
printf("Entrez votre second nombre :\n");
scanf("%d",&b);
resultat = maxi (a ,b);
printf("Le plus grand des deux nombres est : %d.\n",resultat);
break;

case 3 :
printf("Entrez votre premier nombre :\n");
scanf("%d",&a);
printf("Entrez votre second nombre :\n");
scanf("%d",&b);
resultat = multiple (a, b);
if (resultat == VRAI)
printf(" Oui, %d est multiple de %d.\n", a, b);
else
printf("Non, %d n'est pas multiple de %d.\n", a, b);
break;

default :
printf("Veuillez choisir une fonction disponible dans la liste.\n");
break;
}
printf("Voulez-vous refaire un calcul? (o/n)\n");
scanf("%c",&rec);
while (rec != n);





system("pause");
}


int mini (int i, int j)
{
int res;
if (i < j)
res = i;
else
res = j;
return res;
}

int maxi (int i, int j)
{int res;
if (i > j)
res = i;
else
res = j;
return res;
}

int multiple (int i,int j)
{int r, petit, grand;
BOOL res;
r =1;
grand = maxi (i, j);
petit = mini (i, j);
while (r > 0)
{
grand = maxi (res, petit);
petit = mini (res, petit);
r = grand - petit;
}
if (r = 0)
res = VRAI;
else
res = FAUX;

return res;
}






Merci d'avance du coup de main.

10 réponses

Salut,

Il manque l'accolade fermante de ton do ... while.

Je regarde pour les autres erreurs...
0
Dumouth Messages postés 6 Date d'inscription lundi 16 mars 2009 Statut Membre Dernière intervention 16 mars 2009
16 mars 2009 à 18:04
Ah oui pas faux
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 569
16 mars 2009 à 18:06
Salut,

#define VRAI = 1
#define FAUX = 0

il faut mettre
#define VRAI 1
#define FAUX 0 
tu as oublié de mettre l'accolade pour fermer la boucle do{ } while(condition);
Au lieu de while (rec != n); mets
}while (rec != n); 


0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 569
16 mars 2009 à 18:08
Re,

Avec ces corrections, tu peux recompiler ton programme et tester.
Il y a encore des petites erreurs (surtout le \n qui traîne dans le buffer). Je te laisse découvrir ;-)
0
Dumouth Messages postés 6 Date d'inscription lundi 16 mars 2009 Statut Membre Dernière intervention 16 mars 2009
16 mars 2009 à 18:08
Merci ça fonctionne déjà mieux même si c'est pas encore très au point.
0

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

Posez votre question
Dumouth Messages postés 6 Date d'inscription lundi 16 mars 2009 Statut Membre Dernière intervention 16 mars 2009
16 mars 2009 à 18:21
J'ai modifier un peu mon programme mais il foire à l'exécution du sous-programme multiple.
je peux saisir mes variables paramètres mais il ne me retourne pas le résultat. Je pense que c'est les Booléens qui posent problème.
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 569
16 mars 2009 à 18:39
Re,

Essaie ce code (j'ai fait quelques modifications ;-)
#include <stdio.h>
#define VRAI 1
#define FAUX 0
typedef int BOOL;

int mini (int i, int j);
int maxi (int i, int j);
int multiple (int i, int j);

int main (void)
{
  int a, b, n;
  BOOL resultat;
  char rec = 'o';

  while(rec=='o'){
    printf ("Choisissez une fonction :\n 1 pour minimum\n 2 pour maximum\n 3 pour multiple\n 0 pour sortir\n Votre choix? ");
    scanf ("%d", &n);
    getchar();
    switch (n) {
      case 0:
        printf ("Aurevoir\n");
        return 1;
      case 1:
        printf ("Entrez votre premier nombre : ");
        scanf ("%d", &a);
        printf ("Entrez votre second nombre : ");
        scanf ("%d", &b);
        resultat = mini (a, b);
        printf ("Le plus petit des deux nombres est : %d.", resultat);
        break;
      case 2:
        printf ("Entrez votre premier nombre : ");
        scanf ("%d", &a);
        printf ("Entrez votre second nombre : ");
        scanf ("%d", &b);
        resultat = maxi (a, b);
        printf ("Le plus grand des deux nombres est : %d.\n", resultat);
        break;
      case 3:
        printf ("Entrez votre premier nombre : ");
        scanf ("%d", &a);
        printf ("Entrez votre second nombre : ");
        scanf ("%d", &b);
        resultat = multiple (a, b);
        if (resultat == VRAI)
          printf (" Oui, %d est multiple de %d.\n", a, b);
        else
          printf ("Non, %d n'est pas multiple de %d.\n", a, b);
        break;
      default:
        printf ("Veuillez choisir une fonction disponible dans la liste.\n");
        return 1;
      }
    while(getchar()!='\n');
    printf ("\nVoulez-vous refaire un calcul? (o/n) ");
    scanf ("%c", &rec);
  }

  system ("pause");
  return 0;
}


int mini (int i, int j){
  int res;

  if (i < j)
    res = i;
  else
    res = j;
  return res;
}

int maxi (int i, int j){
  int res;

  if (i > j)
    res = i;
  else
    res = j;
  return res;
}

int multiple (int i, int j){
  int r, petit, grand;
  BOOL res;

  r = 1;
  grand = maxi (i, j);
  petit = mini (i, j);
  while (r > 0) {
    grand = maxi (res, petit);
    petit = mini (res, petit);
    r = grand - petit;
  }
  if (r = 0)
    res = VRAI;
  else
    res = FAUX;

  return res;
}
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 569
16 mars 2009 à 18:44
Re,

Voici un test.
Ta fonction multiple ne donne pas le bonne résultat.
2291 = 29 x 79
lami20j@debian:~$ gcc fct.c && ./a.out
Choisissez une fonction :
 1 pour minimum
 2 pour maximum
 3 pour multiple
 0 pour sortir
 Votre choix? 1
Entrez votre premier nombre : 2
Entrez votre second nombre : 4
Le plus petit des deux nombres est : 2.
Voulez-vous refaire un calcul? (o/n) o
Choisissez une fonction :
 1 pour minimum
 2 pour maximum
 3 pour multiple
 0 pour sortir
 Votre choix? 2
Entrez votre premier nombre : 10
Entrez votre second nombre : 1000
Le plus grand des deux nombres est : 1000.

Voulez-vous refaire un calcul? (o/n) o
Choisissez une fonction :
 1 pour minimum
 2 pour maximum
 3 pour multiple
 0 pour sortir
 Votre choix? 3
Entrez votre premier nombre : 2291
Entrez votre second nombre : 79
Non, 2291 n'est pas multiple de 79.

Voulez-vous refaire un calcul? (o/n) n
lami20j@debian:~$ ./a.out
Choisissez une fonction :
 1 pour minimum
 2 pour maximum
 3 pour multiple
 0 pour sortir
 Votre choix? 0
Aurevoir
0
Dumouth Messages postés 6 Date d'inscription lundi 16 mars 2009 Statut Membre Dernière intervention 16 mars 2009
16 mars 2009 à 18:48
Ah mince, en fin chez moi c'est pire quand j'exécute le programme et que je me sert de la fonction multiple il ne m'affiche pas le résultat..Même avec ta version c'est bizarre.
0
Wardog Messages postés 389 Date d'inscription mercredi 5 octobre 2005 Statut Membre Dernière intervention 17 octobre 2009 159
16 mars 2009 à 19:05
Essaye sa:

int multiple (int i, int j){
    if (i == 0 && j == 0)
        return VRAI;
    if (j == 0)
        return  FAUX;
    if (i % j == 0)
        return VRAI;
   return FAUX;
}
0
Dumouth Messages postés 6 Date d'inscription lundi 16 mars 2009 Statut Membre Dernière intervention 16 mars 2009
16 mars 2009 à 19:13
merci j'arrive à passer la 3 ème fonction maintenant :)
0