Tablice dynamiczne w strukturze

Odpowiedz Nowy wątek
2015-01-04 15:20
0

Witam, jestem tu nowy, więc jeżeli coś jest nie tak w moim poście to od razu poprawiajcie :)
Pisałem program :

Stwórz strukturę punktu reprezentujący punkt w N
wymiarowej przestrzeni (rozmiar przestrzeni oraz
tablicę współrzędnych).

i myślałem, ze taki kod jest ok:

 struct wymiar
{
    short n;
    short *w = new short[n];
 
};

ale wyskakuje błąd po uruchomieniu programu
user image

prosze o pomoc, Jakie macie koncepcje? Czy można tak deklarować tablice?

Pozostało 580 znaków

2015-01-04 15:23
2

A ile wynosi n w tamtym miejscu? Nie wiesz? Ja też nie! Wynosi pewną losową wartość, a ty próbujesz alokować tyle pamięci.


Na PW przyjmuje tylko (ciekawe!) zlecenia. Masz problem? Pisz na forum, nie do mnie.

Pozostało 580 znaków

2015-01-04 15:28
0
Shalom napisał(a):

A ile wynosi n w tamtym miejscu? Nie wiesz? Ja też nie! Wynosi pewną losową wartość, a ty próbujesz alokować tyle pamięci.

Jezus ale jestem głupi :) nie pomyślałem o śmieciach :)
A jak to można inaczej zrobić by działało jak w zadaniu?
i Czy tablica lokuje się od razu, czy dopiero przy deklarowaniu zmiennej?

Pozostało 580 znaków

2015-01-04 15:29
0

Przyjrzyj się temu i stwórz implementację dopasowaną do własnych potrzeb.

Pozostało 580 znaków

2015-01-04 15:32
0

@spartanPAGE proponujesz mi szablon klasy, niestety mój ćwiczeniowiec usunie mi cały kod i każe pisać od nowa bez tego, bo nie mieliśmy tego jeszcze.

Pozostało 580 znaków

2015-01-04 15:36
0

@Shalom wystarczyło wpisać n = 0; :) Masakra, dzięki za pomoc.

Tak, teraz masz przydzielone miejsce na zero elementów; Czy o to chodziło? ... - spartanPAGE 2015-01-04 15:48

Pozostało 580 znaków

2015-01-04 15:36
2
Thamed napisał(a):

@spartanPAGE proponujesz mi szablon klasy, niestety mój ćwiczeniowiec usunie mi cały kod i każe pisać od nowa bez tego, bo nie mieliśmy tego jeszcze.

Więc go upraszczaj.

template<typename T, size_t N>
class Point{
public:
    Point(){}
    Point(initializer_list<double> l): _data(l){}
 
    const T& get(size_t dimension) const{
        return _data.at(dimension);
    }
 
    void set(size_t dimension, const T &value){
        _data.at(dimension) = value;
    }
private:
    array<T, N> _data;
};
class Point{
public:
    Point(){}
    Point(initializer_list<T> l): _data(l){}
 
    double get(size_t dimension) const{
        return _data.at(dimension);
    }
 
    void set(size_t dimension, double value){
        _data.at(dimension) = value;
    }
private:
    vector<double> _data;
};

Tak nawiasem mówiąc: To napisz jeszcze raz z szablonami, przy nim :P

edytowany 2x, ostatnio: spartanPAGE, 2015-01-04 15:37

Pozostało 580 znaków

2015-01-04 15:39
0

@spartanPAGE ale chciałbym zrozumieć połowę tego co tam napisałeś :)

Do przeczytania na google: klasy, sekcje, konstruktory; Do przeczytania w dokumentacji: std::vector, std::initializer_list - spartanPAGE 2015-01-04 15:47

Pozostało 580 znaków

2015-01-04 15:48
1

@Thamed nie no napisanie n=0 to głupi pomysł. Bo teraz masz tablicę na 0 elementów a chyba nie o to chodziło? ;]


Na PW przyjmuje tylko (ciekawe!) zlecenia. Masz problem? Pisz na forum, nie do mnie.

Pozostało 580 znaków

2015-01-04 15:51
2

@Thamed, nie martw się zrozumiesz, nie od razu Rzym zbudowano.
Jeżeli piszesz w C++11 to tak jak wyżej od @spartanPAGE
Jeżeli piszesz w "C++" to:

class Vector
  {
   size_t n;
   short *w;
   Vector(size_t n=0):n(n),w(new short[n]) {}
   ~Vector() { delete[] w; }
   Vector(const Vectror &v) { ... }
   Vector &operator=(const Vectror &v) { ... }
  };

Jeżeli zaś w "C z new" to:

struct Vector
  {
   size_t n;
   short *w;
  };
Vector init(size_t n,short value) { ... }
void clean(Vector *v) { ... }
short get(Vector *v,size_t pos) { ... }
void set(Vector *v,size_t pos,short value) { ... }

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, 2015-01-04 15:52
Pokaż pozostałe 4 komentarze
Ah, wszystko jasne ;] - spartanPAGE 2015-01-04 19:58
- Pan jest obrzydliwie pijany. - _13th_Dragon 2015-01-04 20:00
- A pani ma krzywe nogi. - _13th_Dragon 2015-01-04 20:00
- Co to ma do rzeczy? - _13th_Dragon 2015-01-04 20:01
- Nic, ale jutro będę trzeźwy. - _13th_Dragon 2015-01-04 20:01

Pozostało 580 znaków

2015-01-04 15:56
0
Shalom napisał(a):

@Thamed nie no napisanie n=0 to głupi pomysł. Bo teraz masz tablicę na 0 elementów a chyba nie o to chodziło? ;]

no Tak :)

 #include"source.cpp"
struct wymiar
{
    short n = 0;
    short *w = new short[n];
    void wpisz(short n, short*w)
    {
        cout << "Wpisz" << endl;
        for (int i = 0; i < n; i++)
        {
 
            cin >> *(w + i);
        }
    }
    void wypisz(short n, short *w)
    {
        cout << "Prosze" << "\n";
        for (int i = 0; i < n; i++)
        {
 
            cout <<"Współrzędna "<<(i+1)<<": "<< *(w + i) << "\n";
        }
    }
 
    void translacja(short n, short *w)
    {
        short *m = new short[n];
        cout << "Prosze podaj wektor, którym chcesz wykonać translacje" << "\n";
        for (int i = 0; i < n; i++)
        {
            cin>>*(m+i);
        }
        for (int i = 0; i < n; i++)
        {
            (*(w + i))+= (*(m + i));
        }
        for (int i = 0; i < n; i++)
        {
            cout << "Współrzędna " << (i + 1) << "po translacji: " << *(w + i) << "\n";
        }
    }
};
 
int main()
{
    setlocale(LC_CTYPE, ".1250");
    wymiar A;
    cin >> A.n;
    A.wpisz(A.n, A.w);
    cout << endl;
    A.wypisz(A.n, A.w);
    cout << endl;
    A.translacja(A.n, A.w);
    system("Pause");
    return 0;
}

działa jak należy :) może się deklaruje, ale nie zajmuje dużo miejca, więc można przeoczyć, a dalej deklaruje się tak jak powinna, przy inicjalizacji.

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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