četvrtak, 28. veljače 2008.

CLR ,polja,osnove-nastavak!

Ovi programi prikazuju funkciju Sort()..........







Ovo je samo nastavak poglavlja o poljima u CLR-u kao novi post ali nastavak staroga.
U ovim programima pokušajte sami malo dokučiti o čemu se radi i uočite kako je jednostavno u CLR-programiranju jednostavno koristiti funkciju Sort() koja sortira elemente polja i naravno ono malo kompliciranije je {ime_polja,3,2} što u biti znači da sortiranje počinje od trećeg elementa i ide po dva .Malo proučite ,objašnjenje slijedi.Naravno kad obradimo C++/CLI osnove naravno,krenuti ćemo s WindowsForms osnove koje naravno koriste CLR programski kod !Tek nakon toga krenuti ćemo na DLL-ove.

Objašnjenje programa...osnove...kratko.

Sortiranje jednodimenzionalnog polja u CLR-u.
Tu funkciju radi jako dobro i elegantno funkcija Sort() pripadnica klase Array.
Naravno i pristup toj klasi i funkciji se piše preko dvotočki:Array::Sort().
Na taj način pozivajući funkciju Sort() i navodeći argumente unutar zagrada mi sortiramo prije definirano polje int tipa.

Za ispis koristimo također elegantnu :
for each---petlju koja pregledava svaki broj i stavlja ga na svoje mjesto po veličini ,nama preostaje jedino ispis!
Drugi program radi sve isto kao i prvi samo što kreće od mjesta koje smo zadali prvo unutar vitićastih zagarda i pregledava onoliko mjesta koliko smo stavili u broj koji je drugi unutar vitićastih zagrada!
Naravno ,sortirani brojevi sad drugačije izgledaju ali to je zbog tog našeg zahtjeva!
Sad malo pobliže treći program koji nam vrši sortiranj po imenima i brojkama.
Prvo smo definirali naše polje String niza i char tipa a zatim polje s brojkama tj.visinom int tipa.
Sad to treba povezati!
U biti mi ništa ne povezujemo nego samo radimo ispis s dvije petlje koje smo prilagodili da izgledaju tako jedna ispod druge ,a dva puta smo primjenili for each petlju i dva puta ispis i eto ime i visina dotične osobe je pokazano zajedno.
Vidite sad smo obradili funkciju Sort() klase Aray.

U slijedećem programu ćemo pretraživati polje da bi našli točno određen broj i na kojem je mjestu....to za nas radi također funkcija pripadnica klase Array
.... a to je BinarySearch() funkcija!

Napomena je da ta funkcija traži broj i nalazi ga ako je polje već prethodno sortirano...kasnije ćemo poraditi na nesortiranom polju koje prvo treba sortirati.Također i u ovom programu je primjenjen zhtjev da se trži od određenog mjesta i koliko mjesta da se pretraži.Probajte to izmjeniti i pogledajte što se dešava.Također ,zbrišite komentare od druge funkcije a stavite znak komentara na funkciju koja je sad aktivna i tako malo kombinirajte i vježbajte. Iščitavanje broja koji nam treba ide preko if else uvjeta i kad su oni zadovoljeni i program se izvršava.

Sad u ovom programu objedinjujemo dvije funkcije,pogodite koje , malo ga proučite!

Detaljnije objašnjenje slijedi.
Program radi tako da smo objedinili dvije funkcije ,Sort() i BinarySearch.
Prvo smo napravili dva polja koja odgovaraju jednop drugom,imena i visine !
Zatim smo napravili treće polje koje je polje koje želimo da bude novo a u njemu su imena koja tražimo i neka nova imena koja zelimo naći kao i stara imena koja tražimo,tj. to polje je puno imena koja želimo naći!
Prvo pozivamo funkciju Sort() ;
Ta funkcija prvo uređuje naša dva polja slažući imena s visinama po redu kako jedno drugome odgovara i tek onda idemo na slijedeći korak.
Prvo moramo deklarirati objekt u koji ćemo spremati rezultate i najbolje je odmah inicijalizirati na nulu kao početnu vrijednost.
Zatim oformimo petlju for each kojom prolazimo kroz naše novo polje (treće) ime po ime i dok tako prolazimo ime po ime ,imamo funkciju traženja koja svako ime traži s njegovom pripadajućom visinom i sprema u objekt(gotovo) ili kako kasnije vidite naše novo polje.
Zbog if- else uvjeta to se polje ispisuje na ekran onako kako mi želimo i povežemo s našim traženjem. Vidite da smo polje mogli tako pretražiti jer smo prije for petlje primjenili funkciju Sort() koja je stvorila jedinstveno polje s povezanim imenima i visinom i na taj način smo mogli sve zajedno pretražiti i ispisati na ekran pomoću funkcije traženja i naših uvjeta.Proučavajte logiku programa i vježbajte što više s logikom ispisa.
Slijedi rad s višedimenzionalnim poljima u C++/CLI CLR programiranju!

No,prije toga još jedan mali program koji nam može pokazati kako da umetnemo neko novo ime i povećamo naše polje a da ne remetimo ništa unutar samog polja.Tu se susrećemo s bitovnim operatorom ~ koji ima taj oblik i dobijete ga s AltGr + 1(kod mene).O tom operatoru ću nešto više reći kad budemo govorili o destruktorima,zasad on nam nalazi mjesto gdje možemo umetnuti novo ime koje želimo staviti unutar polja imena i naravno tad možemo stvoriti sasvim novo polje primjenjujući alokaciju gcnew,na taj načim smo i proširili naše polje za još jedan čljan koji smo umetnuli na položaj koji smo saznali pomoću ~ operatora.Na kraju taj položaj i ime iščitavamo da bi se uvjerili da je na tom položaju.Ono što nisam sad objasnio ,objasniti ću tokom daljnjeg izlaganja o poljima.Proučavajte program,smislite nešto novo i vi sami!!!

...ova slika ovdje se dobije kad skinete komentare s imena=nullptr a želite iščitati nepostojeće polje koje ste u biti zbrisali.
Ovdje iščitivamo samo novo_polje tj ime koje je dodano....a ona prva može čitati oba polja jer je imena =nullptr u komentaru i zato još uvijek postoji i to polje!!!!Ako želimo da ne postoji a time i memoriju oslobodimo tad napišemo imena = nullptr; !!!!!!!!!!
Eto malo proučavajte i taj program i uvidjet ćete logiku svih naredbi i rada s jednodimenzionalnim poljima ,naravno same osnove!!!!!!!!!

Višedimenzionalna polja i rad s njima.....želim to što bolje i razumljivije prikazati ,zato ćemo se i malo više zadržati na ovom poglavlju.
Sad krećemo s višedimenzionalnim poljima koja se malo i razlikuju od takvih polja u C++ nativnom programiranju.Prvo ,ćemo ispisati program jer mislim da će biti lakše tako objašnjavati ,ispišite ga u editor koda i pokrenite.U CLI programiranju vi možete napraviti do 32 dimenzije polja,to je dovoljno za većinu programa koji se pišu.Ja ću pokušati objasniti rad s njima ,osnove,kako se pišu i kako se išćitavaju,postupak je uglavnom isti a vi kad uđete u „štos“ vidjet ćete da i nije tako teško.Samo naravno treba vježbati i vježbati!

...objašnjenje slijedi ...a dimenzije polja određujemo unutar < > tih zagrada na početku programa...naša dimenzija je dva ! Znači dvodimenzionalno polje.Znači naše polje koje smo stvorili može sadržavati dvadeset elemenata!Naravno i ispis je malo drugačiji nego u nativnom c++-u ,ali uglavnom kad jednom uđete u "štos" ispisa ,vjerujte da nije teško.Također bez obzira na ovo vi morate ipak znati rad s petljama i svim aspektima iščitavanja petlji iz nativnog kodiranja,tako je puno lakše shvatiti što dalje slijedi.Sve to imate u tutu o osnovama programiranja.Sami vidite da nema jednog indeksa pomoću kojeg iščitavamo red po red nego dvije petlje ,vanjska i unutrašnja koja svaka ima svoj zadatak.Petlje iščitavaju red po red .Vi na taj način možete postaviti do 32 dimenzije iščitavanja!U slijedećem primjeru moći ćemo malo bolje sve aspekte ispisa objasniti.
Evo programa koji nam prikazuje tablicu a napravili smo je s dvodimenzionalnim poljem.Proučavajte je malo i uvidjet ćete logiku ispisa i kreiranja tablice pomoću for petlji i sama sruktura te tablice je jednostavno nastala slažući petlje!

Normalno ovo iznad je jedan program,spojite to u editoru.
Ovo je kad izvršite program ,a objašnjenje slijedi.
Prije nego krenem objašnjenje ovog programa pogledajte još jedan manji program pomoću kojeg možemo vidjeti koliko elemenata višedimenzionalno polje može i primiti.Malo proučite ispis koda i vidite kako je jednostavno,kao da naredite "sad mi pokaži dužinu ili broj elemenata!" pomoću naravno Length !!!!!



Slijedi opet objašnjenje programa prije ovog s dužinom polja:

Višedimenzinalna polja:
Prvo stvaramo dvodimenzionalno polje slijedećim izrazom:

const int VELICINA= 12;
array <> ^ pro = gcnew array <> (VELICINA,VELICINA);

(naravno ovdje između uglatih zagrada poslije array stoji; int,2 između <>^)
Prva linija je konstanta tipa int koja se odnosi na dimenzije našeg dvodimenzionalnog polja.Koliko svako polje ima elemenata.Koristiti ćemo isto ime jer je broj isti.
Druga linija nam govori da smo stvorili dvodimenzionalno polje i uvijek se tako definira ,prvo tip pa zarez pa broj dimenzije i hat poslije kose-uglate zagrade.Zatim slijedi tj.slijede petlje koje vanjska i unutrašnja pomoću koje (vanjska )prolazimo kroz redove, a (unutrašnja) kroz stupce. I naravno izračun koji se pokazuje za svaki broj jer se nalazi u unutrašnjoj petlji-ponoviti petlje u petlji!!!Sve što slijedi dalje nam je stvaranje tablice i uočite da kad smo stvorili taj okvir od linija ,prije zadnje crte koja sve podvalči,pišemo ovu petlju:

for(int x = 0;x < VELICINA;x++)
{
Console::Write(L"{0,3} ",x+1);//ovdje se ispisuje vodoravni niz brojeva


for(int y=0;y < VELICINA;y++)
Console::Write(L"{0,3} ",pro[x,y]);//ovdje za svaki broj vodoravno niz okomitih
Console::WriteLine();//ali kao rezuzltat umnoska dva broj ,to jr napisano u

}//u petoj liniji main programa

Pomoću te petlje je ispis one dvije petlje na početku
programa,vanjska i unutrašnja i tako smještamo brojeve unutar naše tablice koju smo stvorili.Nije teško shvatiti ovaj kod i njegov ispis jer u biti se radi o slaganju svega u jedinstveni oblik tablice.Mijenjajte kod malo ,neke izmjene napravite s ispisima i vidjet ćete kako sve funkcionora.I na taj način se uči!
Program koji se odnosi samo na zaključak o dužini sami proučite jer biti će sličnih zaključaka pa da se ne vraćam.
Sad slijede programi koji se većinom bave riječma u poljima ,i poljima koja sadrže polja kao svoj element.Zvuči i izgleda možda komplicirano ali nije toliko,samo na prvi pogled.

utorak, 26. veljače 2008.

CLR dinamička alokacija,polja,osnove!

Dinamička alokacija memorije malo je drugačija u CLR programiranju jer nema operatora delete jer nam nije potreban,CLR ima svoju posebnu „heap“ memoriju kojom automatski upravlja i održava čistom jer ima tkz. "garbage collection“ u koju sprema sve objekte koji se ne koriste više i briše ih , oslobađa memoriju .Tako mi više ne moramo brinuti o tkz. „memory leaks“, curenju memorije ,i garbage collection je koš za otpatke doslovno prevedeno jer sam program prati objekte i kad se više ne koriste jednostavno ih baca u koš i briše(oslobađa memoriju).Sad naravno postavlja se pitanje kao to radi,kako on zna kad je memorija višak i sl.
To radi sličnim postupcima kao i pokazivači u nativnom c++-u ali ima velike razlike ,pokazivači mogu mijenjati adrese i zato smo morali specifično koristiit delete operator ali u C++/CLI programiranju gdje se koristi CLR programiranje ulogu koja je slična pokazivačima ima tkz.tracking handle ili samo handle operator koji nosi oznaku ^ „hat“ iliti šešir koji je oznaka za heap u CLR-u tj. s njim CLR prati sve što se dešava s objektom i naravno kad nije potreban briše ga zahvaljujući tracking handle ^ hat oznaci(operatoru).Nad njime nije moguće vršiti aritmetičke operacije niti castanja.Prije toga moramo izvršiti derefernciranje,eto to je zjaedničko s pokazivačima,to jest pokazivač ali s posebnim ulogama praćenja !To naravno omogućava CLR !!!! Svi objekti koji su članovi klase moraju imati svoj šešir ili hat ili ^ taj znak !!! Naravno imamo u CLR- u i new deklaraciju i naravno zbog automatskog brisanja nemamo delete i zato new ima drugačiji oblik a to je gcnew gdje gc znači koš za otpatke (garbage collection) tako programu dajemo na znanje da smo izvršili alokaciju .Molim ponoviti dinamičku alokaciju u tutu za početnike i polja!Ja sam pojednostavio objašnjenja i vjerujte ako i ovako shvatite o čemu se radi tada ste samo naravno osnove svladali i sad možemo na programe i sve ovo što sam napisao pretvoriti ćemo u programe!




int^rezultat =nullptr;
Znači ovdje smo upotrijebili handle i definirali i deklarirali varijablu rezultat ali nismo je dereferencirali.Zbog toga se program uspješno izvršava i dodjela nullptr je stavljanje varijable na nulu CLR heap memorije.Ako stavimo nulu opet dobro,ali nullptr ne ide s *rezultat(dereferenciranjem) ,*rezultat u tom obliku ide s int^rezultat = 0;
Ako samo napišemo int^rezultat;
tad se neće niti jedan neće program izvršiti jer je potrebno definirati varijablu osim deklaracije jer CLR program sam upravlja s dinamičkom memorijom preko tracking handle ^ !
Probjate sad malo proučavati program koji je gore napisan i uklanjati komentare a stavljati ih tamo gdje treba i u biti sparivati ispise,pokušavajte ,vježbajte i antaj način se i sami učite i duže zadržavate na programu,ja sam ga dovoljno objasnio da bit shvatite,dalje sami sebe učite,tako je dobro za vas.

String^ rezultat = L"Evo sad malo i pisanja recenice tj deklariranja i definiranja!\n\n";
Console::Write("{0}\n",rezultat);

Ovo je zadnji dio koda koji nam pokazuje rad s klasom string ali radi se o wchar_t objektu rezultat koji pripada klasi String.Sve drugo u kodu stavite kao komentare i samo taj kod izvršite i to je to,proučavajte te primjere i vježbajte.


Ovdje u ovom programu prelazimo već na rad s poljima u CLR-u i garbage collector!
Malo proučavajte ovaj program i načine ispisa i deklariranja polja i nova naredba gcnew koja ima ulogu kao i new u native c++ programiranju ali zbog koša za smeće nam ne treba delete naredba jer se u C++/CLI programiranjnu sam program brine za to jer imamo handle metodu praćenja svakog deklariranom i definiranom objektu!Proučite i petlju tj.petlje pomoću kojih čitamo naša polja i u prvom čitanju polja takav je rzultat jer mi u biti radimo s objektima i program nam pokazuje kojem tj.kojoj klasi pripada objekt!U slijedećem programu ću detaljnije objasniti petlje u CLR-u i indeksiranje tj. označavanje objekta da bi ga pročitali pomoću petlje .
Index pomoću kojeg čitamo elemente ili objekte polja nazivamo i iterator ali o tome kasnije.Naravno deklaracija polja u CLR-u ide s ključnom riječi array zatim tip polja između <> tih zagrada ,zatim "hat" ^ i ime našeg polja!!!! To je uobičajena deklaracija u C++/CLI programiranju.Znači u svakom imenovanju objakta moramo primjeniti i označiti s handle hat!!!Još detaljnija objašnjenja slijede ako vam ovo nije bilo jasno.




for (x=0;xLength;x++)

Length
je ključna riječ u CLR-u i označava duljinu a operator -> je operator pristupa ili slično pokazivaču ali da bi ga primjenili u programu taj operator mora biti član neke klase ili objekta koji sadrži elemente na koje može pokazivati.Mi smo taj operator primjenili umjesto x<=3; ,a Lenght nam je dužina polja.Znači taj operator uglavnom primjenjujemo kad radimo s nečim što sadrži članove ili elemente,u našem slučaju polja.To je isto kao da smo u nativnom programiranju pokazali na neki element pomoću pokazivača koji nam pokazuje na taj element .Kasnije u daljnnjem tijeku ove stranice biti će više o tome.Normalno da će se veliki programeri ljutiti na ovakva moja objašnjenja ali nigdje nisam našao takva objašnjenja bez velikih filozofiranja i matematičkih formula jer valjda u tome uživaju oni koji na taj način žele nešto nekome približiti misleći da je to jednostavno i omalažavajući druge jer ,eto oni su veliki programeri koji pišu li ga pišu i na kraju se izgube u svemu tome ..možda se i ja izgubim ali to mi nije namjera kao ni da previše kompliciram.Ako "veliki umovi" i misle da je ovo besmislica ,neka sami pišu jednostavne knjige ali vjerujte neće ,jer treba normalnim ljudima uzeti što više novaca za knjige.Pišem ove tutorijale ponukan nekim osobama koje uglavnom uče iz javnog pristupa internetu i onima koji to žele naučiti i nadam se da mi ljudi dobre volje ne zamjeraju jer mi je već dosta kritika tkz."intelektualaca" a od normalnih ljudi, i ljudi koji nisu puni sebe primam zahvale ,a vjerujte da mi to više znači od svega.Eto mala digresija.Nastavljamo. CLR polja
U ovom programu ćemo vidjeti kako iščitavamo polje koje je zadane veličine, a elementi polja se popunjavaju slučajnim odabirom pomoću objekta Random koji je naravno pod handle heap označen i sadrži funkciju koja nam slučajne brojeve određuje unutar raspona 0.0 i 1.0 , i kad to pomnožimo s 100 dobijemo slučajnie brojeve unutar brojke sto tipa double: to radi funkcija NextDoouble(), tu funkciju naravno sadrži Random objekt. Prvo naravno deklariramo i definiramo polje:
array^ primjer = gcnew array(50);

…zatim kad smo odredili veličinu polja odredimo i slučajne brojeve:

Random^ sluc_broj = gcnew Random;
for (int x =0;xLength ;x++)
primjer[x] = 100.0*sluc_broj->NextDouble();
//izlaz na cmd
Console::WriteLine(L"Polje sadrzi slijedece vrijednosti : ");
for (int x =0;xLength;x++)
{
Console::Write(L"{0,10:F2}",primjer[x]);
if((x+1)%5 == 0).

...naravno s već spomenutom funkcijom NextDouble() i u petlji smo upotrijebili -> Length kao dužinu našeg polja i rarspon slučajnih brojeva naravno unutar 100.0 . Sad ispis je malo dugačiji jer smo unutar for petlje naredili računalu da nam deset linija razmaka radi ,i u if uvjetu svaki peti se ispisuje zbog %5 izraza naravno i tako editiramo naš ispis na ekranu u pet redova .Mijenjajte malo vrijednosti ,igrajte se i shvatite logiku, naravno ponovite slučajne brojeve iz tuta za početnike i usvojite nove naredbe iz CLR-a i tako polako C++/CLI programiranje ne mora biti teško. Zaboravih napomenuti da smo zbog F2 namjestili da nam se double vrijednosti ispisuju na dvije decimale.Ponovite sve dosad također o CLR programiranju i ispis bi vam trebao biti jasan. Sad,nam ostaje još zadnji dio koji nam ispisuje maksimalnu vrijednost unutar našeg polja.

To pogledajte uvećavajući sliku i u ispisu primjetite kako smo došli do maksimalne vrijednosti u našem ispisu slučajnih brojeva.







O
bjašnjenje zadnjeg dijela programa slijedi ,mali problemi s blogom.
double max = 0;
for each(double broj in primjer)
if(max < broj)
max = broj;
Console::WriteLine(L"Maksimalna vrijednost u polju je:\n");
Console::Write(L"broj {0:F2}" , max);Console::WriteLine("\n");
Prvo naravno deklaracija i postavljanje na nulu , zatim for each petlja ,uvijet if nam u biti radi našu usporedbu i kad je petlja gotova spremimo broj u max i to ispisujemo ,vidite kako smo napisali ispis,vi ga izmjenite kako vama paše.Za određivanje maksimalne vrijednosti mogli smo upotrijebiti običnu for petlju,vi napravite kako vama paše.

double max = 0;
int pokazatelj = 0;
for(int x = 0;x <> Length;x++)
if(max < primjer[x])
{
max = primjer[x];
pokazatelj = x;
}
Naravno vi ispisujete pokazatelj.Ovo je početak rada s poljima u CLR-u.







četvrtak, 21. veljače 2008.

apsolutni početak u visual c++ -u

Kako je i navedeno u naslovu krenuti ćemo od početka i pisati jednostavne programe u CLR projektu da bismo prikazali i objasnili sve od samih početaka C++/CLI programiranja koje se razlikuje od nativnog programiranja ,koristi CLR i naravno spada u "managed code" prije spomenuto u video tutorijalu !Zbog toga je i pisanje koda malo drugačije ,naravno ići ću korak po korak jer tako sam i sam učio,a kome to smeta što počinjem tako iz početka ,neka se strpi i sačeka jedno vrijeme,jer Windows forme i DLL-ovi će tek na kraju biti.Pisati ću što jednostavnije i bez komplikacija kao i dosad u prošlom tutorijalu jer smatram da ne treba mutiti vodu tamo gdje ne treba jer onda ni sami ne znamo gdje smo.Vi ćete ionako poslije tutorijala sami zaključiti i prijeći na puno kompliciranije programe.Napominjem da i ovi programi pisani na ovim stranicama također nisu za profesionalnu uporabu nego isljučivo za učenje!Naravno sve to možete naći na netu ako se potrudite, i na službenim stranicama Microsoft-a zaduženim za programske jezike !CLI znači Cmmon Language Infrastructure -standard što je Microsoft-implementacija(prikaz) CLR-a,zanči isto ISO/ANSI standard ali proširen i objavljen 2003.god!To je samo ukratko o tome i smatram ako vas zanima više o tome idite na službene stranice,adresa je u prijašnjem postu! Ovo je bio mali predgovor.


A sad možemo prijeći na učenje.
Malo bih se osvrnuo na tipove podataka u C++/CLI koji su također isti ili slični i u Native programiranju ali ima proširenja koja su vrlo bitna za CLR programiranje i koja obuhvaćaju isti navod tip int kao i u "običnom" c++-u gdje je to varijabla a u CLR programiranju tip int može značiti i objekt . Zatim,C++/CLI ima svoj vlastiti ispis koji ga razlikuje od uobičajeno cout i endl u C++-u! Sve to ćemo polako ali sigurno objašnjavati dok napredujemo. Tkođer osim tipova koji su prisutni u c++-u CLR posjeduje i dvije "nove" definicije int tipa :

long long (8 bita) raspon 0d 9,223 372 036 854 775 808 do 9, 223 372 036 854 775 807

unsigned long long(8 bita) raspon od 0 do 18 446 744 073 709 551 615

a u samom programu se mogu deklarirat kao :
long long veliki = 456789LL----ovo LL nam govori o čemu se radi!

a unsigned long long ima na kraju ULL umjesto LL .

Prije sam napomenuo da varijable u C++/CLI programiranju osim što mogu djelovati kao i varijable one mogu raditi i kao objekti jer pripadaju System namespace kao klas tip koji je u tom namespace definiran !Pnovite iz tuta za početnike o pojmu namespace i kako označavamo pripadnost pojedinom namespace-u! To nam omogućava da s varijablama radimo kao i s objektima, što je već jedna velika prenost u C++/CLI programiranju! Sad slijedi tabela koja nam pokazuje tipove onako kako se pišu u programu, koliko memorije zauzimaju i novo, kojem System namespace-u pripadaju !!
U pisanju koda služit ću se običnim (uobičajenim deklariranjem tipova) pisanjem kao i u standardnom ISO/ANSI programiranju s time da sad znate da mogu imati i druge uloge u proširenoj verziji ISO/ANSI tj. C++/CLI programiranju!!!Nadam se da vam je sad jasnije sve oko ISO/ANSI i C++/CLI i CLR pojmova. Slijedi kratka tbl. jer samo najosnovnije tipove navodimo.














Naravno da bi vidjeli malo bolje,kursor na sliku i dvokllik. Sad vidimo kako u C++/CLI programiranju možemo koristiti tipove kao obične varijable ,ili kao objekte,ovisi o vrsti programa koji radimo! Zato i kad pišemo kod ,pišemo ga slično kao i u "običnom" c++-u











kao int broj = 20;
ili
double broj = 20.4;











..a možemo i :











System::Int32 broj = 20;











Ja ću se držati "običnog" pisanja deklaracije varijabli ili objekata.
Sad nam slijedi prvi CLR program.














Prvo naravno idete na new project -->odaberete c++ kao jezik i CLR i desno --> CLR ConsoleAplication,upišete ime svog projekta i klik na ok . Zbrišite ono s pozdravnom porukom jer ćemo upisivati novi kod.










Pvo nam je linija int main koja je genrirana od strane Visual Studia i naravno govori nam koji raspon ispisa će biti na ekranu,o tome kasnije,zasad neka ostane tako i naravno svi programi kao i u "običnom" c++-u moraju imati main () funkciju!!!
Slijedeće ,deklaracija int tipova koji nam trebaju u programu.
Sad ,izraz koji naređuje ispis na ekran je:










Console::WriteLine() .....to je funkcija koja je definirana u Console class(razredu) u System namespace-u.










Tako da Console class predstavlja standardni I/O (input/output) koji komunicira s tipkovnocom i CMD-om. A WriteLine je narvano zbog onih dvotočki pripadnik Console class kao njena funkcijska članica i zbog onoga Line i oblika WriteLine prelazi automatski i u novi red!Za razliku od Write () funkcijske članice koja to sve ostavlja u jednom redu (nema prelaska u novi red)...ono slovo L na početku govori o dužini tj.da će nam string niz tj.svaki znak u nizu zauzimati dva bajta! Kao što ste i primjetili ispiše se sve unutar zagrada ,a Write funkcija poziva rješenja kad se napiše u tom obliku i u istom redu Write(ime)-->poziv na ispis !Koristim i \n kao prelazak u novi red što znači da CLR tj. C++/CLI prihvaća i sve ono kao i u "običnom" c++ ali ne i cout i endl.











Još jedan izraz je novi ,a predstavlja način na koji se funkcija WriteLine može prilagoditi i ispisati ono što želimo na ekranu:










Console::WriteLine(L"Imamo sad {0} laptopa!\n\n",laptopi_broj2);










Tim ispisom govorimo računalu da ispiše prvi unos {0} koji smo naveli u zagradama...vidite radi se o poštivanju rasporeda,tako u slijedećim linijama koda malo proučite takav ispis i vidite da se radi o poštivanju svega što navedete u zagradama i kojim redom...malo se igrajte !Probajte sami zaključiti (........a,b); izraz koji u programu i naravno možete sami mijenjati raspored {1} i {0} ili {0} i {1} ali naravno sve poštivati i to je to.Inače još jedno lijepo sovojstvo Visual Studia je tkz.IntelliSense...to je padajući izbornik s naredbama koje vam ponudi sam Studio a vi samo birate što vam treba a također vam i pomaže pri onome što treba ispisati unutar zagrada...to je sve ugrađena pomoć koja dobro dođe!













Sad naravno gore klik na build-->build solution i pojavit će se u prozoru ispod editora koda da je uspješno izvršeno prevođenje ,ali ako ste imali prije uspješna izvršenja kao ja tad vam je ovakav ispis:










...a to je isto uspješno izvršeno!
Sad na debug i strat without debugging.....i eto vam programa!!!!
Sad možemo krenuti na drugi program koji se sastoji od dva dijela ,prvo ćemo objasniti kod koji je pisan prvi...a tek onda onaj drugi koji je stavljen u obliku komentara. Zaboravio sam vam i napomenuti da ako želite dolje razumijevati objašnjenja vezana uz visual c++ ,nužno je da ponovite tutorijal na mojoj starnici jer će biti povezan s njom u svezi nekih kodova,ili već dobro znate c++ u Dev-okruženju da možete prijeći na visual c++/CLI programiranje jer ovdje ne objašnjavam kako ide do-while petlje ili for petlja jer smatram ako ste otvorili ove stranice da to već znate!
Prvo primjetite da u programima c++/CLI također komentare možete pisati s dvije kose crte!




...Kad izvršite debug (pokretanje) ....


Malo detaljnije objašnjenje slijedi.

Console::WriteLine(L"Imamo : {1,5} ..paketa tezine {0,9:F2} kilograma!"
,paket,
tezina);

Što koji znak znači: izraz {1,5} znači ispis koliko paketa imamo zbog navoda težina a to je broj jedan u vitićastim zagaradama i broj pet znači pet mjesta odmakni ili zauzmi za taj ispis , drugi izraz {0,9 : F2} znači da smo ispisali prvo varijablu paket zatim smo devet mjesta osigurali i izraz :F2 znači da se radi o floating mjestima,mjestima koje smo osigurali iza floating mjesta(zareza) a to su dvije decimale i imamo ispis s dvije nule!!!Vidite opet se radi o poštivanju rasporeda unutar zagrada naredbe WriteLine() i imamo ispis na ekranu onako kako smo željeli!Naravno da bi vidjeli i druge decimale deklaracija naše varijable mora biti float a ne int paket ili težina, ali ovdje je samo pokazano kako mi možemo rješavati ispise i izgled ispisa.

Console::Write(L"Imamo : ");
Console::Write(paket);
Console::WriteLine(L"...paketa");

Ovaj dio samo govori da se sve ispisuje u istoj liniji zbog Write() naredbe(funkcije)…nema preskakanja u novi red!!!!
Znači Write () funkcija nam sve u isti red stavlja a zatim imamo WriteLine(L“...paketa“); i preskakanje u novi red jer nam treba radi preglednosti slijedeće naredbe koju smo u programu napisali a mogli smo isto napisati i s Write naredbom ali ne bi bilo lijepo..eto to su osnovne razlike. Sad ćemo ukloniti komentare s drugog dijela koda i pokrenuti i naravno objasniti.





Sad naravno objasnjavamo slijedeci blok naredbi










String^ line = Console::ReadLine();//definiramo varijablu line i funkciju pomocu
//koje možemo pisati na ekranu
Console::WriteLine();
Console::Write(line);//ovdje taj ispis pisemo na ekranu
Console::WriteLine();//preskacemo u novi red
Console::WriteLine();










^ taj zna je naziva “hat” i u c++ - djeluje pod nazivom “handle” i povezano je s memorijom ali o tome puno više kasnije , zasad pišite kako vidite a taj znak se dobije pritiskom AltGr i broja 3 ili brojke ili slova gdje vam se taj znak nalazi , zatim razmaknica ili bilo koje slovo početno od varijable koju želite napisati! Zatim smo imenovali line varijablu koja pripada tom zankovnom nizu i u nju ćemo spremati naš ispis konzoli zbog funkcije ReadLine() koja naravno pripada Console::ReadLine() što naravno znači ispis na ekran i prelazak u slijedeći red! Ja sam dodao još i Console::WriteLine(); odmah ispod radi ljepšeg izgleda. Zatim pomoću Console::Write(line); ponovo ispisujenm što sam napisao i spremio u string objekt line, i opet preskok u novi red!
Zatim ,











Console::ReadKey();//nova funkcija koja cita sto smo stisnuli
char h = Console::Read();//ispisuje na konsoli sto stisnemo zbog Read()-citaj
Console::WriteLine();










..pomoću char tipa i Console::Read(); funkcije sad direktno vršimo isto ispis na ekran i opet preskačemo u novi red radi ljepšeg izgleda! U biti mi smo pomoću ova dva ispisa i funkcijskih članica Console radili komunikaciju s CMD-om i to je u biti svrha ovih naredbi ili funkcija!
Sad :











ConsoleKeyInfo keyPress= Console::ReadKey(true);//ovdje zbog true nam ispisuje ono ispod
// jer smo pozvali naredbu ConsoleKeyInfo
Console::WriteLine(L"Stisnuta tipka odgovara znaku : {0}\n",keyPress.KeyChar);
//sve ima svoje zasto i kako ,postivamo red u zagradama










Ako bi smo htjeli doznati informaciju koju smo tipku stisnuli to radimo tako kako je ispisano u kodu ….probajte malo logički povezivati deklaracije koje su napravljene i s onim prije što ste naučili i polako počinjete razumijevati C++/CLI programski kod! ConsoleKeyInfo je klas tip definiran u System namespace-u i u njegovu varijablu(objekt) se sprema informacija da li je , i je koja tipka stisnuta, keyPress.KeyChar : o tom izrazu ćemo malo kasnije. Nadam se da polako vidite razlike i sličnosti između C++/CLI pisanja i C++ native pisanja koda bez CLR-a.

safe_cast naredba










Sad prije nego krenemo s daljnim pisanjem koda mali osvrt na static_cast pretvorbu iz jednog tipa u drugi ,ponovite to iz tutorijala na stranicama iz osnova osnove c++-a! U C++/CLI mi također koristimo tu naredbu ali zbog drugačijeg pristupa u C++/CLI pisanju koda i rada s objektima koristiti ćemo safe_cast naredbu jer je primjerenija u C++/CLI programiranju, objektno orijentirana.Naredba se isto primjenjuje kao i static_cast na isti način se i piše !

double broj = 3.5;
double broj2 = 3.5;
int broj_cijeli = safe_cast(broj) + safe_cast(broj2);

Naravno izvršili smo pretvorbu double u int ,i rezultat je bez decimala zaokružen na cijeli broj a sve to da bismo rezultat double brojeva pohranili u cjelobrojnu varijablu!!!

Prije slijedećeg programa nešto malo i o enumeraciji brojeva u C++/CLI programiranju koje se razlikuje od običnog ISO/ANSI C++ programa.

enum class Kolekcija{ime,prezime,godine,spol};











To je definicija enumeracijskog tipa,Kolekcija,i varijable tipa kolekcija (koje su u biti objekti) i zbog toga kad im pristupamo moramo to na ovakav način :

Kolekcija kolekcija = Kolekcija::ime;

Znači pristupili smo objektu ime i pridružili varijabli kolekcija koju sad možemo dalje upotrijebiti jer ona sad nama znači isto što je i ime .Zbog definiranja class u C++/CLI programiranju mi smo enumeraciji dali novu dimenziju,dimenziju objekta . No,sve u enumeriranju(nabrajanju) unutar vitičastih zagrada je tipa int jer prvi član je nula,drugi je jedan i dr. po defaultu i stoga prije pristupanja moramo sve naše varijable (objekte) „castati“ i pohraniti u novu varijablu tipa int i na taj način iskorisiti čitanje našeg nabrajanja!I na kraju ovog teksta a prije programa koji još dodatno objasnim ,zato što je enumeracija class(razred)tipa ne može se definirati lokalno unutar main() funkcije nego izvan nje—globalno!!
Sad primjer i shvatite sve što sam prije napisao!

Naravno ovaj iznad editor koda koji je u dvije slike napišete cijeli kod u editor koda!

Još malo objašnjenja slijedi.
Također mi možemo u enumeraciji koristiti i tipove kao što su bool ili char a kako ih deklariramo pokazat ćemo u programima i naravno enumeracija je nabrajanje unutar vitićastih zagrada.Oblik kako definiramo tip je :



enum class Kolekcija : char {ime,prezime,godine,spol};





…znači sve je isto osim što smo stavili dvotočku poslije imena enumeracije i klase ,naravno pristup članovima Kolekcije također se vrši “castanjem” i pristup je isti kao u prošlom programu .Po defaultu ime=0; ali mi to možemo mijenjati tako da nam ime =1 može biti ,primjenite to i vidjet ćete da je sad spol 4. Možemo i ime staviti 10,prezime =2,a spol će opet biti 4! Vidite kako možemo sve to mijenjati , igrajte se malo, griješite namjerno ponegdje i pogledajte što se dešava,tako se uči također.

enum class Kolekcija : bool{ime=true,prezime=true,godine=true,spol=false};

Sad možete gornji kod izmjeniti ovako kao gore i pogledajte što se ispisuje.Vidite ,u biti pokazujemo osnove u Visual c++,naravno sve to nam reba kasnije kada budemo dublje ušli u programiranje za Windows .Tipovi koje možete koristiti u enumeraciji su svi oni koji su navedeni u onoj tablici na početku posta i naravno ne zaboravite “safe_cast” u pristupu pri enumeraciji.Evo kako sam ja izmjenio program a vi možete kako želite!!!Ovdje je primjenjen tip bool!



Eto malo sve to proučavajte i vježbajte i nastavljamo.

Prije ovog dijela nužno je ponoviti if-else uvjete i do-while naredbe iz tuta za početnike. Adresa je naravno http://metrobroadband.metronet.hr/helena-drpic Tamo to ponovite ili ako već znate to nije potrebno.U slijedećem programu umjesto char naredbe imamo wchar_t naredba koja odgovara char naredbi ali ima i neka proširenja u C++/CLI programiranju. Zatim imamo i deklaraciju:
slovo= Console::ReadLine() ;
funkciju koja vrši spajanje unosa preko tipkovnice (najsličnije naredbi cin) ...i naravno ostale naredbe su nam poznate..
NET.Framework pruža i posebne(svoje) funkcije za usporedbu slova unutar char klase!To su
Char::ToUpper(); i Char::ToLower();
Slijedi kratki program usporedbe a nakon njega i objašnjenje ovih funkcija u drugom programu gdje ćemo konkretno upotrijebiti te funkcije. Naravno u tom tek drugom programu upotrbljavamo i else naredbu ali prije toga morat ću se osvrnuti na objašnjenje uvjetnih operatora tkz. „trinari uvjet“ .Opći oblik je x ? y : z ; Što znači ako je vrijednost x istina rezultat je y,ako nije tada je to z.Znači računa ili y ili z!Piše se u tom obliku i to ćemo upotrijebiti u programu.
if (slovo>= 'A')
if(slovo<='Z') { Console::WriteLine(L"Upravo ste unijeli veliko slovo!"); Console::WriteLine(); return 0; }
Primjetite da u ovom dijelu koda ako je unutar if bloka samo jedan red ne moramo pisati viticaste zagrade a ako ima više izjava ili naredbi tad mora biti {} blok i normalno return 0; nam je povratna informacija da je kod izvršen!
Console::WriteLine(L"Niste unijeli slovo!");
Console::WriteLine();
return 0;
}
Na samom kraju programa je ta izjava i primjetite da nema else naredbe jer nije potrebna u ovakvoj postavci logike programa.Probajte staviti,program se izvrši ali zadnja konstatacija da nismo unijeli slovo se ne izvršava.U drugom programu ćemo upotrijebiti else naredbu.



Malo proučavajte program i usporedite ga s programom usporedbe slova u tutu na stranici za početnike. Sad slijedi drugi ptogram gdje ćemo konkretno prikazati korištenje Char::ToUpper() funkcije i else naredbe.


Dobro proučite ovaj program i if uvijet koji proučava da li je slovo veliko ili malo , a to ispitivanje smo stavili u onaj oblik x?y:z ako je slovo prvi uvjet tad je veliko ako nije tad je malo!
Ispitivanje slijeva nadesno . Nema vitičastih zagrada jer sve je u jednom redu a to se zove sažimanje koda ! Opet primjetite poštivanje poretka u zagradama pri navođenju uvjeta nije teško shvatiti logiku ovog ispitivanja.

U varijablu veliko smo spremili naše slovo nad kojim se izvršava funkcija iz klase Char.

wchar_t veliko = Char::ToUpper(slovo);

...na taj način smo upotrijebili varijablu veliko, za if ispitivanja i skratili program na nekoliko redova za razliku od prošlog programa koji je napravljen s više if uvjeta..a ovdje upotrebljavajući funkcije klase Char skratimo program. Tako malo proučavajte C++/CLI ispitivanja jer to je CLR programiranje ,naravno osnove!!

U slijedećem programu malo ćemo pobliže objasniti Console::KeyInfo class i Console::ReadKey() funkciju ispitivanje koja je tipka ili kombinacija tipki stisnuta.



Sad ćemo malo objasniti funkciju Console::ReadKey();
funkciju u petlji a ona pripada klasi ConsoleKeyInfo .
U progarmu smo napravili da pritiskom kombinacije tipki dobijemo prikaz koje tipke smo pritisnuli i koji znak se prikazuje,a pritiskom na escape tipku završava program.Znači upotrijebili smo do – while petlju !
tipkaStis = Console::ReadKey(true);
Upotrijebili smo funkciju ReadKey() kad stisnemo tipku ona se sprema u varijablu tipkaStis, true je samo potvrda da smo je stisnuli. Na početku programa smo delklarirali da je tipkaStis tipa ConsoleKeyInfo .Ta klasa ima tri svojstava koja se pridružuju tipkiStis,ta svojstva su Key(koja tipka je stisnuta) KeyChar---UNICODE vrijednost tipke i na kraju Modifiers svojstvo koje nam pruža uvid u tipke Shift,Alt ili Ctrl .ConsoleModifiers svojstvo je dio System biblioteke definirano kao enumeracija te tri tipke! Da bismo pristupili svojstvima za našu varijablu moramo pisati ovakav izraz:tipkaStis.Modifiers . Znači da bismo pročitali svojstvo Modifiers za tipkuStis tada je važno odvojiti ih točkom i ona ima značenje pristupa tom svojstvu,također tako pristupamo i ostalim dvama svojstvima koje smo objasnili dosad.tipkaStis.Key,tipkaStis.KeyChar…evo tako i ova dva svojstava primjenjujemo na stisnutu tipku.

if(safe_cast(tipkaStis.Modifiers)>0);

Pitate se zašto smo castali tipkaStis, zato što svojstvo Modifiers ima int tip jer je enumeracija a one su uvijek int tipa,i unutar if petlje ispituje da li je veće od nule i ako je mi smo stisnuli ili Alt ili Ctrl ili Shift .Naravno u kombinaciji s tipkaStis nam govori što smo stisnuli ,ako nije stisnuta kombinacija if petlja se preskače i tada su na redu one druga dva svojstava i eto sva tri svojstva primjenujemo unutar do-while petlje!Nisam objašnjavao ispis jer je to prije objašnjeno.Petlja se vrti dok se ne ispuni :

while(tipkaStis.Key != ConsoleKey::Escape);

Eto to ponovite i pročitajte nekoliko puta.U slijedećem programu ćemo upotrijebiti switch() naredbu u ispitivanju jedne rečenice o samoglasnicima suglasnicima gdje ćemo samoglasnike staviti u case dijelove a ostalo suglasnici kao default i naravno nove funkcije koje to ispituju!




Sad pogledajmo izbliza ovaj program koji analizira rečenicu pomoću for petlje u C++/CLI programu.Prvo , smo deklarirali našedvije varijable u koje spremamo onošto ćemo navesti u for petlji:
int samoglasnici=0;
int suglasnici=0;

….najbolje je odmah vrijednosti posatviti na nulu jer ćemo u for petlji za svaku provjeru slova spremati rezultat u varijable i pošto se radi o cjelobrojnom rezultatu i one su int tipa! Sad deklariramo našu rečenicu koju ćemo provjeriti , naravno ona je string tipa jer se radi o rečenici,i opet se pojavljuje onaj ^ “hat” znakić koji ću objasniti malo kasnije ,zasad vi to pišite tako kako je ,a on se dobije da ponovim AltGr + 3 i onda pišite što želite. U našem slučaju varijabla (objekt) rečenica!
String^ recenica = L"Evo sad ce vam program pokazati sto radi!\n\n";

Vidite da sam i primjenio i \n manipulatore da bi mi ljepše program izgledao. Sad dolazi zanimljiv dio programa a to je for each petlja!

for each(wchar_t x in recenica)

...for each petlju upotrebljavamo kad se krećemo kroz rečenice ili nizove slova a njen izgled je kako je gore napisano,navodi se općenito što gledamo a to je slovo u rečenici(doslovno ) i petlja se vrti koliko rečenica ima slova . Sad,da bismo radili provjeru za svako naše slovo moramo uvesti naravno if petlju koje će svoje rezultate pretrage za svaku vrtnju for petlje spremati u svoju varijable,i switch() naredbu kojom određujemo samoglasnike ,vidite sve se nalazi unutar for petlje i naravno sve spremamo i brojimo našim varijablama koje su u biti brojači! Molim ponovite neke stvari na tutu za početnike! Na kraju slijedi ispis koji je sam po sebi jasan,objasnio sam to prije da sad ne ponavljam a u daljnim izlaganjima kroz stranicu ću ponoviti i to .

if(Char::IsLetter(x));
{
x = Char::ToLower(x);
switch(x)
{
case 'a' :case 'e': case 'i':case 'o':case 'u':
++samoglasnici;
break;
default:
++suglasnici;
break;
}
}
}
Console::WriteLine(recenica);
Console::WriteLine(L"Recenica ili rijeci sadrze {0} samoglasnika i {1} suglasnika\n\n"
,samoglasnici,suglasnici);


….vidite naredbe i poštivanje rasporeda u zagradama i prje toga isppis rečenice koju provjeravamo!!!!
if(Char::IsLetter(x));
…Naredba u if uvjetu je funkcija koja utvrđuje istinu da li je slovo koje se provjerava slovo!Sad otvaramo switch naredbu ali prvo slova pretvaramo u mala da izbjegnemo razlike velikih i malih…to radimo ovom naredbom(funkcijom):
x = Char::ToLower(x);
…zatim naredba switch(x) koja ima svoje uvjete u case: u kojima smo postavili samoglasnike i na taj način analiziramo cijelu rečenicu…rezultate spremamo u naše varijable(brojače) i eto analiza je gotova,ponovite petlje u petlji i ne bi vam ovo trbalo biti teško a i naredbe(funkcije) u C++/CLI programiranju se lako pamte ,i njhova svrha je jasna.Samo da ponovim da ova stranica ima svoj početak a to je uvod pa tek onda ovaj post koji sam završio jer sad ide slijedeći post.







utorak, 19. veljače 2008.

uvod u visual c++

Pozdravljam sve koji su otvorili ovu stranicu željni učenja Visual C++-a!!!
Nadam se da ste prije ove stranice prošli tutorijal c++-a također na mojim stranicama , adresa stranice na kojima je c++ tutorijal je c++ osnove osnova ovdje, jer ćemo ići malo dalje u programiranju ali također samo osnove!!Ova stranica je u izradi i proći će malo vremena dok je ne dovršim ,bar početak s uvodom...dotad malo strpljenja i nadam se da ćete uživati u Visual c++-u!!!Naravno ovaj prvi dio uvoda ostavljam. Ovo je u biti prvo poglavlje i uvod a tek onda slijedi drugo poglavlje o apsolutnom početku!!!!

Općenito o C++/CLI programiranju

Da bismo razumjeli sam naslov moram prvo nešto reći o .NET Framework platformi .
Platformu koju podupire Microsoft i na kojoj gradi CLR (comon language runtime) .
Što sve to znači pokušat ću ukratko objasniti, i naravno sve to možete naći i na netu ako ukucate tražene pojmove i bolje objašnjene!NET platforma sadrži CLR i naravno biblioteku klasa kojom se služe programski jezici unutar NET platforme(C#,C++,VB i dr) i na taj način objedinjuje pojam CLR ,što u slobodnom prijevodu znači zajednički jezik prevođenja.Mi ćemo CLR koristiti u izvršavanju koda koji ćemo pisati u c++ programskom jeziku i takvo programiranje se zove C++/CLI programiranje koje naravno obuhvaća ISO/ANSI standard ali proširen i objavljen 2003 godine a detaljnije o tome možete naći na http://msdn.microsoft.com/ . Console aplikacije i programiranje u kojima ne koristimo CLR i NET.Framework zovemo nativno programiranje a kad koristimo CLR to je "mrežno " kontrolirano programiranje koje ne može bez framework platforme.Naravno kako budemo napredovali kroz C++/CLI programiranje objašnjenja će ići svojim tokom da sad ne kompliciram.

Prvo bih naravno krenuo s slikovitim prikazom Visual Studia i njegovog IDE . A to znači prostor ili okruženje u kojem sve šljaka i njegovi dijelovi.Naravno ja ću samo osnove ne ulazeći u detalje da se ne bih i ja i vi izgubili u prostarnstvima VS-a!IDE - Integrated Development Enviroment, i evo kratkog videa a ja ću posebno sliku po sliku stavljati i objašnjavati IDE,osnove,samo budite strpljivi. Ako što i zaboravim odmah napistai ,trudit ću se to nadoknaditi i objasniti,stoga ne zamjerite ako neke dijelove na početku nenamjerno izostavim.









Ovdje vidite na slici kako izgleda pokrenuti Visual Studio i njegov izgled prije otvaranja bilo kakve akcije.Na slijedećoj slici koju ćemo vidjeti biti će pokrenut new project tako da idete klik na file i na new project i pokazati će se slijedeća slika (nakon ove ispod).






A ta slika je ....


...naravno nas zanima CLR i CLR Console App. i na to cemo kliknuti da bi označili a slijedeći korak je napisati ime našeg projekta u polje Name,Location ostavimo po defaultu zasad a solution name nam sam studio kreira i na taj način smo gotovi s odabirom i klik na ok!.....Slijedi slika na kojoj će biti sve ispisano kako sam opisao..... i u name polje smo upisali ime našeg projekta i ostavili smo po defaultu sve kako jest (ostalo ) i sad samo stisnemo ok!






Također vi možete dvostrukim klikom na sliku sebi povećati sliku tako da bolje vidite,a video koji je gore prikazan možete skinuti ako imate program s kojim ga možete skinuti i njega lijepo uvećati !Nasatviti ćemo dalje i na slijedećoj slici možete vidjeti što se dešava kad stisnemo ok i VS za nas sad stvara projekt .....
...i eto nakon malo vremena pojavljuje se naš projekt pod imenom koji smo odabrali i naravno ,drugačijeg izgleda koda nego kod Console aplication.Lijevo je solution explorer u sredini je mjesto na kojem pišemo kod a s desne strane nam je dio kojem upravljamo s događajima u našem projektu ako ih ima. Zasad neću ulaziti u detalje objašnjenja jer kako stranica bude napredovala doći ćemo i do toga. Kad kliknemo na build -> build solution tad nam se u dnu Visual studia odvija prevođenje koda i mora završiti uspješno kao dolje prikazana slika....
Nakon toga klik na debug -> start without debugging i na taj način izvršavamo naš projekt... ...koji je uobičajeni "hello world" ispis...naravno vi to možete i promjeniti...i napomena je da s ovim prvim upoznavanjem Visual Studia ne objašnjavam kod,to tek slijedi!

Sad samo mala digresija, ako nemate VisualStudio možete pisati kod u Express Edition c++Visual, a u ovom videu možete vidjeti ukratko razliku između native code i managed code tj. razliku u nativnom programiranju i .NET platformi,i kako doći do besplatne verzije express izdanja!U videu obratite pažnju na prvu polovicu jer se tiče uvoda , a daljni nastavak videa ćemo kasnije u toku razvijanja stranice objasniti.