Moji glupi smisljeni zadaci i problemi naravno

Moji glupi smisljeni zadaci i problemi naravno

offline
  • Dario V.
  • Pridružio: 10 Jan 2012
  • Poruke: 975

Pocentik sam u C-u i smisaljm neke sebi zadatke glupe i sad u ovoj temi cu da trazim pomoc za takve zadatke glupe!

Evo primjer jednog zadatka, prost je zahtjev zadatka odgovoriti da pitanje i ispisati tacno ili ne.

Gdje j greska msm da je u deklarisanju ovih promjenjljih, ali ne znam kako drugacije da ih deklarisem.

Dakle glup sam, ovo nikuda ne vodi i da je proradilo, st abi bilo da sam imao 20 pitanja, pa onda imao bi u deklarisanju promjenljivih 100 djavola. St aje resenje i da mi se objasni ako moze.

evo tog glupog koda!

#include <stdio.h>
main ()
{
char tacno, odgovor, madrid;

printf("Koji je glavni grad Spanije?\n");
scanf("%d\n", &odgovor);

tacno = madrid;

if ( odgovor == tacno ) {
printf ("Tacan odgovor\n");
} else {
printf ("Nije tacan odgovor\n");
}
system("Pause");
}



Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
offline
  • Més que un club
  • Glavni vokal @ Harpun
  • Pridružio: 27 Feb 2009
  • Poruke: 3898
  • Gde živiš: Novi Sad,Klisa

Napisano: 26 Maj 2012 0:04

imas PP Wink

Dopuna: 26 Maj 2012 0:05

al odgovoricu i ovde:
Za tako nesto sto ti oces,koriste se poseban tip podataka,string koji je podtip tipa podataka koji se zove niz ili array i on je malo slozenije prirode od ovih jednostavnijih zadataka koje ti zelis da radis. Wink



offline
  • Pridružio: 19 Maj 2011
  • Poruke: 297

Kolega nike992, nisi glup nego samo treba vremena da se ovo prezvace, ne moze nista na brzaka da se savlada.

Nisam bas strucan za objasnjavnje ali cu pokusati da ukazem na neke najbitnije stvari koje moras znati pa ce ti posle biti lakse da razumes neke stvari.

Dakle imas tipove promenjljivih:
char slovo; char* pokazivac;

char oznacava tip podatka koji ce da drzi, u ovom slucaju to je jedno slovo. slovo je samo ime koje dajes promenjljivoj.
char* oznacava isto tip podatka, u ovom slucaju je pokazivac i on "pokazuje" na niz slova.


E sad da se bacimo malo na memoriju. Ovo ti je veoma bitno da razumes!
Prvo da napomenem da sam ja ucio samo iz knjiga i tutorijala koje su na engleskom tako da ne znam neke izraze koje koriste na srpskom.

Memorija koju program koristi je podeljena na vise "ogranaka". Spomenucu samo 2 najbitnijestavke, a to su stek (stack) i hip (heap).
Svaka od ovih stavki ima svoje prednosti a i mane, ali necemo ulaziti u detalje jer nije ni mnogo bitno kad se pocinje sa programirajem.

Memoriju mozes da zamislis kao celije (pogledaj sliku). Svaka celija ima svoju adresu odnosno broj koji je obicno u hexadecimalnoj formi (crveno) i vrednost koja se nalazi na toj adresi (zeleno).
Znaci ako ti je lakse mozes isto mozes da zamislis kao telefonski imenik, brojevi telefona oznacavaju adrese.



E sad recimo imamo ovaj izraz:

char* pokz = "Nike";

Rezervisace se mesto na steku (stack) za pokazivac "pokz" i niz slova na koji pokazuje.



Znaci pokazivac ima svoju adresu (0x5a sa slike) i ona se dobija sa ovim izrazom:
&pkz

ispisivanje u konzoli:

printf("%d", &pkz);

i njegova vrednost koju drzi je adresa (0x01 sa slike) na koju "pokazuje":
pkz


ispisivanje u konzoli:

printf("%d", pkz);

i vrednost na toj adresi (1 slovo sa ovim izrazom, N sa slike):
*pkz printf("%c", *pkz);

Za listu parametara printf funkcije pogledaj http://www.cplusplus.com/reference/clibrary/cstdio/printf/

E sad da se upoznamo sa nizovima koji su slicni pokazivacima.

char niz[5];
char - tip podatka
niz - ime
5 - broj elemenata koje moze da drzi

Rezervisan je prostor za niz od 5 slova na steku (stack) ali im nije dodeljena vrednost.
Znaci mozes u istoj liniji da popunis vrednosti za svaku "celiju":
char niz[5] = { 'N', 'i', 'k', 'e', '\0' }; //ili ovako stim da ce kompajler automatski odrediti duzinu niza char niz[] =  { 'N', 'i', 'k', 'e', '\0' }; ... // ili se propusta nekoj funkciji da ona dodeli vrednosti, kao recimo scanf scanf("%s", niz);

Obrati paznju da smo "terminisali" niz sa '\0', ovaj simbol sluzi da bi neke funkcije koje pozivas znale gde je kraj niza.
Za razliku od one deklaracije ova automatski apenduje '\0' na kraju:
char niz[5] = "Nike";// Nike + \0 // ili char niz[] = "Nike";// Nike + \0

Na tebi je izbor sta ti je lakse.

Stek je relativno mali, mislim da je default oko 1 mb u Visal Studiju, i uglavnom sluzi za male alokacije prostora kao sto su lokalne promenjljive, privremene pr., u rekurzivnim funkcijama...itd
Mislim sasvim je dovoljan za neke sitnije vezbice.

Heap omogucava dosta veci prostor a prostor se rezervise ovako:
char* pkz; pkz = (char*)malloc(20); // rezervisan prostor od 20 bajta, ali nisu dodeljene vrednosti u celijama //ili u istoj liniji char* pkz = (char*)malloc(20); // rezervisan prostor od 20 bajta, ali nisu dodeljene vrednosti u celijama ... //i sad koristis taj prostor, recimo scanf scanf("%s", pkz); ... // za razliku od steka na kraju moras osloboditi tu memoriju koju si alocirao na hipu (heap) free(pkz);
Funkcija malloc http://www.cplusplus.com/reference/clibrary/cstdlib/malloc/
Funkcija free http://www.cplusplus.com/reference/clibrary/cstdlib/free/

Znaci rezervisan je prostor na steku (stack) za pokazivac "pkz" i 20 bajta na hipu (heap), a vrednost pokazivaca "pkz" je adresa na prostoru koji smo rezervisali na hipu.


Primeri deklaracija pokazivaca, sta ti god odgovara ili sta ti je vise citljivije:

char* p1, *p2, *p3; //je isto kao char* p1; char* p2; char* p3;


E sad za tvoj primer zadatka islo bi nesto ovako:
... char* tacanOdgovor = "madrid"; char* odgovor = (char*)malloc(20); printf("Koji je glavni grad Spanije?\n"); scanf("%s", odgovor); int rezlutatFunkcije = strcmp(odgovor, tacanOdgovor); if(0 == rezlutatFunkcije) {     printf("Tacan odgovor!"); } else {     printf("Netacan odgovor!"); } free(odgovor); ...
Funkcija strcmp http://www.cplusplus.com/reference/clibrary/cstring/strcmp/

Ima dosta detalja koje sam preskocio ali mislim da je dovoljno za pocetak.
Ako ti nesto nije bas jasno slobodno pitaj.

offline
  • C# and PHP Developer
  • Pridružio: 16 Feb 2011
  • Poruke: 1630
  • Gde živiš: Pancevo

Ja neradm C,C++ ali radim Javu i PHP i samo bih se na kratko nadovezao za to sto si sebe nazvao glupim.
Problem je u tome sto nemas dovoljno sati rada i iskustva. Ja kada sam ucio bilo je kada sam nekada psovao sebe isto nazivao da sam glup, satima pokusavao da ukapiram deo koda kako da izvede, kako se radi i nije islo. Odmori malo glavu i videces da ce posle da bude lakse.

Moras da razmisljas kao PS ako oces da budes dobar programer, moras da znas kako programi rade.
Moj programi su puni one rece "AKO"

Ex to "ako" je jako bitno: receno po srpskom.
Ako, Sta ako, Ako je tako, Ako je ovako, Onda uradi ovako, ili ako nije tako, ovako Smile Cudno
Ali to su samo IF,ELSE,ELSE IF iskazi ali po srpskom.
A tipove podataka gledaj kao rodove,stvari u stvarnom zivotu. Da neduzim idem u OFF.

Nadam se da se neljutite sto sam uskocio u temu ovako iznenada u sred diskusije.

offline
  • Dario V.
  • Pridružio: 10 Jan 2012
  • Poruke: 975

Hvala morando!

_IkaC napraotiv sta se imas izvinjavati brate moj, ja volim tako kada neko dijeli sa mnom svoja iskustva i pocetke. Zato sto mi je to neophodno!

Dakle svaka recanica i savjet i sve mi je potrebno !

Ko je trenutno na forumu
 

Ukupno su 675 korisnika na forumu :: 9 registrovanih, 1 sakriven i 665 gosta   ::   [ Administrator ] [ Supermoderator ] [ Moderator ] :: Detaljnije

Najviše korisnika na forumu ikad bilo je 3466 - dana 01 Jun 2021 17:07

Korisnici koji su trenutno na forumu:
Korisnici trenutno na forumu: esx66, havoc995, hooraay, pacika, suton, uruk, voja64, zziko, 125