Sunteți pe pagina 1din 7

Informatica aplicată 2 - MATLAB 1

CURS 5

PROGRAMAREA ÎN LIMBAJUL MATLAB (partea 4)

2. Instrucțiuni de salt și bucle (instrucțiuni pentru controlul derulării unui program) (partea 3)

Instrucțiunea break
Provoacă întreruperea ciclurilor for și while și salt la prima instrucțiune după instrucțiunea end
a ciclului. Se recomandă a fi utilizată și în cazul în care o condiție de eroare este detectată în
interiorul unei bucle. În cazul unor cicluri imbricate, break comandă ieșirea din cel mai interior
ciclu.

Sintaxa (pentru while) Schema logică


codul anterior
while conditie logica 1
corp instructiuni 1;
if conditie logica 2
corp instructiuni 2;
break
end
corp instructiuni 3
end
codul ulterior

Dacă conditie logica 1 este adevărată se execută corp instructiuni 1 și:


a) dacă conditie logica 2 este adevărată se execută corp instructiuni 2, iar
instrucțiunea break face să se iasă din ciclul while;
b) dacă conditie logica 2 este falsă, instrucțiunea break nu este luată în considerare și se
execută corp instructiuni 3 și se trece la următoarea iterație din ciclul while.

Exemplul 1: Să se scrie un fișier script cu numele sumaValPozVar1 care să calculeze suma unei
serii de n valori numerice pozitive introduse de utilizator. Dacă se introduce un număr negativ, acesta
nu este luat în considerare și se calculează suma valorilor pozitive introduse până la acesta.
Informatica aplicată 2 - MATLAB 2

%Acest script calculeaza suma unei serii de n


%valori numerice pozitive introduse de utilizator.
%Daca se introduce un numar negativ, acesta nu este luat in considerare
%si se calculeaza suma valorilor pozitive introduse pana la acesta

%Numarul de valori numerice din serie


n=input('Introduceti numarul de valori din serie: ');
disp(['Numarul de valori insumate va fi ',num2str(n)]);
%Initializez variabila suma
suma=0.0; %acumulatorul se intializează intotdeauna cu 0.0
%Initializez variabila de control i
i=1;
while i<=n
numar=input('Introduceti un numar: ');
if numar<0
disp('Numarul introdus nu este considerat pentru calculul sumei')
break %dacă numar < 0 bucla while este intrerupta
end
suma=suma+numar;
i=i+1;
end
%Afisez suma valorilor pozitive introduse
disp(['Suma celor ',num2str(i-1),' valori pozitive introduse corect este ',num2str(suma)]);

Exemplul 2: Să se scrie un fișier script numit sumaSerieNumereVar3 pentru calculul sumei unei
serii de n valori numerice introduse de utilizator folosind o buclă while infinită și instrucțiunea
break.
%Calculeaza suma unei serii de n valori numerice introduse de utilizator
%Se foloseste bucla WHILE infinita si instructiunea BREAK

%Numarul de valori numerice din serie


n=input('Introduceti numarul de valori din serie: ');
disp(['Numarul de valori insumate va fi ',num2str(n)])
%Initializez acumulatorul (variabila) suma
suma=0; %acumulatorul se intializează intotdeauna cu 0
i=1; %se initializeaza indicele ”i” cu valoarea 1
while 1 %1 este adevarat intotdeauna (ciclu while infinit)
if i>n
break
end
Informatica aplicată 2 - MATLAB 3

numar=input('Introduceti un numar: ');


suma=suma+numar; %se recalculeaza variabila ”suma”
i=i+1; %se indexeaza indicele ”i”
end
disp(['Suma celor ',num2str(n),' valori introduse este ',num2str(suma)])

Instrucțiunea continue
Transferă controlul următoarei iterații din ciclurilor while și for în care apare, sărind peste
celelalte instrucțiuni din corpul ciclului. Este utilă în cazul unor bucle mari, când trebuie sărite
anumite instrucțiuni. În cicluri imbricate controlul este dat următoarei iterații a ciclului care conține
instrucțiunea continue.

Sintaxa (pentru while) Schema logică


codul anterior
while conditie logica 1
corp instructiuni 1;
if conditie_2
continue
end
corp instructiuni 2;
end
codul ulterior

Dacă conditie logica 1 este adevărată se execută corp instructiuni 1 și:


a) dacă conditie logica este adevărată, instrucțiunea continue face ca
2
corp instructiuni 2 să nu se execute și se trece la următoarea iterație din ciclul while;

b) dacă conditie logica 2 este falsă, instrucțiunea continue nu este luată în considerare
și se execută corp instructiuni 2 și se trece la următoarea iterație din ciclul while.

Exemplul 1: Se generează numere aleatoare întregi cu distribuție uniformă mai mici sau egale cu 10
atât timp cât numărul aleator generat este mai mare decât indicele acestuia. Când numărul aleator
generat este mai mic decât indicele acestuia se termină generarea (combinație a instrucțiunilor
continue și break).
Informatica aplicată 2 - MATLAB 4

i=0; %se initializeaza indicele


while 1 %1 este adevarat intotdeauna (ciclu while infinit)
i=i+1; %indexez valoarea lui i
nrAleator=randi(10); %generez un numar aleator intreg <=10
if nrAleator>=i
disp([num2str(nrAleator) '>=' num2str(i)]);
continue %se trece la generarea urmatorului numar aleator
end
disp([num2str(nrAleator) '<' num2str(i)]);
break %daca nrAleator < i se opreste ciclul
end

Rutina este analoagă cu următoarea în care se folosește else în loc de continue:


i=0; %se initializeaza indicele
while 1
i=i+1; %indexez valoarea lui i
nrAleator=randi(10); %generez un numar aleator intreg <=10
if nrAleator>=i
disp([num2str(nrAleator) '>=' num2str(i)]);
else
disp([num2str(nrAleator) '<' num2str(i)]);
break %daca nr_aleator < i se opreste ciclul
end
end

Exemplul 2: Să se scrie un fișier script cu numele sumaValPozVar2 care să calculeze suma unei
serii de n valori numerice pozitive introduse de utilizator. Dacă se introduce un număr negativ, acesta
nu este luat în considerare și se calculează suma valorilor pozitive introduse.
Informatica aplicată 2 - MATLAB 5

%Acest script calculeaza suma unei serii de n


%valori numerice pozitive introduse de utilizator
%Daca se introduce un numar negativ, acesta nu este luat in considerare

%Numarul de valori numerice din serie


n=input('Introduceti numarul de valori din serie: ');
disp(['Numarul de valori insumate va fi ',num2str(n)]);
%Initializez variabila suma
suma=0.0; %acumulatorul se intializează intotdeauna cu 0.0
%Initializez variabila de control i
i=1;
while i<=n
numar=input('Introduceti un numar: ');
if numar<0
disp('Numarul nu este considerat pentru calculul sumei');
continue %daca numar < 0 bucla while sare la urmatoarea iteratie
end
suma=suma+numar;
i=i+1;
end
%Afisez suma valorilor pozitive introduse
disp(['Suma celor ',num2str(n),' valori pozitive este ',num2str(suma)]);

Instrucțiunea return
Provoacă ieșirea forțată din funcție sau script și întoarcerea la funcția apelantă (cea care a apelat
funcția) sau dă controlul la tastatură.
Exemplu general:
function [argIesire]=numeFunctie(x,y,...)
while conditie 1
corp instructiuni 1;
if conditie 2
corp instructiuni 2;
argIesire=valoare 1;
return;
end
corp instructiuni 3
end
Informatica aplicată 2 - MATLAB 6

corp instructiuni 4;
argIesire=valoare 2;
end %end-ul functiei nu este obligatoriu

Dacă conditie 1 este adevărată se execută corp instructiuni 1 și:


a) dacă conditie 2 este adevărată, se execută instrucțiunea corp instructiuni 2, se
calculează argIesire, după care instrucțiunea return face ca corp instructiuni 3 să
nu se execute, se iese din ciclul while și nu se execută nici corp instructiuni 4; se
returnează argIerire (=valoare 1) (se iese din funcție);
b) dacă conditie 2 este falsă, nu se execută nimic între if și end, inclusiv instrucțiunea
return; se va executa corp instructiuni 3 și se trece la următoarea iterație din ciclul
while.

Dacă conditie 1 este sau devine falsă se execută corp instructiuni 4 și se returnează
argIerire (=valoare 2) (se iese din funcție).

Exemplul 1: Să se calculeze valoarea absolută a determinantului unei matrice.


function [x]=ValAbsDet(X)
%Exemplu cu instructiunea return
%Calculul valorii absolute a determinantului unei matrice
if isempty(X) %isempty returneaza 1 dacă matricea X este goala si 0 in caz contrar
x=1; %prin definitie determinantul unei matrice goale este 1
return
end
x=abs(det(X));
end %end-ul functiei nu este obligatoriu

Apel: r=ValAbsDet([8 4 -3; 12.1 6.05 -7; 11 3 9])


Informatica aplicată 2 - MATLAB 7

Exemplul 2: Să se găsească poziția și primul număr divizibil cu o valoare dată dintr-un șir de numere
întregi strict pozitive.
function [indx,val]=returnDemo(a,x)
%Exemplu cu instructiunea return
%Functia returnDemo gaseste pozitia si valoarea primului numar divizibil
%cu o valoare data dintr-un sir de numere intregi
i=1;
while i<=length(x)
if rem(x(i),a)==0
indx=i;
val=x(i);
return
end
indx=NaN; %indx nu este un numar
val=NaN; %nu exista nicio valoare din sir divizibila cu valoarea data
i=i+1;
end
disp(['nu exista in sir numar divizibil cu ',num2str(a)]);
end %end-ul functiei nu este obligatoriu

Apel: [i,v]=returnDemo(3,[2 4 5 5 6 7 6 7 10 9])

Bibliografie
1. ***, Fundamente de Matlab, telecom.etti.tuiasi.ro/
2. Iulian Lupea, Curs Matlab
3. Nicoleta Breaz ș.a., Modelarea matematică prin Matlab
4. ***, MATLAB User’s Guide, The Mathworks Inc., SUA

S-ar putea să vă placă și

  • CURS 10 MOM
    CURS 10 MOM
    Document18 pagini
    CURS 10 MOM
    bigcrissmall
    Încă nu există evaluări
  • Curs 3 MQ IQ
    Curs 3 MQ IQ
    Document5 pagini
    Curs 3 MQ IQ
    bigcrissmall
    Încă nu există evaluări
  • Test 1
    Test 1
    Document1 pagină
    Test 1
    bigcrissmall
    Încă nu există evaluări
  • Test 10
    Test 10
    Document1 pagină
    Test 10
    bigcrissmall
    Încă nu există evaluări
  • Test 13
    Test 13
    Document1 pagină
    Test 13
    bigcrissmall
    Încă nu există evaluări
  • Curs 7
    Curs 7
    Document8 pagini
    Curs 7
    bigcrissmall
    Încă nu există evaluări
  • Curs 4
    Curs 4
    Document6 pagini
    Curs 4
    bigcrissmall
    Încă nu există evaluări
  • Curs 9
    Curs 9
    Document7 pagini
    Curs 9
    bigcrissmall
    Încă nu există evaluări
  • Laborator Nr. 3
    Laborator Nr. 3
    Document9 pagini
    Laborator Nr. 3
    bigcrissmall
    Încă nu există evaluări
  • Curs 2
    Curs 2
    Document10 pagini
    Curs 2
    bigcrissmall
    Încă nu există evaluări
  • Curs 12
    Curs 12
    Document11 pagini
    Curs 12
    bigcrissmall
    Încă nu există evaluări
  • Curs 2 FUNCTII FOURIER PENTRU EXAMEN
    Curs 2 FUNCTII FOURIER PENTRU EXAMEN
    Document9 pagini
    Curs 2 FUNCTII FOURIER PENTRU EXAMEN
    bigcrissmall
    Încă nu există evaluări
  • Catalog Case Din Lemn 2016
    Catalog Case Din Lemn 2016
    Document74 pagini
    Catalog Case Din Lemn 2016
    bigcrissmall
    Încă nu există evaluări
  • Curs 1
    Curs 1
    Document15 pagini
    Curs 1
    bigcrissmall
    Încă nu există evaluări