Instructiuni

Download Report

Transcript Instructiuni

C5 – LPO: Instructiuni 1
CUPRINS

Instructiuni

Categorii: secventa, decizie, ciclu, salt
Secventa cu instructiuni



simple
compuse
Decizia cu if


prezentare, functionare, probleme
Decizia cu switch


prezentare, functionare, probleme
Obiective
După parcurgerea acestui curs ar trebuie sa puteţi:



face diferenta intre instructiuni si date;
defini categoriile de instructiuni din Java
inteleg si scrie cod din cateogria de:

Secventa cu instructiuni:





simple
compuse
Ramificatie (decizia) simpla sau multipla cu if
Ramificarea multipla cu switch
Identifica si corecta erorile comune acestor categorii de
instructiuni.
Instructiuni
Programele sunt alcătuite din date si
instrucţiuni.
Instructiunile se scriu in metode si clase pentru
a descrie actiuni ale programului.
Implicit, instrucţiunile se rulează secvenţial.
Există situaţii în care se fac devieri de la rularea
secvenţială:



Decizia sau ramificarea: if, switch
Ciclul: do, for, while
Saltul sau transferul: break, continue, apel de metodã
Secventa



int x = 1, y = 2 , z;
z = x+ y;
x=y++;
z++;
Secvenţa este alcătuită din:
 instructiuni simple sau
 blocuri numite si instructiuni compuse
Instrucţiunea simplă: expresie;
 orice expresie terminată în caracterul ;
 daca expresie lipseste avem o instructiune vida
Blocul: grup de instruncţiuni cuprinse între acolade { }
 sintactic echivalentă cu instrucţiunea simplă
 o variabilă declarată într-un bloc are presistenţa
limitată la interiorul blocului în care s-a declarat.
{ int x = 1; System.out.println(x); ++x; }
Decizia (simpla) cu if

if se foloseste pentru programarea unei decizii si
if (expr_boleana)
are forma generalã:
instructiune1
[else
instructiune2]



expr_boleana trebuie sã fie scrisã între paranteze
rotunde si sã aibã un rezultat de tip boolean
dacã este nevoie de mai multe instructiuni trebuie
folositã instructiunea compusã în locul celei simple
orice decizie simpla (intre 2 ramuri) se poate face si
folosind operatorul conditional
Functionare if

Permite ramificarea rulării în aplicaţie pe baza
valorii de adevar luate de expr_boleana. Expresia
boleană determină care dintre ramuri este rulată
după cu urmează:
secventa
dacã valoarea expresiei boleene
este true se ruleazã instructiune
simplã instructiune1
 dacã valoarea expresiei boleene
instructiune2
instructiune1
secventa2
secventa1
este false se ruleazã
instructiunea simplã instructiune2
 porţiune cu else este opţională, dacă este omisă atunci
nu se va rula nimic daca expr_boleana e false

true
expr_boleana
false
If-uri imbricate
apar atunci când una dintre instrucţiunile simple din if este la
if (expr_boleana1)
rândul ei un if
if (expr_bolenan2)
 deoarece partea de else
instructiune1
este opţională se poate
[else
ajunge la situaţia în care
instructiune2]
pune problema aparteneţei [else
instructiune3]
lui else. Un astfel de else
se asociază cu cel mai apropiat if. Dacă acestă asociere
implicită nu este convenabilă atunci se pot folosi acoladele
pentru a o modifica.
 orice multidecizie se poate programa cu o secvenţă de if-uri

Probleme cu if
int a = 3, b = 2;
if (a > 0)
if (b < a)
System.out.println(”b < a”);
else
System.out.println(”a < 0”);
int a = 3;
if (a = 5)
System.out.println(”a este 5”);
int a = 3;
if (a%2 == 1) ;
System.out.println(”a este impar”);
din aliniere, asocierea
dintre if-uri şi else este
greşită
în locul opreratorului
de testare a egalităţii =
= s-a folosit cel de
atribuire =
s-a pus caracterul ;
după testul din if.
Compilatorul nu dă
eroare deoarece
tratează if-ul având
drept corp o
instrucţiune vidă.
Decizia cu switch
switch se foloseşte pentru programarea unei
multidecizii, are forma generală:
switch (expr_intreaga) {
 ramurile multideciziei
case expr_const1:
trebuie sa se poata
instructiune1
selecta printr-o valoarea
break;
intreaga. Acesta restrictie case expr_const2:
instructiune2
nu apare la utilizarea lui
break;
[default:]
if.

instructiune3
break;]
}
Functionare switch



Valoarea expresiei de test (expr_intreaga)
trebuie să fie de tipurile: byte, char, short sau secventa A
int. Tipurile long, float, double sau alte tipuri de
obiecte (String etc.) sunt interzise.
expr_intreaga false
Valoarea expresiei de test se compară,
==
expr_const1
secvenţial, cu expresiile constante
(expr_consti) care etichetează instrucţiunile true
instructiunei. Dacă s-a găsit egalitate
instructiune1
rularea începe de la instrucţiunea următoare break;
(cea care vine imediat după cele : ale lui case)
şi ţine până la întâlnirea unui break, moment
în care rularea se conţinuă cu secventa B.
secventa B
Dacă nu se găseşte nici o egalitate rularea va
continua cu instrucţiunile următoare etichetei
default. Eticheta default este opţională,
dacă aceasta lipseşte switch-ul nu va face
nimic în lipsa găsirii unei egalităţi.
expr_intreaga
==
expr_const2
true
instructiune2
break;
false instructiune3
break;
Rezumat





Datele stocheaza starea aplicatiei, instructiunile permit modificarea
starii prin rulare.
Secventa este starea normala de parcurgere in rulare a
instructiunilor unui program pe baza scrierii acestora in codul
sursa. Alterarea secventialitarii in rulare se poate face cu ale
instructiuni.
Instrunctiunile de ramificare numite si decizie permit ca portiuni
distincte din program sa fie rulate in functie de starea unor
variabile.
if permite programarea luare unei decizii simple (dintre 2 ramuri)
sau a uneia multiple prin imbricare
switch este dedicata multideciziei. Efectul de multidecizie similar cu
if-urile imbricate se obtine prin folosire instructiunii break
Probleme cu switch
int i;
…
switch (i) {
case 1 {a =5; c = 2;}
}
s-a omis caracterul : si se folosesc
acolade fara ; la capat
int i;
…
switch (i) {
0: a =5;
1: c = 2;
}
s-a omis cuvantul cheie case din fata
constantelor
int I;
switch (i) {
case 0: System.out.println(”0”);
default: System.out.println(”default”);
case 1: System.out.println(”1”);
}
default nu e la capatul
lui switch, nu avem
break-uri iar rularea lui
default se continua cu
case 1
Intrebari
1.
2.
3.
4.
5.
6.
7.
Explicaţi conceptele de secventa si ramificatie
Cate categorii de instructiuni simple sunt?
Ce este instructiunea vida?
Cum se realizeaza decizia multipla cu if?
Care sunt erorile comune la utilizarea lui if?
Ce limitari are switch-ul in comparatie cu if?
Care sunt erorile comune la utilizarea lui switch?
Bibliografie
1.
2.
3.
4.
5.
6.
http://www.oracle.com/technetwork/java/javase/documenta
tion/index.html
http://docs.oracle.com/javase/6/docs/
Ştefan Tanasă, Cristian Olaru, Ştefan Andrei, Java de la 0
la expert, Polirom, 2003, ISBN: 973-681-201-4.
Herber Schild, Java 2 - The Complete Reference, Fourth
Edition, Osborne, 2001, ISBN: 0-07-213084-9.
Deitel H.M., Deitel P. J., Java - How to programm, Fith
Edition, Prentice Hall, 2003, ISBN: 0-13-120236-7.
http://www.east.utcluj.ro/mb/mep/antal/downloads.html