File: Stare vježbe/vjezbe09/53__pointeri_operacije.c

  1. /*
  2.   53__pointeri_operacije.c
  3.   Operacije nad pokazivacima, usporedjivanje pokazivaca
  4.   -----
  5.   Dane su funkcije max1 i max2 koje za dani realni niz odredjene duljine
  6.   nalaze njegov maksimum.
  7.   Pritom je max1 implementirana "klasicno", dok je max2 realizirana
  8.   upotrebom pointerske aritmetike.
  9.  */
  10.  
  11. #include <stdio.h>
  12.  
  13. #define N 10
  14.  
  15. float max1(float* x, int duljina) {
  16. float maximum;
  17. int i;
  18.  
  19. maximum=x[0];
  20. for(i = 0; i < duljina; i++)
  21. if(x[i] > maximum)
  22. maximum = x[i];
  23.  
  24. return maximum;
  25. }
  26.  
  27. float max2(float* x, int duljina) {
  28. float maximum, *px;
  29.  
  30. maximum = *x;
  31. for(px = &x[0]; px <= &x[duljina-1]; px++)
  32. /* ili for(px = x; px <= x+duljina-1; px++) */
  33. if(*px > maximum)
  34. maximum = *px;
  35.  
  36. return maximum;
  37. }
  38.  
  39.  
  40. int main()
  41. {
  42. int i;
  43. float x[N];
  44.  
  45. for(i=0; i<N; i++)
  46. printf("%.2f ", *(x+i)=i*(N-i));
  47.  
  48. printf("\n\nmax1: %.2f\n", max1(&x[0], N));
  49. printf("max2: %.2f\n", max2(x, N));
  50.  
  51. /* Funkciju mozemo pozvati i tako da predamo x+i kao pocetnu adresu
  52.   adresu za polje, no, tada ce broj elemenata biti N-i */
  53. printf("max2: %.2f\n", max2(x+3*N/4, N-3*N/4));
  54.  
  55. return 0;
  56. }
  57.