Poslao: 08 Nov 2016 13:16
|
offline
- Pridružio: 03 Apr 2016
- Poruke: 136
|
#include <stdio.h>
main() {
int a=5,j;
printf("j = %d\n", a++);
printf("j = %d\n", --a);
printf("%d", a);
getch();
}
Ovo je valjda krajnje jednostavno,ali meni kao pocetniku nije jasno nista.
Ako moze neko da mi pojasni sve linije koda.
hvala...
|
|
|
Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
|
|
Poslao: 08 Nov 2016 13:18
|
offline
- vasa.93
- Moderator foruma
- Pridružio: 17 Dec 2007
- Poruke: 14824
- Gde živiš: Niš
|
Hajde napiši nam najpre ti kako razumeš ovaj kod, pa ćemo već da te ispravimo ako u nečemu grešiš i pojasnićemo ti nejasne stvari.
|
|
|
|
Poslao: 08 Nov 2016 13:22
|
offline
- Pridružio: 03 Apr 2016
- Poruke: 136
|
a=5 /* inicijalizovano
printf("j = %d\n", a++); /* Ovo se ne ovecava ali mi treba pojasnjenje zasto
printf("j = %d\n", --a); /* Ovo se neumanjuje ali mi treba pojasnjenje zasto
printf("%d", a); /*stampa vrijednos a koja je 5
getch();
}
To mi je donekle i jasno, ali ovaj dio nije:
main()
{
int t,a=3,b=7,i, j;
t=a&&b;
i=(t==3);
j=(i==0) ? i : t;
printf("%d %d",i,j);
getch();
Ovdje mi nista oko i,j nije jasno...
|
|
|
|
Poslao: 08 Nov 2016 13:33
|
offline
- Pridružio: 11 Apr 2012
- Poruke: 98
|
++a ће увећати вредност промењиве а па ће ти тек онда дати вредност и тиме ћеш добити као резултат а+1 и промењива а ће након инструкције имати исту ту вредност
док а++ ће прво дати вредност промењиве а (док још није додата јединица) па ће тек након тога увећати промењиву а за један
аналогно томе --а и а--.
тако да је
printf("j = %d\n", a++);
исто што и
printf("j = %d\n", a);
а = а + 1;
док је
printf("j = %d\n", --a);
исто што и
a = a - 1;
printf("j = %d\n", a);
тако је а повећано тек након што се први пут иштампало а затим је смањено пре него што се други пут иштампало и због тога ти на екрану излизи само вредност 5.
|
|
|
|
Poslao: 08 Nov 2016 13:35
|
offline
- vasa.93
- Moderator foruma
- Pridružio: 17 Dec 2007
- Poruke: 14824
- Gde živiš: Niš
|
rocknrola ::printf("j = %d\n", a++); /* Ovo se ne ovecava ali mi treba pojasnjenje zastoZbog toga što je u pitanju postinkrementalni operator. On se izvršava po završetku operacije štampanja.
rocknrola ::printf("j = %d\n", --a); /* Ovo se neumanjuje ali mi treba pojasnjenje zastoSiguran si da ne? Ovde je u pitanju predekrementalni operator. On se izvršava pre operacije štampanja.
Ono što je problem kod druge operacije je posledica ovakve sekvence koda. U liniji printf("j = %d\n", a++); se vrši uvećavanje promenljive a za 1, pa po završetku izvršenja ove linije a ima vrednost 6. Nakon toga se u sledećoj liniji a najpre dekrementira za 1, te u trenutku štampanja ima vrednost 5. Zbog toga te je to dovelo u zabludu da --a ne dekrementira vrednost promenljive a.
|
|
|
|
Poslao: 08 Nov 2016 13:36
|
offline
- Pridružio: 03 Apr 2016
- Poruke: 136
|
Napisano: 08 Nov 2016 13:35
Znaci da ce mi stampati:
5
5
5
Dopuna: 08 Nov 2016 13:36
vasa.93 ::rocknrola ::printf("j = %d\n", a++); /* Ovo se ne ovecava ali mi treba pojasnjenje zastoZbog toga što je u pitanju postinkrementalni operator. On se izvršava po završetku operacije štampanja.
rocknrola ::printf("j = %d\n", --a); /* Ovo se neumanjuje ali mi treba pojasnjenje zastoSiguran si da ne? Ovde je u pitanju predekrementalni operator. On se izvršava pre operacije štampanja.
Ono što je problem kod druge operacije je posledica ovakve sekvence koda. U liniji printf("j = %d\n", a++); se vrši uvećavanje promenljive a za 1, pa po završetku izvršenja ove linije a ima vrednost 6. Nakon toga se u sledećoj liniji a najpre dekrementira za 1, te u trenutku štampanja ima vrednost 5. Zbog toga te je to dovelo u zabludu da --a ne dekrementira vrednost promenljive a.
Pojasnjeno,
sad mi je vec jasno.
Jos kad budete imali vremena ovaj drugi deo da mi pojasnite
|
|
|
|
Poslao: 08 Nov 2016 13:38
|
offline
- vasa.93
- Moderator foruma
- Pridružio: 17 Dec 2007
- Poruke: 14824
- Gde živiš: Niš
|
Ja za drugi deo takođe čekam da najpre ti napišeš kako shvataš sve to.
|
|
|
|
Poslao: 08 Nov 2016 13:40
|
offline
- Pridružio: 03 Apr 2016
- Poruke: 136
|
Napisano: 08 Nov 2016 13:38
Gedza98 ::++a ће увећати вредност промењиве а па ће ти тек онда дати вредност и тиме ћеш добити као резултат а+1 и промењива а ће након инструкције имати исту ту вредност
док а++ ће прво дати вредност промењиве а (док још није додата јединица) па ће тек након тога увећати промењиву а за један
аналогно томе --а и а--.
тако да је
printf("j = %d\n", a++);
исто што и
printf("j = %d\n", a);
а = а + 1;
док је
printf("j = %d\n", --a);
исто што и
a = a - 1;
printf("j = %d\n", a);
тако је а повећано тек након што се први пут иштампало а затим је смањено пре него што се други пут иштампало и због тога ти на екрану излизи само вредност 5.
Potpuno jasno nakon Vasih objasnjenja.
Zahvaljujem
Dopuna: 08 Nov 2016 13:40
Za drugi dio mi je jasna samo inicijalizacija
t=a&&b; /*Ovo je logicke operator i, znaci a puta b ??
i=(t==3); /* Ovo mi nije jasno i=3 ?
j=(i==0) ? i : t; /* Ako je i nula ona je j isto sto i i ?
printf("%d %d",i,j);
getch();
|
|
|
|
|
Poslao: 08 Nov 2016 16:29
|
offline
- Rastafarii
- Moderator foruma
- Pridružio: 22 Mar 2006
- Poruke: 3760
- Gde živiš: 127.0.0.1
|
vasa.93 ::rocknrola ::printf("j = %d\n", --a); /* Ovo se neumanjuje ali mi treba pojasnjenje zastoSiguran si da ne? Ovde je u pitanju predekrementalni operator. On se izvršava pre operacije štampanja.
Zapravo se umanjuje, ali se ne vidi bas zbog onog a++ gore - prvo je odstampao vrednost a (5), a onda je uvecao za jedan (6). Medjutim, nigde u medjuvremenu ne stampa vrednost a pa ne zna da joj je sada vrednost 6, da bi se pre stampanja umanjila za 1 i dobila vrednost 5.
Odnosno, linija po linija:
#include <stdio.h>
main() {
int a=5,j; /*a je 5, ne stampa nista */
printf("j = %d\n", a++); /* stampa 5, a je 6 (prvo stampa pa uvecava) */
printf("j = %d\n", --a); /* stampa 5, a je 5 (prvo smanjuje pa stampa) */
printf("%d", a); /* stampa 5, a je 5
|
|
|
|