Witam,
Jakim sposobem można utworzyć tablicę n-wymiarową nie znając ilości wymiarów przy kompilacji programu, a dopiero w trakcie jego działania? pozdrawiam
0
0
Google.pl + tablice dynamiczne
0
możesz stworzyć tablicę jednowymiarową i udawać, że jest tablicą n-wymiarową:
zakładając, że Twoje kolejne wymiary to:
a1,a2,a3,...,an
można powiedzieć, że:
rozmiar tablicy jednowymiarowej powinien mieć rozmiar: a1a2...*an
komórka na pozycji x1,x2,x3,...,xn w tablicy wielowymiarowej, w Twojej tablicy jednowymiarowej będzie na pozycji:
x1 + x2a1 + x3a1a2 + x4a1a2a3 + ... + xna1a2a3...*a[n-1] (w nawiasie kwadratowym jest indeks)
Napisałem na szybko brzydki, ale chyba działający kod (jak się nigdzie nie walnęłem):
#include <vector>
#include <iostream>
#include <string>
using namespace std;
int main()
{
int n;
cout << "Podaj ilosc wymiarow tablicy: ";
cin >> n;
vector<int> wymiary(n);
int ilosc_elementow = 1;
cout << "Podaj po kolei wymiary tablicy:\n";
for (int i=0; i<n; i++)
{
cin >> wymiary[i];
ilosc_elementow *= wymiary[i];
}
vector<int> tablica(ilosc_elementow,0);
int wybor;
bool koniec;
do
{
cout << "1 - wprowadanie nowych danych do tablicy\n";
cout << "2 - wyswietlenie komorki\n";
cout << "KAZDA INNA LICZBA - koniec\n";
cin >> wybor;
koniec = !(wybor==1 || wybor==2);
if (!koniec)
{
cout << "Podaj ktorej komorki dotyczy operacja:\n";
int nr = 0;
int przes = 1;
for (int i=0; i<n; i++)
{
int a;
cin >> a;
nr += a*przes;
przes *= wymiary[i];
}
int& komorka = tablica[nr];
if (wybor==1)
{
cout << "Podaj liczbe ktora chcesz wpisac do wybranej komorki:\n";
cin >> komorka;
}
else
{
cout << "Wybrana komorka przechowuje wartosc: " << komorka << "\n";
}
}
}
while (!koniec);
return 0;
}
kod najlepiej by było wrzucić do jakiejś klasy i powinno być sprawdzane czy nie wychodzisz poza zakres któregoś wymiaru.