Creation d'un repertoir

Creation d'un repertoir - C - Programmation

Marsh Posté le 30-10-2012 à 12:31:13    

Bonjour,
 
J'ai une petite quesiton au niveau des structures dans les fonction
 
Je souhaite faire une sorte de repertoire pour m'entrainer un peu sur tout ce qui est structure et fonction.
 
J'ai donc une structure
 
typedef struct utilisateur
{ char nom[30];
   char prenom[30];
   int age;
}
 
 
J''en ai ensuite fait un tableau de structure ainsi:
 
utilisateur carnet[10];
 
 
 
Maintenant j'aimerai faire un menu qui puisse lorsque je selection "Ajouter" par exemple crée une structure dans le tableau de structure a chaque fois que je selectionne ajouter donc saisie par un utilisateur donc des printf et des gets utilisateur.nom, utilisateur.prenom..
 
J'ai donc quelques questions. Comment mettre une fonction en place qui, comme je l'ai ennoncé crée une structure utilisateur qui va entrer dans carnet.
car si dans ma fonction je declare un objet de ma structure comme par exemple : utilisateur pers, il va y avoir un probleme a chaque fois que je vais vouloir créer une nouvelle structure non ?
Ce qui serait bien c'est de pouvoir incrémenter en fait mais j'ia beau chercher, je ne trouve pas le bon angle.
 
Merci d'avoir pris le temps de lire, n'hesitez pas a poser des questions si je n'ai pas été assez clair

Reply

Marsh Posté le 30-10-2012 à 12:31:13   

Reply

Marsh Posté le 30-10-2012 à 14:01:55    

Dans ton programme principale, normalement tu devrais manipuler un carnet, en maintenant l'index à jour.
Et à la fonction ajouter tu passes le carnet en paramètre et l'index.
Si j'ai compris la question ?


Message édité par Profil supprimé le 30-10-2012 à 14:02:19
Reply

Marsh Posté le 30-10-2012 à 14:10:48    

Citation :

J''en ai ensuite fait un tableau de structure ainsi:  
 
utilisateur carnet[10];

Si tu veux une fonction ajouter, le mieux c'est de manipuler une structure dynamique.
Tu crées ton carnet comme une liste chaînée d'utilisateurs.  
Et après, c'est juste une manipulation de liste chaînées:
Ajouter, c'est ajouter une nouvelle structure utilisateur (allouée dynamiquement avec malloc) a ta liste, en tête, en queue, ou en ordre alphabétique selon tes envies, etc.
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 30-10-2012 à 14:16:10    

Pour repondre à la premiere question
J'aimerai pouvoir faire un carnet dans lequel j'ajoute des structures
Mon probleme est que je ne trouve pas le moyen de faire une fonction qui crée un nouvelle structure a chaque fois que j'entre dans la fonction via un menu et qui incremente le tableau de structure
 
Je n'ai pas encore vu les structure dynamique mais je vais essayer de m'informer un peu dessus !

Reply

Marsh Posté le 30-10-2012 à 14:51:16    

gibs1 a écrit :

Pour repondre à la premiere questionMon probleme est que je ne trouve pas le moyen de faire une fonction qui crée un nouvelle structure a chaque fois que j'entre dans la fonction via un menu et qui incremente le tableau de structure

Si tu déclares utilisateur carnet[10]; tu ne pourras pas avoir plus de 10 entrées dans ton tableau, le C ne le permet pas.
A+,


Message édité par gilou le 30-10-2012 à 14:51:29

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 30-10-2012 à 14:52:06    

Bonjour !
 
Si vous tenez à réaliser ce répertoire en C, je ne vois que deux possibilités (simples) : une liste chaînée (une valeur sûre) ou répertoire de taille "fixe", dont chaque entrée possède un champ "utilisé" permettant de rapidement supprimer une entrée du répertoire.
Note : on peut aussi imaginer, mais cela complexifie le procédé, d'avoir un répertoire de taille donnée, et quand il n'y a plus de place, on recrée un répertoire plus grand en on copie les données.
 
Chaque méthode a ses avantages et ses inconvénients, notamment quand le nombre d'entrées augmente fortement : une liste chaînée est lente à parcourir, tandis que le répertoire de taille fixe demande souvent de réallouer et exige d'avoir un gros bloc de mémoire contiguë.
 
Note : je laisse volontairement de côté des solutions "hybrides" comme un tableau (réalloué régulièrement) de pointeurs, une valeur "NULL" indiquant un emplacement libre.
 
Pour conclure, et cela n'a rien à voir avec la problématique de gestion des entrées du répertoire, il est toujours préférable de stocker un maximum d'informations "permanentes", ne nécessitant pas de mise à jour. Dans le cas qui nous intéresse, il vaut mieux stocker l'année de naissance d'une personne plutôt que son âge, qui devra être mis à jour une fois par an :)
 
Bon courage !


Message édité par Farian le 30-10-2012 à 14:53:29
Reply

Marsh Posté le 30-10-2012 à 15:16:40    

Citation :

je ne vois que deux possibilités (simples)

Oui, parce que si on envisage quelque chose avec beaucoup d'entrées et efficace, des possibilités un poil plus complexes viennent en tête comme le BTree.
A+,


Message édité par gilou le 30-10-2012 à 15:16:58

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 30-10-2012 à 19:19:56    

Bonsoir,
 
Tres gentil a vous de vous être penché sur le sujet.
Je me suis un peu documenté et la liste chainé semble une bonne alternative a ce genre de repertoire, je vais donc essayer de fouiller un peu !
 
Sinon, mon but premier aurait été (avec un population reduite, soit environ 5-10personnes) pouvoir comparer les structures de mon répertoire pour pouvoir trouver, imaginons, deux personnes identiques.
J'aimerai savoir si c'est faisable avec les listes chainées.
 
Enfin, avant de voir si loin, je dois déjà trouver un moyen de faire mon repertoire et vos conseils me sont bien utiles !

Reply

Marsh Posté le 30-10-2012 à 19:26:50    

Citation :

Sinon, mon but premier aurait été (avec un population reduite, soit environ 5-10personnes) pouvoir comparer les structures de mon répertoire pour pouvoir trouver, imaginons, deux personnes identiques.  
J'aimerai savoir si c'est faisable avec les listes chainées.

Si vous faites triez vôtre liste par ordre alphabétique sur les champs nom, prénom, et numérique sur le champ age, ça devrait rendre cela relativement facile d'éviter les doublons.
A+,


Message édité par gilou le 30-10-2012 à 19:28:35

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Sujets relatifs:

Leave a Replay

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