4 zmienne punkty

4 zmienne punkty
DB
  • Rejestracja:prawie 10 lat
  • Ostatnio:około 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:ponad 19 lat
  • Ostatnio:3 miesiące
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:około 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:około 7 godzin
  • 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:około 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:ponad 19 lat
  • Ostatnio:3 miesiące
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:około 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:ponad 19 lat
  • Ostatnio:3 miesiące
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:ponad 19 lat
  • Ostatnio:3 miesiące
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:około 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:ponad 19 lat
  • Ostatnio:3 miesiące
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.
Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)