Forum Sveta kompjutera

Nazad   Forum Sveta kompjutera > Test Run > Programiranje > Pravljenje igara

Pravljenje igara Programski jezici, tehnike, alatke u službi pravljenja igara...

Odgovor
 
Alatke vezane za temu Vrste prikaza
Stara 12.8.2006, 12:53   #141
holodoc
Deo inventara foruma
 
Član od: 5.12.2005.
Poruke: 6.785
Zahvalnice: 348
Zahvaljeno 1.893 puta na 1.078 poruka
Određen forumom Re: objasnjenja pocetniku

Polako bre čoveče! Tako kako si ti počeo ne počinje nijedan ozbiljan početnik u bilo kom programskom jeziku! Pogledao sam sajt čiji si link dao i sve što je dato tamo je namenjeno isključivo naprednim i već pomalo iskusnim korisnicima. Pa ne misliš valjda da je prva stvar koja se radi u nekom programskom jeziku implementacija RSA algoritma ili embedovanje exe fajlova jedan u drugi? Znači ako si već krenuo da učiš po tutorijalima onda bar izaberi neki početnički. Pošto ja nikada nisam koristio tutorijale, osim u slučajevima nekih naprednijih tehnika, ovde ne mogu da ti pomognem. Treba da vodiš računa o još jednoj činjenici koju sam ja već par puta napomneuo u ovoj temi. Biraj dobro svoje tutorijale

Preporuka. Ako već hoćeš da na ultra-mega-giga brz način naučiš da radiš u Visual C++ 6-ici onda nabavi negde SAMS-ovo izdanje "Teach yourself Visual C++ in 21 days" i realno za mesec dana ćeš biti sposoban da koristiš većinu stvari koje su ti kao početniku potrebne u Visual C++-u. Nažalost, ostaćeš uskraćen za najvažniji deo u celoj stvari, sam programski jezik, jer se ova knjiga orijentiše na primenu Visual komponente MS-ovog paketa. Bez obzira na zle jezike ovo je odlična knjiga za svakog početnika.

Što se tiče tvog problema grešku prijavljuje linker i to najčešće u situaciji kada pogrešno konfigurišeš tip aplikacije na početku rada. Ukoliko hoćeš da napraviš konzolnu aplikaciju onda ne smeš da koristiš MFC i slične biblioteke. Primera radi, ako aplikacija treba da se "odigrava" samo u konzolu onda napraviš nov workspace i u njemu ili dodaš čist C/C++ source fajl ili ideš na opciju "Win32 Console Aplication". Ako hoćeš da napraviš Windows-like aplikaciju onda izabereš "MFC App Wizzard" ili slično. To što ti sada ništa ne radi najverovatnije ima za razlog činjenicu da si jednostavno počeo da "pakuješ" sve te kodove u jedan workspace i da si napravio haos ili da si, kao što sam pomenuo, malo "čačnuo" podešavanja. Još jednom, pre nego što bilo ko ovde iznese svoja "zapažanja" u vezi nečega neka se bar potrudi da za početak odradi fundamentalne stvari kako treba a ovde bi za početak bilo dobro bar osnovno upoznavanje sa Visual C++-om
Citat:
ne, ali kad ce taj 3d engine?? bar napisi neki tutorial
Možda uskoro ali trenutno baš nemam vremena za tako nešto tako da bih ti preporučio da se za sada baciš na nešto početničko umesto 3D-a engine-a Prođi za početak knjigu koju sam pomenuo i bićeš spreman da razgovaramo dalje.

I mala napomena. Nemoj da se igraš sa podešavanjima u "šestici" zato što ćeš samom sebi navući bespotrebne nevolje. Ovo tek možeš da radiš kad shvatiš šta koja opcija radi. Ako baš voliš da se "igraš" onda instaliraj neku .NET verziju pa udri do mile volje jer one imaju malo bolju kontrolu "egzibicija korinsika"

holodoc je offline   Odgovor sa citatom ove poruke
Stara 12.8.2006, 14:06   #142
Andross
Kekule Mekule
 
Avatar korisnika Andross
 
Član od: 8.12.2005.
Lokacija: Beograd
Poruke: 4.189
Zahvalnice: 656
Zahvaljeno 1.378 puta na 707 poruka
Slanje poruke preko Skypea korisniku Andross
Određen forumom Re: objasnjenja pocetniku

Evo recimo ja sam donedavno koristio Dev-C++ i MSVC++ 6.0 uporedo.To je zbog MS-ovih pomenutih bagova sa konzolama(ti linkerski problemi) i jos par nekih enginea koje sam testirao.Sa druge strane mrzelo me je da Qt "konvertujem" na Dev-C++ pa mi treba MSVC++ 6.0. I holococ za sta dajes 3D tutor?DirectX ili OpenGL?
Andross je offline   Odgovor sa citatom ove poruke
Stara 12.8.2006, 16:12   #143
priest (of_the_moon)
Član
 
Član od: 4.3.2006.
Lokacija: grad u oblacima
Poruke: 288
Zahvalnice: 1
Zahvaljeno 5 puta na 4 poruka
Određen forumom Re: objasnjenja pocetniku

Citat:
holodoc kaže:
I u čemu bi bila ta "naša" greška ovde
Nemam pojma, ali se meni nije javljala, a koristio sam "using namespace std".

Citat:
holodoc kaže:
Uzmi u obzir da je u onih DevC++-ovih 20KB smešteno sve od stvarnih funkcija koje su potrebne za rad programa. Pretpostavljam da je ista stvar minimalno smeštena i u MS verziju jer sigurno DevC++ kompajler ne proizvodi toliko drugačije instrukcije od onih koje proizvodi MS kompajler kada je u pitanju isti posao
Ne bih se složio da je MS compiler toliko rasipan u odnosu na MingW32-a (DevC++).
Dok sam učio na njemu, uspeo sam da smestim hello world u 608 bajta (bez asemblera i hex editora; verovatno je nekome uspelo i manje). Sačuvao sam bin i okačio, a kada se pogleda Hex editorom, nešto tu baš i nema mesta za seriale windowsa i vsa... No opet ne treba biti previše siguran da ne postoje, jer Micro soft je to .
U svakom slučaju, ta veličina mi sada u MingW32 ne polazi za rukom.

Citat:
holodoc kaže:
... reći ću jednostavno da je ovo sa "Press a key to continue" i vezano za vreme rada u samom Studiu-u. To mu i jeste mana!
Meni se baš više sviđao MS-ov način. Recimo kada trebam na brzaka da isprobam neku funkciju u konzoli i da vidim šta će da ispiše, ne moram da se smaram da zaustavljanje dodajem sam. Kada sam prešao na DevC++ to me je baš nerviralo u početku. Ukusi su različiti...

Citat:
Marko_L kaže:
Dakle, i bez mene ste uspeli da dokažete da C++ možda i nije najbolje rešenje za jednog početnika.
Pa, s obzirom na njegovo godište, najverovatnije će moći da se snađe i sa c-om (uz malo lupanja glavom na početku).

Citat:
Marko_L kaže:
dakle VB vaistinu konza
Naravno, uzevši u obzir naziv teme...

Citat:
holodoc kaže:
Polako bre čoveče! Tako kako si ti počeo ne počinje nijedan ozbiljan početnik u bilo kom programskom jeziku! Pogledao sam sajt čiji si link dao i sve što je dato tamo je namenjeno isključivo naprednim i već pomalo iskusnim korisnicima.
Bili su namenjeni isključivo tebi .

Poslednja ispravka: priest (of_the_moon) (14.8.2006 u 22:00) Razlog: fajl je bio prilično nepotreban
priest (of_the_moon) je offline   Odgovor sa citatom ove poruke
Stara 12.8.2006, 16:30   #144
M.Silenus
Veteran
 
Član od: 27.12.2005.
Lokacija: Vremenske Grobnice, Hiperion
Poruke: 680
Zahvalnice: 99
Zahvaljeno 124 puta na 82 poruka
Određen forumom Re: objasnjenja pocetniku

Zar VB ne traži nekakav vb-runtime ( cca 1MB, basic ) , da bi mogao da pokrećeš programe pisane u njemu?

U vezi lova na slona, pa reč je o sledećem: C je prilagođeniji mašini, dok je C++ prilagođeniji ljudskom načinu razmišljanja. U C++ su je mnogo lakše izvesti neke stvari.
Npr:-C++ : klasa Matrica sa definisanim operatorom * omogućava da imaš 2 objekta tipa Matrica i da sledeći izraz ima smisla : C=A*B ( A i B su Matrice )
-C : prvo praviš objekat tipa <tip>** ( tip je recimo double ), pa imaš funkciju <tip>** mnozenje(<tip>** A,<tip>** B), pa množiš na sledeći način
C=mnozenje(A,B);

Ovo je najprostiji primer.
M.Silenus je offline   Odgovor sa citatom ove poruke
Stara 12.8.2006, 16:56   #145
Marko_L
Mythbuster
 
Član od: 2.11.2005.
Lokacija: Beograd
Poruke: 2.205
Zahvalnice: 38
Zahvaljeno 370 puta na 147 poruka
Slanje poruke preko ICQ-a korisniku Marko_L Slanje poruke preko MSN-a korisniku Marko_L Slanje poruke preko Yahooa korisniku Marko_L Slanje poruke preko Skypea korisniku Marko_L
Određen forumom Re: objasnjenja pocetniku

Citat:
Zar VB ne traži nekakav vb-runtime ( cca 1MB, basic ) , da bi mogao da pokrećeš programe pisane u njemu?
Windows XP ima VB6 Runtime fajlove po defaultu, a za 98-icu treba (ako neko još uvek koristi to čudo ).
Marko_L je offline   Odgovor sa citatom ove poruke
Stara 12.8.2006, 19:27   #146
holodoc
Deo inventara foruma
 
Član od: 5.12.2005.
Poruke: 6.785
Zahvalnice: 348
Zahvaljeno 1.893 puta na 1.078 poruka
Određen forumom Re: objasnjenja pocetniku

Citat:
ANDROSS kaže:
I holococ za sta dajes 3D tutor?DirectX ili OpenGL?
Ljudi stvarno ste se napalili na te tutorijale Ne sećam se da sam negde pomenuo ni da ih spremam

Rekao sam već da trenutno nemam ni trunkice slobodnog vremena (dramatičnosti radi spavam u vrh glave dva-tri sata dnevno ) pa je normalno da nemam više vremena ni za bilo kakvo piskaranje.

Kada budem imao vremena (a kada će to biti nezna se) postaviću nekih par jednostavnih engine-a rađenih u C++-u od nule koji su stvarno obimno komentovani pa neće biti teško ni početnicima da se snađu. Naravno u trenutnom stanju fali još dodavanje nekih važnih komentara koji meni nisu bili potrebni dok su pisani ali bi bilo lepo da postoje u krajnjoj varijanti

U svakom slučaju koga god mrzi da čeka mene (možda i pametnija solucija ) slobodno neka pročešlja http://www.gamedev.net na kome ima fantastičnih tutorijala o svemu i svačemu. Plus na forumu možete postaviti ama baš svakakvo pitanje i dobićete brz, jednostavan i kvalitetan odgovor. Sajt se prvenstveno osnodi na on ekoji koriste C++ ali ima nekih stvarčica i za Delphi.

Ako si možda mislio da me pitaš čemu sam više naklonjen DirectX-u ili OpenGL-u moram da kažem da kod igara više volim da koristim DirectX. Da ovo opet ne bi preraslo u raspravu DirectX vs. OpenGL ponovo podvlačim da meni više leži i da je neke stvari moguće mnogo lakše realizovati nego u OpenGL-u. Bar što se tiče igara.

E sada, koga ne mrzi da skida ceo SDK sa Microsoft-ovog sajta
holodoc je offline   Odgovor sa citatom ove poruke
Stara 12.8.2006, 19:35   #147
holodoc
Deo inventara foruma
 
Član od: 5.12.2005.
Poruke: 6.785
Zahvalnice: 348
Zahvaljeno 1.893 puta na 1.078 poruka
Određen forumom Re: objasnjenja pocetniku

@priest (of_the_moon)

Nisam mislio na linkove koje si ti dao za optimizaciju aplikacija nego ovaj sajt što je Eclipse pomenuo odakle skida source-ove http://www.planet-source-code.com/
holodoc je offline   Odgovor sa citatom ove poruke
Stara 12.8.2006, 20:49   #148
EclipsE
Starosedelac
 
Član od: 16.4.2006.
Lokacija: Scary Movie Reputacija: ■■□
Poruke: 1.337
Zahvalnice: 378
Zahvaljeno 279 puta na 196 poruka
Slanje poruke preko Skypea korisniku EclipsE
Određen forumom Re: objasnjenja pocetniku

Sto ne? Ja sam VB6 ucio iz raznih sourceva
Skines, proucis, naucis
EclipsE je offline   Odgovor sa citatom ove poruke
Stara 12.8.2006, 21:00   #149
Crusader88
Veteran
 
Član od: 10.6.2006.
Lokacija: Vasiona
Poruke: 1.080
Zahvalnice: 207
Zahvaljeno 90 puta na 71 poruka
Slanje poruke preko Yahooa korisniku Crusader88
Exclamation Re: objasnjenja pocetniku

Sta sada?
skinem dev c++, 4.9.9.2. i pocnem sa onom tvojom svetom knjigom
C++ Practical Programming by Example i stignem cak do helo world
i pocinju problemi

// a small C++ program
#include <iostream>

int main()
{
std::cout << "Hello, world!" << std::endl;
return 0;
}

uradim to i nista... kopmajlujem pa pokrenem i pokaze dos prozor i odma ga zatvori
i onda cackam malo dev i idem na neki njegov primer heloo svete i od izbaci

#include <iostream>

using namespace std;

int main (int argc, char *argv[])
{
cout << "Hello World!" << endl;
cout << "Press ENTER to continue..." << endl;
cin.get();
return 0;
}

i to se razlikuje sa onim iz knjige ali RADI.
STA DALJE?
Crusader88 je offline   Odgovor sa citatom ove poruke
Stara 12.8.2006, 21:15   #150
voodoo_
V.I.P. GNU/Linux
 
Avatar korisnika voodoo_
 
Član od: 1.11.2005.
Poruke: 11.236
Zahvalnice: 2.140
Zahvaljeno 4.977 puta na 2.897 poruka
Određen forumom Re: objasnjenja pocetniku

Citat:
Crusader88 kaže:
// a small C++ program
#include <iostream>

int main()
{
std::cout << "Hello, world!" << std::endl;
return 0;
}

uradim to i nista... kopmajlujem pa pokrenem i pokaze dos prozor i odma ga zatvori
Bitno je da shvatiš što se odmah zatvorio prozor. Program je odradio ono što si mu rekao (ispisao "Hello world") u konzoli koju mu je Windows dodelio, i javio da je izvršenje gotovo. Windows je, uvidevši da je konzola sada iskorišćena i posao završen, istu uništio i zdravo. Znači, ako hoćeš da program sačeka da ti nešto pritisneš kako bi mogao da vidiš šta je pre toga bilo, treba da ubaciš naredbu za unos bilo kog znaka sa tastature, kao u drugom primeru.
voodoo_ je offline   Odgovor sa citatom ove poruke
Stara 12.8.2006, 21:17   #151
holodoc
Deo inventara foruma
 
Član od: 5.12.2005.
Poruke: 6.785
Zahvalnice: 348
Zahvaljeno 1.893 puta na 1.078 poruka
Određen forumom Re: objasnjenja pocetniku

O tome sve vreme i pričamo ovih par postova

Da skratim. Oba koda funkcionišu perfektno i rade ono što treba da urade. Glavna razlika između prvog i drugog source-a leži u onom "cin.get();". Osnovna namena ove komande jeste da kada ti na ekranu ispiše "Hello world" program sačeka da "čukneš" neki taster pre nego li se prozor u kome je tekst ispisan zatvori.Druga verzija je pisana sa očiglednom namerom da radi bez problema i u DevC++-u.

Pošto tvoja prva verzija nema ovaj deo, kod se jednostavno izvrši i prozor se zatvori veoma brzo tako da ti imaš osećaj kao da je samo "trepnuo" Prvi kod bi realno bio jedino "vidljiv" (tj. prozor bi ostao otvoren po deafultu sve dok ne pritisneš Enter) u MS Visual C++-u pošto isti ubacuje već pominaju rečenicu "Press a key to continue". U svakom slučaju ako budeš nameravao da koristiš DevC++ stavljanje "std::cin.get()" ispred "return 0" je preporučljivo ako je program konzolnog tipa ili treba samo da prikaže neke obrađene informacije ali tako da korisnik stigne da pročita šta mu je sve program "servirao".

Nemoj da te ovakva sitnica ili bolje rečeno glupost obeshrabri i nastavi sa sledećim primerima ali vodi računa o svemu šta je ovde već rečeno. To znači da pošto vidim da nameravaš da koristiš DevC++ možeš slobodno da koristiš "using namespace std;" a da na svim mestima gde ti se pojavi "std::" u kodu (ako postoji) jednostavno izbaciš ovaj deo kao nepotreban. Mada ako ga ostaviš kompajler se neće buniti

edit: sad videh da je voodoo_nbg već "bacio magiju" ali nije bilo loše ako si pročitao i ovaj post.
holodoc je offline   Odgovor sa citatom ove poruke
Stara 12.8.2006, 21:34   #152
M.Silenus
Veteran
 
Član od: 27.12.2005.
Lokacija: Vremenske Grobnice, Hiperion
Poruke: 680
Zahvalnice: 99
Zahvaljeno 124 puta na 82 poruka
Određen forumom Re: objasnjenja pocetniku

Dodaj sledeće linije:
Kod:
...
#include <stdlib.h>
...
int main(int argc,char** argv)
{
...
system("PAUSE");
return 0;
}
I neće odmah zatvoriti prozor , tj. pojaviće ti se poruka "Press any key to continue..."
M.Silenus je offline   Odgovor sa citatom ove poruke
Stara 12.8.2006, 22:51   #153
holodoc
Deo inventara foruma
 
Član od: 5.12.2005.
Poruke: 6.785
Zahvalnice: 348
Zahvaljeno 1.893 puta na 1.078 poruka
Određen forumom Re: objasnjenja pocetniku

A pa kolega bez ljutnje ali ovo malkice više naginje na C stranu nego na "hard-core" C++

Ne zaboravi da većina početnika koji prate ovu temu koriste literaturu vezanu za C++ a ne za C pa neko može da se zapita recimo šta su kog đavola "stdlib.h" itd. Naime, iako bi ovaj kod radio ne bih ga preporučio C++ polaznicima iz par razloga. Prvi je korišćenje C headera kao što je "stdlib.h" i to u ovom slučaju čisto da bi se pozvala "system" funkcija. Pošto se program već koristi za ispis teksta to znači da mora biti "include-ovano" još minimalno i "stdio.h" zaglavlje. Malo preterano korišćenje resursa a i ne preterano svrsishodno kada je u C++ varijanti (koji se ovde i uči) potrebno koristiti samo jedno zaglavlje koje obavlja isti posao.

Umesto C headera stvarno preporučujem navikavanje na C++ alternativu "iostream" koja u sebi sadrži sve što je potrebno za rad sa ulazom i izlazom. Iako realno gledano "std::cin.get()" radi nešto potpuno drugačije od "system"-a krajnji efekat po korisnika je isti jer program čeka na intervenciju korisnika. Prednost korišćenja C++ pristupa bi u ovom slučaju bila i ta što bi korisnik koji radi aplikaciju recimo na srpskom mogao da "servira" svoj tekst tipa "Utcukajte si taster da nastavite..." a ne standardni "Press any key to continue".

Druga stavka je i korišćenje samog "system-a" iz zaglavlja "stdlib.h". Lično mrzim da sistemu jednostavno prosledim neku jednostavnu komandu a da na njemu bude kako će komandu (u ovom slučaju status "PAUSE") da interpretira. Zašto koristiti ovako "pojednostavljivanje" kada aplikacija može sasvim lepo i kraće da se napiše a da bude apsolutno poznato šta se u datom trenutku dešava? I to opet korišćenjem samo "iostream-a" Doduše i sam DevC++ pri kreiranju generičke konzolne aplikacije voli da koristi dodatni "cstdlib" da bi pozvao isti taj "system" ali opet kao što kažem po meni porpilično nepotrebno.

Još jedna stvar. Početnici će takođe sigurno da se zbune šta znači ono "int argc,char** argv" jer toga nema nigde ni u jednom "HelloWorld" programu koji se uči u C++ kursu. Kad sam već ovde napomenuću da ove promenljive sadrže podatke o tome šta ste još dodali kao argumente u komandnoj konzoli kada ste pozivali program. Znači ako na primer upišete u konzoli komandu "helloworld.exe -talk -curse -voice" vaš program sada odmah po pozivanju sadrži dve promenjljive "argc" i "argv". Prva promenjljiva je ceo broj i sadrži broj prosleđenih argumenata prilikom pozivanja komande a to bi ovde bilo 3 (talk,curse,voice). "Argv" je nešto što se zove polje pokazivača na pokazivače ili jednostavnije rečeno može se porediti sa nizom koji sadrži adrese gde se nalaze svi oni argumenti koje ste ukucali pri pozivanju programa. Ovo je malo napredniji deo C-a i C++-a tako da je sve ovo trebalo da bude samo informacije radi

Odužih ali u suštini za HelloWorld program ovaj deo uopšte nije potreban
holodoc je offline   Odgovor sa citatom ove poruke
Stara 12.8.2006, 22:54   #154
holodoc
Deo inventara foruma
 
Član od: 5.12.2005.
Poruke: 6.785
Zahvalnice: 348
Zahvaljeno 1.893 puta na 1.078 poruka
Određen forumom Re: objasnjenja pocetniku

E sad da ne bi bilo više zabuna oko toga kako kog đavola treba da izgleda jednostavan "HelloWorld" program koji će da radi na svim sistemima i svim kompajlerima evo jednog jednostavnog "malo dorađenog" "C++ standard full-proof" "HelloWorld" programa! Ovaj kod uzima u obzir i MSVC++ kikseve sa namespace deklaracijama.

Kod:
#include <iostream> // otvaranje standardnog zaglavlja

int main ()
{
  std::cout << "Hello World!" << std::endl; // ispis teksta
  std::cout << "Utcukajte si taster da nastavite..." << std::endl; //ispis teksta
  std::cin.get(); // program ceka da se pritisne neki taster
  return 0; // povratak vrednosti "0" operativnom sistemu sto znaci da je sve OK
}
Posle ovoga vreme je da se pređe na nešto kompleksnije. A kome ovaj kod ne radi ne treba da krivi kompajler već samog sebe jer ima neispravan ili "podešavan" kompajler ili linker i treba prvo da reši taj problem pa onda tek da se baci na učenje
holodoc je offline   Odgovor sa citatom ove poruke
Stara 12.8.2006, 23:15   #155
Andross
Kekule Mekule
 
Avatar korisnika Andross
 
Član od: 8.12.2005.
Lokacija: Beograd
Poruke: 4.189
Zahvalnice: 656
Zahvaljeno 1.378 puta na 707 poruka
Slanje poruke preko Skypea korisniku Andross
Određen forumom Re: objasnjenja pocetniku

Ozbilnije npr.
Kod:
#include <iostream>
int main()
{
    int varijabla1;  // varijabla povratnog tipa int(celobrojni broj)
    int varijabla2;
    std::cout << "Unesite prvi broj: " << std::endl;
    std::cin >> varijabla1;
    std::cout << "Unesite drugi broj: " << std::endl;
    std::cin >> varijabla2;
    std::cout << "Zbir brojeva je: " << varijabla1 + varijabla2 << std::endl;
    return 0;
}
A moze i da se uradi:
Kod:
int varijabla3 = varijabla1 + varijabla2;
Pa da se ispise varijabla3.To je nesto malko komplikovanije
Andross je offline   Odgovor sa citatom ove poruke
Stara 12.8.2006, 23:30   #156
holodoc
Deo inventara foruma
 
Član od: 5.12.2005.
Poruke: 6.785
Zahvalnice: 348
Zahvaljeno 1.893 puta na 1.078 poruka
Određen forumom Re: objasnjenja pocetniku

Odličan "napredniji" primer

Dodao bih samo da kada je potrebno definisati više od jedne promenljive istog tipa na jednom mestu moguće ih je odvojiti zarezom.

Primera radi umesto definicije tri promenjljive zasebno:
Kod:
double kolicina;
double cena;
double ukupno;
moguće je njihovo definisanje izvršiti sledećim redom
Kod:
double kolicina, cena, ukupno;
Naravno "double" ovde predstavlja tip promenjljive koja sadrži broj u pokretnom zarezu dvostruke preciznosti koji je moguće kasnije recimo doraditi na dve decimale.

Moram da priznam da ova tema počinje da mi se sviđa jer se sve više ljudi uključuje u nju sa nekim predlozima i informacijama ili što bi se reklo konačno sa nečim konkretnim i opipljivim Samo bih možda preporučio da svaki ponuđeni kod bude malo prokomentarisan ili da bar sadrži komentar u okviru koda kako bi bio razumljiv.
holodoc je offline   Odgovor sa citatom ove poruke
Stara 12.8.2006, 23:41   #157
Andross
Kekule Mekule
 
Avatar korisnika Andross
 
Član od: 8.12.2005.
Lokacija: Beograd
Poruke: 4.189
Zahvalnice: 656
Zahvaljeno 1.378 puta na 707 poruka
Slanje poruke preko Skypea korisniku Andross
Određen forumom Re: objasnjenja pocetniku

Evo nesto slicno samo sa unosom teksta:
Kod:
#include <iostream>
int main()
{
    char ime[21];  // niz od 20 karaktera - 21 = null terminator
    std::cout << "Kako se zoves? " << std::endl;
    std::cin.get(ime, 21);  // uzima niz karaktera do n
    std::cout << "Tvoje ime je: " << ime << std::endl;
    return 0;
}
I meni pocinje da se svidja tema.Mozemo svi nesto da naucimo.
Andross je offline   Odgovor sa citatom ove poruke
Stara 13.8.2006, 0:59   #158
holodoc
Deo inventara foruma
 
Član od: 5.12.2005.
Poruke: 6.785
Zahvalnice: 348
Zahvaljeno 1.893 puta na 1.078 poruka
Određen forumom Re: objasnjenja pocetniku

Mali komentar o ovom poslednjem kodu. ANDROSS nećeš zameriti ali ovde smo da učimo zar ne

Definicija
Kod:
char ime[21];
rezerviše niz od 21 elemenata u koji se smešta tzv. "char" tip podataka. Char tip podataka nije ništa drugo nego obično slovo. Znači, ukoliko se u niz smesti recimo ime "Misa" onda bi element ime[0] sadržao slovo "M", element ime[1] bi sadržao slovo "i" i tako dalje. Ovde ide jedna veoma važna napomena a to je da su u C-u i C++-u nizovi tzv. "zero-based" tipa odnosno brojanje elemenata počinje od 0 a ne od 1. To znači da se prvi element niza "odaziva" na “ime[0]” a poslednji na “ime[20]” a ne “ime[21]” što bi kompajler prijavio kao grešku.

Ovde sledi i objašnjenje toga šta je to "null terminator"

ANDROSS-ov program u suštini radi jednu veoma jednostavnu stvar. Pita korisnika za ime koje korisnik unosi nakon čega ispisuje uneto ime. Kako se to radi. Jednostavno. Pratimo ANDROSS-ov kod.

Prva linija programa
Kod:
char ime[21];
rezerviše već pomenuti niz od 21 elemenata za skladištenje imena.
Drugi red
Kod:
std::cout << "Kako se zoves? " << std::endl;
ispisuje na ekranu poruku "Kako se zoves?".
Deo koda
Kod:
std::cin.get(ime, 21);
očekuje da korisnik unese ime i pri tome se ignoriše sve duže od 21 karaktera nakon čega treba pritisnuti ENTER.

Deo koda
Kod:
 std::cout << "Tvoje ime je: " << ime << std::endl;
ispisuje uneto ime.

Ovde na scenu stupa problem sa tzv. "null terminatorom". Naime, u C-u i C++-u svi string-ovi na kraju moraju da imaju tzv. "null-terminator" koji označava kraj stringa. On se označava sa "\0". Kako se često stringovi unose preko tastature a poslednji taster pri unosu je ENTER treba ispred tog terminatora dodati još jedno mesto za "novi red" koji se označava sa "\n". Znači ako ovde ukucate recimo ime "Misa" vaš string za upis će imati dužinu od 6 a ne 4 karaktera! O ovome treba voditi računa a posebno u složenijim slučajevima.
Da ovde ne bi bilo zabune "\n" ima dužinu od jednog karaktera jer pripada grupi specijalnih karaktera koji se označavaju sa početnim "\" u imenu. Postoji puno specijalnih karaktera kao što su: "\a" - beep (aktivira beeper računar i čuje se zvuk, veoma interesantno ), "\b" - backspace, "\t" - vertikalni tabulator, "\v" - horizontalni tabulator, "\"" (ide obrnuta kosa crta pa navodnik) - navodnik itd.

Enter na kraju za posledicu u ovom slučaju ima jednu gadnu manu a to je da automatski (pošto je “ENTER” poslednji bufferovan sa tastature pa zbog brzine izvršenja programa par tih buffer-ovanih ENTER-a "iscuri") okida bilo kakav "std::cin.get();" koji bi se našao eventualno na kraju koda ispred “return” komande. Opet govorim o onima koji ne koriste MSVC++ Dakle za one koji koriste full C++ kompatibilne kompajlere treba primeniti malo izmenjen kod.

Poslednja ispravka: holodoc (13.8.2006 u 1:38)
holodoc je offline   Odgovor sa citatom ove poruke
Stara 13.8.2006, 1:01   #159
holodoc
Deo inventara foruma
 
Član od: 5.12.2005.
Poruke: 6.785
Zahvalnice: 348
Zahvaljeno 1.893 puta na 1.078 poruka
Određen forumom Re: objasnjenja pocetniku

U ovom slučaju iskoristiću M.Silenus-ovo rešenje ali u full C++-varijanti. To znači da ćemo umesto C headera „stdlib.h“ koristiti C++-ov ekvivalent „cstdlib“ da bi smo pozvali "system" funkciju koja će da ukoči program kad treba. Kada korisnik pritisne ENTER program izvršava liniju „return EXIT_SUCCESS;“. O čemu se ovde radi uopšte? Standardna zaglavlja neretko sadrže u sebi deklarisane konstante (ne promenljive) kojima su dodeljene vrednosti koje ne mogu da se menjaju. U konkretnom slučaju <cstdlib> sadrži u sebi konstantu „EXIT_SUCCESS“ kojoj je dodeljena vrednost „0“ tako da je ovde „return EXIT_SUCCES;“ ekvivalentno sa „return 0;“.

Dakle verzija ANDROSS-ovog programa koja bi lepo funkcionisala na svim platformama bi izgledala ovako:

Kod:
#include <cstdlib> // zaglavlje potrebno za poziv "system" funkcije
#include <iostream> // standardno zaglavlje ulaza i izlaza

int main()
{
    char ime[21];  // deklaracija niza koji sadrzi karaktere duzine 21
    std::cout << "Kako se zoves? " << std::endl; // unos imena
    std::cin.get(ime,21);  //unos imena; maksimalna duzina 21 karakter
    std::cout << "Tvoje ime je: " << ime << std::endl; // ispis unetog imena
    system("PAUSE"); // pauziranje aplikacije
    return EXIT_SUCCESS; // vracanje informacije o uspesnom izvrsenju
}
holodoc je offline   Odgovor sa citatom ove poruke
Stara 13.8.2006, 22:32   #160
Marko_L
Mythbuster
 
Član od: 2.11.2005.
Lokacija: Beograd
Poruke: 2.205
Zahvalnice: 38
Zahvaljeno 370 puta na 147 poruka
Slanje poruke preko ICQ-a korisniku Marko_L Slanje poruke preko MSN-a korisniku Marko_L Slanje poruke preko Yahooa korisniku Marko_L Slanje poruke preko Skypea korisniku Marko_L
Određen forumom Re: objasnjenja pocetniku

Da, ovo je odlična tema i treba imati što više ovakvih, kojima će početnici moći da uplove u programerske vode. Neću komentarisati C++ kodove, iako ih razumem, jer ipak prvenstveno radim u VB-u, a ovde ima dosta boljih poznavaoca C++ od mene, već ću samo pokazati kako bi dati kodovi otprilike izgledati u VB-u , bez ikakvog poziva na flejm, nego čisto da malo uporedimo sintaksu i određena rešenja, što nekome može biti korisno... Nadam se da vam to ne smeta. Elem, da vidimo...
Kod:
#include <iostream> // otvaranje standardnog zaglavlja

int main ()
{
  std::cout << "Hello World!" << std::endl; // ispis teksta
  std::cout << "Utcukajte si taster da nastavite..." << std::endl; //ispis teksta
  std::cin.get(); // program ceka da se pritisne neki taster
  return 0; // povratak vrednosti "0" operativnom sistemu sto znaci da je sve OK
}
u VB-u može da izgleda ovako
Kod:
Msgbox "Hello World" 'ispisuje tekst u navodnicima u prozoru
I kada se klikne na OK program nastavlja sa radom.

Što se tiče koda koji sabira dva broja
Kod:
#include <iostream>
int main()
{
    int varijabla1;  // varijabla povratnog tipa int(celobrojni broj)
    int varijabla2;
    std::cout << "Unesite prvi broj: " << std::endl;
    std::cin >> varijabla1;
    std::cout << "Unesite drugi broj: " << std::endl;
    std::cin >> varijabla2;
    std::cout << "Zbir brojeva je: " << varijabla1 + varijabla2 << std::endl;
    return 0;
}
U VB-u može da se odradi ovako
Kod:
Dim varijabla1 'deklaracija prve varijable
Dim varijabla2 'deklaracija druge varijable
varijabla1 = InputBox("Unesite prvi broj", "Unos podataka", "0") 'prompt za unos prvog broja
varijabla2 = InputBox("Unesite drugi broj", "Unos podataka", "0") 'prompt za unos drugog broja
MsgBox "Zbir unetih brojeva je " & Val(varijabla1) + Val(varijabla2) 'prikazujemo zbir brojeva, a funkcija val omogucava da ukoliko je korisnik uneo neki tekst varijabli dodeli vrednost nula
Marko_L je offline   Odgovor sa citatom ove poruke
Odgovor

Bookmarks sajtovi

Tagovi
programiranje, tutoriali

Alatke vezane za temu
Vrste prikaza

Vaš status
Ne možete postavljati teme
Ne možete odgovarati na poruke
Ne možete slati priloge uz poruke
Ne možete prepravljati svoje poruke

BB kod: uključeno
Smajliji: uključeno
[IMG] kod: uključeno
HTML kod: isključeno



Sva vremena su po Griniču +2 h. Sada je 18:19.


Powered by vBulletin® verzija 3.8.7
Copyright ©2000–2024, vBulletin Solutions, Inc.
Hosted by Beograd.com