Fonction en c

Résolu/Fermé
limbergh Messages postés 658 Date d'inscription dimanche 8 juillet 2007 Statut Membre Dernière intervention 29 juin 2010 - 3 févr. 2008 à 22:37
limbergh Messages postés 658 Date d'inscription dimanche 8 juillet 2007 Statut Membre Dernière intervention 29 juin 2010 - 4 févr. 2008 à 00:24
Bonsoir,

je suis en train de voir les fonctions au cours, je ne comprned pas bien comment ça fonctionne...
J'essaye d'en utilisé dans ce programme mais sans résultat. Soyez clément pour ce que je
vais afficher, je suis débutant.
Mon programme demande l'introduction de 6 chiffres dans une table, l'affichage de ceux-ci et
l'inversion en case 3. C'est ici que ça se complique, pour la case 3 j'aimerais utiliser une
fonction( même si c'est pas nécessaire, c'est juste pour comprendre le fonctionnement).
Si quelqu'un a une idée, je suis preneur...

Merci d'avance pour vos explications.

Limbergh


#include <stdio.h>
#include <stdlib.h>

#define Tmax 5

int tib(int b)
{
int i;
for (i=0;i<=Tmax/2;i++)
{
return 1;
}
return 0;
}


int choix;
int T[Tmax];
int i=0;
int xtp;
int main(int argc, char *argv[])

{
do
{
printf("\n-1- introduire les chiffres de la table\n");
printf("\n-2- affichage de la table\n");
printf("\n-3- inversion de la table\n");
printf("\n-0- fin\n");
printf("votre choix===============>");
scanf("%d", &choix);

switch(choix)
{

case 1 :
{
for (i=0;i<=Tmax;i++)
{
printf("introduisez le chiffre %d de la table :", i);
scanf("%d", &T[i]);
}
break;
}
case 2 :
{
for (i=0;i<=Tmax;i++)
printf("%d\t", T[i]);
break;
}
case 3 :
{
if (tib(T[i])==1)
printf("%d\t", T[i]);
else
printf("...");
break;

}
}
}
while (choix!=0);
system("PAUSE");

return 0;
}

6 réponses

fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
3 févr. 2008 à 22:59
Salut,

Tout d'abord, avant de poster du code, utilise la case "conversation du code" à côté de "souligner", ça sera plus lisible ;)
Sinon, une petite remarque, dans ton switch, n'utilise pas des { } après les case, ça sert à rien, et dans certain cas, ça pourra t'amener des erreurs ;) L'utilisation de { } crée un nouvel espace mémoire dans la pile.
Pour créer ta fonction, tu écris en case 3: inverse(T);
Ensuite tu crées la fonction : void inverse(int *T){ ... }

Bon code
0
limbergh Messages postés 658 Date d'inscription dimanche 8 juillet 2007 Statut Membre Dernière intervention 29 juin 2010 140
3 févr. 2008 à 23:20
rebonsoir,
voilà j'ai défini ma fonction mais quand je compile, ça m'indique que certains éléments
de ma fonction sont déclarées plusierus fois et donc ça ne marche pas.
En plus je ne comprend pas mon erreur.
Si quelqu'un peut m'aider c'est avec plaisir.

Merci d'avance et voici mon code...

#include <stdio.h>
#include <stdlib.h>

#define Tmax 5

int inverse(int *T[Tmax])
{
int i, xtp ;
int *T[Tmax];
for (i=0;i<=Tmax/2;i++)
{
xtp=T[i];
T[i]=T[Tmax-i];
T[Tmax-i]=T[i];
return 1;
}

}



int choix,i,T[Tmax];


int main(int argc, char *argv[])

{
do
{
printf("\n-1- introduire les chiffres de la table\n");
printf("\n-2- affichage de la table\n");
printf("\n-3- inversion de la table\n");
printf("\n-0- fin\n");
printf("votre choix===============>");
scanf("%d", &choix);

switch(choix)
{

case 1 :
     {
     for (i=0;i<=Tmax;i++)
     { 
     printf("introduisez le chiffre %d de la table  :", i);
     scanf("%d", &T[i]);
     }
     break;
     }
case 2 :
     {
     for (i=0;i<=Tmax;i++)
     printf("%d\t", T[i]);
     break;
     }
case 3 :
     {
     inverse(T[Tmax]);
     }
}
}
while (choix!=0);
system("PAUSE");

return 0;
}
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
3 févr. 2008 à 23:30
Re,
Visiblement, tu n'as pas tenu compte de mes petits conseils et pas bien lu mon post ^^.

#include <stdio.h>
#include <stdlib.h>

#define Tmax 5

int inverse(int *T)
{
int i, xtp ;
for (i=0;i<=Tmax/2;i++)
{
xtp=T[i];
T[i]=T[Tmax-i];
T[Tmax-i]=T[i];
return 1;
}

}


int main(int argc, char *argv[]){
  int i;
  int choix;
  int T[Tmax];
  do
    {
      printf("\n-1- introduire les chiffres de la table\n");
      printf("\n-2- affichage de la table\n");
      printf("\n-3- inversion de la table\n");
      printf("\n-0- fin\n");
      printf("votre choix===============>");
      scanf("%d", &choix);

      switch(choix)
	{

	case 1 :
	  for (i=0;i<=Tmax;i++)
	    { 
	      printf("introduisez le chiffre %d de la table  :", i);
	      scanf("%d", &T[i]);
	    }
	  break;
	case 2 :
	  for (i=0;i<=Tmax;i++)
	    printf("%d\t", T[i]);
	  break;
	case 3 :
	  inverse(T);
	}
    } while (choix!=0);

  system("PAUSE");

  return 0;
}

Ca marchera mieux
0
limbergh Messages postés 658 Date d'inscription dimanche 8 juillet 2007 Statut Membre Dernière intervention 29 juin 2010 140
3 févr. 2008 à 23:40
re fiddy,
effectivement je n'avais pas bien compris avec les {}, j'ai du faire une maivaise manipulation.
J'ai fait une petite modification du code et il ne fonctionne toujours pas.
Je ne sais pas si l'erreur est dans la fonction ou dans le case3.
Encore merci pour ton aide.

#include <stdio.h>
#include <stdlib.h>

#define Tmax 5

int inverse(int *T)
{
int i, xtp ;
for (i=0;i<=Tmax/2;i++)
{
xtp=T[i];
T[i]=T[Tmax-i];
T[Tmax-i]=T[i];
return 1;
}

}


int main(int argc, char *argv[]){
  int i;
  int choix;
  int T[Tmax];
  do
    {
      printf("\n-1- introduire les chiffres de la table\n");
      printf("\n-2- affichage de la table\n");
      printf("\n-3- inversion de la table\n");
      printf("\n-0- fin\n");
      printf("votre choix===============>");
      scanf("%d", &choix);

      switch(choix)
	{

	case 1 :
	  for (i=0;i<=Tmax;i++)
	    { 
	      printf("introduisez le chiffre %d de la table  :", i);
	      scanf("%d", &T[i]);
	    }
	  break;
	case 2 :
        for (i=0;i<=Tmax;i++)
	    printf("%d\t", T[i]);
	    break;
	case 3 :
	  (inverse(T)==1);
      printf("%d\t", T[i]);
      break;
	}
    } while (choix!=0);

  system("PAUSE");

  return 0;
}
0

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

Posez votre question
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
4 févr. 2008 à 00:03
Dans ton case 3 : (inverse(T)==1);
L'opérateur == n'est pas approprié ici. L'opérateur d'affectation est = (un seul et non deux). L'opérateur == sert dans les tests conditionnels.

La valeur de retour renvoyée par inverse ne t'est pas utile. Donc, tu peux faire void inverse, au lieu de int inverse.
Et l'appel sera inverse() et non inverse==1; Ou si tu veux récupérer la valeur de retour : int val=inverse(...);
Ou si tu veux faire un test : if(inverse(..)==1) { ça c'est bien passé} else {sinon problème}

Cordialement
0
limbergh Messages postés 658 Date d'inscription dimanche 8 juillet 2007 Statut Membre Dernière intervention 29 juin 2010 140
4 févr. 2008 à 00:24
Merci beaucoup pour ton aide, ça fonctionne!!!!!
0