Tp en c++ aidez moi svp

nounifarfoura Messages postés 10 Statut Membre -  
rimounatn Messages postés 107 Statut Membre -
Bonjour,
salut g un tp à faire en c++ mais j'ai pa encor trouver la solution é je doit le remetre .
on utilisant les listes on veut crier un répertoire personnel .un contacte est composé de :
nom,prénom,adresse,num de telephone....le programme doit contenir:
1-une procedure pour la création de la liste.
2-une procedure pour l'ajout d'un nouveau contact.
3-une procedure pour la suppréssion.
4-une procedure por le trés lexicographique.
5-une procedure de modification d'un contact
le prog doit contenir un menu qui permet le choix entre toutes les fonctionnalitées que le prog en permet.
type struc{n,p,a,n}
................................................................merciiiiiiiiiiiiiiiiiiiiii
Configuration: Windows XP Internet Explorer 6.0

1 réponse

  1. rimounatn Messages postés 107 Statut Membre 15
     
    Bonjour, j'espere que je vais t'aidé voici des fonctions sur les listes chainée (simple):
    #include<stdio.h>
    #include<stdlib.h>

    struct element{
    int valeur;
    struct element * suivant;
    };

    typedef struct element element;
    typedef element* liste;

    liste ajouterEnTete(liste L, int v){
    liste temp = NULL;
    temp = (liste)malloc(sizeof(element));
    temp->valeur = v;
    if(L==NULL){
    //Liste Vide
    temp->suivant = NULL;
    }else{
    temp->suivant=L;
    }
    return temp;
    }

    liste ajouterEnFinIterative(liste L, int v){
    element * temp = NULL;
    temp = (liste)malloc(sizeof(element));
    temp->valeur = v;
    temp->suivant = NULL;
    //parcourir iterativement jusK la fin
    element * aux = L;
    while(aux->suivant != NULL) {
    aux=aux->suivant;
    }
    aux->suivant = temp;
    return L;
    }

    //ici c'est une procedure donc on passe l'adresse de la liste et non pas la liste elle même (passage par adresse)
    void ajouterEnFinRecursive(liste* L, int v){
    if(*L == NULL){
    element * temp = NULL;
    temp = (liste)malloc(sizeof(element));
    temp->valeur = v;
    temp->suivant = NULL;
    *L=temp;
    //printf("cas L null element valeur %i ajouté\n",v);
    }else if((*L)->suivant == NULL){
    element * temp = NULL;
    temp = (liste)malloc(sizeof(element));
    temp->valeur = v;
    temp->suivant = NULL;
    (*L)->suivant = temp;
    //printf("cas L->suivant null element valeur %i ajouté\n",v);
    }else{
    liste ptr = (*L)->suivant;
    ajouterEnFinRecursive(&ptr,v);
    }
    }

    liste SupprimerElementEnTete(liste L){
    if(L==NULL){
    return NULL;
    }else{
    liste tmp;
    tmp = L->suivant;
    free(L);
    return tmp;
    }
    }

    liste SupprimerElementEnFin(liste L){
    if(L==NULL){//liste vide
    return NULL;
    }else if(L->suivant == NULL){//liste à 1 element
    free(L);
    return NULL;
    }else{
    liste ptrDernierElem = L;
    liste ptrAvantDernierElem;
    while(ptrDernierElem->suivant != NULL) {
    ptrAvantDernierElem = ptrDernierElem;
    ptrDernierElem = ptrDernierElem->suivant;
    }
    ptrAvantDernierElem->suivant=NULL;
    free(ptrDernierElem);
    return L;
    }
    }

    liste SupprimerElement_i(liste L,int index){
    if(index==0){//premier elem
    return SupprimerElementEnTete(L);
    }else{
    liste ptrSurElem = L;
    liste ptrAvantElem;
    int i=0;
    while(ptrSurElem->suivant != NULL && i!=index) {
    ptrAvantElem = ptrSurElem;
    ptrSurElem = ptrSurElem->suivant;
    i++;
    }
    if(i==index){//l'element i existe
    ptrAvantElem->suivant=ptrSurElem->suivant;
    free(ptrSurElem);
    return L;
    }else{//index superieur à la taille de la liste
    return L;// pas de changement
    }
    }
    }

    int nbOccurences_val(liste L, int val){
    liste ptr = L;
    int nbOcc_val = 0;
    while(ptr != NULL){
    if(ptr->valeur == val){
    nbOcc_val++;
    }
    ptr = ptr->suivant;
    }
    return nbOcc_val;
    }

    int tailleListeIterative(liste L){
    element* ptr;
    int taille=0;
    ptr = L;
    while(ptr != NULL){
    ptr = ptr->suivant;
    taille++;
    }
    return taille;
    }

    int tailleListeRecursive(liste L){
    if(L == NULL){
    return 0;
    }else{
    return 1+tailleListeRecursive(L->suivant);
    }
    }

    int estVide(liste L){
    //classique
    //return (L == NULL);
    return (L==NULL)? 1 : 0;
    }
    void afficherListe(liste L){
    element* ptr;
    int i=0;
    ptr = L;
    while(ptr != NULL){
    printf("element num %i = %i\n",i,ptr->valeur);
    i++;
    ptr = ptr->suivant;
    }
    }

    element* Element_i(liste L, int index){
    element* ptrSurElem = L;
    int i=0;
    while(ptrSurElem->suivant != NULL && i!=index) {
    ptrSurElem = ptrSurElem->suivant;
    i++;
    }
    if(i==index){//l'element i existe
    return ptrSurElem;
    }else{//index superieur à la taille de la liste
    return NULL;// pas de changement
    }
    }

    int main(){

    liste maListe = NULL;
    int i=0;
    for(i=0;i<10;i++){
    ajouterEnFinRecursive(&maListe,i);
    }
    printf("Liste au debut:\n");
    afficherListe(maListe);
    printf("la taille par recursivité est %i\n",tailleListeRecursive(maListe));
    printf("la taille par maniere iterative est %i\n",tailleListeIterative(maListe));

    return 0;
    }

    en faite le nom, prenom ... du contact sont traités en remplaceant :
    struct element{
    int valeur;
    struct element * suivant;
    };
    par
    struct repertoiret{
    int num_de_telephone;
    char nom[20],prenom[20],adresse[50];
    ....
    struct element * suivant;
    };
    alors essaye bon courage ;)
    0