Besoin d'aide pour ce programme

Besoin d'aide pour ce programme - C - Programmation

Marsh Posté le 26-04-2007 à 22:55:49    

Chers amis,
 
Voici mon problème... Je dois concevoir un programme qui permet de créer un tableau modulable. Pour ce faire j'utilise le compilateur turbo C et j'ai créé mon propre header file dans lequel j'ai placé le prototype de mes fonctions. Tout fonctionne parfaitement sauf deux points... Edition de la valeur minimum et de la valeur maximum.
Lorsque je compile mon programme, il me dit en effet qu'il y a une erreur de syntaxe mais je ne la trouve pas ! Je dois également créer une fonction qui permet de à l'utilisateur de savoir la position de la valeur min et de la valeur max (Là j'ai vraiment besoin d'aide LOL) !  
 
Pouvez m'aider ? Voici mon programme :  
 
D'abord le Header File :
 
/**************************/
/* Header File fonction exercice 4 */
/**************************/
#ifndef fct_ex4.h
#define fct_ex4.h
 
 int menu (void) ;
 int nb_valeur (void) ;
 void saisie (float *p_tab, int n) ;
 void edit (float *p_tab, int n) ;
 float max (float *p_tab, int n) ; /* C'est ici qu'il y a un problème */
 float min (float *p_tab, int n) ; /* C'est ici qu'il y a un problème */
 void croissant (float *p_tab1, float *p_tab2, int n) ;
 void decroissant (float *p_tab1, float *p_tab2, int n) ;
 
#endif
 
Ensuite mes fonctions :  
 
/*************/
/* Les fonctions */
/*************/
#include<stdio.h>
#include<conio.h>
#include<D:\TC\1Auto\Ex4\Version2\fct_ex4.h>
 
/*****************/
/* Affichage du menu */
/*****************/
int menu (void)
{
 int choix, x1, y1 ;
 
 printf("Que d‚sirez-vous ?\n" ) ;
 printf("ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ\n\n" ) ;
 
 printf("1 --> Introduire le nombre de valeurs\n" ) ;
 printf("2 --> Saisie des valeurs\n" ) ;
 printf("3 --> Edition du tableau\n" ) ;
 printf("4 --> Valeur maximum\n" ) ;
 printf("5 --> Valeur minimum\n" ) ;
 printf("6 --> Position de la valeur maximum\n" ) ;
 printf("7 --> Position de la valeur minimum\n" ) ;
 printf("8 --> Classement par ordre croissant\n" ) ;
 printf("9 --> Classement par ordre d‚croissant\n" ) ;
 printf("0 --> Quitter\n\n" ) ;
 
 printf("Faites votre choix : " ) ;
 x1 = wherex () ; y1 = wherey () ;
 
 do
 {
  gotoxy (x1, y1) ;
  clreol () ;
  scanf ("%d", &choix) ;
 
 } while (choix<0 || choix>9) ;
 return choix ;
}
 
/**************************/
/* Selection du nombre de valeurs */
/**************************/
int nb_valeur (void)
{
 int N ;
 
 clrscr () ;
 printf("Nombre de valeurs que devra contenir votre tableau : " ) ;
 scanf("%d",&N) ;
 
 return N ;
}
 
/****************/
/* Saisie des valeurs */
/****************/
void saisie (float *p_tab, int n)
{
 int x2, y2, i ;
 float x ;
 
 clrscr () ;
 printf ("Saisie des valeurs\n" ) ;
 printf ("ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ\n\n" ) ;
 
 i = 0 ;
 
 printf (" Valeur [%2d] = ",i) ;
 
 x2 = wherex () ; y2 = wherey () ;
 
 for (i = 1 ; i < n ; i++)
 {
  printf ("\n Valeur [%2d] = ", i ) ;
 }
 for ( i = 0 ; i < n ; i++ )
 {
  gotoxy (x2,y2) ;
  scanf ("%f", &x) ;
  p_tab[i] = x ;
  y2++ ;
 
 }
}
 
/*****************/
/* Edition des valeurs */
/*****************/
void edit (float *p_tab, int n)
{
 int i ;
 
 clrscr () ;
 printf ("Edition des valeurs\n" ) ;
 printf ("ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ\n\n" ) ;
 printf("Vous avez introduit les valeurs suivantes : \n\n" ) ;
 
 for ( i = 0 ; i < n ; i++ )
 {
  printf("La valeur en [%2d] est = %.3f \n", i, *(p_tab+i));
 }
 
 getch () ;
}
 
/*****************/
/* Fonction Maximum */
/*****************/
float max (float *p_tab, int n)
{
 
 int cpt ;
 float max ;
 
 max = *p_tab ;
 
 cpt = 1 ;
 
 while (cpt < n)
 {
  if ( *(p_tab+cpt) > max )
  {
   max = *(p_tab+cpt)   ;
 
   cpt = cpt + 1 ;
  }
 
 }
 
 printf("La valeur maximum est : %f", max) ;
}
 
/****************/
/* Fonction minimum */
/****************/
float min (float *p_tab, int n)
{
 
 int cpt ;
 float min ;
 
 min = *p_tab ;
 
 
 for(cpt=0; cpt<n ; cpt++)
 {
  if ( *(p_tab+cpt) < min )
  {
   min = *(p_tab+cpt) ;
 
   cpt = cpt + 1 ;
  }
 
 }
 
 printf("La valeur minimum est : %f", min) ;
 
}
 
/*****************/
/* Fonction Croissant */
/*****************/
void croissant (float *p_tab1, float *p_tab2, int n)
{
 
 float provisoir ;
 int cpt1, cpt2 ;
 
 for (cpt1=0 ;cpt1<n-1 ; cpt1++)
 {
  p_tab2 = p_tab1 ;
 
  for (cpt2=cpt1 ; cpt2<n ; cpt2++)
  {
 
   if (*p_tab2 < *p_tab1)
   {
    provisoir = *p_tab2 ;
    *p_tab2 = *p_tab1 ;
    *p_tab1 = provisoir ;
   }
   p_tab2++ ;
  }
  p_tab1++ ;
 }
}
 
 
/*******************/
/* Fonction Décroissant */
/*******************/
void decroissant (float *p_tab1, float *p_tab2, int n)
{
 
 float provisoir ;
 int cpt1, cpt2 ;
 
 for (cpt1=0 ;cpt1<n-1 ; cpt1++)
 {
  p_tab2 = p_tab1 ;
 
  for (cpt2=cpt1 ; cpt2<n ; cpt2++)
  {
 
   if (*p_tab2 > *p_tab1)
   {
    provisoir = *p_tab2 ;
    *p_tab2 = *p_tab1 ;
    *p_tab1 = provisoir ;
   }
   p_tab2++ ;
  }
  p_tab1++ ;
 }
}
 
Enfin m'a fonction principale :
 
/*****************/
/* Fonction principale */
/*****************/
#include<stdio.h>
#include<conio.h>
#include<alloc.h>
#include<stdlib.h>
 
#include<D:\TC\1Auto\Ex4\Version2\fct_ex4.h>
#include<D:\TC\1Auto\Ex4\Version2\fct_ex4.c>
 
void main (void)
{
 int choix ;
 int n ;
 float *p_tab ;
 
 do
 {
  clrscr () ;
 
  choix = menu () ;
 
  switch (choix)
  {
         case 0 : abort () ;
 
         case 1 : n = nb_valeur () ;
         p_tab = (float*)malloc(n*sizeof(float)) ;
         saisie (p_tab, n) ;
         break ;
 
         case 2 : saisie (p_tab, n) ;
         break ;
 
         case 3 : edit (p_tab, n) ;
         break ;
 
         case 4 : max (p_tab,n) ; /* C'est ici qu'il y a un problème */
         break ;
 
         case 5 : min (p_tab,n) ; /* C'est ici qu'il y a un problème */
         break ;
 
         case 8 : croissant (p_tab, p_tab, n) ;
         edit (p_tab, n) ;
                                            break ;
 
         case 9 : decroissant (p_tab, p_tab, n) ;
         edit (p_tab, n) ;
                                             break ;
 
  }
 }while (choix!=0) ;
 
 getch () ;
}
 
A toutes et à tous vraiment un grand merci

Reply

Marsh Posté le 26-04-2007 à 22:55:49   

Reply

Marsh Posté le 27-04-2007 à 07:43:49    

Donne le message d'erreur du compilo.

Reply

Marsh Posté le 27-04-2007 à 19:19:16    

matafan a écrit :

Donne le message d'erreur du compilo.


 
Voici ce que dit le compilateur :  
 
Error FCT_EX4.H : Declaration syntax error  
Error FCT_EX4.H : Declaration syntax error
Error FCT_EX4.C : Declaration syntax error

Reply

Marsh Posté le 27-04-2007 à 19:20:16    

ligne ?


---------------
Blog photo/récits activités en montagne http://planetcaravan.net
Reply

Marsh Posté le 27-04-2007 à 20:03:06    

tes fonction min() et max() doivent retourner un float mais ne retournent rien. Et main doit retourner un int.

Message cité 1 fois
Message édité par -Opera- le 27-04-2007 à 20:03:25

---------------
You get so used to things the way they are. And I've always been alone. I guess that makes me lonely.
Reply

Marsh Posté le 27-04-2007 à 20:08:52    


 
Ligne 11 : FCT_EX4.H : Declaration Syntax Error
Ligne 12 : FCT_EX4.H : Declaration Syntax Error
Ligne 110 : FCT_EX4.C : Declaration Syntax Error

Reply

Marsh Posté le 27-04-2007 à 20:19:25    

Ah et puis pourquoi cpt = cpt + 1 au lieu de cpt++ ? [:mlc]


---------------
You get so used to things the way they are. And I've always been alone. I guess that makes me lonely.
Reply

Marsh Posté le 27-04-2007 à 20:20:01    

-Opera- a écrit :

tes fonction min() et max() doivent retourner un float mais ne retournent rien. Et main doit retourner un int.


 
Même en fesant ceci cela ne marche pas :  
 
 
/********************/
/* Fonction Maximum */
/********************/
float max (float *p_tab, int n)
{
 
 int cpt ;
 float max ;
 
 max = *p_tab ;
 
 cpt = 1 ;
 
 while (cpt < n)
 {
  if ( *(p_tab+cpt) > max )
  {
   max = *(p_tab+cpt)   ;
 
   cpt = cpt + 1 ;
  }
 
 }
 
 return (max) ;
}
 
/* Fonction Principale */  
 
case 4 : float v_max ;
    v_max = max (p_tab, n) ;
    printf("La valeur maximum est %.3f", v_max) ;
    break ;

Reply

Marsh Posté le 27-04-2007 à 21:50:31    

poste ton code avec numeros de ligne et coloration synthaxique on y verra déja plus clair


---------------
Blog photo/récits activités en montagne http://planetcaravan.net
Reply

Marsh Posté le 28-04-2007 à 07:55:03    

C'est un pointeur vers un float, pas un float.

Reply

Marsh Posté le 28-04-2007 à 07:55:03   

Reply

Marsh Posté le 28-04-2007 à 08:46:32    

Problème ici :

Code :
  1. while (cpt < n)
  2. {
  3.    if ( *(p_tab+cpt) > max )
  4.    {
  5.      max = *(p_tab+cpt)   ;
  6.      cpt = cpt + 1 ;
  7.    }
  8. }

il faut écrire

Code :
  1. while (cpt < n)
  2. {
  3.    if ( *(p_tab+cpt) > max )
  4.       max = *(p_tab+cpt)   ;
  5.    cpt = cpt + 1 ;
  6. }

Apparemment c'est le même problème dans la fonction min.


Message édité par Trap D le 28-04-2007 à 08:54:37
Reply

Marsh Posté le 28-04-2007 à 12:06:56    

bisounours a écrit :

p_tab est float.


bisounours a écrit :

Y a une différence entre tes 2 quotes? Ah si les crochets mais ça ne change rien au déroulement du code.


T'es sûr que tu connais le C bisounours ?

Reply

Marsh Posté le 28-04-2007 à 18:59:57    

bisounours a écrit :

Y a une différence entre tes 2 quotes? Ah si les crochets mais ça ne change rien au déroulement du code.


Moi je ne vois pas de crochets mais des accolades. Et justement, ça change énormément au déroulement du code...
 

bisounours a écrit :

Non je sais rien t'es trop fort! C'est la réponse que tu attendais?


Non, il veut juste connaître ton niveau de C. Parce que parler d'adresses "non entières" et ignorer l'utilité des accolades laisse quand-même rêveur...
 

bisounours a écrit :

Je n'ai pas la prétention d'être un Dieu du C mais il m'arrive de faire des erreurs d'inattention sans sortir de la cuisse de Jupiter.


Beaucoup sur ce fofo n'en font pas...
 

bisounours a écrit :

En tout cas je propose des solutions au lieu de critiques inutiles.


Beaucoup sur ce fofo aussi (probablement les mêmes d'ailleurs). Et dans la cat. C, j'ai souvent vu le pseudo de Matafan apparaître...


Message édité par Sve@r le 28-04-2007 à 19:22:54

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Marsh Posté le 28-04-2007 à 21:14:39    

Ne t'énerve pas ce sont les bases du C que tu ne maîtrises pas c'est tout.
Le problème était que l'incrémentation du compteur cpt était dans l'action prise lorsque le test est vrai,( puisque elle était dans le bloc des crochets/accolades), donc lorsque le test du if n'est pas vrai ça boucle...
Maintenant, si on enlèves les crochets/accolades il n'y a que la mémorisation du max effectuée lorque le test du if réussit et l'incrémentation a toujours lieu donc ça ne boucle plus.

Reply

Marsh Posté le 28-04-2007 à 22:34:35    

bisounours a écrit :


Y a une différence entre tes 2 quotes? Ah si les crochets mais ça ne change rien au déroulement du code.


 
ah ouais qd meme...  :ouch:


---------------
Hobby eien /人◕ ‿‿ ◕人\
Reply

Marsh Posté le 29-04-2007 à 09:04:39    

tu devrais sérieusement te remettre en questions...


---------------
Hobby eien /人◕ ‿‿ ◕人\
Reply

Marsh Posté le 29-04-2007 à 11:21:27    

Tamahome a écrit :

tu devrais sérieusement te remettre en questions...


 
Parle à mon cul ma tête est malade.

Reply

Marsh Posté le 29-04-2007 à 12:47:34    

bisounours a écrit :

Parle à mon cul ma tête est malade.


Pfff... heureusement que tu as supprimé tous tes messages du topic où tu nous sortais toutes tes âneries !!!
Matafan, Trap D, Tamahome et tous les autres pros qui liront ce topic sauront apprécier :sarcastic:


Message édité par Sve@r le 29-04-2007 à 12:56:29

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Marsh Posté le 29-04-2007 à 12:54:06    

pis c'est super courageux, on voit qu'il assume...


---------------
Hobby eien /人◕ ‿‿ ◕人\
Reply

Marsh Posté le 29-04-2007 à 12:59:40    

Tamahome a écrit :

pis c'est super courageux, on voit qu'il assume...


Le plus drôle, c'est qu'il existe réellement dans ce fofo un super dieu du C qui se surnomme "bisounours-codeur". Lui ça doit-être son antinomique [:rofl]


Message édité par Sve@r le 29-04-2007 à 13:00:01

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Marsh Posté le 29-04-2007 à 13:05:01    

J'ai supprimé mes messages qui fesaient preuve d'humanisme de ma part ce dont vous manquez cruellement. Achetez vous une vie sociale! ;-)
 
Je n'ai guère besoin de faire parti de votre petit clan pour valoriser ma petite personne.

Message cité 2 fois
Message édité par bisounours le 29-04-2007 à 13:06:59
Reply

Marsh Posté le 29-04-2007 à 13:12:29    

bisounours a écrit :

J'ai supprimé mes messages qui fesaient preuve d'humanisme de ma part ce dont vous manquez cruellement. Achetez vous une vie sociale! ;-)
 
Je n'ai guère besoin de faire parti de votre petit clan pour valoriser ma petite personne.


 
ton post prouve que si pourtant... tu n'as aucune dignité ou quoi ?  :??:


---------------
Hobby eien /人◕ ‿‿ ◕人\
Reply

Marsh Posté le 29-04-2007 à 13:15:34    

Citation :


ton post prouve que si pourtant... tu n'as aucune dignité ou quoi ?  :??:


 
MDR! Tu te crois vraiment important? Allez retourne sur ton nuage ... dernier poste promis, juré, craché.


Message édité par bisounours le 29-04-2007 à 13:16:08
Reply

Marsh Posté le 29-04-2007 à 13:22:27    

Il va faire une drôle de gueule l'OP, quand il va revenir lire son topic. [:itm]
Tiens d'ailleurs, une question au pros justement : l'include de son fichier, il a le droit de le mettre entre <> au lieu de le mettre entre guillemets ? Mon k&r dit que si l'inclusion entre <> contient entre autre le caractère backslash, l'effet est indéfini.


---------------
You get so used to things the way they are. And I've always been alone. I guess that makes me lonely.
Reply

Marsh Posté le 29-04-2007 à 14:56:48    

bisounours a écrit :

J'ai supprimé mes messages qui fesaient preuve d'humanisme de ma part ce dont vous manquez cruellement. Achetez vous une vie sociale! ;-)


Si tes messages étaient si charitables, pourquoi les as-tu supprimés ? Tu ne veux plus faire preuve d'humanisme ???
 

bisounours a écrit :

Je n'ai guère besoin de faire parti de votre petit clan pour valoriser ma petite personne.


Il n'y a aucun clan. Il y a juste eu Matafan qui, lisant tes posts pleins, entre autre d'humanisme mais aussi et surtout d'incongruïtés, t'as posé une question. Il n'y a pas de honte à ne pas connaître le C. Moi je ne connais pas le Ruby ni le Perl mais 1) je n'en fais pas une maladie et 2) je ne vais pas m'incruster dans les fofo qui traitent de ces langages.


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed