Poslao: 12 Apr 2006 22:04
|
offline
- VeliborI
- Novi MyCity građanin
- 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.
|
|
Poslao: 13 Apr 2006 00:28
|
offline
- bNasty
- Građanin
- 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
|
|
|
|
Poslao: 13 Apr 2006 09:18
|
offline
- Srki_82
- Moderator foruma
- 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|
|
|
|
|
Poslao: 13 Apr 2006 23:59
|
offline
- VeliborI
- Novi MyCity građanin
- 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
|
|
|
|
Poslao: 14 Apr 2006 13:47
|
offline
- meka
- 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).
|
|
|
|
Poslao: 14 Apr 2006 21:52
|
offline
- VeliborI
- Novi MyCity građanin
- 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.
|
|
|
|
Poslao: 16 Apr 2006 12:02
|
offline
- meka
- 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).
|
|
|
|