Advertisement
Dzok1517

c problem 2 - modifikacija pokazivac

Nov 26th, 2020
51
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.33 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. void ucitaj_cene(float** , int);
  5. float** izdvoj(float** , int ,float , int(float, float));
  6. int brElemenataNiza = 0;
  7.  
  8. int veci_od(float , float );
  9. int manji_od(float , float );
  10.  
  11. void uvecaj(float *broj , float );
  12. void umanji(float *broj, float );
  13.  
  14. void modifikuj_vrednost(float** ,float, void(float*, float) );
  15.  
  16.  
  17. int main(){
  18. printf("\n------------------\nUnesite velicinu matrice n (NxN) ---> ");
  19. int n ;
  20. scanf("%i",&n);
  21.  
  22. float** matrica = malloc( n * sizeof(float*));
  23. for(int i = 0 ; i < n ;i++){
  24. matrica[i] = malloc (n * sizeof(float));
  25. }
  26.  
  27. ucitaj_cene(matrica, n);
  28.  
  29. printf("\n------------------\nUneta matrica ---> \n");
  30. for(int i = 0 ; i < n ;i++){
  31. for(int j = 0 ; j < n ;j++){
  32. printf("\t%.2f\t",matrica[i][j]);
  33. }
  34. printf("\n");
  35. }
  36. printf("Unesite 0 za povecanje cena \t Unesite 1 za smanjenje cena\n");
  37. int k ;
  38. scanf("%i", &k);
  39. printf("\n------------------\n");
  40. printf("Unesite granicu za uporedjivanje\n ");
  41. float granica ;
  42. scanf("%f", &granica);
  43. printf("\n------------------\n");
  44. printf("Unesite procenat za adzastttmentt\n ");
  45. float procenat ;
  46. scanf("%f", &procenat);
  47.  
  48.  
  49. if(k==0) {
  50. float** niz = izdvoj(matrica, n, granica, manji_od);
  51.  
  52. modifikuj_vrednost(niz, procenat, uvecaj);
  53. } else {
  54. float** niz = izdvoj(matrica, n, granica, veci_od);
  55.  
  56. modifikuj_vrednost(niz, procenat, umanji);
  57. }
  58.  
  59. printf("\n------------------\nModifikovana matrica ---> \n");
  60. for(int i = 0 ; i < n ;i++){
  61. for(int j = 0 ; j < n ;j++){
  62. printf("\t%.2f\t",matrica[i][j]);
  63. }
  64. printf("\n");
  65. }
  66.  
  67.  
  68. for(int i = 0 ; i < n ;i++){
  69. free(matrica[i]);
  70. }
  71. free(matrica);
  72.  
  73. return 0 ;
  74. }
  75.  
  76. void ucitaj_cene(float** matrica , int n ){
  77. printf("\n------------------\nUnesite clanove matrice (cene) : \n");
  78. for(int i = 0 ; i < n ;i++){
  79. for(int j = 0 ; j < n ;j++){
  80. printf("Unesite \t%i clan matrice ---> ",(i*n+j+1));
  81. scanf("%f",&matrica[i][j]);
  82. }
  83. printf("\n");
  84. }
  85.  
  86. }
  87.  
  88. float** izdvoj(float** matrica , int n , float br , int(*fun)(float, float)){
  89. int tempBr = 0;
  90. for(int i = 0 ; i < n ;i++){
  91. for(int j = 0 ; j < n ;j++){
  92. if(fun(matrica[i][j],br))
  93. tempBr++;
  94. }
  95. }
  96. brElemenataNiza = tempBr;
  97.  
  98.  
  99. float** nizPokazivaca = malloc( tempBr * sizeof(float*));
  100. int brj = 0;
  101. for(int i = 0 ; i < n ;i++){
  102. for(int j = 0 ; j < n ;j++){
  103. if(fun(matrica[i][j],br)){
  104. nizPokazivaca[brj] = &matrica[i][j];
  105. brj++;
  106. }
  107.  
  108. }
  109. }
  110. }
  111.  
  112. int veci_od(float b1, float b2){
  113. return (b1>b2) ? 1:0;
  114. }
  115.  
  116. int manji_od(float b1, float b2){
  117. return (b1>b2) ? 1:0;
  118. }
  119.  
  120. void uvecaj(float *broj , float postotak){
  121. (*broj) +=( (*broj) * postotak )/100.0;
  122. }
  123.  
  124. void umanji(float *broj , float postotak){
  125. (*broj) -=( (*broj) * postotak )/100.0;
  126. }
  127.  
  128. void modifikuj_vrednost(float** niz,float procenat, void(*fun)(float*, float) ){
  129. for(int i = 0 ; i <brElemenataNiza ;i++){
  130. fun(niz[i],procenat);
  131. }
  132.  
  133. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement