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

Definiowanie rozmiaru tablicy w trakcie trwania programu, deklaracja tablicy o niewiadomej liczbie elementów

Ostatnio zmodyfikowano 2011-02-02 14:50
Autor Wiadomość
neverneve
Temat założony przez niniejszego użytkownika
Definiowanie rozmiaru tablicy w trakcie trwania programu, deklaracja tablicy o niewiadomej liczbie elementów
» 2011-02-01 20:03:35
Witam, mam parę pytań dotyczących tablic. Przerabiam C++ z książką Symfonia C++ oraz w szkole. W rzeczonej szkole ćwiczymy właśnie tablice, i elementem każdego programu jest najpierw pytanie użytkownika ile poda wyrazów (które zostaną zapisane do tablicy), potem następuje deklaracja/definicja tablicy. Robimy to w ten sposób:

http://wklej.org/id/468615/

Za to w książce napotkałem taki akapit:

"Rozmiar tak definiowanej tablicy musi być stałą całkowitą (większą od zera) - i to znaną już w trakcie kompilacji. Kompilator bowiem musi już wtedy wiedzieć ile miejsca ma zarezerwować na daną tablicę. Rozmiar ten nie może być więc ustalony dopiero w trakcie pracy programu.

C/C++
cout << "Jaki chcesz rozmiar tablicy ? ";
int rrr;
cin >>> rrr;

int a[ rrr ]; //Błąd !!!
Jest to błąd, bo wartość rrr nie jest jeszcze w czasie kompilacji znana."

I teraz już nie wiem - wprawdzie programy działają jak należy, mimo to wygląda na to że jest to niedozwolone. Proszę więc o wytłumaczenie.

I drugie pytanie: czy da się zrobić coś takiego, że np. użytkownik podaje po kolei liczby (które są zapisywane do kolejnych elementów tablicy) do momentu kiedy naciśnie 0? Albo czy jest możliwe coś takiego, że użytkownik po przecinku podaje liczby które są zapisywane do tablicy aż naciśnie ENTER?
P-27655
DejaVu
» 2011-02-01 20:13:35
Dynamiczne zarządzanie pamięcią:
C/C++
int liczbaElementow;
std::cin >> liczbaElementow
int * tablica = new int[ liczbaElementow ];
//...
delete[] tablica;
Druga opcja to wykorzystanie standardowych kontenerów C++. Skoro nie wiesz jeszcze o takich mykach to znaczy, że trochę za mało jeszcze poznałeś C++ :)
P-27659
WiecznyWem
» 2011-02-01 20:17:29
Odnośnie pierwszego problemu, z pomocą przychodzi STL(http://cpp0x.pl/kursy/Kurs-STL-C++/114) A konkretnie zastosowanie vectorów.

1. A może pętla która wczytuje do wciśnięcia 0?
C/C++
int a;
do {
    cin >> a;
} while( a != 0 )
//tylko że z tablicą ;)

2. Można stosować coś takiego
int a, b, c; cin >> a >> b >> c;
Wtedy będzie można je podawać i po spacjach, jak i po enterach(z przeciwnikiem by było więcej kombinowania)
P-27660
DejaVu
» 2011-02-01 20:31:43
PS. błąd masz tu:
C/C++
cin >>> rrr;
Powinno być jak już:
C/C++
cin >> rrr;
P-27661
neverneve
Temat założony przez niniejszego użytkownika
» 2011-02-02 14:42:17
OK, na razie na takich mykach (vectory, dynamiczne zarządzanie pamięcią) się nie znam więc to sobie zostawię na później (chociaż jeszcze mógłby mi ktoś odpowiedzieć dlaczego ten sposób, który wykorzystujemy na lekcjach jest nie dobry, dlaczego kompilator musi znać wielkość tablicy od początku?).

WiecznyWem: dzięki za te propozycje, ale mi chodzi w tym przypadku aby to wszystko zapisywać do tablicy, która nie ma określonego jeszcze rozmiaru. Chcę zrobić coś takiego np. - definiuję tablicę, ale nie wiem jaką ona będzie miała liczbę elementów - potem użytkownik wpisuje ileś tam liczb i program sobie ten rozmiar tablicy oblicza (chodzi ogólnie o to, że zawsze jak się ten program wykona można podać więcej lub mniej liczb i program będzie tworzył tablicę o takim rozmiarze). Ale wygląda na to, że coś takiego też jest możliwe tylko z użyciem trudniejszych sposobów.
P-27690
waxx
» 2011-02-02 14:50:56
Bo odpalając program, sterownik systemu przypisuje dla twojego procesu całą pamięć jaką chcesz. Jak wiesz tablica to po prostu kolejne po sobie bity w pamięci, dlatego też musisz podać z początku ile tego dokładnie miejsca ma twój program rezerwować. Co innego jak dynamicznie tworzysz taką tablicę.
P-27691
« 1 »
  Strona 1 z 1