![]() |
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 |
For loop - putina intelegere
Last Updated: Dec 30 2021 23:43, Started by
Pieptoasa
, Dec 29 2021 13:26
·
0

#1
Posted 29 December 2021 - 13:26

Buna,
Sper sa postez unde trebuie si sper sa obtin ceea ce urmaresc si m-ar ajuta putin in procesul de intelegere. Se dau 2 exemple : 1 ceea ce nu prea inteleg care/cum se face legatura intre variabila i si ceea ce se printeaza. Acel "Java is fun" e atribuit de fapt variabilei i? Deci ceea ce printreaza are legatura implicit cu ce se intampla in for? 2 variabila i e ceva temporar util doar in for loop? int n = 5; // for loop for (int i = 1; i <= n; ++i) { System.out.println("Java is fun"); } int n = 5; // for loop for (int i = 1; i <= n; ++i) { System.out.println(i); } 3 iar ca intrebare suplimentara : care e de fapt diferenta intre a avea System.out.println inafara buclei for si .. in interior (acele acolade) 4 care e diferenta intre algoritmul clasei main si al claselor adiacente? Multumesc f mult. Edited by Pieptoasa, 29 December 2021 - 13:30. |
#2
Posted 29 December 2021 - 13:33

In primul caz iteratorul n-are legatura cu ce se printeaza, asta in contrast cu cel de al doilea caz, unde iteratorul este elementul printat.
Tot ce este intre acolade este rulat de cate ori este indeplinita conditia, in exemplul tau: " i <= n " Edited by MarianG, 29 December 2021 - 13:34. |
#3
Posted 29 December 2021 - 13:34

dacă e în buclă face de atâtea ori cât trece prin buclă, deci printează de 5 ori ceva... ori java is fun, ori 12345
daca e în afara buclei face doar o dată, logic |
#4
Posted 29 December 2021 - 13:35

Cat ma mai duce capul din algoritmica din liceu:
- in primul caz, se printeaza Java is fun pentru fiecare i mai mic sau egal cu n. Adica de 5 ori, caci n = 5. - in al doilea caz, tot asa, se trece cu i de la 1 la 5, dar printeaza ce contine variabila i, adica pe rand 1, 2, 3, 4, 5. Pe romaneste: prinul caz: se da n = 5. Pentru i de la 1 la 5, (adica i ia pe rand valoarea 1,2,3,4,5) printeaza Java is fun. Al doilea caz: Pentru i de la 1 la 5, (adica i ia pe rand valoarea 1,2,3,4,5) printeaza valoarea lui i (adica 1,2,3,4,5). Ce e dupa for (int i = 1; i <= n; ++i), intre acolade, se face de fiecare daca atata timp cat i e mai mic sau egal cu n. Edited by bai3tzash, 29 December 2021 - 13:37. |
#5
Posted 29 December 2021 - 13:36

Deci legatura intre iterator si ceea ce printeaza e data de acel n =5; i<=n pana la urma..
Am intalnit cazuri si in afara acoladei si se printeaza.. asta imi era nelamurirea. |
#6
Posted 29 December 2021 - 13:43

Quote variabila i e ceva temporar util doar in for loop?
Deci legatura intre iterator si ceea ce printeaza e data de acel n =5; i<=n pana la urma.. Am intalnit cazuri si in afara acoladei si se printeaza.. asta imi era nelamurirea.
Am intalnit cazuri si in afara acoladei si se printeaza.. asta imi era nelamurirea. for (int i = 1; i <= n; ++i) System.out.println("This is repeating"); System.out.println("This is not); Edited by MarianG, 29 December 2021 - 13:44. |
#7
Posted 29 December 2021 - 14:02

1. Instructiunea for executa un bloc de cod de atitea ori cit conditia din a doua expresie este true. Formatul este
for (expresie1; expresie2; expresie3) expresie1 se excuta o singura data la inceput expresie2 e conditia de iesire din bucla expresie3 se executa dupa fiecare bloc executat In cazul tau, daca ai int n = 5; // for loop for (int i = 1; i <= n; ++i) { System.out.println("Java is fun"); } - prima data se va executa o singura data i = 1; - apoi va verifica daca i este mai mic decit n care este 5, daca da executa System.out - apoi se executa ++i, care e practic i = i + 1 Acuma daca nu ai decit o instructiune in bloc, poti sa nu pui acolade. Nu recomand, dar poti scrie int n = 5; // for loop for (int i = 1; i <= n; ++i) System.out.println("Java is fun"); sau chiar int n = 5; // for loop for (int i = 1; i <= n; ++i) System.out.println("Java is fun"); In felul acesta faci codul din ce in ce mai nasol de citit si pe toti care vin dupa tine sa te injure de mama & shit. 2. Daca varianbila i este definita in for, atunci e variabila locala pentru for si daca vrei s-o folosesti dupa o sa primesti eroare de compilare. Dar daca vrei sa o poti folosi mai departe o poti defini inainte int n = 5; int i; for (i = 1; i <= n; ++i) { System.out.println("Java is fun"); } System.out.println(i); Daca rulezi codul de mai sus la sfirsit o sa tipareasca 6, adica a executat for de 5 ori, a incrementat i la 6 si a iesit pentru ca conditia este sa fie <= 5. Si acuma niste chestii amuzante care fac Java sa nu mai fie fun deloc. Nici una din expresiile din for nu este obligatorie. De exemplu codul urmator face acelasi lucru cu codul de mai sus int n = 5; int i = 1; for (; i <= n; ++i) { System.out.println("Java is fun"); } System.out.println(i); Sau putem scrie: int n = 5; int i = 1; for (; i <= n;) { System.out.println("Java is fun"); } si o sa ruleze la infinit. Sau putem scrie for (; ;) { System.out.println("Java is fun"); } si iar ruleaza la infinit. Fun as fuck ![]() 4. Clasa "main" e punctul de intrare in aplicatie prin functia main. public static void main(String[] args) In parametrul args iti vin parametri pe care ii dai din linie de comanda sau prin setare in IDE |
#8
Posted 29 December 2021 - 14:02

Rulezi codul pas cu pas (linie cu linie) in debugger si inspectezi fiecare variabila (iti arata debuggerul valoarea in fiecare moment).
|
#9
Posted 29 December 2021 - 16:45

1 ceea ce nu prea inteleg care/cum se face legatura intre variabila i si ceea ce se printeaza. Acel "Java is fun" e atribuit de fapt variabilei i? Deci ceea ce printreaza are legatura implicit cu ce se intampla in for? Doar ca, tu printezi intr-o bucla for care se deruleaza de n ori ( in timpul in care i-ul ia valori de la 1 la n). Asadar, vei printa mesajul "Java is fun" de n ori. Mesajul in sine neavand legatura directa cu variabila i. For-ul e ala cu legatura directa, nu blocul { } pe care-l gestioneaza.
2 variabila i e ceva temporar util doar in for loop? Dar poti testa si te invit la chestia asta. E modul prin care vezi singura. Judecand dupa modul in care pui intrebarea, cred ca nu realizezi ca poti vedea singura chestia asta. Daca e variabila locala in cadrul buclei (La C# asa e) , atunci nu va putea fi referentiata in afara "cadrului" in care e definita. Compilatorul iti va da eroare. Daca e variabila locala vizibila si in afara buclei (C++ asa are, cred), atunci variabila in afara buclei va avea valoarea cu care a iesit din bucla, in cazul tau n+1, adica 6. E chestie de sintaxa a limbajului, nu prea te ajuta sa stii, daca esti interesata mai degraba de ce vrei sa exprimi prin acea sintaxa decat sintaxa insasi. Unele limbaje nici macar nu permit combinatia respectiva si te obliga sa declari intai si apoi sa folosesti. Mi se pare ca C-ul asa este. Adica trebuie sa faci int i; for(i=0;...) { }Chestii de sintaxa. Daca se compileaza inseamna ca sintaxa e buna, daca nu insamna ca compilatorul nu pricepe. Nu e important insa din perspectiva ta ca decat strict in ideea de a satisface capriciile compilatorului, limbajului. E un mod de a vedea lucrurile.
3 iar ca intrebare suplimentara : care e de fapt diferenta intre a avea System.out.println inafara buclei for si .. in interior (acele acolade) La fiecare executie se schimba (in cazul tau) i-ul accordingly. In printare tu nu folosesti i-ul, dar el ia valori succesive de la 1 pana la n. Inainte de a iesi de tot din bucla for, i-ul va lua valoarea n+1 si va fi comparat i<=n. Ar trebui totusi sa printezi si i-ul in cadrul buclei sa vezi exact ce se intampla. In afara buclei, functie de specificatiile limbajului, acel i poa sa nu existe deloc, sau daca exista, va avea valoarea n+1. Daca printezi in afara buclei, te vei afla in cazul tau in locul vrajit de blocul care contine totul, in cazul tau functia Main() probabil. Ca atare, se va executa o singura data. Poti avea bucla for in bucla for, caz in care vrajile se suprapun. De exemplu cudul urmator: for(int i=0;i<5, i++) for(int j=0; j<6; j++) Printblabla (" Sunt frumoasa! ");va printa " Sunt frumoasa! " de 5*6=30 de ori.
4 care e diferenta intre algoritmul clasei main si al claselor adiacente? Si, sa dea naibii ca nici aici nu-ti pot raspunde strict la textul intrebarii, chiar reformulata de catre mine, pentru ca nu stiu Java. Ce stiu insa e ca, un program executabil, are o multime de functii, in cazul limbajelor orientate pe obiecte cum e Java, aceste functii sunt incapsulate in clase. Si compilatorul trebuie sa stie care-i functia pe care vrei tu sa inceapa executia. In C# spre exemplu, nu are importanta ce nume are clasa, atata timp cat exista una si numai una functie Main(). Chestia e ca, compilatorul trebuie sa stie de unde vrei tu sa incepi executia unui program. Si in mod conventional, functia respectiva trebuie sa se cheme Main(), asa-i la multe limbaje, nu numai la Java. Insa clasa din care face parte, nu-i musai sa se cheme Main, cel putin nu la C#, C++ si tind sa cred ca nici la Java. Daca scii o librarie de programe, un DLL, de exemplu, nu mai ai nevoie de un Main(), pentru ca nu poti lansa direct un DLL in executie. DLL-ul e folosit de alte EXE-uri, iar acestea isi aleg ca dintr-un bufet suedez ceea ce vor ele sa consume din acest DLL. Mainul poa sa nu existe in acest caz. Nici compilatorul nu-l cere. Main de fapt nu e o caracteristica a limbajului in sine ci o conventie intre programator si compilator prin care programatorul instruieste compilatorul sa produca cod pentru procesor incepand de la acel punct, de la intrarea in Main. Daca e sa vorbim in continuare in termeni de vraja locului, ei bine, blocul din interiorul Main() e locul care prinde sigur sansa de a fi executat si va fi executat o singura data, in ordinea instructiunilor tot ce se afla inauntru(daca n-ai alte vraji care sa anuleze, sa iasa din Main, sa te bage in bucle for(; ![]() Celelalte functii, cu alt nume, prin dreptul de executie doar daca sunt apelate direct sau indirect din Main(). Si tot apropo de vraji si de minuni, pe mine ma minuneaza ca pe tine te preocupa atatea lucruri. Poate ca nu sunt cel mai in masura sa-ti raspund, dat fiind faptul ca, repet din nou, nu stiu Java, insa am vrut sa particip si eu la acest concurs, cu baietii. Sper sa-ti fi fost de ajutor! ![]() |
#10
Posted 29 December 2021 - 19:42

Multumesc foarte mult pentru efortul depus si explicatiile amanuntite.
Sunt curioasa de aceste amanunte pentru a nu-mi fi greu mai acolo - se zice ca totul trebuie inteles temeinic la momentul actiunii. Am inteles toate exemplele date si-mi sunt utile.. Quote
Intrebarea nu cred ca e pusa corect. Cred ca te intereseaza mai degraba ce semnificatie deosebita are clasa Main fata de celelalte. Quote Si tot apropo de vraji si de minuni, pe mine ma minuneaza ca pe tine te preocupa atatea lucruri. Quote Rulezi codul pas cu pas (linie cu linie) in debugger si inspectezi fiecare variabila (iti arata debuggerul valoarea in fiecare moment). Spre exemplu : vreau sa impart nr. 283746 in doua.. sa le fac reverse si apoi sa le compar. Poate exista functionalitate de split , pt. comparatie == dar la reverse.. Deci succesiunea asta de operatii si care sunt ele efectiv as vrea sa stiu cum le pot deduce mai usor din..cerintele problemei. ceva de genul.. split 283 746 reversed 382 647 compare 382 == 647 print (compare) Edited by Pieptoasa, 29 December 2021 - 19:43. |
|
#11
Posted 29 December 2021 - 20:25

#12
Posted 30 December 2021 - 23:43

Anunturi
▶ 0 user(s) are reading this topic
0 members, 0 guests, 0 anonymous users