• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

question-closed Dynamiczne modyfikowanie dwuwymiarowej tablicy

0 głosów
226 wizyt
pytanie zadane 18 stycznia 2018 w C i C++ przez AnastaZIuk Początkujący (330 p.)
zamknięte 18 stycznia 2018 przez Arkadiusz Waluk

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!

komentarz zamknięcia: Znaleziony błąd
komentarz 18 stycznia 2018 przez AnastaZIuk Początkujący (330 p.)
przeniesione 18 stycznia 2018 przez Arkadiusz Waluk
Znalazłem błąd, temat do zamknięcia!
Jednakże chętnie przyjmę krytykę, jeśli chodzi o kod :D
komentarz 18 stycznia 2018 przez Arkadiusz Waluk Ekspert (290,910 p.)
Pytania możesz zamykać samemu. Należałoby również powiedzieć jak rozwiązałeś dany problem, aby inni szukający w przyszłości mogli od razu skorzystać.
komentarz 20 stycznia 2018 przez AnastaZIuk Początkujący (330 p.)
Tak, masz rację

trzeba było nadać zmiennej pomoc1 wartość 0, bo w innym przypadku sprawdzaliśmy zmienną, która wartości początkowej nie miała.

Podobne pytania

0 głosów
1 odpowiedź 388 wizyt
0 głosów
1 odpowiedź 832 wizyt
pytanie zadane 22 marca 2021 w C i C++ przez Rainbow99 Początkujący (430 p.)
0 głosów
0 odpowiedzi 266 wizyt
pytanie zadane 9 maja 2020 w C i C++ przez pati2234 Nowicjusz (120 p.)

93,600 zapytań

142,524 odpowiedzi

322,993 komentarzy

63,085 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Kursy INF.02 i INF.03
...