Stuctures et fichiers en C

keisha Messages postés 8 Statut Membre -  
 elarifali -
Bonjour,
débutante en C,j'ai un peu de mal avec les fichiers et les structures.
Voici mon pb:g créé un fichier binaire comprenant 10 structures personne de type :nompersonne nbre1 nbre2 nbre3
j'affiche dans un tableau d'integer le résultat de pers.nbre1+pers.nbre2-pers.nbre3 Ce tableau me donne la position réelle des personnes dans le fichier
ex:
DUPONT 11 0 4
ds le fic de départ il est 1er mais sa place réelle est 7
GENARD 10 5 14 en 2 mais place réelle 1
DRESSERT 5 5 8 en 3 mais place réelle 2
etc
Comment faire pour afficher les noms à leur place réelle
Merci de me répondre assez vite

5 réponses

  1. Ravachol Messages postés 568 Statut Membre 120
     
    Salut,
    si j'ai bien compris ce que tu voulais faire, ça peux ce coder comme cela

    struct personne
    {
    char nom[21];
    int nbr1;
    int nbr2;
    int nbr3;
    };

    // Fonction de comparaison qui sera utilisée par qsort
    int cmpStruct(const void *st1, const void *st2)
    {
    //Cast des pointeurs void passs en argument en des pointeurs type structure personne
    struct personne *stl1 = (struct personne *)st1;
    struct personne *stl2 = (struct personne *)st2;

    // Ton calcule de la position si tu veux un ordre croissant
    return (stl2->nbr1+stl2->nbr2-stl2->nbr3)-(stl1->nbr1+stl1->nbr2-stl1->nbr3);
    // Ton calcule de la position si tu veux un ordre décroissant
    //return (stl1->nbr1+stl1->nbr2-stl1->nbr3)-(stl2->nbr1+stl2->nbr2-stl2->nbr3);
    }

    void main(int argc, char *argv[])
    {
    int nbElTab;
    int tailleEl;
    //Déclaration d'un tableau de 3 structures
    struct personne pers[3];
    //==================================================================
    //Parce que j'ai eu la flème d'écrire et de lire dans un fichier ;-)
    strcpy(pers[0].nom,"DUPONT");
    pers[0].nbr1 = 11;
    pers[0].nbr2 = 0;
    pers[0].nbr3 = 4;
    strcpy(pers[1].nom,"GENARD");
    pers[1].nbr1 = 10;
    pers[1].nbr2 = 5;
    pers[1].nbr3 = 14;
    strcpy(pers[2].nom,"DRESSERT");
    pers[2].nbr1 = 5;
    pers[2].nbr2 = 5;
    pers[2].nbr3 = 8;
    //==================================================================

    //Affichage des noms de personne avant le triage
    printf("Avant triage\n%s -- %s -- %s\n",pers[0].nom,pers[1].nom,pers[2].nom);
    //Calcule de la taille d'un elément personne
    tailleEl = sizeof(struct personne);
    //Calcule du nombre d'élément personne dans le tableau
    nbElTab = sizeof(pers)/tailleEl;
    //Appel de la fonction de triage. Pour les détails de qsort regarde dans l'aide de ton compilo
    qsort(pers,nbElTab,tailleEl,cmpStruct);
    //Affichage des noms de personne après le triage
    printf("Après triage\n%s -- %s -- %s\n",pers[0].nom,pers[1].nom,pers[2].nom);
    }

    A++

    Ni l'ignorance n'est défaut d'esprit,
    ni le savoir n'est preuve de génie. LUC DE CLAPIERS
    0
  2. joseph
     
    s'il vous plait que quelqu'un m'aide je veux:
    faire un programme qui distribue les eleves d'une classe aleatoirement dans les salles de controle
    1-le probleme consiste a savoir le nombre de classe a distribuer
    2-ouvrir un fichier texte qui represente la liste des noms des eleves de la classe et le placer dans une salle de controle en prenant en consideration le nombre de salle de controle, le nombre de place dans chaque salle les eloignements par ligne et par colonne des eleves d'un meme semestre et des semestres differents(sachant que ces eloignements sont fournis par l'utilisateur)
    3-afficher la distibution finale dans un fichier texte

    merci d'avance
    0
    1. Reeter Messages postés 120 Statut Membre
       
      C'est quoi ta question? tu veux un logiciel tout fait?
      0
    2. maher
       
      je veux un prgramme écrit en c d'un annuaire téléfonique qui peut consulter,modifier,ajouter,supprimer et rechercher les abonnés ayant quelque donné en utilisant la notion du fichier
      0
  3. joseph
     
    malheuresement Reeter oui c'est un projet donner par le docteur et aucun de nous ne sais manipuler C comme il faut si vous savez comment svp envoyer le a mon email
    0
    1. Reeter Messages postés 120 Statut Membre
       
      Ben personnellement, ça me paraît un peu long à faire pendant mes heures de boulot.... Je laisse donc ce plaisir à un autre qui serait plus motivé que moi pour prendre du temps à le faire...
      0
  4. joseph
     
    Reeter tu connais comment le faire? et bon tu peut me donner un algorithme du moins que je sacherai comment commencé?
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question