9
Unive Faculté des Les Structu Réalisé par : PARCOURS MIPC II-1 MIN ersité Abdel Malek Essaadi sciences et techniques de Tange ures | Les Méthodes Farid ELMASSMOUDI Omayssa AZOUZI 2009-2010 Encadré par A.BOURZEK NI PROJET LAN er de Tri NGAGE C

Raport de mini projet corrig mf.pdf

Embed Size (px)

Citation preview

Page 1: Raport de mini projet corrig mf.pdf

Université Abdel Malek Essaadi

Faculté des sciences et techniques de Tanger

Les Structures

Réalisé par :

PARCOURS

MIPC II-1 MINI

Université Abdel Malek Essaadi

es sciences et techniques de Tanger

Les Structures | Les Méthodes

Farid ELMASSMOUDI

Omayssa AZOUZI

2009-2010

Encadré par A.BOURZEK

INI PROJET LANGAGE

es sciences et techniques de Tanger

de Tri

ANGAGE C

Page 2: Raport de mini projet corrig mf.pdf

FST Tanger Département Informatiques

F. ELMASSMOUDI – O. AZOUZI Page 1

Sommaire

Introduction ................................................................................................................................... 2

1. Sujet N°1 : un répertoire d’adresses ........................................................................................... 3

1.1. Définition ............................................................................................. 3

1.2. Les structures de programme ................................................................ 3

1.3. Ajout d’un contact .............................................................................. 4

1.4. Affichage de Liste des contacts .......................................................... 4

1.5. Rechercher un contact dans le répertoire ......................................... 4

1.6. Modification ou Suppression d’un contact ........................................ 5

2. Sujet N°2 : Gestion d’un compte bancaire ................................................................................. 5

2.1. Définition ............................................................................................. 5

2.2. La structure de programme ................................................................ 5

2.3. La fonction Saisir et la fonction Afficher .......................................... 6

2.4. Les fonctions Lister les débiteurs et Lister les comptes ................ 6

2.5. Les opérations sur les comptes .......................................................... 6

2.5.1. La fonction verser et la fonction retraiter ............................................................................ 6

2.5.2. La fonction supprimée et la fonction position ....................................................................... 6

3. Sujet 3 : Les méthodes de tri dans un tableau ........................................................................... 6

3.2. Tri par bull ........................................................................................... 7

3.3. Tri par insertion .................................................................................... 7

3.5. Tri par fusion ....................................................................................... 7

Conclusion ...................................................................................................................................... 8

Page 3: Raport de mini projet corrig mf.pdf

FST Tanger Département Informatiques

F. ELMASSMOUDI – O. AZOUZI Page 2

Introduction

On définie dans ce mini projet la notion de la structure qui va

nous permettre de designer sous un seul nom un ensemble de

valeurs pouvant être de types déférents. On va utiliser la notion de

structure sous des formes diverses (en particulier les tableaux de

structure et leur initialisation, et aussi des structures sous des

formes simples).

On définie par typedef une nouvelle notion qu’on appelle en C

types synonyme qui s’adresse au compilateur, il sert à rendre le

programme plus lisible.

Enfin les fonctions avec des structure, et la transmission d’une

structure en valeur de retour.

Aussi on propose ici des exemples de programmation classiques

ayant trait aux tris et en même temps la fusion des tableaux (ici

les deux sous tableaux du même tableau principal).

Page 4: Raport de mini projet corrig mf.pdf

FST Tanger Département Informatiques

F. ELMASSMOUDI – O. AZOUZI Page 3

1. Sujet N°1 : un répertoire d’adresses 1.1. Définition

Un répertoire est un ensemble des informations sur des contacts dont chaque contact possède plusieurs informations comme le nom le prénom, adresse.…

Pour classer les contacts on les stocker dans un tableau de structure.

1.2. Les structures de programme

Une structure permet en C de regrouper au sein d’une même entité des données de types différents (comme un tableau qui stocke des éléments de même type).

Alors que les éléments d’un tableau sont références `a l’aide d’un indice, les éléments d’une structure portent chacun un nom spécifique. Ces éléments s’appellent les champs ou membres.sa syntaxe :

Struct nom structure || typedef struct { || { Type 1 variable 1; || type 1 variable 1; Type … variable …; || type … variable …; } || } nomstructure;

La premier structure est appelée Adresse ; voici sa déclaration :

typedef struct

{char pays [100], ville [100], rue [100];

long numero_adresse, code postale;

} Adresse;

L’autre structure appelée Contact est déclaré comme suit :

typedef struct

{ char nom [100], prénom [100], email [100];

long tel domicile, gsm, phone entreprise ;

Adresse point;

} Contact;

Cette déclaration fait intervenir un variable (point) de la modèle (adresse) de la structure précédemment définie.

Remarque : dans toutes les parties de notre programme on va travailler avec une structure de type

contact nommée élève, et qui contient un variable nommé point de la structure adresse de contact.

Page 5: Raport de mini projet corrig mf.pdf

FST Tanger Département Informatiques

F. ELMASSMOUDI – O. AZOUZI Page 4

1.3. Ajout d’un contact

En utilisant les fonctions on définie une fonction ajouter qui permet de saisir tout les informations d’un contact, cette fonction contient deux arguments, un variable de modèle contact, et un entier n qui représente le nombre des contactes a ajouter, noter bien que cette fonction est de type v o i d, mais aussi on peut nommer ce type contact. La fonction ajoutée en langage C : void AJOUT (contact élève) { int i; for (i=0;i<n;i++) printf (" Nom de contact : ") ; scanf ("%s", eleve.nom) ; }

1.4. Affichage de Liste des contacts

L’affichage des informations saisies se fait par la fonction printf, pour les structures le format d’élément dans printf s’écrit comme suite :

Printf (« %s », eleve.nom) ; l’operateur ‘.’ nous permet d’accéder aux champs de la structure élève. Pour afficher l’information de l’adresse on écrit :

Printf (« %s », eleve.point.pays) ; ou cette écriture affiche le nom de pays de point correspondant a la structure contact.

1.5. Rechercher un contact dans le répertoire

En C elle possible d’utiliser un tableau de structure qui nous permet de savoir la position des donnée dans le répertoire. Voici sa déclaration :

Typedef struct {

type i variable i ; type… variable … ;

} contact élève [40] ;

Noter bien que contact est un nom de modèle, tandis que élève est un tableau de 40 éléments de type contact. La notation : élève[i].nom représente le nom de contact de rang (position) i ; il s’agit donc d’une valeur de type char.

Donc pour chercher un contact on utilise les foncions : Consulter (Int indice) a pour argument l’indice de contact ; recherche (char nom) ; et la fonction Re_Mul (char nom, char prénom,…) plusieurs argument comme critères.

Dans les trois fonctions ; le principe c’est de comparer les critères avec celles contenu dans le tableau jusqu'à trouver le contact recherché et l’afficher.

Page 6: Raport de mini projet corrig mf.pdf

FST Tanger Département Informatiques

F. ELMASSMOUDI – O. AZOUZI Page 5

void RECHERCHE (contact élève [], char mot [])

{ Int i; for(i =1; i<=*n; i++)

if (strcmp (élève[i].nom, mot)==0)

printf( ) ; }

Remarque : la notation eleve.nom[i] n’a aucun sens. Or l’expression élève[i].point. Ville représente

le nom de ville de point correspondant le contact de rang i.

1.6. Modification ou Suppression d’un contact

La modification des information d’un contact nécessite la suppression des anciens informations, et les remplacer par les novelles données ;cette méthode consiste a entrer directement les novelles données et les enregistrer dans les adresse des anciens information en écrasant ces derniers de contact a modifier .

void MODIFIER (contact élève [], int indice,)

{ int i=1; for (i=1; i<=*n; i++)

if (i==indice) Printf (“Nom de contact: ");

scanf ("%s", élève [indice].nom); }

Pour supprimer un contact écrasera le contact à supprimer par décrémenter la structure contact, en suite on décrémente le nombre des Contacts pour éviter la recopier deux foie dans le répertoire. Voici la fonction Supprimer :

void SUPRIMER (contact élève [], char nom [])

{ Int i; for (i=0; i< n; i++

if(strcmp(eleve[i].nom,nom)==0) élève[i] =élève [i+1] ; }

2. Sujet N°2 : Gestion d’un compte bancaire 2.1. Définition

C’est un ensemble des informations stockées dans un tableau ou un fichier.

Pour ouvrir ce fichier on utilise un code appelé numéro de compte.

2.2. La structure de programme

typedef struct

{ char nom [100], prénom [100] ;

Page 7: Raport de mini projet corrig mf.pdf

FST Tanger Département Informatiques

F. ELMASSMOUDI – O. AZOUZI Page 6

long num ; double solde;

} Compte ;

2.3. La fonction Saisir et la fonction Afficher

La fonction saisie return les informations de la structure déclarée localement au sein de cette fonction.

Compte SAISIR ()

{ int i; compte T;

Printf("le nom:") ; scanf("%s",T.nom) ;…… ; return T ; }

La fonction afficher est la même comme dans le sujet 1precedant.

2.4. Les fonctions Lister les débiteurs et Lister les comptes

Pour lister les débiteurs on utilise le numéro de compte comme critère et ensuite en fait l’appel à la fonction affiche pour montrer les infos correspond.

Or pour lister tous les comptes on n’a pas besoin de paramètre.

2.5. Les opérations sur les comptes 2.5.1. La fonction verser et la fonction retraiter

Pour faire de virement ou de retrait on fait une soustraction ou une sommation sur le solde de la structure compte correspondant le numéro de compte choisi. Voici l’instruction

qui réalise ces opérations :

t[i].solde=t[i].solde+solde; t[i].solde=t[i].solde-solde ;

2.5.2. La fonction supprimée et la fonction position

La fonction positon return le rang i de compte choisi s’il existe si non return –l. Pour la suppression c’est la même chose que le premier sujet.

If (t[i].num==num) return (i); else return -2; }

3. Sujet 3 : Les méthodes de tri dans un tableau 3.1. Tri par sélection

Ce tri sert à classer les éléments de tableau par ordre décroissant par sélectionner le premier élément comme maximum ; et on le compare avec l’nième élément, si le max inferieur à t[i], on les permute :

Page 8: Raport de mini projet corrig mf.pdf

FST Tanger Département Informatiques

F. ELMASSMOUDI – O. AZOUZI Page 7

PMAX=I; for (J=I+1; J<N; J++) if (A [J]>A [PMAX]) PMAX=J; {AIDE=A [I]; A[I] = A[PMAX]; A[PMAX] = AIDE;}

3.2. Tri par bull

Le tri par bulle ou par propagation classe les éléments de tableau par ordre croissant, on comparant chaque élément avec le suive on permute si selon le cas. for (i=0; i<*N; i++){ for (j=i+1; j<*N; j++){ if (*(T+i)>*(T+j)){ /***on fait la permutation***** / } } }

Remarque : on utilise la deuxième boucle de répétition pour répéter l’opération entre les éléments

déjà triées par la première boucle. Ex : « 421 »------� 2 4 1-------� la 2eme boucle----� 214.

3.3. Tri par insertion C’est un classement par ordre croissant ; on utilise un fonction insérer qui place un élément X à l'intérieur d'un tableau triés par ordre croissant, on Trie le tableau de gauche à droite en insérant à chaque fois l'élément I+1 dans le tableau (déjà trié) des I premiers éléments. void insérer(int aide,int *t,int *n) || void tri_i nsertion(int *t,int *n) { || { int i; || int i=1; for(i=*n;i>0&&*(t+i-1)>aide;i--) || while (i<*n) *(t+i)=*(t+i-1); || inserer (*(t+i), t, & i); *(t+i)=aide; (*n)++; } || } }

3.4. Tri rapide

Ce genre de tri aussi classe tous les éléments par ordre croissant, utilisant un pivot, on classe à sa gauche les éléments inferieurs et à son droit les éléments supérieurs, et on répète cette opération pour chaque partie de tableau.

3.5. Tri par fusion

On devisant le tableau en deux parties et on fait la fusion de ces deux parties. Le tri de deux partie t1 [] et t2 [] fait par appel de fonction triparbulle.

void fusion (int t[],int t1[],int t2[],int n1,int n 2) {int i1=0;i2=0;i=0; while ( (i1<n1) && (i2<n2) ) {if( t1[i1] < t2[i2] ) t[i++]=t1[i1++]; Else t[i++]=t2[i2++]; if( i1= =n1 ) for(j=i2;j<n2;j++) t[i++]=t2[j] ; else for(j=i1;j<n1;j++) t[i++]=t1[j]; }

Page 9: Raport de mini projet corrig mf.pdf

FST Tanger Département Informatiques

F. ELMASSMOUDI – O. AZOUZI Page 8

Conclusion

L’utilisation des structures nous facile la

manipulation des variable; et nous aide à éviter

plusieurs erreurs de compilation. Or pour les

fonctions il est facile de retourner une structure après

traitement.

Ce qui concerne les méthodes de tri il y’on a

plusieurs algorithmes ; leur avantage c’est de classer

les éléments saisies facilement selon l’ordre désiré.