Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Razlika izmedju operacije i naredbe?

[es] :: C/C++ programiranje :: C/C++ za početnike :: Razlika izmedju operacije i naredbe?

[ Pregleda: 2798 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Lazoman

Član broj: 261300
Poruke: 93
*.dynamic.isp.telekom.rs.



+5 Profil

icon Razlika izmedju operacije i naredbe?28.07.2014. u 14:39 - pre 118 meseci
Krenuo sam sa čitanjem knjige ,,Programski jezik C sa rešenim zadacima" od Lasla Krausa, i u dosta stvari dolazim u situaciju da ne razumem sta je čovek napisao, jedna od tih je kod operatora dodele vrednosti u kojoj se kaže da je dodela vrednosti većem broju promenljivih u okviru jednog izraza na jeziku C moguća zahvaljujući tome što se dodela vrednosti smatra operacijom, ne naredbom, pa mene zanima koja je razlika izmedju operacije i naredbe, i neka mi neko napiše primere. Hvala :)

Ova trvrdnja se konkretno odnosi na ovaj izraz a=b=c=d+5, samo ne kontam zašto spominje naredbe?

 
Odgovor na temu

Odin D.
Mlađi referent za automatizaciju
samoupravljanja

Član broj: 37292
Poruke: 2549



+8370 Profil

icon Re: Razlika izmedju operacije i naredbe?28.07.2014. u 16:02 - pre 118 meseci
Pošto je Laslo u pitanju, tretiraj ovaj pokušaj odgovora samo kao pokušaj:

- rezultat operacije ima neku vrednost.
Npr. za operaciju sabiranja, ako napišeš
Code:
d+5

taj izraz ima neku vrednost, npr. ako je d = 4 onda je vrednost čitavog izraza 9.
Taj izraz onda npr. možeš dodijeliti nekoj varijabli.

Međutim, i sama dodjela vrednosti (operacija =) nekoj varijabli kao operacija, sem toga što tu vrednost smjesti u tu varijablu,
ima neku vrednost kao svoj rezultat.

Tako kad napišeš
Code:
c = 5

vrednost 5 će biti smještena u varijablu c, ali čitava ta operacija, posmatrana kao neki izraz, ima vrednost 5 kao rezultat.

Znači kad napišeš
Code:
b = c = 5

prvo će se izvršiti dio
Code:
c = 5

zato što operator = grupiše s desna u lijevo.
To je kao da si napisao:
Code:
b = (c = 5)

Time će vrednost 5 biti smještena u varijablu c, ali vrednost svega toga u zagradi ima takođe vrednost 5, pa je ostatak ekvivalentan sa
Code:
b = 5


Ne znam tačno šta Laslo podrazumjeva pod pojmom naredba, ali pretpostavljam da je to ili ono što se završava sa ; ili neko dešavanje koje ne rezultuje nekom vrednošću.

Na kraju, ako si početnik u programiranju (ili u C-u) i ne spremaš se za neki ispit kod Krausa na ETF-u, savjetovao bih da batališ Krausa i uzmeš neku literaturu poput
C Primer Plus, 6th edition, by Stephen Prata.



 
Odgovor na temu

djoka_l
Beograd

Član broj: 56075
Poruke: 3453

Jabber: djoka_l


+1462 Profil

icon Re: Razlika izmedju operacije i naredbe?28.07.2014. u 16:10 - pre 118 meseci
Pa, knjiga je napisana za ljude kojima C nije prvi jezik koji uče i koji su usvojili neke koncepte.

Evo da ti objasnim neke pojmove:

Naredba (eng. STATEMENT) je obično neka reč kojom se računaru daje uputstvo šta da uradi, a najčešće se odnosi na naredbe koje menjaju tok izvršenja programa. U C-u su to, na primer for, while, goto, return itd.

Operacija (eng. OPERATION) je nekakva funkcija koja vraća rezultat. Na primer, +, -, * itd.

U prastarom COBOL-u, ako si hteo da sabereš A i B i rezultat dodeliš varijabli C, trebalo je da napišeš (to je samo jedan od načina):

ADD A TO B GIVING C

Dakle, COBOLU je NAREDBA dodeljivanja reč GIVING.

U prastarom BASICU to bi isto uradio tako što bi napisao:

LET C=A+B

Ovde je LET NAREDBA dodeljivanja, a sintaksa je takva da je morao i da se piše i znak jednako. Kasnije su svi BASIC-i izbacili reč LET (postala je neobavezna) pa je NAREDBA dodele mogla da se napiše i kao

C=A+B

Paskaloidni jezici su imali sintaksu:

C := A+B ;

Da malo vidimo šta znači C := A+B. Ovde je C nešto što se zove LHS (Left Hand Side - leva strana) dok je A+B RHS (Right Hand Side - desna strana) naredbe dodeljivanja. Kako računar generiše kod koji ovo izvršava:

Uzmi VREDNOST varijable na adresi A i stavi u registar R1, uzmi VREDNOST na adresi B i stavi u R2, saberi R1 i R2 i rezultat stavi u R3, VREDNOST iz R3 stavi na ADRESU C.

Dakle, kada se obrađuje desna strana NAREDBE dodele radi se sa VREDNOSTIMA (eng. value), a leva strana (LHS) operiše sa adresama (referencama, eng. reference).

Međutim, C je okrenuo naglavačke naredbu dodele. U C-u je sledeća naredba legalna:

d=c=a+b

Ako ovo napišemo sa zagradama to izgleda:

d = ( c = (a+b))

Sada je a+b RHS naredbe dodele, a c je LHS naredbe dodele. Međutim c je istovremeno RHS naredbe dodele za d koje je LHS.

Ovaj koncept je prilično nervirajući za one kojima C nije prvi jezik, a tebi je potpuno svejedno.
 
Odgovor na temu

Mihajlo Cvetanović
Beograd

Moderator
Član broj: 37636
Poruke: 1249



+96 Profil

icon Re: Razlika izmedju operacije i naredbe?29.07.2014. u 10:30 - pre 118 meseci
Kraus voli da maksimalno skrati kod. Ako bi mu neko predložio alternativu koja je za jedan znak kraća od njegove on bi je usvojio. Mnogo ceni kratkoću. Ja se ne slažem s takvim stavom. Kraći kod sam po sebi nema neku veću vrednost od manje kratkog koda. Veću vrednost ima kod koji je čitljiviji, ali kraće nije automatsko čitljivije. Hoću da kažem da njegovi primeri nisu baš za početnike.
 
Odgovor na temu

djoka_l
Beograd

Član broj: 56075
Poruke: 3453

Jabber: djoka_l


+1462 Profil

icon Re: Razlika izmedju operacije i naredbe?29.07.2014. u 10:58 - pre 118 meseci
Ja se slažem sa tobom da njegovi primeri nisu za početnike, ali silno grešiš kada kažeš da teži za minimalnim kodom.

Jezik C, kada je Kraus napisao knjigu, bio je na 3. godini ETF-a u okviru programiskih jezkika i metoda programiranja 2. Došao je nakon asemblera za pseudomašinu, FORTRAN-a i Pascala i raznoraznih algoritama (random generatori, Hafmanovo kodiranja i gomila sličnih stvari koje možeš da nađeš u Art of Programming od Knuta) (PJMP 1), a u okviru UNIX-a, makroasemblera za VAX i još gomile drugih stvari (PJMP 2).

Dakle, nisu za nekog ko se prvi put sreće sa programiranjem.
Laslo je inače jedan strašno pedantan tip, njegovi podsetnici za čas mogli bi da se direktno fotokopiraju i izdaju kao udžbenik ili zbirka zadataka. Istovremeno je jedan tip koji ima upornost buldoga i neizmerno je vredan. U svako doba dana si mogao da ga sretneš u ERC-u kako proverava svoj kod koji će kasnije da prezentuje na času.

Njegov kod je slika njegovog karaktera: koncizan, pedantan, efektivan, ali uopšte ne teži ka nekakvoj kratkoći, svaki komad koda je smišljeno napisan da demonstrira neku osobinu jezika, sa tačno toliko teksta koliko je potrebno, a nikada manje od toga.
 
Odgovor na temu

30yo

Član broj: 322574
Poruke: 13
*.cpe.vektor.net.



+2 Profil

icon Re: Razlika izmedju operacije i naredbe?31.07.2014. u 22:46 - pre 118 meseci
po meni najbolji nacin da vidis razliku izmedju operacije i naredbe. X ce imati istu vrednost u oba primera ali je u drugom kod kompaktniji jer mozes da dodelis vrednost izraza (operacije) ?: u promenjivu x

//naredba IF

string x = "";

if (true)
{
x = "tacno";
}
else
{
x = "netacno";
}
------------------------------------
//operator ?:

string x = true ? "tacno" : "netacno";

 
Odgovor na temu

[es] :: C/C++ programiranje :: C/C++ za početnike :: Razlika izmedju operacije i naredbe?

[ Pregleda: 2798 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.