Advertisement
Pr0nly

l2_z01

Mar 11th, 2019
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.37 KB | None | 0 0
  1. #include <iostream>
  2. #include <cstdlib>
  3.  
  4. using namespace std;
  5.  
  6. int porownaj_liczby_normalnie(const int a, const int b){
  7. if (a==b) return 0;
  8. if (a>b) return 1;
  9. return -1;
  10. }
  11.  
  12. int wiecej_jedynek(const int a, const int b){
  13. int l_a = 0;
  14. int l_b = 0;
  15. int temp_a = a;
  16. int temp_b = b;
  17.  
  18. while (temp_a > 0){
  19. if (temp_a % 10 == 1){
  20. l_a++;
  21. }
  22. temp_a /= 10;
  23. }
  24.  
  25. while(temp_b > 0){
  26. if(temp_b % 10 == 1){
  27. l_b++;
  28. }
  29. temp_b /= 10;
  30. }
  31.  
  32. if(l_a == l_b) return 0;
  33. if(l_a > l_b) return 1;
  34. return -1;
  35. }
  36.  
  37. int wieksza_bezwzgledna(const int a, const int b){
  38. if(abs(a) == abs(b)) return 0;
  39. if(abs(a) > abs(b)) return 1;
  40. return -1;
  41. }
  42.  
  43. int wieksza_pierwsza_cyfra(const int a, const int b){
  44. int pierwsza_a = a;
  45. int pierwsza_b = b;
  46.  
  47. while (pierwsza_a >= 10) pierwsza_a /=10;
  48. while (pierwsza_b >= 10) pierwsza_b /=10;
  49.  
  50. if (pierwsza_a == pierwsza_b) return porownaj_liczby_normalnie(pierwsza_a, pierwsza_b);
  51. if (pierwsza_a > pierwsza_b) return 1;
  52. return -1;
  53. }
  54.  
  55. int (*fabryka_komparatorow(const unsigned i))(const int a,const int b){
  56. if (i==1) return wiecej_jedynek;
  57. if (i==2) return wieksza_bezwzgledna;
  58. if (i==3) return wieksza_pierwsza_cyfra;
  59. if (i>3) return porownaj_liczby_normalnie;
  60. return porownaj_liczby_normalnie;
  61. }
  62.  
  63.  
  64. void sortuj(int (*komparator)(int, int), int* tab, const unsigned n){
  65. for(int i = 0; i < n; ++i)
  66. for(int j = 0; j < n - 1; ++j){
  67. if((*komparator)(tab[j],tab[j+1]) == 1){
  68. const int tmp_t = tab[j];
  69. tab[j] = tab[j+1];
  70. tab[j+1] = tmp_t;
  71. }
  72. }
  73. }
  74.  
  75. int main()
  76. {
  77. unsigned int n;
  78. unsigned int fab_k;
  79. cout << "Podaj rozmiar tablicy: ";
  80. cin >> n;
  81. cout << endl;
  82.  
  83. int * tab = new int[n];
  84.  
  85. for(int i = 0; i < n; ++i){
  86. tab[i] = (rand() % 2000) - 1000;
  87. }
  88.  
  89. for(int i = 0; i < n; ++i){
  90. cout << tab[i] << "\t";
  91. }
  92.  
  93. cout << "\nPodaj rodzaj sortowania: \n0 - normalnie\n1 - liczba która ma więcej jedynek\n2 - większa wartość bezwzględna\n3 - większa pierwsza cyfra\n";
  94. cin >> fab_k;
  95.  
  96. sortuj(fabryka_komparatorow(fab_k), tab, n);
  97.  
  98. for(int i = 0; i < n; ++i){
  99.  
  100. cout << tab[i] << "\t";
  101. }
  102.  
  103. delete [] tab;
  104.  
  105. return 0;
  106. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement