Kadma Temat założony przez niniejszego użytkownika |
Problem z zadaniem ze strukturą » 2015-12-30 16:01:01 Cześć, próbuję napisać program który był na egzaminie i nie bardzo rozumiem treść zadania. "Stwórz strukturę punkt w n-wymiarowej przestrzeni (rozmiar przestrzeni oraz tablicę współrzędnych). Napisz dwie funkcje składowe: funkcja wpisz umożliwiająca wprowadzenie współrzędnych, funkcja wypisz wypisująca współrzędne na ekranie. Napisz funkcję globalną najdalej, która jako argumenty przyjmuję tablicę punktów oraz jej długość i zwraca punkt leżący najdalej od początku układu współrzędnych. W funkcji main stwórz tablicę punktów o długości wprowadzonej z klawiatury, wypełnij ją za pomocą funkcji wpisz, znajdź punkt leżący najdalej od początku układu współrzędnych i wypisz go na ekranie." #include <iostream> using namespace std;
struct punkt { int n, ** tab; void wpisz(); void wypisz(); };
void Najdalej( punkt *, int );
int main() { punkt * p1; cin >> p1->n; p1 = new punkt[ p1->n ]; system( "PAUSE" ); return 0; }
void punkt::wpisz() { }
Nie bardzo rozumiem, o co chodzi z n-wymiarową przestrzenią. Mógłby ktoś wytłumaczyć jak się za to zabrać? |
|
ninjadam |
» 2015-12-30 16:39:46 Punkt w N-wymiarowej przestrzeni ma N współrzędnych które opisują jego położenie. Np. w 3-wym przestrzeni położenie pkt. opisują trzy współrzędne, niech będzie to x, y, z. Punkt P w 7-wym przestrzeni można opisać przez 7 współrzędnych, np. tak: P(x1, x2, x3, x4, x5, x6, x7). Nie musisz sobie tego wyobrażać ;) A co się tyczy odległości to jest ona zdefiniowana za pomocą tw. Pitagorasa. Pomiędzy dwoma punktami P i Q, w przestrzeni np. 5wym będzie to tak:
P(x1,x2,x3,x4,x5), Q(y1,y2,y3,y4,y5),
wtedy odległość d będzie zdefiniowana tak:
d = sqrt [(x1-y1)^2 + (x2-y2)^2 + (x3-y3)^2 + (x4-y4)^2 + (x5-y5)^2 ].
To tyle, jak miałbyś jeszcze jakieś pytania, pisz ;) Pozdrawiam |
|
Kadma Temat założony przez niniejszego użytkownika |
» 2016-01-01 15:05:02 Niby prawie wszystko działa, ale chyb trochę przekombinowałem. Tylko czy o to chodziło: #include <iostream> using namespace std;
struct punkt { int roz; int * tab_wsp; void wpisz(); void wypisz(); };
punkt * Najdalej( punkt *, int );
int main() { punkt * tab, * wsk; int n; cout << "Wprowadz dlugosc tablicy: "; cin >> n; tab = new punkt[ n ]; cout << "Wprowadz wymiar przestrzeni: "; cin >> tab[ 0 ].roz; for( int i = 0; i < n; i++ ) { tab[ i ].roz = tab->roz; tab[ i ].tab_wsp = new int[ tab[ 0 ].roz ]; tab[ i ].wpisz(); } for( int i = 0; i < n; i++ ) { tab[ i ].wypisz(); } wsk = Najdalej( tab, n ); cout << "Najdalszy punkt ma wspolrzedne: "; wsk[ 0 ].wypisz(); cout << endl; system( "PAUSE" ); return 0; }
void punkt::wpisz() { for( int i = 0; i < roz; i++ ) { cin >> tab_wsp[ i ]; } }
void punkt::wypisz() { for( int i = 0; i < roz; i++ ) { cout << tab_wsp[ i ] << '\t'; } cout << endl; }
punkt * Najdalej( punkt * tab, int n ) { double d = 0, najdalej = 0; punkt temp[ 1 ]; for( int i = 0; i < n; i++ ) { for( int j = 0; j < tab[ i ].roz; j++ ) { d = d + sqrt( tab[ i ].tab_wsp[ j ] * tab[ i ].tab_wsp[ j ] ); } if( i == 0 ) najdalej = d; if( d > najdalej ) temp[ 0 ] = tab[ i ]; } return temp; }
Nie do końca działa funkcja Najdalej. Problem jest ze zwracaniem. |
|
ninjadam |
» 2016-01-01 18:04:29 W ciele funkcji najdalej, w drugiej pętli, powinieneś najpierw zsumować wszystkie odległości a dopiero później tę sumę spierwiastkować, patrz wzór który Ci podałem wyżej. Czyli będzie coś takiego:
FOR { FOR d += pkt[k].wsp[l]^2
d = sqrt(d) ... } |
|
« 1 » |