Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <math.h>
- void wprowadz_dane(float &dana) {
- float zmienna;
- scanf("%f", &zmienna);
- dana = zmienna;
- }
- void wprowadz_dane(int &dana) {
- int zmienna;
- scanf("%d", &zmienna);
- dana = zmienna;
- }
- bool warunek_1(float *x1, float *x2, float *y1, float *y2, int *pod) {
- if (*x1 == *x2) return false;
- else if (*y1 == *y2) return false;
- else if (*pod < 0) return false;
- return true;
- }
- void wyswietlanie(float *tab) {
- printf("%f %f %f %f", tab[0], tab[2], tab[0] + tab[1], tab[2] + tab[3]);
- printf(" \n");
- }
- int main(int argc, char *argv[]) {
- int POD; // deklaracja zmiennej na dana wejsciowa poziomu podziału
- /*
- deklaracja zmiennych na:
- dane wejsciowe: definiujace prostokat w kartezianskim ukladzie wspolrzednych
- za pomoca przciwleglych wierzcholkow (XLD,YLD,XPG,YPG)
- dane robocze: dlugosci bokow najmniejszych prostokatow wynikajacych z poziomu podzialu (DX, DY)
- lewych dolnych wierzcholkow najmniejszych prostokatow wynikajacych z poziomu podzialu (X, Y)
- i nie tylko w tym celu
- decyzja o ponownych obliczeniach (next_calc)
- */
- float XLD, YLD, XPG, YPG, DX, DY, X, Y;
- int next_calc;
- do {
- next_calc = 1;
- printf("Podaj wspolrzedna x dolnego lewewego wierzcholka prostokata\n");
- wprowadz_dane(XLD); // <------------------------------------Funkcja z wskaznikami
- printf("Podaj wspolrzedna y dolnego lewego wierzcholka prostokata \n");
- wprowadz_dane(YLD);
- printf("Podaj wspolrzedna x gornego prawego wierzcholka prostokata \n");
- wprowadz_dane(XPG);
- printf("Podaj wspolrzedna y gornego prawego wierzcholka prostokata \n");
- wprowadz_dane(YPG);
- printf("Podaj poziom podzialu \n");
- wprowadz_dane(POD);
- if (warunek_1(&XLD, &XPG, &YLD, &YPG, &POD)) {// walidacja ok. - liczymy <-------------------funckaj z adresami
- // normalizacja
- X = XLD;
- Y = YLD;
- XLD = fminf(XLD, XPG);
- YLD = fminf(YLD, YPG);
- XPG = fmaxf(X, XPG);
- YPG = fmaxf(Y, YPG);
- // liczymy boki najmniejszych prostokatow
- DX = (XPG - XLD) / (pow(2, POD));
- DY = (YPG - YLD) / (pow(2, POD));
- // ustawienie lewego dolnego wierzcholka prostokata bazowego
- X = XLD;
- Y = YLD;
- // wyznaczanie wierzcholkow prostokatow wynikajacych z podzialu
- do { // petla po Y
- while (X < XPG) // petla po X
- {
- // wyprowadzenie wynikow kalkulacji
- float *tab[4] = {&X, &Y, &DX, &DY}; // <------------------------------- TABLICA WSKAZNIKOW
- wyswietlanie(*tab);
- printf("%f %f %f %f", X, Y, X + DX, Y + DY);
- printf(" \n");
- X = X + DX;
- }
- X = XLD;
- Y = Y + DY;
- } while (Y < YPG);
- } else // wynik walidacji wprowadzonych danych negatywny
- {
- printf("Wprowadzono nieporawne dane \n");
- }
- printf("Ponowna kalkulacja? TAK - wcisnij 0; NIE - wcisnij inny klawisz \n");
- scanf("%d", &next_calc);
- } while (next_calc == 0);
- system("PAUSE");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement