4 zmienne punkty

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źć ;)
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.

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.

1

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

0

Kolega mi podesłał kawałek kodu

 
#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 ?:)

0

Podejrzewam że chodzi o coś takiego:

#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;
  }
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".

#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;
} 
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 :)

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 ...

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?

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.

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 :)

 #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;
}

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:
#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.

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