• 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

Object Storage Arubacloud
0 głosów
104 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 (287,950 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ź 193 wizyt
0 głosów
1 odpowiedź 546 wizyt
pytanie zadane 22 marca 2021 w C i C++ przez Rainbow99 Początkujący (430 p.)
0 głosów
0 odpowiedzi 154 wizyt
pytanie zadane 9 maja 2020 w C i C++ przez pati2234 Nowicjusz (120 p.)

92,576 zapytań

141,426 odpowiedzi

319,652 komentarzy

61,961 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...