Demande d'aide pour programme en C

Résolu
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.
Configuration: Windows XP
Firefox 3.0.7

10 réponses

  • Votes
  • Date
  • Date décroissante
  1. Salut,

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

    Je regarde pour les autres erreurs...
    1. Ah oui pas faux
  2. Modérateur
    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); 


    1. Modérateur
      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 ;-)
      1. Merci ça fonctionne déjà mieux même si c'est pas encore très au point.
        1. 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.
          1. Modérateur
            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;
            }
            
            1. Modérateur
              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
              
              1. 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.
                1. 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;
                  }