PC Ekspert Forum

PC Ekspert Forum (https://forum.pcekspert.com/index.php)
-   Web dizajn, programiranje i ostalo (https://forum.pcekspert.com/forumdisplay.php?f=39)
-   -   malo C++! (https://forum.pcekspert.com/showthread.php?t=31627)

akegalj 14.01.2006. 20:24

malo C++!
 
Ponajprije vas sve pozdravljam. Imam nekoliko pitanja za vas, a ponajprije bih vas upitao( sve vezano za C++):

Citam knjigu izdanja 2001. godine pa je li bilo nekih velikih promjena?

Zanima me sto je stack(stog) i heap(hrpa) u memoriji? Koliko sam ja skuzio stack je memorija koju program(neovisno o mome kodu) rezervira za staticne objekte, a heap je javna memorija koja je poznata svim programima u to vrijeme(OS-u, igrama,...-> za dinamicne objekkte). Jesam li u pravu?

I vezano za kreiranje dvodimenzionalnog polja koristeci pointere:
u jednom dijelu u knjizi pise ovako :
char (*a)[4] = new char[n][4];
=>ali istice da je nuzno da bude (*a)[4], a ne *a[4]
I dok me u to uvjerio u jednom dijelu knjige kaze:
char *a[] = {"ponedjeljak",
"utorak",
"srijeda",
"..."};
=>zar nebi trebalo po gore navedenom ovdije
zamijenit *a[] sa (*a)[] ?
Molim vas komentirajte mi ove primjere i kazite sto vi radije i koju metodu koristite?

Ako znate ikoji od ovih odgovora(netrebate sve) dajte odgovorite ili bar dajte svoje misljenje!


Informacija se najvise cijeni!

Andeo 16.01.2006. 09:20

Nije se mijenjalo ništa, C++ je i dalje onaj dobri stari :) .

Što se tiče ovoga tvoga pitanja nisam baš previše radio sa time pa bi morao malo pogledati (sad sam na poslu pa se nemogu baš tako zajebavati) a inače ja radim na ovaj način, meni najlogičniji i najjednostavniji za pratiti:

//kreiramo dvostruki pointer
char **a;

//prvo polje je veličine 3
a = new char*[3];

//sva ostala su 4
for(int i = 0; i<3; i++)
*(a + i) = new char[4];


//kasnije puniš elemente sa dvije for liste kao i uvijek kod dvodimenzionalnih polja

for(int i = 0; i<3; i++)
{
for(int j = 0; j<4; j++)
{
*(*(a+i)+j) = ...;
}
}

akegalj 16.01.2006. 15:02

ma nije mi problem kreirati dvdimenzijonalno polje na taj nacin, ali htio sam skuzit koja je razlika izmedju ona dva nacina(da komplentno shvatim c++)! Hvala na prijedlogu al cekat cu da mi mozda jos netko ponudi konkretan odgovor!

Andeo 16.01.2006. 16:02

#include
#include
#include
void main()
{
/******************************************************************************************************/
//Na ovaj način kreiramo pointer na dvodimenzionalno polje koje ima neograničeno stupaca i redova
//npr. prvo će biti *a [11], drugo je *(a + 1)[6] itd. (konkretno ovdje će char *a biti zapravo pointer na polje [4][12])

char *a[] = {"ponedjeljak",
"utorak",
"srijeda",
"cetvrtak"};

//NA ovaj način upisujemo u str "ponedjeljak" a u str2 "utorak"
LPSTR str, str2;
str = *a;
str2 = *(a+1);

//na ovaj način upisujemo u ch1 "p"(prvi znak u polju *a koje sadrži string "ponedjeljak")
//a u ch2 "u"(prvi znak u polju *(a+1) koje sadrži string "utorak")
char ch1,ch2;
ch1 = *a[0];
ch2 = *(a+1)[0];

/******************************************************************************************************/
//Na ovaj način kreiramo pointer na dvodimenzionalno polje koje ima SAMO 4 reda i 4 stupca s time da (*b)[4] ako je postavljeno na 4 broj stupaca polja koje kreiramo MORA biti 4
char (*b)[4] = new char[4][4];

}

PAZI char (*b)[4] i char *b[] nije isto, ako imaš u zagradi broj ((*b)[4]) onda *b mora biti u zagradi inače ne mora..

akegalj 18.01.2006. 00:18

Citiraj:

//Na ovaj način kreiramo pointer na dvodimenzionalno polje koje ima neograničeno stupaca i redova
//npr. prvo će biti *a [11], drugo je *(a + 1)[6] itd. (konkretno ovdje će char *a biti zapravo pointer na polje [4][12])

char *a[] = {"ponedjeljak",
"utorak",
"srijeda",
"cetvrtak"};
kuzim to, ali sto mene zanima jest hoce li on ovdje kreirati pokazivac na "ponedjeljak" odnosno na 'p' ili ce vratiti polje pokazivaca( sto bi i trebalo znaciti *a[])!!?
:confused: kuzis!? Ili ce vratiti pokazivac na 'p' ili ce vratiti pokazivac na polje pokazivaca( koji zapravo pokazuju na pocetke svih stringova 'p', 'u', 's', 'c')

Citiraj:

PAZI char (*b)[4] i char *b[] nije isto, ako imaš u zagradi broj ((*b)[4]) onda *b mora biti u zagradi inače ne mora..
a sto se ovoga tice, mi smo u ova oba primjera gore i ovaj pridruzivali dvodimenzionalno polje pokazivacu, pa zasto onda u ovom drugom primjeru moramo naglasiti * uz b ... (*b)[]
=>po pravilu [] ima veci prioritet od * pa zbog toga, ali onda ni u gornjem primjeru po mome nismo smijeli!!

ps. mislim da ti je *(a+1) == a[1] kod tvojih primjera

Andeo 18.01.2006. 08:43

Citiraj:

Originally posted by akegalj
kuzim to, ali sto mene zanima jest hoce li on ovdje kreirati pokazivac na "ponedjeljak" odnosno na 'p' ili ce vratiti polje pokazivaca( sto bi i trebalo znaciti *a[])!!?
:confused: kuzis!? Ili ce vratiti pokazivac na 'p' ili ce vratiti pokazivac na polje pokazivaca( koji zapravo pokazuju na pocetke svih stringova 'p', 'u', 's', 'c')

Ne, ne kužim šta ti nije jasno. Ti si kreirao pokazivač na dvodimenzionalno polje i točka. Drugo te ništa ne zanima, niti šta je u njemu niti koliko je! Sad preko toga pointera možeš ako hoćeš pristupiti bilo kojoj vrijednosti u tome polju pa i kompletnim stringovima. Za tebe dalje u radu nema nikakave razlike da li si kreirao obično dvodimenzialno polje ili pointer, dalje radiš normalno tako da ne znam ćemu tolika pitanja. Želiš ispisati kompletan string, super pristupiš preko *a (u primjeru ispišeš "ponedjeljak"), želiš samo prve stringove super i to pristupaš preko *a[0], *(a+1)[0] itd. Šta biš još htio raditi sa poljima? I druga stvar u 2.g rada nisam još došao u tu situaciju da koristim pointer na dvod. polja. Ima elegantnijih načina da se kodira...

Citiraj:

Originally posted by akegalj
a sto se ovoga tice, mi smo u ova oba primjera gore i ovaj pridruzivali dvodimenzionalno polje pokazivacu, pa zasto onda u ovom drugom primjeru moramo naglasiti * uz b ... (*b)[]
=>po pravilu [] ima veci prioritet od * pa zbog toga, ali onda ni u gornjem primjeru po mome nismo smijeli!!
[/B]
NE, jer poljima nepoznate veličine ne možeš na taj način kreirati pointer. Prvo se polje kreira u memoriji a onda se kreira pointer *a na njega. dok ti sa (*a)[4] znaš dimenzije polja pa odmah rezerviraš prostor.


Citiraj:

Originally posted by akegalj
ps. mislim da ti je *(a+1) == a[1] kod tvojih primjera [/B]
Jasno, kad direktno pristupaš na adresu polja. Nisam htio da zbuni nekoga.

akegalj 19.01.2006. 22:44

Citiraj:

Originally posted by Andeo
NE, jer poljima nepoznate veličine ne možeš na taj način kreirati pointer. Prvo se polje kreira u memoriji a onda se kreira pointer *a na njega. dok ti sa (*a)[4] znaš dimenzije polja pa odmah rezerviraš prostor.
Kako god ti kazes, ali ja mislim da nije tako! Za sada cu se zadovoljjit ovim odgovorom.

Citiraj:

Originally posted by Andeo
Jasno, kad direktno pristupaš na adresu polja. Nisam htio da zbuni nekoga.
Uh sto nas ima zainteresiranih!:beer:

I mislim da ce mi dvodimenzionalna polja najvise trebati pa se zato i trgam tolko da ih potpuno razumijem! Dugo programiram(mada sam imao stanku 2 god) i znam kolko sam se zaj** sa dvodimenzionalnim poljima u drugim jezicima, a u kombinaciji s pokazivacima je stvarno elegantno!

Jos jednom hvala na svemu!:clap:

atha 19.01.2006. 22:57

Citiraj:

Originally posted by akegalj
Kako god ti kazes, ali ja mislim da nije tako! Za sada cu se zadovoljjit ovim odgovorom.

ako andeo tako kaze, onda je i tako. trust me on that one. ;)

akegalj 19.01.2006. 23:17

Citiraj:

Originally posted by atha
ako andeo tako kaze, onda je i tako. trust me on that one. ;)
nemoj se duriti sada...:rambo:

Andeo 20.01.2006. 08:34

Citiraj:

Originally posted by akegalj
Kako god ti kazes, ali ja mislim da nije tako! Za sada cu se zadovoljjit ovim odgovorom.

Glavno je da si se zadovoljio.:D ;)

Citiraj:

Originally posted by akegalj

Uh sto nas ima zainteresiranih!:beer:

Ma, katastrofa! Na ovome forumu se jednom mjesečno javi netko sa problemom i najviše dvije osobe odgovore. Mislim da je to loše za forum koji se zove pcEkspert.

Citiraj:

Originally posted by akegalj

I mislim da ce mi dvodimenzionalna polja najvise trebati pa se zato i trgam tolko da ih potpuno razumijem! Dugo programiram(mada sam imao stanku 2 god) i znam kolko sam se zaj** sa dvodimenzionalnim poljima u drugim jezicima, a u kombinaciji s pokazivacima je stvarno elegantno!

Jos jednom hvala na svemu!:clap:

Malo offtopic, čime se misliš baviti da toliko žudiš :D za dvodimenzionalnim poljima? Što se mene tiče, ja radim na programu za proračune termodinamike i slično,zapravo sve što šefu padne na pamet. :) Nego najčešče koristim pointer liste, to je stvar koja mi je najviše tebala a koju nisam baš poznavao kad sam se zaposlio. Nema dana kad ne kopam po njima. :)

atha 20.01.2006. 08:44

Citiraj:

Originally posted by Andeo
Ma, katastrofa! Na ovome forumu se jednom mjesečno javi netko sa problemom i najviše dvije osobe odgovore. Mislim da je to loše za forum koji se zove pcEkspert.

ovako ispadne kao da na cijelom forumu nema nikoga :D, a ustari na podforumu programiranje nema nikoga. ako postoji valjda par osoba koje se bave programiranjem, i sukladno tome, posjecnost ovom podforumu je takva. ;)

Andeo 20.01.2006. 09:00

Citiraj:

Originally posted by atha
ovako ispadne kao da na cijelom forumu nema nikoga :D, a ustari na podforumu programiranje nema nikoga.

Dobro, trebalo bi dodati prefix "pod" ispred "forum", neda mi se sada editirati... :D Uostalom, šta vi moderatori ne spavate ujutro, c c spamati možemo samo između 20h i 01h kad se svi napucavate u COD2-u. :D

Citiraj:

Originally posted by atha

ako postoji valjda par osoba koje se bave programiranjem, i sukladno tome, posjecnost ovom podforumu je takva. ;)

:rambo:
To ne znači da se ne može promijeniti taj omjer...;)

baraba 26.01.2006. 09:56

Pozdrav programerima i svima koji se tako osjecaju!
Ja kao temu za maturalni rad imam C i C++ . U C++ nisam nikada radio, tako da mozete ocekivati pitanja...
Koji kompjaler koristite?

giga 26.01.2006. 20:22

Eto da ne bude da nema zainteresiranih...idem neko vrijeme na tecaj pa sam jos totalni pocetnik pa ne bih htjeo sa glupim komentarima ispadati u javnost,ali redovito (iako je to rijetko jer nema) citam sve na forumu o c++-u...
Idem 3 mjeseca na tecaj(jednom tjedno),prosli smo onaj pocetak sa cout/cin i sl. ,petlje for,while,stringove,sada smo na pokazivacima za koje kaze covijek da su jako jako jako bitni...
Eh pa vidis njemu sam posalo pitanje u vezi necega evo mogu i vas pitati posto on radi pa bas ne stigne...vrlo je jednostavo,nisamo jos koristili clearscreen,clearline pa eto pitanja:

do {
cout << " Odabir [1-3]: " ; cin >> izborIntervala;
if ( (izborIntervala < 1) && (izborIntervala > 3) ) {
void ClearLine( int line ); --------GDJE MORAM TU UPISATI BROJ LINIJE KOJU ZELIM IZBRISATI,POKUSAVAM POLA URE ALI NEJDE,ZELIM IZBRISATI COUT << ODABIR[1-3]:
}
} while ( (izborIntervala < 1) || (izborIntervala > 3) );

Mislim da je jednostavno...samo jebga nejde...:D
Znaci forsiranje ispravnog unosa s time da ako se upise krivi broj treba izbrisati liniju a ne baciti opet u novi red....

FALA!

BTW Ja korisitim visual c++ i njegov compiler...

Black_Shark 28.01.2006. 11:22

Blago Vama .......
Bilo nas stotinjak upisanih ..
Prošlo ( dalo uvjet petnaestak )....
C dala trojica ...
C ++ ovogodišnji 1. rok izašla ta trojica - prošao nitko ...
Ja imam sreće . Nisam potrošio nijedan rok od prošle , a ni ove hrabrosti skupio nisam ....

.:clap:
Morat ču dati bar C , jer ako ne , apsolvent biti neću .....
I onda netko to voli i uživa u tome ??????
:clap: :confused: :confused:

giga 28.01.2006. 12:08

Citiraj:

Originally posted by Black_Shark
Blago Vama .......
Bilo nas stotinjak upisanih ..
Prošlo ( dalo uvjet petnaestak )....
C dala trojica ...
C ++ ovogodišnji 1. rok izašla ta trojica - prošao nitko ...
Ja imam sreće . Nisam potrošio nijedan rok od prošle , a ni ove hrabrosti skupio nisam ....

.:clap:
Morat ču dati bar C , jer ako ne , apsolvent biti neću .....
I onda netko to voli i uživa u tome ??????
:clap: :confused: :confused:

A cuj svatko ima svoje guste,iako se i meni mnoge cude ali zanimljivo je ako te zanima. Svaku stvar mozes rijesiti na puno nacina,ukljucis mozak,razmisljas ne znam mene dosta zanima,bas mi je zanimljivo to sta mozes recimo biti dosta kreativan i rijesiti sve na "bezbroj" nacina...
A cuj mene veseli nogomet pa netko kaze vidi 22 debila trce za loptom tako i to...

baraba 29.01.2006. 14:07

Meni je isto bilo slabo prije kad vidim hrpu onih simbola i nekakvih pravila, ali sam se sa vremenom privikao i cak zavoilo taj jezik. jos mi uvijek nisu bas jasne trodimenzionalna polja ili matrice (kao i hrpu toga ostaloga), ali bitno je da napredujem :gringo:

baraba 29.01.2006. 22:31

Evo sta mene zanima: kako u C-u napraviti da mi se program izvrsava u drugacijem prozorcicu osim onog standardnog (MS-dos oblika) i kako spojiti vise elemenata u program koji nisu napisanu u C-u kao sto su slike (.jpg) ili zvuk (mp3) ?
:confused:

Andeo 30.01.2006. 08:45

Citiraj:

Originally posted by baraba
Evo sta mene zanima: kako u C-u napraviti da mi se program izvrsava u drugacijem prozorcicu osim onog standardnog (MS-dos oblika)
Pa zavisi, ako hoćeš raditi Windows aplikaciju onda koristi WinApi32. Ako koristiš Visual studio samo startaj Win aplikaciju umjesto console, uključi zaglavelje "windows.h" te napiši WinMain (umjesto main) i WndProc funkciju(možeš ih i kopirati iz MSDN-a ali bolje je da sam to svladaš preko nekih tutoriala ili dobre knjige). Masu tutoriala imaš i na codeproject.com-u. Možeš i bez puno pisanja koristiti MFC aplikaciju.


Citiraj:

Originally posted by baraba
i kako spojiti vise elemenata u program koji nisu napisanu u C-u kao sto su slike (.jpg) ili zvuk (mp3) ?
:confused: [/B]
Opet zavisi šta radiš, u MFC-u možeš jednostavno ubaciti bitmape, uz malo kodiranja i .jpg. Možeš koristiti directX za zvuk(DirectSound) ili jednostavno svirati u pozadini mp3,... Za implementiranje nekoga formata u program u večini slučajeva morati češ sam kodirati ili koristiti neko open source rješenje.

akegalj 31.01.2006. 23:18

uf kolko se jos tu pricalo... nisam imao vremena pogledat ali vidim da su se ljudi zagrijali!:D

mozda prodjem dalje na zupanijsko iz infa, pa bih vas molio ako znate neki dobar link s algoritmima ili neku knjigu( po mogucnosti na hrvatskom jer treba i mome frendu). Ja imam od Sedgewicka iz 1990. pa sam mislio mozda nesto novije?!

ili mi mozete mailati ako imate na kompu...

10ks

giga 03.02.2006. 19:02

do {
cout << " Odabir [1-3]: " ; cin >> izborIntervala;
if ( (izborIntervala < 1) && (izborIntervala > 3) ) {
void ClearLine( int line ); --------GDJE MORAM TU UPISATI BROJ LINIJE KOJU ZELIM IZBRISATI,POKUSAVAM POLA URE ALI NEJDE,ZELIM IZBRISATI COUT << ODABIR[1-3]:
}
} while ( (izborIntervala < 1) || (izborIntervala > 3) );

Mislim da je jednostavno...samo jebga nejde...
Znaci forsiranje ispravnog unosa s time da ako se upise krivi broj treba izbrisati liniju a ne baciti opet u novi red....

Zar nitko nezna odgovor na ovo ili me svi ignoriraju...:D

Jas0n-X 14.02.2006. 22:50

Vidim da si i pito sto je to stack(stog) ??? Pa ako ti sto pomaze ... inace procesor koristi stack(stog) registar... to ti je memorija u koji privremen pohranjuje neki podatak , ali na nacin da ono sto prvo upise ,zadnje izlazi van... Zamisli neku usku cijev sa dnom na kraju... i ako untra stavljas recimo neke kuglice ( u slucaju registra , podatke), zadnju kuglicu koju si stavio mozes jedino prvu izvadit i tako ostale do posljednje ( prvu koju si ubacio)....
Mislim da bi ti trebalo bit jasnije....

marioxp 13.03.2006. 20:42

Nemam odgovor na pitanje koje je postavljeno ali me muci jedan problem koji se usko veze teme.
Pitanje je: kako vratiti iz funkcije dvodimenzionalno polje?
Imam dinamicki alocirano dvodimenzionalno polje koje bi trebali stvarati i koristiti neki drugi djelovi koda (bilo bi vise ovakvih polja) pa je zgodno to napraviti kao funciju).
Stvar je u tome da sam pocetnik i ne znam rijesiti problem, mislio sam to napravit kao member function pa ce mi se destructor briniti o brisanju ali neznam kako da vratim 2dimenzionlno polje iz funkcije?????
I jeli mi potreban copy constructor???

Dio koda cu postati:


int _tmain(int argc, _TCHAR* argv[])
{
int nslova=3;//broj slova s kojim se pravi usporedivac u konacnoj verziji ce se unositi "cin"
cout<<"upisi velicinu usporedivaca:"< cin>>nslova;
string DNA, primer;
DNA=("mariomariomariomariomariomariomario");
primer = ("mariomario");



string s2;
int sizeP = primer.size();
int stupaca = nslova+1;

char **polje; //dinamicka alokacija polja s pozivacem na pokazivac

polje = new char*[sizeP];
for (int i = 0; i < sizeP; i++) {


polje[i] = new char[stupaca + 1];
polje[i][0] = stupaca;
for (int j = 1; j <= stupaca; j++)
polje[i][j] = i + 1 + j / 100.; //ovo nemam pojma sta je ali tako je u knjizi
}
for(int i=0; i<(sizeP-(nslova-1)); i++) //formula (sizeP-(nslova-1)) je nuzna da ne izadje izvan
{ //polja a daje broj koliko ce se "usporedjica" napraviti
for (int j=0; j {s2 = s2 + primer[i+j];} //jer tako unosom varijable nslova mogu dobit potreban broj ponavljanja

for (int l=0; l {polje [i][l] = s2[l];} // ...od odozgor

s2.erase(); //"s2.erase();"ovo je potrebno da se string svaki puta ocisti jer bez brisanja
} //dolazi do nagomilavanja a ne da mi kida primer u male dijelove za usporedbu

for (int m=0; m<(sizeP-(nslova-1)); m++) //
{
for (int n=0; n {cout< cout< }
cout<

for (int i = 0; i < sizeP; i++)
delete [] polje[i];
delete [] polje;

system("PAUSE");
return 0;
}

baraba 13.03.2006. 22:24

Ako želiš odgovor na ovo pitanje, odi na www.code-it.net , registriraj se i na forumu postavi pitanje. Ljudi stvarno znaju i rado će ti odgovoriti.

akegalj 14.03.2006. 00:10

Citiraj:

Autor marioxp
[FONT="Arial"]
Pitanje je: kako vratiti iz funkcije dvodimenzionalno polje?

Ja sam pocetnik u c++ ali mislim da znam dovoljno da poblize objasnim ovo pitanje! Samo da znas nisam citao cijeli kôd koji si prilozio jer sam sada umoran, no ovako stoje stvari:
Prvenstveno dvodimenzjonalna polja se na neki nacin i ostvaruju preko pokazivaca na pokazivace!
npr. kada imas int *p[]={1,2,3,4,5}; ili char *p="Kidam nalijevo!";
=> tu ti je p pokazivac na polje(odnosno prvi clan polja) prirodnih brojeva ili znakova. Ono sto ce program napraviti jest naci slobodnu memoriju daovoljno veliku da smijesti taj objekat(polje 1,2,3,4,5 ili niz znakova "Kidam nalijevo");

e npr.e kada imas int *p[]={{1,2,3},{4,5,6},{7,8,9}};
ili char *p[]={"ponedjeljak","utorak","srijeda","cetvrtak"}
=> tu se radi o dvodimenzjonalnom polju. Nemoj da te zbuni sto je tu samo jedna zvjezdica jer ce recimo u drugom primjeru on stvoriti p koji pokazuje na polje pokazivaca na char. Znaci p je zapravo polje pokazivaca koji pokazuju na dane u tjednu : p[0] bit ce pokazivac na prvi dan, p[1] na drugi dan,...
dok p[0][0] ce biti 'p', p[0][1] ce biti 'o', p[2][0] ce biti 's',...

Bit ovoga je bio da ti pokazem da dvodimenzjonalno polje nije nista drugo nego pokazivac na pokazivac. Ako znas vratiti jednodimenzjonalno polje(pokazivac na to polje), tada ti je dvodimenzjonalno polje polje pokazivaca gdje svaki od tih pokazivaca pokazije na svoje jednodimenzjonalno polje(zapravo imas polje jednodimenzjonalnih polja)

Kada ti dinamicki alociras objekt(polje), siguran si da ga tvoj program nece automatski cistiti(ako koristis standardni c,c++), tako da onda mozes kao rezultat funkcije vratiti pokazivac na pokazivac sa return(odnosno vratis adresu pokazivaca na pokazivac.

npr.
char **nesto(){
char (*p)[10]=new char[][10];
/* sada tu nesto pametno radis
return p;
}

{char **k=0;
k=nesto();
}
=>nisam siguran ali ovo bi trebalo raditi! Nebudes li skuzio konkretno cu pogledati primjer koji si naveo pa cemo vidit( nemoj me uzeti za rijec da sam sve dobro napisao, teske su mi oci : flyingey )!

marioxp 14.03.2006. 21:14

Puno hvala uspio sam rijesiti problem!!!
Tako je to kada ne znas pitaj pametnije!

marioxp 18.03.2006. 21:05

Evo mene opet nije da mi se da pisati malo malo ali kada neznas rijestit drugo ti ne preostaje.
Stvari stoje ovako:
Prije sam se gnjavio oko vracanja dvodimezionalnoga polja iz funkcije, a sada sam zapeo na klasi.
Moja je zelja da napravim klasu koja ce alocirati dvodimenzionalno polje a onda da ce funkcija to polje puniti.
I sada nastaju problemi, mislio sam da je najbolje to polje napraviti u constructoru a brisati ga u destructoru. Nesto sam probavao ali neide mi.
Ne znam je li trebam copy constructor?
Pisem u visual c++ pa je kod podjeljen u par fileova pa neznam jeli sam bas u potpunosti dobro kopirao.

class SPLIT
{
public:
SPLIT(unsigned short int);
~SPLIT();
char**fpolje(int,int,int,string);
unsigned short int itsnslova;
string primer;
char **polje;

unsigned short int stupaca,sizeP;

};

SPLIT::SPLIT(unsigned short int nslova):itsnslova(nslova)
{
stupaca = nslova+1;
sizeP = primer.size();
polje = new char*[sizeP];
for (int i = 0; i < sizeP; i++)
{
polje[i] = new char[stupaca + 1];
polje[i][0] = stupaca;
for (int j = 1; j <= stupaca; j++)
polje[i][j] = i + 1 + j / 100.;
}cout<<"konstructor"< }
SPLIT::~SPLIT()
{cout<<"destructor"< for(int i=0; i {delete [] polje[i];}
delete [] polje;
cout<<"destructor"< }
char**SPLIT::fpolje(int sizeP,int stupaca,int nslova,string primer)
{
char **polje; //dinamicka alokacija polja s pozivacem na pokazivac
string s2;

polje = new char*[sizeP];
for (int i = 0; i < sizeP; i++)
{
polje[i] = new char[stupaca + 1];
polje[i][0] = stupaca;
for (int j = 1; j <= stupaca; j++)
polje[i][j] = i + 1 + j / 100.; //ovo nemam pojma sta je ali tako je u knjizi
}
for(int i=0; i<(sizeP-(nslova-1)); i++) //formula (sizeP-(nslova-1)) je nuzna da ne izadje izvan
{ //polja a daje broj koliko ce se "usporedjica" napraviti
for (int j=0; j {s2 = s2 + primer[i+j];} //jer tako unosom varijable nslova mogu dobit potreban broj ponavljanja

for (int l=0; l {polje [i][l] = s2[l];} // ...od odozgor

s2.erase(); //"s2.erase();"ovo je potrebno da se string svaki puta ocisti jer bez brisanja
}
return polje;

}

int _tmain(int argc, _TCHAR* argv[])
{
SPLIT thesplit(6);
thesplit.primer ="mariomario";
cout< cout< cout< char **k=0;
k=fpolje(sizeP,stupaca,nslova,primer);
cout<

cout<
system("PAUSE");
return 0;
}


(osnovna ideja koja zelim da rijesim s ovom klasom je da jednom petljom pravim stringove od jednoga velioga stringa i punim ih u jedno polje da ih mogu koristiti u drugoj funkciji koja ih usporedjuje s jednim velikim stringom: ovo pisem jer mozda ima netko imam bolju ideju)

Hvala na svim odgovorim a posebno konstruktivnima!


Sva vremena su GMT +2. Sada je 21:53.

Powered by vBulletin®
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
© 1999-2024 PC Ekspert - Sva prava pridržana ISSN 1334-2940
Ad Management by RedTyger