Forumi


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: 8,918
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: 8,918
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,867
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,867
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