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

C# - klasa prostokąt i 4 pola określające jej rogi

VPS Starter Arubacloud
0 głosów
2,052 wizyt
pytanie zadane 24 stycznia 2018 w C# przez Łukasz Putowski Nowicjusz (120 p.)

Cześć. Przerabiam sobie C# z książką Marcina Lisa, wydanie III, i mam pewną wątpliwość przy jednym z zadań do zrobienia. Za zadanie mam napisać przykładową klasę prostokąt zawierającą:
- 4 pola przechowujące współrzędne rogów prostokąta
- metodę zwracającą współrzędne tych rogów
- metodę wyświetlającą wartości współrzędnych
i napisać main sprawdzający czy to działa
Zrobiłem to w ten sposób:
klasa: https://pastebin.com/pztTiDnh
main: https://pastebin.com/c4PmnUAs

Wydawało mi się, że jest ok. Jednak kolejne zadania są o tym, żeby klasa prostokąt zawierała tylko współrzędne lewego górnego i prawego dolnego rogu oraz metodę sprawdzającą czy współrzędne faktycznie definiują prostokąt. Wydaje mi się, że klasa tak jak ją napisałem zawsze będzie prostokątem. 
Nie za bardzo wiem, jak zrobić to zadanie, żeby mając tylko 4 pola w klasie zdefiniować 4 rogi, które niekoniecznie będą dawać prostokąt. Jedyne co przychodzi mi do głowy to użyć float zamiast int i to co z lewej przecinka traktować jako współrzędne jednej osi, a to co z prawej - drugiej osi. Nad metodą sprawdzającą czy współrzędne określają prostokąt jeszcze się nie zastanawiałem.

Co myślicie? Mam nadzieję, że w miarę jasno wyjaśniłem z czym mam problem. Dopiero zaczynam, dlatego proszę o wyrozumiałość 

2 odpowiedzi

0 głosów
odpowiedź 24 stycznia 2018 przez piotrsz109 Stary wyjadacz (13,730 p.)

Na początku powinieneś przechowywać współrzędne wszystkich 4 rogów. Aby sprawdzić czy to prostokąc sprawdź czy oba boki sąsiadujące ze sobą znajdują się w lini prostej.

Porównywaj kolejno x i y i w ten sposób sprawdzisz czy jest to prostokąt.

komentarz 26 stycznia 2018 przez Łukasz Putowski Nowicjusz (120 p.)

Chyba źle sformułowałem swój problem. Otóż mój problem polega na tym:

Jak w klasie, która ma zawierać 4 pola (tak wynika z treści zadania) zdefiniować współrzędne 4 rogów (każda współrzędna to 2 cyfry/liczby, czyli będzie potrzeba 8 pól w zmiennej ?) /być może źle rozumiem definicję pola w klasie i stąd wynika błąd? Jedno pole = jedna zmienna , tak?

Tak jak pisałem wyżej, pomyślałem o zmiennej float. Wtedy poniekąd będę miał w jednej zmiennej dwie cyfry/liczby. Jednak nie wiem czy mój pomysł jest poprawny. 

Nad sposobem sprawdzenia czy wyznaczone punkty definiują na płaszczyźnie prostokąt nie myślę jeszcze, bo w moim kodzie to albo będzie prostokąt (lub kwadrat, który też nim jest) albo wszystkie punkty będą na siebie nachodziły. 

komentarz 26 stycznia 2018 przez piotrsz109 Stary wyjadacz (13,730 p.)
Stwórz klasę punkt i w niej przechowuj współrzędne.
komentarz 8 sierpnia 2021 przez Wiciorny Ekspert (269,120 p.)

@piotrsz109, każdy  kwadrat jest prostokątem :D , więc to też bym uwzględnił 

0 głosów
odpowiedź 8 sierpnia 2021 przez Ukie Nowicjusz (140 p.)

Spotkałem się z podobnym problemem i trafiłem na to forum. Niestety nic tu nie znalazłem, ale udało mi się rozwiązać ten problem i to z nawiązką, gdyż sprawdzenie zawsze wskazuje na TRUE. Pewnie znajdzie się jeszcze kilka osób, które będą miały ten sam problem, dlatego umieszczam swoje rozwiązanie jako podpowiedź. Mój kod rysuje tylko i wyłącznie dowolne prostokąty. Poniżej podrzucam część stałą klasy Punkt :

int x1 = 1, x2 = 6, y1 = 3, y2 = 4;  // stała deklaracja punktów
bool test;                           // deklaracja zmiennej sprawdzającej
int[][] Rogi = new int[4][];         // deklaracja tablicy współrzędnych

A tu pod spodem moją metodę SprawdzenieProstokata:

void SprawdzenieProstokata()
            {
                
                Punkt punkt1 = new Punkt();                           // odwołanie do obiektu
                                                                      // przypisanie do tablicy wartości punktów
                Rogi[0] = new int[2] { punkt1.x1, punkt1.y2 }; 
                Rogi[1] = new int[2] { punkt1.x1, punkt1.y1 };
                Rogi[2] = new int[2] { punkt1.x2, punkt1.y1 };
                Rogi[3] = new int[2] { punkt1.x2, punkt1.y2 };

                for (int i = 0; i < Rogi.Length; i++)                    // stworzenie odczytu tablicy pod warunek sprawdzający
                {
                    for (int j = 0; j < Rogi[i].Length; j++)
                    {
                        //Console.Write("{0} ", Rogi[i][j]);
                        if (Rogi[0][0] == Rogi[1][0] && Rogi[2][0] == Rogi[3][0] && Rogi[0][1] == Rogi[3][1] && Rogi[1][1] == Rogi[2][1])
                        {
                            test = true;
                        }
                        else
                            test = false;
                    }
                    //Console.WriteLine();
                }

                Console.WriteLine(test);                                  // zwrot testu (w tym przypadku zawsze będzie TRUE)
            }

 

komentarz 8 sierpnia 2021 przez Ukie Nowicjusz (140 p.)

Zapomniałem dodać, że w metodzie Main należy wywołać metodę SprawdzenieProstokata. Takie przypomnienie dla zapominalskich smiley

1
komentarz 8 sierpnia 2021 przez Oscar Nałogowiec (29,290 p.)
Jeśli opisujesz prostokąt jako 4 liczby (2 punkty po przekątnej) to przyjmujesz dodatkowe założenie, że boki prostokąta są równoległe do osi układu współrzędnych. Ogólnie potrzeba by 5 liczb. I tak wtedy zawsze byłby to prostokąt (bo w sumie dajemy procedurę narysowania prostokąta z parametrami). Więc sprawdzenie czy jest to prostokąt nie ma sensu - nic innego nie wyjdzie. Najwyżej można sprawdzić, czy któryś rozmiar to nie 0 (albo ujemny). Sprawdzenie miało by sens gdy by podanowo więcej danych.

3 punkty (6 liczb) umożliwiają zdefiniowanie dowolnego równoległoboku (bardziej ogólny obiekt) i wtedy można sprawdzić czy dany równoległobok ma kąty proste i jest prostokątem.

Podobne pytania

0 głosów
1 odpowiedź 270 wizyt
pytanie zadane 21 maja 2015 w JavaScript przez Apsik Użytkownik (990 p.)
0 głosów
0 odpowiedzi 219 wizyt
pytanie zadane 8 grudnia 2018 w C# przez CKrateczka Nowicjusz (140 p.)
0 głosów
1 odpowiedź 711 wizyt
pytanie zadane 20 października 2016 w C# przez Paweł Nąckiewicz Nałogowiec (48,990 p.)

92,453 zapytań

141,262 odpowiedzi

319,088 komentarzy

61,854 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

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!

...