Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ***********main.c***********
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include "fonction.h"
- #include <inttypes.h>
- int main(int argc, char **argv)
- {
- char prenom1[] = "Karina";
- char nom1[] = "AARON";
- char salaire1[] = "20 000";
- char prenom2[] = "Christian";
- char nom2[] = "MAZIER";
- char salaire2[] = "10";
- char prenom3[] = "Antoine";
- char nom3[] = "MABIER";
- char salaire3[] = "1";
- char prenom4[] = "Kelly";
- char nom4[] = "MAVIER";
- char salaire4[] = "2000";
- char prenom5[] = "Jean";
- char nom5[] = "CLAUDE";
- char salaire5[] = "3578";
- char prenom6[] = "Michel";
- char nom6[] = "SARDOU";
- char salaire6[] = "41";
- char prenom7[] = "Lola";
- char nom7[] = "BERTRAND";
- char salaire7[] = "38";
- char prenom8[] = "Pierre";
- char nom8[] = "SAINT";
- char salaire8[] = "11111";
- char prenom9[] = "Laura";
- char nom9[] = "SAINT";
- char salaire9[] = "65000";
- fonctionnaire * tab_fonctionnaire[10];
- for(int i = 0; i < 10; i++)
- {
- tab_fonctionnaire[i] = NULL;
- }
- //--------
- fonctionnaire f1;
- f1.prenom = prenom1;
- f1.nom = nom1;
- f1.salaire = salaire1;
- f1.next_fonctionnaire = NULL;
- add_member(tab_fonctionnaire, &f1);
- //--------
- fonctionnaire f2;
- f2.prenom = prenom2;
- f2.nom = nom2;
- f2.salaire = salaire2;
- f2.next_fonctionnaire = NULL;
- add_member(tab_fonctionnaire, &f2);
- //--------
- fonctionnaire f3;
- f3.prenom = prenom3;
- f3.nom = nom3;
- f3.salaire = salaire3;
- f3.next_fonctionnaire = NULL;
- add_member(tab_fonctionnaire, &f3);
- //--------
- fonctionnaire f4;
- f4.prenom = prenom4;
- f4.nom = nom4;
- f4.salaire = salaire4;
- f4.next_fonctionnaire = NULL;
- add_member(tab_fonctionnaire, &f4);
- //--------
- fonctionnaire f5;
- f5.prenom = prenom5;
- f5.nom = nom5;
- f5.salaire = salaire5;
- f5.next_fonctionnaire = NULL;
- add_member(tab_fonctionnaire, &f5);
- //--------
- fonctionnaire f6;
- f6.prenom = prenom6;
- f6.nom = nom6;
- f6.salaire = salaire6;
- f6.next_fonctionnaire = NULL;
- add_member(tab_fonctionnaire, &f6);
- //--------
- fonctionnaire f7;
- f7.prenom = prenom7;
- f7.nom = nom7;
- f7.salaire = salaire7;
- f7.next_fonctionnaire = NULL;
- add_member(tab_fonctionnaire, &f7);
- //--------
- fonctionnaire f8;
- f8.prenom = prenom8;
- f8.nom = nom8;
- f8.salaire = salaire8;
- f8.next_fonctionnaire = NULL;
- add_member(tab_fonctionnaire, &f8);
- //--------
- fonctionnaire f9;
- f9.prenom = prenom9;
- f9.nom = nom9;
- f9.salaire = salaire9;
- f9.next_fonctionnaire = NULL;
- add_member(tab_fonctionnaire, &f9);
- show_table(tab_fonctionnaire);
- printf("\n\n");
- put_salary(*tab_fonctionnaire, "Pierre", "SAINT");
- printf("\n\n");
- printf("Afficher un index \n");
- show_index(tab_fonctionnaire,2);
- return 0;
- }
- *********************************fichier .c ********************************************
- #include "fonction.h"
- #include <stdlib.h>
- #include <string.h>
- #include <stdio.h>
- int N = 5;
- int B = 9;
- char* get_concat_names (const char* prenom, const char* nom)
- {
- char* result_concat = (char*) malloc (strlen (prenom) + strlen (nom) + 1);
- int length2 = strlen (nom);
- if (length2 >= 4 )
- {
- char four_first_letters_nom[4+1];
- char two_first_letters_prenom[2+1];
- memset(four_first_letters_nom, '\0', sizeof(four_first_letters_nom)); //memset permet de remplir la chaîne de '\0'
- memset(two_first_letters_prenom, '\0', sizeof(two_first_letters_prenom));
- strncpy(four_first_letters_nom, nom, 4);
- strncpy(two_first_letters_prenom, prenom, 2);
- strcpy(result_concat, four_first_letters_nom);
- strcat(result_concat, two_first_letters_prenom);
- }
- else
- {
- char four_first_letters_nom[length2+1];
- char two_first_letters_prenom[2+1];
- memset(four_first_letters_nom, '\0', sizeof(four_first_letters_nom)); //memset permet de remplir la chaîne de '\0'
- memset(two_first_letters_prenom, '\0', sizeof(two_first_letters_prenom));
- strncpy(four_first_letters_nom, nom, length2);
- strncpy(two_first_letters_prenom, prenom, 2);
- strcpy(result_concat, four_first_letters_nom);
- strcat(result_concat, two_first_letters_prenom);
- }
- return result_concat;
- }
- /* Fonction puissance ( = power )
- * La puissance sera toujours positive (power >= 0)
- * La puissance max à calculer sera une puissance de 5 d'où unsigned long int
- */
- unsigned long long int power (int number, int power)
- {
- unsigned long long int result = 1;
- if (power != 0 && power > 0)
- {
- while (power >0)
- {
- result = number * result;
- power --;
- }
- }
- return result;
- }
- int get_index (const char* prenom, const char* nom)
- {
- char* concat_names = get_concat_names(prenom, nom);
- int length_concat_names = strlen (concat_names);
- unsigned long long int somme = 0;
- if (concat_names != NULL)
- {
- for (int i = 0; i < length_concat_names; i++)
- {
- somme = (somme + ((int)concat_names[i] * power(B,i))) % N ;
- }
- }
- return (int)somme;
- }
- void add_member(fonctionnaire ** tab_fonctionnaire, fonctionnaire * f) //tab_fonctionnaire est un tableau de pointeur (si * alors pointeur simple)
- {
- int index = get_index(f->prenom, f->nom);
- if( tab_fonctionnaire[index] == NULL)
- {
- tab_fonctionnaire[index] = f;
- }
- else
- {
- fonctionnaire * f_parcours = tab_fonctionnaire[index];
- int stop = -1;
- while(stop != 0)
- {
- if(f_parcours->next_fonctionnaire == NULL) //1 seul fonctionnaire l'index
- {
- if (is_after(f->nom, f_parcours->nom) == 0)
- {
- f_parcours->next_fonctionnaire = f;
- stop = 0;
- }
- else
- {
- f->next_fonctionnaire = f_parcours;
- tab_fonctionnaire[index] = f;
- stop = 0;
- }
- }
- else //plusieurs fonctionnaires dans l'index
- {
- if(is_after(f->nom, f_parcours->nom) == 0 && is_after(f_parcours->next_fonctionnaire->nom ,f->nom) == 0)
- {
- f->next_fonctionnaire = f_parcours->next_fonctionnaire;
- f_parcours->next_fonctionnaire = f;
- stop = 0;
- }
- else
- {
- f_parcours = f_parcours->next_fonctionnaire;
- }
- }
- }
- }
- }
- //fonction qui permute deux mots si nécessaire (pour les ranger par ordre alpha.)
- int is_after(char * mot1, char * mot2)
- {
- int i = 0;
- int result = -1;
- while(result == -1)
- {
- int mot1_ascii = (int) mot1[i];
- int mot2_ascii = (int) mot2[i];
- //Transformation majuscule en minuscule
- if(mot1_ascii < 97)
- {
- mot1_ascii = mot1_ascii +32;
- }
- if(mot2_ascii < 97)
- {
- mot2_ascii = mot2_ascii +32;
- }
- if(mot1_ascii > mot2_ascii)
- {
- result = 0;
- }
- if(mot1_ascii < mot2_ascii)
- {
- result = 1;
- }
- if(mot1_ascii == mot2_ascii){
- i++;
- }
- }
- return result;
- }
- void show_table (fonctionnaire ** tab_fonctionnaire)
- {
- for (int i =0; i < N; i++)
- {
- printf("---------------------------- \n");
- if (tab_fonctionnaire[i] == NULL)
- {
- printf("NULL\n");
- }
- else
- {
- fonctionnaire * f = tab_fonctionnaire[i];
- while ( f != NULL)
- {
- printf("--------- \n");
- printf("Nom : %s \n", f->nom);
- printf("Prenom : %s \n", f->prenom);
- printf("Salaire : %s \n", f->salaire);
- f = f->next_fonctionnaire;
- }
- }
- }
- }
- void show_index(fonctionnaire ** tab_fonctionnaire, int index)
- {
- fonctionnaire *f_parcours = tab_fonctionnaire[index];
- if ( index < 0 || index >N)
- printf("Index inexistant \n");
- else
- {
- if ( tab_fonctionnaire [index] == NULL)
- {
- printf("Il n'y a pas de fonctionnaire dans cette case index\n");
- printf("a");
- }
- else
- {
- printf("b");
- while ( f_parcours->next_fonctionnaire != NULL )
- {
- printf("--------- \n");
- printf("Nom : %s \n", f_parcours->nom);
- printf("Prenom : %s \n", f_parcours->prenom);
- printf("Salaire : %s \n", f_parcours->salaire);
- f_parcours = f_parcours->next_fonctionnaire;
- printf("c");
- }
- printf("d");
- }
- }
- }
- void put_salary (fonctionnaire * tab_fonctionnaire, const char* prenom, const char* nom)
- {
- int index = get_index(prenom, nom);
- printf("index : %d\n", index);
- char *salaire = 0;
- fonctionnaire* f_parcours = malloc(sizeof(f_parcours));
- *f_parcours = tab_fonctionnaire[index];
- int i = 0 ;
- while ( f_parcours->nom != nom && f_parcours->prenom != prenom && f_parcours->next_fonctionnaire != NULL )
- {
- f_parcours = f_parcours->next_fonctionnaire;
- i++;
- printf("a \n");
- }
- salaire = f_parcours->salaire;
- printf("salaire : %s \n", salaire);
- }
- void put_between(fonctionnaire ** tab_fonctionnaire, int index1, int index2)
- {
- }
- *****************************************************************************fichier .h********************************************
- #ifndef FONCTION_H
- #define FONCTION_H
- struct _fonctionnaire
- {
- char * prenom;
- char * nom;
- char * salaire;
- struct _fonctionnaire * next_fonctionnaire;
- };
- typedef struct _fonctionnaire fonctionnaire;
- char* get_concat_names (const char* prenom, const char* nom);
- unsigned long long int power (int number, int power);
- int get_index (const char* prenom, const char* nom);
- void add_member(fonctionnaire ** tab_fonctionnaire, fonctionnaire * f);
- int is_after(char * mot1, char * mot2);
- void show_table (fonctionnaire ** tab_fonctionnaire);
- void show_index(fonctionnaire ** tab_fonctionnaire, int index);
- void put_salary (fonctionnaire * tab_fonctionnaire, const char prenom, const char* nom);
- void put_between(fonctionnaire ** tab_fonctionnaire, int index1, int index2);
- #endif
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement