Demande d'aide pour programme en C

Résolu
Dumouth Messages postés 6 Date d'inscription   Statut Membre Dernière intervention   -  
Dumouth Messages postés 6 Date d'inscription   Statut Membre Dernière intervention   -
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

jamian
 
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   Statut Membre Dernière intervention  
 
Ah oui pas faux
0
lami20j Messages postés 21331 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570
 
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   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570
 
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   Statut Membre Dernière intervention  
 
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   Statut Membre Dernière intervention  
 
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   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570
 
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   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570
 
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   Statut Membre Dernière intervention  
 
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   Statut Membre Dernière intervention   159
 
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   Statut Membre Dernière intervention  
 
merci j'arrive à passer la 3 ème fonction maintenant :)
0