• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Pomoc w rozwiązaniu zadania - C++

VPS Starter Arubacloud
0 głosów
411 wizyt
pytanie zadane 16 października 2018 w C i C++ przez periedynek Obywatel (1,320 p.)

Cześć. Mam za zadanie:

Wiem, ze chodzi o część wspolną tych prostokątów. Ale o co chodzi w drugim akapicie, jak ma wyglądać pobieranie danych to już nie wiem przez co nie wiem jak się za to kompletnie zabrać.

2 odpowiedzi

+1 głos
odpowiedź 16 października 2018 przez PanRik Gaduła (4,510 p.)
edycja 16 października 2018 przez PanRik

Standardowe wejście to std::cin

std::cin << firstRectangleX << firstRectangleY << firstRectangleWidth << firstRectangleHeight;
std::cin << //to samo dla secondRectangle ...

Chyba o to chodzi :)

komentarz 16 października 2018 przez periedynek Obywatel (1,320 p.)
hmmm.. no tak, ale w sumie dalej nie wiem jak to zrobić :/// co mam z tym zrobić. Myślałem o tej częsci wspólnej ale jakbym miał 4 punkty, a mam jakis x i y jednego boku, dlugosc i szerokosc. Co prawda jak dodam do x szerokość to będe miał drugi punkt, to samo z wykością. Ale co mam dalej z tym zrobić, to nie mam pojęcia.
komentarz 16 października 2018 przez PanRik Gaduła (4,510 p.)
edycja 16 października 2018 przez PanRik

Pierwsza część pierwszego zdania "Stosując się do programowania obiektowego..."

Stwórz sobie klasę:
 

class Rectangle //w poprzednim komenatrzu się pomyliłem nie triangle tylko rectangle.
{
   float rectangleX;
   float rectangleY;
   float rectangleWidth;
   float rectangleHeight;

}

Teraz napewno przyda Ci się funkcja sprawdzjąca czy dwa prostokąty mają część wspólną:
 

bool isOverlapping ( Rectangle &r1, Rectangle &r2 );

Kwestia tego jak chcesz to sprawdzać, mógłbyś obliczać pole prostokątów ( zajętość w X i Y ) i sprawdzać czy drugi prostokąt się łapie w tym. Np. Tablica jako zakres:
 

class Rectangle
{
...
float X[2]; //X[0] początek zakresu, X[1] koniec zakresu
float Y[2]; //Y[0] początek ... itd.
}

Narysuj sobie jakiś przykładzik , naprawdę dużo to pomaga. Zrób identyczny przykład już w kodzie i jakoś pójdzie ;)

Edit: Są na to wzory , poszukaj :D

komentarz 16 października 2018 przez periedynek Obywatel (1,320 p.)
Wiem jak wyznaczyć pozostałe wierzchołki.

Tak jak juz pisałem. Górny dodajemy wysokość, prawy dolny dodajemy szerokość, prawy górny dodajemy szerokość i wysokość.

Ale teraz nie wiem jak to zapisać. Chciałem zrobić za pomoca setterów, ale nie wiem jak to zrobić z tym cinem, bo setter przyjmuje jakąś konkretną wartość już.

Czy może powinienem zrobić klasę punkt?
komentarz 17 października 2018 przez PanRik Gaduła (4,510 p.)

Setter nie musi przyjmować konkretnej wartości. Co Ci skoczi zrobić coś typu:

void setVariable()
{
    std::cin << classMemberVar;
}

Jesli nie chcesz tak to robisz:

int main()
{
    float value;
    std::cin << value;
    Rectangle r1; 
    r1.setVar(value);
    //mozesz przypisac tez za pomoca konstruktora.
    //co w sumie bardziej polecam
}
    

 

komentarz 17 października 2018 przez periedynek Obywatel (1,320 p.)
edycja 17 października 2018 przez periedynek
Tylko właśnie chodzi o to, ze jest napisane: dwie linie odpowiadają dwóm prostokątom..

Jak pobrać dane i w tym samym czasie przypisać do konstruktora?
komentarz 17 października 2018 przez PanRik Gaduła (4,510 p.)
int main()
{
    float rectangleX;
    float rectangleY;
    float rectangleWidth;
    float rectangleHeight;

    std::cin << rectangleX << rectangleY << rectangleWidth << rectangleHeight;

    Rectangle r1( rectangleX, rectangleY,  rectangleWidth, rectangleHeight);

    std::cin << rectangleX << rectangleY << rectangleWidth << rectangleHeight;

   Rectangle r1( rectangleX, rectangleY,  rectangleWidth, rectangleHeight);
}

lub za pomocą seterów jeżeli wolisz, naprawdę wszystko to Ci wyżej napisałem :)

komentarz 17 października 2018 przez periedynek Obywatel (1,320 p.)

Ale nie rozumiesz mnie.

Jak mam zrobić to za pomocą setterów. W taki sposób jak u góry napisałeś, to nie ma możliwośći zapisania tego w jednej linii: 

Rectangle r1;
    r1.setHeight(rectangleHeight);
    r1.setWidth(rectangleWidth);
    r1.setX(rectangleX);
    r1.setY(rectangleY);

 

komentarz 17 października 2018 przez PanRik Gaduła (4,510 p.)

U mnie działa: http://cpp.sh/2xscw

#include <iostream>

class Rectangle
{
    public:
    float a;
    float b;
    float c;
    float d;
    
    void setA()
    {
       std::cin >> a;
    }
    
    void  setB()
    {
        std::cin >> b;
    }
    void  setC()
    {
        std::cin >> c;
    }
    void  setD()
    {
        std::cin >> d;
    }
    
    void setA( float arg )
    {
        a = arg;
    }
    
    void setB( float arg )
    {
        b = arg;
    }

    void setC( float arg )
    {
        c = arg;
    }
    
    void setD( float arg )
    {
        d = arg;
    }
    
    void printVar()
    {
        std::cout << a << " " << b << " " << c << " " << d << std::endl;
    }
};

int main()
{
    Rectangle r1;
    r1.setA();
    r1.setB();
    r1.setC();
    r1.setD();
    Rectangle r2;
    r2.setA();
    r2.setB();
    r2.setC();
    r2.setD();
    
    std::cout << "r1: ";
    r1.printVar();
    std::cout << "r2: ";
    r2.printVar();
    
    r1.setA(10);
    r1.setB(11);
    r1.setC(12);
    r1.setD(13);
    r2.setA(50);
    r2.setB(51);
    r2.setC(52);
    r2.setD(53);
    
    std::cout << "r1: ";
    r1.printVar();
    std::cout << "r2: ";
    r2.printVar();
    return 0;
}

Edit: Jak bardzo chcesz to mogę Ci pokazać z konstruktorem, też będzie std::cin .

komentarz 17 października 2018 przez periedynek Obywatel (1,320 p.)
Ale nie o to chodzi. Ja wiem, że settery i gettery działają.

Cały czas odnoszę się do jednego. Wszystko ma być w jednej linijce.

Zobacze czy przejdzie tak jak mam teraz, czyli 4 liniki (4 settery).

 

EDIT: Tutaj dochodzi do mnie, że mogłem zrozumieć. Nie wiem czy trzeba wpisywać w jednej linijce dane czy pobieranie ma być zapisane w jednej linijce. :P
komentarz 17 października 2018 przez PanRik Gaduła (4,510 p.)

W poprzednim komenatrzu stworzyłem dwa postokąty, wymiary i współrzędne jednego było podane w jednej linijce, wymiary i współrzędne drugiego w drugiej linijce.

std::cin << a << b << c << d;

Kiedy mam taką komendę i w konsoli wpiszę:
 

1 2 3 4

To przypiszą się wartości:

a = 1
b = 2
c = 3
d = 4

Jakoś nie możemy się dogadać ...

+1 głos
odpowiedź 16 października 2018 przez chucksqll Stary wyjadacz (12,930 p.)

Pobierasz wartość wierzchołka x-ową i y-ową pierwszego prostokąta następnie długość boku równoległego do osi X, potem Y, druga linijka analogicznie tylko do drugiego prostokąta.

Coś w ten deseń


double wierzcholekX;
double wierzcholekY;
double dlugoscBokuX;
double dlugoscBokuY;
std::cin>>wierzcholekX>>...;

 

komentarz 16 października 2018 przez periedynek Obywatel (1,320 p.)
Komentarz taki sam, bo w tej samej minucie odpowiedzieliście:

 

hmmm.. no tak, ale w sumie dalej nie wiem jak to zrobić :/// co mam z tym zrobić. Myślałem o tej częsci wspólnej ale jakbym miał 4 punkty, a mam jakis x i y jednego boku, dlugosc i szerokosc. Co prawda jak dodam do x szerokość to będe miał drugi punkt, to samo z wykością. Ale co mam dalej z tym zrobić, to nie mam pojęcia.
komentarz 16 października 2018 przez chucksqll Stary wyjadacz (12,930 p.)
Jak masz dany lewy dolny wierzchołek to prawy dolny obliczysz

dodając do niego długość długość boku X.

analogicznie pomyśl nad całą resztą wierzchołków, weź sobie narysuj układ współrzędnych i pogłówkuj trochę.

Podobne pytania

–1 głos
2 odpowiedzi 361 wizyt
pytanie zadane 18 kwietnia 2018 w C i C++ przez gimnazjum Nowicjusz (120 p.)
0 głosów
1 odpowiedź 199 wizyt
pytanie zadane 2 listopada 2018 w Visual Basic przez KonDZIKs Bywalec (2,770 p.)
0 głosów
1 odpowiedź 642 wizyt
pytanie zadane 12 września 2019 w Matematyka, fizyka, logika przez adam11 Użytkownik (570 p.)

92,781 zapytań

141,707 odpowiedzi

320,588 komentarzy

62,114 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...