Advertisement
Guest User

Qsort

a guest
Jan 17th, 2020
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.34 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <conio.h>
  4. #include <string.h>
  5. typedef struct magazin
  6. {
  7. int pret;
  8. char nume[20];
  9. }M;
  10. void adaugare(M *m,int *nr)
  11. {
  12. (*nr)++;
  13. printf("Introduceti numele produsului: ");
  14. fflush(stdin);
  15. gets((m+*nr)->nume);
  16. printf("Introduceti pretul produsului: ");
  17. scanf("%d",&(m+*nr)->pret);
  18. }
  19. void afisare(M *m,int nr)
  20. {
  21. printf("\n%s \t %d\n",(m+nr)->nume,(m+nr)->pret);
  22. }
  23. int cmp_pret(const void *a,const void *b)
  24. {
  25. struct magazin *ia=(struct magazin *)a;
  26. struct magazin *ib=(struct magazin *)b;
  27. return (int)(ia->pret-ib->pret);
  28. }
  29. int cmp_nume(const void *a,const void *b)
  30. {
  31. struct magazin *ia=(struct magazin *)a;
  32. struct magazin *ib=(struct magazin *)b;
  33. return strcmp(ia->nume,ib->nume);
  34. }
  35. void sortare_nume(M *m, int nr)
  36. {
  37. int i;
  38. printf("Sortare dupa nume!\n");
  39. qsort(m,nr+1,sizeof(M),cmp_nume);
  40. for(i=0;i<=nr;i++)
  41. afisare(&m[0],i);
  42. }
  43. void sortare_pret(M *m, int nr)
  44. {
  45. int i;
  46. printf("Sortare dupa pret!\n");
  47. qsort(m,nr+1,sizeof(M),cmp_pret);
  48. for(i=0;i<=nr;i++)
  49. afisare(&m[0],i);
  50. }
  51. int main()
  52. {
  53. M m[20];
  54. int (*Callback1)(int *);
  55. int (*Callback2)(int *);
  56. int optiune,i,nr=-1;
  57. char;
  58. do
  59. {
  60. printf("\n1. Adaugare produs\n");
  61. printf("2. Apelarea functiilor pregatitoare\n");
  62. printf("3. Afisarea produselor\n");
  63. printf("4. Sortarea produselor dupa pret in ordine crescatoare\n");
  64. printf("5. Sortarea produselor dupa nume in ordine alfabetica\n");
  65. printf("Introduceti o optiune: ");
  66. scanf("%d",&optiune);
  67. switch(optiune)
  68. {
  69. case 1:
  70. adaugare(&m[0],&nr);
  71. break;
  72. case 2:
  73. Callback1=(int*)cmp_nume;
  74. Callback1(&m);
  75. Callback2=(int*)cmp_pret;
  76. Callback2(&m);
  77. break;
  78. case 3:
  79. for(i=0;i<=nr;i++)
  80. afisare(&m[0],i);
  81. break;
  82. case 4:
  83. sortare_pret(&m[0],nr);
  84. break;
  85. case 5:
  86. sortare_nume(&m[0],nr);
  87. break;
  88. case 0:
  89. exit(0);
  90. default:
  91. printf("Optiune gresita");
  92. break;
  93. }
  94. }while(optiune);
  95. getch();
  96. return 0;
  97. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement