Advertisement
Guest User

Untitled

a guest
Dec 16th, 2017
60
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.47 KB | None | 0 0
  1. ***********main.c***********
  2.  
  3. #include <stdio.h>
  4. #include <stdlib.h>
  5. #include <string.h>
  6. #include "fonction.h"
  7. #include <inttypes.h>
  8.  
  9. int main(int argc, char **argv)
  10. {
  11. char prenom1[] = "Karina";
  12. char nom1[] = "AARON";
  13. char salaire1[] = "20 000";
  14.  
  15. char prenom2[] = "Christian";
  16. char nom2[] = "MAZIER";
  17. char salaire2[] = "10";
  18.  
  19. char prenom3[] = "Antoine";
  20. char nom3[] = "MABIER";
  21. char salaire3[] = "1";
  22.  
  23. char prenom4[] = "Kelly";
  24. char nom4[] = "MAVIER";
  25. char salaire4[] = "2000";
  26.  
  27. char prenom5[] = "Jean";
  28. char nom5[] = "CLAUDE";
  29. char salaire5[] = "3578";
  30.  
  31. char prenom6[] = "Michel";
  32. char nom6[] = "SARDOU";
  33. char salaire6[] = "41";
  34.  
  35. char prenom7[] = "Lola";
  36. char nom7[] = "BERTRAND";
  37. char salaire7[] = "38";
  38.  
  39. char prenom8[] = "Pierre";
  40. char nom8[] = "SAINT";
  41. char salaire8[] = "11111";
  42.  
  43. char prenom9[] = "Laura";
  44. char nom9[] = "SAINT";
  45. char salaire9[] = "65000";
  46.  
  47.  
  48. fonctionnaire * tab_fonctionnaire[10];
  49.  
  50. for(int i = 0; i < 10; i++)
  51. {
  52. tab_fonctionnaire[i] = NULL;
  53. }
  54.  
  55. //--------
  56. fonctionnaire f1;
  57. f1.prenom = prenom1;
  58. f1.nom = nom1;
  59. f1.salaire = salaire1;
  60. f1.next_fonctionnaire = NULL;
  61. add_member(tab_fonctionnaire, &f1);
  62.  
  63. //--------
  64. fonctionnaire f2;
  65. f2.prenom = prenom2;
  66. f2.nom = nom2;
  67. f2.salaire = salaire2;
  68. f2.next_fonctionnaire = NULL;
  69. add_member(tab_fonctionnaire, &f2);
  70.  
  71. //--------
  72. fonctionnaire f3;
  73. f3.prenom = prenom3;
  74. f3.nom = nom3;
  75. f3.salaire = salaire3;
  76. f3.next_fonctionnaire = NULL;
  77. add_member(tab_fonctionnaire, &f3);
  78.  
  79. //--------
  80. fonctionnaire f4;
  81. f4.prenom = prenom4;
  82. f4.nom = nom4;
  83. f4.salaire = salaire4;
  84. f4.next_fonctionnaire = NULL;
  85. add_member(tab_fonctionnaire, &f4);
  86.  
  87. //--------
  88. fonctionnaire f5;
  89. f5.prenom = prenom5;
  90. f5.nom = nom5;
  91. f5.salaire = salaire5;
  92. f5.next_fonctionnaire = NULL;
  93. add_member(tab_fonctionnaire, &f5);
  94.  
  95. //--------
  96. fonctionnaire f6;
  97. f6.prenom = prenom6;
  98. f6.nom = nom6;
  99. f6.salaire = salaire6;
  100. f6.next_fonctionnaire = NULL;
  101. add_member(tab_fonctionnaire, &f6);
  102.  
  103. //--------
  104. fonctionnaire f7;
  105. f7.prenom = prenom7;
  106. f7.nom = nom7;
  107. f7.salaire = salaire7;
  108. f7.next_fonctionnaire = NULL;
  109. add_member(tab_fonctionnaire, &f7);
  110.  
  111. //--------
  112. fonctionnaire f8;
  113. f8.prenom = prenom8;
  114. f8.nom = nom8;
  115. f8.salaire = salaire8;
  116. f8.next_fonctionnaire = NULL;
  117. add_member(tab_fonctionnaire, &f8);
  118.  
  119. //--------
  120. fonctionnaire f9;
  121. f9.prenom = prenom9;
  122. f9.nom = nom9;
  123. f9.salaire = salaire9;
  124. f9.next_fonctionnaire = NULL;
  125. add_member(tab_fonctionnaire, &f9);
  126.  
  127.  
  128. show_table(tab_fonctionnaire);
  129.  
  130. printf("\n\n");
  131.  
  132. put_salary(*tab_fonctionnaire, "Pierre", "SAINT");
  133.  
  134. printf("\n\n");
  135.  
  136. printf("Afficher un index \n");
  137. show_index(tab_fonctionnaire,2);
  138.  
  139.  
  140. return 0;
  141. }
  142.  
  143. *********************************fichier .c ********************************************
  144.  
  145.  
  146. #include "fonction.h"
  147. #include <stdlib.h>
  148. #include <string.h>
  149. #include <stdio.h>
  150.  
  151.  
  152. int N = 5;
  153. int B = 9;
  154.  
  155. char* get_concat_names (const char* prenom, const char* nom)
  156. {
  157. char* result_concat = (char*) malloc (strlen (prenom) + strlen (nom) + 1);
  158. int length2 = strlen (nom);
  159.  
  160. if (length2 >= 4 )
  161. {
  162. char four_first_letters_nom[4+1];
  163. char two_first_letters_prenom[2+1];
  164.  
  165. memset(four_first_letters_nom, '\0', sizeof(four_first_letters_nom)); //memset permet de remplir la chaîne de '\0'
  166. memset(two_first_letters_prenom, '\0', sizeof(two_first_letters_prenom));
  167.  
  168. strncpy(four_first_letters_nom, nom, 4);
  169. strncpy(two_first_letters_prenom, prenom, 2);
  170.  
  171. strcpy(result_concat, four_first_letters_nom);
  172. strcat(result_concat, two_first_letters_prenom);
  173. }
  174.  
  175. else
  176. {
  177. char four_first_letters_nom[length2+1];
  178. char two_first_letters_prenom[2+1];
  179.  
  180. memset(four_first_letters_nom, '\0', sizeof(four_first_letters_nom)); //memset permet de remplir la chaîne de '\0'
  181. memset(two_first_letters_prenom, '\0', sizeof(two_first_letters_prenom));
  182.  
  183. strncpy(four_first_letters_nom, nom, length2);
  184. strncpy(two_first_letters_prenom, prenom, 2);
  185.  
  186. strcpy(result_concat, four_first_letters_nom);
  187. strcat(result_concat, two_first_letters_prenom);
  188. }
  189.  
  190. return result_concat;
  191. }
  192.  
  193.  
  194.  
  195.  
  196. /* Fonction puissance ( = power )
  197. * La puissance sera toujours positive (power >= 0)
  198. * La puissance max à calculer sera une puissance de 5 d'où unsigned long int
  199. */
  200. unsigned long long int power (int number, int power)
  201. {
  202. unsigned long long int result = 1;
  203.  
  204. if (power != 0 && power > 0)
  205. {
  206. while (power >0)
  207. {
  208. result = number * result;
  209. power --;
  210. }
  211. }
  212. return result;
  213. }
  214.  
  215. int get_index (const char* prenom, const char* nom)
  216. {
  217. char* concat_names = get_concat_names(prenom, nom);
  218. int length_concat_names = strlen (concat_names);
  219. unsigned long long int somme = 0;
  220.  
  221. if (concat_names != NULL)
  222. {
  223. for (int i = 0; i < length_concat_names; i++)
  224. {
  225. somme = (somme + ((int)concat_names[i] * power(B,i))) % N ;
  226. }
  227. }
  228.  
  229. return (int)somme;
  230. }
  231.  
  232. void add_member(fonctionnaire ** tab_fonctionnaire, fonctionnaire * f) //tab_fonctionnaire est un tableau de pointeur (si * alors pointeur simple)
  233. {
  234. int index = get_index(f->prenom, f->nom);
  235.  
  236. if( tab_fonctionnaire[index] == NULL)
  237. {
  238. tab_fonctionnaire[index] = f;
  239. }
  240.  
  241.  
  242. else
  243. {
  244. fonctionnaire * f_parcours = tab_fonctionnaire[index];
  245.  
  246. int stop = -1;
  247.  
  248. while(stop != 0)
  249. {
  250.  
  251. if(f_parcours->next_fonctionnaire == NULL) //1 seul fonctionnaire l'index
  252. {
  253. if (is_after(f->nom, f_parcours->nom) == 0)
  254. {
  255. f_parcours->next_fonctionnaire = f;
  256. stop = 0;
  257. }
  258. else
  259. {
  260. f->next_fonctionnaire = f_parcours;
  261. tab_fonctionnaire[index] = f;
  262. stop = 0;
  263. }
  264. }
  265. else //plusieurs fonctionnaires dans l'index
  266. {
  267. if(is_after(f->nom, f_parcours->nom) == 0 && is_after(f_parcours->next_fonctionnaire->nom ,f->nom) == 0)
  268. {
  269. f->next_fonctionnaire = f_parcours->next_fonctionnaire;
  270. f_parcours->next_fonctionnaire = f;
  271. stop = 0;
  272. }
  273. else
  274. {
  275. f_parcours = f_parcours->next_fonctionnaire;
  276. }
  277. }
  278. }
  279. }
  280. }
  281.  
  282.  
  283.  
  284. //fonction qui permute deux mots si nécessaire (pour les ranger par ordre alpha.)
  285. int is_after(char * mot1, char * mot2)
  286. {
  287.  
  288. int i = 0;
  289. int result = -1;
  290.  
  291. while(result == -1)
  292. {
  293. int mot1_ascii = (int) mot1[i];
  294. int mot2_ascii = (int) mot2[i];
  295.  
  296. //Transformation majuscule en minuscule
  297. if(mot1_ascii < 97)
  298. {
  299. mot1_ascii = mot1_ascii +32;
  300. }
  301. if(mot2_ascii < 97)
  302. {
  303. mot2_ascii = mot2_ascii +32;
  304. }
  305.  
  306. if(mot1_ascii > mot2_ascii)
  307. {
  308. result = 0;
  309. }
  310. if(mot1_ascii < mot2_ascii)
  311. {
  312. result = 1;
  313. }
  314. if(mot1_ascii == mot2_ascii){
  315. i++;
  316. }
  317. }
  318.  
  319. return result;
  320.  
  321. }
  322.  
  323. void show_table (fonctionnaire ** tab_fonctionnaire)
  324. {
  325. for (int i =0; i < N; i++)
  326. {
  327. printf("---------------------------- \n");
  328. if (tab_fonctionnaire[i] == NULL)
  329. {
  330. printf("NULL\n");
  331. }
  332. else
  333. {
  334. fonctionnaire * f = tab_fonctionnaire[i];
  335.  
  336. while ( f != NULL)
  337. {
  338. printf("--------- \n");
  339. printf("Nom : %s \n", f->nom);
  340. printf("Prenom : %s \n", f->prenom);
  341. printf("Salaire : %s \n", f->salaire);
  342.  
  343. f = f->next_fonctionnaire;
  344. }
  345. }
  346. }
  347. }
  348.  
  349.  
  350. void show_index(fonctionnaire ** tab_fonctionnaire, int index)
  351. {
  352. fonctionnaire *f_parcours = tab_fonctionnaire[index];
  353.  
  354. if ( index < 0 || index >N)
  355. printf("Index inexistant \n");
  356. else
  357. {
  358. if ( tab_fonctionnaire [index] == NULL)
  359. {
  360. printf("Il n'y a pas de fonctionnaire dans cette case index\n");
  361. printf("a");
  362. }
  363. else
  364. {
  365. printf("b");
  366. while ( f_parcours->next_fonctionnaire != NULL )
  367. {
  368. printf("--------- \n");
  369. printf("Nom : %s \n", f_parcours->nom);
  370. printf("Prenom : %s \n", f_parcours->prenom);
  371. printf("Salaire : %s \n", f_parcours->salaire);
  372.  
  373. f_parcours = f_parcours->next_fonctionnaire;
  374. printf("c");
  375. }
  376. printf("d");
  377. }
  378. }
  379. }
  380.  
  381.  
  382. void put_salary (fonctionnaire * tab_fonctionnaire, const char* prenom, const char* nom)
  383. {
  384. int index = get_index(prenom, nom);
  385. printf("index : %d\n", index);
  386. char *salaire = 0;
  387.  
  388. fonctionnaire* f_parcours = malloc(sizeof(f_parcours));
  389. *f_parcours = tab_fonctionnaire[index];
  390. int i = 0 ;
  391.  
  392. while ( f_parcours->nom != nom && f_parcours->prenom != prenom && f_parcours->next_fonctionnaire != NULL )
  393. {
  394. f_parcours = f_parcours->next_fonctionnaire;
  395. i++;
  396.  
  397. printf("a \n");
  398. }
  399.  
  400. salaire = f_parcours->salaire;
  401. printf("salaire : %s \n", salaire);
  402. }
  403.  
  404.  
  405. void put_between(fonctionnaire ** tab_fonctionnaire, int index1, int index2)
  406. {
  407.  
  408. }
  409.  
  410. *****************************************************************************fichier .h********************************************
  411.  
  412. #ifndef FONCTION_H
  413. #define FONCTION_H
  414.  
  415. struct _fonctionnaire
  416. {
  417. char * prenom;
  418. char * nom;
  419. char * salaire;
  420.  
  421. struct _fonctionnaire * next_fonctionnaire;
  422. };
  423. typedef struct _fonctionnaire fonctionnaire;
  424.  
  425. char* get_concat_names (const char* prenom, const char* nom);
  426. unsigned long long int power (int number, int power);
  427. int get_index (const char* prenom, const char* nom);
  428. void add_member(fonctionnaire ** tab_fonctionnaire, fonctionnaire * f);
  429. int is_after(char * mot1, char * mot2);
  430. void show_table (fonctionnaire ** tab_fonctionnaire);
  431. void show_index(fonctionnaire ** tab_fonctionnaire, int index);
  432. void put_salary (fonctionnaire * tab_fonctionnaire, const char prenom, const char* nom);
  433. void put_between(fonctionnaire ** tab_fonctionnaire, int index1, int index2);
  434.  
  435.  
  436.  
  437. #endif
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement