Forumi
Home Pravila i pomoć Članovi Kalendar Današnji postovi


Povratak   PC Ekspert Forum > Računala > Software > Web dizajn, programiranje i ostalo
Ime
Lozinka

Odgovori
 
Uređivanje
Staro 14.01.2006., 20:24   #1
akegalj
Registered User
 
Datum registracije: Jan 2006
Lokacija: Zagreb
Postovi: 23
Question 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!
akegalj je offline   Reply With Quote
Staro 16.01.2006., 09:20   #2
Andeo
Premium
Moj komp
 
Andeo's Avatar
 
Datum registracije: Nov 2005
Lokacija: Rijeka
Postovi: 455
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) = ...;
}
}
__________________
RABBITS CLAN
Andeo je offline   Reply With Quote
Oglasni prostor
Oglas
 
Oglas
Staro 16.01.2006., 15:02   #3
akegalj
Registered User
 
Datum registracije: Jan 2006
Lokacija: Zagreb
Postovi: 23
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!
akegalj je offline   Reply With Quote
Staro 16.01.2006., 16:02   #4
Andeo
Premium
Moj komp
 
Andeo's Avatar
 
Datum registracije: Nov 2005
Lokacija: Rijeka
Postovi: 455
#include <iostream.h>
#include <windows.h>
#include <TCHAR.h>
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..
__________________
RABBITS CLAN
Andeo je offline   Reply With Quote
Staro 18.01.2006., 00:18   #5
akegalj
Registered User
 
Datum registracije: Jan 2006
Lokacija: Zagreb
Postovi: 23
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
akegalj je offline   Reply With Quote
Staro 18.01.2006., 08:43   #6
Andeo
Premium
Moj komp
 
Andeo's Avatar
 
Datum registracije: Nov 2005
Lokacija: Rijeka
Postovi: 455
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.
__________________
RABBITS CLAN
Andeo je offline   Reply With Quote
Staro 19.01.2006., 22:44   #7
akegalj
Registered User
 
Datum registracije: Jan 2006
Lokacija: Zagreb
Postovi: 23
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!

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:
akegalj je offline   Reply With Quote
Staro 19.01.2006., 22:57   #8
atha
Moderator
Moj komp
 
atha's Avatar
 
Datum registracije: Jan 2005
Lokacija: Rijeka
Postovi: 9,067
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.
__________________
___________
HTPC: Intel Core2Duo E8500 × ATI Sapphire HD4670 HDMI × 2x 1GB DDR2 × Samsung 160GB ×
Lenovo Key+Mouse
× Philips 49PFS5501 LED TV × Technics SA-EH780 5.1 × Windows 10
Laptop1: Lenovo x100e w/Windows 10
atha je offline   Reply With Quote
Staro 19.01.2006., 23:17   #9
akegalj
Registered User
 
Datum registracije: Jan 2006
Lokacija: Zagreb
Postovi: 23
Citiraj:
Originally posted by atha
ako andeo tako kaze, onda je i tako. trust me on that one.
nemoj se duriti sada...
akegalj je offline   Reply With Quote
Staro 20.01.2006., 08:34   #10
Andeo
Premium
Moj komp
 
Andeo's Avatar
 
Datum registracije: Nov 2005
Lokacija: Rijeka
Postovi: 455
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.

Citiraj:
Originally posted by akegalj

Uh sto nas ima zainteresiranih!
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š 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.
__________________
RABBITS CLAN
Andeo je offline   Reply With Quote
Oglasni prostor
Oglas
 
Oglas
Staro 20.01.2006., 08:44   #11
atha
Moderator
Moj komp
 
atha's Avatar
 
Datum registracije: Jan 2005
Lokacija: Rijeka
Postovi: 9,067
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 , a ustari na podforumu programiranje nema nikoga. ako postoji valjda par osoba koje se bave programiranjem, i sukladno tome, posjecnost ovom podforumu je takva.
__________________
___________
HTPC: Intel Core2Duo E8500 × ATI Sapphire HD4670 HDMI × 2x 1GB DDR2 × Samsung 160GB ×
Lenovo Key+Mouse
× Philips 49PFS5501 LED TV × Technics SA-EH780 5.1 × Windows 10
Laptop1: Lenovo x100e w/Windows 10
atha je offline   Reply With Quote
Staro 20.01.2006., 09:00   #12
Andeo
Premium
Moj komp
 
Andeo's Avatar
 
Datum registracije: Nov 2005
Lokacija: Rijeka
Postovi: 455
Citiraj:
Originally posted by atha
ovako ispadne kao da na cijelom forumu nema nikoga , a ustari na podforumu programiranje nema nikoga.
Dobro, trebalo bi dodati prefix "pod" ispred "forum", neda mi se sada editirati... 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.

Citiraj:
Originally posted by atha

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

To ne znači da se ne može promijeniti taj omjer...
__________________
RABBITS CLAN
Andeo je offline   Reply With Quote
Staro 26.01.2006., 09:56   #13
baraba
Software developer
Moj komp
 
baraba's Avatar
 
Datum registracije: Oct 2005
Lokacija: ZG
Postovi: 47
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?
baraba je offline   Reply With Quote
Staro 26.01.2006., 20:22   #14
giga
Tlacitelj i neznalica
Moj komp
 
giga's Avatar
 
Datum registracije: Dec 2003
Lokacija: Rijeka
Postovi: 1,868
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...
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...
__________________
Tko nema ni jednog prijatelja ide kao stranac po zemlji.
giga je offline   Reply With Quote
Staro 28.01.2006., 11:22   #15
Black_Shark
Premium
 
Datum registracije: Oct 2005
Lokacija: pula
Postovi: 42
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:
Black_Shark je offline   Reply With Quote
Staro 28.01.2006., 12:08   #16
giga
Tlacitelj i neznalica
Moj komp
 
giga's Avatar
 
Datum registracije: Dec 2003
Lokacija: Rijeka
Postovi: 1,868
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...
__________________
Tko nema ni jednog prijatelja ide kao stranac po zemlji.
giga je offline   Reply With Quote
Staro 29.01.2006., 14:07   #17
baraba
Software developer
Moj komp
 
baraba's Avatar
 
Datum registracije: Oct 2005
Lokacija: ZG
Postovi: 47
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
baraba je offline   Reply With Quote
Staro 29.01.2006., 22:31   #18
baraba
Software developer
Moj komp
 
baraba's Avatar
 
Datum registracije: Oct 2005
Lokacija: ZG
Postovi: 47
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:
baraba je offline   Reply With Quote
Staro 30.01.2006., 08:45   #19
Andeo
Premium
Moj komp
 
Andeo's Avatar
 
Datum registracije: Nov 2005
Lokacija: Rijeka
Postovi: 455
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.
__________________
RABBITS CLAN
Andeo je offline   Reply With Quote
Staro 31.01.2006., 23:18   #20
akegalj
Registered User
 
Datum registracije: Jan 2006
Lokacija: Zagreb
Postovi: 23
uf kolko se jos tu pricalo... nisam imao vremena pogledat ali vidim da su se ljudi zagrijali!

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
akegalj je offline   Reply With Quote
Staro 03.02.2006., 19:02   #21
giga
Tlacitelj i neznalica
Moj komp
 
giga's Avatar
 
Datum registracije: Dec 2003
Lokacija: Rijeka
Postovi: 1,868
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...
__________________
Tko nema ni jednog prijatelja ide kao stranac po zemlji.
giga je offline   Reply With Quote
Staro 14.02.2006., 22:50   #22
Jas0n-X
Premium
 
Jas0n-X's Avatar
 
Datum registracije: Jan 2006
Lokacija: Varazdin
Postovi: 30
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....
__________________
\m/ (Oo) .!. Ownage
Jas0n-X je offline   Reply With Quote
Staro 13.03.2006., 20:42   #23
marioxp
Premium
 
marioxp's Avatar
 
Datum registracije: Feb 2004
Lokacija: Croatia
Postovi: 36
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:"<<endl;
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<nslova; j++) //for petlja je skraceni oblik pisanja [i+1] + [i+2] +....
{s2 = s2 + primer[i+j];} //jer tako unosom varijable nslova mogu dobit potreban broj ponavljanja

for (int l=0; l<stupaca; l++) //upisuje stringove s2 u "polje". "l" petlju svaki puta vrti a "i" koristi...
{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<stupaca; n++)
{cout<<polje[m][n];}
cout<<endl;
}
cout<<primer<<endl;


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

system("PAUSE");
return 0;
}
__________________
mario
marioxp je offline   Reply With Quote
Staro 13.03.2006., 22:24   #24
baraba
Software developer
Moj komp
 
baraba's Avatar
 
Datum registracije: Oct 2005
Lokacija: ZG
Postovi: 47
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.
baraba je offline   Reply With Quote
Staro 14.03.2006., 00:10   #25
akegalj
Registered User
 
Datum registracije: Jan 2006
Lokacija: Zagreb
Postovi: 23
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 )!
akegalj je offline   Reply With Quote
Staro 14.03.2006., 21:14   #26
marioxp
Premium
 
marioxp's Avatar
 
Datum registracije: Feb 2004
Lokacija: Croatia
Postovi: 36
Puno hvala uspio sam rijesiti problem!!!
Tako je to kada ne znas pitaj pametnije!
__________________
mario
marioxp je offline   Reply With Quote
Staro 18.03.2006., 21:05   #27
marioxp
Premium
 
marioxp's Avatar
 
Datum registracije: Feb 2004
Lokacija: Croatia
Postovi: 36
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"<<endl;
}
SPLIT::~SPLIT()
{cout<<"destructor"<<endl;
for(int i=0; i<sizeP; i++)
{delete [] polje[i];}
delete [] polje;
cout<<"destructor"<<endl;
}
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<nslova; j++) //for petlja je skraceni oblik pisanja [i+1] + [i+2] +....
{s2 = s2 + primer[i+j];} //jer tako unosom varijable nslova mogu dobit potreban broj ponavljanja

for (int l=0; l<stupaca; l++) //upisuje stringove s2 u "polje". "l" petlju svaki puta vrti a "i" koristi...
{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<<thesplit.itsnslova<<endl;
cout<<thesplit.stupaca<<endl;
cout<<thesplit.sizeP<<endl;
char **k=0;
k=fpolje(sizeP,stupaca,nslova,primer);
cout<<k[3]<<endl;


cout<<thesplit.primer<<endl;

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!
__________________
mario
marioxp je offline   Reply With Quote
Oglasni prostor
Oglas
 
Oglas
Odgovori



Pravila postanja
Vi ne možete otvarati nove teme
Vi ne možete pisati odgovore
Vi ne možete uploadati priloge
Vi ne možete uređivati svoje poruke

BB code je Uključeno
Smajlići su Uključeno
[IMG] kod je Uključeno
HTML je Isključeno

Idi na