Dwuwymiarowa dynamiczna tablica Editów

Odpowiedz Nowy wątek
2015-02-24 11:25
edan_
0

Witam. Mam problem z dwuwymiarową tablicą dynamiczną Editów. Tablica na formie tworzy się poprawnie. Kod:

        TEdit **TabEdit;

        int t = 150;
        int l = 80;
        int n = StrToInt(Edit1->Text);
        int m = StrToInt(Edit2->Text);
        TabEdit = new TEdit *[n];
        for(int i = 0; i < n; i++)
        {
                 for(int j = 0; j < m; j++)
                {
                        TabEdit[i] = new TEdit(this);
                        TabEdit[i]->Name = "T" + IntToStr(i) + IntToStr(j);
                        TabEdit[i]->Top = t;
                        TabEdit[i]->Left = l + j * 40;
                        TabEdit[i]->Width = 40;
                        TabEdit[i]->Text = "0";
                        TabEdit[i]->Parent = this;
                }
                t += 30;
                l = 80;
        }

Chcę w kolejnej funkcji wylosować wartości i umieścić w wygenerowanych Editach i tu wyskakuje mi błąd:

        int n = StrToInt(Edit1->Text);
        int m = StrToInt(Edit2->Text);
        for (int i = 0; i < n; i++)
                for (int j = 0; j < m; j++)
                TabEdit[i][j]->Text = IntToStr(rand()%100);

Pozdrawiam

Pozostało 580 znaków

2015-02-24 11:28
0

czym jest TabEdit w tej nowej funkcji

jak wywolujesz ta nowa funkcje

jaki blad?

Pozostało 580 znaków

2015-02-24 11:43
edan_
0

Tworzy mi się 2-wymiarowa tablica Editów na formie. Chcę by dane w niej zawarte tworzyły dwuwymiarową tablicę Text'ów z poszczególnych Editów (aby dostęp był przez 2 indeksy i oraz j). Wcześniej miałem 1-wymiarową i wszystko działało ale dostęp był przez jeden index i (choć na formie była wyświetlana w postaci 2-wymiarowej).

Pozostało 580 znaków

2015-02-24 11:45
0
edan_ napisał(a):

Witam. Mam problem z dwuwymiarową tablicą dynamiczną Editów. Tablica na formie tworzy się poprawnie. Kod:


TEdit **TabEdit;
   [...]

Masz jednowymiarową tablicę wskaźników

> Chcę w kolejnej funkcji wylosować wartości i umieścić w wygenerowanych Editach i tu wyskakuje mi błąd:
> 
    int n = StrToInt(Edit1->Text);
    int m = StrToInt(Edit2->Text);
    for (int i = 0; i < n; i++)
            for (int j = 0; j < m; j++)
            TabEdit[i][j]->Text = IntToStr(rand()%100);


Nic dziwnego - masz źle napisany kod.

Ogólnie na prace domowe mam stawki zaporowe. Czasem coś o programowaniu znajdzie się na mojej stronie
edytowany 2x, ostatnio: kaczus, 2015-02-24 12:15
Wydaje mi się, że piszesz nieprawdę, ale przez źle sformatowany post nie jestem w stanie rozróżnić cytatu od właściwej treści. - twonek 2015-02-24 12:07
Mój błąd, poprawiłem formatowanie - kaczus 2015-02-24 12:16
Masz jednowymiarową tablicę wskaźników - a jak Twoim zdaniem wygląda dwuwymiarowa tablica dynamiczna? - twonek 2015-02-24 12:20
Może wyglądać tak samo, należy jednak wiedzieć co się chce w niej przechowywać, jeśli wskaźniki (dalej mamy TabEdit[i] = new TEdit(this);), to w tym wypadku mamy jednowymiarową tablicę wskaźników. - kaczus 2015-02-24 12:28

Pozostało 580 znaków

2015-02-24 12:04
0

Wyciek pamięci (i możliwe źródło błędu, którego nie podałeś):

for(int i = 0; i < n; i++)
{
    for(int j = 0; j < m; j++)
    {
        TabEdit[i] = new TEdit(this);

m razy wywołujesz TabEdit[i] = new TEdit(this);.
Co to jest m? Po co ta wewnętrzna pętla?

edytowany 2x, ostatnio: twonek, 2015-02-24 12:23

Pozostało 580 znaków

2015-02-24 12:46
edan_
0

Czyli, jak rozumiem, mam wygenerować 2-wymiarową tablicę wskaźników? Jak to zrobić?

Pozostało 580 znaków

2015-02-24 12:49
0

pokaz CALY kod

Pozostało 580 znaków

2015-02-24 12:58
0
edan_ napisał(a):

Czyli, jak rozumiem, mam wygenerować 2-wymiarową tablicę wskaźników? Jak to zrobić?

Trochę wróżąc to pewnie coś w ten deseń:

for(int i = 0; i < n; i++)
{
    TabEdit[i] = new TEdit[m];
    for(int j = 0; j < m; j++)
    {
        //TabEdit[i] = new TEdit(this);     <-- wyciąć
        TabEdit[i][j]->Name = "T" + IntToStr(i) + IntToStr(j);
        TabEdit[i][j]->Top = t;
        ...

Pozostało 580 znaków

2015-02-24 12:59
0
edan_ napisał(a):

Czyli, jak rozumiem, mam wygenerować 2-wymiarową tablicę wskaźników? Jak to zrobić?

Tak

Zrobić to można na kilka sposobów.
może to być:

TEdit ***TabEdit;

może być:

vector<vector<TEdit *> > TabEdit;

kwestia jak będziemy dalej chcieli postępować, jeśli tak jak w Twoim wypadku, to pierwszy sposób z dodatkowymi poprawkami

        TabEdit = new TEdit **[n];
        for(int i = 0; i < n; i++)
        {

                TabEdit[i] = new TEdit *[m];
                for(int j = 0; j < m; j++)
                {
                        TabEdit[i][j] = new TEdit(this);
                        TabEdit[i][j]->Name = "T" + IntToStr(i) + IntToStr(j);
                        [..]
                }
                [..]
        }

Oczywiście potem ładnie zwolnic pamięć należy.


Ogólnie na prace domowe mam stawki zaporowe. Czasem coś o programowaniu znajdzie się na mojej stronie
edytowany 1x, ostatnio: kaczus, 2015-02-24 13:00

Pozostało 580 znaków

2015-02-24 13:08
1
kaczus napisał(a):
edan_ napisał(a):

Czyli, jak rozumiem, mam wygenerować 2-wymiarową tablicę wskaźników? Jak to zrobić?

Tak

Zrobić to można na kilka sposobów.
może to być:

TEdit ***TabEdit;

Nie. Potrzebna jest dwuwymiarowa tablica elementów, nie wskaźników.

jeśli dodaje elementy jako new TEdit(this);, to elementem jest wskaźnik. Inna sprawa, że można to zrobić na tablicy jednowymiarowej. Zostaje zawsze kwestia co chcemy uzyskać i jakim kosztem. Twój przykład też jest dobry z dokładnością do operatora wyłuskania. - kaczus 2015-02-24 13:18

Pozostało 580 znaków

2015-02-24 13:20
edan_
0

Dziękuję wam za pomoc. Kaczus, twój kod działa dokładnie tak, jak chciałem. Dzięki.

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