Svp , une faute que trouve pas :s:s

Fermé
james hetfield Messages postés 5 Date d'inscription vendredi 21 mai 2010 Statut Membre Dernière intervention 1 juin 2010 - 1 juin 2010 à 12:24
loupius Messages postés 697 Date d'inscription dimanche 1 novembre 2009 Statut Membre Dernière intervention 31 décembre 2017 - 1 juin 2010 à 14:00
Bonjour,

svp ,j'aimerais faire un programme qui fait le tri de données par ordre alphabétique.j ai trouvé un code que j ai amélioré Les données sont des noms déjà insérés. mais il y a toujours une faute que j ai pas pu corriger :s :s
elle est dans la ligne du dernier return et c'est une --- error C2562: 'affiche' : fonction 'void' retournant une valeur--- là je veux bien croire que c est une accolade que j ai oublié mais je trouve vraiment pas ou :s:s
Merci d'avance pour vos contributions!!!!
voila le code de mon programme


#include "stdafx.h"
#include <string.h>
#include <stdlib.h>
#include <iostream>

#define MAXN 30
#define MAX_etu 150

typedef struct etudiant {
char nom[MAXN];
char prenom[MAXN];
float med;
float final;
float tp;
}ETUDIANT;


void initialise(ETUDIANT *tab_etu, int nb_etu);


int recherchePosition(ETUDIANT* tab_etu,char nom1[MAXN],char prenom1[MAXN], int nbelements);
int comparer(char* nom1, char* nom2);
void insereNom(ETUDIANT *tab_etu, int nbelements,int pos);
void affiche(ETUDIANT *tab, int nb_etu);


int _tmain(int argc, _TCHAR* argv[])
{
ETUDIANT tab[MAX_etu];

int nb_etu;
float note;
char reponse;
int i=0,j=0;

printf("entrez le nombre d'etudiants\n");
scanf("%d",&nb_etu);
fgetc(stdin);

for(i=0;i<nb_etu;i++)
{initialise(tab,i);//fonction déja définie
j=recherchePosition(tab,tab[i].nom,tab[i].prenom,i);//c'est la fonction qui me pose le plus problème
printf("----------valeur retournee vaut-----%d--------------\n\n",j);// juste pour avoir le resultat sous les yeux
insereNom(tab,i+1, j);//pour inserer le dernier nom entré à la place qu'il doit occuper.
}
affiche(tab,nb_etu);//pour afficher le tableau
}



int recherchePosition(ETUDIANT* tab_etu,char nom1[MAXN],char prenom1[MAXN], int nbelements)
{
// int n, m,k=0,i=0;

int i;
int j=0;
for(i=0;i<=nbelements;i++)
{
if(strcmp((tab_etu[i].nom),nom1)<0)
{ j++;
}
}

return j;
}



void insereNom(ETUDIANT *tab_etu, int nbelements,int pos)
{
int i,j=nbelements;
i=pos; //recherchePosition(tab_etu,tab_etu[j-1].nom,tab_etu[j-1].prenom,nbelements);
j=nbelements;
while(j>i)

{
strcpy((tab_etu[j].nom),(tab_etu[j-1].nom));
strcpy((tab_etu[j].prenom),(tab_etu[j-1].prenom));
(tab_etu[j].med)=(tab_etu[j-1].med);
(tab_etu[j].final)=(tab_etu[j-1].final);
(tab_etu[j].tp)=(tab_etu[j-1].tp);
j--;

}
strcpy((tab_etu[i].nom),tab_etu[j-1].nom);

}

void affiche(ETUDIANT *tab, int nb_etu)
{
int j;
for(j=0;j<nb_etu;j++)
{
printf("\n%s",tab[j].nom);
printf("\n%s",tab[j].prenom);
printf("\n%f",tab[j].med);
printf("\n%f",tab[j].final);
printf("\n%f",tab[j].tp);
}

return 0;
}


pour la -- #include "stdafx.h" -- ça remplace la stdio.h parce que j utilise le viusal studio 2008

encore merci :)

2 réponses

loupius Messages postés 697 Date d'inscription dimanche 1 novembre 2009 Statut Membre Dernière intervention 31 décembre 2017 148
1 juin 2010 à 14:00
Non, un code correctement indenté donne ceci:
#include "stdafx.h"
#include <string.h>
#include <stdlib.h>
#include <iostream>

#define MAXN 30
#define MAX_etu 150

typedef struct etudiant
{
  char nom[MAXN];
  char prenom[MAXN];
  float med;
  float final;
  float tp;
} ETUDIANT;

void initialise(ETUDIANT *tab_etu, int nb_etu);
int recherchePosition(ETUDIANT* tab_etu,char nom1[MAXN],char prenom1[MAXN], int nbelements);
int comparer(char* nom1, char* nom2);
void insereNom(ETUDIANT *tab_etu, int nbelements,int pos);
void affiche(ETUDIANT *tab, int nb_etu);

int _tmain(int argc, _TCHAR* argv[])
{
  ETUDIANT tab[MAX_etu];
  int nb_etu;
  float note;
  char reponse;
  int i=0,j=0;

  printf("entrez le nombre d'etudiants\n");
  scanf("%d",&nb_etu);
  fgetc(stdin);

  for(i=0;i<nb_etu;i++)
  {
    initialise(tab,i);//fonction déja définie
    j=recherchePosition(tab,tab[i].nom,tab[i].prenom,i);
    printf("----------valeur retournee vaut-----%d--------------\n\n",j);
    insereNom(tab,i+1, j);
  }
  affiche(tab,nb_etu);
}

int recherchePosition(ETUDIANT* tab_etu,char nom1[MAXN],char prenom1[MAXN], int nbelements)
{
  int i;
  int j=0;

  for(i=0;i<=nbelements;i++)
    if(strcmp((tab_etu[i].nom),nom1)<0)
      j++;

  return j;
}

void insereNom(ETUDIANT *tab_etu, int nbelements,int pos)
{
  int i,j=nbelements;
  i=pos; //recherchePosition(tab_etu,tab_etu[j-1].nom,tab_etu[j-1].prenom,nbelements);
  j=nbelements;

  while(j>i)
  {
    strcpy((tab_etu[j].nom),(tab_etu[j-1].nom));
    strcpy((tab_etu[j].prenom),(tab_etu[j-1].prenom));
    (tab_etu[j].med)=(tab_etu[j-1].med);
    (tab_etu[j].final)=(tab_etu[j-1].final);
    (tab_etu[j].tp)=(tab_etu[j-1].tp);
    j--;
  }
  strcpy((tab_etu[i].nom),tab_etu[j-1].nom);
 }

void affiche(ETUDIANT *tab, int nb_etu)
{
  int j;
  for(j=0;j<nb_etu;j++)
  {
    printf("\n%s",tab[j].nom);
    printf("\n%s",tab[j].prenom);
    printf("\n%f",tab[j].med);
    printf("\n%f",tab[j].final);
    printf("\n%f",tab[j].tp);
  }
  return 0;
}
Et l'on remarque tout de suite que la fonction 'int main' n'a pas de 'return' et que la fonction 'affiche' en a un.
Bonne continuation.
1
loupius Messages postés 697 Date d'inscription dimanche 1 novembre 2009 Statut Membre Dernière intervention 31 décembre 2017 148
1 juin 2010 à 12:34
En indentant correctement ton code, tu vas très très rapidement trouver s'il te manques une accolade ! Sinon le code est quasiment illisible ...
Bonne continuation.
0
james hetfield Messages postés 5 Date d'inscription vendredi 21 mai 2010 Statut Membre Dernière intervention 1 juin 2010
1 juin 2010 à 12:45
#include "stdafx.h"
#include <string.h>
#include <stdlib.h>
#include <iostream>

#define MAXN 30
#define MAX_etu 150

typedef struct etudiant
{
char nom[MAXN];
char prenom[MAXN];
float med;
float final;
float tp;
}
ETUDIANT;


void initialise(ETUDIANT *tab_etu, int nb_etu);


int recherchePosition(ETUDIANT* tab_etu,char nom1[MAXN],char prenom1[MAXN], int nbelements);

int comparer(char* nom1, char* nom2);

void insereNom(ETUDIANT *tab_etu, int nbelements,int pos);

void affiche(ETUDIANT *tab, int nb_etu);


int _tmain(int argc, _TCHAR* argv[])

{
ETUDIANT tab[MAX_etu];

int nb_etu;
float note;
char reponse;
int i=0,j=0;

printf("entrez le nombre d'etudiants\n");
scanf("%d",&nb_etu);
fgetc(stdin);

for(i=0;i<nb_etu;i++)
{
initialise(tab,i);//fonction déja définie
j=recherchePosition(tab,tab[i].nom,tab[i].prenom,i);

printf("----------valeur retournee vaut-----%d--------------\n\n",j);

insereNom(tab,i+1, j);
}
affiche(tab,nb_etu);
}



int recherchePosition(ETUDIANT* tab_etu,char nom1[MAXN],char prenom1[MAXN], int nbelements)
{


int i;
int j=0;
for(i=0;i<=nbelements;i++)
{

if(strcmp((tab_etu[i].nom),nom1)<0)
{ j++;
}
}

return j;
}



void insereNom(ETUDIANT *tab_etu, int nbelements,int pos)
{

int i,j=nbelements;
i=pos; //recherchePosition(tab_etu,tab_etu[j-1].nom,tab_etu[j-1].prenom,nbelements);
j=nbelements;

while(j>i)
{

strcpy((tab_etu[j].nom),(tab_etu[j-1].nom));

strcpy((tab_etu[j].prenom),(tab_etu[j-1].prenom));

(tab_etu[j].med)=(tab_etu[j-1].med);

(tab_etu[j].final)=(tab_etu[j-1].final);

(tab_etu[j].tp)=(tab_etu[j-1].tp);
j--;

}
strcpy((tab_etu[i].nom),tab_etu[j-1].nom);

}

void affiche(ETUDIANT *tab, int nb_etu)
{

int j;
for(j=0;j<nb_etu;j++)
{

printf("\n%s",tab[j].nom);
printf("\n%s",tab[j].prenom);
printf("\n%f",tab[j].med);
printf("\n%f",tab[j].final);
printf("\n%f",tab[j].tp);

}

return 0;
}

voila merci encore :s
0