C

Jeki

Obećava
Poruka
90
Ovo nek bude forum za pomoc ljudima koji se bave programiranjem u C-u,kao ja npr.sada.
Moje prvo pitanje je kod konverzije za sta sluze %%.kapiram kad se koristi % pa tip konverzije,ali zasta sluze 2 %.I jos jedno pitanje ono sto se zove lvrednost sta to tacno predstavlja.Ja umem da je prepoznam,ali nisam bas sigurna da bih mogla da je definisem?
A,da imam i jos jedno pitanje za realne tipove double,float i long double kako da znam koji kad da koristim,tj.kad da koristim double,kada float a kada long double(isto ovo vazi i za cele brojeve tj.kada se koristi samo int kada long int,a kada short int)

Unapred hvala
 
e ovo pre ne znam...a ovo posle: to utiche na opseg tvojih brojeva, tj koliko reci zauzima koji tip
npr short int je 1B, long int je 3B (na primer)
to ti utice na opseg brojeva (osam bitova pa vidi :)
 
- %% sluzhi, jednostavno, da bi mogla da prikazhesh i taj znak pri ispisu :)
- lVrednost ne morash da "prepoznash" - prepoznace je kompajler umesto tebe kad neshto zabrljash, odnosno kad kompletan izraz ne vraca vrednost koja se mozhe dodeliti bilo chemu :)
- Koji tip da koristish zavisi iskljuchivo od toga shta ti treba. float ima mnogo manju preciznost od double tipa, ali je brzhi i "kraci". Na "long" slobodno zaboravi, jer nema velike praktichne primene (mpr. int i long su ista stvar na danashnjim kompajlerima za Win, jedino shto prema vazhecem standardu long garantuje 4 bajta duzhine, dok je int promenljive duzhine i zavisi od platforme). "short int" je 16-bitni celobrojni tip (dva bajta).
 
da slozili smo se...
lvalue bi bilo recimo nesto sto moze da dodje sa leve strane "=" znaci tome mozes da dodelis neku vrednost.

int a; a je lvalue
a-- = 10 (jeste lvalue - dodelis a 10 pa povecas)
--a = 10 (ne moze jer ti povecas pa dodas..uf ne znam kako ali nekako mi je jasno)

da li je ovo zadnje ok?
 
E,hvala svima na pomoci za sada(bice tu jos pitanja ,garant).
Za Gosta:sto se tice toga kako prepoznajem da li je nesto lvrednost ili ne mislila sam na to da ako je nesto slovo(tj.promenljiva) onda je to lvrednost zato sto sam ga unapred definisala i odredila mu mesto u memoiji,a neki izraz npr.ne moze biti lvrednost jer mu jos nije odredjeno mesto u memoriji.
Hm,tako sam to ja shvatila.Nadam se da je to dobar rezon.

Pozdrav
 
i ako sto rekoh evo mene u najskorije vreme sa novim pitanjcima.
Pa da se o'ma bacimo na posao :-)
E,'vako,ovog puta sam skupila vise pitanja pa cu da ih ispisem sve u jednoj poruci.
Prvo sta je bocni efekat( cesto se spominje,a ja mu bas ne vidim neku prakticnu vrednost,pa me zato interesuje sta je i koja mu je svrha)
Drugo:kod funkcije rand pominje se konstanta RAnd_max i kaze se da je vrednost funkcije rand pseudoslucajan broj sa ravnomernom raspodelom u opsegu [o,Rand_max].prvo ova recenica mi nije jasna(kakav pseudoslucajan broj),a onda mi nije jasno ta konstanta Rand_max kako se ona ustvari koristi)
Trece za operacije sa bitovima tj.shiftovanje << i >> ovde mi nije jasno kako se vrsi shiftovanje u desno kod signed(tj.oznacenih)
E a sad evo par primera koje ne mogu da resim za logicke operacije i rad sa bitovima 0xff56>>4(treba da se dobije 0xfff5,kako?)
e,sad kod ovog primera sa logickim kako da znam da li je rezultat 1 ili 0 primeri:0x1234 i 022222&&055555
Da,u predjasnjoj poruci zaboravi da pitam sta se podrazumeva pod pojmom 1 struka,2-struka i vise stuka tacnost?

I evo za kraj 1 zadacic koji uopste ne kapiram,tj.ne kapiram princip ,a glasi:Vreme se predstavlja u obliku godine,meseca,dana,sata i minuta..Na c-u sasataviti program za pakovanje i obrnuti proces raspakivanja podataka o vremenu u jednu 32-bitnu celobrojnu promenljivu(Hm,prvo mi sama definicija tog pojma pakovanje i raspakiivanje vremena(naravno po bitovima)nije jasna)

Eto,toliko od mene ovpg puta.
Hvala!

Pozdrav
Jeki
 
Pa bocni efekat je kada se nesto sa strane uradi u samom izrazu. Primer
c=a + b++;
gde je c=a+b sam izraz, a bozni efekat tog izraza je da se b povecao za jedan.

Pa pseudoslucajan broj je "slucajni" broj koji se dobije pozivom funkcije. Nije u pitanju cisti slucajan broj jer ako napises program koji poziva 5 puta slucajan broj, svaki put kada pozoves program dobices 5 istih brojeva. Pa da bi dobila pravu slucajnonts onda tu sluzi funkcija randomize koja podesi koji"set" slucjnih brojeva zelis. Medjutim i tu dobijas istu pricu jer za isti vrednost randomize funkcije, slucajne vrednosti ce biti iste. Pa se u praksi za nazovi potupunu slucajnost koristi kao argument za randomize recimo vreme.

2.
In Numerical Recipes in C: The Art of Scientific Computing (William H.
Press, Brian P. Flannery, Saul A. Teukolsky, William T. Vetterling; New
York: Cambridge University Press, 1992 (2nd ed., p. 277)), the follow-
ing comments are made:
"If you want to generate a random integer between 1 and 10, you
should always do it by using high-order bits, as in

j=1+(int) (10.0*rand()/(RAND_MAX+1.0));

and never by anything resembling

j=1+(rand() % 10);

(which uses lower-order bits)."


A sto se tice zadatka pa to pakovanje je skracivanje zapisa, primera radi racnari mere vreme u sekundama on 1. januara 1970 godine. i taj zapis je dugacak 4 bajta. a ako bi ga pisala u nama citljivom obliku onda bi ta duzina bila mnogo duza od 4 bajta i u tom smislu se misli na pakovanje.
unutar <time.h> imas funkciju time_t time(time_t *t); koja ti daje broj sekundi od 1.1.1970 i funkcije

struct tm *gmtime(const time_t *timep);
struct tm *gmtime_r(const time_t *timep, struct tm *result);

struct tm *localtime(const time_t *timep);
struct tm *localtime_r(const time_t *timep, struct tm *result);

time_t mktime(struct tm *tm);

koje rade konverzije;


struct tm {
int tm_sec; /* seconds */
int tm_min; /* minutes */
int tm_hour; /* hours */
int tm_mday; /* day of the month */
int tm_mon; /* month */
int tm_year; /* year */
int tm_wday; /* day of the week */
int tm_yday; /* day in the year */
int tm_isdst; /* daylight saving time */
};
 
OK, samo mali dodatak na prichu :

> Shiftovanje u desno
Kod signed brojeva, ako je najvishi bit "1" broj je negativan, tako ce se redom i popunjavarti, pri shiftovanju udesno, i vishi bitovi jedinicom, odnosno binarni negativni zapis ce biti ochuvan. Kod unsigned brojeva umesto jedinica, sa leve strane ulecu nule.

> Pakovanje datuma
Zadatak ti zahteva malo petljanja sa bitovima. Dakle, godinu mozhesh da spakujesh u odredjeni broj bitova zavisno odakle pochinjesh da brojish nultu godinu. Za mesece je dovoljno 4 bita (2^4=16), za dane 5 bitova (2^5=32), sate opet u 5 bitova, a minute u 6 (2^6=64). Ostaje ti 12 bitova za godinu (ali nakon shto odredish koja je godina nulta, naravno).
Spakovano u 32 bita to je otprilike ovako :
12 | 4 | 5 | 5 | 6 <- 0-ti bit
G | D | M | S | Min

Evo primera kako izvuci Sate ("time" je ona "spakovana" varijabla):

unsigned sat =
(time & 11111000000) >> 6;
napisano u binarnom obliku da bi lakshe videla relaciju

- a ovako upisati sate :

time = time | (sati << 6);

Sve ovo mozhe i mnogo lakshe uz bit-field, ali to je vec druga pricha ;)
 
markes:
Moze li neko d ami objasni algoritam selection i insertion sorta(tj.sortiranja)i da mi napisete kako se to izvodi u C-u?

Hvala

Marko
ako nisam promeshao, jedan radi tako sto na pocetku birash (select) najveci/najmanji i dovodish ga na pravo mesto, pa onda od preostalih ponavljash isto to... a algoritam sa ubacivanjem radi tako sto na pocetku pretpostavljash da je niz uredjen pa onda ubacujesh element na pravo mesto, a obicno polazis od niza sa jednim clanom tako da je on uvek uredjen.... sad implementacija u sustini nije teska ako si ovo shvatio
 
e,vako tp it je fora sa uporedjivanjem(tj.sortiranje).

imas ovaj deo obavezno

For(i>1';i<n-1;i++)
for(j>1;j<n;j++)
(register int b=a,a=a[j],a[j]=b)

ja mislim da je to tako.bar tako je meni radilo.

E,da samo kad smo kod toga nije mi jasno zasto i treba da bude manje od n-1?

ako moze neko to da mi pojasni.
 
E,da samo kad smo kod toga nije mi jasno zasto i treba da bude manje od n-1?
Ako "odvrtish" algoritam na papiru, samo ce ti se kas'ti ;)

PS
"register" keyword je veoma redak, ne videh ga u upotrebi odavno. Kompajleri su odaaavnooo postali veoma pametni, tako da takve stvari ne morash da optimizujesh za njih, sami ce oni to... ;)
 
PA,dobro,ali ja obicno(dobro uvek)koristim tu modifikaciju da mu naglasim da ce postojati samo u tom delu,a da posle toga nestaje(i ako mi je potreban posle opet ispocetka mora da se stvori).Isto tako koristim i static za trajnu,tj.onu koju ce mi stalno ostati.
Znam ja da je kompajler pametan,ali ipak......

To ti je(bar tako ja to kapiram)na foru onoga kad vrsis izricitu konverziju u neki tip(ili ti kastovanje).Mislim kompajler ce ga prihvatiti i bez toga,ali mi u Visual-u prijavi warnings,a to ne podnosim :grrrrrr: :wink:
 
ja obicno(dobro uvek)koristim tu modifikaciju da mu naglasim da ce postojati samo u tom delu,a da posle toga nestaje(i ako mi je potreban posle opet ispocetka mora da se stvori).

"register" kao storage-type je preporuka, a ne naredba kompajleru ;)
Znachi, ako kompajler analizom koda utvrdi da nema slobodnih registara u datom trenutku zaboravice na tvoj zahtev.
Ovo veoma zavisi i od platforme - npr. x86 je nevidjeni krsh od procesora sa jako malo, uglavnom specijalizovanih, registara, shto kompajleru jako otezhava posao. PPC (i svaki drugi RISC) imaju mnogo veci broj registara za opshtu namenu, tako da ce kompajler optimizovati onaj tvoj kod automatski (smeshtajuci brojache i privremene promenljive u registre automatski). Josh jednom, zaboravi na "register" u opshtem sluchaju. OK je za specifichne namene, ali forsirati to u nekom opshtem sluchaju je vishe losh programerski stil nego bilo koja dobit u brzini.
 
Hm,evo mene ponovo.

Nisam bas skapirao kako funkcionise kad se for,while i jos jedna naredba(ne mogu sad da se setim koja)kombinuju sa break,tj. to se zove sa izlazom u sredini(valjda)
E,pa zna li neko da mi pojasni to malo kako funkcionise sa svim tim naredbama ponaosob i kad se koristi?
 
markes:
Hm,evo mene ponovo.

Nisam bas skapirao kako funkcionise kad se for,while i jos jedna naredba(ne mogu sad da se setim koja)kombinuju sa break,tj. to se zove sa izlazom u sredini(valjda)
E,pa zna li neko da mi pojasni to malo kako funkcionise sa svim tim naredbama ponaosob i kad se koristi?
znam da cete pljuvati po meni posle ovoga, ali bolje bi bilo da uzmesh knjigu za c (najbolje kerningen i rici) pa tamo pogledaj, jer ovo su zaista najelementarnija pitanja
 
Bas ako je bitno koristim Krausovu knjigu i tamo ima tih algoritama,ali mi nije bilo jasni kako se koriste,pa sam zato pitao.
Ako ne zelite da odgovorite u redu,ali ja bih mooooolio da mi neko odgovori.

POzdrav
 
markes:
Bas ako je bitno koristim Krausovu knjigu i tamo ima tih algoritama,ali mi nije bilo jasni kako se koriste,pa sam zato pitao.
Ako ne zelite da odgovorite u redu,ali ja bih mooooolio da mi neko odgovori.

POzdrav
Kernighan & Ritchie strana 62 i 63.
Ne znam kako i iz Krausa ne vidis primer. Nema tu mnogo da se objasnjava a siguran sam da ima i u knjizi koju koristis primera.

Izlaz "break" obezbedjuje rani izlaz iz "for", "while" i "do" petlje, kao i iz switch-a. Prouzrokuje da unutrasnja zatvorena petlja, ili "switch", bude pozvana trenutno.

skraceni primer za "for"
{
for (n= 1; n<10,n++
if "neki uslov"
break /* prekida se petlja...
return n
}

Pazljivije citaj, to su samo osnove osnovinih osnova... Nije tesko odgovoriti, ali ako vidim da se neko ne trydi vec zeli odmah sazvakano, nije uredu. To sa "break" si mogaoi skapirati sam za 15 sec...
 
da li neko ima u elektronskom formatu komande najcesce koriscenih biblioteka koje koristi gcc linux kompajler , po mogucnosti sa kratkim objasnjenjima znacenja.
unapred hvala.
 
codemaker:
markes:
Bas ako je bitno koristim Krausovu knjigu i tamo ima tih algoritama,ali mi nije bilo jasni kako se koriste,pa sam zato pitao.
Ako ne zelite da odgovorite u redu,ali ja bih mooooolio da mi neko odgovori.

POzdrav
Kernighan & Ritchie strana 62 i 63.
Ne znam kako i iz Krausa ne vidis primer. Nema tu mnogo da se objasnjava a siguran sam da ima i u knjizi koju koristis primera.

Izlaz "break" obezbedjuje rani izlaz iz "for", "while" i "do" petlje, kao i iz switch-a. Prouzrokuje da unutrasnja zatvorena petlja, ili "switch", bude pozvana trenutno.

skraceni primer za "for"
{
for (n= 1; n<10,n++
if "neki uslov"
break /* prekida se petlja...
return n
}

Pazljivije citaj, to su samo osnove osnovinih osnova... Nije tesko odgovoriti, ali ako vidim da se neko ne trydi vec zeli odmah sazvakano, nije uredu. To sa "break" si mogaoi skapirati sam za 15 sec...

Brate ako hoces da kazes da sam glup,ok,ali ja stvarno to nisam skapirao.I ne,nisam glup.

Hvala ti sto si mi odgovorio! :)
 
Pazljivije citaj, to su samo osnove osnovinih osnova... Nije tesko odgovoriti, ali ako vidim da se neko ne trydi vec zeli odmah sazvakano, nije uredu. To sa "break" si mogaoi skapirati sam za 15 sec...
Brate ako hoces da kazes da sam glup,ok,ali ja stvarno to nisam skapirao.I ne,nisam glup.
Hvala ti sto si mi odgovorio! :)

Pa zasto bih mislio da si glup? Niko se nije naucen rodio. Zeleo sam samo da kazem, da mnogo puta treba i sam da se potrudis da skapiras sta se u knjizi kaze, a ne da pri prvom problemu trazis da ti neko sazvace. Pogotovo tako elementarne i veoma jasne stvari...
Na pamet mi nepada da ti kazem da si glup, mislim da treba vise koncentracije, to je to.
 
e,evo i mene!

Nije me bilo dugo,da ,da znam!
Nadam se da vam nisam mnooogo nedostajala! :wink:

Imam pitanjce u vezi sa funkcijama sa promenljivim brojem argumenata!
Tj.va_start,va_arg,va_end,pok_arg,posl_arg?
Sta one rade i kad ih koristim?
I da sto se tice makroa,kako da ih povezem sa datotekama,tj.sa cinjenicom da naprimer f-ja getc se ostvaruje kao makro?Dok se fgetcda kazem normalno ostvaruje?
Sta to ustvari znaci da se 'ostvaruje kao makro?'
 

Back
Top