Dali neko zna?

Dali neko zna?

offline
  • Pridružio: 01 Mar 2006
  • Poruke: 18

Ako se u Dev-C++ napise sledeci kod:
int n=5; int M[n][n];
program normalno radi( Alocira se matrica 5x5),
ali ako se isti kod napise u MS VC++ javlja se greska
( ocekuje se konstantan izraz u drugom redu).

Kako alocirati matricu u VC++ cije su dimenzije promenljive.
Dali postoji neka naredba kao u Delphi-ju:
SetLength(M,n,n);
Hvala za odgovor.



Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
offline
  • Pridružio: 17 Mar 2004
  • Poruke: 293
  • Gde živiš: UK

Gornji kod je validan samo u sluchaju kompajlera koji poshtuju C99 standard (tj. derivati GCC-a)
Inache ne radi pod C++ kompajlerima, zato ti se MSVC i buni (jer gornji kod i NIJE po C++ standardu i ne bi ni trebao da se kompajlira).

Nizove promenljivih dimenzija u C++u mozhesh samo dinamichki da kreirash



offline
  • Srđan Tot
  • Am I evil? I am man, yes I am.
  • Pridružio: 12 Jul 2005
  • Poruke: 2483
  • Gde živiš: Ljubljana

Evo lepog i jednostavnog primera kako da to uradis:
// arrays.cpp // compile with: /EHsc #include <iostream> int main() {    using namespace std;    int size = 0;    cout << "how big should the array be? ";    cin >> size;    int* myarr = new int[size];    for (int i = 0 ; i < size ; i++)       myarr[i] = 10;    for (i = 0 ; i < size ; i++)       printf("myarr[%d] = %d\n", i, myarr[i]); }

Kod preuzet sa: http://msdn.microsoft.com/library/default.asp?url=....._array.asp|

offline
  • Pridružio: 01 Mar 2006
  • Poruke: 18

Jasno mi je sada da se dinamicka matrica u VC++-u prikazuje preko dinamickog niza i da se mora vrsiti konverzija,
da je elemenat matrice M[i][j] u nizu prikazan sa M[i*size+j].
U knjizi sam nasao da postoje operatori:
new i new[] ali nema new[][].
jer sledeci kod opet pravi istu gresku: int n=5; int * P = new int [n][n];
Hvala jos jednom. -> Pozdrav

offline
  • meka  Male
  • Počasni građanin
  • Pridružio: 06 Avg 2003
  • Poruke: 811
  • Gde živiš: Novi Sad / Vojvodina

typedef int * pint; int **mat = new pint[10]; for (int i = 0; i < 10; i++) {     mat[i] = new int[10]; }
Ovim se alocira mesto u memoriji (ako nisam nešto zeznuo jer kod nisam proterao kroz kompajler). Postavljanje vrednosti kasnije ide sa jednostavnim mat[1][4] = 12 (recimo).

offline
  • Pridružio: 01 Mar 2006
  • Poruke: 18

Ovo stvarno radi ! Mada priznajem da mi ovo nebi palo na pamet
100 godina. Kompajlirao sam i radi , jedino je bila greska :
' ; ' na kraju prvog reda.
Hvala puno.

P.S. Nije mi jasno sto je C++ ovako komplikovan , mada je jako interesantan.

offline
  • meka  Male
  • Počasni građanin
  • Pridružio: 06 Avg 2003
  • Poruke: 811
  • Gde živiš: Novi Sad / Vojvodina

C++ je sav u izboru (jer je nasledio C). Stvar je u tome da možeš da koristiš asm ako ti treba. Verovatno postoji funkcija za ovako nešto (ili klasa), ali ja ne znam ni jednu. Možda da koristiš std::vector<std::vector<int>> matrica, ali to je već glomazno (obzirom da je u gcc-u std::vector 24 bajta).

Ko je trenutno na forumu
 

Ukupno su 835 korisnika na forumu :: 14 registrovanih, 4 sakrivenih i 817 gosta   ::   [ Administrator ] [ Supermoderator ] [ Moderator ] :: Detaljnije

Najviše korisnika na forumu ikad bilo je 3466 - dana 01 Jun 2021 17:07

Korisnici koji su trenutno na forumu:
Korisnici trenutno na forumu: DENIRO, djuradj, dragan_mig31, HrcAk47, Koja79, mercedesamg, micoboj, milenko crazy north, Nikola00, shlauf, vaso1, Vlada78, Wrangler, Zmaj Ognjeni Vuk