Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[C++] Dynamiczne tablice dwuwymiarowe

Ostatnio zmodyfikowano 2013-01-29 22:00
Autor Wiadomość
maze
Temat założony przez niniejszego użytkownika
[C++] Dynamiczne tablice dwuwymiarowe
» 2013-01-29 15:22:15
Czesc,

mam pytanie czy ten kod, który napisalem odpowiada temu czym ma byc. a mianowicie :

Funkcją tworzącą dynamiczną tablicę wskaźników na teksty
o maksymalnej dlugości 30 znaków.

C/C++
char ** tablica( int n )
{
    if( char ** tablica = new char[ n ] )
    for( int i = 0; i < n; i++ )
    {
        tablica[ i ] = new char[ 30 ];
        if( tablica[ i ] == NULL ) cout << "Brak pamieci";
       
    }
    else cout << "Brak pamieci";
   
    return tablica;
}

Od razu pytanie, czy jezeli zmienna wskaznikowa **tablica tworze wewnatrz funkcji, to czy po zakonczeniu funkcji, wartosc tego przekazywanego wskaznika nie wyzeruje sie???

Pozdrawiam!
P-75301
maze
Temat założony przez niniejszego użytkownika
» 2013-01-29 16:55:10
Słuchajcie, z tworzeniem tablicy poradzilem sobie, gryzac to od troche innej strony. Niestety problem mam zeby ja teraz zapelnij.

Tak wiec, tablica jest wskaznikiem na N-elementowa tablice wskaznikow na teksty(tablice charow).  Jak sie zabrac do tego, zeby ja zapelnic?
Proboje napisac taka funkcje i jest ona w kodzie poniezej, jednak nie dziala... (chociaz program sie kompiluje).

C/C++
#include <iostream>

using namespace std;

void stworz_tab( char ** tablica, int n )
{
    tablica = new char *[ 5 ];
    for( int i = 0; i < n; i++ )
    {
        tablica[ i ] = new char[ 30 ];
        if( tablica[ i ] == NULL ) cout << "Brak pamieci";
       
    }
   
}

void wyswietl( char ** tablica, int w )
{
    for( int i = 0; i < w; i++ )
    {
        for( int j = 0; j < 30; j++ )
        {
            cout << tablica[ i ][ j ];
        }
        cout << endl;
    }
}

void zapelnij( char ** tablica, int n )
{
    for( int i = 0; i < n; i++ )
    {
        cout << "Podaj " << i + 1 << "-szy tekst" << endl;
        cin >> tablica[ i ];
    }
   
}

int main()
{
    cout << "Jak duza tablice chcesz utworzyc?" << endl;
    int rozmiar; cin >> rozmiar;
    char ** tablica;
    stworz_tab( tablica, rozmiar );
   
    zapelnij( tablica, rozmiar );
    wyswietl( tablica, rozmiar );
   
   
   
    return 0;
}
P-75311
maze
Temat założony przez niniejszego użytkownika
» 2013-01-29 17:03:46
zapewne trzeba tu uzyc cin.getline, troche mi to wylecialo z glowy. Ale w formie jak ponizej niestety dalej to nie funkcjonuje...

C/C++
void zapelnij( char ** tablica, int n )
{
    for( int i = 0; i < n; i++ )
    {
        cout << "Podaj " << i + 1 << "-szy tekst" << endl;
        cin.getline( tablica[ i ], 30 );
    }
   
}

Ktokolwiek jest w stanie pomoc ????
P-75313
ison
» 2013-01-29 17:14:06
C/C++
void stworz_tab( char ** tablica, int n )
{
    tablica = new char *[ 5 ];
    for( int i = 0; i < n; i++ )
    {
        tablica[ i ] = new char[ 30 ];
        if( tablica[ i ] == NULL ) cout << "Brak pamieci";
       
    }
   
}
tutaj podpisujesz coś bezpośrednio pod 'tablica', która jest kopią przekazaną do funkcji
przekaż to przez referencję - dopisz &
P-75314
maze
Temat założony przez niniejszego użytkownika
» 2013-01-29 17:31:19
dzieki za odpowiedz ison.

Teraz mam taka sytuacje, ze funkcja wczytujaca przelatuje przez petle wyswietlajac couty, jednak wogole nie wywoluje funkcji cin.getline(), ktora ma pobrac linie znakow i zapisac ja pod dany wskaznik.

No wlasnie tutaj sie troche gubie, bo kazdy z elementow tej dynamicznie tworzonej tablicy, jest wskaznikiem na tablice charow. Jak wpisac cos pod ta tablice na ktora wskazuje wskaznik???? >>> bo pod
tablica[ i ]
 przeciez nie ma jeszcze tej tablicy charow, jest tylko wskaznik do niej....

C/C++
void zapelnij( char **& tablica, int n )
{
    for( int i = 0; i < n; i++ )
    {
        cout << "Podaj " << i + 1 << "tekst" << endl;
        cin.getline( * tablica + i, 30 );
    }
   
}
P-75315
maze
Temat założony przez niniejszego użytkownika
» 2013-01-29 17:56:28
okey w zasadzie to dziala, tylko w jakis dziwaczny sposob.

Mianowicie jezeli podam ilosc tekstow tworzonych np. 5, to funkcja wczytujaca opuszcza 1 wpis wyswietlajac tylko napis "Wpisz 1" i odrazu pod spodem drukuje wpisz 2, ktory juz mozna podac, i zapamietuje go pozniej wyswietlajac.....

P-75317
krzyk
» 2013-01-29 18:04:53
przed
cin.getline
 daj
cin.sync();
P-75321
maze
Temat założony przez niniejszego użytkownika
» 2013-01-29 18:08:19
dalej opuszcza mi pierwszy wpis, tak to wyglada:


Jak duza tablice chcesz utworzyc?
5
Podaj 1tekst
Podaj 2tekst

Podaj 3tekst

Podaj 4tekst

Podaj 5tekst


kompletnie tego nie rozumiem, wszytskie indeksy ida od 0.....


Co do tego cin.sync(), moze ma jakies znaczenie ze kompiluje pod linuksem, gcc ??
P-75323
« 1 » 2
  Strona 1 z 2 Następna strona