Skocz do zawartości

[C++] Tablice wielowymiarowe


kitapack

Polecane posty

Jak zrobić cosik takiego:
w trakcie programu dowiaduję się ile wynosi zmienna k (np. k=2) oraz ile wynosi zmienna p (np. p=5).
Teraz musze utworzyc tablice p-wymiarową, z czego każdy wymiar ma k-elementów, a więc:
tablica[2][2][2][2][2]=x;

gdzie x będzie wynosić 0 lub 1.

Jak takie coś zrobić? (deklarowanie tablicy bardzo dużej odpada, ( czyli np int **************tablica gdzie potem wykorzystuje jedynie jej czastke)).
Link do komentarza
Udostępnij na innych stronach

[quote] Jak takie coś zrobić? (deklarowanie tablicy bardzo dużej odpada, ( czyli np int **************tablica gdzie potem wykorzystuje jedynie jej czastke)). [/quote]Skoro będziesz używał tylko tej jednej komórki to po co w ogóle ci tablica?

Pozdrawiam,

vo7 (;

Link do komentarza
Udostępnij na innych stronach

Bo potrzebuje zrobic tablice mozliwosci (to znaczy np dla tablica[1][0][1][2][1]=1; tablica[1][0][1][2][2]=0 itd... a potem chce przekopiowac wszystkie elementy =1 do nowej mniejszej tablicy i to bedzie tzw. tablica mozliwych wystapien). Nie bede sie rozpisywal co ten program dokladnie robi, ale generalnie wczesniej mam powiedzmy 100 tablic tab2[x1][x2][x3]=1 gdzie kolejne x1, x2 oraz x3 przybieraja wartosci p1... do p5 i po prostu musze zrobic tablice wszystkich kombinacji (dla 5 zmiennych i 3 stanow dla kazdej zmiennej bedzie to wlasnie tablica tablica[3][3][3][3][3]) i przypisac 1 jesli taki stan jest mozliwy, a 0 gdy nie jest mozliwy.
Link do komentarza
Udostępnij na innych stronach

Wydaje mi się, że efekt jaki chcesz uzyskać jest łatwy do osiągnięcia bez używania tablic (a przynajmniej w taki sposób jaki proponujesz). Fajnie by było gdybyś opisał co dokładniej robi dany program - może jest jakieś inne, lepsze rozwiązanie Twojego problemu.

Pozdrawiam,

vo7 (;

Link do komentarza
Udostępnij na innych stronach

A więc po kolei:

program wylicza ileś tam powiedzmy a=30 funkcji, przy czym każda funkcja składa się z:
funkcja[zm_1][zm_2][zm_3][wartosc_zm_1][wartosc_zm_2][wartosc_zm_3]=b;
zm_1 to numer zmiennej ze zbioru p=5, podobnie zm_2 oraz zm_3. Czyli mając p=5 zmiennych zm_1 moze przybierać wartości od 1 do 5, analogicznie zm_2 oraz zm_3. Dalej mamy wartość pierwszej zmiennej, potem drugiej i na końcu trzeciej, gdzie wartość zmiennej może się równać 1, 2 lub 3. Wynik końcowy jest zawsze =1 (nie ma każdej kombinacji, gdyż wymieniono jedynie te które =1).
A więc kilka przykładów:
a=30 //liczba funkcji (tutaj tylko 4)
p=5; //liczba zmiennych

funkcja_1[1][3][5][1][2][1]=1;
funkcja_2[4][2][5][2][1][3]=1;
funkcja_3[1][2][4][1][1][1]=1;
funkcja_4[3][5][2][3][3][2]=1;
... itd aż do funkcji nr 29

(do tego momentu mam program napisany)

A teraz chcę zrobić tablicę możliwości, to znaczy jeśli z powyższego przypadku (zakładając że mam tylko te 4 wypisane funkcje) zrobię kombinację to:
Robię całą tablicę wszystkich możliwości (każdą kombinację, bo zmienna_1 może być równa 1, 2 lub 3 i analogicznie aż do zmienna_5). I teraz jeżeli sprawdziłem wszystkie funkcje a któryś parametr jest nieustalony to go odrzucamy z tablicy. Czyli:
tablica[zmienna_1][zmienna_2][zmienna_3][zmienna_4][zmienna_5]=1;
tablica[1][-][2][-][1]=0 //to wypisalem przyklad dla pierwszej funkcji bo zm_1=1, zm_3=2 i zm_5=1
.
.
.
I teraz w ten sposób uzupełniam każdą z kolejnych elementów tablicy i gdy wszystkie są uzupełnione to wtedy taki element =1.

Mam nadzieje że choć w miare zrozumiale się wyraziłem smile.gif

Link do komentarza
Udostępnij na innych stronach

tak... nie no o tablicach dynamicznych oczywiście czytałem, i jeśli wymiar tablicy jest stały (czyli że np ma być tablica[a][b]) a więc wymiar=2 to nie ma problemów. Gorzej jeśli się zmienia (raz mam tablica[a][b] a innym razem tablica[a][b][c][d][e]). Oczywiście szukałem już wcześniej, przed zapytaniem na forum i przerobiłem vectory, listy itd. ale ni chu chu nie potrafie zrobic tego o co mi chodzi... sad.gif Podpowiedziano mi że mogę zrobić w liście tablicę jednowymiarową, a potem robić listę listy, lub listę listy listy... itd... ale jak to zrobić programowo? tak żeby każda lista inaczej sie nazywała? przecież nie będe w programie deklarował 50 list z różnymi nazwami...

Link do komentarza
Udostępnij na innych stronach

[quote] program wylicza ileś tam powiedzmy a=30 funkcji, przy czym każda funkcja składa się z:
funkcja[zm_1][zm_2][zm_3][wartosc_zm_1][wartosc_zm_2][wartosc_zm_3]=b; [/quote]Masz na myśli coś takiego?
[code=C++]
void jakas_funkcja(typ zm1, ..., wartosc_zm_3); [/code]
Mam jeszcze kilka pytań co do programu:
-jak działa funkcja wyliczająca wartości (1 lub 0)?
-jak często wyliczane są te wartości?
-czemu służą? (chodzi mi o efekt, czyli np. wyliczanie PI, masy masła w maśle itp smile.gif )

Pozdrawiam,

vo7 (;

Link do komentarza
Udostępnij na innych stronach

on po prostu chce stablicować wszystkie możliwe kombinacje parametrów funkcji i jeżeli tam funkcja wynosi 1 to wstawia 1 jeżeli nie to 0
kolego może po prostu odwróć działanie funkcji (bo z tego co rozumiem wrzucasz ją do pętli i podstawiasz kolejne parametry) czyli zrób nie wyliczanie z parametrów wartości tylko z wartości parametrów.


a jezeli się upierasz przy tej tablicy to proponuje takie rozwiązanie:
przypuśćmy że to 1 albo zero to jest bool zmienna
teraz robisz tak że deklarujesz jedną tablice jedno wymiarową czyli np
bool tab[]
a potem wyobraź sobie że dzielisz sobie tą tablice wielowymiarową na paseczki o długości to twoje "p" i wylicz sobie funkcje która składa z tamtej jednowymiarowej tablice wielowymiarową

jak bedziesz miał problem a ja czas to ci napisze może w pseudo kodzie jak to zrobić bo teraz mi sie niechce

"Może wam pomoge, może nie, może pierdolcie w dupę się"-prof. Jarząbek

Link do komentarza
Udostępnij na innych stronach

hmm tak, tylko że:
funkcja zwraca nam ileś kombinacji "trójkowych".
przykładowa kombinacja zwrócona przez funkcję: dla(zmienna1=2 zmienna5=1 zmienna3=1)=1

to teraz w tej duzej tablicy p-wymiarowej powiedzmy że przedstawie tą linię:
tablica[2][ ][1][ ][1]=0 //i teraz tablica[][][][][] moze być =1 tylko wtedy gdy wszystkie zmienne będą wyznaczone, ale wartości tych zmiennych muszą "współistnieć trójkami" to znaczy że zmienna1=2 tylko wtedy gdy zmienna5=1 oraz zmienna3=1 (to konkretnie dla tej trójki zwróconej przez funkcję, a takich trójek mam liczbę "n") i dla tego myśle że najprościej to będzie właśnie zrobić mając macierz z wszystkimi mozliwymi kombinacjami...


hmm kombinowałem z vektorami i juz myślałem że będzie działać bo wszystko ładnie sobie w głowie tylko ułożyłem (że wektor będzie przechowywał wskaźniki do wektorów int, a kolejny wektor będzie przechowywał wskaźniki do wektora ze wskaźnikami itd...) ale niestety nie da sie przechowywać w wektorze wskaźników na inne wektory - chyba że ktoś wie jak to zrobić? (żeby przechowywać w wektorze wskaźniki na wektory?) bo może to jest właśnie jakieś rozwiązanie?
Link do komentarza
Udostępnij na innych stronach

chyba mylisz pojecia, wektor to co innego niz tablica pointerow.

twoje rzeczy mozna zrobic tak (przyklad dla 2 wymiarow)
[code=C++]
int **tab;
tab = new int*[10]; //albo new *int[10] , X[HX[HY]ZHYHXZ[L L
ĘĘB%EćWrEłUÓ [/code]

im wiecej wymiarow tym wiecej * dorzucasz i dorzucasz kolejne petle....

Always Dark<br />u1_tt_logo.png banner-1.pngexFabula-banner.pngson_banner_ubersmall.jpg

Link do komentarza
Udostępnij na innych stronach

Zarchiwizowany

Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.

×
×
  • Utwórz nowe...