Mamy dane współrzędne 4 punktów. Należy sprawdzić, czy są to współrzędne wierzchołków kwadratu o bok

0

Mamy dane współrzędne 4 punktów. Należy sprawdzić, czy są to współrzędne wierzchołków kwadratu o bokach równoległych do osi układu współrzędnych. Poprawny kwadrat jest niezdegenerowany, czyli taki, którego pole powierzchni jest większe od 0.

Wejście

Pierwsze cztery wiersze wejścia zawierają opis kolejnych punktów na płaszczyźnie. W i-tym wierszu znajdują się dwie liczby całkowite xi, yi (−1 000 ¬ xi, yi ¬ 1 000), oznaczające współrzędne i-tego punktu.

Wyjście

W pierwszym i jedynym wierszu wyjścia powinno znaleźć się jedno słowo TAK, jeśli są to współrzędne kwadratu o bokach równoległych do osi układu współrzędnych lub NIE w przeciwnym przypadku.

Przykład

Dla danych wejściowych:

0 0

2 0

2 2

0 2

poprawnym wynikiem jest:

TAK

czy mógłby mnie ktoś naprowadzić jak to zrobic ?

1

A jakbyś to zrobił na kartce? Wziąłbyś sobie punkty o tych samych współrzędnych X lub Y i sprawdził długości takich boków ;]
(0,0) i (0,2) maja ten sam X i długość |0-2| = 2
(2,2) i (2,0) maja ten sam X i długość |2-0| = 2
(0,0) i (2,0) maja ten sam Y i długość |0-2| = 2
(2,2) i (0,2) maja ten sam Y i długość |2-0| = 2
Jeśli nie możesz tak punktów sparować to znaczy że nie tworzą kwadratu o bokach równoległych do OX i OY.
Jeśli któraś długość jest inna to znaczy że to nie kwadrat.

0
#include<iostream>
#include<cmath>
#include<cstdio>
using namespace std;
int x1;
int x2;
int x3;
int x4;
int z1;
int z2;
int z3;
int z4;
int main ()
{
  cin>>x1>>z1;
  cin>>x2>>z2;
  cin>>x3>>z3;
  cin>>x4>>z4;
  if ((z1==z2)&&(x2==x3)&&(z2==x4)&&(x3==z4))  cout<<"TAK"<<endl;
  else
  cout<<"NIE"<<endl;
  cin.ignore ();
  getchar ();
  return 0;
} 

zaliczyło 60/100

znaczniki code - msm

1

Jak masz punkty podane jako
A B
C D
to ogarniasz to, zaś w układzie:
A C
B D
już nie.

1

@master2257 not even close. Musisz znaleźć które punkty do siebie pasują! Musisz tez sprawdzić dlugości boków!

0

Podrzucił by ktoś kawałek programu ? Nie wiem jak to zrobic :(

0

Normalnie musisz uwzględnić wszystkie 6-układów.

0

Moim zdaniem będą tylko 3 układy : AB - CD, AC - BD, oraz AD - BC.

1

Posortuj je względem Y, potem X i zawsze będą w układzie
A B
C D
potem już z górki

0

A co powiecie na

#-*- coding: utf-8 -*-


def sprawdz():
	#tablice na wspórzędne
	x = [0, 0, 0, 0]
	y = [0, 0, 0, 0]
	#wczytywanie danych
	for i in range(4):
		x[i], y[i] = input("podaj współrzędne dla punktu " + str(i + 1) + "\n").split()
	#ponieważ python wszystko wczytuje jako stringi, robie z nich inty
	x = [int(i) for i in x]
	y = [int(i) for i in y]
	#sprawdzamy czy są 4 różne punkty
	for i in range(3):
		for j in range(i + 1, 4):
			if x[i] == x[j] and y[i] == y[j]:
				print("NIE")
				return
	#Każdy kwadrat jest prostokątem, a prostokąt prostopadły do układu współrzędnych
	#ma 2 pary identycznych xów oraz ygreków, zakładając że żadna inna figura
	#tak nie będzie miała sortujemy i sprawdzamy
	x.sort()
	x.reverse()
	y.sort()
	y.reverse()
	print("po sortowaniu mamy", x, y)
	if x[0] != x[1] or x[2] != x[3] or x[1] == x[2]:
		print("NIE")
		return
	if y[0] != y[1] or y[2] != y[3] or y[1] == y[2]:
		print("NIE")
		return
	print("chyba mamy prostokąt")
	#zakładając że powyższe warunki spełnią tylko prostokąty
	if (x[2]) - x[1] != y[2] - y[1]:
		print("NIE")
		return
	print("TAK")
	return


sprawdz()

W pythonie coby koledze pytającemu nie było za łatwo
Trochę odmienne podejście do tematu, ale założenie chyba prawidłowe. Aczkolwiek słabo testowane, wiec być może jednak trzeba będzie wrócić do poprzedniego algorytmu

ps przydała by się jakaś kontrola czy mamy 4 różne punkty, bez powtórek.

0

Oto i wersja w CPP żeby nie było.

 
#include<iostream>
#include<algorithm>

using namespace std;


void sprawdz()
{
    double x[4];
    double y[4];
    for (int i=0;i<4;i++)
    {
        cout << "podaj współrzędne punktu " << i + 1 << endl;
        cin >> x[i] >> y[i];
    }
    for (int i = 0; i<3; i++)
        for (int j = i+1;j < 4; j++)
            if((x[i] == x[j]) && (y[i] == y[j]))
            {
                cout << "NIE, punkty się pokrywają" << endl;
                return;
            }
    sort(x, x + 4);
    sort(y, y + 4);
    if ((x[0] != x[1]) || (x[2] != x[3]) || (x[1] == x[2])  )
    {
        cout << "NIE, brak prostokąta równoległego itd" << endl;
        return;
    }
    if ((y[0] != y[1]) || (y[2] != y[3]) || (y[1] == y[2])  )
    {
        cout << "NIE, brak prostokąta równoległego itd" << endl;
        return;
    }
    if ((x[2] - x[1]) != (y[2] - y[1]))
    {
        cout << "NIE, mamy prostokąt ale nie kwadrat" << endl;
        return;
    }
    cout << "TAK, skoro kod dotarł aż tu to chyba jednak będzie kwadrat" << endl;
    return;
}

int main()
{
sprawdz();
return 0;
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1