Advertisement
SIKER_98

Poprawka woznica

May 28th, 2020
396
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.12 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. struct kwadrat {
  25. int iX, iY; // indexy
  26. float XLD, YLD, XPG, YPG; // lokalizacje
  27. };
  28.  
  29. void wyswietlanie(struct kwadrat **k, int pod){
  30. for(int i=0 ; i<pow(2, pod) ; i++)
  31. for(int j=0 ; j<pow(2, pod);j++)
  32. printf("<%d:%d\t(%.2f;%.2f)\t(%.2f;%.2f)>\n",k[i][j].iX,k[i][j].iY,k[i][j].XLD,k[i][j].YLD,k[i][j].XPG,k[i][j].YPG); // 2 miejsca po przecinku dla czytelnosci
  33. }
  34.  
  35. int main(int argc, char *argv[]) {
  36. int POD; // deklaracja zmiennej na dana wejsciowa poziomu podziału
  37. /*
  38. deklaracja zmiennych na:
  39. dane wejsciowe: definiujace prostokat w kartezianskim ukladzie wspolrzednych
  40. za pomoca przciwleglych wierzcholkow (XLD,YLD,XPG,YPG)
  41. dane robocze: dlugosci bokow najmniejszych prostokatow wynikajacych z poziomu podzialu (DX, DY)
  42. lewych dolnych wierzcholkow najmniejszych prostokatow wynikajacych z poziomu podzialu (X, Y)
  43. i nie tylko w tym celu
  44. decyzja o ponownych obliczeniach (next_calc)
  45. */
  46. float XLD, YLD, XPG, YPG, DX, DY, X, Y;
  47. int next_calc;
  48.  
  49. do {
  50. next_calc = 1;
  51. printf("Podaj wspolrzedna x dolnego lewewego wierzcholka prostokata\n");
  52. wprowadz_dane(XLD); // <------------------------------------Funkcja z wskaznikami
  53. printf("Podaj wspolrzedna y dolnego lewego wierzcholka prostokata \n");
  54. wprowadz_dane(YLD);
  55. printf("Podaj wspolrzedna x gornego prawego wierzcholka prostokata \n");
  56. wprowadz_dane(XPG);
  57. printf("Podaj wspolrzedna y gornego prawego wierzcholka prostokata \n");
  58. wprowadz_dane(YPG);
  59. printf("Podaj poziom podzialu \n");
  60. wprowadz_dane(POD);
  61. if (warunek_1(&XLD, &XPG, &YLD, &YPG, &POD)) {// walidacja ok. - liczymy <-------------------funckaj z adresami
  62. // normalizacja
  63.  
  64. struct kwadrat **K = (kwadrat **) (malloc(
  65. pow(2, POD) * sizeof(struct kwadrat *))); // deklaracja miejsca dla wierszy
  66. if (K == NULL) {
  67. printf("Nie przydzielono pamięci");
  68. return 2;
  69. }
  70. for (int i = 0; i < pow(2, POD); i++) { // deklaracja pamieci dla pozycji w wierszu
  71. K[i] = (kwadrat *) malloc(pow(2, POD) * sizeof(struct kwadrat));
  72. }
  73.  
  74.  
  75. X = XLD;
  76. Y = YLD;
  77. XLD = fminf(XLD, XPG);
  78. YLD = fminf(YLD, YPG);
  79. XPG = fmaxf(X, XPG);
  80. YPG = fmaxf(Y, YPG);
  81. // liczymy boki najmniejszych prostokatow
  82. DX = (XPG - XLD) / (pow(2, POD));
  83. DY = (YPG - YLD) / (pow(2, POD));
  84. // ustawienie lewego dolnego wierzcholka prostokata bazowego
  85. X = XLD;
  86. Y = YLD;
  87. // wyznaczanie wierzcholkow prostokatow wynikajacych z podzialu
  88. for (int i = 0; i < pow(2, POD); i++) {
  89. for (int j = 0; j < pow(2, POD); j++) {
  90. K[i][j].iX = i+1;
  91. K[i][j].iY = j+1;
  92. K[i][j].XLD = X;
  93. K[i][j].YLD = Y;
  94. K[i][j].XPG = X + DX;
  95. K[i][j].YPG = Y + DY;
  96. X = X + DX;
  97. }
  98. X = XLD;
  99. Y = Y + DY;
  100. }
  101.  
  102. wyswietlanie(K, POD);
  103.  
  104. free(K); // zwalnianie pamieci
  105.  
  106. printf("Ponowna kalkulacja? TAK - wcisnij 0; NIE - wcisnij inny klawisz \n");
  107. scanf("%d", &next_calc);
  108. }
  109. }while(next_calc!='0');
  110.  
  111. system("PAUSE");
  112. return 0;
  113. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement