4 zmienne punkty

4 zmienne punkty
DB
  • Rejestracja:prawie 10 lat
  • Ostatnio:ponad 9 lat
  • Postów:12
0

Witam. Potrzebuję napisać funkcję, której zadaniem bd :

  1. Po wprowadzeniu 4 punktów na układzie współrzędnych wyznaczenie - która współrzędna to A,B,C,D
    np. 1- (1,4), 2- (2,6), 3- (5,4), 4- (4,6) - i teraz program sam musi ustalic która współrzędna to, który punkt :)
    Nie liczę na gotowy KOD ;) Za nabijanie postów też dziękuję ^^ Oczekuję pomocy jak się za to zabrać, od której strony to ugryźć ;)
szweszwe
Te punkty to są wprowadzane dowolnie czy może są to wierzchołki jakiejś figury?
_13th_Dragon
  • Rejestracja:prawie 20 lat
  • Ostatnio:18 dni
3

Ten który nazwiesz A ten i będzie A, to samo z pozostałymi literami.
Nie podana żadna reguła - jak chcesz tak i nazywaj.
Jak nie chcesz nabijania postów, to przemyśl pytanie.


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
DB
  • Rejestracja:prawie 10 lat
  • Ostatnio:ponad 9 lat
  • Postów:12
0

Przeczytaj jeszcze raz :) Nie może być zdefioniowane A. Czyli przy wprowadzaniu danych nie określam czy to jest A czy B czy C czy D. Program sam ma wiedzieć, która współrzędna to który punkt.

_13th_Dragon
1 to A, 2 to B, 3 to C, 4 to D - może wyjaśnij czemu to ci się nie podoba.
szweszwe
  • Rejestracja:ponad 11 lat
  • Ostatnio:4 dni
  • Lokalizacja:Kraków
  • Postów:1694
1

Przeczytaj jeszcze raz pytanie @_13th_Dragon i moje z komentarza. Na jakiej podstawie program ma wiedzieć który punkt jest który?

DB
Gdybym wiedział na jakiej podstawie ma wiedzieć, to nie pisał bym zapytania tylko napisał kod ;)
DB
  • Rejestracja:prawie 10 lat
  • Ostatnio:ponad 9 lat
  • Postów:12
0

Kolega mi podesłał kawałek kodu

Kopiuj
 
#include <iostream>


int main(int argc, char** argv) {
	
	// wypisywanie punktów przed sortowaniem
	cout<<"Punkty przed sortowaniem"<<endl;
	
	cout<<"A = ("<<ax<<", "<<ay<<")"<<endl;
	cout<<"B = ("<<bx<<", "<<by<<")"<<endl;
	cout<<"C = ("<<cx<<", "<<cy<<")"<<endl;
	cout<<"D = ("<<dx<<", "<<dy<<")"<<endl;
	
	double p1x,p1y,p2x,p2y,p3x,p3y,p4x,p4y; // definiuje dodatkowe zmienne (pomocnicze)
	
	double i1 = Wyznacznik(ax,ay,bx,by,cx,cy); // liczenie wyznaczników
	double i2 = Wyznacznik(ax,ay,bx,by,dx,dy);
	// =======================================
	double i3 = Wyznacznik(ax,ay,cx,cy,bx,by);
	double i4 = Wyznacznik(ax,ay,cx,cy,dx,dy);
	// =======================================
    double i5 = Wyznacznik(ax,ay,dx,dy,bx,by);
	double i6 = Wyznacznik(ax,ay,dx,dy,cx,cy);
	
    if ((i1 > 0 && i2 < 0) || (i1 < 0 && i2 > 0))
    {
    	p1x = ax;
		p1y = ay; 
		p2x = cx;
		p2y = cy;
		p3x = bx;
		p3y = by;
		p4x = dx;
		p4y = dy;
		
		ax = p1x;
		ay = p1y; 
		bx = p2x;
		by = p2y;
		cx = p3x;
		cy = p3y;
		dx = p4x;
		dy = p4y;
	}
	else
	if ((i3 > 0 && i4 < 0) || (i3 < 0 && i4 > 0))
	{
		p1x = ax;
		p1y = ay;
		p2x = bx;
		p2y = by;
		p3x = cx;
		p3y = cy;
		p4x = dx;
		p4y = dy;
		
		ax = p1x;
		ay = p1y; 
		bx = p2x;
		by = p2y;
		cx = p3x;
		cy = p3y;
		dx = p4x;
		dy = p4y;
	}
	else
	if ((i5 > 0 && i6 < 0) || (i5 < 0 && i6 > 0))
	{
		p1x = ax;
		p1y = ay;
		p2x = bx;
		p2y = by;
		p3x = dx;
		p3y = dy;
		p4x = cx;
		p4y = cy;
		
		ax = p1x;
		ay = p1y; 
		bx = p2x;
		by = p2y;
		cx = p3x;
		cy = p3y;
		dx = p4x;
		dy = p4y;
	}
			
	cout<<endl;
	cout<<"Punkty po posortowaniu"<<endl;
	cout<<"A = ("<<ax<<", "<<ay<<")"<<endl;
	cout<<"B = ("<<bx<<", "<<by<<")"<<endl;
	cout<<"C = ("<<cx<<", "<<cy<<")"<<endl;
	cout<<"D = ("<<dx<<", "<<dy<<")"<<endl;
	
	
	return 0;
}

Co myślicie zda egzamin ?:)

edytowany 2x, ostatnio: DoktorBLN
_13th_Dragon
Podobno was jest bardzo mało, ale jesteście tak sprytnie rozstawieni że spotyka się was na każdym kroku ...
bogdans
Nikt Ci nie powie czy to jest dobrze, bo nikt nie rozumie na czym polega problem.
Craith
To jest chyba pierwszy wątek od kiedy tu jestem, którego nie rozumieją ani studenci ani programiści :D
spartanPAGE
"jaka jest różnica między kaczką"
_13th_Dragon
  • Rejestracja:prawie 20 lat
  • Ostatnio:18 dni
0

Podejrzewam że chodzi o coś takiego:

Kopiuj
#include <iostream>
#include <algorithm>
using namespace std;

struct Point
  {
   double y,x;
   Point():y(0),x(0) {}
   Point(double y,double x):y(y),x(x) {}
   friend ostream &operator<<(ostream &s,const Point &p) { return s<<'('<<y<<','<<x<<')'; }
   friend istream &operator>>(istream &s,Point &p) { return s>>y>>x; }
   Point operator-(const Point &p)const { return Point(y-p.y,x-p.x); }
   double operator*(const Point &p)const { return x*p.y-y*p.x; }
  };

int main()
  {
   Point a,b,c,d;
   cin>>a>>b>>c>>d;
   if(((a-c)*(b-c)>0)!=((b-d)*(c-d)>0)) swap(c,d);
   cout<<"A:"<<a<<endl<<"B:"<<b<<endl<<"C:"<<c<<endl<<"D:"<<d<<endl;
   return 0;
  }

Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
gswidwa
  • Rejestracja:ponad 13 lat
  • Ostatnio:około 5 lat
  • Postów:839
0
  1. Po wprowadzeniu 4 punktów na układzie współrzędnych wyznaczenie - która współrzędna to A,B,C,D

@_13th_Dragon przecież takie wypociny spełniają jego oczekiwania według tego co "wiemy".

Kopiuj
#include <iostream>
using namespace std;

struct POINT{
    int x;
    int y;
}
int main()
{
    POINT p[4];
    for(int n=0; n<4; ++n)
     cin >> p[n].x >> p[n].y;
    cout << "A: (" << p[0].x <<","<< p[0].y <<")" << endl; 
    cout << "B: (" << p[1].x <<","<< p[1].y <<")" << endl;
    cout << "C: (" << p[2].x <<","<< p[2].y <<")" << endl;
    cout << "D: (" << p[3].x <<","<< p[3].y <<")" << endl;
} 
_13th_Dragon
Jego - tak, ale jak widać jego kolega nieco więcej zrozumiał z treści zadania tylko że jest kiepski z matmy i programowania.
DB
  • Rejestracja:prawie 10 lat
  • Ostatnio:ponad 9 lat
  • Postów:12
0

Przyznam szczerzę, że fakt wybitny z matematyki nie jestem.
Po przeanalizowaniu jeszcze raz tego, co mi powiedział profesor, postaram się wytłumaczyć o co chodzi.
Gdy w pliku zapiszę 4 punkty z układu współrzędnego, bez określenia który punkt to A,B,C,D. Program ma ustawić wszystkie punkty tak, aby współrzędna x, która jest najbliżej środka układu była uznana za A, z drugiej współrzędnej x został rozpoznany w którym miejscu ma być itd. Nastepnie gdy x zostaną rozpoznane w którym miejscu są, przy użyciu "y" został rozpoznany czy dany punkt leży prawidłowo i czy np A nie trzeba zamienić z B itd.
Profesor na zajęciach ostro leci z materiałem, więc wiele rzeczy opuszcza, a następnie sam muszę dochodzić o co mu dokładnie chodziło ;)
Sorki za nie ścisłości :)

DB
Domyślam się, że dla was jest to banalnie proste :)
_13th_Dragon
  • Rejestracja:prawie 20 lat
  • Ostatnio:18 dni
0
DoktorBLN napisał(a):

... aby współrzędna x, która jest najbliżej środka układu była uznana za A, z drugiej współrzędnej x został rozpoznany w którym miejscu ma być itd. Nastepnie gdy x zostaną rozpoznane w którym miejscu są, przy użyciu "y" został rozpoznany czy dany punkt leży prawidłowo i czy np A nie trzeba zamienić z B itd. ...
W którym języku to napisałeś? Sądząc po tym twoim wątku to tłumaczenie samego if'a przez rok już będzie dla ciebie:

DoktorBLN napisał(a):

... ostro leci z materiałem ...


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
gswidwa
  • Rejestracja:ponad 13 lat
  • Ostatnio:około 5 lat
  • Postów:839
0

Chciałbym pomóc, ale dalej nie rozumiem na jakiej podstawie mam określać po Y które punkty gdzie mają leżeć. Punkty należą to jakiejś funkcji liniowej?

_13th_Dragon
  • Rejestracja:prawie 20 lat
  • Ostatnio:18 dni
0

Z kodu kolegi: http://4programmers.net/Forum/1222473 wynika że w przypadku połączenia linią w wynikowej kolejności ABCDA linie mają się nie krzyżować. Tu http://4programmers.net/Forum/1222651 masz sensowny kod robiący to samo.


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
gswidwa
Boże, to wystarczyło zadać pytanie: "jak posortować 4 współrzędne aby tworzyły czworokąt?"
_13th_Dragon
OMG, jeszcze jeden mistrz precyzyjnych wypowiedzi. Kto mi zabroni podania współrzędnych czworokąta jako: (Left,Top),(Right,Top),(Left,Bottom),(Right,Bottom) ?
gswidwa
Eh, zapomniałem dodać i nie przecinały się ;P Jestem mistrzem udzielania precyzyjnych wypowiedzi ale na raty ;P
DB
  • Rejestracja:prawie 10 lat
  • Ostatnio:ponad 9 lat
  • Postów:12
0

Pytanie Brzmi. Jak teraz wyciągnać moje 4 punkty z tablicy w funkcji wczytajDane do main, bym mógł policzyć długości odcinków i po sortować punkty rosnąco według "y", a następnie porównam punkt A z B, jeśli w A bd "x" większy, niż w B to nastąpi zamiana- W taki o to sposób chce dokonać mojego sortowania. :) Ale jak na razie to męczę się z pierwszą częśćią mojego pytania :)

Kopiuj
 #include <iostream>
#include <fstream>
#include <math.h>
#include <algorithm>
#include <functional>
#define LICZBA_PUNKTOW 5

using namespace std;
fstream zapis("figura.txt");			//			OTWIERAM PLIK DO ZAPISU  TU USTAWIAM GDZIE MA SIE ZAPISAC! Domyslnie folder gdzie znajduje sie program

class Punkt
{
	public:
		double x;
		double y;
	};	
	
int wczytajDane() {
  
  string linia;

    int nr_linii=1;

    float a,b,c,d;

    fstream plik;
    plik.open("Dane.txt", ios::in);
	
	if(!plik.good()) {
    	cerr << "Nie mozna otworzyc pliku!";
    	return -1;
   
    } while (getline(plik, linia) && nr_linii < LICZBA_PUNKTOW*2) // Dla kazdej linii przypada 0 i 1 => a. Każda linia to b
    {
    	
    	Punkt punkty[LICZBA_PUNKTOW];
				for(int i = 1; i < LICZBA_PUNKTOW; i++){
					plik >> punkty[i].x;
					plik >> punkty[i].y;
						 cout << "punkt " << i << ": x=" <<punkty[i].x << ", y=" << punkty[i].y << endl; //Drukuje Punkt z okresleniem (x,y)
					 	zapis << "punkt " << i << ": x=" <<punkty[i].x << ", y=" << punkty[i].y << endl; //Drukuje Punkt z okresleniem (x,y)
			
				}
				
				
	}
}
//double *Punkt = new double[8];
double A[2],B[2],C[2],D[2]; // Nazwy punktow

int main(int argc, char** argv) {
	wczytajDane();
 
		//A[0] = Punkt[0];
		//A[1] = Punkt[1];
		
	//
	//	B[2] = Punkt[2];
		
		
		cout << "A" << A[0] << endl;


	return 0;
}

_13th_Dragon
  • Rejestracja:prawie 20 lat
  • Ostatnio:18 dni
0
  1. Zapoznaj się z pojęciem formatowania kodu: http://4programmers.net/Forum/998482
  2. Zlikwiduj smrodek przy inkrementacji: http://4programmers.net/Forum/1101404
  3. Pozbądź się zmiennych globalnych
  4. Użyj w reszcie tą strukturę Punkt
  5. Przeczytaj byle kurs rozdział funkcje, może zrozumiesz że int nie jest obowiązkową częścią definicji funkcji.
  6. Tylko tyle potrzebujesz:
Kopiuj
#include <fstream>
#include <iostream>
#include <algorithm>
using namespace std;
 
struct Point
  {
   double y,x;
   Point():y(0),x(0) {}
   Point(double y,double x):y(y),x(x) {}
   friend ostream &operator<<(ostream &s,const Point &p) { return s<<'('<<P.y<<','<<P.x<<')'; }
   friend istream &operator>>(istream &s,Point &p) { return s>>P.y>>P.x; }
   Point operator-(const Point &p)const { return Point(y-p.y,x-p.x); }
   double operator*(const Point &p)const { return x*p.y-y*p.x; }
  };
 
int main()
  {
   Point a,b,c,d;
   ifstream fin("Dane.txt");
   if(!fin) cout<<"Brak pliku"<<endl;
   else if(!(fin>>a>>b>>c>>d)) cout<<"Niepoprawne dane w pliku"<<endl;
   else
     {
      if(((a-c)*(b-c)>0)!=((b-d)*(c-d)>0)) swap(c,d);
      ofstream fout("figura.txt");
      fout<<"A:"<<a<<endl<<"B:"<<b<<endl<<"C:"<<c<<endl<<"D:"<<d<<endl;
     }
   return 0;
  }

uczysz się C++ zaś nie potrafisz skorzystać ze struktury zaś klasy cię przerażają? Niewiele w ten sposób się nauczysz.


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
edytowany 1x, ostatnio: _13th_Dragon
DB
Napisałem tak aby zrozumieć kod, a nie bezmyślnie skopiować Twój :) - Chyba nie o to w programowaniu chodzi :) Nie rozumiem do końca twojego kodu, zostały mi dwa to piszę tak abym umiał go wytłumaczyć Profesorowi ;) Jak sam napisałeś uczę się C++ i nie ja Sb wymyśliłem takie zadanie, tylko Profesor. Poświęcam każdą wolną chwilę na C.
_13th_Dragon
Jeżeli chcesz się nauczyć to na forum pytaj tylko o linki do dokumentacji - nic więcej.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.