Chirurgia cranio-cerebrală minim invazivă
Tehnicile minim invazive impun utilizarea unei tehnologii ultramoderne. Endoscoapele operatorii de diverse tipuri, microscopul operator dedicat, neuronavigația, neuroelectrofiziologia, tehnicile avansate de anestezie, chirurgia cu pacientul treaz reprezintă armamentarium fără de care neurochirurgia prin "gaura cheii" nu ar fi posibilă. Folosind tehnicile de mai sus, tratăm un spectru larg de patologii cranio-cerebrale. www.neurohope.ro |
Operatori
Last Updated: May 22 2018 08:06, Started by
audrag5
, May 21 2018 09:24
·
0
#1
Posted 21 May 2018 - 09:24
Imi poate explica si mie cineva de ce rezultatul acestei sectiuni de cod este 300 si nu 30 sau altceva?
int a=0, b=1, c=2, d=3, e=1; a=(b++,c++,d++,e++); e=(a==0) ? b*=10 : c*=10, d*=10, e*=10; cout << e << endl; Multumesc Edited by audrag5, 21 May 2018 - 09:28. |
#3
Posted 21 May 2018 - 09:50
Ma gandeam ca, deoarece partea de dupa ':' nu este intre paranteze rotunde, valoarea lui e ar trebui sa fie valoarea lui c*=10, c fiind 3 dupa incrementare, adica 30.
|
#4
Posted 21 May 2018 - 10:34
Uita-te bine pe precedenta operatorilor si pune paranteze (pentru tine, sa te ajute sa intelegi) care sa iti indice in ce ordine se fac calculele. Apoi calculeaza de mana si vezi ce iti da. Atentie ca si virgula e un operator, ca si ?:, *= si =. Si fa calculele pana la capat, ca lui e (si nu numai) i se aribuie valori in mai multe locuri.
|
#5
Posted 21 May 2018 - 14:05
Pornim de la ordinea operatorilor în C++. Deschide pagina și urmărește.
Am adăugat numărul liniilor pentru referință: [1] int a=0, b=1, c=2, d=3, e=1; [2] a=(b++,c++,d++,e++); [3] e=(a==0) ? b*=10 : c*=10, d*=10, e*=10; [4] cout << e << endl; Linia 2: suffix increment pentru b, c, d și e. Variabila a ia valoarea lui e înainte de incrementare, așadar a = 1. Expresia evaluează doar ultima valoare, adică îl vede doar pe e. Atenție, a nu ia niciodată valoarea lui b, c sau d, pentru că evaluarea se face de la dreapta la stânga. Până acum avem: a = 1; b = 2; c = 3; d = 4; e = 2; Linia 3: Ne interesează (15) și (17) din tabelul cu prioritatea operatorilor. Operatorul ternar ( ? : ) are prioritate în fața virgulei. Linia 3 e echivalentă cu: e = (a==0) ? (b*=10) : (c*=10); d*=10; e*=10; a = 1, deci (b*=10) nu se execută și b rămâne neschimat. c*=10 se execută, așadar c = 30 și e = 30. Apoi avem (d*=10), după care d = 40 și încă o modificare în variabila e, de unde e = 300. După linia 3 avem: a = 1; b = 2; c = 30; d = 40; e = 300; Notă: în afara cazului în care vrei să participi la IOCCC, așa ceva nu o să treacă de code revew. Înțeleg că-s exerciții, dar vreau să mă asigur că n-ai vreun prof de info convins că e mult mai inteligent să scrii cod așa. Edited by A10Warthog, 21 May 2018 - 14:06. |
#6
Posted 22 May 2018 - 08:06
Am inteles acum ce rol are operatorul secvential pe linia [3] si de ce rezultatul este 300.
Multumesc! |
Anunturi
▶ 0 user(s) are reading this topic
0 members, 0 guests, 0 anonymous users