Dali neko zna?

Dali neko zna?

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

Ako se u Dev-C++ napise sledeci kod:

  1. int n=5;
  2. 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:
  1. 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:

  1. // arrays.cpp
  2. // compile with: /EHsc
  3. #include <iostream>
  4. int main()
  5. {
  6.    using namespace std;
  7.    int size = 0;
  8.    cout << "how big should the array be? ";
  9.    cin >> size;
  10.    int* myarr = new int[size];
  11.    for (int i = 0 ; i < size ; i++)
  12.       myarr[i] = 10;
  13.  
  14.    for (i = 0 ; i < size ; i++)
  15.       printf("myarr[%d] = %d\n", i, myarr[i]);
  16. }


Kod preuzet sa: [Link mogu videti samo ulogovani korisnici]|

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:

  1. new i new[]
  2. ali nema new[][].

jer sledeci kod opet pravi istu gresku:
  1. int n=5;
  2. 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

  1. typedef int * pint;
  2. int **mat = new pint[10];
  3. for (int i = 0; i < 10; i++)
  4. {
  5.     mat[i] = new int[10];
  6. }

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 995 korisnika na forumu :: 71 registrovanih, 2 sakrivenih i 922 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: 015, acatomic, aco76, Banovo Brdo, bojan581, bojanM84, BOXRR, burevestnik, BZ, cenejac111, Centauro, Chainsaw, chervoncy, Dekanovic, Django777, doktor097, Dolinc, dozorni, ElvisP, Flanker-G, france93, Georgius, Goksi95, gregorxix, HrcAk47, istina, jackreacher011011, kaskadija, Konda, lelemud, lucko1, Magistar78, MB120mm, mdp92, MiG-29M2, MIKI63, mikrimaus, Milos ZA, mist-mist, Natuzzi, nebidrag, nekdo, nenad81, neutrino, niksa517, Nmr, nobutado, oganj123, Papadubi, Parker, Pekman, PrincipL, procesor, raso76, redstar72, Relixiran, skvara, Sr.Stat., Srki94, Srpska zauvjek, styg, synergia, Tila Painen, Toper, tubular, Vlada1389, Zeljo980, zlaya011, zmajbre, Zrcalo, Žoržo