Démande d'aide sur la programmation en langage C [Résolu]

lecedrico 2 Messages postés dimanche 15 mai 2016Date d'inscription 22 mai 2016 Dernière intervention - 15 mai 2016 à 13:16 - Dernière réponse : ABER-Kahina 3 Messages postés lundi 16 mai 2016Date d'inscription 25 mai 2016 Dernière intervention
- 25 mai 2016 à 17:43
Bonjour à tous
Je suis étudiant en Licence Technologiq Option Genie electrique à l'IUT de Bandjoun et nous avons une UE intitulée Programmation évoluée et base de données. J'ai eu un empechement au début de l'année qui m'a fait avoir deux mois de retard à ce cours. A mon retour, l'enseignant nous a donné un projet à présenter dans deux semaines. Il s'agit de Faire une liste chainée de toutes les villes allant de Mbouda à EBOLOWA; chaque ville devant contenire les informations telles que la denité de population, la superficie ect. Et il faut préciser la distance séparant deux villes pour déterminer le prix du trajet. J'ai lu le cours de l'enseignant et pluieurs PDF mais malgrés tout mes effort je ne parvient meme pas à commencer mon projet.
SVP aidez moi
Afficher la suite 

3 réponses

Répondre au sujet
ABER-Kahina 3 Messages postés lundi 16 mai 2016Date d'inscription 25 mai 2016 Dernière intervention - 16 mai 2016 à 17:28
0
Utile
1/ pour la liste chainée, tu dois juste utiliser une structure ville et un pointeur vers cette structure pour realiser le chainage

struct ville
{ char * nom;
float densité;
foat supérficie;
....

struct ville * suivant;
}

ta liste de villes sera juste un pointeur vers la structure ville
struct ville * liste_villes;


(vérifie bien la syntaxe)

2/ la distance entre les villes peut être codée de plusieurs façons pour moi la meilleur d'entre elles est la matrice (un tableau a 2 dimensions)

tu peux associer chaque ville à un identifiant unique que tu pourras utiliser comme index, ainsi la distance entre la ville 1 et 5 par exemple sera representée dans la case [1][5] de ce tableau.

il ya la mêthode de liste chainée (cad chaque noeud ville va pointer vers une autre liste completement differente de la première ou chaque noeud va contenir :
(distance,ville atteinte par cette distance) )

-------- --------
| |--------| |-------- ....
| v1 | | v2 |
-------- --------
|
----------
| dist |
| v1-v2 |
--------
|
----------
| dist |
| v1-v4 |
--------
.
.


mais a mon avis cette solution sera trop couteuse en memoire
Commenter la réponse de ABER-Kahina
lecedrico 2 Messages postés dimanche 15 mai 2016Date d'inscription 22 mai 2016 Dernière intervention - Modifié par cptpingu le 22/05/2016 à 19:39
0
Utile
Merci frangin
Voici ce que jai pu fare jusqu'ici mais je rencontre toujours beaucoup de difficulté:

#include <stdio.h>
#include <stdlib.h>
typedef struct Element Element;
struct Element
{
char * ville;
float densite;
float superficie;
int prix_du_Km;
Element *suivant;
};
typedef struct Liste Liste;
struct Liste
{
Element *premier;
};

void insertion(Liste *liste, char nvville)
{
/* Création du nouvel élément */
Element *nouveau = malloc(sizeof(*nouveau));
if (liste == NULL || nouveau == NULL)
{
exit(EXIT_FAILURE);
}
nouveau->ville=nvville;
/* Insertion de l'élément au début de la liste */
nouveau->suivant = liste->premier;
liste->premier = nouveau;
}
void suppression(Liste *liste)
{
if (liste == NULL)
{
exit(EXIT_FAILURE);
}
if (liste->premier != NULL)
{
Element *aSupprimer = liste->premier;
liste->premier = liste->premier->suivant;
free(aSupprimer);
}
}
void afficherListe(Liste *liste)
{
if (liste == NULL)
{
exit(EXIT_FAILURE);
}
Element *actuel = liste->premier;
while (actuel != NULL)
{
    printf("%d -> ", actuel->ville);
actuel = actuel->suivant;
}
printf("NULL\n");
}
int main()
{
int menu()
{
int res=-1;
printf( "1 : ajout \n"
"2 : inserer en ordre croissant\n"
"3 : supprimer \n"
"4 : supprimer critere un seul\n"
"5 : supprimer critere all \n"
"10 : tests save and load\n"
"11 : parcourir\n"
"12 : Detruire liste\n"
"13 : copier liste\n"
"0 : Creer une liste de n objets\n");
scanf("%d",&res);
rewind(stdin);
return res;
}
int main()
{
Element *premier=NULL;
Element*e=NULL,*l2=NULL;
int fin=0,choix;
int flag=0;
//srand(time(NULL));
while (!fin){
choix=menu();
switch(choix){
case 1 :// ajout début
e=init();
if(++flag%2)
premier=ajout_debut1(premier,e);
else
ajout_debut2(&premier,e);
parcourir(premier);
break;
case 2 :// ajout fin
e=init();
if(++flag%2)
premier=ajout_fin1(premier,e);
else
ajout_fin2(&premier,e);
parcourir(premier);
break;
case 3 :
e=init();
if(++flag%2)
premier=inserer1(premier,e);
else
inserer2(&premier,e);
parcourir(premier);
break;
case 4 :// supprimer debut
if(++flag%2)
premier=suprimer_debut1(premier);
else
supprimer_debut2(&premier);
parcourir(premier);
break;
case 5 :// supprimer fin
if(++flag%2)
premier=suprimer_fin1(premier);
else
supprimer_fin2(&premier);
parcourir(premier);
break;
case 6 :// supprimer un seul élément selon un critère
premier=supp_critere_un(&premier);
parcourir(premier);
break;
case 7 :// supprimer tous les éléments selon un critère
premier=supp_critere_all(&premier);
parcourir(premier);
break;
case 8 :// extraire début (tête)
if((e = extraire_debut(&premier))!=NULL){
printf("extrait : %d%s\n",e->ville,e->suivant);
free(e);
}
else
printf("liste vide\n");
parcourir(premier);
break;
case 9 : //extraire à la fin
if((e = extraire_fin(&premier))!=NULL){
printf("extrait : %d%s\n",e->ville,e->suivant);
free(e);
}
else
printf("liste vide\n");
parcourir(premier);
break;
case 10 : //test save et load
sauvegarder_liste(premier); // sauver liste courante
detruire_liste2(&premier);// détruire la liste
premier=load_liste(); // loader la liste
parcourir(premier);
break;
case 11 : //parcourir
parcourir(premier);
break;
case 12 : // détruire liste
if(++flag%2)
premier=detruire_liste1(premier);
else
detruire_liste2(&premier);
parcourir(premier);
break;
case 13 : // copier une liste
l2= copier_liste(premier);
parcourir(premier);
parcourir(l2);
break;
case 0 :
creer_liste(&premier);
parcourir(premier);
break;
default : fin=1;
}
}
detruire_liste2(&premier);
detruire_liste2(&l2);
return 0;
}


J'ai comme impression que le grand problème c'est le main. Stp aides moi.
Mon autre pb sera au niveau des calculs; puisqil faut que lors de la compilation il y ait boutton pr prix de maniere qe l'on puisse connaitre le prix pr qiter d'une ville à l'autre.
Commenter la réponse de lecedrico
ABER-Kahina 3 Messages postés lundi 16 mai 2016Date d'inscription 25 mai 2016 Dernière intervention - 25 mai 2016 à 17:43
0
Utile
C'est frangine !!!!!!!


ok je vais faire ce que je peux ()

1 - type liste peut simplement etre un pointeur vers element et non une structure
2 - ligne 22 : un "&&" a la place de "||" et tu dois ajouter un "if" pour le cas ou la liste est vide dans la fonction insertion sinon aucun element ne sera inseré dans la liste

3- dans suppression tu supprime seulement le premier element mais pas les autres !!! ta fonction doit etre plus génerique. c'est ca l'utilité de creer une fonction. c'est mieux de donner aussi en parametre le nom de la ville a supprimer, comme ca tu vas parcourir ta liste jusqu'a ce que tu arrives au noeud a supprimer.

4- les lignes 58 et 59 sont a enlever

5 - ta pas utilisé les fonctions que tu as définies dans le main et celui-ci contient bcp de fonctions que tu n'as pas definies.


c'est normal qu'il ne fonctionne pas. tu as des parties de code complémtement séparé les unes des autres !!!!!!!!!!!!!!!!!!!

tu dois definir tt les fonctions mentionées dans ton main afin d'executer ton programme.
Commenter la réponse de ABER-Kahina

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.