Tp en c++ aidez moi svp
nounifarfoura
Messages postés
5
Date d'inscription
Statut
Membre
Dernière intervention
-
rimounatn Messages postés 93 Date d'inscription Statut Membre Dernière intervention -
rimounatn Messages postés 93 Date d'inscription Statut Membre Dernière intervention -
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
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
1 réponse
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 ;)
#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 ;)