Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Problem z zadaniem ze strukturą

Ostatnio zmodyfikowano 2016-01-01 18:04
Autor Wiadomość
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."


C/C++
#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ć?
P-142591
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
P-142593
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:

C/C++
#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 ]; // Zalokowanie pamięci na tablicę punktów
    cout << "Wprowadz wymiar przestrzeni: ";
    cin >> tab[ 0 ].roz; // Wymiar przestrzeni
   
    // Wpisanie wartosci
    for( int i = 0; i < n; i++ )
    {
        tab[ i ].roz = tab->roz;
        tab[ i ].tab_wsp = new int[ tab[ 0 ].roz ];
        tab[ i ].wpisz();
    }
   
    //Wypisanie wartosci
    for( int i = 0; i < n; i++ )
    {
        tab[ i ].wypisz();
    }
   
    //Funkcja najdalej
    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.
P-142656
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)
   ...
}
P-142663
« 1 »
  Strona 1 z 1