Sunteți pe pagina 1din 11

Programarea Calculatoarelor 1 - Algoritmi

L6: Funcții simple pentru lucrul cu vectori – 2


Enunțul problemei
Să se realizeze un instrument virtual LabVIEW care să efectueze următoarele operații
asupra unui șir de valori numerice:
1. să elimine din șir valorile numerice aflate în afara intervalului [a, b], unde a și b
sunt specificate de către utilizator;
2. să semnalizeze dacă șirul este sau nu este monoton;
3. să determine elementul maxim din mulțimea termenilor de rang impar și
elementul minim din mulțimea termenilor de rang par ai șirului, precum și
rangurile pe care apar aceste elemente în șir.

Exemplu de panou

Fig. 6.1. Exemplu de panou

Descrierea funcționării instrumentului virtual


Valorile de intrare sunt:
 șirul inițial de valori numerice;
 limitele numerice a și b.

Valorile de ieșire sunt:


 șirul de valori numerice rezultat după eliminarea valorilor aflate în afara intervalului
[a, b];
 o valoare logică (booleană) care indică faptul că șirul inițial este sau nu este
monoton;
 valoarea maximă din mulțimea termenilor de rang impar;
 valoarea minimă din mulțimea termenilor de rang par;
61
Programarea Calculatoarelor 1 - Algoritmi

 rangul (valoare numerică) pe care apare valoarea maximă din mulțimea termenilor
de rang impar;
 rangul (valoare numerică) pe care apare valoarea minimă din mulțimea termenilor de
rang par.

Utilizatorul va introduce valori numerice atat in sirul de valori de intrare cât și în


elementele denumite „a” respectiv „b”.
Programul va elimina valorile numerice care nu aparțin intervalul [a, b] și va afișa în
elementul indicator denumit „Valori între a și b”, valori numerice din șir cuprinse în
intervalul [a, b].
Instrumentul virtual va semnaliza prin aprinderea unui LED de culoarea verde denumit
„Șir monoton”, dacă șirul inițial de valori numerice specificat de utilizator este monoton
sau culoarea roșie, în caz contrar.
Instrumentul virtual va afișa în elementul denumit „Maximul de rang impar” valoarea
maximă din subșirul format din termenii de rang impar ai șirului inițial specificat de
utilizator, iar în elementul alăturat denumit „Rang” va afișa rangul valorii maxime.
De asemenea, instrumentul virtual va afișa în elementul denumit „Miniumul de rang par”
valoarea minimă din subșirul format din termenii de rang par ai șirului inițial specificat de
utilizator, iar în elementul alăturat, denumit „Rang” va afișa rangul valorii minime.

Indicații privind proiectarea interfeței cu utilizatorul


Punctul 1. Eliminarea din șirul inițial al valorilor numerice aflate în afara intervalului [a,
b]
Pe panoul frontal al unui nou instrument virtual LabVIEW se va dispune un element de
tip Array, (click dreapta mouse în panoul frontal din paleta de elemente de control
se selectează meniul Modern  submeniul Array, Matrix & Cluster  Array) (figura
6.2).
Array-ul inserat in panou se denumește în etichetă „Array inițial”.

Fig. 6.2. Element de tip Array

Elementul de tip Array dispus inițial în panoul frontal este vid (nu este specificat tipul de
date pe care acesta îl va conține). Pentru a crea un element de control de tip Array
pentru valori numerice, se va selecta din paleta de elemente de control, din meniul
62
Programarea Calculatoarelor 1 - Algoritmi

numeric, un element de control de tip numeric scalar și ținând butonul mouse-lui apăsat,
se va deplasa elementul de control numeric selectat în interiorul elementului de tip
Array. Atunci când elementul Array va avea conturul reprezentat cu linie întreruptă, ca
în figura de mai jos, se va elibera butonul mouse-lui obținându-se astfel un element de
control de tip Array pentru valori numerice (figura 6.3).

Fig. 6.3. Element de control de tip Array pentru valori numerice

Pentru ca utilizatorul să specifice un șir de valori numerice este necesară dimensionarea


corespunzătoare a elementului Array. Pentru aceasta, se poziționează cursorul mouse-
lui pe conturul dreptunghiului din dreapta al Array-ului și atunci când acesta capătă
forma unui triunghi, ținând butonul mouse-ului apăsat, se deplasează cursorul până
când elementul Array va arăta ca în figura de mai jos.

Fig. 6.4. Element de control de tip Array

Pentru afișarea șirul de valori numerice rezultat după eliminarea valorilor aflate în afara
intervalului [a, b], se va dispune în panoul frontal al aplicației un element indicator de tip
Array pentru valori numerice, parcurgându-se aceleași etape ca mai sus, cu precizarea
că, pentru ca Array-ul să fie de tip indicator, este necesară introducerea în Array-ul vid
63
Programarea Calculatoarelor 1 - Algoritmi

a unui element numeric indicator scalar. Se denumește elementul indicator de tip Array
pentru valori numerice în etichetă „Valori între a și b” (figura 6.5).
De asemenea, pentru a specifica limitele numerice a și b, se vor dispune în panoul
frontal al aplicației două elemente de control numerice scalare, care vor fi denumite în
etichete „a” respectiv „b” (figura 6.5).

Fig. 6.5. Elemente de control și elementul indicator de tip Array

Indicații privind realizarea diagramei instrumentului virtual


Dispunând de două elemente de control numerice, pentru valorile a și b, utilizatorul
poate greși și poate introduce o valoare numerică pentru a mai mare decât valoarea
numerică pentru b. Clarificarea acestei situații este posibilă utilizând funcția Max & Min
din meniul Comparison, pentru a identifica valoarea mai mare și valoarea mai mică
dintre a și b, iar programul lucrează în continuare cu valoarea mai mică drept a și
valoarea mai mare drept b (figura 6.6).

Fig. 6.6. Funcția Max & Min

Pentru a elimina din Array-ul inițial valorile care nu aparțin intervalului [a, b], în
fereastra diagramă a instrumentului virtual, se va ordona mai întâi șirul crescător cu
funcția Sort 1D Array, (disponibilă în paleta de funcții în meniul Array) (figura 6.7).
64
Programarea Calculatoarelor 1 - Algoritmi

Fig. 6.7. Funcția Sort 1 D Array

Șirul de valori numerice ordonat crescător, obținut la terminalul de ieșire al funcției Sort
1D Array, este comparat cu valoarea a prin intermediul funcției Less? (disponibilă în
paleta de funcții , în meniul Comparison) (figura 6.8).

Fig. 6.8

Se determină apoi (cu funcțiile Boolean To (0,1) și Add Array Elements) numărul de
valori din șirul ordonat mai mici decât a (figura 6.9).

Fig. 6.9. Diagrama aplicației pentru Punctul 1


Cunoscând numărul acestora, valorile mai mici decât a pot fi eliminate din șirul ordonat
utilizând funcția Delete From Array (disponibilă în paleta de funcții, în meniul Array)
(figura 6.10). Șirul rămas după ștergerea valorilor mai mici decât valoarea numerică a,
65
Programarea Calculatoarelor 1 - Algoritmi

este comparat cu valoarea numerică b prin intermediul funcției Less Or Equal?,


determinându-se apoi numărul de valori mai mici sau egale cu b. Cunoscând numărul
de valori mai mici sau egale cu b, celelalte valori pot fi eliminate din șirul rămas utilizând
funcția Array Subset (disponibilă în paleta de funcții, în meniul Array) (figura 6.10).

Fig. 6.10. Diagrama și panoul aplicației pentru ștergerea valorilor din șirul inițial care nu aparțin
intervalului [a, b]

Punctul 2. Verificare dacă șirul este sau nu este monoton


Pe panoul frontal al aplicației se dispune din meniul boolean al paletei de funcții un
element de tipul Round LED prin intermediul căruia instrumentul virtual va semnaliza
dacă șirul inițial de valori numerice este sau nu monoton. Acest element indicator
boolean se denumește în etichetă „Șir monoton” (figura 6.11).
Un șir de valori numerice este monoton dacă este crescător sau descrescător.
Un sir este crescător dacă este egal cu rezultatul ordonării sale crescătoare. Pentru a
verifica această afirmație, în diagrama instrumentului virtual, se ordonează șirul
crescător cu funcția Sort 1D Array și rezultatul se compară cu șirul inițial prin
intermediul funcției Equal? disponibilă în paleta de funcții, în meniul Comparison).
Funcția Equal? va genera un sir de valori booleene. Se verifică dacă cele două șiruri
(inițial și ordonat crescător) sunt egale (dacă toate valorile booleene din sir sunt

66
Programarea Calculatoarelor 1 - Algoritmi

adevărate, atunci șirul inițial este crescător) utilizând funcția And Array Elements, din
meniul Boolean (figura 6.12).

Fig. 6.11. Panoul aplicației

Un sir este descrescător dacă este egal cu rezultatul ordonării sale descrescătoare.
Șirul ordonat descrescător se poate obține prin aplicarea funcției Reverse 1D Array
asupra șirului ordonat crescător. Rezultatul obținut la terminalul de ieșire al funcției
Reverse 1D Array se compară cu șirul inițial prin intermediul funcției Equal? care va
genera un sir de valori booleene. Se verifică dacă cele două șiruri (inițial și ordonat
descrescător) sunt egale (dacă toate valorile booleene din sir sunt adevărate, atunci
șirul inițial este crescător) utilizând funcția And Array Elements (figura 6.12).
La rularea instrumentului virtual, elementul indicator boolean „Șir monoton” va
semnaliza dacă șirul inițial de valori numerice este monoton, adică dacă este crescător
sau descrescător. Acest lucru poate fi verificat trimițând cele două rezultate booleene
obținute la ieșirile funcțiilor And Array Elements, la terminalele de intrare ale funcției
Or, (disponibilă în paleta de funcții, în meniul Boolean). Dacă rezultatul obținut la ieșirea
din funcția Or este True (adevărat), elementul indicator boolean „Șir monoton” va avea
culoarea verde și culoarea roșie în caz contrar (figura 6.12).
.

Fig. 6.12. Diagrama aplicației


Punctul 3. Determinarea elementului maxim din mulțimea termenilor de rang impar și a
elementului minim din mulțimea termenilor de rang par ai șirului, precum și rangurile pe
care apar aceste elemente în șir.

În panoul frontal al instrumentului virtual se dispun patru elemente indicatoare de tip


numeric pentru valori scalare și se vor denumi în etichetele proprii astfel (figura 6.13):
67
Programarea Calculatoarelor 1 - Algoritmi

 „Maximul de rang impar” pentru a afișa valoarea maximă din mulțimea termenilor de
rang impar.
 „Minimul de rang par” pentru a afișa valoarea minimă din mulțimea termenilor de
rang par.
 „Rang” pentru a afișa rangul (valoare numerică) pe care apare valoarea maximă din
mulțimea termenilor de rang impar;
 „Rang” pentru a afișa rangul (valoare numerică) pe care apare valoarea minimă din
mulțimea termenilor de rang par.

Fig. 6.13. Panoul aplicației

În diagrama instrumentului virtual, pentru a separa șirul inițial de valori numerice în două
subșiruri, cel al termenilor de rang impar si cel al termenilor de rang par, se utilizează
funcția Decimate 1D Array (meniul Array) figura 6.14.
ATENTIE, rangul, așa cum este definit în algebra, are valoarea 1 pentru primul termen,
2 pentru al doilea termen din sir, etc. A nu se confunda rangul cu indicii valorilor dintr-un
Array, care incep de la valoarea 0 pentru prima valoare, 1 pentru a doua, etc.
Prin urmare, la primul terminal de ieșire al funcție Decimate 1D Array se obține șirul
termenilor cu index par dar de rang impar, iar la al doilea terminal, șirul termenilor de
index impar dar de rang par figura 6.14.

Fig. 6.14. Funcția Decimate 1D Array


68
Programarea Calculatoarelor 1 - Algoritmi

Pentru a obține valoarea minimă din șirul termenilor de rang par, se utilizează funcția
Array Max & Min (din meniul Array). La terminalul „min value” al funcției Array Max &
Min se va obține valoarea minimă din șirul conectat la terminalul de intrare al funcției, iar
la terminalul „min index” se va obține indexul valorii minime. Pentru a obține rangul
valorii minime din subșirul termenilor de rang par, la indicele corespunzător se aduna
valoarea numerică unu (folosind funcția Increment din meniul numeric), iar rezultatul se
înmulțește cu doi (folosind funcția Multiplay din meniul numeric) (figura 6.15).

Fig. 6.15. Minimul de rang par și rangul

Dacă numărul de valori din șirul inițial este par, funcția Decimate 1D Array lucrează
corect și cele două subșiruri pe care le generează după separare sunt complete.
Pentru a obține valoarea maximă și rangul valorii maxime din subșirul termenilor de rang
impar, se are în vedere faptul că funcția Decimate 1D Array separă corect termenii din
Array-ul inițial doar dacă în șir se află un număr par de valori. Dacă în șirul inițial se
afla un număr impar de valori, funcția nu adaugă la subșirul termenilor de rang impar
ultima valoare din șirul inițial.
Pentru a evita neglijarea ultimei valori, se verifică faptul că numărul de valori din șirul
inițial este par. Pentru aceasta se determină numărul total de valori numerice din șirul
inițial, utilizând funcția Array Size (din meniul Array). Se verifică dacă numărul de valori
este par împărțind cu ajutorul funcției Quotient & Reminder (meniul Numeric) acest
număr la valoarea numerică doi. Se compară restul împărțirii cu valoarea zero cu funcția
Equal To 0? (meniul Comparison) (figura 6.16).

Fig. 6.16
69
Programarea Calculatoarelor 1 - Algoritmi

Dacă numărul de valori din șirul inițial de valori este impar, subșirul termenilor de rang
impar este incomplet si la el trebuie concatenata ultima valoare din șirul inițial (utilizând
funcția Build. Array).Ultima valoare din șirul inițial se extrage din acesta cu funcția
Index Array. Indicele valorii ce se extrage poate fi calculat drept dimensiunea șirului
(Array Size) minus unu (figura 6.17)

.
Fig. 6.17

Pentru a obține șirul termenilor de rang impar corect, se va folosind funcția Select
(meniul Comparison) care va fi comandată la terminalul de intrare s de afirmația
booleană obținută la ieșirea din funcția Equal To 0?. La terminalul de intrare t al
funcției Select se conectează șirul termenilor de rang impar obținut la ieșirea funcției
Decimate 1D Array, iar la intrare f se conectează șirul construit cu funcția Build Array
(figura 6.17).

Fig. 6.18
70
Programarea Calculatoarelor 1 - Algoritmi

Din șirul obținut la terminalul de ieșire al funcției Select se determină valoarea maximă
din șirul termenilor de rang impar cu funcția Array Max & Min. La terminalul „max value”
al funcției Array Max & Min se va obține valoarea maximă din șirul conectat la
terminalul de intrare al funcției, iar la terminalul „max index” se va obține indexul valorii
maxime. Pentru a obține rangul valorii maxime din subșirul termenilor de rang impar,
indicele corespunzător trebuie înmulțit cu doi (folosind funcția Multiplay din meniul
numeric), iar la produsul rezultat se adună unu (funcția Increment) (figura 6.19).

Fig. 6.19. Diagrama instrumentului virtual

În figura 6.20 este prezentat panoul instrumentului virtual.

Fig. 6.20. Panoul instrumentului virtual


71

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