Witam, mam do napisania pewną prostą aplikację (jest to zadanie z książki, uczę się z niej), ale stanąłem w miejscu, w którym muszę zmodyfikować tablicę dwuwymiarową za pomocą funkcji. Wyskrobałem coś, co teoretycznie odpala i modyfikuje wartości, ale nie jest to zadowalający efekt, ponieważ omija mi wartości i nie nadpisuje poprawnie, a są luki w "nowej" tablicy. A oto kod, jednak zanim ktoś go przeczyta, aby było wszystko zrozumiałe - napiszę dwie rzeczy.
Na ten moment zależało mi, aby to był test i dlatego działa to tak, że używam teraz tylko jednej z kolumn tablicy (Sleep jest użyte w pętli celowo [linijka 73 oraz 75], aby wymusić zatrzymanie wyświetlania, zależy mi na ten moment na wyświetleniu wartości z jednej z kolumn).
Zmienne typu "o","e","z" i tego typu zostały użyte tylko do celów wyświetlania/wpisania wartości do tablicy. Wiem, że jest to bardzo zła rzecz, po powinienem nie pisać czegoś takiego, tylko zmienne powinny być nazwane w sposób zrozumiały, zatem proszę wybaczyć za to :/
#include <iostream>
#include <cstdlib>
#include <windows.h>
using namespace std;
int **modyfikuj(int **test, int *rozmiar);
int main()
{
int rozmiar_p = 3;
int **test_tablica;
test_tablica = new int *[rozmiar_p];
for(int i = 0; i < 3; i++)
{
test_tablica[i] = new int[rozmiar_p];
}
int przypsz;
bool test_STOP = false;
int licz = 0;
while(true)
{
cout << "Przypisz wartosci!\n\n";
for(int u = 0; u < rozmiar_p; u++)
{
for(int h = 0; h < rozmiar_p; h++)
{
licz++;
cout << "test_tablica[" << u << "][" << h << "] = ";
cin >> przypsz;
if(przypsz == 1234)
{
test_STOP = true;
}
if(test_STOP)
{
break;
}
if(licz == (rozmiar_p - 1))
{
test_tablica = modyfikuj(test_tablica, &rozmiar_p);
}
test_tablica[u][h] = przypsz;
}
if(test_STOP)
{
break;
}
cout << "\n"; //Żeby wyglądało ładniej
}
cout << "\nWartosc tablicy to:\n\n";
for(int y = 0; y < rozmiar_p; y++)
{
for(int e = 0; e < rozmiar_p; e++)
{
cout << "WARTOSC test_tablica[" << y << "][" << e << "] => " << test_tablica[y][e];
cout << "\n";
}
cout << "\n"; //Żeby tu również wyglądało ładnie
Sleep(100000);
}
Sleep(100000);
}
}
int **modyfikuj(int **test, int *rozmiar)
{
int stary_rozmiar = *rozmiar;
*rozmiar = *rozmiar * 2;
int **nowa_tablica;
nowa_tablica = new int *[*rozmiar];
for(int i = 0; i < *rozmiar; i++)
{
nowa_tablica[i] = new int[*rozmiar];
}
int pomoc1;
for(int z = 0; z < *rozmiar; z++)
{
for(int o = 0; o < *rozmiar; o++)
{
pomoc1++;
if(pomoc1 < stary_rozmiar)
{
nowa_tablica[z][o] = test[z][o]; //W tym miejscu powinien nadpisywać wartościami ze starej tablicy
}
else
{
nowa_tablica[z][o] = 0; //Z kolei w tym miejscu powinien przypisać zera wszystkiemu wzwyż
} //to nadpiszemy w przyszłości (jak rozwinę kod)
}
break;
}
return nowa_tablica;
for(int pomoc_usun = 0; pomoc_usun < *rozmiar; pomoc_usun++) //W tym miejscu usuwam tablicę dwuwymiarową,
{ //Nie jestem pewny "poprawności" tej metody :/
delete[] test[pomoc_usun];
}
delete[] test;
}
Dodatkowo wspomnę, że zaczynam od początkowej wartości 3 dla długości i szerokości tablicy, po czym zostaje ona powiększona. Fragment kodu, który potrzebuję później użyć (czyli właściwie ten cały) zachowuje się w ten sposób:
Wyżej na zdjęciu wpisywałem wartości 1, 2, 3 a wartość "1234" nie jest zapisywana, ona po prostu sprawia, że program wychodzi z pętli i następuje wyświetlenie (zera działają poprawnie).
Poprosiłbym o naprowadzenie :/
Z góry dziękuję i pozdrawiam!