1 / 24

Java – Instructiuni (ciclul si altul

Java – Instructiuni (ciclul si altul. Cicluri while do while for Salturi break continue. Ciclul while. while - 1. se utilizeaza atunci cand nu stim de cate ori avem de repetat corpul ( instructiune ) si repetarea trebuie sa continue cat timp conditie este true ;

makaio
Download Presentation

Java – Instructiuni (ciclul si altul

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Java – Instructiuni (ciclul si altul Cicluri while do while for Salturi break continue

  2. Ciclul while

  3. while - 1 • se utilizeaza atunci cand nu stim de cate ori avem de repetat corpul (instructiune) si repetarea trebuie sa continue cat timp conditie este true; • toate variabilele din conditie trebuie sa fie declarate inainte de evaluarea conditiei; • este posibil ca instructiune sa nu se ruleze (daca conditie este false la prima evaluare a ei). • iata cateva probleme: int x; while (x) {…} // eroare, x trebuie sa fie boolean while (x=1) {…}// eroare, lui x I se atribuie 1 while (true) {…} // merge, ciclu while infinit

  4. while – aplicatie 1/1 Cunoscându-se valoarea depunerii iniţiale şi rata anuală se cere să se determine numărul de luni necesar pentru a cumula în cont o sumă impusă de bani. Dobânda se calculează lunar şi se cumulează (se adună) cu valoarea din cont. Datele (sau spaţiul datelor, atributele, caracteristicle) Este reprezentat prin mulţimea variabilelor foloşite pentru stocarea şi soluţionarea cerinţei impuse.

  5. while – aplicatie 1/2 Codul (sau spaţiul transformărilor, actiunile, functiile, procedurile, metodele) Este dat de mulţimea operaţiunilor efectuate asupra spaţiului de date pentru găsirea soluţiei.Datele de intrare se modifică ca urmare a citirii valorilor corespunzătoare de la tastatură. Calculul dobânzii pe lună: dobânda pe lună = dobandaan / 100. / 12. Se împarte cu 100 deoarece dobânda pe an se dă în procente şi cu 12 deoarece anul are 12 luni. Dacă suma existentă în cont se înmulţeşte cu această valoare se obţine câştigul lunar pe suma totală din cont. Cumularea lunară a dobânzii: cont = cont + cont * dobânda pe lună Valoarea nouă a contului va fi cea veche la care se mai adaugă câştigul ca urmăre a dobânzii lunare. Actualizarea lunii luni = luni + 1 Variabila se actualizrează prin creştere cu o unitate până când scopul nu s-a atins. Atingerea scopului duce la afişarea valorii acestei variabile şi la terminarea aplicaţiei

  6. while – aplicatie 1/3 (pseudocod) Citeşte scop Citeşte depunere Citeşte dobandaan in % // iniţializări cont = depunere; luni = 0; // actualizarea contului pe luna // pana cand scopul este atins Repetă cât timp (cont <= scop) { dobandalunara = cont * dobandaan / 100 / 12; //calcul dobanda lunara cont = cont + dobandalunara; //cumulare dabanda lunara luni = luni + 1; //crestere luna } //afisare rezultat(e) Afisare luni

  7. while – aplicatie 1/4 (cod Java) import java.util.*; public class Dobanda { public static void main(String[] args) { // citirea datelor de intrare Scanner in = new Scanner(System.in); System.out.print("De ce suma ai nevoie? "); double scop = in.nextDouble(); System.out.print("Care e suma initiala? "); double depunere = in.nextDouble(); System.out.print("Dobanda anuala %: "); double dobandaan = in.nextDouble(); // initializare double cont = depunere; int luni = 0; // actualizarea contului pe luna // pana cand scopul este atins while (cont <= scop) { // dobanda pe luna se calculeaza din cont double dobandalunara = cont * dobandaan / 100 / 12; cont += dobandalunara; luni++; } // afisarea rezultatului System.out.println("Ajungi la suma dorita in " + luni + " luni."); } }

  8. while – aplicatie 2/1 Să se calculeze şi să se afişeze media aritmetică a unei clase formate din 5 elevi. Media fiecărui elev este un număr întreg care se citeşte de la tastatură. Datele (sau spaţiul datelor, atributele, caracteristicle)

  9. while – aplicatie 2/2 Codul (sau spaţiul transformărilor, actiunile, functiile, procedurile, metodele) Suma mediilor individuale total = total + notaElev Suma mediilor individuale presupune o adunare repetată ce se termină atunci când s-au prelucrat toti elevii. Această sumă se realizează pe măsură ce se citeşte câte o medie de elev. Valoarea nouă a totalului este cea anterioară (veche) la care se adună ultima medie citită. Media aritmetica mediaClasa = total / 5. Este data de suma mediilor clasei impartita la cate medii am citi, in cazul notru 5;

  10. while – aplicatie 2/3 (pseudocod) //initializari total = 0; contorElev = 1; //totalul mediilor individuale Repetă cât timp (contorElev <= 5) { Citeste notaElev total = total + notaElev //insumeaza media individuala citita contorElev = contorElev +1 //creste contor elev } //calcul medie clasa mediaClasa = total / 5. //afisare rezultat Afisare mediaClasa

  11. while – aplicatie 2/4 (cod Java) import javax.swing.JOptionPane; public class Media { public static void main(String[] args) { int total; int contorElev; int notaElev; double mediaClasa; String sirNota; //initializari total = 0; contorElev = 1; //totalul mediilor individuale while (contorElev <= 5) { sirNota = JOptionPane.showInputDialog("Nota pentru elev " + contorElev); notaElev = Integer.parseInt(sirNota); // sunt scrieri alternative ale instructiunilor total = total + notaElev; //total+=notaElev; contorElev= contorElev +1; //++contorElev; } //calcul medie clasa mediaClasa = total / 5.; //afisare rezultat JOptionPane.showMessageDialog(null, "Media clasei este: " + mediaClasa); } }

  12. do while

  13. do while – aplicatie 1 import java.util.Scanner; public class DobandaV1 { public static void main(String[] args) { // citirea datelor de intrare double scop, depunere, cont, dobandaan, dobandalunara; int luni; String raspuns; Scanner in = new Scanner(System.in); System.out.print("De ce suma ai nevoie? "); scop = in.nextDouble(); System.out.print("Care e suma initiala? "); depunere = in.nextDouble(); System.out.print("Dobanda anuala %: "); dobandaan = in.nextDouble(); // initializarei cont = depunere; luni = 0; // actualizarea contului pe luna // pana cand scopul este atins do { // dobanda pe luna se calculeaza din cont dobandalunara = cont * dobandaan / 100 / 12; cont += dobandalunara; luni++; System.out.println("Dupa " + luni + " luni ai acumulat " + cont + " RON"); System.out.print("Iti ajunge suma acumulata? (D/N): "); raspuns = in.next(); } while (raspuns.equals("D")) ; } } Acesta este o implementare folosind ciclul do while a aplicaţiei 1 de la ciclul while. La fiecare reluare a ciclului utilizatorul se afiseaza cati bani are in cont si este intrebat daca doreste sa mai continue ciclul.

  14. while - 1 • se utilizeaza atunci cand nu stim de cate ori avem de repetat corpul (instructiune) si repetarea trebuie sa continue cat timp conditie este true; • toate variabilele din conditie trebuie sa fie declarate inainte de evaluarea conditiei; • este posibil ca instructiune sa nu se ruleze (daca conditie este false la prima evaluare a ei). • iata cateva probleme: int x; while (x) {…} // eroare, x trebuie sa fie boolean while (x=1) {…}// eroare, lui x I se atribuie 1 while (true) {…} // merge, ciclu while infinit

  15. for

  16. for – aplicatie 1 / 1 Să se scrie o aplicaţie pentru calcului lui n! = 1*2*3* ... *n, cu 1! = 1. import java.util.*; public class factorial { public static void main(String[] args) { Scanner in = new Scanner(System.in); System.out.print("n: "); int n = in.nextInt(); long fact = 1; for(int i = 1; i<=n ; ++i) fact=fact*i; //sau fact*=i; System.out.println(n+"! = "+fact); } } Rezultate: n: 5 5! = 120 n: 555 555! = 0 Aceste rezultat este gresit motiv pentru care reimplementam codul Java folosind clase speciale Java ce stiu lucra cu numere intregi foarte mari (peste pribilitatea de reprezentarea a primitivelor intregi)

  17. break si continue • break si continue permit oprirea executiei ciclului (break) sau doar a iteratiei curente (continue); • tipic, undeva in corpul ciclului, se face un test care obliga la iesire din ciclu; • instructiunile pot si etichetate, situatie in care ciclurile sunt imbricate (altfel nu este nevoie de etichete); etichetele trebuie sa fie scrise in cicluri, altfel codul nu se compileaza; numele etichetei trebuie sa respecte regulile de scriere a unui nume de variabila Java.

  18. Aplicatii – 1/1 Scrieti codul Java pentru algoritmul de aflare a solutiei unei ecuatii cu metoda injumatatirii intervalului avand descrierea metodei si pseudocodul. Desriere Daca f este continua si este negativa pentru x = a si pozitiva pentru x = b, exista cel putin o slutie reala intre a si b. Calculam pe f ((a +b)/2), valoarea finctiei la mijlocul intervalului a< x < b si avem variantele: • f ((a + b)/2) = 0, cand (a + b)/2 este radacina; • f ((a + b)/2) <0, cand redacina este in intervalul dintre (a + b)/2 si b; • f ((a + b)/2) > 0, cand radacina este in intervalul dintre a si (a + b)/2. Pseudocod var a,b,eps:real while abs(b-a) < eps x:=(a+b)/2 if (f(x) ==0) print “Rad. este:”,x stop endif if sgn(f(a))*sgn(f(x)) >0 a=x else b=x endif endwhile print “Rad. Aprox este:”,x

  19. Aplicatii – 1/2 f(x)=4sin(x)-x+1, x in [-3,3] public class Injumatarire { static double a, b, x, eps; public static double f(double x) { return 4. * Math.sin(x) - x + 1.; } public static void main(String[] args) { a = -3.; b = 3.; eps = 1.e-07; while (Math.abs(b - a) > eps) { x = (a + b) / 2.; if (f(x) == 0) { System.out.println("Radacina este: " + x); System.exit(0); } if (Math.signum(f(a)) * Math.signum(f(x)) > 0) a = x; else b = x; } System.out.println("Radacina aprox. (cu Inj): " + x); } }

  20. Aplicatii – 2/1 Scrieti codul Java pentru algoritmul de aflare a solutiei unei ecuatii cu metoda Newton-Raphson avand descrierea metodei si pseudocodul. Desriere Determinarea radacinii reale a ecuatiei f(x)=0 se face plecand de la un singur punct, apropiat de radacina. Idea metodei consta in aproximarea lui f intr-un punct dat printr-o linie. Apoi, se afla solutia ecuatiei asociate liniei. Procesul se continua pana cand modificarile in solutia aproximativa incep sa devine nesemnificative (mici). Pseudocod var x0,x,eps: real max_iter, n: integer read x0,max_iter, eps n=0 x=x0 do aux:=f(x0)/f’(x0) x:=x-aux n:=n+1 while abs(aux) > eps & n<=max_iter print “Rad. aprox:”,x if abs(aux) >= eps print “Precizia nu s-a atins in”, n, “iteratii” endif

  21. Aplicatii – 2/2 f(x)=4sin(x)-x+1, x0=3 public class NewtonRaphson { static double x, eps; static int max_iter, n; public static double f(double x) { return 4. * Math.sin(x) - x + 1.; } public static double fderivat(double x) { final double h = 0.001; return (f(x + h) - f(x)) / h; } public static void main(String[] args) { double aux; x = 3.; max_iter = 200; eps = 1.e-7; do { aux = f(x) / fderivat(x); x -= aux; ++n; } while ((Math.abs(aux) > eps) && (n <= max_iter)); System.out.println("Radacina aprox. (cu N-R): " + x); if (Math.abs(aux) >= eps) { System.out.println("Precizia nu e a fot atinsa in " + n + " iteratii"); } } }

  22. Aplicatii 3/1 Scrieti codul Java pentru calcul integralelor definite cu metoda Simpson avand descrierea metodei si pseudocodul. Desriere Aproximarea functiei de integrat se face pe subintervale folosind parabole. Parabola (y=ax2+bx+c ) se determina prin 3 puncte. Aproximarea lui f pe 2 intervale adiacente in 3 puncte (xi-1,f(xi-1)), (xi,f(xi)) si(xi+1,f(xi+1)) necesita n puncte (numarul de subintervale e par iar cel de puncte impar, trebuie determinati coeficientii a,b,c). [a,b] se imparte in 2n parti fiecare de lungime (b-a)/(2n). x primets valorile x0, x1… ,x2n-1,x2n si avem Pseudocod var a,b,h,s,x:real i,n:integer h:=(b-a)/2/n s:=(f(b)+f(a))/2 x:=a for i:=1 to n-1 x:=x+h s:=s+2*f(x) x:=x+h s:=s+f(x) endfor x:=x+h s:=s+2*f(x) s:=2*h*s/3; print “Integrala (cu S): “, s

  23. Aplicatii 3/2 public class Simpson { public static double a, b, h, s, x; public static int i, n; public static double f(double x) { return Math.sqrt(1 - x * x); } public static void main(String[] args) { a = 0; b = 0.5; n = 100; h = (b - a) / 2. / n; s = (f(b) + f(a)) / 2.; x = a; for (i = 1; i < n; ++i) { x += h; s += 2 * f(x); x += h; s += f(x); } x += h; s += 2. * f(x); s *= 2 * h / 3.; System.out.println("Valoarea integralei(cu S): " + s); } } a=0, b=0.5, n=100

  24. Bibliografie • http://www.east.utcluj.ro/mb/mep/antal/downloads.html > Java: course, IDE (JDeveloper), JDK and JRE, JDeveloper labs. • http://docs.oracle.com/cd/E18941_01/tutorials/jdtut_11r2_50/jdtut_11r2_50.html > Getting Started With the JDeveloper IDE

More Related