Post on 12-Dec-2015
description
1
ME
TO
DE
NU
ME
RIC
E
ÎN I
NG
INE
RIE
TUDOR PAUNESCUMN4
4. P
RO
GR
AM
AR
EA
ÎN M
AT
HC
AD
PARTICULARITĂŢI ALE PROGRAMELOR MATHCAD
EDITAREA PROGRAMELOR MATHCAD
INSTRUCŢIUNI
SUBPROGRAME ŞI RECURSIVITATE
DEPANAREA PROGRAMELOR MATHCAD
2
3
1. PARTICULARITĂŢI ALE PROGRAMELOR MATHCAD
Programarea în Mathcad 14 se bazează pe zece instrucţiuni, care aparent au o funcţionalitate relativ
limitată, dacă se compară cu posibilităţile de programare existente în alte medii matematice care au cam
aceeaşi complexitate globală, şi mult mai limitată, în comparaţie cu a mediilor generale de programare. În
realitate, cu setul de zece instrucţiuni, la care se adaugă numeroasele funcţii disponibile în biblioteca
Mathcad şi cu şi structurile de mare eficienţă cum ar fi matricele imbricate, se pot elabora programe
sofisticate.
Instrucţiunile de programare pot fi apelate prin intermediul paletei Programming, sau prin meniul View
Toolbars Programming.
1. Un program Mathcad este format din două structuri:
- o parte, care este identică cu cea a unei funcţii, plasată la stânga operatorului de asignare numerică;
- o parte, situată în dreapta operatorului de asignare, unde se efectuează operaţii specifice.
Nume program
Lista parametrilor formaliCorp program:numără elementele din vectorul vcare sunt mai micidecât aApelare program
Lista parametrilor actuali
2. Un program Mathcad poate apela orice funcţie predefinită în Mathcad, sau creată de utilizator, variabile
definite de utilizator, alte programe, cu respectarea condiţiilor de vizibilitate.
Ultima liniepoate lipsi
Operator atribuire
4
varianta1
START
xmin,xmax,n
fmin:=f(xmin)
i:=0
i:=i+1
x:=xmin+i.(xmax-xmin)/n
f(x)<fminfmin:=f(x)
xm:=x
i<n
xm,fmin
STOP
da
da
Date input
Inițilizări
Contor
Valoarea curenta x
Retinere min curent
Afișare
EXEMPLUL 1Calculează prin explorare exhaustivă valoarea minimă a unei
funcții monovariabilă, într-un interval
Funcția f(x) este vizibilă în corpul programului
xmin,xmax-limitele intervalului,
n-numărul de pași
5
Varianta 2. Functia f(x) este utilizată ca parametru actual la apelarea programului minf. Variantele 2 și
3 au generalitate mai mare decât varianta1 deoarece nu sunt dependente de numele funcției a cărui
minim dorim să-l aflăm
varianta2a
PP1. Scrieţi un program care să
calculeze minimum sau maximum
(selectabil) a unei funcţii bivariabile în
intevale date pe x şi y.
Se poate introduce orice nume de funcție respectând regulile de sintaxă,aici s-a utilizat un nume de funcție func
varianta3
Valorile curente ale variabilei x sunt generate aleator în intervalul 0-1
varianta2b
Varianta 2b este independentă de origine și este mai concentrată decât cea anterioarăSALT LA FOR
6
(S) Observație
Cele două exemple anterioare au scop
didactic, valoarea minimă, maximă unei funcții
în Mathcad se poate determina apelând
funcțiile Minimize, respectiv Maximize
integrate într-un bloc SOLVE (detalii într-un
curs ulterior)
7
3. Instrucţiunile de programare se introduc doar prin intermediul paletei Programming, sau prin hot keys, nu
prin scrierea lor caracter cu caracter.
5. Ca orice expresie, un program Mathcad returnează o valoare de natură scalară, vectorială, matriceală,
matriceală imbricată sau string (șir de caractere). Aceasta este, in general, returnată de ultima instrucţiune
executată de program. Sunt posibile mai multe ieşiri din program, prin întreruperea programului, cu
instrucţiunea RETURN.
6. O variabilă definită într-un program este locală programului, deci nu este vizibilă in exteriorul corpului
acestuia.
De exemplu în programul de mai sus dacă scriem xm şi se apasă pe tasta = Mathcad nu introduce simbolul
de evaluare =, ci pe cel de atribuire :=, deoarece îl consideră pe xm nedefinit (xm a fost definit în corpul
programului și nu este vizibil în exteriorul corpului programului).
7. În programele Mathcad poate fi aplicată recursivitatea.
8. Într-un program Mathcad nu este posibilă utilizarea VPA, în afară de cazul instrucţiunii FOR.
?
8
9. Într-un program Mathcad 14 se poate defini o funcţie în corpul programului (S).
Exemplu:
Etape
a.
b.
c.
d.
atribuire
9
2. EDITAREA PROGRAMELOR MATHCAD
- asupra liniilor unui program se pot
efectua operaţii de ştergere (“delete”),
tăiere (”cut”), copiere (”copy”), lipiere
(”paste”);
Atribuirea
- operatorul de asignare (atribuire)
se poate utiliza doar in corpul unui
program Mathcad. Acesta se insereaza
din paleta Programming, sau cu
tasta [ { ];
- operatorul de definire :=, nu poate fi
utilizat în corpul unui program Mathcad.
Liniile programului:
- operatorul de adăugare a unei linii la corpul programului Mathcad este sau tasta [ ] ] ;
- pe fiecare linie se scrie doar o instrucţiune;
- ştergerea unei linii selectate, se efectuează cu tastele [Bksp], [Delete];
10
Utilizarea unui program, definit într-o foaie de lucru se
face respectând regulile de vizibilitate. Se scrie numele
programului, urmat de lista parametrilor actuali, între
paranteze rotunde, folosind ca separatori virgulele.
După cum se ştie, există o corespondenţă poziţională
strictă între parametri actuali şi cei formali.
3. INSTRUCŢIUNI
3.1. Instrucţiunea condiţională (IF)
Inserare
Instrucţiunea IF din paleta Programming, sau tasta [ } ]
Sintaxa
forma simplificată:
valoarea dorită daca condiţia este adevarată IF condiţia (expresia booleană)
forma completă:
valoarea dorită daca condiţia este adevarată IF condiţia (expresia booleană)
valoarea dorită daca condiţia nu este adevarată OTHERWISE
String (șir de caractere)
11
3.2. Instrucţiuni repetitive (FOR, While)
3.2.1. Instrucţiunea FOR
Inserare
Instrucţiunea FOR din paleta Programming, sau combinaţia de taste [Ctrl]+["].
Sintaxa
Contorul este uzual o VPA (variabilă “range”):
FOR nume indice valoare initiala a indicelui, a doua valoare .. valoare finală (sau varianta simplă a VPA)
expresia care se evaluează repetat
Se utilizează mai rar şi alte contoare:
FOR nume indice vector sau listă scalari sau listă de VPA sau listă de vectori
expresia care se evaluează repetat
Observaţii
Instrucţiunea FOR se utilizează când este cunoscut numărul de cicluri.
Dacă contorul este o VPA, acesta se inserează cu operatorul m..n, din paleta Calculator, sau cu tasta [ ; ]
12
3.2.2. Instrucţiunea WHILE (instrucţiune repetitivă cu test iniţial)
Inserare
Instrucţiunea WHILE din paleta Programming sau [Ctrl]+]
Sintaxa
WHILE condiţie (expresie booleană)
expresia care se evaluează repetat,
dacă condiţia este satisfacută
Observaţii
Instrucţiunea WHILE se utilizează uzual dacă nu se cunoaşte numărul de cicluri, ieşirea din calculele
repetitive făcându-se când nu mai este îndeplinită condiţia. Aceasta trebuie să se refere la o variabilă,
expresie care se modifică în corpul ciclului, fiindcă în caz contrar ciclul este infinit. Dacă iniţial condiţia nu este
satisfăcută expresia nu este evaluată niciodată.
Generare vector cu valori aleatoare
Exemple
13
FOR versus WHILE
Ciclu cu număr determinat de
paşi.
Test final număr de paşi dacă i<n
se continuă calculele.
Ciclu cu număr nedeterminat de paşi.
Test iniţial îndeplinire condiţie, dacă condiţia
este îndeplinită se continuă calculele.
start start
i:=0
i:=i+1
Bloc calcule
i<n
stop
da
i:=1
conditie
Bloc calcule
da
i:=i+1
stop
nu
nu
14
3.3. Instrucţiuni pentru controlul execuţiei programului
Mathcad pune la dispoziţia utilizatorului trei instrucţiuni cu rol de întrerupere a rulării programului, enumerate
mai jos, în ordinea descrescătoare a efectului:
1. RETURN întrerupe programul;
2. BREAK întrerupe un ciclu;
3. CONTINUE întrerupe o iteraţie.
Instrucţiunile RETURN, BREAK, CONTINUE se inserează din paleta Programming sau cu combinaţiile de
taste: [Ctrl]+ [I], respectiv [Ctrl]+ [{ ], respectiv [Ctrl]+ [[].
Ca şi în cazul celorlalte instrucţiuni de programare este interzisă inserarea prin tastatură literă cu literă.
3.3.1. Instrucţiunea RETURN
Instrucţiunea RETURN permite întreruperea rulării programului şi returnarea unei valori calculate,
oriunde în corpul programului.
Sintaxa
RETURN expresia sau şirul de caractere care se returnează
Deseori, instrucţiunea RETURN se utilizează în combinaţie cu instrucţiunea IF
RETURN expresie returnată IF condiţia (expresia booleană)
Efecte descrescătoare
15
Programul alăturat extrage dintr-un
vector prima valoare mai mare decât
o valoare dată.
3.3.2. Instrucţiunea BREAK
Instructiunea BREAK se utilizeazã în corpul instructiunilor ciclice FOR, sau WHILE pentru intreruperea
ciclului şi executarea instrucţiunii imediat urmatoare după ciclu.
Sintaxa
Instrucţiunea BREAK se utilizează în combinaţie cu instrucţiunea IF:
BREAK IF condiţia (expresia booleană)
i este contorul vectorului care se proceseaza (v)j este indicele subvectorului extras
16
3.3.3. Instrucţiunea CONTINUE
Instrucţiunea CONTINUE se utilizează în corpul instrucţiunilor ciclice, pentru întreruperea unei iteraţii a
ciclului şi executarea instrucţiunii imediat următoare din ciclu.
Sintaxa
La fel ca instrucţiunile anterioare, CONTINUE se utilizează în combinaţie cu instrucţiunea IF:
CONTINUE IF condiţia (expresia booleană)
17
3.4. Instrucţiuni pentru gestiunea erorilor ON ERROR, ERROR
3.4.1. Instrucţiunea ON ERROR (S)
Instrucţiunea ON ERROR este destinată manipularii erorilor neprevizibile. Aceasta are funcţionalitatea
unei instrucţiuni condiţionale.
Inserare
Paleta Programming sau [Ctrl]+[ , ].
Sintaxa
expresie, funcţie evaluată dacă există eroare ON ERROR expresie, funcţie evaluată daca NU există
eroare
18
3.4.2. Instrucţiunea ERROR
Afişează scurte mesaje, stabilite de utilizator (“tip” sau “hint”), dacă nu sunt îndeplinite anumite condiţii.
Inserarea nu se face din paleta Programming ci din Insert Function.
Sintaxa
Instrucţiunea ERROR se utilizează de obicei în combinaţie cu instrucţiunea IF:
ERROR ('' mesaj stabilit de utilizator'') IF condiţia (expresia booleană)
3.4.3. Alte instrucţiuni pt. protecţie IsArray, IsNaN, IsPrime, IsScalar, IsString returnează 1 pt OK și 0 în caz
contrar
Obs. IsPrime poate fi
evaluată doar simbolic
19
4. SUBPROGRAME ŞI RECURSIVITATE
4.1. Subprograme
Mathcad 14 permite utilizarea subprogramelor, care pot fi imbricate pe oricâte nivele. Subrutinele sunt
recomandate în scopul stăpânirii complexităţii programării. Un program astfel structurat este mult mai lizibil,
se poate testa şi depana mult mai uşor, în plus dă posibilitatea refolosirii codului.
sau mai simplu utilizând funcţia factorial existentă în biblioteca Mathcad (vezi toolbox-ul Calculator)
20
4.2. Recursivitate
Deşi utilizarea recursivităţii în definirea unei funcţii permite scrierea unui cod minimal, resursele de memorie
nu sunt eficient utilizate.
O funcţie definită recursiv trebuie să conţină două părţi: o definire a funcţiei dependentă de o valoare
anterioară a argumentului şi o condiţie iniţială, pentru a evita ciclarea.
21
5. DEPANAREA PROGRAMELOR MATHCAD (S)
Depanarea programelor Mathcad 14 utilizează o fereastră diferită de foaia de lucru: View Trace Windows.
Controlul procesului de depanare a unui program se face cu o bară specializată de instrumente:
View Toolbars Debug sau prin intermediul meniului Tools Debug Togle Debug.
Pornire depanare Întrerupere Stare depanare on/off Vedere/ascundere fereastră depanare
În vederea depanării unui program se utilizează funcţiile trace(S, x, y, z, ...), pause(S, x, y, z, ...) care
se inserează în codul programului sau direct în foia de lucru, cu parametrii:
S este un parametru opţional dacă se urmăreşte o singură variabilă, în caz contrar este un string
(şir de caractere) care conţine codul de control al locaţiei argumentului S (prima poziţie, a doua etc).
x, y, z sunt expresii valide în MC.
Pentru a se urmări evoluţia variabilelor selectate în fereastra trace, clic pe al treilea buton (Toggle Debugging)
22
Exemplu de inserarea a funcţiei trace în program, în interiorul unui ciclu for.
Exemplu de inserarea a funcţiei trace în program, în interiorul unui ciclu for, cu afişarea valorilor indexului i şi a valorii curente x.
Exemplu de inserarea a funcţiei pause în program, în interiorul unui ciclu for. La fiecare apăsare a butonului resume de pe bara de instrumente Debug, în fereastra Trace este afişat câte un rând care conţine elementele vectorului
Pentru operaţii simple de editare a conţinutului ferestrei Trace clic ButD
Exemplu de inserarea al funcţiilor trace şi pause în corpul programelor
23Exemplu de utilizarea funcţiei trace în programul de calcul al erorilor axei unui element centrat prin intermediul unei bucşe cilindrice