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 1131 korisnika na forumu :: 42 registrovanih, 6 sakrivenih i 1083 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: airsuba, Alibaba1981, amaterSRB, Apok, aramis s, babaroga, bigfoot, Bobrock1, Boris Bosiljčić, BORUTUS, darkangel, darkstar101, doom83, draganl, Dukelander, gorican, havoc995, ILGromovnik, Joja, kinez88, kybonacci, LUDI, macak44, madza, Misirac, moldway, Nemanja.M, nemkea71, nuke92, ObelixSRB, opt1, panzerwaffe, radionica1, Romibrat, rovac, slonic_tonic, theNedjeljko, vathra, zixmix, zlaya011, žeks62, 1107