Advertisement
SIKER_98

wskazniki

Apr 24th, 2020
38
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.52 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <math.h>
  4.  
  5. void wprowadz_dane(float &dana) {
  6. float zmienna;
  7. scanf("%f", &zmienna);
  8. dana = zmienna;
  9. }
  10.  
  11. void wprowadz_dane(int &dana) {
  12. int zmienna;
  13. scanf("%d", &zmienna);
  14. dana = zmienna;
  15. }
  16.  
  17. bool warunek_1(float *x1, float *x2, float *y1, float *y2, int *pod) {
  18. if (*x1 == *x2) return false;
  19. else if (*y1 == *y2) return false;
  20. else if (*pod < 0) return false;
  21. return true;
  22. }
  23.  
  24. void wyswietlanie(float *tab) {
  25. printf("%f %f %f %f", tab[0], tab[2], tab[0] + tab[1], tab[2] + tab[3]);
  26. printf(" \n");
  27. }
  28.  
  29. int main(int argc, char *argv[]) {
  30. int POD; // deklaracja zmiennej na dana wejsciowa poziomu podziału
  31. /*
  32. deklaracja zmiennych na:
  33. dane wejsciowe: definiujace prostokat w kartezianskim ukladzie wspolrzednych
  34. za pomoca przciwleglych wierzcholkow (XLD,YLD,XPG,YPG)
  35. dane robocze: dlugosci bokow najmniejszych prostokatow wynikajacych z poziomu podzialu (DX, DY)
  36. lewych dolnych wierzcholkow najmniejszych prostokatow wynikajacych z poziomu podzialu (X, Y)
  37. i nie tylko w tym celu
  38. decyzja o ponownych obliczeniach (next_calc)
  39. */
  40. float XLD, YLD, XPG, YPG, DX, DY, X, Y;
  41. int next_calc;
  42.  
  43. do {
  44. next_calc = 1;
  45. printf("Podaj wspolrzedna x dolnego lewewego wierzcholka prostokata\n");
  46. wprowadz_dane(XLD); // <------------------------------------Funkcja z wskaznikami
  47. printf("Podaj wspolrzedna y dolnego lewego wierzcholka prostokata \n");
  48. wprowadz_dane(YLD);
  49. printf("Podaj wspolrzedna x gornego prawego wierzcholka prostokata \n");
  50. wprowadz_dane(XPG);
  51. printf("Podaj wspolrzedna y gornego prawego wierzcholka prostokata \n");
  52. wprowadz_dane(YPG);
  53. printf("Podaj poziom podzialu \n");
  54. wprowadz_dane(POD);
  55. if (warunek_1(&XLD, &XPG, &YLD, &YPG, &POD)) {// walidacja ok. - liczymy <-------------------funckaj z adresami
  56. // normalizacja
  57. X = XLD;
  58. Y = YLD;
  59. XLD = fminf(XLD, XPG);
  60. YLD = fminf(YLD, YPG);
  61. XPG = fmaxf(X, XPG);
  62. YPG = fmaxf(Y, YPG);
  63. // liczymy boki najmniejszych prostokatow
  64. DX = (XPG - XLD) / (pow(2, POD));
  65. DY = (YPG - YLD) / (pow(2, POD));
  66. // ustawienie lewego dolnego wierzcholka prostokata bazowego
  67. X = XLD;
  68. Y = YLD;
  69. // wyznaczanie wierzcholkow prostokatow wynikajacych z podzialu
  70. do { // petla po Y
  71. while (X < XPG) // petla po X
  72. {
  73. // wyprowadzenie wynikow kalkulacji
  74. float *tab[4] = {&X, &Y, &DX, &DY}; // <------------------------------- TABLICA WSKAZNIKOW
  75. wyswietlanie(*tab);
  76. printf("%f %f %f %f", X, Y, X + DX, Y + DY);
  77. printf(" \n");
  78. X = X + DX;
  79. }
  80. X = XLD;
  81. Y = Y + DY;
  82. } while (Y < YPG);
  83. } else // wynik walidacji wprowadzonych danych negatywny
  84. {
  85. printf("Wprowadzono nieporawne dane \n");
  86. }
  87. printf("Ponowna kalkulacja? TAK - wcisnij 0; NIE - wcisnij inny klawisz \n");
  88. scanf("%d", &next_calc);
  89. } while (next_calc == 0);
  90.  
  91. system("PAUSE");
  92. return 0;
  93. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement