I kad učitavaš ime, nejde &.
Također, kod računanja prosjeka moraš na početku petlje stavit sumu na 0. Ovako će u sumi nakon prvoj koraka petlje ostat zbroj ocjena prvog učenika, a onda ćeš na to dodavat ocjene drugog, što ne valja.
I kad učitavaš ime, nejde &.
Također, kod računanja prosjeka moraš na početku petlje stavit sumu na 0. Ovako će u sumi nakon prvoj koraka petlje ostat zbroj ocjena prvog učenika, a onda ćeš na to dodavat ocjene drugog, što ne valja.
I kad učitavaš ime, nejde &.
Također, kod računanja prosjeka moraš na početku petlje stavit sumu na 0. Ovako će u sumi nakon prvoj koraka petlje ostat zbroj ocjena prvog učenika, a onda ćeš na to dodavat ocjene drugog, što ne valja.
scanf ("%s",ime);
tako znači treba izgledati
jer & ide kad ucitavas jedan znak ili broj... %c i %d...
Jasno mi je Luka to, rekoh, nisam stigao dovršiti zadatak.
Imam jedno pitanje za vas koji profesionalno programirate, znači radite kao programeri.
Koliko su ove osnovne stvari (npr. zadaci iz ove teme) zapravo slične "pravom" programiranju?
@ betmen, sve je isto... kao 'cigle' za gradnju ili matematika. Razlika je samo u aplikaciji, platformi, robustnosti... (različiti zahtijevi su za knjigovodstvo u odnosu na bankarstvo ili SMSparking).
Kao primjena matematike, nemožeš reči točno u čemu je razlika, osim u korištenim znamenkama u školi 2+2, ili u banci 2.000.000 +2.000.000 .. tako je i s kodom.
Jedina (morala bi biti) razlika je u kvaliteti tj full-proof kodiranju. Dok učenik može griješiti (bez posljedica, osim ocjene), u poslu moraš biti apsolutno bezgrješan. Kao i s tim poveznao recimo komentiranje koda ili urednost (što mr.baksa često traži), jer na kodu radi ekipa ili će ti neki kod trebati za par godina, bez kvalitetne dokumentacije (najbolje unutar koda-REMovi) to je teže.
Jedina (morala bi biti) razlika je u kvaliteti tj full-proof kodiranju. Dok učenik može griješiti (bez posljedica, osim ocjene), u poslu moraš biti apsolutno bezgrješan. Kao i s tim poveznao recimo komentiranje koda ili urednost (što mr.baksa često traži), jer na kodu radi ekipa ili će ti neki kod trebati za par godina, bez kvalitetne dokumentacije (najbolje unutar koda-REMovi) to je teže.
Eh da je bar to slučaj sa svakim programom i kodom :D...
Lijepo. Znači, ako sam dobar s osnovama programiranja, vjerojatno ću se snaći i u "pravom" programiranju. To sam htio čuti, hvala.
Lijepo. Znači, ako sam dobar s osnovama programiranja, vjerojatno ću se snaći i u "pravom" programiranju. To sam htio čuti, hvala.
I da i ne. Kada radiš osnovne stvari i male programčiće otprilike već imaš skoro cijeli kod u glavi, pa ti nije problem snalaziti se. Kad radiš veći projekt ili, još gore, više ljudi radi na projektu onda ti dokumentacija postaje važnija od samog koda. Ako nemaš sve kvalitetno dokumentirano lako ti se dogodi da moraš nešto promijeniti ali se više ne možeš snaći u kodu jer više ne znaš tko koga poziva, inicijalizira, tko s kim komunicira i na kraju ti zbog jednostavne izmjene dođe da sve izbrišeš i kreneš ispočetka.
Pozdrav!
Kako se ono ispisuje neki ASCII znak?
Mislim, recimo.
Želim ispisati neko sunce i sad recimo je ASCII broj 2.
Kako da to ispišem?
Hvala!
Pozdrav!
Kako se ono ispisuje neki ASCII znak?
Mislim, recimo.
Želim ispisati neko sunce i sad recimo je ASCII broj 2.
Kako da to ispišem?
Hvala!
printf("%c",2);
odokativno <.<
napokon uspio sam svoj program i kompajlat i pokrenut(radi!) ali me sad zanima posto nisam imao vremena ucit programiranje dalje znaci u onom mom kodu...kad se izabere jedna opcija i kad ju on izvrsi pogledajte sliku 1.1 i recite mi kako da to popravim i jos jedan stvar...kad mi zavrsi tu jednu operaciju ja nezelim da mi ugasi program nego da me ponovo trazi da izaberem sto zelim izracunati
napokon uspio sam svoj program i kompajlat i pokrenut(radi!) ali me sad zanima posto nisam imao vremena ucit programiranje dalje znaci u onom mom kodu...kad se izabere jedna opcija i kad ju on izvrsi pogledajte sliku 1.1 i recite mi kako da to popravim i jos jedan stvar...kad mi zavrsi tu jednu operaciju ja nezelim da mi ugasi program nego da me ponovo trazi da izaberem sto zelim izracunati
Stavi sve u while petlju, tj. do-while i da se izvršava sve dok korisnik ne unese neki znak/string/broj, kaj god hoćeš.
Samo ne koristi goto.
aha..oke
Samo ne koristi goto.
Goto slobodno nek koristi kod višestrukog break-a, lakše to nego slagati uvjete tak da kad prvi brejka da svi izlete :D.
Samo nek ima zlatno pravilo goto-a uvijek na umu:
Goto nikad nek ne baca unazad.
Samo nek ima zlatno pravilo goto-a uvijek na umu:
Goto nikad nek ne baca unazad.
pročito sam i u prijašnjim postovima kak svi proklinjete taj goto i sad me zanima sljedeće.
napravio sam jedan program koji ima cirka 1100 linija koda i ima relativno puno goto-a. al jednostavno ne vidim način kako bi ih mogao izbjeći.
program je još u razvoju, ali gotovo je preko 95%. ako je tko voljan i želi pregledat kod da vidi jel se može kako izbjeć goto, neka kaže, pa ću mu dat na pm, jer ne želim baš javno :D
Zato jer nisi naučio pravilno programirati. Usvojio si pogrešnu logiku pa sad sve gledaš iz perspektive goto naredbe i onda razmišljaš kako bi se to moglo napraviti bez goto. A to je pogrešan put.
Ja nikad ni u jednom programu (osim radi probe kako to radi) u Pascalu, Delphiju, C++-u nisam upotrijebio goto naredbu. Što će reći da se može izbjeći - i to vrlo lako. Zaista ne znam kakve bi to trebale biti petlje i skokovi da ne bi mogao izbjeći naredbu goto. Možda si zaboravio na naredbu break koja prekida trenutnu petlju i vraća se na hijerarhijsku razinu iznad?
Pa slobodno valjda daš nekoliko primjera/dijelova koda gdje si koristio naredu goto - ne treba nam cijeli program.
ajd dobro, evo onda samo dio koda.
a evo vam i sam program i tipovi tekstualnih datoteka koje otvara: download. samo nisam stavio 17., 18. i 19. tip
int main (){
// ovaj dio koda nije bitan, samo se ispisuje nešto na ekran
scanf("%d", &type);
switch (type){
/* kod ovih caseova, poziva se fja import_menu, i ona vraća vrijednost
koju poprima varijabla a. ako je a = 1, program se vraca na pocetak,
a ako je 2 ide na kraj, a na kraju se nesto ispisuje i program se zatvara
funkcija import_manu i sama poziva druge funkcije i ima tu jos svega, ali
vazno je samo ono sto ona vraca */
case 0: {
a=import_menu();
if (a==1) goto start;
if (a==2) goto end;
}
case 1: {
a=import_menu();
if (a==1) goto start;
if (a==2) goto end;
}
case 2: {
a=import_menu();
if (a==1) goto start;
if (a==2) goto end;
}
case 3: {
a=import_menu();
if (a==1) goto start;
if (a==2) goto end;
}
// i takvih case-ova ima 21 :D
Za izlaz može kreirati funkciju koja će obaviti ispis i prekinuti izvođenje programa.
Povratak na početak ovisi o ostatku koda, ali najjednostavniji oblik je napraviti petlju u kojoj će se nalaziti sve ono što se ponavlja. Naravno, svaki komad koda koji radi nešto konkretno će se nalaziti u funkcijama, pa će ti petlja zapravo raditi par provjera i pozivati funkcije. Izlazak iz petlje može riješiti nekim od standardnih oblika petlji (while, do while), a ako je provjera potrebna na nezgodnom mjestu unutar petlje napraviš beskonačnu petlju i izvođenje prekidaš s break. U takvom slučaju ispis može ići iza petlje i onda return za izlaz.
Inaće, ovaj case ti nije dobro napisan. Ne trebaju ti vitičaste zagrade, a na kraju svakog case bloka ide break jer se u protivnom izvršavaju svi case-ovi do kraja switch bloka. Ukoliko imaš potrebu izaći iz petlje dok si u switch bloku, možeš koristiti pomoćnu varijablu koju ćeš provjeriti nakon switch bloka i izaći.
Inaće, ovaj case ti nije dobro napisan. Ne trebaju ti vitičaste zagrade, a na kraju svakog case bloka ide break jer se u protivnom izvršavaju svi case-ovi do kraja switch bloka. Ukoliko imaš potrebu izaći iz petlje dok si u switch bloku, možeš koristiti pomoćnu varijablu koju ćeš provjeriti nakon switch bloka i izaći.
evo makno sam vitičaste zagrade
što se tiče break-a, koliko vidim ovdje može i bez njega, jer nastavak programa ovisi o vrijesnosti koju vraća fja import_menu, pa nece odma prijeci na drugi case, nego ili na pocetak programa ili na kraj
e sad, riješio sam se jednog goto-a. evo privremeno rješenje. sad me još samo pati kako maknuti još ovaj goto što je ostao
int main (){
int a;
system("COLOR 9");
start: start_func();
switch (type){
case 0:
input_format = "MPC";
soft = "Soft00Cmt";
a=import_menu();
if (a==1) goto start; // kazem, ovo je sam privremeno rjesenje. jer ne mogu samo pozvati
// funkciju start_func, jer onda nece radit switch-case
if (a==2) end_func();
case 1:
input_format = "SkyMap";
soft = "Soft01Cmt";
a=import_menu();
if (a==1) goto start;
if (a==2) end_func();
case 2:
input_format = "Guide";
soft = "Soft02Cmt";
a=import_menu();
if (a==1) goto start;
if (a==2) end_func();
void start_func(){
// tu su printfovi koji sve ono ispisuju
scanf("%d", &type); //type je deklariran u globalnom području, pa ga vide sve funkcije
}
void end_func(){
exit_screen();
printf("Press any key to exit... Copyright (c) 2011, jurluk");
getch();
exit (EXIT_SUCCESS);
}
Inaće, ovaj case ti nije dobro napisan. Ne trebaju ti vitičaste zagrade, a na kraju svakog case bloka ide break jer se u protivnom izvršavaju svi case-ovi do kraja switch bloka. Ukoliko imaš potrebu izaći iz petlje dok si u switch bloku, možeš koristiti pomoćnu varijablu koju ćeš provjeriti nakon switch bloka i izaći.
evo makno sam vitičaste zagrade
što se tiče break-a, koliko vidim ovdje može i bez njega, jer nastavak programa ovisi o vrijesnosti koju vraća fja import_menu, pa nece odma prijeci na drugi case, nego ili na pocetak programa ili na kraj
e sad, riješio sam se jednog goto-a. evo privremeno rješenje. sad me još samo pati kako maknuti još ovaj goto što je ostao
switch (type){
case 0:
input_format = "MPC";
soft = "Soft00Cmt";
a=import_menu();
if (a==1) goto start; // kazem, ovo je sam privremeno rjesenje. jer ne mogu samo pozvati
// funkciju start_func, jer onda nece radit switch-case
if (a==2) end_func();
case 1:
input_format = "SkyMap";
soft = "Soft01Cmt";
a=import_menu();
if (a==1) goto start;
if (a==2) end_func();
case 2:
input_format = "Guide";
soft = "Soft02Cmt";
a=import_menu();
if (a==1) goto start;
if (a==2) end_func();
Idemo korak po korak... Ti si samouk ili što? Tvoj kod pokazuje totalno nepoznavanje strukturnog (ili strukturiranog) programiranja. Morat ćeš totalno promijeniti pristup programiranju.
Prvo - problem zaliihosti. Ti u svakom (osim u zadnjem slučaju, koji služi za izlaz iz programa) koristišidentične tri linije koda. Zašto ih onda pišeš čak 20-ak puta, ako sve mogu biti iza switcha?! Naravno, u caseovima ćeš trebati napraviti break. To što ne koristiš break mi govori da ne shvaćaš njegovu funkciju.
Znači, što fali ovome:
switch (type){
case 0:
input_format = "MPC";
soft = "Soft00Cmt";
break;
case 1:
input_format = "SkyMap";
soft = "Soft01Cmt";
break;
case 2:
input_format = "Guide";
soft = "Soft02Cmt";
break;
case .....
} // kraj switcha
a=import_menu();
if (a==1) goto start;
if (a==2) end_func();
Znači, na ovaj način uklonio bi tu zalihost - pa bi goto imao samo . Međutim, imaš ti tu još zalihosti - dodjeljivanje vrijednosti varijablama input_format i soft. Naime, nemaš iznimke - za svaki type imaš neku vrijednost. Zar te to ne podsjeća na - polje? S indeksima od 0 do 19?
Znači, sve to možemo tranformirati u ovo (i umjesto gotoa i forsiranja izlaska iz programa pomoću funkcije exit, jednostavno napravimo petlju do..while kojom ćemo oblikovati prirodni tijek izvođenja programa - ako nisu zadovoljeni uvjeti za nastavak petlje, program jednostavno dođe do kraja, a ne da ga mi ručno rušimo:
int main (){ int a; system("COLOR 9");
struct Izbornik { char format[20]; char soft[20]; } izbornik[20] = { { format: "MPC", soft: "Soft00Cmt" }, { format: "SkyMap", soft: "Soft01Cmt" }, { format: "Guide", soft: "Soft02Cmt" }, { format: "xephem", soft: "Soft03Cmt" },
...................
};
// glavna petlja do { start_func();
if ((type >= 0) && (type < 20)) { input_format = izbornik[type].format; soft = izbornik[type].soft; a = import_menu(); } } while ((type != 21) && (a != 2)); // vrti se sve dok na prvom izborniku nije upisan broj 21 ili na drugom broj 2
// ne treba ti zasebna end-funkcija - mozes je integrirati ovdje, s obzirom // da neces na silu izlaziti iz programa exit_screen(); printf("Press any key to exit... Copyright (c) 2011, jurluk"); getch(); return EXIT_SUCCESS;}
Također, i start_func() bi mogao integrirati u main(). I jedna vrlo ozbiljna kritika - ne treba ti toliko globalnih varijabli! Time samo uzrokuješ to da ne znaš na kraju gdje se koja varijabla mijenja ili koristi. Recimo varijabla type - kako ja iz tvog koda mogu znati gdje se toj varijabli dodjeljuje vrijednost?! Moram ići kroz cijeli program i gledati! To se tako ne smije raditi. Varijabla type je trebala biti lokalna, samo u funkciji main i eventualno ako ti za nešto treba, proslijeđena kao argument nekoj drugoj funkciji! TOME SLUŽE ARGUMENTI! Tebi skoro pa ni jedna funkcija ne prima argumente, nego skoro sve koriste globalne varijable - TO JE POGREŠNO!
Funkcija start_func() je trebala vraćati int vrijednost i onda ti je njeno pozivanje trebalo izgledati ovako:
type = start_func();
i onda si funkciji import_menu trebao proslijediti tu vrijednost, znači
a = import_menu(type);
I sad na kraju pogledaj moj kod - mnogo je jednostavniji i pregledniji od tvojeg i ne koristi ni jednu jedinu goto naredbu.
Počni učiti programirati ispočetka. Počni od najjednostavniji zadataka, u kojima si dosad koristio goto. I napiši to bez goto naredbe, korištenjem do/while/for/if konstrukcija. Ako ne možeš sam dokučiti kako - PITAJ! Nemoj koristiti naredbu goto nego pitaj.
Ili recimo kako se riješiti gotoa u funkciji import_menu()... Znači, ti imaš ovo:
unos: printf(" Enter input filename: "); scanf("%s", fin_name);
if (fin_name[0]=='1' && fin_name[1]=='\0') return 1; if (fin_name[0]=='2' && fin_name[1]=='\0') return 2;
fin=fopen(fin_name, "r"); if (fin==NULL) { printf("\n Error opening file %s\n\n", fin_name); goto unos; }
else printf("\n File %s is successfully opened\n", fin_name);
A što fali ovome - jednoj lijepoj do-while petljici:
do {
printf(" Enter input filename: ");
scanf("%s", fin_name);
if (fin_name[0]=='1' && fin_name[1]=='\0') return 1;
if (fin_name[0]=='2' && fin_name[1]=='\0') return 2;
fin=fopen(fin_name, "r");
if (fin==NULL) printf("\n Error opening file %s\n\n", fin_name);
} while (fin==NULL);
printf("\n File %s is successfully opened\n", fin_name);
Edit: Ovo se da još malo ljepše napisati. Naime, uspoređivanje s NULL ti je nepotrebno. Zašto?
if (fin==NULL) je isto kao da si napisao if(!fin). Dakle, ovo bi bilo optimalnije rješenje.
do {
printf(" Enter input filename: ");
scanf("%s", fin_name);
if (fin_name[0]=='1' && fin_name[1]=='\0') return 1;
if (fin_name[0]=='2' && fin_name[1]=='\0') return 2;
fin=fopen(fin_name, "r");
if (!fin) printf("\n Error opening file %s\n\n", fin_name);
} while (!fin);
I kad to napraviš, u programu više nemaš ni jednu jedinu goto naredbu! Na tisuću linija koda, ni jedna goto naredba... Fascinantno.
nisam samouk, učim programiranje na faksu, odnosno c sam učio, više ne. pa što sam naučio, naučio sam. tako da sam zapravo od sad ipak samouk :D
a bože moj. sumnjam da si i ti nakon par mjeseci učenja c-a znao ovo što si sad ovdje objasnio. učim polako, ovo mi je prvi malo veći program. do sad su to sve bili "školski programi" po par desetaka linija koda...
ajd dobro, sad vidim da može i tako...
shvaćam ja njegovu funkciju itekako, samo u onom mom slučaju nije trebalo koristiti break, jer kao što sam već rekao, nastavak programa bi ovisio i vrijednosti koji vrati funkcija import_menu(), pa nece odmah prijeci na drugi case, nego ili na pocetak programa ili na kraj. a u ovom tvom slučaju naravno break se ne smije izostaviti. i da, ovo mi je zapravo bio prvi put uopce da sam koristio switch-case
Znači, sve to možemo tranformirati u ovo (i umjesto gotoa i forsiranja izlaska iz programa pomoću funkcije exit, jednostavno napravimo petlju do..while kojom ćemo oblikovati prirodni tijek izvođenja programa - ako nisu zadovoljeni uvjeti za nastavak petlje, program jednostavno dođe do kraja, a ne da ga mi ručno rušimo:
istina, ovo mi nije palo na pamet. al dobro, da programiram kojih 15-20 godina, koliko ti sigurno programiras i da imam toliko iskustva, sigurno bi mi palo na pamet. pa ne mogu ja u ovih 5 mjeseci znati koliko ti znas u toliko godina
Funkcija start_func() je trebala vraćati int vrijednost i onda ti je njeno pozivanje trebalo izgledati ovako:
type = start_func();
i onda si funkciji import_menu trebao proslijediti tu vrijednost, znači
a = import_menu(type);
znam da ima dosta globalnih varijabli, ali eto tako mi je bilo lakse nego da proslijeđujem vrijednost funkciji. znam da je to na neki nacin pogresno, jer eto kao sto i sam kazes, moras pregledat cijeli kod da vidis kako se gdje mijenja vrijednost. ali eto nisam planirao nikome davati taj kod, pa se niko ne bi zalio, i meni je bilo u redu. ali eto kad uhvatim vremena, malo cu se poigrati s time, samo da "pravda"bude zadovoljena ;)
tko zna, zna!
Počni učiti programirati ispočetka. Počni od najjednostavniji zadataka, u kojima si dosad koristio goto. I napiši to bez goto naredbe, korištenjem do/while/for/if konstrukcija. Ako ne možeš sam dokučiti kako - PITAJ! Nemoj koristiti naredbu goto nego pitaj.
do sad nikad nisam koristio goto, ovo je prvi put, jer je program za mene kao pocetnika bio dosta velik zalogaj, pa se nisam mogao izvuci a da ne koristim goto
Ili recimo kako se riješiti gotoa u funkciji import_menu()... Znači, ti imaš ovo:
...
A što fali ovome - jednoj lijepoj do-while petljici:
...
a dobro, to sam znao i ja, al mi se nije dalo preuređivat kod. lijen sam, priznajem, a ko prizna pola mu se prasta :D
if (fin==NULL) je isto kao da si napisao if(!fin). Dakle, ovo bi bilo optimalnije rješenje.
...
a dobro, isti drek, drugo pakovanje ;)
I kad to napraviš, u programu više nemaš ni jednu jedinu goto naredbu! Na tisuću linija koda, ni jedna goto naredba... Fascinantno.
zbilja jest!
i da, hvala na uloženom trudu i vremenu! rezultat je očigledan ;)
Kažeš - "lakše". To ti je dvosjekli mač. U programiranju "lakše" ne podrazumijeva to da ćeš ti u programu od 1000 linija koda deklarirati globalnu varijablu kako za dvije funkcije ne bi morao koristiti argument, a za jednu povratnu vrijednost. Razumiješ? Na programu od 1000 linija koda ti si ušićario desetak riječi teksta. Zar se to zbilja isplati? Planirao ti kome davati taj kod ili ne? NE, ne isplati se. Jer ovako kako si to napisao, u biti ti te funkcije nisu ni bile potrebne - izdvajao si kod u funkcije samo da kod razdijeliš na više dijelova. Da, ok, funkcije se mogu raditi i radi preglednosti, no u pravilu se u funkcije izdvaja kod koji će se više puta pozivati. Zbog toga funkcije često i imaju argumente. I funkcije, ako to nije posve nužno, ne bi trebale koristiti globalne varijable.
Funkcije bi trebale biti zasebne "cjeline". Trebale bi primiti neke podatke, nešto napraviti te bi eventualno bi trebale vratiti neku vrijednost. Uzmi si recimo ovo za primjer:
int a, b;
void zamijeni() {
int temp = a;
a = b;
b = temp;
}
int main() {
a = 5;
b = 3;
printf("a=%i, b=%i", a, b);
zamijeni();
printf("a=%i, b=%i", a, b);
return 0;
}
Koliko program ima smisla pisati na taj način, pa makar to radio sam za sebe i misliš da mu se poslije više nikad nećeš vraćati? Zar ne bi bilo logičnije, odnosno zar se ne bi imalo smisla malkice više potruditi pa napisati to kak spada?
void zamijeni(int &a, int &b) {
int temp = a;
a = b;
b = temp;
}
int main() {
int a = 5;
int b = 3;
printf("a=%i, b=%i", a, b);
zamijeni(a, b);
printf("a=%i, b=%i", a, b);
return 0;
}
Takvu funkciju zamijeni možeš čak izvući iz svog programa i upotrijebiti je u nekom drugom programu. S onom prijašnjom funkcijom, koja je vezana na globalne varijable, to ne možeš.
Uglavnom - poanta ovog mojeg je - ako već učiš, onda uči ispravno. I onda radi ispravno. Jer će ti se u suprotnom nekad i u nekom ozbiljnijem programu dogoditi da ne radiš ispravno, da koristiš globalne varijable tamo gdje ne treba itd. Pazi - iz iskustva znam da ti se takve stvari, za koje ti se isprva čini da su "lakše", kasnije obiju u glavu. Recimo ti bi, sad da ideš prepraviti program da to bude kak spada, trebao potrošiti barem pet puta više vremena na prepravljanje, nego da si odmah to napravio kako treba. I ne samo da bi time gubio vrijeme, nego ti se otvara mogućnost da napraviš i neki bug.
Nisam doduše baš toliko programirao na proceduralan način, ali zato imam dosta iskustva u OOP-u. U OOP-u takva ad hoc rješenja imaju gore posljedice. Čak i kad radiš web-programiranje, isto ti se stvari mogu obiti u glavu. Znači, ili radi ispravno, ili uopće nemoj raditi.
do sad nikad nisam koristio goto, ovo je prvi put, jer je program za mene kao pocetnika bio dosta velik zalogaj, pa se nisam mogao izvuci a da ne koristim goto
Meni bi u tom slučaju bilo logičnije da si napravio konstrukciju:
int kraj = FALSE;
do {
...
} while (!kraj);
Pa da si unutar petlje stavio uvjete i onda u slučajevima u kojima bi trebao izaći iz programa (ako je type jednako 21 ili a jednako 2), da si jednostavno varijablu kraj postavio u TRUE. Zapamti si ovu konstrukciju i ako ikad dođeš u napast da koristiš naredbu goto, iskoristi ovo.
if (fin==NULL) je isto kao da si napisao if(!fin). Dakle, ovo bi bilo optimalnije rješenje.
...
a dobro, isti drek, drugo pakovanje ;)
Tamo gdje bi trebao pisati više teksta (recimo koristiti argumente u funkcijama), tamo to izbjegavaš, a ovdje pišeš ono što ne treba. Fora je u tome da ono što je u if-uvjetu u zagradi, ono se samo po sebi logički uspoređuje.
Znači da, ako staviš provjeru je li nešto NULL, onda "logički gledano" radiš dvije provjere - prvo uspoređuješ varijablu s definiranom konstantom NULL, a potom provjeravaš je li rezultat te usporedbe logički true. U praksi je svejedno, jer kompajler to fino sve optimizira, ali zašto pisati ono što ne moraš pisati? I ono što se u drugim jezicima možda drugačije piše? Recimo u C-u i C++-u je definirana konstanta NULL, dok se u drugim jezicima koristi null (u pascalu nil). A u svim tim jezicima možeš provjeriti je li pokazivač ili objekt null tako da napišeš u stilu if(pokazivac)...
Nema problema. Bar negdje mogu prosipati svoju mudrost, s obzirom da nisam završio faks pa da mudrost prosipam učenicima ili studentima.
@ jurluk,
pošto je već netko pametniji savršeno (precizno) dao savjet, moram ga iskoristiti.
- jer učenje-vježbanje, čemu služi?
- Služi dobijanju rutine, rutina (u svakom poslu) vodi do savršenosti-preciznosti, izbjegavanju grešaka. Dali je to kuhanje, nogomet, glazba... jednako s programiranjem.
- Upravo je važno učiti 'pravilno', tek kasnije možeš razviti svoj stil, možda izmisliti nešto bolje..
Važno je da te vježbe (učenje) od početka radiš po pravilima struke, kasnije se navike teže mijenjaju.
Jednako ako ikad misliš proči razgovor za posao, vozači imaju internacionalne znakove, glazbenici note.. programeri imaju čist (ili prljav) kod. S takvim kodiranjem ispao bi u prvom krugu kvalifikacija za posao...
Isprika da si početnik ne vrijedi, jer se gubi smisao učenja (na pravi način). Može se takva isprika koristiti kad već radiš neki posao i uleti nešto novo-hitno, tad je rješenje po ''good enough'' principu prihvatljivo (ali znaš da će se već sutra pojaviti problem zbog tog..). To je privremeno krpanje, izuzetak od pravila.
pozdrav forumaši
koristim devc++ i ne znam namjestiti da mi "prozor"(??kak da drugačije napišem??) stoji..tj. ja kad napravim neki program kompajler mi kaže da je sve u redu i da nema grešaka.. ali kad taj program idem pokrenuti pojavi mi se prozor na samo nekoliko mili sekundi (jedva ga vidim) i odmah nestane...danas sam razgovarao sa profesorom i on mi je rekao da moram napisati neku naredbu ispred zadnje vitičaste zagrade ali koju, nebi se sjetio da ga hebeš
govorio mi je da u cmd-u mogu nešto pokušati namjestiti...do sata sam pokretao programe sa onim "izvrši do zadnjeg naredbenog retka" ali me zanima kako se namjestiti da normalno radi... pa ako neko zna o čemu uopće ja sad tu brbljam neka pomogne
getch(); ?
#include <cstdlib>
.
.
.
.
.
.
system("PAUSE");
return 0;
}
radi se o čistom c-u..ne radi ni jedna od ove dvije naredbe, ali mislim da mi je profesor nešto slično spominjao kao jurluk..
izbaci grešku
radi se o čistom c-u..ne radi ni jedna od ove dvije naredbe, ali mislim da mi je profesor nešto slično spominjao kao jurluk..
izbaci grešku
Za njegovu naredbu tj.getch(); trebaš includead <conio.h>
dakle u includovima...#include <conio.h>