Sunteți pe pagina 1din 735

Facultatea de Inginerie Mecanică și Mecatronică

PROGRAMAREA

Sem 2
CALCULATOARELOR ȘI LIMBAJE DE
PROGRAMARE II
ANUL I SERIA D

2020-2021
CUPRINS ȘI PUNCTAJ

• Punctaj: 80 % în timpul anului


❑15 % prezența laborator
❑15 % activitate laborator
❑30 % trei teste
❑20 % tema finală
• 20 % colocviu

2020-2021 2
CURS 1 – PREZENTARE PROGRAME

• Limbaje de programare:
1. C++

Descriere: A fost introdus la sfârșitul anilor 1970.


De atunci, se utilizează intensiv pentru realizarea
aplicațiilor de înaltă performanță: sisteme de
operare, realitate virtuală, grafică computerizată etc.
Este un limbaj de programare orientat pe obiecte.
Alte limbaje de programare sunt: JavaScript, Phyton.

2020-2021 3
CURS 1 – PREZENTARE PROGRAME

• Software-uri CAD (Computer Aided Design-


Proiectare asistată de calculator):
1. SolidWorks
Descriere: Este utilizat mai ales pentru proiectare 3D.
Include o gamă largă de caracteristici, cum ar fi:
instrumente pentru verificarea proiectului, reversed
engineering (inginerie inversată). Este foarte practic,
intuitiv și detaliat. Este folosit pentru produse
industriale. Permite modelarea și simularea sistemelor
mecanice complexe.

2020-2021 4
CURS 1 – PREZENTARE PROGRAME

2. AutoCAD

Descriere: Este unul dintre primele programe


de CAD, fiind foarte bine cunoscut în
industrie. Este potrivit pentru desenarea 2D,
dar este dificil de utilizat pentru modelarea
3D.

2020-2021 5
CURS 1 – PREZENTARE PROGRAME

• 3 CATIA

Descriere: Este un soft multiplatformă utilizat pentru:


proiectare (CAD), fabricație (CAM=Computer Aided
Manufacturing) și inginerie (CAE=Computer Aided
Engineering).
Este foarte util pentru proiectanții industriali, inginerii
mecanici și insinerii de sisiteme.

2020-2021 6
CURS 1 – PREZENTARE PROGRAME

• 4 INVENTOR

Descriere: A fost dezvoltat de Autodesk în


1999.
Este utilizat pentru proiectarea mecanică 3D,
simulare, vizualizare și documentare a
sistemelor mecanice.

2020-2021 7
CURS 1 – PREZENTARE PROGRAME

• Programe pentru simulare numerică:


1. FLUENT BY ANSYS

Descriere: Este un software de simulare care


permite agenților economici să testeze prototipurile
pentru depistarea unor posibile defecte înainte ca
acestea să fie lansate în execuție. Permite
inginerilor să realizeze modele virtuale, pe care să
le supună unor teste de verificare la acțiunea
solicitărilor ce pot apărea în timpul funcționării lor.
Astfel, se pot reduce drastic riscurile introducerii în
fabricație a unor produse neperformante.
2020-2021 8
CURS 1 – PREZENTARE PROGRAME

2. OCTAVE

Descriere: Este un limbaj de programare de nivel înalt,


utilizat, în principal, pentru calcule numerice. Are o
interfață cu linii de comandă pentru rezolvarea
numerică a problemelor liniare și neliniare și pentru
efectuarea de experimente numerice, utilizând un limbaj
care este, în cea mai mare parte, compatibil cu
MathLab. În lume, există în prezent o comunitate activă
care poate furniza utilizatorilor suport tehnic.
2020-2021 9
CURS 1 – PREZENTARE PROGRAME

3. MathLab

Descriere: Este un mediu de calcul numeric și


analitic dezvoltat de MathWorks.

Permite calculul matricial, reprezentări 2D și


3D ale funcțiilor și datelor experimentale,
implementarea algoritmilor și dezvoltarea
interfeței cu alte programe.
2020-2021 10
CURS 1 – PREZENTARE PROGRAME
MathCad
Descriere: Este utilizat de ingineri și cercetători în
diferite discipline, cel mai adesea în: inginerie
mecanică, chimică, electrică, construcții pentru
verificarea, validarea și documentarea calculelor
inginerești.

Include în prezent și anumite capabilități de calcul al


sistemelor algebrice, dar rămâne orientat către ușurința
în utilizarea și documentarea aplicațiilor numerice
inginerești.
2020-2021 11
CURS 1 – PREZENTARE PROGRAME

EES
Descriere: EES reprezintă acronimul pentru
Engineering Equation Solver. Funcția
principală este găsirea soluțiilor pentru seturi
de ecuații algebrice. EES poate rezolva în
mod eficient sute de ecuații neliniare cuplate.
O diferență majoră față de alte programe de
rezolvarea a ecuațiilor o reprezintă
proprietățile matematice și termofizice
implicite pe care EES le are.
2020-2021 12
CURS 1 – PREZENTARE PROGRAME

EES
De exemplu, tabelele pentru diferite fluide,
cum ar fi aburul, sunt implementate astfel
încât orice proprietate termodinamică poate
fi obținută printr-o funcție de apelare
predefinită pe baza altor două proprietăți.
Are capacitatea să rezolve studii
parametrice. Bibliotecile ce conțin
proprietățile termodinamice și de transport
sunt utile în rezolvarea problemelor de:
termotehnică, mecanica fluidelor și transfer
de căldură. 13
Elemente introductive ale
limbajului C++
Elemente introductive ale limbajului
C++
3.1. Programarea şi limbaje de programare
3.2. Limbajul C
3.3. Elemente de bază ale limbajului C++
3.3.1. Tipuri de date
3.3.2. Modificatorii de tip
3.3.3. Constante
3.3.4. Variabile
3.4. Operatorii limbajului C++
3.4.1. Operatori aritmetici
3.4.2. Operatori relationali
3.4.3. Operatori de egalitate
3.1. Programarea şi limbaje de programare
Prin programare se înţelege în mod generic
transpunerea unor operaţii repetitive, asupra unui set de
date, într-un limbaj inteligibil de către un sistem de calcul
care urmează ulterior să le execute.
Acest lucru este realizat în două etape:
1. etapă în care este implicat omul şi anume cea de
trecere de la problema reală la transpunerea într-un
limbaj de programare.
2. o a doua etapă, automată, care transpune codul sursă
(înşiruirea de instrucţiuni specifice limbajului respectiv)
într-un cod direct executabil (inteligibil sistemului de
calcul) lucru de care se ocupă programe specializate
numite compilatoare. -
3.1. Programarea şi limbaje de programare
Rolul programării este ca de fiecare dată
când o anumită operaţiune sau o suită de
operaţiuni repetitive care se aplică asupra unor
seturi de date mereu diferite să fie scris un
program care să:
1. ceară setul de date de intrare (cele care trebuie
să fie prelucrate)
2. să execute asupra lor suita standard de
operaţiuni
3. şi să livreze datele de ieşire (adică rezultatele)
3. Elemente introductive ale limbajului
C++
3.1. Programarea şi limbaje de programare
3.2. Limbajul C
3.3. Elemente de bază ale limbajului C++
3.3.1. Tipuri de date
3.3.2. Modificatorii de tip
3.3.2. Constante
3.3.2. Variabile
3.4. Operatorii limbajului C++
3.4.1. Operatori aritmetici
3.4.2. Operatori relationali
3.4.3. Operatori de egalitate
3.2. Limbajul C
Limbajele de programare de nivel mediu au fost
serios dezvoltate pe la mijlocul anilor '50.
La ora actuală se estimează că există peste 2000 de
limbaje de programare, diferenţele între ele fiind legate
în principal de stilul de programare.
Limbajul C, dezvoltat în 1972 de Dennis M. Ritchie*
la Laboratoarele AT&T Bell, este primul limbaj pentru
crearea de sisteme de operare.

*Dennis M. Ritchie a decedat pe 14.10.2011 (la varsta 70


de ani)!
3.2. Limbajul C
Numele limbajului provine din faptul că este
rezultatul îmbunătăţirii limbajului B, folosit în scrierea
sistemului de operare UNIX pentru DEC PDP7.
Prima documentaţie despre acest limbaj a fost "The
C Programing Language", scrisă de Dennis Ritchie şi
Brian Kernighan în 1977.
Înaintea ei exista doar "The C Reference Manual",
scrisă de Dennis Ritchie.
O caracteristică importantă a acestui limbaj este
faptul că poate fi considerat simultan şi un limbaj de
nivel mediu şi un limbaj de nivel scăzut.
3.2. Limbajul C

Limbajul C şi versiunile sale OOP (Object


Oriented Programming) C++, Visual C++ şi
mai noul C# sunt printre cele mai folosite
limbaje de programare la ora actuală.
3.2. Limbajul C
Limbajul C permite folosirea a două tehnici
de programare:
1. programare structurată
2. acces direct la maşină
fapt care-l face să fie foarte flexibil.
Ultimul şi poate cel mai important motiv
pentru învăţarea limbajului C este faptul că
permite trecerea cu uşurinţă la varianta sa C++,
la limbajul Java sau la limbajul C#.
3. Elemente introductive ale limbajului
C++
3.1. Programarea şi limbaje de programare
3.2. Limbajul C
3.3. Elemente de bază ale limbajului C++
3.3.1. Tipuri de date
3.3.2. Modificatorii de tip
3.3.3. Constante
3.3.4. Variabile
3.4. Operatorii limbajului C++
3.4.1. Operatori aritmetici
3.4.2. Operatori relationali
3.4.3. Operatori de egalitate
3.3. Elemente de bază ale limbajului C++

Vom studia în cele ce urmează varianta


orientată pe obiecte a limbajului standard C, şi
anume limbajul C++.
3.3. Elemente de bază ale limbajului C++

1. Tipuri de date. Variabile. Constante


Cuvinte cheie
Limbajul C, ca orice limbaj de programare,
este compus din câteva denumiri (identificatori)
cu o semnificaţie bine stabilită, numite cuvinte
cheie.
Observaţie: Când alegeţi denumiri de variabile
pentru programe să nu utilizaţi aceste denumiri.
3.3. Elemente de bază ale limbajului C++
Cuvintele cheie ale limbajului C.
auto break case char const continue default do
double else enum extern float for goto if
int long register return short signed sizeof static
struct switch typedef union unsigned void volatile while

Limbajul C++ adaugă noi noi cuvinte cheie la cele


existente ale limbajului C.
asm bool catch class delete
friend inline mutable namespace new
operator private public protected template
this using virtual
3. Elemente introductive ale limbajului
C++
3.1. Programarea şi limbaje de programare
3.2. Limbajul C
3.3. Elemente de bază ale limbajului C++
3.3.1. Tipuri de date
3.3.2. Modificatorii de tip
3.3.3. Constante
3.3.4. Variabile
3.4. Operatorii limbajului C++
3.4.1. Operatori aritmetici
3.4.2. Operatori relationali
3.4.3. Operatori de egalitate
3.3.1. Tipuri de date

Un tip de date specifică (precizează):


• mulţimea de valori pe care variabila respectivă
le poate lua
• cât şi setul de operaţii pe care programatorul le
poate efectua cu acea variabilă
3.3.1. Tipuri de date
NUMELE
CARACTERISTICI
TIPULUI
reţine un singur caracter
char Exemple: ‘A’, ’a’, ’%’, etc.
reţine numere întregi cu semn
int Exemple: 23, -45, 0, etc.
reţine numere reale în format cu virgulă mobilă, în
float simplă precizie
Exemple: 7.8965, -4.123, 7.0, etc.
reţine numere reale în format cu virgulă mobilă, în
dublă precizie
Exemple: 123456789.89654321,
double -123456789.1234567890, 123456789.0, etc. (se
utilizează când se prelucrează numere foarte mari sau
foarte mici)
tip de date special care nu specifică un anumit set de
void valori iniţial, dar care poate fi specificat ulterior
declarării.
3.3.1. Tipuri de date
Reprezentarea caracterelor in memoria calculatorului

• Programatorii pot folosi in programe valori de orice tip (cifra,


litera mica, litera mare, caractere speciale, alte caractere).
• In memoria calculatorului fiecare astfel de caracter se
reprezinta printr-un cod numeric - ASCII (codul numeric al
caracterului respectiv). Intervalul este intre 0 si 255.
Interval valori
(selecție) Semnificație
Cod ASCII
[0, 32] Caractere neprintabile(netipăribile)
[48, 57] Cifrele de la 0 la 9
[65, 90] Literele mari de la A la Z
[97, 122] Literele mici de la a la z
3.3.1. Tipuri de date

1. Tipul de date char char <definitie_de_data>;

Se reprezintă în memoria calculatorului folosind 8 biţi (un octet) şi poate


păstra valori cuprinse între –128 şi 127.
Programatorii pot atribui valori de tip caracter unei astfel de variabile în
două modalităţi distincte, dar care acţionează identic.
Astfel se poate folosi reprezentarea din ASCII (codul numeric al
caracterului respectiv), sau caracterul respectiv între două apostrofuri. Dacă
se declară fără semn (adică se utilizează modificatorul unsigned), intervalul de
valori se întinde de la 0 la 255.
Exemplu:
char litera_mica;
char litera_mica=97;
sau char litera_mica=’a’;
3.3.1. Tipuri de date
2. Tipul de date int int <definitie_de_data>;

Se reprezintă în memoria calculatorului folosind 16


biţi (2 octeţi) şi poate păstra valori cuprinse între –
32768 şi 32767.
Dacă se declară fără semn (adică se utilizează
modificatorul unsigned), intervalul de valori se întinde
de la 0 la 65535.
Exemplu: int a=9;
int b=6725;
int c=-31567;
3.3.1. Tipuri de date

3. Tipul de date float


float <definitie_de_data>;

Se reprezintă în memoria calculatorului


folosind 32 biţi (4 octeţi) şi poate păstra valori
cuprinse între 3.4E-38 şi 3.4E+38.

Exemplu: float x=9.789;


float y=-6725.123;
float z=-3156723;
3.3.1. Tipuri de date

4. Tipul de date double


double <definitie_de_data>;

Se reprezintă în memoria calculatorului folosind


64 biţi (8 octeţi) şi poate păstra valori cuprinse între
1.7E-308 şi 1.7E+308.

Exemplu:

double numar_foarte_mare=123456789123456789.123456789123456789;
double numar_foarte_mic=-123456789123456789.123456789123456789;
double numar_mare=-123456789;
3.3.1. Tipuri de date
5. Tipul de date void
[void ] <definitie_de_functie([void])
sau
void <definitie_de_pointer>;
• Este tipul de dată vidă (fără tip specificat), utilizat în general
pentru mărirea clarităţii programelor.
• Tipul void permite explicitarea faptului că o funcţie nu
returnează nimic sau nu are nici un parametru.
Exemplu:
void salut(void)
{
cout<<“SALUTAM PROGRAMATORII IN LIMBAJUL C++ !!!“<<endl;
}
3. Elemente introductive ale limbajului
C++
3.1. Programarea şi limbaje de programare
3.2. Limbajul C
3.3. Elemente de bază ale limbajului C++
3.3.1. Tipuri de date
3.3.2. Modificatorii de tip
3.3.3. Constante
3.3.4. Variabile
3.4. Operatorii limbajului C++
3.4.1. Operatori aritmetici
3.4.2. Operatori relationali
3.4.3. Operatori de egalitate
3.3.2. Modificatorii de tip
Limbajul C++ oferă pe lîngă cele 5 tipuri de bază
prezentate mai sus, un set de modificatori de tip:
1. unsigned (fără semn)
2. long (lung) Exemplu: unsigned int numar;
3. signed (cu semn) register int i;
4. register (registru) long int numar_foarte_mare;
5. short (scurt)
Un modificator de tip schimbă domeniul valorilor pe
care o variabilă le poate păstra, sau modul în care
compilatorul păstrează o variabilă. Pentru a se modifica un
tip de data, se va plasa modificatorul în faţa tipului respectiv.
3. Elemente introductive ale limbajului
C++
3.1. Programarea şi limbaje de programare
3.2. Limbajul C
3.3. Elemente de bază ale limbajului C++
3.3.1. Tipuri de date
3.3.2. Modificatorii de tip
3.3.3. Constante
3.3.4. Variabile
3.4. Operatorii limbajului C++
3.4.1. Operatori aritmetici
3.4.2. Operatori relationali
3.4.3. Operatori de egalitate
3.3.3. Constante
Sunt date a căror valoare nu poate fi
modificată în timpul execuţiei programului.

Ele reprezintă un tip şi o valoare şi astfel pot fi de mai


multe tipuri:
1. constantă întreagă
2. constantă flotantă
3. constantă caracter
4. constantă șir de caractere
3.3.3. Constante
1. constantă întreagă = se reprezintă sub forma unei înşiruiri de cifre.
Se clasifică în:
– constante zecimale (se scriu în baza 10) Exemplu: 14, 568,
17342
– constante octale (se scriu în baza 8) Exemplu: 0şir de cifre în
baza 8
– constante hexazecimale (se scriu în baza 16) Exemplu: 0x şir de
cifre în baza 16
Constantele întregi se reprezintă pe 16 biţi sau pe 32 de biţi. Dacă
la sfârşitul unei constante punem litera l sau L, atunci constanta
respectivă va fi reprezentată pe 32 de biţi.
Exemplu: numărul 17 se reprezintă pe 16 biţi
numărul 17L se reprezintă pe 32 biţi
3.3.3. Constante

2. constantă flotantă este compusă din 2 părţi


– partea fracţionară (care poate fi vidă) şi
– exponent (care poate fi el vid)
O constantă reală este sub următoarea formă:

parte întreagă.parte fracţionară e  exponent

Exemplu: 3.45e-17  3,45*10-17


Toate constantele flotante se reprezintă pe 16 biţi.
3.3.3. Constante
3. constantă caracter este de fapt un caracter între apostrofuri.
Se reprezintă pe 8 biţi, fiind chiar reprezentarea în codul
ASCII a caracterului respectiv.
Exemplu:
‘A’ reprezentare internă: 65 (codul ASCII a caracterului ‘A’)
‘a’ reprezentare internă: 97 (codul ASCII a caracterului ‘a’)
În plus avem o notaţie specială ‘\’ = backslash, care se poate
folosi împreună cu câteva litere mici cu următoarele
semnificaţii:
Caracter semnificatie
\n linie noua
\r retur de car
\t tabulator orizontal
\v tabulator vertical
\\ backslash
\nnn valoare ASCII in octal
Curs - Programarea calculatoarelor
\xnnn valoare ASCII in hexazecimal
3.3.3. Constante
4. constantă şir sau şir de caractere
Acest tip de constantă apare ca o succesiune de caractere scrise
între ghilimele.
Poate fi şi şirul vid. Reprezentarea internă este astfel încât fiecare
caracter apare pe câte un singur octet, iar ca terminator de şir avem
caracterul 0 (nul).
Constantele şir pot fi scrise pe linii diferite, dar pe prima linie
ultimul caracter este backslash, înainte de apăsarea tastei RETURN.
Exemplu: linia 1 : “conti\
linia 2 : nuare”

Exemplu : “AbbA” se reprezintă intern astfel:

659898650 A b b A
3. Elemente introductive ale limbajului
C++
3.1. Programarea şi limbaje de programare
3.2. Limbajul C
3.3. Elemente de bază ale limbajului C++
3.3.1. Tipuri de date
3.3.2. Modificatorii de tip
3.3.3. Constante
3.3.4. Variabile
3.4. Operatorii limbajului C++
3.4.1. Operatori aritmetici
3.4.2. Operatori relationali
3.4.3. Operatori de egalitate
3.3.4. Variabile

Pentru a putea utiliza informaţiile ce pot fi


prelucrate prin intermediul programelor,
trebuie să folosim denumiri (identificatori), care
să fie compuşi din caractere – litere, cifre şi
liniuţa de subliniere - underscore(‘_’) din
maximum 31 caractere.
Numim variabilă o denumire (identificator)
pe care compilatorul o asociază cu o anumită
zonă de memorie.
3.3.4. Variabile
Când se declară o variabilă, trebuie specificat atât
numele ei cât şi tipul de date asociat.
Exemple:
int variabila_de_tip_intreg;
float variabila_de_tip_real;
char variabila_de_tip_caracter;
void variabila_fara_tip;

Restricţie: Numele variabilelor nu pot să înceapă cu


o cifră.
Exemplu: variabila1 - este corect
1variabila - nu este corect
3.3.4. Variabile
Observaţie:
Limbajul C este case sensitive, adică face
diferenţa dintre literele mici şi mari, astfel încât,
două denumiri de variabile sau de funcţii, care
sunt identice dar sunt scrise o dată cu litere mici
iar apoi cu litere mari, se consideră ca fiind două
denumiri de variabile sau de funcţii diferite.
Exemplu: int var_intreaga;
int VAR_INTREAGA;
semnifică două denumiri total diferite.
3.3.4. Variabile

Variabilele pot fi:


1. simple
2. compuse:
a) tablou
b) structură/uniune
3.3.4. Variabile
Variabilele simple
Declaraţia de variabilă simplă are forma:
tip nume_variabila;

Exemplu:
int i;
int j, k, l;
double a, b;
float x, y;
char m, n, t;
3.3.4. Variabile
Variabilele tablou
Prin tablou înţelegem o mulţime ordonată
de acelaşi tip; accesul la elementele tabloului
făcându-se cu ajutorul indicilor.
Declaraţia este:
tip nume_tablou[dimensiune];
Exemplu:
int v[5];
float x[15];
double a[3];
3.3.4. Variabile
Observaţie:
Numerotarea elementelor unui tablou în
limbajul C++ începe cu indicele 0.
Elementele lui int v[5] vor fi:
v[0],v[1],v[2],v[3],v[4];
Indice poate să fie orice expresie întreagă.
Putem avea chiar şi tablouri de şiruri de
caractere: char t[20];
Numele tabloului este de fapt adresa
primului său element.
3.3.4. Variabile
Iniţializarea variabilelor
Poate fi făcută chiar pe linia de declarare a variabilelor:
Exemplu: int i=5;
float x=7.8;
int v[5]={1,2,7,10,-5};
float y[3]={-9.034,89,2};
char c=’B’;

Pentru iniţializarea variabilelor de tip şir de caractere avem


următoarele posibilităţi:
char t[15] = { ’s’, ’i’, ’r’,’ ’,’c’, ’o’, ’r’, ’e’, ’c’, ’t’, ’\0’ };
sau char t[15] = ”sir corect”;
3.3.4. Variabile
Comentarii în programe
Numim comentarii, acele texte care nu sunt
luate în considerare de compilator şi care apar
între simbolurile
/* comentariu */
sau
când este vorba despre o singură linie
// comentariu
Se mai pot pune comentarii pentru ca să se
elimine una sau mai multe instrucţiuni din
programul C++.
3. Elemente introductive ale limbajului
C++
3.1. Programarea şi limbaje de programare
3.2. Limbajul C
3.3. Elemente de bază ale limbajului C++
3.3.1. Tipuri de date
3.3.2. Modificatorii de tip
3.3.3. Constante
3.3.4. Variabile
3.4. Operatorii limbajului C++
3.4.1. Operatori aritmetici
3.4.2. Operatori relationali
3.4.3. Operatori de egalitate
3.4. OPERATORII LIMBAJULUI C++

Expresii
• O expresie poate să fie un operand sau mai
mulţi operanzi legaţi prin operatori.
• Orice expresie are tip şi valoare care sunt date
după evaluarea expresiei.
3.4. OPERATORII LIMBAJULUI C++

Operatori
• Operatorii folosiţi în limbajul C++ au o asociere
de la stânga la dreapta – în general – cu excepţia
operatorilor unari (se aplică la un singur
operand), relaţionali şi de atribuire, la care
asocierea se face de la dreapta la stânga.
3.4. OPERATORII LIMBAJULUI C++
Operatorii sunt împărţiţi în 11 categorii:

Operatori
1 aritmetici
2 relaţionali
3 de egalitatite
4 logici
5 logici pe biţi
6 de atribuire
7 de incrementare şi decrementare
8 de conversie explicită (cast)
9 de lungime (sizeof)
10 condiţional
11 virgulă
3. Elemente introductive ale limbajului
C++
3.1. Programarea şi limbaje de programare
3.2. Limbajul C
3.3. Elemente de bază ale limbajului C++
3.3.1. Tipuri de date
3.3.2. Modificatorii de tip
3.3.3. Constante
3.3.4. Variabile
3.4. Operatorii limbajului C++
3.4.1. Operatori aritmetici
3.4.2. Operatori relationali
3.4.3. Operatori de egalitate
3.4.1. Operatori aritmetici
OPERATOR FUNCŢIE
+ Adunare
- Scădere
* Înmulţire
/ Împărţire
% Restul împărţirii
+ adunare unară
- scădere unară

În cele mai simple programe se pot utiliza operaţii matematice cum


ar fi adunarea, scăderea, înmulţirea şi împărţirea.
Exemplu:
int i=9, j=2;
atunci i/j are ca rezultat 4
i%j are ca rezultat 1
3.4.1. Operatori aritmetici
Prezentăm în următorul program scris în C++, principalii operatori
matematici:
#include <iostream.h>
int main(void)
{
int secunde_pe_ora;
float media;
secunde_pe_ora = 60 * 60;
media = (5 + 10 + 15 + 20) / 4;
cout<<“Numarul de secunde intr-o ora este ”<< secunde_pe_ora
<<endl;
cout<<“Media numerelor 5, 10, 15 si 20 este ”<<media<<endl;
cout<<“Numarul de secunde in 48 de minute este
”<<secunde_pe_ora – 12 * 60<<endl;
}
3.4.1. Operatori aritmetici

După execuţia programului se vor afişa pe ecran


următoarele rezultate:
Numarul de secunde intr-o ora este 3600
Media numerelor 5, 10, 15 si 20 este 12.000000
Numarul de secunde in 48 de minute este 2880
3. Elemente introductive ale limbajului
C++
3.1. Programarea şi limbaje de programare
3.2. Limbajul C
3.3. Elemente de bază ale limbajului C++
3.3.1. Tipuri de date
3.3.2. Modificatorii de tip
3.3.3. Constante
3.3.4. Variabile
3.4. Operatorii limbajului C++
3.4.1. Operatori aritmetici
3.4.2. Operatori relationali
3.4.3. Operatori de egalitate
3.4.2. Operatori relaţionali
În programe, prin aplicarea acestor operatori relaţionali se
pot obţine două valori posibile, la evaluarea expresiilor care îi
conţin:
0 – ceea ce înseamnă că expresia este falsă
1 – ceea ce înseamnă că expresia este adevărată
OPERATOR FUNCŢIE
< mai mic
<= mai mic sau egal
> mai mare
>= mai mare sau egal

Exemplu:
int i=3, j=8;
Atunci pentru expresia i < j avem valoarea 1
Iar pentru expresia i >= j avem valoarea 0
3. Elemente introductive ale limbajului
C++
3.1. Programarea şi limbaje de programare
3.2. Limbajul C
3.3. Elemente de bază ale limbajului C++
3.3.1. Tipuri de date
3.3.2. Modificatorii de tip
3.3.3. Constante
3.3.4. Variabile
3.4. Operatorii limbajului C++
3.4.1. Operatori aritmetici
3.4.2. Operatori relationali
3.4.3. Operatori de egalitate
3.4.3. Operatori de egalitate
În programe, prin aplicarea acestor operatori de egalitate se
pot obţine două valori posibile, la evaluarea expresiilor care îi
conţin:
0 – ceea ce înseamnă că expresia este falsă
1 – ceea ce înseamnă că expresia este adevărată
OPERATOR FUNCŢIE
== egal
!= diferit

Exemplu:
int i=2, j=5, k=2;
Atunci pentru expresia i!=j avem valoarea 1
Pentru expresia i==j avem valoarea 0
Iar pentru expresia i==k avem valoarea 1
3. Elemente introductive ale limbajului
C++
3.4. Operatorii limbajului C++
3.4.1. Operatori aritmetici
3.4.2. Operatori relaţionali
3.4.3. Operatori de egalitate
3.4.4. Operatori logici
3.4.5. Operatori logici pe biţi
3.4.6. Operatorul de atribuire
3.4.7. Operatori de incrementare şi de decrementare
3.4.8. Operatorul de conversie explicită (cast)
3.4.9. Operatorul de lungime (sizeof)
3.4.10. Operatorii condiţionali
3.4.11. Operatorul virgulă
3.4.4. Operatori logici
În limbajul C/C++ nu există valori speciale pentru adevărat
sau fals şi de aceea:
- valoarea de fals este reprezentată prin zero (0)
- iar valoarea de adevarat este reprezentată prin orice număr
diferit de zero (0) OPERATOR FUNCŢIE
! negare
&& şi logic
|| sau logic
Observaţie:
Din punct de vedere al priorităţii, operatorii unari au cea mai
mare prioritate şi de aceea, în acest caz, operatorul ‘!’ are
prioritatea cea mai mare, urmat în ordine de operatorul ‘&&’ şi
de operatorul ‘||’.
3.4.4. Operatori logici
Reamintim tabele de adevăr ale celor trei operatori
logici:
&& 0 0 || 0 0 !0 1
0 0 0 0 0 1
0 0 1 ! 0 0
0 1 1
Exemplu:
expresia !0 are valoarea 1
expresia !5 are valoarea 0
expresia !(a==b) are valoarea 1 sau 0 în funcţie de valorile lui
a, respectiv b.
3.4.4. Operatori logici
Prezentăm mai Expresie Valoare
jos, un exemplu mai
amplu cu câteva i && j 0
expresii la care le !i && j 1
evaluăm valorile: i || j 1
i ||!j 0
Presupunem că avem !(i && j) 1
variabilele întregi: !i || !j 1
• i=0
!i && j || !j && i 1
• j0
• k0 i <= j || j <= k O sau 1
3. Elemente introductive ale limbajului
C++
3.4. Operatorii limbajului C++
3.4.1. Operatori aritmetici
3.4.2. Operatori relaţionali
3.4.3. Operatori de egalitate
3.4.4. Operatori logici
3.4.5. Operatori logici pe biţi
3.4.6. Operatorul de atribuire
3.4.7. Operatori de incrementare şi de decrementare
3.4.8. Operatorul de conversie explicită (cast)
3.4.9. Operatorul de lungime (sizeof)
3.4.10. Operatorii condiţionali
3.4.11. Operatorul virgulă
3.4.5. Operatori logici pe biţi
Operatorii logici pe biţi se pot folosi în limbajul C++, pentru a
mări performanţele unui program sau pentru a-i reduce consumul
de memorie utilizată.
Acest tip de operatori se aplică unuia sau mai multor biţi
dintr-o expresie.
OPERATOR FUNCŢIE
~ negație logică pe biţi
& şi pe biţi
| sau pe biţi
^ sau exclusiv pe biţi
<< deplasare la stânga pe biţi
>> deplasare la dreapta pe biţi
3.4.5. Operatori logici pe biţi

Operatorul unar “~” returnează operandul


asupra căruia este folosit cu toţi biţii negaţi
Exemplu : ~0 are valoarea 1

010 = 000000002

prin negare bit cu bit se transformă în

~010 = 111111112 (numărul este 25510)


3.4.5. Operatori logici pe biţi
Operatorul binar “&” se utilizează pentru a
transforma în 0 anumiţi biţi, sau pentru a testa o
anumită configuraţie de biţi.
expresie valoare
1&2 0
1&3 1
Exemplu:
110 = 000000012 110 = 000000012
210 = 000000102 310 = 000000112
-------------------- --------------------
010 = 000000002 110 = 000000012
3.4.5. Operatori logici pe biţi

Operatorul binar “|” se utilizează pentru a


transforma în 1 anumiţi biţi.
expresie valoare
1|2 3
1|3 3
Exemplu:
110 = 000000012 110 = 000000012
210 = 000000102 310 = 000000112
-------------------- --------------------
310 = 000000112 310 = 000000112
3.4.5. Operatori logici pe biţi

Operatorul binar “^” are următoarea tabelă de


valori:
expresie valoare ^ 0 1
Exemplu: 1^2 3 0 0 1
1^3 2
1 1 0
110 = 000000012 110 = 000000012
210 = 000000102 310 = 000000112
-------------------- ---------------------
310 = 000000112 210 = 000000102
3.4.5. Operatori logici pe biţi

Operatorul “<<” se foloseşte pentru a deplasa spre stânga biţii


unui număr întreg cu n biţi specificaţi după operator; biţii rămaşi în
dreapta se completează cu 0.
Exemplu: 2 << 2
210 = 000000102
---------------------
810 = 000010002

Deci, în general, a << n înseamnă, ca valoare, a*2 la puterea n.


Operatorul “>>” realizează deplasarea spre dreapta a biţilor unui
număr întreg cu n poziţii.
Deci, în general, a >> n înseamnă, ca valoare, a/(2^n), fiind de fapt
împărţirea cu 2 la puterea n a numărului
3. Elemente introductive ale limbajului
C++
3.4. Operatorii limbajului C++
3.4.1. Operatori aritmetici
3.4.2. Operatori relaţionali
3.4.3. Operatori de egalitate
3.4.4. Operatori logici
3.4.5. Operatori logici pe biţi
3.4.6. Operatorul de atribuire
3.4.7. Operatori de incrementare şi de decrementare
3.4.8. Operatorul de conversie explicită (cast)
3.4.9. Operatorul de lungime (sizeof)
3.4.10. Operatorii condiţionali
3.4.11. Operatorul virgulă
3.4.6. Operatorul de atribuire
Are cea mai mică prioritate după operatorul virgulă şi
apare sub forma:
var = expresie

Dacă avem var = var operator expresie, atunci în C/C++, se


poate scrie prescurtat:
var operator = expresie

unde operator poate să fie un operator aritmetic sau un operator


logic pe biţi.
Exemplu: int i, j;
i = i + 2; se poate scrie i + = 2;
j = j | 1; se poate scrie j | = 1;
3. Elemente introductive ale limbajului
C++
3.4. Operatorii limbajului C++
3.4.1. Operatori aritmetici
3.4.2. Operatori relaţionali
3.4.3. Operatori de egalitate
3.4.4. Operatori logici
3.4.5. Operatori logici pe biţi
3.4.6. Operatorul de atribuire
3.4.7. Operatori de incrementare şi de decrementare
3.4.8. Operatorul de conversie explicită (cast)
3.4.9. Operatorul de lungime (sizeof)
3.4.10. Operatorii condiţionali
3.4.11. Operatorul virgulă
3.4.7. Operatori de incrementare (++) şi de
decrementare (--)

OPERATOR FUNCŢIE
++i incrementare prefixată
--i decrementare prefixată
i++ incrementare postfixată
i-- decrementare postfixată
3.4.7. Operatori de incrementare (++) şi de
decrementare (--)

De fapt:
++i  i = i + 1 - incrementarea se face înainte de
evaluarea expresiei în care apare ++
i++  i = i + 1 - incrementarea se face după evaluarea
expresiei în care apare ++
--i  i = i - 1 - decrementarea se face înainte de
evaluarea expresiei în care apare --
i--  i = i - 1 - decrementarea se face după evaluarea
expresiei în care apare --

Observaţie: Aceşti operatori nu se aplică unor expresii.


3.4.7. Operatori de incrementare (++) şi de
decrementare (--)
Pentru a înţelegere mai eficient diferenţa între cele două forme,
prezentăm mai jos o secvenţă de program care utilizează ambii operatori:
int valoare = 1;
cout<<"Utilizarea formei postfixate "<<valoare++<<endl;
cout<<"Valoarea dupa incrementare ”<<valoare<<endl;
valoare=1;
cout<<"Utilizarea formei prefixate "<<++valoare<<endl;
cout<<"Valoarea dupa incrementare "<<valoare<<endl;
Rezultatele execuţiei sunt următoarele:
Utilizarea formei postfixate 1
Valoarea dupa incrementare 2
Utilizarea formei prefixate 2
Valoarea dupa incrementare 2
3. Elemente introductive ale limbajului
C++
3.4. Operatorii limbajului C++
3.4.1. Operatori aritmetici
3.4.2. Operatori relaţionali
3.4.3. Operatori de egalitate
3.4.4. Operatori logici
3.4.5. Operatori logici pe biţi
3.4.6. Operatorul de atribuire
3.4.7. Operatori de incrementare şi de decrementare
3.4.8. Operatorul de conversie explicită (cast)
3.4.9. Operatorul de lungime (sizeof)
3.4.10. Operatorii condiţionali
3.4.11. Operatorul virgulă
3.4.8. Operatorul de conversie explicită
(cast)

Se foloseşte pentru forţarea tipului unui operand.

Are forma: (tip) operand


unde operand poate fi şi o expresie, iar tip este un operator
unar.
Exemplu:
int i=5, j=2;
float a;
a = i / j; înseamnă că a primeşte valoarea întreagă 2
a = (float) (i / j); înseamnă că a primeşte ca valoare 2
a = (float) i / j; înseamnă că a primeşte ca valoare 2.5
3. Elemente introductive ale limbajului
C++

3.4. Operatorii limbajului C++


3.4.1. Operatori aritmetici
3.4.2. Operatori relaţionali
3.4.3. Operatori de egalitate
3.4.4. Operatori logici
3.4.5. Operatori logici pe biţi
3.4.6. Operatorul de atribuire
3.4.7. Operatori de incrementare şi de decrementare
3.4.8. Operatorul de conversie explicită (cast)
3.4.9. Operatorul de lungime (sizeof)
3.4.10. Operatorii condiţionali
3.4.11. Operatorul virgulă
3.4.9. Operatorul de lungime (sizeof)

Este un operator cu o prioritate mare,


folosit în determinarea lungimii în octeţi a unui
operand care poate fi o expresie sau un tip de
date.
sizeof (expresie) sizeof (tip)
3.4.9. Operatorul de lungime (sizeof)
Pentru a putea înţelege eficienţa folosirii acestui operator, prezentăm un
scurt program:
cout<<"Variabila de tip int foloseste "<<sizeof(int)<<" octeti\n";
cout<<"Variabila de tip float foloseste "<<sizeof(float)<<" octeti\n";
cout<<"Variabila de tip double foloseste "<< sizeof(double)<<
" octeti\n";
cout<<"Variabila de tip unsigned foloseste "<<sizeof(unsigned)<<"
octeti\n”;
cout<<"Variabila de tip long foloseste "<<sizeof(long)<<" octeti\n";

În funcţie de compilatorul C/C++ folosit (exemplu MinGW) se obţin


următoarele rezultate:
Variabila de tip int foloseşte 2 octeţi
Variabila de tip float foloseşte 4 octeţi
Variabila de tip double foloseşte 8 octeţi
Variabila de tip unsigned foloseşte 2 octeţi
Variabila de tip long foloseşte 4 octeţi
3. Elemente introductive ale limbajului
C++
3.4. Operatorii limbajului C++
3.4.1. Operatori aritmetici
3.4.2. Operatori relaţionali
3.4.3. Operatori de egalitate
3.4.4. Operatori logici
3.4.5. Operatori logici pe biţi
3.4.6. Operatorul de atribuire
3.4.7. Operatori de incrementare şi de decrementare
3.4.8. Operatorul de conversie explicită (cast)
3.4.9. Operatorul de lungime (sizeof)
3.4.10. Operatorii condiţionali
3.4.11. Operatorul virgulă
3.4.10. Operatorii condiţionali “?” “:”
Se folosesc numai împreună şi funcţionează ca o
instrucţiune if.
Forma este următoarea: expresie1 ? expresie2 : expresie3
sau
var = expresie1 ? expresie2 : expresie3
unde expresie1 este o expresie logică care poate fi adevarată sau
falsă; când este adevarată rezultatul este expresie2, iar când este
falsă rezultatul este expresie3.
Exemplu:
modul = x < 0 ? –x : x;
max = a < b ? b : a;
min = a < b ? a : b;
3. Elemente introductive ale limbajului
C++
3.4. Operatorii limbajului C++
3.4.1. Operatori aritmetici
3.4.2. Operatori relaţionali
3.4.3. Operatori de egalitate
3.4.4. Operatori logici
3.4.5. Operatori logici pe biţi
3.4.6. Operatorul de atribuire
3.4.7. Operatori de incrementare şi de decrementare
3.4.8. Operatorul de conversie explicită (cast)
3.4.9. Operatorul de lungime (sizeof)
3.4.10. Operatorii condiţionali
3.4.11. Operatorul virgulă
3.4.11. Operatorul virgulă “,”

Are prioritatea cea mai scazută din toţi


operatorii.
Are următoarea formă:
expresie1, expresie2, expresie3, . . . , expresien
sau
expresie = expresie1, expresie2, expresie3, . . . , expresien
Această expresie se evaluează de la stânga la
dreapta, evaluându-se pe rând fiecare expresie până
se ajunge la ultima
Tabela de priorităţi a operatorilor
În limbajul C/C++, pentru a evalua expresiile în care apar
operatori, s-au stabilit anumite reguli de prioritate (precedenţă) a
operatorilor.
NIVEL DE
OPERATOR ASOCIATIVITATE
PRIORITATE
1 () [] . -> stânga -> dreapta
2 - (unar) + (unar) & (unar) ! ~ *(unar) (cast) (sizeof) ++ -- dreapta -> stânga
3 * (binar) / % stânga -> dreapta
4 + (binar) - (binar) stânga -> dreapta
5 << >> stânga -> dreapta
6 < <= > >= dreapta -> stânga
7 == != stânga -> dreapta
8 & stânga -> dreapta
9 ^ stânga -> dreapta
10 | stânga -> dreapta
11 && stânga -> dreapta
12 || stânga -> dreapta
13 ?: stânga -> dreapta
14 = dreapta -> stânga
15
20.10.2013 , stânga -> dreapta
29
Probleme propuse spre rezolvare
Algoritmi cu structura repetitivă cu număr
cunoscut de pași
Problema 1
Să se scrie un program care să afișeze toate
numerele perechile de numere prime gemene mai mici
decât un număr natural n dat.
Spunem că două numere a și b sunt prime gemene
dacă îndeplinesc următoarele condiții:
1. sunt prime
2. |a - b|=2
Exemplu:
Pt. n=20 se obțin valorile:
(3,5); (5,7); (11,13); (17,19)
Algoritmi cu structura repetitivă cu număr
cunoscut de pași
Pas 1: Stabilim care sunt datele de intrare, adică
cele care vor fi prelucrate cu ajutorul
algoritmului, împreună cu datele de ieşire.

În cazul problemei date, avem:

Date de intrare: n număr întreg

Date de ieșire: numere prime gemene


Algoritmi cu structura repetitivă cu număr
cunoscut de pași
Pas 2: Analiza problemei
Stabilim condiţiile pe care trebuie să le
îndeplinească datele de intrare pentru a fi prelucrate în
cadrul algoritmului.

Verificăm valorile a între 3 și n-2. Pentru aceste


valori verificăm:
a) Numărul a este sau nu număr prim
b) Numărul b=a+2 este sau nu număr prim
Dacă ambele numere sunt prime, atunci am găsit o
pereche de numere prime gemene.
Algoritmi cu structura repetitivă cu număr
cunoscut de pași
întreg n, a, b, prim1, prim2, i, j
Pas 3: citeşte n
Scrierea pentru a=3,n-2 execută
algoritmului în prim1 <- 1
pseudocod: pentru i=2, a/2 execută
dacă a % i = 0 atunci
prim1 <- 0
sfârșit dacă
sfârșit pentru
Algoritmi cu structura repetitivă cu număr
cunoscut de pași
b <- a+2
prim2 <- 1
Pas 3: pentru j=2, b/2 execută
Scrierea dacă b % j = 0 atunci
algoritmului în prim2 <- 0
pseudocod: sfârșit dacă
sfârșit pentru
dacă prim1 = 1 și prim2=1 atunci
scrie a, b
sfârșit dacă
sfârșit pentru
stop
Algoritmi cu structura repetitivă cu număr
cunoscut de pași
Problema 2
Sa se scrie un program care sa determine
toate numerele prime palindrom dintr-un
interval [a, b] dat, cu a si b valori naturale.
Exemplu:

Pt. a=10 si b=400 se obțin valorile:


(11, 101, 131, 151, 181, 191, 313, 353, 373)
Algoritmi cu structura repetitivă cu număr
cunoscut de pași
Problema 3
Se citesc numere naturale strict pozitive până
la întâlnirea numărului 0.
Să se numere câte dintre ele sunt pare,
presupunând că cel puţin primul element este
nenul.
Exemplu:
Date de intrare: 4 3 6 5 7 7 0
Date de ieşire: 2 numere pare
Algoritmi cu structura repetitivă cu număr
cunoscut de pași
Problema 4
Se citesc de la tastatură numere intregi
pozitive până la întâlnirea numărului 0.
Să se scrie un program care să afişeze cea mai mică
şi cea mai mare valoare a acestor numere.
Exemplu:
Date de intrare: 550 345 100 45 0
Date de ieşire: max=550 min=100
Algoritmi cu structura repetitivă cu număr
cunoscut de pași
Problema 5
Se introduce un număr natural cu maxim 9
cifre. Să se determine şi să se afişeze numărul de
cifre, cea mai mare cifră şi suma tuturor cifrelor
acestui număr.
Date de intrare: 24356103
Exemplu:
Date de ieşire:
8 cifre
max = 6
suma = 24
5. Instrucţiunile limbajului C++

5.1. Instrucţiunea vidă


5.2. Instrucţiunea compusă
5.3. Instrucţiunea expresie
5.4. Instrucţiunea if
5.5. Instrucţiunea while
5.6. Instrucţiunea do while
5.7. Instrucţiunea for
5.8. Instrucţiunea switch
5.9. Instrucţiunea break
5.10. Instrucţiunea continue
5.11. Instrucţiunea goto
5.12. Instrucţiunea return
5.1. Instrucţiunea vidă

Limbajul C++ are câteva instrucţiuni cu


ajutorul cărora se pot construi programe.
Acestea sunt:
Instrucţiunea vidă: ;

Instrucţiunea compusă: {.... }


este delimitată de { şi se termină cu }.
5. Instrucţiunile limbajului C++

5.1. Instrucţiunea vidă


5.2. Instrucţiunea compusă
5.3. Instrucţiunea expresie
5.4. Instrucţiunea if
5.5. Instrucţiunea while
5.6. Instrucţiunea do while
5.7. Instrucţiunea for
5.8. Instrucţiunea switch
5.9. Instrucţiunea break
5.10. Instrucţiunea continue
5.11. Instrucţiunea goto
5.12. Instrucţiunea return
5.2. Instrucţiunea compusă
Uneori programele trebuie să efectueze una sau
mai multe instrucţiuni atunci când o condiţie este
îndeplinită (de exemplu într-o instrucţiune if) şi alte
instrucţiuni când condiţia nu este îndeplinită.
Sau atunci când o condiție se evaluează într-o
structură (instrucțiune) repetitivă – de tip while, do
while sau for, iar prelucrările din acea structură pot
să fie compuse din una sau mai multe instrucțiuni.
5.2. Instrucţiunea compusă
Limbajul C++ consideră instrucţiunile ca fiind
instrucţiuni simple şi instrucţiuni compuse:

O instrucţiune simplă este de fapt o singură


instrucţiune, cum ar fi aceea de atribuire sau de apel
al unei funcţii standard (de exemplu funcţia cout).
O instrucţiune compusă este alcătuită din două
sau mai multe instrucţiuni incluse între acolade.
5. Instrucţiunile limbajului C++

5.2. Instrucţiunea vidă


5.2. Instrucţiunea compusă
5.3. Instrucţiunea expresie
5.4. Instrucţiunea if
5.5. Instrucţiunea while
5.6. Instrucţiunea do while
5.7. Instrucţiunea for
5.8. Instrucţiunea switch
5.9. Instrucţiunea break
5.10. Instrucţiunea continue
5.11. Instrucţiunea goto
5.12. Instrucţiunea return
5.3. Instrucţiunea expresie

Instrucţiunea expresie:

Are 3 forme: expresie;

a) instrucţiunea de atribuire
b) instrucţiunea de apel de funcţie
c) instrucţiunea de incrementare / decrementare
5.3. Instrucţiunea expresie

a) instrucţiunea de atribuire
variabila = expresie;
sau
variabila operator = expresie;
Exemplu:
int x, y, z;
z = x + 5 * y;
x + = 10; (semnificație: x = x + 10;)
5.3. Instrucţiunea expresie
b) instrucţiunea de apel de funcţie

nume_functie(pa1, pa2, . . . ,pan);

unde pa1, pa2, . . ., pan sunt parametrii actuali ai


funcţiei (adică valorile cu care se va lucra în
funcţia respectivă la apelul funcţiei).
Exemplu:
maxim (int a, int b); // apelul functiei maxim care are doi
parametri actuali de tip întreg
copyright@www.adrian.runceanu.ro

5.3. Instrucţiunea expresie

c) instrucţiunea de incrementare/decrementare

Exemplu:
int i, j, k; variabila ++;
i++; ++ variabila;
--j; variabila --;
k++ + --i; -- variabila;
5. Instrucţiunile limbajului C++

5.1. Instrucţiunea vidă


5.2. Instrucţiunea compusă
5.3. Instrucţiunea expresie
5.4. Instrucţiunea if
5.5. Instrucţiunea while
5.6. Instrucţiunea do while
5.7. Instrucţiunea for
5.8. Instrucţiunea switch
5.9. Instrucţiunea break
5.10. Instrucţiunea continue
5.11. Instrucţiunea goto
5.12. Instrucţiunea return
5.4. Instrucţiunea if
Instrucţiunea if
(instrucţiune de decizie sau condiţională)

if (expresie) instructiune;
Are două forme:
if (expresie)
instructiune1;
else
instructiune2;
5.4. Instrucţiunea if
Instrucţiunea if

Observaţie:
În limbajul C++, spre deosebire de limbajul
PASCAL, nu există cuvântul cheie THEN.
Exemple de programe C++
Enunţ:
Să se calculeze perimetrul şi aria unui triunghi
oarecare dacă se cunosc laturile triunghiului.
Pas 1: Stabilim care sunt datele de intrare, adică cele
care vor fi prelucrate cu ajutorul algoritmului,
împreună cu datele de ieşire.
În cazul problemei date, avem:
Date de intrare: a, b, şi c numere reale ce reprezintă
laturile triunghiului.
Date de ieşire: p şi S numere reale ce reprezintă
perimetrul si aria triunghiului dat.
Exemple de programe C++
Pas 2: Analiza problemei
Stabilim condiţiile pe care trebuie să le
îndeplinească datele de intrare pentru a fi
prelucrate în cadrul algoritmului.
În cadrul problemei pe care o avem de rezolvat,
cunoaştem formula lui Heron pentru calculul ariei
unui triunghi dacă se cunosc laturile sale:
S p( p  a)( p  b)( p  c)
unde p reprezintă semiperimetrul triunghiului.
Exemple de programe C++

Pas 3: Scrierea algoritmului în pseudocod:


real a, b, c, p, S
citeşte a, b, c
p <- a + b + c
scrie ‘Perimetrul triunghiului este ‘, p
p <- p / 2
S  p (p a)  (p b)  (p c)
scrie ‘Aria triunghiului este ’, S
stop
Exemple de programe C++
#include<iostream.h>
#include<math.h>
Pas 4: int main(void)
Implementarea {
algoritmului în float a, b, c, p, S;
limbajul de cin>>a; cin>>b; cin>>c;
programare C++: p = a + b + c;
cout<<" Perimetrul este = "<<p;
p = p / 2;
S = sqrt(p*(p-a)*(p-b)*(p-c));
cout<<"Aria este = "<<S;
}
Exemple de programe C++
Pas 5: Testarea algoritmului pe date de intrare diferite şi
verificarea rezultatelor.
Exemplul 1:
Pentru valorile a=2, b=3, c=4, obţinem următoarele
rezultate:
Perimetrul este = 9
Aria este = 1.369306
Exemplul 2:
Pentru valorile a=12, b=4, c=10, obţinem
următoarele rezultate:
Perimetrul este = 26
Aria este = 5 196152
Exemple de programe C++
Enunţ:
Să se calculeze valoarea funcţiei f(x), ştiind că x
este un număr real introdus de la tastatură:
 6 x  20, daca x  (,7]

f ( x)   x  30, daca x  (7,0]
 x  2, daca x  0

Pas 1:
Date de intrare: x număr real
Date de iesire: f număr real, reprezentând valoarea
funcţiei date.
Exemple de programe C++
Pas 2: Analiza problemei
Stabilim condiţiile pe care trebuie să le
îndeplinească datele de intrare pentru a fi
prelucrate în cadrul algoritmului.
Căutăm cazurile particulare.
În cadrul problemei pe care o avem de rezolvat,
verificăm condiţiile date în expresia funcţiei:
1) Dacă x <= -7, atunci funcţia are valoarea: -6x+20
2) Daca x > -7 si x <= 0, atunci funcţia are valoarea:
x+30
3) Daca x > 0, atunci funcţia are valoarea: sqrt(x)+2
Exemple de programe C++
real x, f
citeşte x
dacă x <= -7 atunci
f <- -6 * x + 20
Pas 3: altfel
dacă x > -7 şi x <= 0 atunci
Scrierea f <- x + 30
algoritmului în altfel
pseudocod: f <- sqrt(x) + 2
sfârşit dacă
sfarşit dacă
scrie f
stop
Exemple de programe C++
#include<iostream.h>
#include<math.h>
Pas 4: int main(void)
Implementarea {
float x, f;
algoritmului în cin>>x;
limbajul de if( x <= -7 ) f = -6 * x + 20;
programare C++: else
if( x > -7 && x <= 0 )
f = x + 30;
else
f = sqrt(x) + 2;
cout<<"f = "<<f;
}
Exemple de programe C++
Pas 5: Testarea algoritmului pe date de intrare
diferite şi verificarea rezultatelor.
Exemplul 1:
Pentru valoarea x=2 obţinem următorul rezultat:
f= 3.414214
Exemplul 2:
Pentru valoarea x=-24 obţinem următorul
rezultat:
f= 164
Exemple de programe C++
Enunţ:
Se dau trei numere întregi a,b,c. Să se
afişeze în ordine crescătoare.
Exemplu: Dacă a = 12, b = 2, c = 9, atunci
obţinem a = 2, b = 9, c = 12
Pas 1:
Date de intrare: a, b, c numere întregi
Date de iesire: a, b, c în ordine crescătoare
Exemple de programe C++
Pas 2: Analiza problemei
1) Comparăm primele două numere a şi b, dacă a este
mai mare decât b atunci vom interschimba cele
două valori.
2) Comparăm următoarele două numere b şi c, dacă b
este mai mare decât c atunci vom interschimba cele
două valori.
3) Comparăm din nou cele două numere a şi b, dacă a
este mai mare decât b atunci vom interschimba cele
două valori.
Exemple de programe C++
întreg a, b, c, aux
citeşte a, b, c
dacă a > b atunci
aux <- a
Pas 3: a <- b
b <- aux
Scrierea sfârşit dacă
dacă b > c atunci
algoritmului în aux <- b
pseudocod: b <- c
c <- aux
sfârşit dacă
dacă a > b atunci
aux <- a
a <- b
b <- aux
sfârşit dacă
scrie a, b, c
stop
Exemple de programe C++
#include<iostream.h>
int main(void)
{
int a, b, c, aux;
cin>>a; cin>>b; cin>>c;
if( a > b ) {
Pas 4: Implementarea aux=a;
algoritmului în a=b;
b=aux;
limbajul de }
if( b > c ){
programare C++: aux=b;
b=c;
c=aux;
}
if( a > b ){
aux=a;
a=b;
b=aux;
}
cout<<a<<" "<<b<<" "<<c;
}
Exemple de programe C++

Pas 5: Testarea algoritmului pe date de intrare


diferite şi verificarea rezultatelor.
Exemplul 1:
Pentru valorile a=11, b=7, c=10 obţinem
următorul rezultat:
7 10 11
Exemplul 2:
Pentru valorile a=2, b=17, c=5 obţinem
următorul rezultat:
2 5 17
5. Instrucţiunile limbajului C++

5.1. Instrucţiunea vidă


5.2. Instrucţiunea compusă
5.3. Instrucţiunea expresie
5.4. Instrucţiunea if
5.5. Instrucţiunea while
5.6. Instrucţiunea do while
5.7. Instrucţiunea for
5.8. Instrucţiunea switch
5.9. Instrucţiunea break
5.10. Instrucţiunea continue
5.11. Instrucţiunea goto
5.12. Instrucţiunea return
5.5. Instrucţiunea while
Instrucţiunea while
(instrucţiune repetitivă cu test iniţial)
while (expresie)
Are următoarea formă:
instructiune;

unde instrucţiune poate fi:


 instrucţiunea vidă
 instrucţiunea simplă
 sau instrucţiunea compusă
5.5. Instrucţiunea while
Instrucţiunea while
(instrucţiune repetitivă cu test
iniţial)

Funcţionarea unei astfel


de instrucţiuni se bazează pe
evaluarea expresiei date şi
executarea repetată a
instrucţiunii cât timp expresia
este îndeplinită.
5.5. Instrucţiunea while
#include<iostream.h>
int main(void)
{
Exemplu: int i, n, s=0;
Prezentăm în cout<<"Dati numarul n = ";
continuare un cin>>n;
program în limbajul i = 1;
C/C++, care while( i <= n )
calculează suma {
s = s + i;
primelor n numere
i++;
întregi, cu n<=10: }
cout<<"Suma primelor
"<<n<<" numere intregi este
"<<s<<endl;
}
5.5. Instrucţiunea while

La execuţia acestui program se poate obţine


următorul rezultat:

Dati numarul n = 5
Suma primelor 5 numere intregi este 15
5.5. Instrucţiunea while
#include<iostream.h>
Folosind int main(void)
facilităţile limbajului
{
C/C++, se poate
scrie aceeaşi int i=1, n, s=0;
secvenţă de cout<<"Dati numarul n = ";
program într-o cin>>n;
formă prescurtată şi while(i<=n) s+=i++;
chiar mai eficientă: cout<<"Suma primelor
"<<n<<" numere intregi este
"<<s<<endl;
}
5.5. Instrucţiunea while

Observaţie:
Pentru ca un ciclu repetitiv să se execute
încontinuu (la infinit), se poate utiliza o buclă
infinită prin introducerea ca expresie a unei
valori diferite de 0.
while (1) este o buclă infinită care se va
executa până când de la tastatură se va
întrerupe execuţia prin apăsarea tastelor
CTRL+C.
Exemple de programe C++
Enunţ:
Să se citească un număr natural n. Să se scrie un
algoritm care afişează toţi divizorii numărului dat.
Exemplu: Pentru n = 12, mulţimea divizorilor este formată
din valorile 1, 2, 3, 4, 6, 12.

Pas 1: Stabilim care sunt datele de intrare, împreună cu


datele de ieşire.
În cazul problemei date, avem:
Date de intrare: n număr natural
Date de ieşire: divizorii numărului n
Exemple de programe C++
Pas 2: Analiza problemei
În cadrul problemei pe care o avem de rezolvat,
verificăm condiţia ca un număr să fie divizor al altui
număr şi anume:
i este divizor al numărului n dacă se împarte
exact la el, adică dacă este adevărată expresia n % i =
0.
Pentru a găsi toţi divizorii numărului n dat, vom
da valori lui i, pornind de la valoarea 1 până la
valoarea n.
Deci vom utiliza o structură repetitivă.
Exemple de programe C++
natural n, i
citeşte n
i <- 1
Pas 3: cât timp i <= n execută
dacă n % i = 0 atunci
Scrierea scrie i
algoritmului în sfârşit dacă
pseudocod: i <- i + 1
sfârşit cât timp
stop
Exemple de programe C++
#include<iostream.h>
int main(void)
{
int n, i;
Pas 4:
cin>>n;
Implementarea
i = 1;
algoritmului în
limbajul de while( i <= n )
programare C++: {
if( n % i == 0 )
cout<<i<<" ";
i = i + 1;
}
}
Exemple de programe C++

Pas 5: Testarea algoritmului pe date de intrare diferite


şi verificarea rezultatelor.
Exemplul 1:
Pentru valoarea n=12 obţinem următorul rezultat:
1 2 3 4 6 12
Exemplul 2:
Pentru valoarea n=18 obţinem următorul rezultat:
1 2 3 6 9 18
Exemple de programe C++
Enunţ:
Să se citească un număr natural n. Să se scrie un algoritm care
verifică dacă numărul dat este sau nu număr prim. Un număr n
este prim dacă are ca divizori doar valorile 1 şi n.
Exemplu:
Pentru n = 7, se va afişa mesajul ‘numărul este prim’,
iar pentru n = 22, se va afişa mesajul ‘numărul NU este prim’.

Pas 1: Stabilim care sunt datele de intrare, adică cele care vor fi
prelucrate cu ajutorul algoritmului, împreună cu datele de ieşire.
În cazul problemei date, avem:
Date de intrare: n număr natural
Date de ieşire: număr prim sau nu
Exemple de programe C++
Pas 2: Analiza problemei
Vom presupune, la începutul problemei, că numărul
n dat este prim, şi vom specifica acest lucru cu ajutorul
unei variabile de tip logic, căreia îi vom da valoarea
‘adevărat’.
Apoi vom evalua, pe rând, toate valorile începând cu
valoarea 2 şi până la n-1, ca să determinăm dacă sunt
divizori ai numărului n dat.
Dacă găsim un singur divizor printre aceste numere,
atunci vom acorda valoarea ‘fals’ variabilei de tip logic.
La sfârşit vom verifica care este valoarea variabilei
de tip logic şi vom afişa un mesaj corespunzător.
Exemple de programe C++
natural n, i
logic p
citeşte n
p <- adevărat
Pas 3: i <- 2
cât timp i <= n-1 execută
Scrierea dacă n % i = 0 atunci
algoritmului în p <- fals
sfârşit dacă
pseudocod: i <- i + 1
sfârşit cât timp
dacă p = adevărat atunci
scrie ‘Numarul este prim’
altfel
scrie ‘Numarul NU este prim’
sfârşit dacă
stop
Exemple de programe C++
#include<iostream.h>
int main(void)
{
int n, i, p;
cin>>n;
Pas 4: p = 1;
Implementarea i = 2;
while( i <= n-1 )
algoritmului în
{
limbajul de if( n % i == 0 ) p = 0;
programare C++: i = i + 1;
}
if( p == 1 ) cout<<"Numarul este PRIM";
else cout<<"Numarul NU este PRIM";
}
Exemple de programe C++

Pas 5: Testarea algoritmului pe date de intrare diferite


şi verificarea rezultatelor.
Exemplul 1:
Pentru valoarea n=12 obţinem următorul rezultat:
Numarul NU este PRIM
Exemplul 2:
Pentru valoarea n=7 obţinem următorul rezultat:
Numarul este PRIM
Probleme propuse spre rezolvare:

1) Pentru n cunoscut, să se calculeze fn,


termenul de rangul n din şirul lui Fibonacci,
ştiind că:
f0 = 1; f1 = 1; fp = fp-1 + fp-2 pentru orice
valoare p >= 2.
Exemplu:

Date de intrare: 8
Date de ieşire: 21 (1,1,2,3,5,8,13,21)
Probleme propuse spre rezolvare:

2) Se dau trei numere. Determinaţi şi afişaţi


cmmdc al lor (cmmdc = cel mai mare divizor
comun).

Exemplu:

Date de intrare: 12 32 38
Date de ieşire: 2
Probleme propuse spre rezolvare:

3) Se dă numărul n, să se afişeze toate numerele


mai mici ca el, prime cu el.
Doua numere sunt prime intre ele daca cel mai
mare divizor comun al lor este 1.

Exemplu:
Date de intrare: 10
Date de ieşire: 1 3 7 9
Pentru alte informații teoretice și practice legate
de acest capitol se recomandă următoarele referințe
bibliografice:
1. Adrian Runceanu, Mihaela Runceanu, Noțiuni de
programare în limbajul C++, Editura Academica
Brâncuși, Târgu-Jiu, 2012 (www.utgjiu.ro/editura)
2. Adrian Runceanu, Programarea şi utilizarea
calculatoarelor, Editura Academica Brâncuși, Târgu-Jiu,
2003 (www.utgjiu.ro/editura)
3. Octavian Dogaru, C++ - teorie şi practică, volumul I,
Editura Mirton, Timişoara, 2004
(www.utgjiu.ro/editura)
5. Instrucţiunile limbajului C++

5.1. Instrucţiunea vidă


5.2. Instrucţiunea compusă
5.3. Instrucţiunea expresie
5.4. Instrucţiunea if
5.5. Instrucţiunea while
5.6. Instrucţiunea do while
5.7. Instrucţiunea for
5.8. Instrucţiunea switch
5.9. Instrucţiunea break
5.10. Instrucţiunea continue
5.11. Instrucţiunea goto
5.12. Instrucţiunea return
5.6. Instrucţiunea do while
Forma instructiunii este:

do
instructiune
while (expresie);

unde instrucţiune poate fi:


 instrucţiunea vidă
 instrucţiunea simplă
 instrucţiunea compusă
5.6. Instrucţiunea do while

Funcţionarea unei astfel de instrucţiuni se


bazează pe executarea repetată a instrucţiunii cât
timp condiţia este îndeplinită.
5.6. Instrucţiunea do while

Echivalenţa cu instrucţiunea while:


instructiune;
while(expresie)
instructiune;
Exemplu de utilizare a instructiunii do while:
Să se scrie un program care tipăreşte
numerele naturale de la 0 la 9 şi suma lor pe
parcurs.
5.6. Instrucţiunea do while
#include<iostream.h>
La execuţia acestui
program se obţine următorul int main(void)
rezultat: {
numar=0 total=0 int numar = 0, total = 0;
numar=1 total=1 do{
numar=2 total=3
numar=3 total=6 total = total + numar;
numar=4 total=10 cout<<"numar =
numar=5 total=15
numar=6 total=21 "<<numar++<<" total =
numar=7 total=28
numar=8 total=36
"<<total<<endl;
numar=9 total=45 }while(numar<10);
}
5. Instrucţiunile limbajului C++

5.1. Instrucţiunea vidă


5.2. Instrucţiunea compusă
5.3. Instrucţiunea expresie
5.4. Instrucţiunea if
5.5. Instrucţiunea while
5.6. Instrucţiunea do while
5.7. Instrucţiunea for
5.8. Instrucţiunea switch
5.9. Instrucţiunea break
5.10. Instrucţiunea continue
5.11. Instrucţiunea goto
5.12. Instrucţiunea return
5.7. Instrucţiunea for
Este una dintre cele mai “puternice” instrucţiuni ale
limbajului C/C++, datorită formei sale.
Forma instrucțiunii este:
for(expresie1; expresie2; expresie3)
instructiune;
expresie1 – reprezintă secvenţa de iniţializarea a ciclului
expresie2 – reprezintă condiţia de terminare a ciclului
expresie3 – reprezintă secvenţa de reiniţializare a ciclului
instrucţiune - corpul ciclului
5.7. Instrucţiunea for

for(expresie1; expresie2; expresie3)


instructiune;
Funcţionarea unei astfel de
instrucţiuni se bazează:
 pe executarea repetată a
instrucţiunii,
 Verificarea expresiei2
 Executarea expresiei3
Cat timp expresia2 este
îndeplinită.
5.7. Instrucţiunea for
Se stie că instrucţiunea for este de fapt o
variantă particulară a instrucţiunii while, drept
pentru care se poate scrie echivalent astfel:

expresie1;
while(expresie2)
{
instructiune;
expresie3;
}
5.7. Instrucţiunea for

Invers, dacă avem:

while (expresie)
instructiune;

for( ;expresie; )
instructiune;
5.7. Instrucţiunea for

Funcţionarea instrucţiunii for are loc astfel:


• Se porneşte ciclul repetitv prin iniţializarea sa,
adică prin execuţia expresia1
• iar apoi se evaluează expresia2 şi dacă este
adevărată se execută corpul ciclului, adică
instrucţiune
• după aceea se execută expresia3, şi se reia
evaluarea expresiei2, ş.a.m.d.
5.7. Instrucţiunea for

Observaţie:
expresia1, expresia2, expresia3 pot să lipsească,
dar este obligatorie prezenţa semnelor: “;”.

for(;;)  while(1) – buclă infinită


5.7. Instrucţiunea for
#include<iostream.h>
int main(void)
Exemplu: Acelaşi {
program de int i, n, s = 0;
adunare a primelor cout<<"Dati numarul n =";
n numere întregi, cin>>n;
în varianta cu for(i=1; i<=n; i++)
s = s + i;
instrucţiunea for, cout<<"Suma primelor"<<n<<"
va avea o numere intregi este "<<s;
dimensiune mai }
mică:
Exemple de programe C++
Enunţ:
Fie un număr natural n. Să se scrie un
algoritm care să calculeze factorialul numărului
dat.
(factorial = produsul numerelor naturale mai mici
sau egale decat n)
Exemplu:
Pentru n = 5, se va afişa valoarea
p = 1*2*3*4*5=120.
Exemple de programe C++
Pas 1: Stabilim care sunt datele de intrare, adică
cele care vor fi prelucrate cu ajutorul
algoritmului, împreună cu datele de ieşire.

În cazul problemei date, avem:

Date de intrare: n = număr natural

Date de ieşire: factorialul numărului dat = p


Exemple de programe C++

Pas 2: Analiza problemei

La începutul problemei, vom iniţializa


valoarea produsului numerelor cu 1.
Apoi, într-un ciclu repetitiv vom calcula
produsul numerelor naturale aflate intre 1 si n.
Exemple de programe C++

natural n, p, i
citeşte n
Pas 3: p <- 1
Scrierea pentru i=1,n execută
algoritmului în p <- p * i
sfârşit pentru
pseudocod:
scrie p
stop
Exemple de programe C++
#include<iostream.h>
int main(void)
{
int n, p, i;
Pas 4: Implementarea
cin>>n;
algoritmului în
limbajul de p = 1;
programare C++: for(i = 1; i<=n; i++)
p = p * i;
cout<<p;
}
Exemple de programe C++

Pas 5: Testarea algoritmului pe date de intrare


diferite şi verificarea rezultatelor.
Exemplul 1:
Pentru valoarea n=5 obţinem următorul rezultat:
120
Exemplul 2:
Pentru valoarea n=7 obţinem următorul rezultat:
5040
Exemple de programe C++
Enunţ:
Fie un număr natural n de cinci cifre. Să se
scrie un algoritm care să calculeze suma cifrelor
numărului dat.

Exemplu:

Pentru n = 2178, se va afişa valoarea s = 2+1+7+8 =


18
Exemple de programe C++
Pas 1: Stabilim care sunt datele de intrare, adică
cele care vor fi prelucrate cu ajutorul
algoritmului, împreună cu datele de ieşire.

În cazul problemei date, avem:

Date de intrare: n număr natural

Date de ieşire: suma cifrelor = s.


Exemple de programe C++

Pas 2: Analiza problemei


La începutul problemei, vom iniţializa
valoarea sumei cifrelor numărului n dat cu 0.
Apoi, într-un ciclu repetitiv vom calcula suma
cifrelor numărului, ştiind că:
o cifră a unui număr scris în baza 10 este dată de
restul împărțirii la 10 - n%10,
iar numărul fără ultima cifră este dat de câtul
împărțirii la 10 - n/10.
Exemple de programe C++
natural n, s
citeşte n
s <- 0
Pas 3: repetă
Scrierea s <- s + n % 10
algoritmului în n <- n / 10
pseudocod: până când n = 0
scrie s
stop
Exemple de programe C++
#include<iostream.h>
int main(void)
{
int n, s;
cin>>n;
Pas 4: Implementarea s = 0;
algoritmului în do
limbajul de {
programare C++: s = s + n % 10;
n = n / 10;
}while( n != 0 );
cout<<s;
}
Exemple de programe C++
Pas 5: Testarea algoritmului pe date de intrare
diferite şi verificarea rezultatelor.

Exemplul 1:
Pentru valoarea n=123 obţinem următorul rezultat:
6
Exemplul 2:
Pentru valoarea n=5378 obţinem următorul rezultat:
23
Exemple de programe C++
Enunţ:
Să se scrie un program care generează toate
numerele perfecte până la o valoare dată, n.
Un număr perfect este egal cu suma divizorilor
lui, inclusiv 1 (exemplu: 6=1+2+3).

Exemplu:
Pentru n = 1000, se vor afişa valorile 6, 28, 496
Exemple de programe C++

Pas 1: Stabilim care sunt datele de intrare, adică cele


care vor fi prelucrate cu ajutorul algoritmului,
împreună cu datele de ieşire.
În cazul problemei date, avem:

Date de intrare: n număr natural

Date de ieşire: numerele perfecte mai mici sau egale


decât n.
Exemple de programe C++

Pas 2: Analiza problemei


La începutul problemei, vom lua toate
valorile de la 1 la n, şi pentru fiecare valoare i o
vom verifica dacă este sau nu număr perfect.
Numerele perfecte obţinute le vom afişa.
Exemple de programe C++
natural n, i, j, s
citeşte n
i <- 1
repetă
s <- 0
Pas 3: j <- 1
repetă
Scrierea dacă i % j = 0 atunci
s <- s + j
algoritmului în sfârşit dacă
pseudocod: j <- j + 1
până când j > i/2
dacă s = i atunci
scrie i
sfârşit dacă
i <- i + 1
până când i > n
stop
Exemple de programe C++
#include<iostream.h>
int main(void)
{
int n, i, j, s;
cin>>n;
i = 1;
do{
s = 0;
Pas 4: Implementarea j = 1;
do{
algoritmului în if( i % j == 0 )
limbajul de s = s + j;
j = j + 1;
programare C++: }while(j <= i/2);
if( s == i )
cout<<i<<" ";
i = i + 1;
}while(i <= n);
}
Exemple de programe C++
Pas 5: Testarea algoritmului pe date de intrare
diferite şi verificarea rezultatelor.
Exemplul 1:
Pentru valoarea n=100 obţinem următoarele
rezultate:
6 28
Exemplul 2:
Pentru valoarea n=10000 obţinem următoarele
rezultate:
6 28 496 8128
Exemple de programe C++
Enunţ:
Să se scrie un program care generează toate
numerele prime până la o valoare dată, n.
Un număr x este prim dacă are ca divizori doar
valorile 1 şi x.
Exemplu:
Pentru n = 22, se vor afişa valorile:
2,3,5,7,11,13,17,19
Exemple de programe C++
Pas 1: Stabilim care sunt datele de intrare, adică cele
care vor fi prelucrate cu ajutorul algoritmului,
împreună cu datele de ieşire.

În cazul problemei date, avem:

Date de intrare: n număr natural

Date de ieşire: numerele prime mai mic decat n


Exemple de programe C++
Pas 2: Analiza problemei
Intr-un ciclu repetitiv de la 1 la n vom verifica toate valorile daca
respecta proprietatea de numar prim.
Vom presupune, la începutul problemei, că numărul i dat
este prim, şi vom specifica acest lucru cu ajutorul unei variabile de
tip întreg, căreia îi vom da valoarea 1.
• Apoi vom evalua, pe rând, toate valorile începând cu valoarea 2 şi
până la i/2, ca să determinăm dacă sunt divizori ai numărului i
dat.
• Dacă găsim un singur divizor printre aceste numere, atunci vom
acorda valoarea 0 variabilei de tip întreg de la începutul verificarii
conditiei de numar prim.
• La sfârşit vom verifica care este valoarea variabilei de tip întreg şi
vom afişa numarul i.
Exemple de programe C++
natural n,i,j
logic p
citeşte n
Pas 3: pentru i = 2, n execută
p <- adevărat
Scrierea pentru j = 2, i/2 execută
algoritmului în dacă i % j = 0 atunci
p <- fals
pseudocod: sfârşit dacă
sfârşit pentru
dacă p = adevărat atunci
scrie i,‘ ’
sfârşit dacă
sfârşit pentru
stop
Exemple de programe C++
#include<iostream.h>
int main(void)
{
int n, prim, i, j;
cin>>n;
for(i = 2; i<=n; i++)
Pas 4: Implementarea {
algoritmului în prim = 1;
limbajul de for(j = 2; j<=i/2; j++)
programare C++: if(i % j == 0 ) prim = 0;
if( prim == 1)
cout<<i<<“ ”;
}
}
Exemple de programe C++

Pas 5: Testarea algoritmului pe date de intrare


diferite şi verificarea rezultatelor.
Exemplul 1:
Pentru valoarea n=53 obţinem rezultatele:
2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53
Exemplul 2:
Pentru valoarea n=12 obţinem următorul
rezultat:
2 3 5 7 11
5. Instrucţiunile limbajului C++

5.1. Instrucţiunea vidă


5.2. Instrucţiunea compusă
5.3. Instrucţiunea expresie
5.4. Instrucţiunea if
5.5. Instrucţiunea while
5.6. Instrucţiunea do while
5.7. Instrucţiunea for
5.8. Instrucţiunea switch
5.9. Instrucţiunea break
5.10. Instrucţiunea continue
5.11. Instrucţiunea goto
5.12. Instrucţiunea return
5.8. Instrucţiunea switch
switch (expresie)
Instrucţiunea switch {
funcţionează astfel: case c1 :
Se evaluează expresia şi în sir_instructiuni_1;
funcţie de rezultat se compară break;
cu c1, c2, . . ., cn şi când expresia
case c2 :
este egală cu c1 atunci se
execută şirul de instrucţiuni
sir_instructiuni_2;
corespunzător, şi cu break;
instrucţiunea break se sare la ........
sfârşitul instrucţiunii switch, la case cn :
fel se întâmplă şi dacă expresia sir_instructiuni_ n;
este egală cu c2 ,sau cu c3 , sau break;
cu cn. default: sir_instructiuni;
} 41
5.8. Instrucţiunea switch
Instrucţiunea switch este o instrucţiune de tip
decizie multiplă astfel încât se poate scrie echivalent
folosind instrucţiunea de decizie simplă if:
if (expresie==c1)
sir_instructiuni_1;
else
if (expresie==c2)
sir_instructiuni_2;
........
else
if (expresie==cn)
sir_instructiuni_ n;
else sir_instructiuni;
5.8. Instrucţiunea switch
#include<iostream.h>
int main(void)
Prezentăm în {
continuare un program char litera;
care numără vocalele şi int nr_vocale = 0, nr_consoane = 0;
consoanele din alfabet. for (litera = ‘A’; litera <= ‘Z’; litera++)
switch (litera) {
De observat că
case ‘A’:
unele din instrucţiunile case ‘E’:
case se execută în case ‘I’:
cascadă, pentru calculul case ‘O’:
vocalelor, iar pentru case ‘U’: nr_vocale++;
consoane se foloseşte break;
default: nr_consoane++;
cazul default:
}
cout<<"\nNumarul de vocale este "<<nr_vocale;
cout<<"\nNumarul de consoane este "<< nr_consoane;
}
5. Instrucţiunile limbajului C++

5.1. Instrucţiunea vidă


5.2. Instrucţiunea compusă
5.3. Instrucţiunea expresie
5.4. Instrucţiunea if
5.5. Instrucţiunea while
5.6. Instrucţiunea do while
5.7. Instrucţiunea for
5.8. Instrucţiunea switch
5.9. Instrucţiunea break
5.10. Instrucţiunea continue
5.11. Instrucţiunea goto
5.12. Instrucţiunea return
5.9. Instrucţiunea break
break;
Instrucţiunea întrerupe execuţia instrucţiunilor
while, do while, for şi switch, determinând astfel ieşirea
forţată dintr-un ciclu repetitv.

Exemplu:
for(;;)
{
.....
break;
}
5.9. Instrucţiunea break
#include<iostream.h>
Exemplu: int main(void)
Prezentăm în {
continuare, un program int numar;
care folosind for(numar = 1; numar<=100; numar++)
instrucţiunea break, {
if(numar == 50) break;
numără numerele întregi
cout<<" "<<numar;
aflate între 1 şi 100 şi
}
apoi de la 100 la 1. cout<<"\nCel de-al doilea ciclu
De fiecare dată când repetitiv";
număr ajunge la valoarea for(numar = 100; numar>=1; numar--)
50, instrucţiunea break {
face ca execuţia ciclului if(numar == 50) break;
cout<<" "<<numar;
să se oprească:
}
}
5. Instrucţiunile limbajului C++

5.1. Instrucţiunea vidă


5.2. Instrucţiunea compusă
5.3. Instrucţiunea expresie
5.4. Instrucţiunea if
5.5. Instrucţiunea while
5.6. Instrucţiunea do while
5.7. Instrucţiunea for
5.8. Instrucţiunea switch
5.9. Instrucţiunea break
5.10. Instrucţiunea continue
5.11. Instrucţiunea goto
5.12. Instrucţiunea return
5.10. Instrucţiunea continue

Se referă la instrucţiunile de ciclare: for,


while şi do while.
La întâlnirea ei ciclurile while şi do while se
continuă cu reevaluarea condiţiei de ciclare iar în
ciclul for se continuă cu secvenţa de reiniţializare
a ciclului şi apoi cu reevaluarea ciclului.
5.10. Instrucţiunea continue
#include<iostream.h>
int main(void)
Exemplu: {
Prezentăm în int numar;
continuare, un cout<<"Numerele pare dintre 1 si 100 sunt: ";
for (numar = 1; numar <= 100; numar++)
program care {
folosind if(numar % 2 != 0) continue;
instrucţiunea cout<<" "<<numar;
}
continue într-un cout<<"\nNumerele impare dintre 1 si 100 sunt: ";
ciclu for şi într-un numar=0;
ciclu while, afişează while(numar <= 100)
numerele pare şi {
numar++;
impare aflate între if(numar % 2==0) continue;
1 şi 100: cout<<" "<<numar;
}
}
5. Instrucţiunile limbajului C++

5.1. Instrucţiunea vidă


5.2. Instrucţiunea compusă
5.3. Instrucţiunea expresie
5.4. Instrucţiunea if
5.5. Instrucţiunea while
5.6. Instrucţiunea do while
5.7. Instrucţiunea for
5.8. Instrucţiunea switch
5.9. Instrucţiunea break
5.10. Instrucţiunea continue
5.11. Instrucţiunea goto
5.12. Instrucţiunea return
5.11. Instrucţiunea goto
goto eticheta;
Este instrucţiunea pentru salt necondiţionat.
unde eticheta este un nume care prefixează o instrucţiune.
Exemplu: Prezentăm în continuare, un program care folosind
instrucţiunea goto, afişează numerele întregi aflate între 1 şi
100:
int main(void)
{
int numar=1;
eticheta: cout<<" ", numar++;
if (numar <= 100) goto eticheta;
}
5. Instrucţiunile limbajului C++

5.1. Instrucţiunea vidă


5.2. Instrucţiunea compusă
5.3. Instrucţiunea expresie
5.4. Instrucţiunea if
5.5. Instrucţiunea while
5.6. Instrucţiunea do while
5.7. Instrucţiunea for
5.8. Instrucţiunea switch
5.9. Instrucţiunea break
5.10. Instrucţiunea continue
5.11. Instrucţiunea goto
5.12. Instrucţiunea return
5.12. Instrucţiunea return
Instrucţiunea return 1. return;
2. return expresie;
3. return (expresie);

Se foloseşte în funcţii atunci când:


• se întoarce în funcţia apelantă o valoare (formele
2 şi 3)
• sau într-o funcţie care nu întoarce nici o valoare
(funcţioneaza ca o procedură) – forma 1.
Probleme propuse spre rezolvare:

1) Să se afişeze toate numerele palindroame mai


mari decat 10 şi mai mici decat un număr dat, n.

Exemplu:

Date de intrare: n=110


Date de ieşire:
11 22 33 44 55 66 77 88 99 101
Probleme propuse spre rezolvare:
2) Să se determine toate tripletele de numere a, b,
c cu proprietăţile: 1<a<b<c<100; a+b+c se divide
cu 10.

Exemplu:

Date de intrare: -
Date de ieşire: 95 96 99 si 95 97 99 sunt
ultimele doua triplete
Probleme propuse spre rezolvare:
3) Să se afişeze toate numerele de două cifre care
adunate cu răsturnatul lor dau 55.

Exemplu:

Date de intrare: -
Date de ieşire: 14 41; 23 32; 32 23; 41 14
Capitolul 6

6.1. Preprocesare
6.2. Structura unui program C++
6.3. Probleme propuse spre rezolvare
6.1. Preprocesare

Schematic, parcursul unui program sursa scris în


C++, până la executarea lui este următorul:

program sursa iniţial ( extensia .CPP )


preprocesare
program sursă ( extensia .CPP )
compilare
program obiect ( extensia .OBJ )
editarea de legături (linkeditare)
program executabil ( extensia .EXE )
6.1. Preprocesare
În C++, după construirea unui program sursă,
se pot evalua anumite valori dacă se utilizează
preprocesorul.
Activitatea preprocesorului se împarte în:

a) includere de fişiere standard / utilizator


b) definire constante simbolice
c) definire macro-uri(macroinstructiuni)
d) compilare condiţionată
6.1. Preprocesare

a) Includerea de fişiere standard/utilizator


se face pentru a putea:
utiliza funcţiile predefinite ale limbajului C++ şi
care se afla în fişiere standard numite header-e
(au extensia .h)
sau pentru a putea utiliza funcţii proprii aflate în
fişiere utilizator
6.1. Preprocesare

Astfel, pentru a putea utiliza funcţiile


standard de intrare / ieşire cin / cout, trebuie
scris la începutul unui program C++:
#include <iostream.h> - fişier standard
Iar pentru a utiliza fişiere utilizator:
#include “nume fisier” – fişier utilizator
Observaţie:
Includerea fişierelor se execută numai pe timpul
compilării
6.1. Preprocesare

b) Definire constante simbolice

Pentru a mări portabilitatea programelor


C++, se pot folosi constante.
O constantă este un nume pe care
compilatorul C++ îl asociază unei valori care nu
se modifică.
Pentru aceasta se utilizează directiva #define.
6.1. Preprocesare

#define nume_constanta text

• Asociază numelui nume_constanta textul


denumit text care se poate prelungi pe mai linii.

• Aceasta substituţie a numelui este valabilă în tot


fişierul până la întâlnirea unei directive de
compilare #undef nume.
6.1. Preprocesare
Exemplu:
#define NRLINII 30
#define NRCOLOANE 20
#define DIMENSIUNE NRLINII*NRCOLOANE
int t[NRLINII][NRCOLOANE];
double a[DIMENSIUNE];

Ce va întâlni compilatorul după preprocesor?


int t[30][20];
double a[30*20];
Observaţie: nu se vor face calculele pentru că este vorba
doar de informatie la nivel de text
6.1. Preprocesare
Dacă se vor utiliza macroinstrucţiuni sau constante
simbolice în programele C++, atunci acestea trebuie să
aibă nume sugestive şi scrise cu litere mari pentru a
putea ajuta programatorii care citesc codul sursă să
facă diferenţa uşor între constante şi variabile.

Exemplu: Putem defini următoarele constante:


#define TRUE 1
#define FALSE 0
#define PI 3.1415
#define PROGRAMATOR “Pop Ion”
6.1. Preprocesare
c) Definirea de macroinstrucţiuni
Un macrou (o macroinstrucţiune) este o
definiţie în care funcţionează reguli de
subtituţie de text.
#define nume(param_form1, param_form2, . . . ,param_formn) text

Apelul macroului se face astfel:


nume(param_actual1, param_actual2,…,param_actualn)
6.1. Preprocesare
Unde:
• nume reprezintă numele macroului

• param_form1, param_form2, . . . , param_formn


parametrii formali ai macroului

• iar text este textul în care se vor face înlocuirile

• iar param_actual1, param_actual2, . . .


,param_actualn sunt parametrii cu care se
apelează macroul în funcţia principală
6.1. Preprocesare
Funcţionarea macroului este următoarea:
1. în textul dat se înlocuiesc parametrii formali cu
parametrii actuali
2. iar apoi textul obţinut va substitui apelul
macroului.
Exemplu:
#define MAX(a, b) ( (a) < (b) ? (b) : (a) )
#define MIN(a, b) ( (a) > (b) ? (b) : (a) )
#define SGN(x) ((x) > 0 ? 1 : ( (x) == 0 ? 0 : (-1)))
6.1. Preprocesare

Am definit câteva macrouri care pot fi utile


în multe programe C++, şi anume:

• MAX şi MIN determină maximul, respectiv


minimul a două numere de orice tip

• iar SGN determină signatura unui număr dat


a, b parametri 6.1. Preprocesare
formali
#include<iostream.h>
Următorul #define MAX(a, b) ( (a) < (b) ? (b) : (a) )
program C++ #define MIN(a, b) ( (a) > (b) ? (b) : (a) )

va folosi
int main(void)
aceste două {
macro-uri: cout<<“Maximul valorilor 10.0 si 25.0
este “ <<MAX(10.0, 25.0)<<endl;
cout<<“Minimul valorilor 3.4 si 3.1
parametri actuali este ” <<MIN(3.4, 3.1)<<endl;
}
Capitolul 6

6.1. Preprocesare
6.2. Structura unui program C++
6.3. Probleme propuse spre rezolvare
6.2. Structura unui program C++
/*-- nume.cpp -- comentariu iniţial --*/
#include <iostream.h>
#include <math.h>
. . . . /*-- alte directive include --*/
[ declaraţii şi definiţii globale ]
int main(void) optional
{
[ declaraţii locale ]
< instrucţiuni >
}
6.5. Probleme rezolvate
1) Se introduce un număr natural cu maxim 9 cifre. Să se
determine şi să se afişeze numărul de cifre, cea mai mare
cifră, cea mai mică cifră şi suma tuturor cifrelor acestui
număr.
Date de intrare: 24356103
Exemplu:
Date de ieşire:
Numarul de cifre 8
Cea mai mare cifra 6
Cea mai mica cifra 0
Suma cifrelor 24
#include<iostream.h> while(n!=0)
int main() {
{ cif=n%10;
long int n; nr_cifre++;
int nr_cifre=0; if(cif>max) max=cif;
int min=100;
int max=-100; if(cif<min) min=cif;
int suma=0; suma=suma+cif;
int cif; n=n/10;
cout<<"Dati numarul }
(maxim 9 cifre) "; cout<<"\n numarul de cifre
cin>>n; "<<nr_cifre;
cout<<"\n cea mai mare cifra "<<max;
cout<<"\n cea mai mica cifra "<<min;
cout<<"\n suma cifrelor "<<suma;
}
6.5. Probleme rezolvate
Exemplu:
2) Dat un număr intreg de Date de intrare 364901211
maxim 9 cifre, să se Date de ieşire:
afişeze numărul de apariţii 0 apare de 1 ori
1 apare de 3 ori
al fiecărei cifre. 2 apare de 1 ori
3 apare de 1 ori
4 apare de 1 ori
5 apare de 0 ori
6 apare de 1 ori
7 apare de 0 ori
8 apare de 0 ori
#include<iostream.h>
int main()
{
long int n;
int n0,n1,n2,n3,n4,n5,n6,n7,n8,n9;
n0=n1=n2=n3=n4=n5=n6=n7=n8=n9=0;
cout<<"Dati numarul (cu maxim9 cifre) = "; cout<<"\n 0 apare de "<<n0<<" ori";
cin>>n;
cout<<"\n 1 apare de "<<n1<<" ori";
while(n!=0) {
switch(n%10){ cout<<"\n 2 apare de "<<n2<<" ori";
case 0: n0++;break; cout<<"\n 3 apare de "<<n3<<" ori";
case 1: n1++;break; cout<<"\n 4 apare de "<<n4<<" ori";
case 2: n2++;break; cout<<"\n 5 apare de "<<n5<<" ori";
case 3: n3++;break;
cout<<"\n 6 apare de "<<n6<<" ori";
case 4: n4++;break;
case 5: n5++;break; cout<<"\n 7 apare de "<<n7<<" ori";
case 6: n6++;break; cout<<"\n 8 apare de "<<n8<<" ori";
case 7: n7++;break; cout<<"\n 9 apare de "<<n9<<" ori";
case 8: n8++;break;
}
case 9: n9++;break;
}
n=n/10;
}
Capitolul 7. Tablouri

7.1. Generalități. Clasificare


7.2. Tablouri unidimensionale (vectori)
7.3. Tablouri bidimensionale (matrici)
7.4. Tablouri multidimensionale
7.1. Generalitati. Clasificare
Numim tablou o colecţie de date de acelaşi
tip, în care elementele sunt ordonate, iar
accesul la fiecare element are loc prin indice.
În funcţie de numărul indicilor avem mai
multe tipuri de tablouri:
1. Tablouri unidimensionale (cu un singur indice)
2. Tablouri bidimensionale (cu doi indici)
3. Tablouri multidimensionale (cu mai mulţi
indici)
Capitolul 7. Tablouri

7.1. Generalități. Clasificare


7.2. Tablouri unidimensionale (vectori)
7.3. Tablouri bidimensionale (matrici)
7.4. Tablouri multidimensionale
7.2. Tablouri unidimensionale (vectori)

• Tablourile unidimensionale funcţionează ca un


vector şi se pot declara astfel:

tip nume_tablou[dimensiune_maximă];

• Se observă că este obligatorie folosirea


parantezelor drepte care să încadreze
dimensiunea maximă pe care o alege utilizatorul
pentru acel tablou unidimensional.
7.2. Tablouri unidimensionale (vectori)

Exemplu:
Declarări de tablouri unidimensionale:
int a[25]; // declararea unui tablou unidimensional cu maxim 25 de
// elemente, fiecare de tip întreg
float x[30]; // declararea unui tablou unidimensional cu maxim 30 de
// elemente, fiecare de tip real simplă precizie
char s[40]; // declararea unui tablou unidimensional cu maxim 40 de
// elemente, fiecare de tip caracter
7.2. Tablouri unidimensionale (vectori)
• Compilatorul C++ alocă un spaţiu de memorie
egal cu numărul maxim de elemente ale
tabloului, rezervând bineînţeles octeţi în funcţie
de tipul de bază al fiecărui tablou.
• Accesul la fiecare element al tabloului se face
prin numele acestuia urmat între paranteze, de
indicele său (adică poziţia pe care o ocupă în
tablou).
• În limbajul C++, indicii tablourilor încep
numărătoarea de la valoarea 0.
7.2. Tablouri unidimensionale (vectori)

Exemplu:
Modalităţi de acces la elementele ce pot fi
memorate în tablourile unidimensionale
declarate anterior:
a[0] – reprezintă elementul aflat pe prima poziţie în tablou
a[24] - reprezintă elementul aflat pe ultima poziţie în tablou

x[i] - reprezintă elementul aflat pe poziţia i în tablou, unde i poate


avea valori între 0 şi 29.
7.2. Tablouri unidimensionale (vectori)

Iniţializarea elementelor unui tablou se poate


face total sau parţial la declararea lor:
int b[5] = {1, 2, 3, 4, 5};
Astfel:
• elementul b[0] are valoarea 1
• elementul b[1] are valoarea 2
• elementul b[2] are valoarea 3
• elementul b[3] are valoarea 4
• elementul b[4] are valoarea 5
7.2. Tablouri unidimensionale (vectori)

Problema 1:
Se consideră n numere reale. Se cere să se
determine valoarea minimă şi valoarea maximă.
Exemplu:
Date de intrare:
n=5 si x={10, -2, 34, -198, 4}
Date de ieşire:
minim=-198, maxim=34
7.2. Tablouri unidimensionale (vectori)
#include<iostream.h>
int main(void) Citirea numarului de
{ elemente ce vor fi
int i, n; prelucrate in vector - n
float x[50], min, max;
cout<<"Dati numarul de elemente ale tabloului ";
cin>>n;
for( i = 1; i <= n; i++ )
{
Citirea elementelor si
cout<<"x["<<i<<"]= ";
memorarea lor in
cin>>x[i];
vectorul x
}
7.2. Tablouri unidimensionale (vectori)

min = x[1]; max = x[1];


for( i=2; i<=n; i++ )
if( min > x[i] ) Determinarea
min = x[i];
else minimului
if( max < x[i] )
max = x[i]; Determinarea
maximului
cout<<"\nMinimul este "<<min;
cout<<"\nMaximul este "<<max;
}
7.2. Tablouri unidimensionale (vectori)

Executia programului pe o serie de date de test:


7.2. Tablouri unidimensionale (vectori)
Problema 2:
Se consideră n numere întregi.
Se cere să se verifice dacă ele sunt sau nu în
ordine crescătoare, afișând câte un mesaj
corespunzător.
Exemplu: Date de intrare:
n=5 si x={1, 2, 17, 25, 43}
Date de ieşire:
Elemente vectorului sunt in ordine
crescatoare
7.2. Tablouri unidimensionale (vectori)
#include<iostream.h>
int main(void) Citirea numarului de
{ elemente ce vor fi
int i, n, verif=1; prelucrate in vector - n
int x[50];
cout<<"Dati numarul de elemente ale tabloului X ";
cin>>n;
for(i=1; i<=n; i++)
{
cout<<"x["<<i<<"]= "; Citirea elementelor si
cin>>x[i]; memorarea lor in
} vectorul x
7.2. Tablouri unidimensionale (vectori)
Verificarea
proprietatii cerute
for(i=1; i<=n-1; i++) in enunt
if( x[i] > x[i+1] ) verif=0;

if( verif == 1 ) cout<<"Numerele din tablou sunt in


ordine CRESCATOARE";
else cout<<"Numerele din tablou NU sunt in ordine
CRESCATOARE";
}
7.2. Tablouri unidimensionale (vectori)
Executia programului pe doua serii de date de
test:
Capitolul 7. Tablouri

7.1. Generalităţi. Clasificare


7.2. Tablouri unidimensionale (vectori)
7.3. Tablouri bidimensionale (matrici)
7.4. Tablouri multidimensionale
7.3. Tablouri bidimensionale (matrici)

• Tablourile bidimensionale funcţionează ca o


matrice şi se pot declara astfel:

tip nume_tablou[dim_linie][dim_coloana];

• La fel ca şi în cazul tablourilor unidimensionale,


şi în cazul tablourilor bidimensionale, la
declarare, se trece dimensiunea maximă a liniilor
(dim_linie) şi dimensiunea maximă a coloanelor
(dim_coloana).
7.3. Tablouri bidimensionale (matrici)

Exemplu:
Declarări de tablouri bidimensionale:

int a[10][10]; // declararea unui tablou bidimensional cu maxim 100 de


// elemente (10*10), fiecare de tip întreg
float x[5][5]; // declararea unui tablou bidimensional cu maxim 25 de
// elemente(5*5), fiecare de tip real simplă precizie
char s[20][10]; // declararea unui tablou bidimensional cu maxim 200 de
// elemente(20*10), fiecare de tip caracter
7.3. Tablouri bidimensionale (matrici)
• Compilatorul C++ alocă un spaţiu de memorie
egal cu numărul de linii înmulţit cu numărul de
coloane ale tabloului, rezervând bineînţeles
octeţi în funcţie de tipul de bază al fiecărui
tablou.
• Accesul la fiecare element al tabloului se face
prin numele acestuia urmat între paranteze, de
indicele liniei şi indicele coloanei (adică poziţia
pe care o ocupă în tablou).
7.3. Tablouri bidimensionale (matrici)
Exemplu:
Modalităţi de acces la elementele ce pot fi
memorate în tablourile bidimensionale declarate
anterior:
a[0][0] – reprezintă elementul aflat pe linia 0 coloana 0
a[9][9] - reprezintă elementul aflat pe linia 9 coloana 9

x[i][j] - reprezintă elementul aflat pe linia i, coloana j în


matrice, unde i şi j pot avea valori între 0 şi 4.
7.3. Tablouri bidimensionale (matrici)
Iniţializarea elementelor unui tablou se poate
face total sau parţial la declararea lor:
int b[2][3]={ {1, 2, 3}, {4, 5, 6} };
Astfel:
• elementul b[0][0] are valoarea 1
• elementul b[0][1] are valoarea 2
• elementul b[0][2] are valoarea 3
• elementul b[1][0] are valoarea 4
• elementul b[1][1] are valoarea 5
• elementul b[1][2] are valoarea 6
7.3. Tablouri bidimensionale (matrici)

Problema 1:
Se consideră o matrice A cu nm numere
întregi. Se cere să se obţină transpusa sa.
Exemplu:
Date de ieşire:
Date de intrare: Matricea transpusa B:
n=3, m=4 si matricea A: n=4 si m=3
1234 159
5678 2 6 10
9 10 11 12 3 7 11
4 8 12
7.3. Tablouri bidimensionale (matrici)
#include<iostream.h>
int main(void) Citirea numarului de linii – n
{ si de coloane - m ale matricei
int a[10][10], b[10][10];
int n, m, i, j;
cout<<"Dati dimensiunile matricei A \n";
cout<<"Dati numarul de linii n = "; cin>>n;
cout<<"Dati numarul de coloane m = "; cin>>m;
for(i=1; i<=n; i++)
for(j=1; j<=m; j++)
{
cout<<"a["<<i<<", "<<j<<"] = ";
Citirea elementelor si
cin>>a[i][j]; memorarea lor in
} matricea a
7.3. Tablouri bidimensionale (matrici)

cout<<"Elementele matricei A sunt : \n";


for(i=1; i<=n; i++)
{
for(j=1; j<=m; j++) cout<<a[i][j]<<" ";
cout<<"\n";
}
Afisarea elementelor
din matricea a
7.3. Tablouri bidimensionale (matrici)
Construirea matricei
transpuse prin
for(i=1; i<=n; i++) transformarea liniilor in
for(j=1; j<=m; j++) coloane si invers
b[j][i] = a[i][j];
cout<<"Elementele matricei transpuse sunt \n";
for(i=1; i<=m; i++)
{
for(j=1; j<=n; j++) cout<<b[i][j]<<" ";
cout<< "\n";
}
}
7.3. Tablouri bidimensionale (matrici)
Executia programului pe o serie de date de test:
7.3. Tablouri bidimensionale (matrici)
Problema 2:
Se consideră două tablouri
bidimensionale (matrici) A şi B cu nm
numere întregi.
Se cere să se calculeze matricea suma:
C = A + B.
7.3. Tablouri bidimensionale (matrici)
#include<iostream.h> Citirea numarului de linii – n
int main(void) si de coloane - m ale matricei
{
int Matrice1 [10][10], Matrice2 [10][10],Matricesuma[10][10];
int i, j, n, m;
cout<<"Dati dimensiunile primei matrici \n";
cout<<"Dati numarul de linii n = "; cin>>n; Citirea
cout<<"Dati numarul de coloane m = "; cin>>m; elementelor
for(i=1; i<=n; i++){ si
for(j=1; j<=m; j++){ memorarea
cout<<"Matrice1["<<i<<", "<<j<<"] = ";
lor in prima
cin>>Matrice1[i][j];
matrice
}
}
7.3. Tablouri bidimensionale (matrici)
cout<<"Elementele primei matrici sunt : \n";
for(i=1; i<=n; i++)
{
for(j=1; j<=m; j++) cout<<Matrice1[i][j]<<" ";
cout<<"\n";
}
Afisarea elementelor
din prima matrice
7.3. Tablouri bidimensionale (matrici)
for(i=1; i<=n; i++){
for(j=1; j<=m; j++){
cout<<"Matrice2["<<i<<", "<<j<<"] = ";
cin>>Matrice2[i][j];
}
}
cout<<"Elementele celei de-a doua matrice sunt : \n";
for(i=1; i<=n; i++)
{
for(j=1; j<=m; j++) cout<<Matrice2[i][j]<<" ";
cout<<"\n";
}
7.3. Tablouri bidimensionale (matrici)
Construirea matricei
suma prin adunarea
for(i=1; i<=n; i++) valorilor pe linie si pe
for(j=1; j<=m; j++) coloana
Matricesuma[i][j]=Matrice1[i][j]+Matrice2[i][j];

cout<<"Elementele matricii suma sunt : \n";


for(i=1; i<=n; i++)
{
for(j=1; j<=m; j++) cout<<Matricesuma[i][j]<<" ";
cout<<"\n";
}
}
7.3. Tablouri (matrici)
bidimensionale
Executia
programului pe o
serie de date de
test:
7.3. Tablouri bidimensionale (matrici)

Problema 3:

Se consideră două tablouri


bidimensionale (matrici) A şi B cu nm,
respectiv mp numere întregi.
Se cere să se calculeze matricea produs:
C = A * B.
7.3. Tablouri bidimensionale (matrici)

Exemplu:
Date de intrare:
n=2, m=3 si matricea a: Date de iesire:
123 n=2 si p=3 si matricea
456 produs c:
m=3, p=4 si matricea b:
1 2 3 4 38 44 50 56
5 6 7 8 83 98 113 128
9 10 11 12
7.3. Tablouri bidimensionale (matrici)
#include<iostream.h> Citirea numarului de linii – n
int main(void)
{
si de coloane - m ale matricei
int a[10][10], b[10][10], c[10][10];
int n, m, i, j, k, p;
cout<<"Dati dimensiunile matricei A \n";
cout<<"Dati numarul de linii n = "; cin>>n;
cout<<"Dati numarul de coloane m = "; cin>>m;
for(i=1; i<=n; i++)
for(j=1; j<=m; j++)
{
cout<<"a["<<i<<", "<<j<<"] = ";
Citirea elementelor si
cin>>a[i][j]; memorarea lor in
} matricea a
7.3. Tablouri bidimensionale (matrici)

cout<<"Elementele matricei A sunt : \n";


for(i=1; i<=n; i++)
{
for(j=1; j<=m; j++) cout<<a[i][j]<<" ";
cout<< "\n";
}
Afisarea elementelor
din matricea a
7.3. Tablouri bidimensionale (matrici)
cout<<"Dati dimensiunile matricei B \n";
cout<<"Dati numarul de linii m = "; cin>>m;
cout<<"Dati numarul de coloane p = "; cin>>p;
for(i=1; i<=m; i++) Citirea
for(j=1; j<=p; j++)
{ elementelor si
cout<< "b["<<i<<", "<<j<<"] = "; memorarea lor in
cin>>b[i][j]; matricea b
}
cout<<"Elementele matricei B sunt : \n";
for(i=1; i<=m; i++)
{
for(j=1; j<=p; j++) cout<<b[i][j]<<" ";
cout<<"\n";
}
7.3. Tablouri bidimensionale (matrici)

• Conditie: Numarul de coloane din prima


matrice trebuie sa fie egal cu numarul de linii
din a doua matrice.

Prima matrice A doua matrice


2x4 4x3
Trebuie sa fie
acelasi numar

Matricea rezultat
7.3. Tablouri bidimensionale (matrici)
for(i=1; i<=n; i++)
for(j=1; j<=p; j++) Calculul
{ elementelor
c[i][j] = 0; matricei produs c
for(k=1; k<=m; k++)
c[i][j] = c[i][j] + a[i][k] * b[k][j];
}
7.3. Tablouri bidimensionale (matrici)

cout<<"Elementele matricei produs C sunt : \n";


for(i=1; i<=n; i++) {
for(j=1; j<=p; j++) cout<<c[i][j]<<" ";
cout<<"\n";
}
}
7.3. Tablouri
bidimensionale (matrici)
Executia
programului pe o
serie de date de
test:
Probleme rezolvate – tablouri unidimensionale

Enunt:

Se considera un numar natural n. Se cere sa se


formeze un vector cu cifrele numarului.
Exemplu:
Date de intrare:
Pentru valoarea: n = 23416789
Date de iesire:
Se obtine vectorul cu elementele:
98761432
Probleme rezolvate – tablouri unidimensionale

#include<iostream.h>

int main(void)
{
// declaram variabilele pe care le vom utiliza in program
int x[30];
long int n, i, m;
cout<<"Dati numarul natural n = ";
cin>>n;
Probleme rezolvate – tablouri unidimensionale
i = 1;
while(n != 0){
x[i] = n % 10;
i++;
n = n / 10;
}
m = i-1;
cout<<"\nVectorul cu cifrele numarului este \n";
for(i = 1; i <= m; i++){
cout.width(3); cout<<x[i];
}
}
Probleme rezolvate – tablouri unidimensionale

Executia programului pe o serie de date de test:


Probleme rezolvate – tablouri unidimensionale

Enunt: Reuniunea a doua multimi


Sa se scrie un program care sa calculeze
reuniunea a doua multimi de cate n, respectiv m
numere intregi memorate cu ajutorul vectorilor.
Exemplu:
Date de intrare:
n = 5 a = {1, 2, 5, 7, 12} si
m = 4 b = {2, 4, 8, 12}
Date de iesire:
se obtine: k=7 c={1, 2, 5, 7, 12, 4, 8}
Probleme rezolvate – tablouri unidimensionale
#include<iostream.h>
int main(void)
{
int a[100], b[100], c[100], n, m, i, j, k, ok;
cout<<"Dati cardinalul multimii A - n = ";
cin>>n;
cout<<"Dati elementele multimii A \n";
for(i = 1; i <= n; i++){
cout<<"a["<<i<<"] = ";
cin>>a[i];
}
Probleme rezolvate – tablouri unidimensionale

cout<<"Dati cardinalul multimii B - m = ";


cin>>m;
cout<<"Dati elementele multimii B \n";
for(i = 1; i <= m; i++)
{
cout<<"b["<<i<<"] = ";
cin>>b[i];
}
// copiem elementele din multimea A in multimea C
for(i = 1; i <= n; i++) c[i]=a[i];
k = n;
Probleme rezolvate – tablouri unidimensionale
for(j = 1; j <= m; j++)
{
ok = 1; // variabila care verifica daca un element apartine sau
un multimii A
for(i = 1; i <=n ;i++)
if(b[j] == a[i]) // daca elementul din multimea B apartine si
multimii A atunci nu-l adaugam in multimea reuniune - C
ok = 0;
if(ok == 1)
{
k++;
c[k] = b[j];
}
}
Probleme rezolvate – tablouri unidimensionale

cout<<"\nElementele multimii reuniune sunt : \n";


for(i = 1; i <= k; i++)
{
cout.width(9);
cout<<c[i];
}
}
Probleme rezolvate – tablouri unidimensionale

Executia programului pe o serie de date de test:


Probleme propuse spre rezolvate – tablouri
unidimensionale
1. Intersectia a doua multimi
Sa se scrie un program care sa calculeze
intersectia a doua multimi de cate n, respectiv m
numere intregi memorate cu ajutorul vectorilor.
Exemplu:
Date de intrare:
n = 5 a = {1, 2, 5, 7, 12} si
m = 4 b = {2, 4, 8, 12}
Date de iesire:
se obtine: k = 2 d = {2, 12}
Probleme propuse spre rezolvate – tablouri
unidimensionale
2. Diferența a două mulțimi
Sa se scrie un program care sa calculeze
diferenta a doua multimi de cate n, respectiv m
numere intregi memorate cu ajutorul vectorilor.
Exemplu:
Date de intrare:
n = 5 a = {1, 2, 5, 7, 12} si
m = 4 b = {2, 4, 8, 12}
Date de iesire:
se obtine: k = 3 e = {1, 5, 7}
Probleme propuse spre rezolvate – tablouri
unidimensionale

3. Se dă un şir de n numere naturale. Să se afişeze


pe două randuri, pe primul rand cele pare şi pe al
doilea cele impare.
Exemplu:
Date de intrare:
Pentru n = 10
si elementele 4 3 2 5 6 8 9 0 1 5
Date de iesire:
42680
35915
Probleme propuse spre rezolvate – tablouri
unidimensionale
4. Sa se scrie un program care sa introducă n
numere intr-un vector şi să citeasccă un număr d.
Să se afişeze acele numere din şirul dat care sunt
divizibile cu d.
Exemplu:
Date de intrare:
n=5 si valorile: 5 7 10 23 15, d=5
Date de iesire:
5 10 15
Probleme propuse spre rezolvate – tablouri
unidimensionale
5. Se introduc temperaturile măsurate in n zile. Să
se scrie un program care să afişeze media
temperaturilor negative şi media celor pozitive.
Exemplu:

Date de intrare:
n = 5 si temperaturile: 23 24 23 25 22
Date de iesire:
23.40
Capitolul 7. Tablouri

7.1. Generalităţi. Clasificare


7.2. Tablouri unidimensionale (vectori)
7.3. Tablouri bidimensionale (matrici)
7.4. Tablouri multidimensionale
7.4. Tablouri multidimensionale
Tablorile multidimensionale se pot declara
astfel:
tip nume_tablou[dim1][dim2][dim3]…[dimn];
Compilatorul C++ alocă un spaţiu de memorie
prin înmulţirea numărului de elemente ale
fiecarei dimensiuni în parte (dim1, dim2, dim3, . .
, dimn) cu numărul de octeţi ai tipului de date al
tabloului respectiv.
7.4. Tablouri multidimensionale
Exemplu:
Declarări de tablouri multidimensionale:
int a[10][10][10]; // declararea unui tablou tridimensional cu
// maxim 1000 de elemente (10*10*10),
// fiecare de tip întreg
float x[5][5][5]; // declararea unui tablou tridimensional cu
// maxim 125 de elemente(5*5*5), fiecare de
// tip real simplă precizie
char s[20][10][30]; // declararea unui tablou tridimensional cu
// maxim 6000 de elemente(20*10*30),
// fiecare de tip caracter
7.4. Tablouri multidimensionale

Exemplu:
Program care afişează numărul de octeţi
alocaţi pentru:
• un tablou unidimensional
• un tablou bidimensional
• un tablou multidimensional (cu trei dimensiuni)
utilizând operatorul sizeof:
7.4. Tablouri multidimensionale
#include <iostream.h>
int main(void)
{
int a[20];
float x[3][4];
char t[20][30][40];
cout<<"\nNumărul de octeţi pentru tabloul unidimensional
int a[20] este "<< sizeof(a);
cout<<"\nNumărul de octeţi pentru tabloul bidimensional
float x[3][4] este "<< sizeof(x);
cout<<"\nNumărul de octeţi pentru tabloul
multidimensional char t[20][30][40] este "<< sizeof(t);
}
7.4. Tablouri multidimensionale
După compilarea şi execuţia programului, pe ecran
vor apărea următoarele valori:
Capitolul 7. Tablouri

7.5. Probleme cu vectori


7.6. Probleme cu matrici
Probleme rezolvate cu vectori

Problema 1:
Enunţ:
Se citeşte un tablou unidimensional cu
n (1<=n<=100) componente numere
naturale.
Se cere să se construiască şi să se
afişeze un nou vector cu componentele
pătrate perfecte ale vectorului iniţial.
Probleme rezolvate cu vectori

#include<iostream.h> Citirea numarului de


#include<math.h> elemente ce vor fi
prelucrate in vector - n
int main(void)
{
unsigned int x[100], y[100], n, i, j;

cout<<"Dati numarul elementele ale tabloului n


= ";
cin>>n;
Probleme rezolvate cu vectori

cout<<"\nDati elementele tabloului ";


for(i = 1; i <= n; i++)
{
cout<<"x["<<i<<"]=";
Citirea elementelor
cin>>x[i]; si memorarea lor in
} vectorul x
Probleme rezolvate cu vectori
j = 0; // numărul de elemente din noul vector
for(i = 1; i <= n; i++)
{
if(sqrt(x[i]) == int(sqrt(x[i])))
{
j++; Verificarea
y[j] = x[i]; proprietatii de
patrat perfect
}
}
Probleme rezolvate cu vectori

cout<<"\nElementele patrate perfecte sunt : ";


for(i = 1; i <= j; i++) // j numarul de elemente din noul
vector
{
cout.width(6); // afişează pe 6 caractere
cout<<y[i];
}
}
Executia programului pe o serie de date de test:
Probleme rezolvate cu vectori

Problema 2:
Enunţ:
Se citeşte un tablou unidimensional cu n
(1<=n<=100) componente numere naturale.
Se cere să se calculeze şi să se afişeze
suma elementelor din vector care sunt
divizibile cu o valoare naturală dată a.
Probleme rezolvate cu vectori

#include<iostream.h>

int main(void)
{
unsigned int x[100], a, n, i, s;
cout<<"\nDati numarul de elemente ale
tabloului n = ";
Citirea numarului de
cin>>n; elemente ce vor fi
prelucrate in vector n
Probleme rezolvate cu vectori
cout<<"Dati elementele tabloului \n";
for(i = 1; i <= n; i++)
{
cout<<"x["<<i<<"]="; Citirea
elementelor si
cin>>x[i];
memorarea lor in
} vectorul x
cout<<"\nDati valoarea a = ";
cin>>a;
Citirea valorii a
Probleme rezolvate cu vectori

s = 0; // suma elementelor care indeplinesc cerinta problemei


for(i = 1; i <= n; i++)
if(x[i] % a == 0)
s = s + x[i];
cout<<"\nSuma elementelor din vector
divizibile cu "<<a<<" este = "<<s;
}
Executia programului pe o serie de date de test:
Probleme rezolvate cu vectori

Problema 3:
Enunţ:
Să se scrie un program C++ care să realizeze
inversarea unui vector:
a) în acelaşi vector şi fără a utiliza un vector
suplimentar
b) într-un alt vector
Probleme rezolvate cu vectori

#include<iostream.h> Citirea numarului de


elemente ce vor fi
int main(void) prelucrate in vector - n
{
unsigned int x[100], y[100], n, i, j, aux;
cout<<"Dati numarul de elemente ale tabloului n
=";
cin>>n;
Probleme rezolvate cu vectori

cout<<"Dati elementele tabloului\n";


for(i = 1; i <= n; i++) Citirea
elementelor si
{
memorarea lor in
cout<<"x["<<i<<"]="; vectorul x
cin>>x[i];
y[i]=x[i]; // pastram o copie a vectorului initial
}
Probleme rezolvate cu vectori
cout<<"\n Punctul a ) \n";
cout<<"\n Elementele vectorului inainte de
inversare sunt : \n";
for(i = 1; i <= n; i++)
{
cout.width(6);
cout<<x[i];
}
Probleme rezolvate cu vectori

for(i = 1; i <= n/2; i++)


{
aux = x[i];
x[i] = x[n-i+1];
x[n-i+1]=aux;
}
Probleme rezolvate cu vectori

cout<<"\nElementele vectorului dupa inversare


sunt : ";
for(i = 1; i <= n; i++)
{
cout.width(6);
cout<<x[i];
}
Probleme rezolvate cu vectori
for(i = 1; i <= n; i++)
x[i] = y[i]; //revenim la vectorul neinversat
cout<<"\nPunctul b ) \n";
cout<<"\nElementele vectorului inainte de inversare
sunt : \n";
for(i = 1; i <= n; i++)
{
cout.width(6);
cout<<x[i];
}
Probleme rezolvate cu vectori
for(i = 1; i <= n; i++)
y[i] = x[n-i+1];
cout<<"\n Elementele vectorului nou – obtinut
prin inversare sunt : \n";
for(i = 1; i <= n; i++)
{
cout.width(6);
cout<<y[i];
}
}
Executia programului pe o serie de date de test:
Capitolul 7. Tablouri

7.5. Probleme cu vectori


7.6. Probleme cu matrici
Probleme rezolvate cu matrici
Problema 1:
Enunţ:
Se consideră o matrice An*n. Să se calculeze:
1. suma elementelor de pe diagonala principală
2. produsul elementelor de pe diagonala
secundară
3. minimele din elementele aflate deasupra,
respectiv sub diagonala principală
4. maximele din elementele aflate deasupra,
respectiv sub diagonala principală
Probleme rezolvate cu matrici
#include <iostream.h>
int main(void) Citirea numarului de
{ linii ale matricei - n
int n, m, i, j, a[30][30], min1, min2, max1, max2, suma,
produs;
cout<<"Dati dimensiunile matricei \n";
cout<<"Dati numarul de linii si de coloane n = ";
cin>>n;
for(i=1; i<=n; i++) Citirea
for(j=1; j<=n; j++) { elementelor si
cout<<"a["<<i<<"]["<<j<<"]= "; memorarea lor in
cin>>a[i][j]; matricea a
}
Probleme rezolvate cu matrici
cout<<"Elementele matricei A sunt: \n";
for(i=1; i<=n; i++)
{
for(j=1; j<=n; j++)
{
cout.width(4); Afisarea
cout<<a[i][j]; elementelor din
} matricea a
cout<<"\n";
}
Probleme rezolvate cu matrici
// == suma elementelor de pe diagonala principala ==

suma=0;
for(i=1; i<=n; i++)
for(j=1; j<=n; j++)
if( i == j ) suma = suma + a[i][j];

cout<<"\nSuma elementelor de pe diagonala


principala este "<<suma;
Probleme rezolvate cu matrici
// == produsul elementelor de pe diagonala secundara ==

produs=1;
for(i=1; i<=n; i++)
for(j=1; j<=n; j++)
if( i + j == n+1) produs = produs * a[i][j];

cout<<"\nProdusul elementelor de pe diagonala


secundara este "<<produs;
Probleme rezolvate cu matrici
// minimul elementelor de deasupra diagonalei principale
min1=10000;
for(i=1; i<=n; i++)
for(j=1; j<=n; j++)
if( i < j )
if( a[i][j] < min1 ) min1 = a[i][j];
cout<<"\nMinimul de deasupra diag.
principale este "<<min1;
Probleme rezolvate cu matrici
// minimul elementelor de sub diagonala principala
min2=10000;
for(i=1; i<=n; i++)
for(j=1; j<=n; j++)
if( i > j )
if( a[i][j] < min2 ) min2 = a[i][j];
cout<<"\nMinimul de sub diag. principala este
"<<min2;
Probleme rezolvate cu matrici
// maximul elementelor de deasupra diagonalei principale
max1=-10000;
for(i=1; i<=n; i++)
for(j=1; j<=n; j++)
if( i < j )
if( a[i][j] > max1 ) max1 = a[i][j];
cout<<"\nMaximul de deasupra diag. principale
este "<<max1;
Probleme rezolvate cu matrici
// maximul elementelor de sub diagonala principala
max2=-10000;
for(i=1; i<=n; i++)
for(j=1; j<=n; j++)
if( i > j )
if( a[i][j] > max2 ) max2 = a[i][j];
cout<<"\nMaximul de sub diag. principala este
"<<max2;
}
Executia programului pe o serie de date de test:
Probleme rezolvate cu matrici

Problema 2:
Enunţ:
Se consideră o matrice An*m (1  n, m 30)
având componente numere întregi.
Să se determine maximul fiecărei coloane şi
minimul fiecărei linii.
Probleme rezolvate cu matrici
#include <iostream.h> Citirea numarului
int main(void) de linii ale
{ matricei – n si a
int n, m, i, j, a[30][30], min, max;
cout<<"Dati dimensiunile matricei \n"; numarului de
cout<<"Dati numarul de linii n = "; coloane - m
cin>>n;
cout<<"Dati numarul de linii m = "; Citirea
cin>>m; elementelor si
for(i=1; i<=n; i++) memorarea lor in
for(j=1; j<=m; j++) { matricea a
cout<<"a["<<i<<"]["<<j<<"]= ";
cin>>a[i][j];
}
Probleme rezolvate cu matrici
cout<<"Elementele matricei A sunt: \n";
for(i=1; i<=n; i++)
{
for(j=1; j<=m; j++)
{
cout.width(4); Afisarea
cout<<a[i][j]; elementelor din
} matricea a
cout<<"\n";
}
Probleme rezolvate cu matrici
// calculam minimele de pe fiecare linie
for(i=1; i<=n; i++)
{
min = a[i][1];
for(j=2; j<=m; j++)
if( a[i][j] < min )
min = a[i][j];
cout<<"Minimul de pe linia "<<i<<" este
"<<min<<"\n";
}
Probleme rezolvate cu matrici
// calculam maximele de pe fiecare coloana
for(j=1; j<=m; j++)
{
max = a[1][j];
for(i=2; i<=n; i++)
if( a[i][j] > max )
max = a[i][j];
cout<<"Maximul de pe coloana "<<j<<"este
"<<max<<"\n";
}
}
Executia programului pe o serie de date de test:
Probleme rezolvate cu matrici

Problema 3:
Enunţ:
Se consideră o matrice An*m (1  n, m 30)
având componente numere întregi.
Să se determine suma elementelor de pe
marginea (rama) matricei.
Probleme rezolvate cu matrici
#include <iostream.h> Citirea numarului de linii ale
int main(void) matricei – n si a numarului de
{ coloane - m
int n, m, i, j, a[30][30], suma;
cout<<"Dati dimensiunile matricei \n";
cout<<"Dati numarul de linii n = "; cin>>n;
cout<<"Dati numarul de coloane m = "; cin>>m;
for(i=1; i<=n; i++)
for(j=1; j<=m; j++) {
cout<<"a["<<i<<"]["<<j<<"]= ";
cin>>a[i][j]; Citirea
} elementelor si
memorarea lor in
matricea a
Probleme rezolvate cu matrici
cout<<"Elementele matricei A sunt: \n";
for(i=1; i<=n; i++)
{
for(j=1; j<=m; j++)
{
cout.width(4); Afisarea
cout<<a[i][j]; elementelor din
} matricea a
cout<<"\n";
}
Probleme rezolvate cu matrici
// calculam suma elementelor de pe linia 1
suma = 0;
for(j=1; j<=m; j++)
suma = suma + a[1][j];
// calculam suma elementelor de pe linia n
for(j=1; j<=m; j++)
suma = suma + a[n][j];
Probleme rezolvate cu matrici

// calculam suma elementelor de pe coloana 1


for(i=1; i<=n; i++)
suma = suma + a[i][1];

// calculam suma elementelor de pe coloana m


for(i=1; i<=n; i++)
suma = suma + a[i][m];
Probleme rezolvate cu matrici
// scadem cele 4 colturi ale matricei, deoarece le-am adunat de 2
ori pe fiecare

suma = suma – a[1][1] – a[1][m] – a[n][1] –


a[n][m];

cout<<"\nSuma elementelor de pe marginea


matricei este = "<<suma;
}
Executia programului pe o serie de date de test:
Probleme propuse spre rezolvate – tablouri
unidimensionale si tablouri bidimensionale

1. Dintr-un şir de numere intregi, să se afişeze


suma elementelor de pe poziţiile pare şi suma
celor de pe poziţii impare.
Exemplu:
Date de intrare:
n=6 si numerele 3 1 5 4 6 7
Date de ieşire:
s_imp = 14 (am însumat elem. 3+5+6)
Probleme propuse spre rezolvate – tablouri
unidimensionale si tablouri bidimensionale

2. Se introduc în calculator şi se memorează


vârstele a n bărbaţi. Afişaţi câţi au vârsta mai mare
decât 50 şi mai mică decât 70 de ani.

Exemplu: Date de intrare:


n=4 si vârstele 56 45 76 65
Date de ieşire:
2 barbati
Probleme propuse spre rezolvate – tablouri
unidimensionale si tablouri bidimensionale

3. Fiind date n numere naturale, câte sunt prime


cu 7? Dar cu 10?
Date de intrare:
Exemplu:
n=6 si numerele 5 7 14 20 12 15
Date de ieşire:
prime cu 7: 4 numere (5,20,12,15)
prime cu 10: 1 numar (7)
Doua numere sunt prime între ele daca cmmdc al
lor este 1.
Probleme propuse spre rezolvate – tablouri
unidimensionale si tablouri bidimensionale
4. Se dă un tablou bidimensional cu n linii şi m coloane,
1 <= n,m <= 50, cu componente întregi şi un număr
întreg k. Se cere să se afişeze tabloul cu componentele
mărite cu k. Date de intrare:
Exemplu: n = 2 m = 3 k = 5 si elementele:
123
678
Date de ieşire:
678
11 12 13
Probleme propuse spre rezolvate – tablouri
unidimensionale si tablouri bidimensionale
5. Fiind dat un tablou bidimensional cu n linii şi n
coloane, afişaţi cea mai mare componentă şi
poziţiile pe care le ocupă.
Exemplu: Date de intrare:
n = 2 si matricea:
47
57
Date de ieşire:
max = 7 se afla pe pozitiile 1,2 si 2,2
Probleme propuse spre rezolvate – tablouri
unidimensionale si tablouri bidimensionale
6. Să se afişeze suma elementelor de pe coloana k a
unei matrici cu n linii şi m coloane, k<=m.

Date de intrare:
Exemplu:
n = 2, m = 4, k = 3 si matricea
4368
7490
Date de ieşire:
s = 15
Capitolul 8. Şiruri de caractere

8.1. Formă generală. Declarare


8.2. Funcţii specifice şirurilor de caractere
8.3. Probleme cu şiruri de caractere
8.1. Formă generală. Declarare

• Datele care se reprezintă sub formă se şiruri de


caractere au o largă aplicabilitate în programarea
calculatoarelor, indiferent de limbajul folosit.
• Astfel şi în limbajul C/C++ se pot memora şi
prelucra informaţii de tip şir de caractere.
• Cu toate că limbajul C/C++ nu conţine un tip de date
special pentru şiruri de caractere aşa cum are
limbajul Pascal, se pot utiliza tablouri
unidimensionale de caractere.
8.1. Formă generală. Declarare

Declararea unui tablou de caractere se face


astfel:
char nume_tablou[dimensiune_maximă];

Exemple:
char sir[20]; // tablou de 20 de caractere
char t[10]; // tablou de 10 caractere
8.1. Formă generală. Declarare

• Pentru a specifica sfârşitul şirului de caractere,


după ultimul caracter se adaugă un octet cu
valoarea 0 ( caracterul '\0' ).

• Dimensiunea declarată pentru un tablou de


şiruri de caractere trebuie să fie cu o unitate
mai mare pentru ca pe ultima poziţie să se
poată pune şi valoarea '\0' = terminatorul de
şir.
8.1. Formă generală. Declarare

Reprezentarea internă a unui şir de caractere

char sir[33]="Programarea calculatoarelor";

Pr o g r a m a r e a c a l c u l a t o a r e l o r \0

sir[0] sir[33]=”Programarea calculatoarelor”


Ultimi octeţi sunt nefolosiţi.
8.1. Formă generală. Declarare
• În limbajul C/C++, un şir de caractere este un tablou
unidimensional cu elemente de tip caracter şi care se
termină cu NULL.
• Totuşi compilatorul C/C++ nu adaugă automat
terminatorul NULL, decât în cazul folosirii funcţiilor
predefinite fgets() şi gets() (functii de citire din fisiere
sau de la tastatura), iar în celelalte cazuri este
necesar ca programatorul să adauge terminatorul de
şir atunci când doreşte acest lucru, pentru a lucra cu
şirurile de caractere.
8.1. Formă generală. Declarare
Exemplu:
Următorul program declară un şir de caractere de 256 de
elemente şi atribuie primelor 26 de locaţii libere literele mari ale
alfabetului:
#include<iostream.h>
int main()
{
char sir[256];
int i;
for(i=0;i<26;i++)
sir[i] = 'A' + i;
sir[i] = '\0';
cout<<"Sirul de caractere contine: "<<sir;
}
După compilarea şi execuţia programului, pe ecran vor apărea
următoarele valori:
Capitolul 8. Şiruri de caractere

8.1. Formă generală. Declarare


8.2. Funcţii specifice şirurilor de caractere
8.3. Probleme cu şiruri de caractere
8.2. Funcţii specifice şirurilor de caractere

În biblioteca limbajului C++ există câteva


funcţii specifice şirurilor de caractere:
în fişierul standard de intrare / ieşire –
stdio.h, avem funcţiile gets() şi puts().
în fişierul string.h, avem mai multe
funcţii specifice prelucrării șirurilor,
funcții pe care le voi prezenta în
continuare.
8.2. Funcţii specifice şirurilor de caractere

Pentru citirea sirurilor de caractere care


contin spatii se poate folosi metoda getline a
funcției cin:

cin.getline(variabila_sir, dimensiune_maxima);

Exemplu:
char variabila_sir[120];
cin.getline(variabila_sir, 120);
8.2. Funcţii specifice şirurilor de caractere
Funcţiile pentru operaţii cu şiruri ce se
găsesc în header-ul <string.h>.

strlen (nume_şir)
Returnează un număr întreg ce reprezintă
lungimea unui şir de caractere, fără a număra
terminatorul de şir.
Exemplu: 10
cout <<strlen("sir corect");
8.2. Funcţii specifice şirurilor de caractere

strcmp (şir_1, şir_2)

Funcţia compară cele două şiruri date ca


argument şi returnează o valoare întreagă
egală cu diferenţa dintre codurile ASCII ale
primelor caractere care nu coincid.
0
Exemplu:
cout <<strcmp("carte", "carte");
8.2. Funcţii specifice şirurilor de caractere

strcpy (şir_destinaţie, şir_sursă)


Funcţia copiază şirul sursă în şirul destinaţie.
Nota:
Pentru a fi posibilă copierea, lungimea şirului
destinaţie trebuie să fie mai mare sau egală cu cea a
şirului sursă, altfel pot aparea erori grave.

Exemplu:
"carte_informatica"
char sir[20];
cout <<strcpy(sir, "carte_informatica");
8.2. Funcţii specifice şirurilor de caractere

strcat (şir_destinaţie, şir_sursă)


Funcţia concatenează cele două şiruri: şirul
sursă este adăugat la sfârşitul şirului destinaţie.

Tabloul care conţine şirul destinaţie trebuie să


aibă suficiente elemente.
Exemplu:
"carteinformatica"
char sir[]="carte";
cout <<strcat(sir, "informatica");
8.2. Funcţii specifice şirurilor de caractere

strchr(sir, caracter)

Returneaza o valoare pozitiva daca un


caracter apare intr-un sir, 0 in caz contrar.
Exemplu:
char sir[]="exemplu de sir", c=‘i’;
if (strchr(sir, c)) cout << "L-am gasit!"
8.2. Funcţii specifice şirurilor de caractere

strstr(sir1, sir2)
Returneaza o valoare pozitiva daca un
sir apare intr-un alt sir, 0 in caz contrar.
Exemplu:
char sir1="primul sir", sir2="sir";
if (strstr(sir1,sir2)) cout <<"Am gasit subsirul!"
8.2. Funcţii specifice şirurilor de caractere
Exemplu 1:
#include <iostream.h>
#include <string.h> -1, daca sir1<sir2
strcmp(sir1,sir2)= 0, daca sir1=sir2
int main() 1, daca sir1>sir2

{
char sir1[] = "abcd", sir2[] = "abcde";
cout<<strcmp(sir1, sir2)<<"\n";
// afişare: -1
8.2. Funcţii specifice şirurilor de caractere

cout<<strcmp(sir2, sir1)<<"\n";
// afişare: 1

cout<<strcmp(sir1, "")<<" ";


// compararea variabilei sir1 cu constanta şir vid
// afişare: 1
8.2. Funcţii specifice şirurilor de caractere

char str1[20]="hello";
char str2[20]="goodbye";
char str3[20]="";
int diferenta, lungime;
cout<<"str1="<<str1<<" str2="<<str2<<"\n";
8.2. Funcţii specifice şirurilor de caractere
diferenta = strcmp(str1, str2);
if (diferenta == 0)
cout<<"Siruri echivalente! "<<"\n";
else
if (diferenta > 0)
cout<<str1<<" mai mare (d.p.d.v.
lexicografic) decât "<<str2<<"\n";
else
cout<<str1<<" mai mic (d.p.d.v. lexicografic)
decât "<<str2<<"\n";
8.2. Funcţii specifice şirurilor de caractere
cout<<"str1="<<str1<<"\n";
cout<<"str3="<<str3<<"\n";
strcpy (str3, str1);
cout<<"str1="<<str1<<"\n";
cout<<"str3="<<str3<<"\n";
strcat (str3, str1);
cout<<"str1="<<str1<<"\n";
cout<<"str3="<<str3<<"\n";
}
8.2. Funcţii specifice şirurilor de caractere
Executia programului:
8.2. Funcţii specifice şirurilor de caractere
Exemplu 2:

Verificati daca un nume apare intr-un sir.


#include <iostream.h>
#include <string.h>
int main()
{
char nume[10],sir[100];
cout<<"Introduceti numele: ";
cin.getline(nume,10);
8.2. Funcţii specifice şirurilor de caractere

cout<<"Introduceti sirul: ";


cin.getline(sir,100);
if(strstr(sir,nume))
cout<<nume<<" apare in sirul "<<sir<<"\n";
else
cout<<nume<<" NU apare in sirul "<<sir<<"\n";
}
8.2. Funcţii specifice şirurilor de caractere

Executia programului:
8.2. Funcţii specifice şirurilor de caractere

În fişierul <stdlib.h> există câteva funcţii


care prelucrează şirurile de caractere.

Acestea sunt funcţiile de conversie dintr-un


număr într-un şir de caractere şi invers.
8.2. Funcţii specifice şirurilor de caractere

În programul următor vor fi exemplicate


funcţiile de conversie şiruri de caractere în
numere:
Funcţie la ce foloseşte
atof converteşte un şir de caractere într-un număr real simplă precizie
atoi converteşte un şir de caractere într-un număr întreg
atol converteşte un şir de caractere într-un număr întreg de tip long
strtod converteşte un şir de caractere într-un număr real dublă precizie
strtol converteşte un şir de caractere într-un număr de tip long
8.2. Funcţii specifice şirurilor de caractere
#include<iostream.h>
#include<stdlib.h>
int main()
{
int numar_int;
float numar_real;
long numar;
numar_int = atoi("6789");
numar_real = atof("12.345");
numar = atol("1234567890L");
cout<<numar_int<<" "<<numar_real<<" "<<numar;
}
8.2. Funcţii specifice şirurilor de caractere

În programul următor vor fi exemplicate


funcţiile de conversie numere în şiruri de
caractere:

Funcţie la ce foloseşte
itoa converteşte un număr întreg într-un şir de caractere
ftoa converteşte un număr real simplă precizie într-un şir de caractere
ultoa converteşte un număr de tip long unsigned într-un şir de caractere
8.2. Funcţii specifice şirurilor de caractere
#include<iostream.h>
#include<stdlib.h>
int main()
{
int numar_int = 6789;
long numar = 1234567890L;
char sir[25];
itoa(numar_int, sir, 10);
cout<<" numar = "<< numar_int<<" sir = "<<sir;
ltoa(numar, sir, 10);
cout<<" numar = "<< numar<<" sir = "<<sir;
}
8.2. Funcţii specifice şirurilor de caractere
Executia programului:
Capitolul 8. Şiruri de caractere

8.1. Formă generală. Declarare


8.2. Funcţii specifice şirurilor de caractere
8.3. Probleme cu şiruri de caractere
8.3. Probleme cu şiruri de caractere

Problema 1:
Enunţ:
Să se afişeze numărul de vocale dintr-un text
scris cu litere mici, memorat intr-o variabilă de tip
șir de caractere.
Exemplu:
Date de intrare: Programarea calculatoarelor
Date de ieșire: Exista 12 vocale in text
8.3. Probleme cu şiruri de caractere
#include <iostream.h>
#include <string.h>

int main()
{
char text[100];
char vocale[] = "aeiou";
int contor = 0;
cout<<"Introduceti text: ";
cin.getline(text, 100);
8.3. Probleme cu şiruri de caractere
for (int i=0; i<strlen(text); i++)
for (int j=0; j<strlen(vocale); j++)
if (text[i] == vocale[j])
contor++;
cout<<"Exista "<<contor<<" vocale in text. ";
}
8.3. Probleme cu şiruri de caractere

Problema 2:
Enunţ:
Să se afişeze cu litere mari un text dat, de
maxim 255 caractere.
Exemplu:
Date de intrare text: liMBajUl c++
Date de ieşire LIMBAJUL C++
8.3. Probleme cu şiruri de caractere
#include <iostream.h>

int main()
{
char sir[255];
cout<<"Introduceti textul: ";
cin.getline(sir, 255);
for (int i=0; sir[i]!=0; i++)
if (sir[i] >= 'a' && sir[i] <= 'z') sir[i] = sir[i] - 'a' + 'A';
cout<<sir; Codurile ASCII:
[‘a’, ’z’] = [97, 122]
} [‘A’, ‘Z’] = [65, 90]
8.3. Probleme cu şiruri de caractere

Problema 3:
Enunţ:
Se citește un șir de caractere. Să se afișeze
litera cea mai des întâlnită.
Exemplu:
Date de intrare text: carte de informatica si
programare
Date de ieşire: a apare de 5 ori
8.3. Probleme cu şiruri de caractere
#include <iostream.h>
#include <string.h>

int main()
{
char sir[1000], carac_max, c;
int i, frecv[256], max=0; // frecv - vector de frecvente
cout<<"Dati sirul de caractere: ";
cin.getline(sir,1000);
for (i=0; i<256; i++) frecv[i] = 0;
8.3. Probleme cu şiruri de caractere
for (i=0;i<strlen(sir);i++)
{
c=sir[i];
frecv[c]=frecv[c]+1;
if (frecv[c]>max){
max=frecv[c];
carac_max=c;
}
}
cout<<carac_max<<" apare de "<<max<<" ori";
}
8.3. Probleme cu şiruri de caractere
Probleme propuse spre rezolvate – șiruri de
caractere
1. Să se afișeze toate prefixele și sufixele unui cuvânt
citit de la tastatură.
Exemplu:
Date de intrare: informatica
Date de ieşire: i a
in ca
inf ica
info tica
infor atica
inform matica
informa rmatica
informat ormatica
informati formatica
informatic nformatica
Probleme propuse spre rezolvate – șiruri de
caractere
2. Se citește de la tastatură un caracter c și un text de
maxim 100 de carectere. Afișați de câte ori apare
caracterul c în cadrul textului. Literele mari se vor
considera diferite de literele mici.

Exemplu:
Date de intrare:
Acesta este un simplu exemplu
Caracterul e

Date de ieşire: Litera ‘e’ apare de 5 ori


Probleme propuse spre rezolvate – șiruri de
caractere
3. Se citește de la tastatură un șir de maxim 100 de
carectere format numai din litere și cifre. Afișați numărul
literelor mari, numărul literelor mici și numărul
caracterelor de tip cifră din textul dat.

Exemplu:
Date de intrare:
S-a nascut la Targu Jiu in 1968 pe 21 martie

Date de ieşire: Se gasesc 25 de litere mici, 2 litere mari si 6 cifre


Curs Programarea Calculatoarelor si limbaje de programare II

Structura unui program in C++

Programare = implementarea / rezolvarea unei probleme (sarcini) cu


ajutorul calculatorului.
Cod sursă = Editarea utilizând sintaxa unui limbaj de programare
(implementare) a unui algoritm (sau mai mulți) cu scopul
de a realiza una sau mai multe sarcina/obiective (task).

Programare structurată = împărțirea unui program in porțiuni care


realizează anumite sarcini specifice, parțiale si facile fata
de obiectivul inițial.
© Ovidiu Grigore

Structura unui program in C++


Limbaj / Programare structurata

• Divizarea programului se bazeaza pe descompunerea conceptuala a


algoritmului iniţial în sarcini mai simple, care să se poată
implementa în module cvasi-independente, între care interacţiunea să
fie redusă la minim.

• Modul de realizare  implementare procedurală/modulară

• Efecte:
- realizarea unor programe eficiente, clare, ușor de urmarit
- ușurează întregul proces de realizarea a unei aplicații software:
editare, compilare, depanare (corectare) erori, testare
reutilizare cod, modificarea facilă a aplicatiilor
Structura unui program in C++
Limbaj / Programare structurata

Concepte de baza ale programării structurate:

1. Reutilizarea codului = modulele implementate, depanate, testate si


utilizate pentru o anumita sarcină (aplicatie) se pot folosi (fără efort
de proiectare/implementare) si pentru realizarea altor sarcini, în alte
aplicații.
Structura unui program in C++
Limbaj / Programare structurata

Concepte de baza ale programării structurate:

2. Ascunderea / protejarea datelor = interacțiunea între exteriorul si


interiorul modulului este strict administrată de programator. Avem:
- date (locale) la care nu exista acces din exterior;
- date care sunt transmise din exterior către interior, care nu pot
fi modificate din modul;
- date transmise din exterior către interior a căror modificare se
va păstra in exteriorul modulului
- date transmise din interior spre exterior (rezultate)
Structura unui program in C++
Limbaj / Programare structurata

• Realizarea structurii modulare a unui program se face, în general,


prin intermediul funcțiilor (Obs.: Mai sunt si alte mecanisme, care se
vor discuta mai târziu)

Un program în C++ este alcătuit din una sau mai multe funcții, dintre
care, în mod obligatoriu, una este funcția principală, main().

Funcția = bloc de instrucțiuni care poate fi apelat din orice alta parte a
programului, inclusiv din interiorul funcției respective
Structura unui program in C++

Instrucţiune = specifică o acţiune sau operaţie ce trebuie executată de


program.

Toate instrucţiunile din C++ se termina cu ';'

Obs.:
C++ nu recunoaşte spaţiile libere, tab-urile şi sfârşitul de linie ca
terminator şi ca urmare nu exista constrângeri în ceea ce priveşte
poziţia unei instrucţiuni în linie. De asemenea, tot ca urmare a
acestei reguli, se pot plasa două sau mai multe instrucţiuni pe
aceeaşi linie.
Structura unui program in C++

Bloc de instrucțiuni → grup (înșiruire) de instrucțiuni care poate


cuprinde la rândul său alte blocuri de instrucțiuni.
→ începe cu acoladă deschisă '{'
→ se încheie cu acoladă închisă '}'.

→ poate să cuprindă variabile proprii (locale),


care sunt disponibile numai în interiorul acelui bloc
→ declararea variabilelor locale se face poate
face oriunde în bloc, însă este indicat să se facă la începutul
blocului, pentru a fi administrate mai ușor .
Structura unui program in C++
Declaratiile pot fi
Schema unui bloc de instrucțiuni: facute oriunde in
bloc

{
declaraţii de variabile locale blocului

instrucţiune 1;
instrucţiune 2;
……………………….

{ BLOC
}
……………………….
instrucţiune N;
}
Structura unui program in C++
Funcția = bloc de instrucțiuni căruia i se asociază un nume, are o lista
de parametrii (argumente) de apel si poate returna un rezultat.
→ poate fi apelată prin numele său de oriunde din program
Declaratiile pot
fi făcute
tip_returnat nume_funcţie (listă parametrii) oriunde in bloc
{
secvenţă de declaraţii variabile locale funcţiei

secvenţă de instrucţiuni şi blocuri de instrucţiuni

}
Structura unui program in C++
Structura unui program

directive de preprocesare (includere module antet)

declaraţii variabile globale


declaraţii tipuri de date, prototipuri de funcţii

main()
{
..................
}

fct_1()
{ ..................
}
........................
fct_N()
{ ..................
}
Structura unui program in C++

Funcția main() este funcția cu care începe execuția programului.

Execuția programului = parcurgerea succesiva, secvențială a


instrucțiunilor funcției main()

main = cuvânt cheie, rezervat.  Se poate folosi strict numai pentru


definirea funcției principale.
Elemente ale limbajului C++
Afisarea unui mesaj in C++

Exemplu: #include <iostream.h>


void main()
{
cout << “Primul meu mesaj” << endl;
}

Obs.:  cout este un obiect definit din clasa ostream


echivalent cu “ variabila definita din tipul de date ostream ”

 << este un operator binar (ca de ex.: a + b) în care conținutul


operandului drept este transferat operandul stâng (cout).

Sintaxa: cout << OperandDrept


Elemente ale limbajului C++
Citirea datelor in C++

Exemplu: #include <iostream.h>


void main()
{ int a;
cin >> a;
cout << “a = “ << a << endl;
}

Obs.:  cin este un obiect definit din clasa istream


echivalent cu “ variabila definita din tipul de date istream ”

 >> este un operator binar (ca de ex.: a + b) în care conținutul


operandului stâng (cin) este transferat în operandul drept.
Sintaxa: cin >> OperandDrept
Limbajul de programare C++
Directive de preprocesare
Preprocesarea  etapa de prelucrare la nivel de text a codului sursa
înaintea etapei de compilare (verificare sintaxă).
 există operații care se fac automat, precum
eliminarea spațiilor albe, eliminarea comentariilor, etc
 există operații forțate, introduse de programator
folosind directive de preprocesare = comenzi care
încep cu simbolul #
Limbajul de programare C++. Directive de preprocesare
#include Includerea fisierelor sursa

Sintaxa: #include < fisier_sursa >

#include " fisier_sursa "

Descriere:
- Efectul  includerea totala a fișierului sursa in locul directivei.
- Diferența intre cele doua forme este locul unde este căutat fișierul sursa:
< > fișierul este căutat in directoarele standard (specificate prin
opțiuni sau prin variabile de mediu in funcție de compilator).
" " fișierul este căutat întâi in directorul curent, apoi, daca nu este
găsit, in directoarele standard.
-> permite si specificarea caii complete către fișierul inclus; in
acest caz, nu se mai face căutarea si in directoarele standard.
Limbajul de programare C++. Directive de preprocesare
#include Includerea fisierelor sursa

Exemple:
// include fisierul iostream.h
// din directoarele standard
#include <iostream.h>
// include fiserul ListeSimple.h;
// cautarea se face intai in directorul curent
// apoi in directoarele standard
#include “liste.h”
// include fisierul Masive.cpp din directorul
// c:\Biblioteci; daca fisierul nu exista nu
// mai este cautat in alta parte si se genereaza
// o eroare de compilare
#include "C:\\Biblioteci\\Functii1.cpp"
Limbajul de programare C++. Directive de preprocesare
#include Includerea fisierelor sursa

Bibliotecile de funcții = colecție de funcții deja implementate și


compilate, pe care utilizatorul le poate folosi direct fără a mai fi
nevoie să le implementeze (reutilizare cod).
Codul obiect al funcțiilor se adaugă codului sursă propriu in
etapa de linkeditare

Fisiere header (extensie .h) = fisiere in care se declară (uneori se


definesc) prototipul funcțiilor, tipuri de date, etc., definite în
fișierele sursa ale bibliotecii.
Limbajul de programare C++. Directive de preprocesare
#include Includerea fisierelor sursa

Entitățile definite in biblioteci pot fi utilizate in programul propriu


numai după includerea lor folosind directiva de preprocesare
#include <nume_header>

Exemplu: #include <iostream>


int main()
{ cout << “Mesaj” << endl;
. . . . . . . . .
Limbajul de programare C++. Directive de preprocesare
#define Constante simbolice
Sintaxa: #define nume_macro sir_caractere

Descriere:
- Efectul  înlocuirea la nivel de text (înaintea compilarii) a șirului de
caractere nume_macro cu șirul de caractere
sir_caractere

Excepție: nu se înlocuiesc aparițiile din cadrul unor constante de tip sir,


in comentarii sau in componenta unui alt identificator
Limbajul de programare C++. Directive de preprocesare
#define Constante simbolice

Reguli:
-> pentru introducerea unui sir_caractere pe mai multe linii, se
va folosi caracterul \ la sfarsitul fiecarei linii ce urmeaza a fi
continuata
-> daca sir_caractere lipsește, atunci textul specificat
prin nume_macro va fi eliminat din codul sursa

-> o constanta simbolica poate fi redefinita în cadrul aceluiași fișier


folosind încă o data directiva define:
#define nume_macro alta_sir_caractere
Limbajul de programare C++. Directive de preprocesare
#define Constante simbolice

Reguli:
-> Valabilitatea unei definiri se încheie in următoarele cazuri:
• la sfârșitul fișierului sursa
• la invalidarea simbolului prin intermediul directive:

#undef nume_macro
Limbajul de programare C++. Directive de preprocesare
#define Constante simbolice
Exemplu: #include <iostream>
#define PI 3.14159
int main()
{ cout << “PI este: ”<< PI << endl;

Tema: Ce se întâmplă la compilare?


#include <iostream>
#define PI
int main()
{ int PI = 2;
cout << “PI este: ”<< PI << endl;
. . . . . . . . . . . . . . . . . .
Limbajul de programare C++. Directive de preprocesare
#define Constante simbolice
Tema: Sa se scrie codul dupa etapa de preprocesare:
#define DIM_VECTOR 20
#define TIP double
#define MESAJ "Calcul suma"
#define SEPARATOR cout \
<< "----------------" \
<< endl;
TIP suma(TIP v[], int n)
{ if (n > DIM_VECTOR)
cout << "dimensiunea este mai mare ca DIM_VECTOR" << endl;
TIP suma = 0;
for (int i = 0; i < n; i++)
suma += v[i];
return suma;
}
void main()
{ TIP v[DIM_VECTOR] = {1.1, 3.23, 6.62};
int n = 3;
cout << MESAJ;
SEPARATOR;
suma(v, 3);
}
Limbajul de programare C++. Directive de preprocesare
#define Macrodefiniții
Sintaxa: #define macro(parametrii) text_corp

Descriere: secvențe de cod parametrizate care sunt înlocuite in textul


sursa
- Efectul  Macrodefinițiile sunt expandate in textul sursa înainte de
compilare in doua etape:
• apelul macrodefiniției din codul sursa este înlocuit cu
corpul acesteia
• parametrii macrodefiniției sunt înlocuiți cu valorile primite
ca parametrii

Obs.: parametrii sunt nume fara tip


Limbajul de programare C++. Directive de preprocesare
#define Macrodefiniții

Exemplu:
#define MAX(x,y) (x>y ? x : y)
int a = 7, b = 10, c;
c = MAX(a,b);

Înainte de verificarea sintactica, ultima linie este modificata la nivel de


text, ajungând:

c = (a>b ? a : b);
Limbajul de programare C++. Directive de preprocesare
#define Macrodefiniții

Obs.: Trebuie să avem grijă cum alcătuim macrodefiniția și cum o apelam,


pentru ca înlocuirea sa fie corecta, altfel eroare nu este semnalată.

Exemplu:
#define PATRAT(x) x*x;
int x = 2, y;

y = PATRAT(x+5) // Care este rezultatul ??


Limbajul de programare C++. Directive de preprocesare
#define Macrodefiniții

Obs.: Trebuie să avem grijă cum alcătuim macrodefiniția și cum o apelam,


pentru ca înlocuirea sa fie corecta, altfel eroare nu este semnalată.

Exemplu:
#define PATRAT(x) x*x;
int x = 2, y;

y = PATRAT(x+5) // Care este rezultatul ??

Macrodefiniția va fi expandată la textul:


y = x+5*x+5;

Care va fi evaluată, ținând cont de ordinea operațiilor:


y = 2+5*2+5 = 2+10+5 = 17 !!!!
Limbajul de programare C++. Directive de preprocesare
#define Macrodefiniții

In cadrul corpului macrodefinițiilor de pot utiliza operatori speciali:


#param nume -> convertește parametrul nume într-o constantă de
tip sir de caractere
Exemplu / Temă: Sa se scrie codul expandat și ce afișează codul

#define ATENTIONARE(EXPRESIE) \
if (EXPRESIE) \
cerr << "ATENTIE: "#EXPRESIE << endl;
int main()
{ int nc = 0; // = 10 ?
ATENTIONARE(nc == 0)
. . . . . . . . .
Limbajul de programare C++. Directive de preprocesare
#define Macrodefiniții
In cadrul corpului macrodefinițiilor de pot utiliza operatori speciali:
##param nume -> operator de concatenare pentru simboluri; permite
crearea de simboluri noi (nume de funcții sau de variabile) pe baza
parametrului nume
Exemplu:
#define FUNCTIE_SUMA(TIP) \
TIP suma_##TIP(TIP vector[], int nrElem) \
{ TIP suma = 0; \
for (int i = 0; i < nrElem; i++) \
suma += vector[i]; \
return suma; \
}
Se vor genera functiile suma_int si suma_double, folosind sintaxa
FUNCTIE_SUMA(int)
FUNCTIE_SUMA(double)
Limbajul de programare C++. Directive de preprocesare
#if ... Compilare condiționată
Sintaxa: #if expresie_1
sectiune_1
#elif expresie_2
sectiune_2
. . . . . . . .
#else
sectiunie_n
#endif
 expresie_i este o expresie formata din constante sau simboluri
definite cu #define; expresia este considerata adevărată daca este
diferita de 0;
 părțile #elif si #else sunt opționale;
 sectiune_n reprezintă o secvență de cod de inclus in codul sursa
al programului in funcție de valoarea expresiei;
Limbajul de programare C++. Directive de preprocesare
#if ... Compilare condiționată
Exemplu:
#define DIM_VECTOR 21

int main()
{ int nc = 0;

#if defined DIM_VECTOR && DIM_VECTOR < 20


cout << "Suma vector " << DIM_VECTOR << " elemente";
#elif defined DIM_VECTOR && DIM_VECTOR < 30
cout << "Difer. vector " << DIM_VECTOR << " elemente";
#else
cout << "Vector prea mare" << endl;
return nc;
#endif
. . . . . . . . . . . . . . . .
Limbajul de programare C++. Directive de preprocesare
#if ... Compilare condiționată

 In cadrul expresiilor se poate folosi cuvântul cheie defined pentru a


testa daca un anumit simbol de preprocesare a fost definit
(de exemplu: #if defined DIM_VECTOR ... ).

 Daca se dorește doar testarea existentei unei constant simbolice se


pot folosi directivele:
#ifdef echivalentă cu #if defined

#ifndef echivalentă cu #if !defined


Limbajul de programare C++. Directive de preprocesare
#if ... Compilare condiționată
Cazuri de utilizare:
 Compilarea selective a unor porțiuni din codul sursa doar in pentru
versiunile de depanare:
int CalculSuma(int v[], int n)
{
#ifdef _DEBUG
cout << "Calcul suma pentru vector cu "
<< n << " elemente." << endl;
#endif
int suma = 0;
for (int i = 0; i < n; i++)
suma += v[i];
#ifdef _DEBUG
cout << "Suma este " << suma << endl;
#endif
return suma;
}
Limbajul de programare C++. Directive de preprocesare
#if ... Compilare condiționată
Cazuri de utilizare:
 Compilarea selective a unor porțiuni din codul sursa doar in pentru
versiunile de depanare:
Similar:
#define _DEBUG 1 // 0 pentru veriune release
. . . . . .
#if _DEBUG
cout<<“Bloc inclus in Sesiune de depanare<<endl;
#endif //DEBUG
Limbajul de programare C++. Directive de preprocesare
#if ... Compilare condiționată
Cazuri de utilizare:
 Evitarea dublei incluziuni a fisierelor header:
#ifndef LISTE_H
#define LISTE_H
#include "C:\\Liste\\Liste.h"
#endif //LISTE_H
Limbajul de programare C++. Directive de preprocesare
Teme:
Explicati urmatoarele programe:
A. #define MKSTR( x ) #x

int main ()
{
cout << MKSTR(HELLO C++) << endl;
return 0;
}
B. #define concat(a, b) a ## b
int main()
{
int xy = 100;
cout << concat(x, y);
return 0;
}
Limbajul de programare C++. Directive de preprocesare
Obs.: C++ oferă urmatoarele macrodefiniții predefinite:

Macro Descriere
__LINE__ Numarul liniei curente la momentul compilarii

__FILE__ Numele fisierului codului sursa la momentul compilarii

__DATE__ Conține sub forma de string month/day/year, data la care s-


a făcut translatarea de la cod sursa la cod obiect
__TIME__ Conține sub forma de string hour:minute:second ,
reprezentând ora la care s-a facut compilarea
Limbajul de programare C++. Directive de preprocesare
Obs.: C++ oferă urmatoarele macrodefiniții predefinite:
int main ()
{
cout << "Value of __LINE__ : " << __LINE__ << endl;
cout << "Value of __FILE__ : " << __FILE__ << endl;
cout << "Value of __DATE__ : " << __DATE__ << endl;
cout << "Value of __TIME__ : " << __TIME__ << endl;

return 0;
}
Structura unui program in C++
namespace = Spații de nume
 Un program folosește diverse nume (identificatori) asociate variabilelor,
funcțiilor, etc.
 Problema: Odata cu creșterea complexității aplicațiilor, cu
administrarea distribuită a dezvoltării acestora (echipe de
dezvoltatori), a aparut problema posibilității de a se suprapune
(defini, folosi) aceleași nume definite in diverse module de catre
diverși membri ai echiupelor de dezvoltare => dorința de izola spațiile
de definiție/acces la numele proprii, definite de fiecare programator,
de elimina posibilitățile de utilizare incrucișată.

 Soluția: utilizarea spațiilor de nume proprii, mecanismului de


protejare/ascundere a numelor definite de fiecare programator, sau
definite in biblioteci dezvoltate de altii și utilizate in aplicația proprie.
Structura unui program in C++
namespace = Spații de nume
Definirea spațiilor de nume proprii:
namespace numeSpatiu
{ definiții nume_proprii_Spatiului
}

Apelarea numelui din afara spațiului de nume se face prin operatorul de


rezoluție:
numeSpatiu::nume_propriu_Spatiului

Obs.: Definirea unui spatiu de nume fara nume:


namespace
{ definiții nume_proprii_Spatiului
}
include toate numele definite acolo in spatial global
Structura unui program in C++
namespace = Spații de nume
Includerea unui spațiu de nume (in intregime) in programul propriu =
toate numele spațiul de nume specificat sunt cunoscute, fără a mai
specifica spatiu de nume din care provin:

using namespace numeSpatiu

Se poate include un singur nume defint intr-un anumit spatiu de nume:

using numeSpatiu::nume_def_in_Spatiu
Structura unui program in C++
namespace = Spații de nume
Exemple:
#include <iostream.h>
void main()
{ int a;
std::cin >> a;
std::cout << “a = “ << a << std::endl;
}

sau:
#include <iostream.h>
using namespace std;
void main()
{ int a;
cin >> a;
cout << “a = “ << a << endl;
}
Structura unui program in C++
Exemple:
#include <iostream>
using namespace std;
int var = 98;
namespace Constante
{ const double PI = 3.14159;
const double E = 2.71828;
int var = 8;
double d = 72.9;
void TiparesteValori();
namespace Sp_Interior
{ int var = 2;
}
}
namespace
{ double d = 88.22;
}
Structura unui program in C++
int main()
Exemple: { cout << "d= " << d; //TEMA
cout << "\n(global) var = " << var;
#include <iostream> cout << "\n PI = " << Constante::PI
<< "\n E = "<< Constante::E
using namespace std;
<< "\n var = “ << Constante::var
int var = 98; << "\n Nume sp interior = "
<< Constante::Sp_Interior::var
namespace Constante
<< endl;
{ const double PI = 3.14159;
const double E = 2.71828; Constante ::TiparesteValori();
int var = 8; return 0;
double d = 72.9; }

void TiparesteValori(); void Constante::TiparesteValori()


{ cout << "\n In TiparesteValori():"
namespace Sp_Interior << “\n var = “ << var
{ int var = 2; << "\n PI = " << PI
} << "\n E = “ << E
} << "\n d = " << ::d //TEMA
<< "\n (global) var = “ << ::var
namespace << "\n Nume sp interior = "
{ double d = 88.22; << Sp_Interior::var << endl;
} }
Capitolul 9.Functii

9.1. Declararea funcţiei


9.2. Apelul funcţiei
9.3. Prototipul funcţiei
9.4. Parametri formali şi actuali
9.5. Variabile locale şi variabile globale
9.6. Variabile statice şi variabile automatice
9.7. Funcţii matematice
9.1. Declararea funcţiei

Unde:
• tip – reprezintă tipul valorii returnate de funcţie
• lista parametri formali – reprezintă variabilele
folosite in cadrul funcţiei împreună cu tipul
fiecaruia dintre ele, dar care au nume (denumiri)
generice – formale – care nu trebuie neapărat să
coincidă cu denumirile variabilele folosite în alte
funcţii sau chiar în funcţia principală.
9.1. Declararea funcţiei
• declaraţii variabile locale - reprezintă zona de
declarare a variabilelor folosite doar în cadrul corpului
funcţiei respective şi care nu se pot folosi în alte funcţii.
• instrucţiuni – reprezintă secvenţa de instrucţiuni care
formează funcţia considerată.

Observaţie:
Dacă lista parametrilor formali este vidă, atunci
reprezentarea declarării ei se face astfel:

tip nume_funcţie(void)
Capitolul 9. Functii

9.1. Declararea funcţiei


9.2. Apelul funcţiei
9.3. Prototipul funcţiei
9.4. Parametri formali şi actuali
9.5. Variabile locale şi variabile globale
9.6. Variabile statice şi variabile automatice
9.7. Funcţii matematice
9.2. Apelul funcţiei
2. Apelul funcţiei
Apelul unei funcţii se realizează astfel:

nume_functie(pa1, pa2, . . . ,pan);


Unde pa1, pa2, . . . ,pan, reprezintă lista parametrilor
actuali (reali) cu care se foloseşte funcţia respectivă.

De reținut:
Apelul poate să apară într-o instrucţiune de apel dacă
funcţia returnează sau nu o valoare.
Apelul unei funcţii poate să apară într-o expresie numai
dacă funcţia returnează o valoare.
Capitolul 9. Functii

9.1. Declararea funcţiei


9.2. Apelul funcţiei
9.3. Prototipul funcţiei
9.3. Prototipul funcţiei
3. Prototipul funcţiei
Pentru a funcţiona corect programul, orice
funcţie trebuie declarată anterior folosirii ei.
Declararea este necesară dacă funcţia este
definită în altă parte decât în fişierul în care este
apelată, sau dacă este definită în acelaşi fişier
dar în urma apelării.
Prototipul unei funcţii are următoarea formă
generală:
tip nume_funcţie(lista declaraţii parametri);
9.3. Prototipul funcţiei

Unde tip – reprezintă tipul valorii returnate


de funcţie:
• dacă nu se specifică, atunci implicit (automat)
este considerat de către compilatorul C/C++ ca
fiind tipul int.
• dacă tip este void atunci funcţia nu returnează
nici o valoare, şi deci poate acţiona ca o
procedură.
9.3. Prototipul funcţiei

• lista declaraţii parametri poate avea una din


următoarele patru forme:

1. În listă apar numai tipul de date al parametrilor


separaţi prin virgulă
2. În listă apar atât tipul de date al parametrilor cât şi
numele lor separate prin virgulă
3. Lista nu este specificată
4. Lista este vidă – void
9.3. Prototipul funcţiei
Exemplu:
Prezentăm în continuare declararea unei funcţii de
tip double care trei parametri: unul întreg, unul de tip
double şi al treilea de tip caracter, în cele patru forme
amintite mai sus:
1. double f(int, double, char);
2. double f(int i, double x, char c);
3. double f(); // nu înseamnă ca funcţia nu are
parametri, ci doar compilatorul nu va mai face, la apel,
verificarea tipului parametrilor
4. double g(void); // nu are parametri
Se recomandă folosirea formelor 1) sau 2).
9.3. Prototipul funcţiei

Problema 1:

Următorul program conţine prototipul şi


apoi definirea a două funcţii care ridică la cub o
valoare întreagă, respectiv o valoare reală:
9.3. Prototipul funcţiei

#include<iostream.h>
Prototipul funcției intreg_la_cub
int intreg_la_cub(int);
float real_la_cub(float); Prototipul funcției real_la_cub

int main() Apelul funcției intreg_la_cub


{
cout<<"\n 3 la cub este "<< intreg_la_cub(3);
cout<<"\n 5.2 la cub este "<< real_la_cub(5.2);
}
Apelul funcției real_la_cub
9.3. Prototipul funcţiei
Definiția funcției intreg_la_cub
int intreg_la_cub(int valoare)
{
return (valoare * valoare * valoare);
} Definiția funcției real_la_cub

float real_la_cub(float valoare)


{
return (valoare * valoare * valoare);
}
9.8. Probleme rezolvate cu ajutorul funcţiilor
9.8.1. Funcţii definite de utilizator (care returneaza
o valoare)
9.8.2. Funcţii de tip void
9.8.1. Funcţii definite de utilizator
Problema 1:
Enunţ:
Să se scrie câte o funcţie care să determine:
- cel mai mare divizor comun a două numere întregi date
ca parametri
- cel mai mic multiplu comun a două numere întregi date
ca parametri
Indicaţii:
- Pentru determinarea cmmdc se va folosi algoritmul lui
Euclid prin împărţiri repetate.
- Pentru determinarea cmmmc se va folosi relaţia dintre
cmmmc şi cmmdc:
cmmmc(a,b) = (a * b) / cmmdc(a,b)
9.8.1. Funcţii definite de utilizator
Exemplu: cmmdc(248,112)=?

a b a b a b

r r r

a b Cel mai mare divizor


cmmdc(248,112)=8 comun este ultimul rest
cmmmc(248,112)=3472 diferit de zero(!=0).
Valoarea din variabila b!
r
9.8.1. Funcţii definite de utilizator
#include <iostream.h>
int cmmdc(int a, int b)
{
int r;
r = a % b;
Se aplica teorema împărțirii cu rest:
while(r != 0){
 Variabila a reprezintă deîmpărțitul
a = b;  Variabila b reprezintă împărțitorul
b = r;  Variabila r reprezintă restul
r = a % b;
}
return b;
}
int cmmmc(int a, int b)
{
return( (a * b) / cmmdc(a, b) );
}
int main()
{
int x, y, divizor, multiplu;
cout<<"Dati primul numar "; cin>>x;
cout<<"Dati al doilea numar "; cin>>y;
divizor = cmmdc(x, y);
cout<<"C.m.m.d.c este "<<divizor<<"\n";
multiplu = cmmmc(x, y);
cout<<"C.m.m.m.c este "<<multiplu<<"\n";
}
9.8.1. Funcţii definite de utilizator
9.8.1. Funcţii definite de utilizator

Problema 2:
Enunţ:

Să se scrie o funcţie care să calculeze şi să


afişeze urma unei matrice pătratice date ca
parametru.
Urma unei matrice pătratice este suma
elementelor aflate pe diagonala principală.
9.8.1. Funcţii definite de utilizator

Exemplu:

Pentru n= 5 si valorile urmatoare:

Se obtine solutia 65 (1+7+13+19+25)


#include <iostream.h>
int urma(int a[10][10], int n)
{
Elementul aij cu i = j se
int suma = 0, i, j; afla pe diagonala
for( i = 1; i <= n; i++) principala a unei matrici
patratice
for(j = 1; j <= n; j++)
if( i == j ) suma = suma + a[i][j];
return suma;
}
9.8.1. Funcţii definite de utilizator

int main()
{
int a[10][10], i, j, n, u;
cout<<"Dati numarul de linii si coloane n = ";
cin>>n;
cout<<"Dati elementele matricei \n";
for(i=1; i<=n; i++)
for(j=1; j<=n; j++)
cin>>a[i][j];
9.8.1. Funcţii definite de utilizator
cout<<"Matricea data este: \n";
for(i=1; i<=n; i++)
{
for(j=1; j<=n; j++) {
cout.width(4);
cout<<a[i][j];
}
cout<<"\n";
}
u = urma(a,n);
cout<<"Urma matricei este "<<u;
}
9.8. Probleme rezolvate cu ajutorul funcţiilor
9.8.1. Funcţii definite de utilizator
9.8.2. Funcţii de tip void
9.8.2. Funcţii de tip void

Problema 1:
Enunţ:
Să se scrie o funcţie care să rezolve o
ecuaţie de gradul II, unde coeficienţii ecuaţiei
sunt daţi ca parametri.
Funcţia principală va citi coeficienţii a două
ecuaţii şi va afişa soluţiile pentru fiecare
ecuaţie în parte.
#include <iostream.h>
#include <math.h>
void ecuatie(float a, float b, float c)
{
float delta, x1, x2;
delta = b * b – 4 *a* c;
if( delta < 0 ) cout<<"ecuatia are solutii complexe";
else
if( delta == 0 )
{
cout<<"ecuatia are doua radacini egale\n";
x1 = x2 = -b / ( 2 * a );
cout<<"x1= "<<x1<<"\n";
cout<<"x2= "<<x2<<"\n";
}
else
{
x1 = ( -b + sqrt(delta) ) / ( 2 * a );
x2 = ( -b - sqrt(delta) ) / ( 2 * a );
cout<<"ecuatia are urmatoarele radacini: \n";
cout<<"x1= "<<x1<<"\n";
cout<<"x2= "<<x2<<"\n";
}
return;
}
int main()
{
int a1, b1, c1, a2, b2, c2;
cout<<"Dati coeficientii primei ecuatii \n";
cout<<"Dati coeficientul a1 "; cin>>a1;
cout<<"Dati coeficientul b1 "; cin>>b1;
cout<<"Dati coeficientul c1 "; cin>>c1;
ecuatie(a1, b1, c1); Instructiune de apel
cout<<"\n";
cout<<"Dati coeficientii celei de-a doua ecuatie \n";
cout<<"Dati coeficientul a2 "; cin>>a2;
cout<<"Dati coeficientul b2 "; cin>>b2;
cout<<"Dati coeficientul c2 "; cin>>c2;
ecuatie(a2, b2, c2); Instructiune de apel
}
9.8.2. Funcţii de tip void
9.8.2. Funcţii de tip void
Problema 2:
Enunţ:
Se consideră un vector x cu n numere întregi. Să
se verifice dacă x reprezintă o mulţime.
Se vor construi:
– funcţie care să citească vectorul de la tastatură
– o funcţie care să afişeze vectorul
– şi a treia funcţie care să tipărească mesajul
“Vectorul dat reprezinta o multime” sau
“Vectorul dat NU reprezinta o multime”, în caz
contrar.
#include <iostream.h>
int x[100], n;

void citire(int x[100], int n)


{ Functia nu returneaza
int i; nici o valoare
cout<<"Dati elem. vectorului \n";
for(i=1; i<=n; i++)
cin>>x[i];
return;
}
void multime(int x[100],int n)
{ Fiecare element x[i]
int i, j, verific = 1; (i=1,2,…,n-1) este verificat
for(i = 1; i < n; i++) cu toate celelalte
for(j = i + 1; j <= n; j++) elemente x[j], cu j=i+1,…,n
if( x[i] == x[j] ) verific = 0;
if( verific == 1 )
cout<<"Vectorul reprezinta o multime";
else
cout<<"vectorul NU reprezinta o multime";
return;
}
void afisare(int x[100],int n)
{
int i;
cout<<"Vectorul este \n";
for(i=1; i<=n; i++)
cout<<x[i]<<" ";
cout<<"\n";
return;
}
9.8.2. Funcţii de tip void

int main()
{
cout<<"Dati n = ";
cin>>n;
citire(x,n);
afisare(x,n); Instructiuni de apel
multime(x,n);
}
9.8.2. Funcţii de tip void
Functii in C++

Functiile sunt instrumete ale limbajului de programare C++ care permit modularizarea programelor.
Atunci cand se observa ca o anumita secventa de instructiuni se poate repeta de mai multe ori in
cadrul unui program, atunci aceasta se inglobeaza in cadrul unei functii, care urmeaza a se apela in
cadrul programului principal ori de cate ori va fi nevoie.

Programul principal este reprezentat tot de o functie: functia main().

Utilizarea functiilor in cadrul unui program presupune cunoasterea urmatoarelor concepte:

• declararea functiei
• prototipul functiei
• apelul functiei in cadrul programului principal sau in cadrul altei functii
• parametrii formali ai functiei
• parametrii efectivi ai functiei
• variabile locale vs variabile globale

Declararea unei functii

Pentru ca o functie sa poata fi utilizata (apelata) in cadrul unui program, este nevoie ca aceasta sa fie
declarata.

Prin declararea unei functii se specifica:

• tipul functiei
• numele functiei
• lista de parametri formali

Exemplu:

int suma(int a, int b)


{
...
}

Explicatii:

• int - reprezinta tipul functiei suma


• suma - reprezinta numele functiei
• int a, int b - reprezinta parametrii (formali) ai functiei
• { ... } - reprezinta corpul functiei

Tipul functiei poate fi:

• void
• unul din tipurile de baza ale variabilelor: char, int, float, etc.

Numele functiei este reprezentat de un sir de caractere alfanumerice prin intermediul careuia functia
va fi recunoscuta pe parcursul progrmului
Lista de parametri formali este constituita dintr-o lista de variabile reprezentand valorile care vor fi
preluate din programul principal si transmise functiei. Parametrii formali sunt niste copii sau alias-uri
ale parametrilor efectivi din apelul functiilor.

Prototipul functiei

In anumite cazuri, este necesar sa lucram cu mai multe functii care se apeleaza reciproc. In aceste
cazuri se se declara prototipul functiilor utilizate, care introduc tipul si numele functiilor, precum si
parametrii cu care acestea opereaza. In felul acesta, atunci can o functie apeleaza pe alta, aceasta va
sti care sunt tipul, numele si parametrii functiei apelate

Prototipul functiei este amplasat inaintea functiei principale, acesta mai putand fi denumit si declaratia
forward a functiei in sine, aceasta fiind declarata dupa functia main.

Prototipul fiunctiei, spre deosebire de declaratia finctiei, se termina cu (;), iar lista parametrilor formali
este optionala, fiind necesar, in schimb, sa se specifice tipul acestora.

Exemplu:

int suma(int, int);

Explicatii:

• int - reprezinta tipul functiei suma


• suma - reprezinta numele functiei
• int, int - reprezinta tipul parametrilor (formali) ai functiei

Apelul unei functii

Prin apelul functiei se specifica:

• numele functiei
• lista de parametri efectivi - constituita dintr-o lista de variabile reprezentand valorile din
programul principal care vor fi transmise functiei pentru a fi prelucrate in scopul producerii unui
anumit rezultat.

Exemplul 1: Sa se realizeze suma patratelor a doua numere introduse de la tastatura, utilizandu-se


apelul unor functii.

1 #include <iostream> a=2


2 using namespace std; b=3
3 int a, b, s; Primul numar la patrat este: 4
4 int suma (int x, int y) Al doilea numar la patrat este: 9
5 { Suma patratelor numerelor este: 13
6 int rez=x+y;
7 return (rez);
8 }
9 void patrat(int *z)
10 {
11 *z = *z * *z;
12 }
13 int main()
14 {
15 cout<<"a=";cin>>a;
16 cout<<"b=";cin>>b;
17 patrat(&a);
18 patrat(&b);
19 cout<<"Primul numar la patrat este: "<<a<<endl;
20 cout<<"Al doilea numar la patrat este: "<<b<<endl;
21 cout<<"Suma patratelor numerelor este: "<<suma(a,b);
22 }

Observatii privind parametrii functiei:

• Parametrii formali
o se gasesc la nivelul declaratiei functiilor: int suma (int x, int y);
o preiau valorile date in apelul functiei: suma(a,b) prin intermediul parametrilor efectivi:
valoarea data parametrului efectiv: a (in cadrul programului principal: cin>>a;) - este
transmisa parametrului formal: x, iar valoarea data parametrului efectiv: b (in cadrul
programului principal: cin>>b;) - este transmisa parametrului formal: y
o parametrii formali pot fi considerati niste copii sau alias-uri ale parametrilor efectivi.

• Parametrii efectivi
o se gasesc la nivelul apelului functiei: suma(a,b);
o sunt preluati din cadrul programului apelant (in cazul nostru chiar functia main -
cin>>a; respectiv cin>>b;), valorile acestora transmitandu-se parametrilor formali.

Explicatii asupra exemplului 1:

• int suma (int x, int y)


{
int rez=x+y;
return (rez);
}

reprezinta declaratia functiei suma, in care:

o int suma (int x, int y) - declara functia de tip int avand numele suma, respectiv un
numar de 2 parametri formali de tip int: x si y. Acestia vor prelua valorile variabilelor a
si b transmise in cadrul apelului functiei:
cout<<"Suma patratelor numerelor este: "<<suma(a,b);

o {
int rez=x+y;
return (rez);
}

reprezinta corpul functiei suma - locul unde se prelucreaza (insumeaza) valorile date
(prin variabilele / parametrii formali x, respectiv y si se returneaza rezultatul - rez -
catre programul apelant: functia main.

• void patrat(int *z)


{
*z = *z * *z;
}

reprezinta declaratia functiei patrat, in care:

o void patrat(int *z) - declara functia de tip void avand numele patrat, respectiv un
parametru formal de tip pointer de tip intreg: *z.
o {
*z = *z * *z;
}

reprezinta corpul functiei patrat - locul unde se realizeaza ridicarea la patrat a


variabilei date prin parametrul formal *z si se returneaza rezultatul progrmului apelant
(functiei main).

• int main() - reprezinta programul principal

• se citesc valorile variabilelor a si b carora li se atribuie valorile 2, respectiv 3

• patrat(&a); respectiv patrat(&b); - reprezinta apelul functiei patrat, utilizate pentru a prelucra
cele 2 valori ale celor doua variabile: a si b

• se afiseaza noile valori ale variabilelor in urma apelurilor functiei patrat

• suma(a,b); - reprezinta apelul functiei suma, utilizate pentru calcularea sumei valorilor sticate
in variabilele a si b

Observatie: In cadrul exemplului de mai sus, apelul functiei patrat este un apel prin referinta, in timp
ce apelul functiei suma este un apel prin valoare.

Exemplul 2: Sa se realizeze suma patratelor a doua numere introduse de la tastatura, urmarindu-se


prototipul, declaratia, respectiv apelul unor functii.

1 #include <iostream>
2 using namespace std; a=2
3 int a, b, s; b=3
4 int suma (int, int); Primul numar la patrat este: 4
5 void patrat(int *); Al doilea numar la patrat este: 9
6 int main() Suma patratelor numerelor este: 13
7 {
8 cout<<"a=";cin>>a;
9 cout<<"b=";cin>>b;
10 patrat(&a);
11 patrat(&b);
12 cout<<"Primul numar la patrat este: "<<a<<endl;
13 cout<<"Al doilea numar la patrat este: "<<b<<endl;
14 cout<<"Suma patratelor numerelor este: "<<suma(a,b);
15 }
16 int suma (int x, int y)
17 {
18 int rez=x+y;
19 return (rez);
20 }
21 void patrat(int *z)
22 {
23 *z = *z * *z;
24 }

Explicatii:

• int suma (int, int);


o reprezinta prototipul functiei suma.
o nu este obligatoriu ca numele parametrilor formali sa fie prezenti la nivelul prototipului
functiei.
o la nivelul prototipului se specifica tipul finctiei (int), tipul, respectiv numarul
parametrilor: 2 (int, int)

• void patrat(int *);


o reprezinta prototipul functiei patrat.
o nu este obligatoriu ca numele parametrilor formali sa fie prezenti la nivelul prototipului
functiei.
o la nivelul prototipului se specifica tipul finctiei (void), tipul, respectiv numarul
parametrilor: 1 (int *)
o remarca: in cazul functiei patrat, parametrul este un pointer la tipul int.

• int main() - reprezinta programul principal

• se citesc valorile variabilelor a si b carora li se atribuie valorile 2, respectiv 3

• patrat(&a); respectiv patrat(&b); - reprezinta apelul functiei patrat, utilizate pentru a prelucra
cele 2 valori ale celor doua variabile: a si b

• se afiseaza noile valori ale variabilelor in urma apelurilor functiei patrat

• suma(a,b); - reprezinta apelul functiei suma, utilizate pentru calcularea sumei valorilor sticate
in variabilele a si b

• int suma (int x, int y)


{
int rez=x+y;
return (rez);
}

reprezinta declaratia functiei suma, in care:

o int suma (int x, int y) - declara functia de tip int avand numele suma, respectiv un
numar de 2 parametri formali de tip int: x si y. Acestia vor prelua valorile variabilelor a
si b transmise in cadrul apelului functiei:
cout<<"Suma patratelor numerelor este: "<<suma(a,b);

o {
int rez=x+y;
return (rez);
}

reprezinta corpul functiei suma - locul unde se prelucreaza (insumeaza) valorile date
(prin variabilele / parametrii formali x, respectiv y si se returneaza rezultatul - rez -
catre programul apelant: functia main.

• void patrat(int *z)


{
*z = *z * *z;
}

reprezinta declaratia functiei patrat, in care:


o void patrat(int *z) - declara functia de tip void avand numele patrat, respectiv un
parametru formal de tip pointer de tip intreg: *z.

o {
*z = *z * *z;
}

reprezinta corpul functiei patrat - locul unde se realizeaza ridicarea la patrat a


variabilei date prin parametrul formal *z si se returneaza rezultatul progrmului apelant
(functiei main).

Variabile globale vs variabile locale

Asa cum am mai mentionat si in cadrul capitolului Variabile si tipuri de date, pentru a rezolvarea
problemelor avem nevoie de variabile, in functie de locul in care sunt declarate, acestea clasificandu-
se in:

• variabile globale
• variabile locale

Variabilele globale sunt variabilele declarate in afara functiei main, si sunt "recunoscute" atat in
programul principal cat si in functiile adiacente acestuia. Variabilele globale sunt initailizate in
momentul declararii cu valoarea 0.

Variabilele locale sunt variabilele declarate in interiorul unei functii (inclusiv in nteriorul functiei main)
si sunt "recunoscute" doar la nivelul functiilor in care acestea au fost declarate. In absenta unei
initializari prealabile, valoarea unei variabile locale este una aleatoare, aflata la momentul respctiv la
adresa de memorie corespunzatoare variabilei declarate.

Exemplul 3: Sa se realizeze suma a doua numere introduse de la tastatura, utilizandu-se apelul


unei functii.

1 #include <iostream>
2 using namespace std; 4286094
3 int a, b; 0
4 int suma (int x, int y) 0
5 { a=2
6 int rez=x+y; b=3
7 //cout<<s; Suma numerelor este: 5
8 return (rez); 4286094
9 }
10 int main()
11 {
12 int s;
13 cout<<s<<endl;
14 cout<<a<<endl;
15 cout<<b<<endl;
16 cout<<"a=";cin>>a;
17 cout<<"b=";cin>>b;
18 cout<<"Suma numerelor este: "<<suma(a,b)<<endl;
19 //cout<<rez;
20 cout<<s<<endl;
21 }

Explicatii:

• Varibilele a si b sunt variabile globale, recunoscute pe parcursul intregului program;


• Variabila s este o variabila locala functiei main si este recunoscuta doar pe parcursul acesteia.
Daca incercam sa-i afisam valoarea in cadrul altei functii (suma), obtinem eroare la compilare.
• Variabila rez este o variabila locala functiei suma si este recunoscuta doar pe parcursul
acesteia. Daca incercam sa-i afisam valoarea in cadrul altei functii (int), obtinem eroare la
compilare.
MATHCAD
Proiectare interactivă
Prelucrarea datelor experimentale obţinute în
laborator
Cuprins

CUPRINS

Generalităţi 1
Cap.2 Conţinutul unui program 4
2.1. Spaţiul de lucru în Mathcad 4
2.2. Regiuni 6
2.3. Completarea spaţiilor text 9
Cap.3 Managementul foilor de lucru 10
3.1. Foi de lucru şi modele 10
3.2. Modificarea aspectului foilor de lucru 12
3.3. Dimensionarea foilor de lucru 13
3.4. Protecţia spaţiilor pe foia de lucru 16
3.5. Superlegături 18
3.6. Printarea şi expedierea foilor de lucru 19
Cap.4 Lucrul cu structuri text 21
4.1. Inserarea textelor 21
4.2. Proprietăţile structurilor text 23
4.3. Stilul structurilor text 24
4.4. Ecuaţii în structuri text 26
4.5. Căutarea şi înlocuirea în structurile text 27
Cap.5 Lucrul cu structuri matematice 29
5.1. Calcule simple 29
5.2. Crearea ecuaţiilor simple în Mathcad 30
5.3. Inserarea numerelor, variabilelor, vectorilor, matricilor,
31
şirurilor de caractere, operatorilor
5.4. Crearea expresiilor matematice 37
5.5. Editarea expresiilor matematice 40
5.6. Calcule iterative 43
5.7. Stilul elementelor matematice 46
Cap.6 Operatori 48
6.1. Operatori booleeni 48
6.2. Operatori pentru vectori şi matrici 49
6.3. Operatori tip sumă şi produs 51
6.4. Operatori pentru derivare numerică 52
6.5. Operatori pentru integrare numerică 53
Cap.7 Funcţii 56
I
MATHCAD - proiectare interactivă şi prelucrarea datelor experimentale

7.1. Funcţii matematice 56


7.2. Transformate Fourier 60
7.3. Funcţii pentru variabile tip vector şi matrice 61
7.4. Rezolvarea şi optimizarea funcţiilor 62
7.5. Statistică, probabilităţi şi analiza datelor 64
7.6. Rezolvarea ecuaţiilor diferenţiale 68
7.7. Funcţii diverse 69
Cap.8 Vectori, matrici, tablouri de date 71
8.1. Tablouri de date 71
8.2. Accesarea tablourilor de date 73
8.3. Afişarea tablourilor de date 73
8.4. Lucrul cu tablouri de date 74
Cap.9 Formatarea rezultatelor 76
9.1. Unităţi de măsură 76
9.2. Formatarea rezultatelor 77
9.3. Metode de calcul în Mathcad 79
9.4. Mesaje de eroare 80
Cap.10 Lucrul cu grafice şi obiecte 81
10.1. Inserarea graficelor 81
10.2. Formatarea graficelor 84
10.3. Reprezentarea grafică a expresiilor matematice 88
10.4. Inserarea imaginilor 90
10.5. Inserarea obiectelor 92
10.6. Animaţia 93
Cap.11 Programarea în Mathcad 95
11.1. Programe simple 95
11.2. Instrucţiunea IF 96
11.3. Bucle 97
11.4.Controlul execuţiei unui program 98
11.5. Subrutine 99

II
Generalităţi

GENERALITĂŢI

Mathcad este un instrument software profesional, produs al firmei


MathSoft, dedicat efectuării de calcule matematice cu aplicabilitate mai ales
în tehnică.
Ceea ce evidenţiază Mathcad-ul în mulţimea programelor de acest
tip este deosebita sa elasticitate în manipularea componentelor matematice
(date şi formule), elasticitate dublată de o excepţională accesibilitate în
utilizare. Aceste calităţi situează Mathcad-ul la graniţa dintre limbajele de
programare şi programele de calcul tabelar.
Spre deosebire de alte programe de calcul, care impun introducerea
ecuaţiilor prin utilizarea unor simboluri convenţionale specifice, Mathcad
permite utilizarea sintaxei folosită în matematică.
Pentru exemplificare este prezentată o ecuaţie scrisă în sintaxa
simbolică specifică programelor de calcul:

x = (- B + SQRT (B**2 - 4*A*C)) / (2*A) (1.1)

şi în sintaxa utilizată de MATHCAD:

− b + b2 − 4 ⋅ a ⋅ c (1.2)
x=
2⋅a

În Mathcad calculele pot efectuate atât simbolic cât şi numeric,


putând fi însoţite de texte sau de reprezentări grafice 2D sau 3D.
Prin oferirea unui mediu de lucru integrat, conţinând pe aceeaşi
foaie de lucru ecuaţii, text şi elemente grafice, Mathcad-ul face posibilă atât
efectuarea de calcule complexe rapid şi uşurinţă, cât şi prezentarea
rezultatelor într-o formă accesibilă.
Programul Mathcad este disponibil în trei variante:
- Mathcad Professional edition, conţine toate facilităţile de calcul,
reprezentând standardul industrial pentru matematici aplicate în domeniul
tehnic, oferind rezultate de nivel profesional. Sunt accesibile şi o serie de
facilităţi referitoare la accesul simultan, în echipe de lucru.

1
MATHCAD - proiectare interactivă şi prelucrarea datelor experimentale

- Mathcad Professional Academic edition, este destinat mediului


academic, dispunând în principiu de aceleaşi facilităţi şi performanţe de
calcul. Nu este accesibil lucrul simultan.
- Mathcad Standard edition, este destinat utilizării uzuale, în
aplicaţii obişnuite, fiind astfel structurat încât să permită lucrul rapid şi uşor
atunci când calculatoarele ştiinţifice, şi celelalte instrumente de calcul
specifice nu sunt accesibile.
O scurtă prezentare a facilităţilor programului Mathcad şi a
repartizării acestora pe ediţii este făcută în tabelul 1.1

Tabelul 1.1
Pro şi
Facilitatea oferită Standard
Academic
Calcul matematic
- calcul vectorial şi matricial * *
- rezolvarea ecuaţiilor şi sistemelor de
ecuaţii liniare, neliniare şi diferenţiale * *
- rezolvarea ecuaţiilor şi sistemelor de
ecuaţii cu derivate parţiale
*
- calcul derivaţional şi integral * *
- calcul polinomial * *
- evaluarea funcţiilor Airy, Bessel-Kelvin,
Bessel sferice etc. *
- calcul statistic * *
- calcul de optimizare * *
- recunoaşterea diferitelor sisteme de
unităţi de măsură (SI, MKS, CGS) * *
- livrarea rezultatelor în format zecimal,
binar, octal sau hexazecimal
* *
- lucrul cu seturi de date * *
Import - export
- introducerea ecuaţiilor în sintaxă
matematică, cu interfaţă vizuală * *
- interoperabilitate cu alte programe de calcul
matematic (Excel, Matlab etc.) *
- utilizarea automatizărilor bazate pe OLE
pentru dezvoltarea aplicaţiilor complexe *

2
Generalităţi

Grafică
- crearea reprezentărilor grafice 2D şi 3D * *
- crearea animaţiilor * *
- crearea reprezentărilor grafice 3D multiple * *
- înalt grad de personalizare a reprezentărilor * *
grafice

Tabelul 1.1 (continuare)


Pro şi
Facilitatea oferită Standard
Academic
Procesare text
- formatare complexă cu Header şi Footer * *
- definirea de zone ascunse sau protejate cu parole *
- liste numerotate sau indexate * *
- utilităţi Find şi Replace
- inserarea obiectelor grafice obţinute în alte
* *
aplicaţii * *

Programare
- crearea de librăriilor de funcţii personale *
- utilizarea procedurilor iterative, recursive şi
condiţionale *
- definirea structurilor complexe de date (tablorui,
string-uri etc.)
*
- importarea funcţiilor scrise în C sau C++ *
- crearea sintaxelor bazate pe simboluri personale *

3
MATHCAD - proiectare interactivă şi prelucrarea datelor experimentale

CAPITOLUL 2
CONŢINUTUL UNUI PROGRAM

2.1. Spaţiul de lucru în Mathcad

Atunci când este accesat programul Mathcad, utilizatorului i se


prezintă o fereastră (figura 2.1) în care se pot distinge elementele
caracteristice aplicaţiilor ce rulează sub Windows: bară de stare, bară de

Fig. 2.1
Fereastra de lucru pentru Mathcad
meniuri derulante, bare de unelte şi zona de lucru - corespunzătoare unei foi
de lucru.
Barele de unelte conţin butoane ce permit accesarea grafică a unor
serii de comenzi ale programului, ele putând fi vizibile sau invizibile.
Comenzile respective sunt organizate în mai multe categorii, fiecăreia
corespunzându-i o bara de unelte unică. Cele mai importante sunt:

4
Conţinutul unui program

- bara Standard, amplasată imediat sub bara de meniuri, conţinând


comenzile referitoare la gestionarea documentelor, utilizarea imprimantei,
utilizarea clipboard-ului etc.;
- bara Formatting, situată sub bara Standard, conţinând comenzile
referitoare la alegerea tipului şi mărimii fonturilor, alinierea textului, liste
etc.;
- bara Math, amplasată pe marginea din stânga a ferestrei,
conţinând o serie de butoane cu ajutorul cărora se pot activa-dezactiva restul
barelor de unelte (Arithmetic - pentru operaţii matematice uzuale,
Evaluation - pentru operaţii logice, Graph -
pentru crearea graficelor, Matrix - calcul
matricial, Calculus - calcul diferenţial şi
integral, sume, produse şi limite,
Programming - pentru crearea programelor,
Greek - alfabetul grecesc, Symbolic - pentru
calcul simbolic cu ajutorul cuvintelor-cheie).
Toate barele de unelte pot fi activate
(făcute vizibile) cu ajutorul comenzilor
corespunzătoare cuprinse în meniul View,
submeniul Toolbars (figura 2.2).
Barele Standard şi Formatting pot Fig. 2.2
personalizate de utilizator, prin adăugarea sau Activarea barelor de unelte
eliminarea butoanelor, folosind. comanda
Customize ce este accesibilă în meniul apărut la executarea unui clic pe bara
respectivă (cu butonul din dreapta mouse-ului). În fereastra apărută la
activarea comenzii
utilizatorul poate organiza
bara după dorinţă,
folosind butoanele Add şi
Remove (figura 2.3). De
remarcat că numărul
comenzilor este limitat,
iniţial fiind toate cuprinse
în bară.
Mathcad este Fig. 2.3
dotat cu un sistem de Fereastra de organizarea barelor de unelte
ajutor manifestat sub
forma unor scurte explicaţii (tool-tip) ce apar atunci când cursorul mouse-
ului este ţinut câteva secunde pe un buton din barele de unelte. În cazul
5
MATHCAD - proiectare interactivă şi prelucrarea datelor experimentale

comenzilor amplasate în meniurile derulante, indicaţiile respective apar în


bara de stare.
Barele de unelte pot fi amplasate oriunde în cadrul ferestrei
programului, prin "apucarea" din zonele dintre butoane (dacă sunt aliniate pe
marginile ferestrei) sau din zona barei de titlu (dacă sunt în spaţiul de lucru).
Barele principale (Standard, Formatting şi Math) sunt autoformabile, ele
aliniindu-se automat la marginile ferestrei de lucru în
timp ce restul barelor de unelte au formă fixă, ele putând
fi amplasate numai în cadrul spaţiului de lucru. Mathcad-
ul reţine amplasarea barelor la închiderea sesiunii de
lucru, la următoarea sesiune ele având aceeaşi poziţie.
Mathcad-ul permite deschiderea ferestrelor
multiple, permiţând astfel utilizarea mai multor foi de
Fig. 2.4 lucru simultan. Numărul acestora este limitat doar de
Comenzi pentru resursele sistemului de calcul folosit. Comenzile pentru
gestionarea
gestionarea ferestrelor sunt amplasate în meniul Window
ferestrelor de lucru
(figura 2.4), acestea permiţând aşezarea ferestrelor unele
sub altele (Cascade), vizibile toate aliniate orizontal sau vertical (Tile
Horizontal respectiv Tile Vertical). În acelaşi meniu apar şi numele
documentelor deschise simultan, prin indexarea acestora ele fiind aduse în
zona de lucru a ferestrei principale.

2.2. Regiuni

Mathcad-ul permite inserarea ecuaţiilor şi a textului oriunde în


cadrul foii de lucru. Orice ecuaţie, fragment de text sau element grafic este
considerat o "regiune". Din acest punct de vedere o foaie de lucru în
Mathcad este o colecţie de astfel de regiuni.
Pentru crearea unei regiuni utilizatorul trebuie să execute clic cu
butonul din stânga al mouse-ului în locul de unde doreşte să înceapă aceasta.
Acest loc rămâne marcat cu o cruciuliţă roşie (ce poate fi deplasată cu
ajutorul tastelor de direcţionare - săgeţi), de aici începând introducerea
textului sau a elementelor de calcul matematic (figura 2.5).
Pentru specificarea tipului de regiune dorit sunt disponibile
comenzile Math Region şi Text Region, amplasate în meniul Insert. Implicit
Mathcad-ul recunoaşte automat elementele de tip matematic, creând o
regiune corespunzătoare, pentru elementele de tip text fiind necesară
specificarea expresă prin activarea comenzii respective.

6
Conţinutul unui program

a) b) c)

Fig. 2.5
Regiuni în Mathcad
a) început de regiune; b) regiune tip text; c) regiune tip calcul matematic

Regiunile sunt delimitate prin contururi dreptunghiulare trasate cu


linie continuă, acestea fiind vizibile doar în momentul în care o regiune este
editată. Pentru editarea unei regiuni este
suficientă executarea unui clic cu butonul
din stânga mouse-ului în zona regiunii
respective, după care apar conturul şi
elementele specifice tipului de regiune
(figura 2.6). Asupra regiunilor editate pot
fi operate o serie de modificări de formă
Fig. 2.6
(numai la regiunile de tip text) şi poziţie.
Regiune editată
Pentru modificarea formei se
poziţionează cursorului mouse-ului în punctele de
redimensionare şi în momentul când acesta se
transformă într-o săgeată cu două capete, cu
butonul din stânga apăsat, se "trage" conturul
regiunii în direcţia dorită. Pentru modificarea
poziţie regiunii în spaţiul de lucru se poziţionează
cursorul mouse-ului oriunde pe conturul regiunii
(în afară de punctele de redimensionare) şi în
momentul când acesta se transformă într-o mână,
cu butonul stâng apăsat, se poate muta regiunea în
noua poziţie.
Asupra regiunilor pot fi aplicate şi operaţii
ce implică utilizarea Clipboard-ului (memoria Fig. 2.7
temporară oferită de sistemul de operare): "tăierea" Amplasarea comenzilor
(Cut) - mutarea regiunii din spaţiul de lucru în pentru utilizarea
Clipboard; copierea (Copy) regiunii în Clipboard Clipboard-ului

7
MATHCAD - proiectare interactivă şi prelucrarea datelor experimentale

şi, respectiv, "lipirea" (Paste) - inserarea regiunii aflate în Clipboard în


spaţiul de lucru. Pentru executarea acestor operaţii este necesară selectarea
regiunii (regiunilor) respective şi acţionarea comenzilor corespunzătoare.
Aceste comenzi sunt accesibile fie din meniul Edit, situat în bara de meniuri,
fie prin butoanele amplasate în bara de unelte, fie din meniul contextual ce
apare în momentul executării unui clic (cu butonul din dreapta al mouse-
ului) pe regiunea selectată (figura 2.7). De remarcat că Clipboard-ul are o
singură intrare, la introducerea unei noi informaţii cea conţinută anterior
fiind pierdută irecuperabil, ca atare comanda Cut trebuie folosită cu atenţie.
Selectarea unei regiuni poate fi făcută prin două metode: fie prin
executarea unui clic cu butonul din stânga mouse-ului în zona acesteia, fie
prin încadrarea ei într-o fereastră trasată cu butonul respectiv apăsat. Efectul
obţinut este similar cu cel de la editarea regiunii fiind posibile şi operaţiile
descrise la paragraful respectiv.
Pentru selectarea mai multor regiuni simultan sunt disponibile mai
multe metode:
- încadrarea regiunilor respective într-o fereastră trasată cu butonul
din stânga mouse-ului apăsat;
- executarea unui clic cu butonul din stânga mouse-ului pe fiecare
regiune şi în acelaşi timp ţinând tasta control (Ctrl) apăsată - vor fi selectate
numai regiunile alese;
- executarea unui clic cu butonul din stânga mouse-ului pe prima,
respectiv ultima, regiune din seria celor de selectat şi în acelaşi timp ţinând
tasta Shift apăsată - vor fi selectate toate regiunile cuprinse între cele două.
În cazul selectării mai multor regiuni acestea vor apare cu un contur
din linie întreruptă, toate operaţiile cu Clipboard-ul fiind aplicate simultan
tuturor. Mai mult regiunile selectate pot fi mutate în spaţiul de lucru, la
poziţionarea cursorului mouse-ului pe una dintre ele acesta transformându-
se într-o mănă.
De remarcat că în cazul selectării mai multor regiuni acestea îşi
păstrează poziţia şi distanţa relativă în timpul aplicării operaţiilor specifice,
comportându-se ca un bloc unitar.
Regiunile pot fi şterse din spaţiul de lucru prin selectarea acestora şi
acţionarea comenzii Cut sau a comenzii Delete din meniul Edit.
De remarcat că dacă nu este selectată cel puţin o regiune, comenzi
specifice (Cut, Copy, Paste, Delete) sunt inactive. În această situaţie
butoanele şi textul corespunzător din meniuri îşi modifică aspectul, fiind
afişate în gri.

8
Conţinutul unui program

2.3. Completarea spaţiilor "text"

Mathcad-ul introduce textul în regiuni corespunzătoare, diferite de


cele utilizate pentru introducerea ecuaţiilor. Dacă, implicit, la introducerea
unor caractere de la tastatură, Mathcad-ul consideră ca acestea aparţin unei
relaţii matematice, pentru text trebuie declarate explicit regiuni de tip text.
Această declarare poate fi făcută în două moduri:
1 - prin activarea comenzii Text Region, din meniul Insert (sau de
la tastatură prin introducerea simbolului ");
2 - prin introducerea directă a textului şi schimbarea tipului implicit
de regiune prin apăsarea tastei spaţiu.
Textul introdus într-o regiune corespunzătoare poate fi tratat ca în
orice procesor profesional de text (cum ar fi de exemplu Word).

2.4. Salvare, ieşire din program

Un document (foaie de lucru) executat


în Mathcad poate fi salvat (înregistrat pe un
suport fizic - hard-disk sau floppy-disk) în două
moduri: ca un document nou, cu un titlu diferit,
chiar dacă el există deja sau ca un document
deja existent, cu acelaşi titlu. Comenzile
respective sunt accesibile din meniul File -
Save As şi, respectiv, Save. Comanda Save mai
Fig. 2.8
poate fi accesată şi din bara de unelte Standard
Comenzi de salvare
prin intermediul butonului corespunzător
(figura 2.8). În situaţia în care
documentul este nou creat, la
apăsarea butonului din bara de
unelte Standard va fi activată
automat comanda Save As în
locul comenzii Save. Aceasta,
spre deosebire de comanda Save,
conduce la deschiderea unei
ferestre de dialog (figura 2.9) în
care utilizatorul poate specifica
atât calea de salvare cât şi Fig. 2.9
numele dorit pentru documentul Fereastra corespunzătoare comenzii Save As
salvat.
9
MATHCAD - proiectare interactivă şi prelucrarea datelor experimentale

CAPITOLUL 3
MANAGEMENTUL FOILOR DE LUCRU

3.1. Foi de lucru şi modele

Prin foaie de lucru în Mathcad este definit documentul curent,


conţinând regiuni, obiecte etc.. La crearea unui document nou, implicit
Mathcad-ul creează o foaie de lucru, cu anumite caracteristici, complet
goală. În acest caz se folosesc opţiunile implicite de formatare.
Un document nou (foaie de lucru) poate fi crea şi pornind de la un
model (template). În acest caz foaia nou creată va fi formatată după
opţiunile corespunzătoare modelului, conţinând şi toate informaţiile
înregistrate în acesta (regiuni text, regiuni matematice, obiecte etc.).
Utilizarea modelelor permite crearea de
documente consistente, cu rapiditate şi
eficienţă.
Mathcad-ul conţine o serie de
model implicite dar utilizatorul poate
salva orice foaie de lucru ca model (fişier
Fig. 3.1 cu extensia mct).
Deschiderea unei foi de lucru goale Deschiderea unei foi de lucru
noi în Mathcad poate fi executată prin
mai multe procedee, cu efecte oarecum diferite:
- prin utilizarea scurtăturii New din bara de unelte Standard (figura
3.1), obţinând o foaie de lucru goală, construită cu opţiunile implicite de
formatare;
- prin utilizarea comenzii
New, amplasată în meniul File
(figura 3.2a), aceasta conducând
la deschiderea unei ferestre de
dialog (figura 3.2b) în care
utilizatorul poate opta fie pentru
a) b) deschiderea unei foi albe (Blank
Fig. 3.2 Worksheet) fie pentru alegerea
Deschiderea unei foi de lucru bazate pe model unui model, implicit existent în
Mathcad sau creat anterior
10
Managementul foilor de lucru

(selectarea modelului din listă sau apăsarea butonului Browse şi


identificarea modelului în memoria calculatorului gazdă).
Pentru salvarea foilor de lucru Mathcad-ul oferă două posibilităţi:
folosirea scurtăturii din bara de unelte Standard sau una din comenzile Save
sau Save As amplasate în meniul file.
În situaţia în care foia de lucru nu a mai fost salvată niciodată
comanda Save are acelaşi efect ca şi comanda Save As. În caz contrar foaia
de lucru este salvată sub acelaşi nume şi la aceeaşi locaţie din memoria
calculatorului gazdă.
Comanda Save As
permite utilizatorului, prin
deschiderea unei ferestre de
dialog (figura 3.3) precizarea
numelui atribuit foii de lucru
(câmpul File Name), locaţia de
salvare (câmpul Save in sau
fereastra de navigare) precum şi
tipul de document atribuit foii de
lucru (câmpul Save as Type).
Mathcad-ul oferă
implicit şase tipuri de formate Fig. 3.3
pentru documentele salvate: Fereastra de dialog deschisă de comanda Save
- format compatibil cu As
versiunea curentă a programului (Mathcad 8 Worksheet);
- formate compatibile cu versiunile anterioare ale programului
(Mathcad 6, respectiv 7, Worksheet);
- format compatibil cu editoare de text (Rich Text Format);
- format compatibil cu aplicaţii tip web (Hyper Text Mark-up
Language);
- model compatibil cu versiunea curentă a programului (fişier cu
extensia mct).
De remarcat faptul că foile de lucru create du Mathcad 8 nu pot fi
citite în versiunile 6 sau 7 decât dacă sunt salvate corespunzător.
Pentru crearea unui nou model pentru Mathcad este suficientă
crearea unei foi de lucru noi, formatarea şi completarea acesteia după
dorinţă şi salvarea ei sub un nume cu extensia mct.
Pentru modificarea unui model existent este necesară deschiderea
fişierului respectiv (folosind comanda Open, din meniul File, cu opţiunea

11
MATHCAD - proiectare interactivă şi prelucrarea datelor experimentale

corespunzătoare în câmpul Files of type), executarea modificărilor dorite şi


apoi salvarea acesteia cu comanda Save.

3.2. Modificarea aspectului foilor de lucru

Mathcad-ul oferă o gamă largă de posibilităţi de modificare a


aspectului foilor de lucru.
Una dintre cele mai utilizate facilităţi este alinierea regiunilor.
Alinierea poate fi făcută pe verticală sau pe orizontală. Comenzile
corespunzătoare sunt amplasate în meniul Format submeniul Align Regions,
Across - pentru alinierea pe orizontală, respectiv Down - pentru alinierea pe
verticală. Comenzile respective pot fi accesate şi cu ajutorul scurtăturilor din
bara de unelte Standard (figura 3.4). De remarcat faptul că, pentru a avea
efect, aceste comenzi trebuiesc executate după selectarea prealabilă a
regiunilor.
În urma alinierii regiunilor
unele dintre acestea se pot
suprapune. Această suprapunere nu
afectează corectitudinea relaţiilor de
calcul conţinute dar face ca foaia de
lucru să fie puţin inteligibilă. Pentru
Fig. 3.4 depistarea rapidă a regiunilor
Amplasarea scurtăturilor comenzilor pentru suprapuse este disponibilă comanda
alinierea regiunilor Regions, amplasată în meniul View.
Executarea acestei comenzi are ca efect colorarea spaţiului foii de lucru în
gri deschis, păstrând regiunile colorate normal (conform formatării
corespunzătoare fiecăreia). În acest mod regiunile suprapuse devin uşor de
identificat.
În cazul existenţei regiunilor suprapuse, acestea pot fi reamplasate
folosind comanda Separate Regions, din meniul Format.
De remarcat faptul că efectul comenzii View - Regions este
persistent, pentru revenirea la aspectul grafic normal al foii de lucru fiind
necesară repetarea comenzii.
Altă facilitate utilă în identificarea rapidă a regiunilor sau la
obţinerea unui aspect deosebit al foii de lucru, este evidenţierea acestora prin
afişarea pe un fond colorat. În acest scop se selectează regiunea respectivă şi
se activează comanda Properties, din meniul Format. În fereastra activată de
comandă, pe pagina Display (figura 3.5), se validează opţiunea Highligh

12
Managementul foilor de lucru

Region, cu ajutorul butonului Choose Color putându-se modifica şi culoarea


de fond a regiunii.
De remarcat faptul că există o
diferenţă destul de mare între cu arată o
regiune evidenţiată pe ecran şi cu ar
apărea în cazul imprimării pe hârtie, deci
funcţie de destinaţia foii de lucru
respective se va utiliza această facilitate
cu discernământ.

Fig. 3.5
Fereastra de control pentru fundalul
regiunilor

3.3. Dimensionarea foilor de lucru

Mathcad-ul permite utilizatorului să modifice dimensiunile foii de


lucru, în vederea adaptării acesteia la
necesităţile impuse de imprimarea pe
hârtie sau pe alt suport (folii
transparente etc.).
Pentru stabilirea
dimensiunilor foii de lucru este
disponibilă comanda Page Setup,
amplasată în meniul File. Lansarea
comenzii conduce la deschiderea unei
ferestre de dialog (figura 3.6) în care
utilizatorul poate specifica:
- dimensiunile foii de hârtie
corespunzătoare foii de lucru, prin
alegerea unui format standardizat din
lista derulantă Size (amplasată în
secţiunea Paper); tot aici se pot Fig. 3.6
specifica şi dimensiuni diferite de cele Fereastra de dialog corespunzătoare
comenzii Page Setup
standard (opţiunea User Defined);
- sursa foilor de hârtie (în
cazul imprimării efective), lista derulantă Source din secţiunea Paper; aici
13
MATHCAD - proiectare interactivă şi prelucrarea datelor experimentale

utilizatorul poate alege între alimentare manuală a imprimantei, foaie cu


foaie (Manual Feed), alimentare automată (Sheet Feeder) sau alimentare
manuală cu plicuri (Envelope Feed);
- poziţionarea foii de hârtie, vertical sau orizontal (opţiunile
Portrait, respectiv Landscape, din secţiunea Orientation);
- dimensiunile celor patru margini ale foii (stânga, dreapta, sus şi
jos), în inch, cu ajutorul opţiunilor Left, Right, Top, respectiv Bottom, din
secţiunea Margins.
Marginile foii de hârtie sunt reprezentate pe ecran cu linii întrerupte
iar marginile zonei de lucru cu linii continue.
Pentru utilizarea dimensiunilor curente şi la alte foi de lucru este
indicată salvarea foii curente cu opţiunea "template" (model).
Pentru verificarea efectului aplicării comenzii Page Setup se poate
folosi facilitatea de vizualizare a paginilor aşa cum apar la imprimare,
accesibilă cu ajutorul comenzii Print Preview, amplasată în meniul File.
Prin intermediul comenzii Page Setup Mathcad-ul execută implicit
(funcţie de dimensiunile foii de hârtie şi marginilor alese) distribuirea
conţinutului foii de lucru curente în pagini, simbolizate prin linii de
secţionare orizontale. Utilizatorul poate modifica această distribuire folosind
comanda Page Break, amplasată în meniul Insert.
Lansarea comenzii Page Break are ca efect introducerea, la poziţia
curentă a cursorului, a unei linii de secţionare simbolizând trecerea la pagina
următoare. Conţinutul documentului amplasat deasupra liniei respective va
fi distribuit în pagina curentă, conţinutul aflat sub linie fiind trecut pe pagina
următoare.
Operaţiunea este reversibilă, linia de secţionare putând fi
îndepărtată prin selectarea ei şi aplicarea comenzii Cut. În această situaţie
conţinutul documentului revine la poziţionarea iniţială.
Nu pot fi îndepărtate liniile de secţionare implicite, introduse de
Mathcad în urma comenzii Page Setup.
O atenţie deosebită trebuie acordată regiunilor ca sunt traversate de
liniile de secţionare. În cazul imprimării foii de lucru ele vor apare exact în
poziţia de pe ecran, Mathcad-ul fiind un mediu de lucru aşa numit
WYSIWYG (What You See Is What You Get - ceea ce vezi este ceea ce
obţii). Pentru evitarea unor astfel de situaţii sunt disponibile două metode:
- pentru eliminarea suprapunerilor dintre regiuni şi liniile de
separaţie introduse cu comanda Page Break se foloseşte (după selectarea
prealabilă a regiunii) comanda Separate Regions, amplasată în meniul
Format;
14
Managementul foilor de lucru

- pentru eliminarea suprapunerilor dintre regiuni şi liniile de


separaţie implicite se utilizează comanda Repaginate Now, amplasată în
meniul Format.
Mathcad-ul permite utilizarea header-elor şi a footer-elor. Acestea
sunt zone din foia de lucru care se repetă implicit pe fiecare pagină a
documentului, în partea superioară, respectiv inferioară a acestuia.
Pentru controlul header-elor şi footer-elor este disponibilă comanda
Header/Footer, amplasată în meniul Format. Comanda conduce la
deschiderea unei ferestre de dialog (figura 3.7) ce conţine două pagini
identice, una pentru header cealaltă pentru footer.
În fereastra de
dialog utilizatorul poate
specifica elementele
caracteristice, dintre care o
serie sunt prestabilite.
Elementele pot fi introduse
în trei zone (Left, Center,
Right), fiecare dintre
acestea conducând al
amplasarea elementelor pe
alinierea corespunzătoare Fig. 3.7
(la stânga, pe centru, Fereastra de dialog corespunzătoare comenzii
respectiv la dreapta). Format - Header/Footer

Elementele prestabilite sunt


accesibile prin intermediul unor butoane
semnificative (figura 3.8): a) b) c) d)
- titlul documentului (figura 3.8a),
acesta apărând simbolizat în câmpul ferestrei
prin {f};
- calea către locaţia de salvare a e) f) g) h)
documentului respectiv (figura 3.8b), acesta
apărând simbolizat în câmpul ferestrei prin Fig. 3.8
{p}; Butoane pentru controlul
- numărul de ordine al paginii (figura header-elor şi footer-elor
3.8c), acesta apărând simbolizat în câmpul
ferestrei prin {n};
- numărul total de pagini din documentul respectiv (figura 3.8d),
acesta apărând simbolizat în câmpul ferestrei prin {nn};
15
MATHCAD - proiectare interactivă şi prelucrarea datelor experimentale

- data ultimei salvări aplicate documentului respectiv (figura 3.8e),


aceasta apărând simbolizată în câmpul ferestrei prin {fd};
- ora data ultimei salvări aplicate documentului respectiv (figura
3.8f), aceasta apărând simbolizată în câmpul ferestrei prin {ft};
- data curentă (figura 3.8g), aceasta apărând simbolizată în câmpul
ferestrei prin {d};
- ora curentă (figura 3.8h), aceasta apărând simbolizată în câmpul
ferestrei prin {t};
Elementele introduse de utilizator în header, respectiv footer, pot fi
tip text, în acest caz existând posibilitatea formatării textului cu ajutorul
butonului Format sau imagini, în acest caz existând posibilitatea identificării
lor în memoria calculatorului gazdă cu ajutorul butonului Image (figura 3.7).
În secţiunea Option utilizatorul poate specifica numărul de ordine
atribuit primei pagini (opţiunea Start at page number, figura 3.7), precum şi
aplicarea de header-e şi footer-e diferite pe prima pagină. În acest din urmă
caz, în fereastră apar două noi pagini, cu acelaşi conţinut, corespunzătoare
header-ului şi footer-ului de pe prima pagină.
Utilizatorul mai poate opta şi pentru tipărirea unui chenar în jurul
header-ului, foote-ului sau a întregii pagini (secţiunea Frame, figura 3.7).
Comanda se finalizează prin apăsarea butonului O.K. sau a tastei
Enter.
Deoarece pe foia de lucru nu sunt afişate header-ele şi footer-ele
pentru verificarea efectului aplicării comenzii Header/Footer se recomandă
folosirea facilităţii de vizualizare a paginilor aşa cum apar la imprimare,
accesibilă cu ajutorul comenzii Print Preview, amplasată în meniul File.

3.4. Protecţia spaţiilor pe foaia de lucru

Facilitatea cu care se pot aduce modificări conţinutului foilor de


lucru în Mathcad poate constitui, în anumite situaţii o problemă. Pentru
asigurarea securităţii zonelor foilor de lucru, Mathcad-ul oferă posibilitatea
protejării acestora prin parolă.
În vederea protejării unor regiuni, trebuie definită o zonă
corespunzătoare pe foia de lucru. În acest scop se utilizează comanda Area,
amplasată în meniul Insert. efectul comenzii este delimitarea unui spaţiu pe
foia de lucru, imediat sub poziţia curentă a cursorului (figura 3.9).
Frontierele zonei delimitate pot fi selectate şi mutate conform indicaţiilor
prezentate cu ajutorul simbolurilor de deplasare.

16
Managementul foilor de lucru

Zonele definite pe foia de


lucru cu ajutorul comenzii Area
prezintă o serie de proprietăţi
specifice ce pot fi modificate cu
ajutorul comenzii Properties,
amplasată în meniul Format (cel
puţin una dintre frontierele zonei în
cauză trebuie selectată anterior
lansării comenzii). Opţiunile sunt
accesibile într-o fereastră de dialog, Fig. 3.9
deschisă de lansarea comenzii, în Exemplu de zonă definită pe foia de lucru şi
cadrul paginii Area (figura 3.10): elemente caracteristice
- atribuirea unui nume
zonei create (câmpul Area name);
- afişarea unui chenar în
jurul zonei respective (opţiunea
Border);
- afişarea simbolurilor
direcţiei de deplasare (opţiunea
Icon);
- afişarea numelui atribuit
zonei (opţiunea Name);
- afişarea orei la care a
Fig. 3.10
fost creată zona (opţiunea Fereastra de dialog afişată de comanda
Timestamp), valabilă numai în Format - Properties
situaţia în care zona este protejată.
Protejarea zonei (cu sau
fără parolă) poate fi făcută cu
ajutorul comenzii Lock, amplasată
în meniul Format, submeniul
Area. Activarea comenzii conduce
la deschiderea unei ferestre de
dialog (figura 3.11), în care
utilizatorul poate introduce o
parolă pentru accesarea zonei
Fig. 3.11
respective (opţiunea Password). În Fereastra de dialog afişată de comanda de
aceeaşi fereastră de dialog se protecţie a zonelor
poate opta pentru afişarea orei

17
MATHCAD - proiectare interactivă şi prelucrarea datelor experimentale

ultimei accesări a zonei, precum şi pentru ascunderea zonei respective în


momentul protejării.
Ascunderea unei zone conduce la suprapunerea celor două frontiere
ale acesteia astfel încât conţinutul zonei nu mai poate fi afişat pe ecran
(figura 3.12).
O zonă poate fi ascunsă şi fără a fi
protejată, cu ajutorul comenzii Collapse,
amplasată în meniul Format, submeniul
Area. Operaţiune este reversibilă, pentru
a) afişarea conţinutului zonei fiind disponibilă
comanda Expand, amplasată în acelaşi
submeniu.
În vederea executării comenzilor
b)
prezentate mai sus, zona corespunzătoare
trebuie selectată anterior.
O zonă poate ascunsă sau expandată
şi prin executarea unui dublu click-stânga
c) mouse pe simbolul direcţiei de deplasare.
O zonă poate fi eliminată prin
Fig. 3.12 selectarea unei frontiere aplicarea comenzii
Variante de afişare a zonelor: Cut. Regiunile conţinute în zona eliminată
a) expandată; b) ascunsă; sunt amplasate în aceeaşi poziţie în cadrul
c) protejată şi ascunsă. foii de lucru.
De remarcat faptul că o zonă
protejată nu poate fi îndepărtată.
O atenţie deosebită trebuie acordată parolei de protecţie deoarece
fără această parolă o zonă protejată nu mai poate fi accesată prin nici o
metodă. De reţinut faptul că parolele sunt dependente de majuscule şi
minuscule.

3.5. Superlegături

Mathcad-ul permite crearea de superlegături între mai multe foi de


lucru (sau între foi de lucru şi alte fişiere), astfel încât, prin accesarea
acestora, documentele ţintă să fie afişate pe ecran.
Pentru crearea superlegăturilor este disponibilă comanda Hyperlink,
amplasată în meniul Insert. Drept suport pentru superlegături pot fi utilizate
fie regiunile de tip text fie cele de tip matematic. Comanda activează o
fereastră de dialog (figura 3.13) în care utilizatorul poate specifica:
18
Managementul foilor de lucru

- calea către fisierul


ţintă al superlegăturii (câmpul
Link to the file or URL -
acesta putând fi şi o destinaţie
pe Internet), pentru uşurinţa
identificării fişierului este
disponibil butonul Browse;
- modul de
deschidere al fişierului ţintă,
Fig. 3.13
într-o fereastră care să
Fereastra de dialog deschisă de comanda Insert -
permită editarea acestuia Hyperlink
(opţiunea implicită) sau într-o
mini-fereastră în care nu este posibilă editarea (opţiunea Display as pop-up
document);
- textul care va fi afişat în bara de stare în momentul trecerii mouse-
ului peste superlegătură (câmpul Message that appears on the status line
when mouse is over link);
- opţiunea de eliminare a superlegăturii (butonul Remove link).
Pentru a putea fi folosită ca bază pentru superlegătură, regiunea
respectivă trebuie selectată anterior lansării comenzii Hyperlink.
În momentul trecerii mouse-ului peste o regiune bază de
superlegătură, cursorul se transformă într-o mână iar în bara de stare apare
textul corespunzător. Pentru activarea superlegăturii este suficient
executarea unui dublu click stânga-mouse pe regiunea respectivă.
În cazul superlegăturilor către alte fişiere decât cele specifice
Mathcad-ului, la activarea acestora se lansează în execuţie aplicaţiile
corespunzătoare, fişierele fiind deschise în ferestre ale acestora. În această
situaţie nu se mai pot deschide fişiere în ferestre tip pop-up.
Superlegăturile pot fi utilizate cu succes la realizarea de prezentări
interactive, de cărţi electronice sau de documente accesibile de pe Internet.

3.6. Printarea şi expedierea foilor de lucru

Pentru imprimarea unor documente în Mathcad este disponibilă


comanda Print, amplasată în meniul File sau prin scurtătura din bara de
unelte standard. Activarea comenzii duce la deschiderea unei ferestre de
dialog (figura 3.14) în care utilizatorul poate specifica:

19
MATHCAD - proiectare interactivă şi prelucrarea datelor experimentale

- imprimanta folosită, dintre


cele disponibile pe calculatorul gazdă
câmpul Name din secţiunea Printer);
- caracteristicile de
imprimare, accesibile prin butonul
Properties (deschide fereastra de
dialog corespunzătoare imprimantei
alese);
- zona din foaia de lucru care
va fi imprimată (opţiunea All -
imprimă toată foaia, opţiunea Pages -
Fig. 3.14 imprimă paginile cuprinse între
Fereastra de dialog corespunzătoare anumite numere, opţiunea selection -
comenzii File - Print
imprimă numai regiunile selectate în
prealabil);
- numărul de copii (opţiunea Number of copies).
De remarcat ca Mathcad-ul nu limitează mărimea foii de lucru.
Utilizatorul poate introduce elemente oricât de la dreapta sau în jos. Pe ecran
apar totuşi o serie de linii verticale ce semnifică limitele foilor de hârtie, aşa
cum au fost acestea definite cu ajutorul comenzii Page Setup. În momentul
imprimării Mathcad-ul începe cu parte de stânga sus a foii de lucru şi merge
spre dreapta, pagină cu pagină, apoi revine pe rândul următor în stânga şi
aşa mai departe. Numerele de pagină din fereastra de dialog deschisă de
comanda Print se referă numai la diviziunile pe verticală, astfel că în cazul
foilor cu mai multe pagini pe orizontală vor fi imprimate toate paginile
aflate pe acelaşi rând.
Mathcad-ul permite trimiterea foilor
de lucru prin e-mail, ca fişiere ataşate la
mesaje. Comanda care permite aceasta este
Send, amplasată în meniul File. Comanda
deschide o fereastră de dialog (figura 3.15) în
Fig. 3.15 care utilizatorul poate alege aplicaţia de e-mail
Fereastra de dialog
dorită (dintre cele existente pe calculatorul
corespunzătoare comenzii File -
Send gazdă), în câmpul Profile Name. Butonul
Options permite utilizatorului impunerea unei
aplicaţii de e-mail ca gestionar implicit penru mesajele expediate din
Mathcad.

20
Lucrul cu structuri text

CAPITOLUL 4
LUCRUL CU STRUCTURI TEXT

4.1. Inserarea textelor

Structurile de tip text se inserează în Mathcad în regiuni specifice -


regiuni tip text. Textele pot fi utilizate pentru a transmite explicaţii
suplimentare despre ecuaţiile sau graficele din foia de lucru, pentru a reda
informaţii asupra modului de utilizare a documentului respectiv etc.
O regiune tip text poate fi creată prin mai multe metode:
- Folosirea comenzii Text Region, amplasată în meniul Insert.
- Folosirea tastei ".
- Începerea introducerii textului. Deşi iniţial Mathcad-ul creează
implicit o regiune de tip matematic, la introducerea primului spaţiu (cu
ajutorul tastei Space) aceasta va fi transformată ireversibil în regiune de tip
text.
Pentru părăsirea regiunii este necesară ieşirea din regiune, fie cu
ajutorul tastelor săgeţi, fie prin efectuarea unui click stânga-mouse în afara
acesteia.
În interiorul unei regiuni de tip text sunt valabile toate operaţiile
curente specifice:
- modificarea poziţiei cursorului (fie cu ajutorul tastelor săgeţi -
mutarea cu câte un caracter, fie cu ajutorul tastelor Home şi End - mutarea la
începutul, respectiv, sfârşitul textului);
- ştergerea unui caracter (fie cu ajutorul tastei Backspace -
caracterul din stânga cursorului, fie cu ajutorul tastei Delete - caracterul din
dreapta cursorului;
- introducerea de noi caractere prin ştergerea celor deja existente,
folosind tasta Insert.
Pentru începerea unui nou rând într-o regiune de tip text este
necesară utilizarea tastei Enter. De remarcat faptul că numărul rândurilor
astfel create nu se modifică în cazul redimensionării regiunii.
Selectarea textului, în vederea aplicării diferitelor modificări
(copiere, tăiere, lipire etc.) se face prin baleierea zonei respective de text cu
butonul din stânga mouse-ului apăsat.

21
MATHCAD - proiectare interactivă şi prelucrarea datelor experimentale

Pentru introducerea în text a unei litere din alfabetul grecesc, se


activează bara de unelte Greek (prin apăsarea butonului corespunzător din
bara Math) şi se apasă butonul corespunzător literei dorite. Litera va fi
inserată în text în locul în care este poziţionat cursorul, figura 4.1).

a) b) c) d)

Fig. 4.1
Introducerea unei litere greceşti în text
a) poziţionarea cursorului; b) activarea barei Greek; c) alegerea literei; d) textul
după introducere
La introducerea unei secvenţe de text într-o regiune aceasta îşi
ajustează automat dimensiunea după lungimea textului, fiind limitată numai
de marginile foii de lucru respective. Pentru prestabilirea unei dimensiuni
fixe a regiunii în care se introduce textul se procedează în felul următor: se
introduce secvenţa de text până la lungimea dorită şi apoi, după introducerea
unui spaţiu, se apasă combinaţia de taste Ctrl şi Enter, figura 4.2. În acest
mod lungimea regiunii devine fixă, textul fiind automat aliniat în rânduri
succesive.
Modificarea ulterioară a
dimensiunilor regiunii se poate face
a)
prin utilizarea punctelor de
redimensionare specifice.
b) Dacă se doreşte ca textul să
ocupe toată suprafaţa foii de lucru
Fig. 4.2 se execută, cu regiunea respectivă
Dimensionarea regiunilor tip text selectată, comanda Properties din
a) stabilirea lungimii dorite; meniul Format. Comanda are ca
b) fixarea prin combinaţia Ctrl şi Enter efect deschiderea unei ferestre de
dialog (figura 4.3) cu două pagini,
22
Lucrul cu structuri text

una care permite utilizatorului modificarea culorii de fundal pentru regiunea


respectivă (Display) şi cea de-a doua care permite extinderea regiunii pe
toată lăţimea foii de lucru. De remarcat faptul că în această situaţie, toate
regiunile aflate dedesubtul regiunii selectate vor fi automat deplasate în jos,
pe măsură ce se introduce textul.

a) b)
Fig. 4.3
Fereastra de dialog activată de comanda Format - Properties, pentru regiuni text:
a) pagina pentru selectarea culorii de fundal;
b) pagina pentru dispunerea textului pe lăţimea foii de lucru

4.2. Proprietăţile structurilor text

Pentru a modifica tipul, mărimea, stilul sau culoarea fontului


aferent unui text este disponibilă comanda Text, amplasată în meniul
Format. Modificările efectuate
au se aplică atât la textul
selectat în momentul lansării
comenzii cât şi la textul
introdus după executarea
acesteia. Comanda are ca efect
deschiderea unei ferestre de
dialog (figura 4.4) în care
utilizatorul poate modifica
după dorinţă caracteristicile
textului.
Structurile de tip text
sunt grupate în structuri numite Fig. 4.4
Fereastra de dialog activată de comanda Format -
paragrafe. Prin paragraf se
Text
defineşte o secvenţă de text

23
MATHCAD - proiectare interactivă şi prelucrarea datelor experimentale

finalizată prin apăsarea tastei Enter. Mathcad-ul permite modificarea


proprietăţilor paragrafelor prin intermediul comenzii Paragraph, amplasată
în meniul Format. Comanda se aplică paragrafului în care se află cursorul în
momentul lansării acesteia, precum şi tuturor paragrafelor obţinute din
acesta prin apăsarea tastei
Enter. Pentru aplicarea
modificărilor impuse prin
comanda Paragraph mai
multor paragrafe, este
necesară selectarea
prealabilă a acestora. Prin
activarea comenzii se obţine
deschiderea unei ferestre de
dialog (figura 4.5) în care
Fig. 4.5 utilizatorul poate specifica o
Fereastra de dialog deschisă de comanda Format - serie de caracteristici ale
Paragraph paragrafelor, cum ar fi:
- Ident, modifică
distanţele de la text la marginile din stânga (Left), respectiv dreapta (Right)
ale foii de lucru (dimensiunile regiunii sunt actualizate automat).
- Special, permite impunerea unei distanţe (valoarea se introduce în
câmpul By), faţă de marginea din stânga a foii de lucru, fie pentru prima
(First) fie pentru restul (Hanging) liniilor din paragraf.
- Bullets, permite crearea listelor indexate, fie cu bulite (bullets), fie
cu numere consecutive (numbers).
- Alignment, permite aliniere textului la stânga, pe centru sau la
dreapta.

4.3. Stilul structurilor text

Prin termenul de "stil", asociat unei regiuni de tip text, se înţelege


un set prestabilit de valori pentru o serie de caracteristici specifice textului
(tipul, mărimea, culoarea fontului utilizat, tipuri de aliniere etc.)
În Mathcad stilurile sunt folosite pentru atribuirea implicită a
proprietăţilor structurilor de tip text. Ca şi în cazul elementelor matematice,
utilizarea stilurilor conduce la uniformizarea şi rapiditatea creării
documentelor.

24
Lucrul cu structuri text

Fiecare foaie de lucru are un stil "normal" , implicit, precum şi un


set de stiluri predefinite. Acestea diferă funcţie de modelul din care este
derivată foaia respectivă, putând fi modificate de utilizator după dorinţă.
În momentul creării unei regiuni de tip text Mathcad-ul îi atribuie
implicit stilul normal. Utilizatorul poate atribui un stil diferit unui paragraf
sau unui şir de caractere (care este separat de restul textului printr-o apăsare
a tastei Enter). Pentru modificarea stilului unui paragraf este necesar ca linia
de editare să fie amplasată în interiorul paragrafului respectiv, în timp ce
pentru modificarea stilului unui fragment de text acesta din urmă trebuie să
fie selectat. comanda ce permite alegerea unui stil pentru text este Style şi
este amplasată în meniul Format. La activarea comenzii se deschide o
fereastră de dialog (figura 4.6) în care utilizatorul poate alege unul dintre
stilurile aferente foii de lucru
respective.
În fereastra respectivă
utilizatorul găseşte stiluri implicite
definite în Mathcad. Acestea pot fi
aplicate fragmentelor de text (prin
selectarea stilului dorit şi apăsarea
butonului Apply), pot fi şterse (cu
excepţia stilului Normal) sau pot fi
modificate (cu ajutorul butonului
Modify). Pentru definirea unor stiluri Fig. 4.6
noi, utilizatorul poate folosi butonul Fereastra activată de comanda Format -
New. Aceste butoane au ca efect Style
deschiderea unor noi ferestre de dialog (figura 4.7) în care utilizatorul poate
denumi noul stil şi poate alege elementele dorite pentru tipul de font şi
paragraf utilizate.
Atât la crearea cât şi la modificarea unui stil se poate porni de la un

a) b)
Fig. 4.7
Ferestre activate la crearea şi modificarea stilurilor de text
a) pentru crearea unui stil nou; b) pentru modificarea unui stil existent

25
MATHCAD - proiectare interactivă şi prelucrarea datelor experimentale

stil de bază (ales din lista celor existente) căruia i se modifică sau i se
adaugă elemente. Alegerea stilului de bază se poate face utilizând câmpul
Based On, activ în ambele ferestre.

4.4. Ecuaţii în structuri text

Apare, în unele situaţii, necesitatea introducerii unor ecuaţii în text.


Problema se rezolvă prin combinarea regiunilor de tip text cu cele
matematice. În prima fază se începe redactarea textului, iar în momentul
când s-a ajuns în punctul unde trebuie inserată ecuaţia se creează o regiune
de tip matematic folosind comanda Math Region, amplasată în meniul Insert
(figura 4.8).

a) b) c)
Fig. 4.8
Introducerea ecuaţiilor în text
a) regiune de tip text; b) activarea regiunii matematice; c) revenirea la regiunea text

De remarcat faptul că ecuaţia poate fi introdusă în două moduri:


- direct la locaţia curentă a cursorului, în această situaţie nu mai
este posibilă revenirea la text;
- poziţionând cursorul la o locaţie anterioară, astfel încât după
poziţia sa curentă să mai fie cel puţin un caracter text sau un spaţiu, în
această situaţie după introducerea ecuaţiei se poate reveni în modul text prin
apăsarea tastei săgeată dreapta.
O altă posibilitate de introducere a ecuaţiilor în text este prin
utilizarea memoriei temporare Clipboard. În acest caz ecuaţia de introdus se
va selecta corespunzător, va fi introdusă în Clipboard cu ajutorul comenzii
Copy (sau Cut), se va poziţiona cursorul în locaţia dorită în regiunea text şi
se va executa comanda Paste. De remarcat faptul că în această situaţie nu
mai este necesară introducerea prealabilă a unei regiuni matematice.
Ecuaţiile introduse în text se supun aceloraşi reguli ca şi ecuaţiile
amplasate în regiuni de tip matematic.
Dacă se doreşte ca o ecuaţie dintr-o structură de tip text să nu fie
activă (în cazul în care este necesară numai prezentarea unor ecuaţii, nu şi
utilizarea lor efectivă), aceasta poate fi inactivată. Această inactivare este
posibilă prin manipularea corespunzătoare a opţiunii Disable evaluation,

26
Lucrul cu structuri text

disponibilă în pagina Calculation din


fereastra de dialog (figura 4.9)
activată cu ajutorul comenzii
Properties din meniul Format.
Ecuaţiile inactivate
(amplasate fie în text fie în regiuni
matematice) nu mai sunt supuse
evaluării, fiind ignorate de modulul de
calcul din Mathcad. Ele pot fi editate
şi manipulate în acelaşi mod ca şi cele
active. Fig. 4.9
Opţiunea pentru inactivarea ecuaţiilor
Operaţiunea este reversibilă,
o ecuaţie inactivă putând fi reactivată
prin aceeaşi metodă.

4.5. Căutarea şi înlocuirea în structurile text

Mathcad-ul dispune de două comenzi specifice manipulării


structurilor de tip text: Find şi Replace, ambele comenzi fiind amplasate în
meniul Edit. Deşi comenzile pot lucra atât cu texte cât şi cu ecuaţii, implicit
ele sunt active numai pentru regiuni tip text.
Comanda Find este utilizată pentru identificarea unui anumit
caracter într-o foaie de lucru. La activarea comenzii se deschide o fereastră
de dialog (figura 4.10), în care
utilizatorul poate specifica o
serie de opţiuni de execuţie:
- caracterul sau
cuvântul căutat, în câmpul Find
what;
- căutarea numai a
cuvintelor, Match whole word
only;
Fig. 4.10
- luarea în consideraţie Fereastra de dialog corespunzătoare comenzii
a diferenţei între literele mari şi Find
mici, Match case;
- căutarea în regiuni tip text, Find in Text Regions;
- căutarea în regiuni tip matematic, Find in Math Regions;
- căutarea spre începutul foii de lucru sau spre sfârşitul acesteia, Up
şi, respectiv, Down (având ca reper poziţia curentă a cursorului).
27
MATHCAD - proiectare interactivă şi prelucrarea datelor experimentale

Apăsarea repetată a butonului Find next are ca efect saltul succesiv


al cursorului la locaţia caracterelor (sau cuvintelor) căutate.
Comanda Replace oferă utilizatorului posibilitatea înlocuirii
automate în text a unor caractere (sau cuvinte). Activarea comenzii conduce
la deschiderea unei ferestre de dialog (figura 4.11) în care utilizatorul poate
specifica opţiunile de execuţie dorite. Multe dintre ele sunt identice cu cele
corespunzătoare celor aferente comenzii Find. Există totuşi câteva diferenţe:
- câmpul Replace
with, în care se introduce
caracterul (sau cuvântul)
înlocuitor;
- butonul Replace,
care are ca efect înlocuirea
numai a elementului aflat la
poziţia curentă a cursorului;
- butonul Replace
All, care are ca efect
Fig. 4.11 înlocuirea tuturor
Fereastra de dialog corespunzătoare comenzii caracterelor (cuvintelor)
Replace găsite în foia de lucru.

28
Lucrul cu structuri matematice

CAPITOLUL 5
LUCRUL CU STRUCTURI MATEMATICE

5.1. Calcule simple

Pentru efectuarea unor calcule simple cu ajutorul Mathcad-ului


trebuiesc parcurse următoarele etape:
1 - crearea regiunii corespunzătoare calculului respectiv. Pentru
aceasta se efectuează operaţiile specificate la paragraful anterior;
2 - introducerea relaţiei de calcul corespunzătoare. În acest scop se
utilizează tastele corespunzătoare celor patru operaţii fundamentale sau
butoanele cuprinse în bara de unelte Arithmetic activată prin apăsarea
butonului corespunzător din bara Math
(figura 5.1)
3 - executarea efectivă a calculului
matematic, prin apăsarea tastei = sau a
butonului corespunzător din bara
Arithmetic.
Mathcad-ul recunoaşte operatorii
introduşi în expresie şi îi afişează în forma
în care sunt ei întâlniţi în documentaţiile
matematice. Fig. 5.1
În interiorul relaţiei poziţia curentă Bara de unelte Arithmetic şi
este indicată de reticul ce poate fi deplasat butonul de activare
cu ajutorul tastelor săgeată. Operaţiile de
scriere-ştergere pot fi realizate numai cu ajutorul acestuia.
În momentul în care un operator este introdus în expresie, cel de-al
doilea operand (care nu a fost încă introdus) este înlocuit provizoriu cu un
element de substituire.
În figura 5.2 se prezintă un exemplu referitor la aspectul grafic al
unei expresii (relaţia 5.1), în diferite faze de lucru.

458+589*(969/69sqrt789)=752,477 (5.1)

29
MATHCAD - proiectare interactivă şi prelucrarea datelor experimentale

Se pot remarca în figura 5.2 atât elementul de substituire cât şi


reticulul de poziţionare în interiorul relaţiei, în diferite faze de lucru.

a) b) c)

d) e)
Fig. 5.2
Aspecte grafice ale etapelor de calcul în Mathcad
În figura 5.2c este reprezentată relaţia după apăsarea butonului =
din bara de unelte Arithmetic. Cele două elemente de substituire reprezintă
poziţia rezultatului şi, respectiv, unităţilor de măsură corespunzătoare.
Rezultatul numeric este afişat în momentul părăsirii regiunii (executare clic
stânga-mouse în afara acesteia), figura 5.2e.
În cazul folosirii tastei "=" în locul butonului din bara de unelte
Arithmetic, se obţine rezultatul prezentat în figura 5.2d.
În situaţia afişării elementelor de substituire pentru rezultat şi
unităţi de măsură, formatul de prezentare al acestora poate fi modificat cu
ajutorul comenzilor Result Format şi, respectiv, Insert Unit, accesibile fie
din meniurile Format, respectiv Insert, fie prin executarea unui dublu clic
stânga-mouse pe elementul corespunzător.
O relaţie finalizată (figura 5.2e) poate fi modificată prin editare
(clic stânga-mouse în zona regiunii respective) şi ştergere sau adăugare de
componente. Pentru o nouă evaluare trebuie folosită fie tasta "=" fie butonul
corespunzător din bara Arithmetic.

5.2. Crearea ecuaţiilor simple în Mathcad

Una dintre facilităţile fundamentale din Mathcad este posibilitatea


acestuia de a utiliza variabile şi funcţii pentru a crea şi manipula ecuaţii.
Pentru definirea unei variabile în Mathcad trebuie parcurse
următoarele etape:
1 - introducerea numelui variabilei, prin scrierea acestuia de la
tastatură;
30
Lucrul cu structuri matematice

2 - introducerea operatorului de atribuire (care conferiră calitatea de


variabilă numelui introdus anterior), fie prin tastarea simbolului : de la
tastatură, fie prin utilizarea butonului corespunzător (Assign value - simbol
:=) din bara Arithmetic;
3 - atribuirea unei valori iniţiale, prin introducerea acesteia de la
tastatură.
În Mathcad citirea se face de la stânga la dreapta şi de sus în jos, ca
atare după definirea unei variabile aceasta poate fi utilizată numai după sau
sub locul definirii.
Pentru definirea unei noi variabile trece într-o nouă regiune, fie prin
apăsarea tastei Enter, fie prin poziţionarea cu mouse-ul în zona dorită.
După definire, variabilele pot fi folosite în relaţii pentru construirea
ecuaţiilor.
Mathcad-ul păstrează legătura între variabile şi ecuaţii, astfel încât
după modificarea valorii unei variabile (prin editarea regiunii
corespunzătoare) toate ecuaţiile ce conţin variabila respectivă vor fi
actualizate.
În ecuaţii nu se pot utiliza variabile nedefinite anterior sau care nu
au atribuite valori iniţiale.

5.3. Inserarea numerelor, variabilelor, vectorilor, matricelor,


şirurilor de caractere, operatorilor

În Mathcad numerele se introduc de la tastatură, în regiuni


corespunzătoare.
Mathcad-ul poate folosi mai multe sisteme de numeraţie: zecimal,
binar, octal, hexazecimal. De asemenea pot fi utilizate şi numere complexe.
În sistemul zecimal numerele pot fi compuse din cifre de la 0 la
zece. Drept separator zecimal este folosit punctul.
Numerele scrise în sistem binar trebuie urmate de litera mică b.
Valoarea maximă a unui număr binar în Mathcad este 231. De exemplu,
numărul în sistem zecimal 240 scris în sistem binar va fi 11110000b.
Numerele scrise în sistem octal trebuie urmate de litera mică o.
Valoarea maximă a unui astfel de număr este 231. De exemplu, numărul în
sistem zecimal 11166 scris în sistem octal va fi 25636o.
Numerele scrise în sistem hexazecimal trebuie urmate de litera
mică h. Valoarea maximă a unui număr hexazecimal în Mathcad este, de
asemenea, 231. De exemplu, numărul în sistem zecimal 11166 scris în sistem
hexazecimal va fi 2b9eh. Numerele care încep cu o literă (de exemplu a3h -
31
MATHCAD - proiectare interactivă şi prelucrarea datelor experimentale

163 în sistem zecimal) trebuie obligatoriu precedate de cifra 0 pentru a evita


confuziile cu nume de variabile (pentru exemplul considerat 0a3h).
Pentru uşurarea operaţiilor cu numere cu valori extreme (foarte
mari sau foarte mici) Mathcad-ul acceptă notaţia exponenţială, notaţie în
care numerele sunt reprezentate pe baza puterilor lui 10. De exemplu,
numărul 3000000 poate fi scris ca: 3*108.
Pentru definirea unei variabile în Mathcad este necesară
introducerea numelui şi a valorii sau a expresiei matematice corespunzătoare
acesteia. Pentru a indica faptul că este vorba de o variabilă, numele acesteia
trebuie urmat de simbolul ":" . La tastarea acestuia, Mathcadul îl transformă
implicit în ":=" amplasând după el un element
de substituire (figura 5.3a). Elementul de
a) b) c) substituire urmează a fi înlocuit de utilizator fie
Fig. 5.3 cu expresia matematică corespunzătoare (figura
Variabile în Mathcad 5.3b) fie cu valoarea numerică a variabilei
respective (figura 5.3c).
Mathcad-ul conţine o serie de variabile
predefinite, vizibile cu ajutorul comenzii Options, amplasate în meniul
Math. Comanda deschide o fereastră de dialog (figura 5.4) în care
utilizatorul poate identifica şi, eventual modifica, valorile implicite ale
acestor variabile (pagina Built-In
Variables).
Variabilele, odată definite, devin
valabile pentru zonele din dreapta şi de
sub locul unde au fost definite.
În cazul în care se utilizează într-
o expresie variabile nedefinite încă,
Mathcad-ul le afişează colorate în roşu şi
lansează un mesaj de eroare.
Pentru evaluarea unei expresii ce
conţine variabile este suficientă scrierea
Fig. 5.4 acesteia şi apăsarea tastei "=".
Pagina variabilelor implicite din O variabilă poate fi definită de
Mathcad mai multe ori într-o foaie de lucru. În acest
caz Mathcad-ul foloseşte în permanenţă
valoarea variabilei definită imediat deasupra sau la stânga locului unde
aceasta este utilizată.

32
Lucrul cu structuri matematice

Mathcad-ul permite definirea unor variabile globale, prin utilizarea


în locul tatei : a tastei "~" (figura 5.5). Mathcad-ul face două evaluări ale
expresiilor din foia de lucru: la prima sunt luate în considerare numai
definiţiile globale, la cea de-a doua se iau în considerare şi
definiţiile locale.
Şi în cazul variabilelor globale este valabilă regula
de precedenţă a definirii variabilei faţă de locul utilizării
acesteia. Fig. 5.5
În Mathcad prin vector este desemnată o serie de Variabilă globală
numere dispuse sub formă de coloană, în timp ce prin
matrice se înţelege o serie de numere dispuse pe mai multe rânduri şi
coloane. Ambele structuri numerice sunt cuprinse în denumirea generică de
tablouri.
Există mai multe metode de creare a tablourilor în Mathcad. Una
din ele este folosind comanda Matrix, amplasată în meniul Insert, figura
5.6a. În urma activării comenzii se deschide o fereastră de dialog în care
utilizatorul poate specifica numărul de rânduri şi coloane pentru tabloul
dorit, figura 5.6b. Acest număr este limitat la maximum zece rânduri,
respectiv coloane.

a) b) c)
Fig. 5.6
Introducerea tablourilor cu ajutorul comenzii Matrix
a) activarea comenzii; b) fereastra de dialog; c) tabloul introdus

În fereastra de dialog, după completarea numărului dorit de rânduri


(Rows), respectiv coloane (Columns), apăsarea butonului OK are ca efect
introducerea tabloului, având în locul numerelor elemente de substituire şi
închiderea ferestrei, în timp ce apăsarea butonului Insert are ca efect numai
introducerea tabloului, fereastra rămânând deschisă permiţând astfel
utilizatorului modificarea numărului de rânduri şi coloane. Apăsarea
butonului Delete are ca efect micşorarea numărului de rânduri, respectiv

33
MATHCAD - proiectare interactivă şi prelucrarea datelor experimentale

coloane, ale tabloului introdus cu valorile înscrise în câmpurile


corespunzătoare ale ferestrei.
Pentru introducerea numerelor se mută cursorul pe poziţia dorită,
cu ajutorul tastelor săgeţi, tastându-se numărul dorit.
Tablourile pot fi folosite în interiorul expresiilor numerice la fel ca
orice alte numere.
Deşi în majoritatea cazurilor în Mathcad se lucrează cu numere şi
tablouri, există situaţii când este necesară utilizarea şirurilor de caractere. Un
astfel de şir poate conţine orice tip de caracter introdus de la tastatură (litere,
numere, semne de punctuaţie, spaţii, caractere speciale din tabloul codurilor
ASCII). Mathcad-ul diferenţiază şirurile de caractere de numere sau de
numele variabilelor prin amplasarea acestora între ghilimele duble.
Şirurile de caractere pot fi folosite ca elemente ale tablourilor,
argumente de funcţii sau valori de variabile.
Pentru crearea unui şir de caractere este necesară declararea
acestuia, având cursorul poziţionat pe un element de substituire
corespunzător, prin apăsarea tastei ". Mathcad-ul automat inserează două
ghilimele duble cu un cursor de tip text între ele, unde pot fi introduse
caracterele dorite, figura 5.7. Pentru a încheia şirul este suficientă deplasarea
cursorului peste ghilimele finale, folosind tastele săgeţi.
De remarcat faptul că simbolul "
a) are mai multe semnificaţii în Mathcad,
funcţie de locul unde este utilizat. Ca
atare, pentru declararea unui şir de
b) caractere cursorul trebuie poziţionat
neapărat pe un element de substituire,
c) într-o expresie matematică.
Şirurile de caractere nu sunt
Fig. 5.7
Etapele introducerii şirurilor de limitate ca lungime dar este bine de
caractere remarcat ca ele apar întotdeauna pe un
a) expresia iniţială; b) declararea singur rând.
şirului; c) şirul introdus. Important de reţinut că un şir de
caractere compus numai din elemente
numerice (de exemplu 12345) va fi tratat de Mathcad tot ca un şir de
caractere şi nu ca un număr.
Prin nume în Mathcad este definită o secvenţă de caractere
introdusă într-o regiune de calcul matematic. Un nume reprezintă, în mod
uzual, o variabilă sau o funcţie utilizată în calcul.

34
Lucrul cu structuri matematice

În Mathcad se pot întâlni două tipuri de nume: nume implicite,


referitoare la variabile şi funcţii incluse în program, care pot fi folosite
oricând şi oriunde fără a mai fi necesară definirea lor şi nume definite de
utilizator, în funcţie de necesităţile de calcul.
Mathcad fiind un mediu profesional de calcul numeric şi simbolic,
conţine o largă paletă de variabile şi funcţii implicite. Deşi printre
variabilele implicite se numără şi constantele matematice uzuale (∞, e etc.),
numele respective pot fi redefinite de utilizator după preferinţă. De remarcat
faptul că Mathcad-ul tratează simbolul ∞ tot ca o variabilă implicită,
corespunzând numărului maxim real ce poate fi interpretat de Mathcad (∞ =
10307). Tot ca variabile definite implicit sunt tratate şi unităţile uzuale de
măsură. Astfel Mathcad-ul prin numele A
defineşte unitatea de măsură pentru
intensitatea curentului electric - amperul etc.
Funcţiile definite implicit acoperă o
gamă largă, de la calcule simple la interpolări
numerice şi calcule statistice. Aceste funcţii
pot fi apelate prin introducerea numelui
corespunzător într-o regiune de calcul Fig. 5.8
matematic, de exemplu numele mean este Apelarea comenzii Function
înţeles de Mathcad ca apel pentru funcţia implicită de medie aritmetică între
elementele unui tablou.
Pentru apelarea funcţiilor implicite este disponibilă comanda
Funcţion, accesibilă fie din
meniul Insert, fie cu ajutorul
butonului Insert Function din
bara de unelte Standard
(figura 5.8).
Odată lansată
comanda Function, se
deschide o fereastră de dialog
(figura 5.9) care permite
utilizatorului accesul la
întreaga bibliotecă de funcţii
implicite din Mathcad. În zona
Function Category pot fi
selectate seturile de funcţii, în Fig. 5.9
zona Function Name se pot Fereastra de dialog corespunzătoare comenzii
selecta funcţiile individual iar Function
35
MATHCAD - proiectare interactivă şi prelucrarea datelor experimentale

în cele două câmpuri din partea inferioară a ferestrei sunt afişate expresia
matematică a funcţiei selectate şi, respectiv, o scurtă explicaţie referitoare la
efectele acesteia.
Nume de variabile şi funcţii definite de utilizator pot cuprinde:
litere majuscule şi minuscule, cifrele de la 0 la 9, simbolul _ (underscore),
simbolul ` (prime - a se remarca diferenţa faţă de apostrof - '), simbolul % şi
literele greceşti.
La definirea numelor variabilelor şi funcţiilor trebuie respectate
următoarele reguli:
- un nume nu poate începe cu o cifră (tot ce începe cu cifre este
interpretat de Mathcad ca un număr);
- simbolul ∞ poate apare într-un nume numai pe prima poziţie;
- toate caracterele introduse după punct sunt tratate ca indecşi;
- toate caracterele dintr-un nume trebuie să aibă acelaşi font,
mărime şi stil;
- Mathcad-ul nu poate diferenţia variabilele de funcţii după nume.
Deci, nu pot fi definite variabile şi funcţii cu acelaşi nume (de exemplu
funcţia f(x) şi variabila f);
- numele funcţiilor implicite pot fi redefinite dar după această
operaţie numele implicite nu mai sunt recunoscute.
- literele greceşti pot apare în orice nume, pe orice poziţie;
Pentru introducerea literelor greceşti Mathcad-ul dispune de un
tablou cu butoane, literele fiind introduse prin apăsarea corespunzătoare a
acestora. Activarea tabloului poate fi făcută
cu ajutorul butonului corespunzător din
bara Math, figura 5.10.
Înscrierea caracterelor la index în
numele variabilelor şi funcţiilor se face
prin tastarea anterioară a caracterului punct.
Nu este recomandabilă folosirea la index a
tablourilor, acestea având cu totul altă
semnificaţie atunci când sunt trecute la
index.
Numerele, variabilele şi funcţiile
sunt legate între ele, pentru a alcătui
expresii matematice, cu ajutorul
Fig. 5.10
operatorilor matematici.
Activarea tabloului cu litere
greceşti
36
Lucrul cu structuri matematice

Operatorii pot fi introduşi cu ajutorul butoanelor corespunzătoare


amplasate în barele de unelte. La introducerea operatorului, locul
operanzilor (numerele asupra cărora se
aplică operaţia respectivă) este marcat cu
elemente de substituire, figura 5.11.
Pentru introducerea operanzilor se
a) b) c) d)
poziţionează cursorul cu ajutorul tastelor
săgeţi şi se introduce valoarea dorită. Fig. 5.11
În funcţie de natura operanzilor Operatori matematici
(scalari, vectori, matrici) efectul a) adunare; b) împărţire; c) integrare;
operatorilor poate fi diferit. d) sumă.

5.4. Crearea expresiilor matematice

Pentru crearea expresiilor matematice este suficientă introducerea


consecutivă a operanzilor şi a operatorilor matematici necesari. Operatorii
corespunzători operaţiilor de bază (adunare, scădere, înmulţire şi împărţire)
pot fi introduşi direct de la tastatură (figura 5.12a), Mathcad-ul afişând
expresiile în mod corespunzător (figura 5.12b).
Deşi la prima vedere editorul de
ecuaţii din Mathcad pare a fi un simplu
editor de text, expresiile matematice au o a) b)
structură foarte bine definită. Fig. 5.12
Expresiile în Mathcad sunt Expresie matematică
construite prin asamblarea componentelor a) tastată; b) afişată.
pornind de la un set de reguli printre care se
numără precedenţa operatorilor şi o serie de
reguli, specifice programului, care permit simplificarea
introducerii operanzilor şi a operatorilor.
La introducerea numerelor sau a numelor,
Mathcad-ul se comportă ca un editor obişnuit de text,
cursorul fiind o linie verticală ce poate fi deplasată cu
ajutorul tastelor săgeţi, figura 5.13. Există totuşi două
Fig. 5.13
diferenţe majore:
Elemente text
- pe măsură ce se deplasează spre dreapta,
cursorul lasă în urmă o linie orizontală ce subliniază textul introdus;
- dacă expresia în care se introduc caracterele respective nu are deja
definit un operator matematic, la apăsarea tastei spaţiu regiunea se

37
MATHCAD - proiectare interactivă şi prelucrarea datelor experimentale

transformă automat în regiune de tip text, transformarea ulterioară în regiune


matematică fiind imposibilă.
Pentru crearea unor
expresii matematice valide o
atenţie deosebită trebuie acordată
operanzilor. Un operand poate fi
a) introdus prin două metode:
- Operator- operand:
înlocuirea elementelor de
substituire rezultate în urma
b) introducerii operatorului respectiv,
figura 5.14a.
Fig. 5.14 - Operand-operator:
Metode de introducere a operanzilor folosirea cursorului pentru
a) operator-operanzi; b) operand-operator. specificarea numărului, variabilei
sau expresiei ce trebuie
transformată în operand, figura 5.14b.
Prima metodă, deşi nu respectă ordinea normală de introducere de
la tastatură a caracterelor, este indicat a fi folosită în cazul expresiilor
complicate sau atunci când se lucrează cu operatori ce cuprind un număr

a)

b)
Fig. 5.15
Asigurarea precedenţei operaţiilor
a) cu ajutorul parantezelor; b) prin deplasarea manuală a cursorului.
mare de operanzi.
Pentru eliminarea ambiguităţilor referitoare la precedenţa
operaţiilor se pot folosi parantezele sau deplasarea manuală a cursorului în
interiorul expresiei, figura 5.15. Pentru exemplificarea celor arătate mai sus,
în figura 5.16 se prezintă etapele de introducere pentru o expresie cu un
nivel ridicat de complexitate.
38
Lucrul cu structuri matematice

a)

b)
Fig. 5.16
Etapele introducerii unei expresii matematice complexe în Mathcad
a) expresia matematică; b) etape de introducere.

39
MATHCAD - proiectare interactivă şi prelucrarea datelor experimentale

5.5. Editarea expresiilor matematice

Necesitatea editării unei expresii matematice apare atunci când se


doreşte modificarea fie a valorii numerice corespunzătoare unui operand, fie
a unui operator.
Modificarea valorilor numerice presupune activării cursorului tip
linie de editare, specific regiunilor de tip matematic, prin executarea unui
click stânga-mouse pe expresia respectivă (figura 5.17). Pentru poziţionarea
cursorului în interiorul expresiei se utilizează tastele săgeţi.
Ştergerea unui caracter se poate face
fie folosind tasta Backspace (în acest caz este
şters caracterul din stânga cursorului), fie
folosind tasta Delete (în acest caz este şters
caracterul din dreapta cursorului). Caracterul
nou introdus se va regăsi în parte din stânga a
Fig. 5.17 cursorului.
Activarea liniei de editare la Introducerea unui operator într-o
expresiile matematice
expresie matematică se execută în mod
analog, cu deosebirea că în cazul anumitor operatori schimbările survenite în
aspectul expresiei sunt importante. De exemplu, la introducerea operatorilor
de înmulţire, adunare, scădere, operatorul apare în stânga cursorului, restul
expresiei rămânând neschimbat, figura 5.18.
Introducerea operatorului de
împărţire are ca efect mutarea întregii
expresii aflată în dreapta cursorului
a) (până la primul operator) la numitor.
Dacă se doreşte introducerea unui
operator între un operand şi un alt
operator, se pot genera confuzii. În
b) această situaţie Mathcad-ul presupune
că se doreşte şi introducerea unui nou
operand, substituindu-l provizoriu, pe
acesta, cu un element de înlocuire,
figura 5.18.
c) De remarcat faptul că nu este
necesară introducerea spaţiilor între
Fig. 5.18
operatori şi operanzi, Mathcad-ul
Introducerea operatorilor de împărţire
făcând automat acest lucru.
40
Lucrul cu structuri matematice

Introducerea unui spaţiu într-o expresie matematică are ca efect


transformarea acesteia într-o regiune de tip text. Dacă se continuă cu
introducerea elementelor matematice, Mathcad-ul izolează zona în paranteze
continuând să accepte valorile introduse. Chiar dacă ulterior spaţiile sunt
şterse, regiunea devine totuşi inutilizabilă, fiind creată o confuzie majoră,
semnalată de program prin mesaje
corespunzătoare (figura 5.19).
Introducerea unui operator
astfel încât el să fie aplicat unei
întregi expresii poate fi făcută fie prin Fig. 5.19
marcarea prealabilă a expresiei, fie Expresie matematică compromisă prin
introducerea unui spaţiu
prin încadrarea expresiei respective
între paranteze.
Marcarea unei zone dintr-o regiune matematică se poate face prin
manipularea corespunzătoare a cursorului tip linie de editare. Cursorul este
alcătuit din două linii, una verticală de lungime fixă şi una orizontală de
lungime variabilă. Se consideră marcată expresia aflată deasupra liniei
orizontale. Pentru marcarea unei expresii se poziţionează cursorul cu
ajutorul tastelor săgeţi fie la începutul, fie la sfârşitul expresiei respective şi,
prin apăsarea tastei Space se deplasează progresiv linia verticală a cursorului
până la obţinerea marcajului dorit. Direcţia de avans a liniei verticale este,
implicit, spre partea mai scurtă a liniei orizontale. Schimbarea direcţiei de
avans se poate face apăsând tasta Insert. Astfel, prin apăsarea repetată a
tastei Space, se pot marca porţiuni din ce în ce mai mari din expresia
matematică, mergând până la marcarea întregii expresii, figura 5.20.

a)

b)

Fig. 5.20
Manipularea cursorului tip linie de editare în scopul marcării expresiilor:
a) efectul apăsărilor succesive pe tasta Space;
b) efectul apăsării tastei Insert şi apoi a apăsării repetate a tastei Space.

41
MATHCAD - proiectare interactivă şi prelucrarea datelor experimentale

În cazul introducerii unui operator lângă o expresie marcată,


Mathcad-ul o va considera în mod implicit pe aceasta ca fiind operand şi o
va plasa între paranteze, folosind, provizoriu, pentru celălalt operand un
element de substituire, figura 5.21.

Fig. 5.21.
Introducerea unui operator (adunare) ce are drept operand o porţiune de expresie
matematică
Pentru ştergerea unui operator dintr-o expresie matematică se
procedează în acelaşi mod ca la ştergerea unui caracter, prin manipularea
adecvată a cursorului şi utilizarea tastelor Backspace şi Delete De remarcat
faptul că, în cazul operatorului de împărţire, direcţiile de acţiune ale celor
două taste sunt mai puţin evidente decât în cazul celorlalţi operatori, figura
5.22.
Deşi Mathcad-ul introduce
automat paranteze ori de câte ori este
necesar pentru a asigura precedenţa
a) b) operatorilor (cum este în cazul
Fig. 5.22 introducerii unui operator nou într-o
Poziţionarea cursorului la ştergerea expresie matematică), uneori apare
operatorului de împărţire: necesitatea introducerii acestora de
a) folosind tasta Delete;
către utilizator. În acest scop pot fi
b) folosind tasta Backspace.
folosite două metode, fie introducerea
pe rând a parantezelor cu ajutorul
tastaturii (la începutul şi, respectiv, sfârşitul expresiei), fie marcarea
expresiei respective şi apăsarea butonului corespunzător parantezelor din
bara de unelte Arithmetic, figura 5.23. Se recomandă utilizarea celei de-a
doua metode, evitându-se astfel inserarea de paranteze fără pereche.
Pentru ştergerea parantezelor se procedează la fel ca în cazul
ştergerii caracterelor, poziţionându-se cursorul înainte sau după o paranteză
şi folosind, corespunzător, tastele Backspace şi Delete. De remarcat faptul
că Mathcad-ul şterge automat şi paranteza pereche.
Prin editare este posibilă şi transformarea unei porţiuni de expresie
matematică în argument pentru diferite funcţii. În acest scop, expresia
respectivă va fi marcată, va fi inclusă între paranteze, vor fi marcate şi
parantezele şi se va duce linia verticală a cursorului în partea stângă (prin
42
Lucrul cu structuri matematice

utilizarea adecvată a tastei Insert). În acest moment se introduce de la


tastatură numele funcţiei al cărei argument va deveni expresia marcată. Dacă
este vorba despre o funcţie implicită, aceasta va fi selectată din lista activată
fie prin comanda Insert
Function, din meniul Insert, fie
prin apăsarea butonului
a)
corespunzător din bara de
unelte Standard.
La editarea unei
expresii matematice este
posibilă şi utilizarea comenzilor
ce coordonează memoria
temporară (Clipboard). Astfel
pot fi "taiate" (comanda Cut),
"copiate" (comanda Copy) sau
"lipite" (comanda Paste)
porţiuni dintr-o expresie b)
matematică. Comenzile
respective se aplică zonelor Fig. 5.23
marcate cu ajutorul cursorului Introducerea parantezelor;
tip linie de editare. În situaţia a) de la tastatură;
b) prin folosirea barei Arithmetic
când zona eliminată (cu ajutorul
comenzii Cut) este un operand,
Mathcad-ul o înlocuieşte
automat cu un element de
a) b)
substituire, figura 5.24.
Ştergerea caracterelor Fig. 5.24
sau a zonelor dintr-o expresie Utilizarea comenzilor Cut, Copy, Paste:
matematică se poate face a) expresie înainte de aplicarea comenzii Cut;
utilizând tasta Backspace (pentru b) expresia după aplicarea comenzii Cut.
ştergerea spre stânga cursorului) sau tasta Delete (pentru ştergerea spre
dreapta cursorului).

5.6. Calcule iterative

Pentru executarea calculelor iterative Mathcad-ul foloseşte un tip


special de variabilă - variabila domeniu.
O variabilă domeniu are o serie de valori, cuprinse într-un domeniu
precizat, obţinute prin incrementare cu pas constant. Dacă variabila domeniu
43
MATHCAD - proiectare interactivă şi prelucrarea datelor experimentale

este utilizată într-o relaţie de calcul,


Mathcad-ul recalculează expresia pentru
fiecare dintre valorile variabilei.
Definirea unei variabile domeniu
(figura 5.25) se face asemănător cu
definirea variabilelor simple, prin
introducerea numelui acesteia, urmat de
Fig. 5.25 tastarea simbolului ":" . În partea dreaptă a
Elemente definitorii pentru expresiei de definiţie se introduce prima
variabila domeniu valoare, din domeniul dorit, urmată de
virgulă şi de cea de-a doua valoare pe care
o va lua variabila domeniu. Mai departe se
tastează simbolul ";" (sau se utilizează
butonului Range Variable - simbol m..n -
din bara Arithmetic) şi se introduce ultima
valoare a domeniului.
Pentru verificarea rezultatului
definirii se poate tasta, undeva sub sau la
a) b) c) dreapta locului de definire, numele
variabilei urmat de "=". se vor obţine astfel
Fig. 5.26
toate componentele variabile domeniu
Variabile-domeniu:
a) definire; b) afişare; c) varianta (figura 5.26b).
cu pas unitar Dacă după prima valoare din
domeniu se introduce direct simbolul ";" şi
apoi ultima valoare din domeniu, Mathcad-
ul consideră implicit că pasul de incrementare este unitar (figura 5.26c).
Cele arătate mai sus sunt prezentate sintetic în figura 5.27.

a)

b)

Fig. 5.27
Definirea variabilelor domeniu:
a) elemente introduse de la tastatură; b) elemente afişate în foia de lucru

44
Lucrul cu structuri matematice

Spre deosebire de variabilele normale, în cazul variabilelor


domeniu numele nu poate avea index sau exponent.
De remarcat faptul că orice variabilă folosită ca index trebuie să
aibă valori întregi, deci variabilele domeniu cu pas de incrementare
fracţionar nu pot fi folosite la index.
Rezultatele unei ecuaţii ce conţine o variabilă domeniu sunt afişate
într-un tabel de rezultate, alăturat ecuaţiei respective, figura 5.28. Valorile
cuprinse în tabelul de rezultate pot manipulate cu ajutorul memoriei
temporare Clipboard.
Mathcad-ul permite definirea de către
utilizator a funcţiilor, acestea fiind tratate ca ecuaţii cu
variabile simple sau domeniu. Pentru definirea unei
funcţii, într-o regiune de tip calcul matematic se scrie
numele, argumentul şi expresia funcţiei respective,
figura 5.29a.
De remarcat că, spre deosebire de ecuaţii, la
funcţii se foloseşte operatorul de atribuire ca separator
al celor doi membri. Aceasta permite definirea unor
funcţii ale căror variabile-argument nu au fost definite
anterior.
Pentru calcul valorii funcţiei se scrie, într-o
Fig. 5.28
regiune de calcul matematic, numele funcţiei având
Ecuaţie cu variabilă
ca argument valoarea numerică sau variabila domeniu domeniu
dorită, figura 5.29b,c.

a) b) c)

Fig. 5.29
Definirea şi evaluarea ecuaţiilor în Mathcad
De remarcat că, pentru evaluarea corectă a funcţiilor, este necesar
ca variabilele argument să fie definite anterior utilizării lor adică regiunile în
45
MATHCAD - proiectare interactivă şi prelucrarea datelor experimentale

care acestea sunt definite să fie amplasate mai sus sau mai la dreapta faţă de
regiunea funcţiei respective.

5.7. Stilul elementelor matematice

Prin stil în Mathcad se înţelege un mod coerent de afişare a


elementelor grafice, cum ar fi: tipul,
mărimea şi culoarea fontului, efecte etc.
În cazul expresiilor
matematice, stilul se aplică diferitelor
componente ale acestora (constante,
text, variabile etc.).
Mathcad-ul conţine stiluri
prestabilite pentru afişarea variabilelor
şi constantelor în cadrul expresiilor
matematice, acestea putând fi
Fig. 5.30 modificate de utilizator după dorinţă,
Fereastra activată de comanda
precum şi o serie de şapte stiluri ce pot
Format - Equation
fi personalizate.
Gestionarea stilurilor este
posibilă prin interfaţa Equation Format,
accesibilă prin intermediul comenzii
Equation, amplasată în meniului Format.
La accesarea comenzii se deschide o
fereastră (figura 5.30) în care utilizatorul
poate vizualiza şi modifica stilurile
corespunzătoare afişării elementelor
matematice.
Fereastra conţine mai multe
elemente de control:
- lista derulantă Style Name,
Fig. 5.26
Stiluri predefinite în Mathcad
care cuprinde numele tuturor stilurilor
existente în Mathcad (figura 5.31);
- câmpul New Style Name, în care utilizatorul poate redenumi unul
dintre stilurile User 1…User 7 (nu se pot redenumi stilurile implicite
Variables şi Constants;
- câmpul Default Equation Color, în care utilizatorul poate alege
culoarea implicită cu care vor fi afişate ecuaţiile;

46
Lucrul cu structuri matematice

- butonul Modify care duce la deschiderea unei noi ferestre, în care


utilizatorul poate redefini elementele caracteristice fontului aferent stilului
afişat în câmpul Style Name.
Prin apăsarea butonului OK, modificările devin active.
De remarcat faptul că aceste modificări sunt efective numai pentru
foaia de lucru curentă. Pentru a pute fi utilizate şi în alte foi de lucru, foia în
care au fost făcute modificările trebuie salvată ca model (template).

47
MATHCAD - proiectare interactivă şi prelucrarea datelor experimentale

CAPITOLUL 6
OPERATORI

6.1. Operatori booleeni

Pe lângă operatorii matematici de bază (adunare "+", scădere "-",


înmulţire "*", împărţire "/" şi ridicare la putere "^"), Mathcad-ul recunoaşte
şi o serie de operatori logici. Aceştia pot fi accesaţi prin intermediul barei de
unelte Evaluation, activabilă cu ajutorul
butonului corespunzător din bara Math
(figura 6.1).
Operatorii booleeni sunt utilizaţi
pentru construirea expresiilor ce include
comparaţii între diferite valori numerice
sau variabile.
Spre deosebire de ceilalţi
operatori, operatorii booleeni pot conduce
Fig. 6.1 doar la două tipuri de rezultat: "true"
Activarea barei Evaluation (adevărat) - dacă condiţia impusă de
operator operanzilor este îndeplinită şi
"false" (fals) - dacă această condiţie nu este îndeplinită.
În bara Evaluation sunt cuprinşi şase operatori booleeni:
- "egal" (figura 6.2a), dacă cei doi operanzi sunt egali întoarce
rezultatul "true";
- "mai mic" (figura 6.2b), dacă primul
operand este mai mic decât cel de-al doilea
a) b) c) d) e) f)
întoarce rezultatul "true";
Fig. 6.2 - "mai mare" (figura 6.2c), dacă primul
Operatori booleeni operand este mai mare decât cel de-al doilea
întoarce rezultatul "true";
- "mai mic sau egal" (figura 6.2d), dacă
primul operand este mai mic sau egal cu cel de-al doilea întoarce rezultatul
"true";
- "mai mare sau egal" (figura 6.2e), dacă primul operand este mai
mare sau egal cu cel de-al doilea întoarce rezultatul "true";

48
Operatori

- "diferit" (figura 6.2f), dacă primul operand nu este egal cu cel de-
al doilea întoarce rezultatul "true".
În foia de lucru rezultatele "true şi "false" apar sub formă numerică
binară (1 şi, respectiv 0).
Operatorii booleeni "mai mare", "mai mic", "mai mare sau egal" şi
"mai mic sau egal" nu pot fi utilizaţi cu operanzi numere complexe, în
mulţimea numerelor complexe aceste concepte nu au sens.
Mathcad-ul poate utiliza operatorii booleeni pentru compararea
şirurilor de caractere. Comparaţia se execută caracter cu caracter, funcţie de
codul ASCII corespunzător.

6.2. Operatori pentru vectori şi matrici

Majoritatea operatorilor matematici comuni pot fi aplicaţi şi


operanzilor de tip vector sau matrice. Operatorii specifici operanzilor
multidimensionali sunt grupaţi în bara de unelte Matrix, activabilă cu
ajutorul butonului corespunzător din bara Math (figura 6.3).
În funcţie de natura operanzilor, operatorii
pot acţiona diferit, rezultatul operaţiei fiind ori
scalar, ori vector sau matrice.
În continuare se prezintă o listă cu
operatorii ce pot avea ca operanzi vectori sau
matrici, precum şi efectul lor asupra acestora (se
utilizează următoarea simbolizare A, B - reprezintă
vectori sau matrici, u, v - reprezintă vectori, M - Fig. 6.3
reprezintă matricea pătrată, ui , vi - reprezintă Activarea barei Matrix
elementele componente ale vectorilor u şi v, z -
reprezintă o valoare numerică scalară, Mathcad, n -
reprezintă valori numerice întregi):
- A*z (înmulţire cu un scalar - figura 6.4a), multiplică fiecare
element al lui A cu z, rezultatul este o matrice
- u*v (produs scalar - figura 6.4a), se execută suma produselor
termenilor celor doi vectori (care trebuie să aibă acelaşi număr de elemente),
rezultatul este scalar;
- A*B (produs de matrici - figura 6.4a), se execută produsul
matricelor A şi B (numărul de coloane al matricei A trebuie să fie egal cu
numărul liniilor matricei B), rezultatul este o matrice;

49
MATHCAD - proiectare interactivă şi prelucrarea datelor experimentale

- A*v (produsul
dintre un vector şi o matrice
a) b) c) d) e) f) - figura 6.4a), numărul
coloanelor matricei A
trebuie să fie egal cu
numărul liniilor
g) h) i) j) k) l) (elementelor) vectorului v;
- A/z (împărţirea cu
Fig. 6.4 un scalar - figura 6.4b), se
Operatori pentru vectori şi matrici împarte fiecare element al
matricei A cu scalarul z,
rezultatul este o matrice;
- A+B (adunarea vectorilor sau matricilor - figura 6.4c), se adună
cele două tablouri element cu element, ele trebuind să aibă acelaşi număr de
linii şi coloane;
- A+z (adunarea cu un scalar - figura 6.4c), se adună elementele
matricei A cu scalarul z;
- A-B (scăderea vectorilor sau matricelor - figura 6.4d), se scad cele
două tablouri element cu element, ele trebuind să aibă acelaşi număr de linii
şi coloane;
- A-z (scăderea cu un scalar - figura 6.4d), se scade scalarul z din
fiecare dintre elementele matricei A;
- -A (schimbarea semnului unui vector sau matrice - figura 6.4d), se
schimbă semnul fiecărui element al tabloului A;
- Mn (ridicarea vectorilor sau matricelor la putere - figura 6.4e), se
ridică la puterea n matricea M, folosind produsul de matrici; M-1 reprezintă
inversul matricei M, alte numere negative folosite pentru exponent
conducând la puterile corespunzătoare ale matricei inverse;
- |v| (modulul unui vector - figura 6.4f), calculat ca radical din
produsul vectorului cu conjugatul complex al acestuia;
- |M| (determinantul - figura 6.4f), matricea M trebuie să fie pătrată;
- AT (transpusa - figura 6.4g), calculează transpusa matricei A,
schimbând rândurile cu coloanele acesteia;
- u x v (produs vectorial - figura 6.4h), calculează produs vectorial
al celor doi vectori;
- u+v (suma vectorială - figura 6.4i), calculează suma vectorială a
două tablouri;
- vectorizare (figura 6.4j), toate operaţiile efectuate cu matrice
respectivă sunt efectuate element cu element;
50
Operatori

- A{n} (extragerea unei coloane dintr-o matrice - figura 6.4k),


rezultatul este un vector;
- vn (extragerea unui element dintr-un vector - figura 6.4l),
rezultatul este un scalar;
- Am,n (extragerea unui element dintr-o matrice - figura 6.4l),
rezultatul este un scalar.

6.3. Operatori tip sumă şi produs

Operatorii sumă şi produs execută suma, respectiv produsul, unei


expresii pentru un set de valori atribuite
unui index.
Pentru accesarea lor se utilizează
butoanele corespunzătoare amplasate în
bara de unelte Calculus, activabilă cu
ajutorul scurtăturii din bara Math, figura
6.5.
Cei doi operatori sunt disponibili în
două variante:
- Cu index iterabil în paşi cu valori Fig. 6.5
unitare (figura 6.6a), în această situaţie Activarea barei de unelte Calculus
pasul de iteraţie al indexul este prestabilit ca
fiind unitar. Pentru evaluarea unei sume sau
unui produs se activează operatorul
a) b)
corespunzător (figura 6.7a), se completează
elementele de substituire adecvate (figura Fig. 6.6
6.7b) şi se apasă tasta "=" (figura 6.7c). Operatori pentru sumă şi produs
- Cu index iterabil în paşi cu valori a) cu index unitar; b) cu index
reale (figura 6.6b), în această situaţie oarecare.
indexul poate fi o variabilă domeniu definită
de utilizator. Pentru evaluarea unei
sume sau produs trebuie mai întâi
definită variabila domeniu
corespunzătoare (figura 6.8a), se
activează operatorul corespunzător a) b) c)
(figura 6.8b), se completează
Fig. 6.7
elementele de substituire (figura 6.8c)
Utilizarea operatorilor cu index unitar
şi se apasă tasta "=" (figura 6.8d).

51
MATHCAD - proiectare interactivă şi prelucrarea datelor experimentale

În cazul utilizării
operatorilor sumă şi produs,
Mathcad-ul ia în considerare
a) b) c) d)
fiecare valoare a indexului
Fig. 6.8 specificat de utilizator. Prin
Utilizarea operatorilor cu index real folosirea adecvată a operatorilor
booleeni se poate limita execuţia
operaţiei la anumite valori ale
indexului (figura 6.9).
a) b) c)

Fig. 6.9
Folosirea operatorilor booleeni pentru limitarea
evaluării sumelor:
a) definirea variabilei domeniu; b) definirea
funcţiei: c) evaluarea funcţiei

6.4. Operatori pentru derivare numerică

Mathcad-ul conţine o serie de operatori destinaţi evaluării numerice


a derivatelor de ordinul întâi sau de
ordin superior. Ei pot fi accesaţi cu
ajutorul butoanelor corespunzătoare
a) b) c) d) amplasate în bara Calculus (figura
6.5).
Fig. 6.10
Pentru calcularea valorii
Evaluarea derivatei de ordinul întâi
numerice a derivatei de ordinul întâi
pentru o funcţie trebuie mai întâi definită funcţia respectivă (figura 6.10a),
apoi se stabileşte valoarea variabilei în punctul de derivare (figura 6.10b), se
introduce operatorul
corespunzător (figura 6.10c), se
completează elementele de
a) b) c) d) substituire cu valorile adecvate şi
se apasă tasta "=" (figura 6.10d).
Fig. 6.11 Deşi valoarea returnată
Crearea de funcţii cu operatorii de derivare de operaţia de derivare este
numerică se pot defini funcţii cu
ajutorul acestor operatori, figura 6.11.
52
Operatori

Ca variabile ale funcţiilor supuse derivării numerice pot fi folosite


şi variabile domeniu, obţinându-se în acest caz mai multe valori
corespunzătoare derivatei.
Pentru derivatele de ordin superior este disponibil un operator
adecvat, modul de lucru fiind identic, cu excepţia că în acest caz trebuie
specificat ordinul de derivare (figura 6.12).

a) b) c) d)

Fig. 6.12
Utilizarea operatorului pentru derivare numerică de ordin superior
a) definirea funcţiei; b) stabilirea valorii de derivare; c) introducerea operatorului;
d) determinarea valorii numerice

6.5. Operatori pentru integrare numerică

Mathcad-ul oferă posibilitate calculului numeric al integralelor,


folosind în acest scop doi operatori specifici (pentru integrale definite,
respectiv nedefinite) amplasaţi în bara Calculus (figura 6.5).
Etapele calculării unei integrale definite sunt identice cu cele
prezentate la calculul derivatelor şi sunt prezentate sintetic în figura 6.13.

a) b) c) d)

Fig. 6.13
Utilizarea operatorului pentru integrare numerică definită
a) definirea funcţiei; b) stabilirea valorii de integrare; c) introducerea
operatorului; d) determinarea valorii numerice

Pentru realizarea unei operaţii de integrare numerică în Mathcad se


impun o serie de condiţii:
- limitele de integrare trebuie să fie numere reale;
- expresia integrată poate fi fie reală, fie complexă;

53
MATHCAD - proiectare interactivă şi prelucrarea datelor experimentale

- cu excepţia variabilei de integrare, celelalte variabile utilizate


trebuiesc definite anterior;
- variabila de integrare trebuie introdusă numai cu nume, dacă se
introduc şi unităţi de măsură, atunci acestea trebuie introduse şi la valorile
limitelor de integrare, fiind consistente
Mathcad-ul foloseşte pentru efectuarea integrărilor numerice o serie
de metode prestabilite. În mod implicit programul apreciază metoda optimă
pentru fiecare caz în parte.
Există totuşi posibilitatea impunerii
de către utilizator a unei anumite metode de
calcul. În acest scop, după introducerea
operatorului de integrare (înainte de
completarea elementelor de substituire), se
face un click dreapta-mouse pe operatorul
introdus în foia de lucru şi se obţine un meniu
contextual (figura 6.14). În acest meniu sunt
prezentate metodele de integrare, fiind activată
implicit opţiunea Autoselect. Pentru
impunerea unei anumite metode de lucru se va
Fig. 6.14
Meniu contextual pentru
activa opţiunea corespunzătoare.
alegerea metodei de integrare Pentru limitele de integrare se pot
folosi variabile domeniu, obţinându-se astfel
mai multe valori pentru funcţie evaluată (figura 6.15).

a) b) c)

d) e)

Fig. 6.15
Utilizarea operatorului pentru integrare numerică cu limite variabile
a) definirea funcţiei; b) stabilirea valorii de integrare; c) definirea variabilei domeniu;
d) introducerea operatorului; e) determinarea valorii numerice.

54
Operatori

Mathcad-ul permite utilizarea operatorilor pentru integrare


multiplă. În acest scop este suficient aplicarea operatorului de mai multe ori,
figura 6.16.

a) b) c)

d) e)
Fig. 6.16
Evaluarea numerică a integralelor duble
a) definirea variabilelor de integrare; b) definirea funcţiei; c) introducerea
operatorului (dublu); d) completarea elementelor de substituire; e) evaluare.

55
MATHCAD - proiectare interactivă şi prelucrarea datelor experimentale

CAPITOLUL 7
FUNCŢII

7.1. Funcţii matematice

Mathcad-ul este dotat cu o bogată bibliotecă de funcţii implicite.


Aceste funcţii pot fi explorate şi introduse în foia de lucru cu ajutorul
comenzilor prezentate la paragraful 5.3 (figurile 5.8, 5.9).
În continuare se prezintă unele dintre cele mai utilizate funcţii
conţinute în biblioteca implicită din Mathcad.

Funcţii trigonometrice
Tab. 7.1
Funcţia Acţiune
întoarce valoarea pozitivă (în radiani) a
1. angle(x,y) unghiului dintre axa 0-x şi punctul de
coordonate (x,y)
2. cos(x) întoarce valoarea cosinusului pentru x
3. sin(x) întoarce valoarea sinusului pentru x
4. tan(x) întoarce valoarea tangentei pentru x
5. cot(x) întoarce valoarea cotangentei pentru x
întoarce valoarea secantei pentru x
6. sec(x)
(sec(x)=1/cos(x))
7. csc(x) întoarce valoarea cosecantei pentru x
întoarce valoarea unghiului a cărui cosinus
8. acos(x)
este x
întoarce valoarea unghiului a cărui sinus este
9. asin(x)
x
întoarce valoarea unghiului a cărui tangentă
10. atan(x)
este x
întoarce valoarea pozitivă (în radiani)a
11. atan2(x) unhgiului dintre axa axa 0-x şi punctul de
coordonate (x,y)

56
Funcţii

Funcţii exponenţiale
Tab. 7.2
Funcţia Acţiune
întoarce valoarea constantei e ridicată la
1. exp(x)
puterea x
2. ln(x) întoarce valoarea logaritmului natural din x
întoarce valoarea logaritmului de bază b din
3. log(x, [b]) x (dacă b lispeşte, se întoarce valoarea
logaritmului zecimal)

Funcţii pentru numere complexe


Tab. 7.3
Funcţia Acţiune
întoarce valoarea unghiului, din planul
1. arg(x)
complex, între axa reală şi x
întoarce valoarea nulă dacă x = 0, valoarea 1
2. csgn(x) dacă Re(x) > 0 sau dacă (Re(x) = 0 şi Im(x)
> 0) şi valoarea 1 în celelalte cazuri
întoarce valoarea imaginară a numărului
3. Im(x)
complex x
întoarce valoarea reală a numărului complex
4. Re(x)
x
întoarce valoarea 1 dacă x = 0 şi x/|x| în
5. signum(x)
celelalte cazuri

Funcţii de rotunjire
Tab. 7.4
Funcţia Acţiune
întoarce valoarea celui mai mic întreg mai
1. ceil(x)
mare sau egal cu x
întoarce valoarea celui mai mare întreg mai
2. floor(x)
mic sau egal cu x
întoarce valoarea numărului x rotunjită cu n
3. round(x, n)
zecimale
5. trunc(x) întoarce partea întreagă a numărului x

57
MATHCAD - proiectare interactivă şi prelucrarea datelor experimentale

Funcţii logice

Tab. 7.5
Funcţia Acţiune
întoarce valoarea a, dacă condiţia cond este "true"
1. if(cond, a, b)
şi valoarea b dacă condiţia cond este "false"
funcţia delta a lui Kronecker, întoarce valoarea 1
2. (a, b)
dacă a = b şi valoarea 0 în rest (a şi b întregi)
tensorul antisimetric complet de rangul trei (i, j, k
trebuie să fie întregi şi cuprinse între 0 şi 2),
3. (i, j, k) întoarce valoarea 0 dacă sunt două argumente
egale, valoarea 1 pentru permutări pare şi -1
pentru permutări impare
funcţia lui Hearviside, întoarce 1 dacăx este mai
5. (x)
mare sau egal cu 0 şi 0 în rest
întoarce valoarea 0 dacă x = 0, valoarea 1 dacă x
6. sign(x)
> 0 şi -1 în rest

Funcţii din teoria combinatorie

Tab. 7.6
Funcţia Acţiune
întoarce numărul combinaţiilor de n luate câte k,
1. combin(n, k)
n şi k întregi, cu n cuprins între 0 şi k
întoarce numărul permutărilor de n luate câte k, n
2. permut(n, k)
şi k întregi, cu n cuprins între 0 şi k
3. gcd(A) întoarce cel mai mare divizor comun
4. lcm(A) întoarce cel mai mic multiplu comun
5. mod(x, y) întoarce valoarea restului împărţirii lui x cu y

58
Funcţii

Funcţii speciale

Tab. 7.7
Funcţia Acţiune
1. erf(x) întoarce valoarea funcţiei de eroare în x, x real
întoarce valoarea complementului funcţiei de
2. erfc(x)
eroare în x, x real
întoarce valoarea funcţiei hypergeometrice
3. fhyper(a, b, c, x)
Gauss în punctul x, fiind daţi parametrii a, b, c
întoarce valoarea funcţiei clasice gamma-
4. Γ(x) Euler, pentru numere reale sau complexe,
nedefinită pentru x < 0
întoarce valoarea funcţiei extinse gamma-
5. Γ(x, y)
Euler, pentru numere reale, pozitive
întoarce valoarea polinomului lui Hermite de
6. Her(n, x)
gradul n în x
întoarce valoarea funcţiei beta incomplete
7. ibeta(a, x, y)
pentru x şi y cu parametrul a
întoarce valoarea polinomului lui Jacobi de
8. Jac(n, a, b, x)
grad n în x cu parametrii a şi b
întoarce valoarea polinomului lui Laguerre de
9. Lag(n, x)
grad n în x
întoarce valoarea polinomului lui Legendre de
10. Leg(n, x)
grad n în x
întoarce valoarea funcţiei hypergeometrice
11. mhyper(a, b, x) confluente în punctul x, fiind daţi parametrii a,
b
întoarce valoarea polinomului lui Chebyshev
12. Tcheb(n, x)
de grad n, de prim aspect, în x
întoarce valoarea polinomului lui Chebyshev
13. Ucheb(n, x)
de grad n, de aspect secund, în x

59
MATHCAD - proiectare interactivă şi prelucrarea datelor experimentale

7.2. Transformate Fourier

Mathcad-ul include o serie de funcţii pentru efectuarea


transformărilor discrete. Toate aceste funcţii necesită vectori drept
argumente.
Când se defineşte un vector pentru a fi utilizat într-o transformare
Fourier, Mathcad-ul presupune implicit că indexul vectorului pleacă de la
valoarea 0, afară de cazul în care utilizatorul nu a optat pentru altă valoare a
variabilei implicite Origin.
Funcţiile aferente transformărilor Fourier sun prezentate în tabelul
următor.

Funcţii de transformare Fourier


Tab. 7.8
Funcţia Acţiune
1. cfft(A) întoarce transformata Fourier a tabloului A
întoarce transformata Fourier inversă a tabloului
2. icfft(A)
A, corespunzătoare funcţiei cfft
întoarce transformata Fourier a unui vector cu 2n
3. fft(v)
elemente
întoarce transformata Fourier inversă,
4. ifft(v)
corespunzătoare funcţiei fft
întoarce o transformată egală cu cfft, cu excepţia
5. CFFT(A)
că utilizează un factor de normalizare diferit
întoarce transformata Fourier inversă,
6. ICFFT(A)
corespunzătoare funcţiei CFFT
întoarce o transformată egală cu fft, cu excepţia
7. FFt(v)
că utilizează un factor de normalizare diferit
întoarce transformata Fourier inversă,
8. IFFT(v)
corespunzătoare funcţiei FFT

Se recomandă utilizarea funcţiilor fft şi ifft (sau FFT şi IFFT) dacă


valorile datelor în domeniul de timp sunt reale şi dacă vectorii au 2m
elemente.
În celelalte cazuri este recomandată utilizarea funcţiilor cfft şi icfft
(sau CFFT şi ICFFT).

60
Funcţii

7.3. Funcţii pentru variabile tip vector şi matrice

În cazul funcţiilor care necesită argumente de tip vector, se preferă


utilizarea vectorilor coloană. În vector linie poate fi transformat în vector
coloană cu ajutorul operatorului de transpunere, prezentat la paragraful 6.2.
Principalele funcţii pentru manipularea vectorilor şi matricilor sunt
prezentate în tabelul următor:

Funcţii pentru vectori şi matrici


Tab. 7.9
Funcţia Acţiune
întoarce numărul coloanelor matricei A, dacă A
1. cols(A)
este scalar, întoarce valoarea 0
întoarce valoarea indexului ultimului element al
2. last(v)
vectorului v
3. length(v) întoarce numărul de elemente al vectorului v
întoarce elementul cu valoare maximă din
matricea A, dacă A are elemente imaginare se
4. max(A)
întoarce cea mai mare parte reală adunată cu de
i ori cea mai mare parte imaginară
întoarce elementul cu valoare minimă din
matricea A, dacă A are elemente imaginare se
5. min(A)
întoarce cea mai mică parte reală adunată cu de i
ori cea mai mică parte imaginară
întoarce numărul liniilor matricei A, dacă A este
6. rows(A)
scalar, întoarce valoarea 0
întoarce o matrice diagonală ce conţine pe
7. diag(v)
diagonală elementele vectorului v
întoarce matricea inversă stângă a lui A astfel
8. geninv(A)
încât L - A = I
întoarce o matrice de n x n elemente nule cu
9. identity(n)
elemente unitare pe diagonală
întoarce suma elementelor diagonale ale
10. tr(M)
matricei M
întoarce un tablou format prin plasarea matricei
11. augment(A, B) B la dreapta matricei A, cele două matrice
având acelaşi număr de linii
61
MATHCAD - proiectare interactivă şi prelucrarea datelor experimentale

Tab. 7.9 (continuare)


Funcţia Acţiune
creează o matrice în care fiecare element i,j este
12. matrix(m, n, f)
calculat cu f(i,j) cu i = 0…m-1 şi j = 0…n-1
întoarce un tablou format prin plasarea matricei
13. stack(A, B) B sub matricea A, cele două matrice având
acelaşi număr de coloane
întoarce o matrice conţinând toate elementele de
submatrix(A,
14. la rândul ir până la rândul jr şi de la coloana ic
ir, jr, ic, jc)
până la coloana jc
15. isolve(A, v) întoarce un vector soluţie x astfel încât A*x = v
întoarce cea mai mică matrice triunghiulară L
16. cholesky(A)
astfel încât L*LT = A
întoarce o matrice unică ce conţine trei matrice
pătrate P, L, şi U, toate cu aceeaşi mărime ca şi
17. lu(A)
A, unite împreună una lângă alta şi satisfăcând
condiţia P*A=L*U
întoarce un tablou format prin rearanjarea
18. csort(A, n) rândurilor matricei A, astfel încât elementele din
coloana n să fie ordonate crescător
întoarce o matrice obţinută prin inversarea
19. reverse(A)
ordinii rândurilor matricei A
întoarce vectorul v cu elementele ordonate
20. sort(v)
crescător

7.4. Rezolvarea şi optimizarea funcţiilor

Mathcad-ul permite rezolvarea ecuaţiilor începând de la ecuaţiile cu


o singură necunoscută şi până la sisteme complexe de ecuaţii cu condiţii
iniţiale
Pentru rezolvarea ecuaţiilor Mathcad-ul foloseşte două funcţii:
- Polyroots(v), întoarce rădăcinile unui polinom de gradul n ai cărui
coeficienţi sunt grupaţi în vectorul v de lungime n+1. Rezultatul este un
vector de lungime n;
- root(f(x), x), întoarce valoarea lui x pentru care expresia f(x) este
nulă. Argumentul poate fi real sau complex. Funcţia trebuie precedată în

62
Funcţii

foia de lucru de definirea unei valori iniţiale pentru x. Funcţia face evaluări
succesive şi întoarce rezultatul în momentul în care două evaluări sunt mai
apropiate de valoarea variabilei implicite Tol.
Mathcad-ul include o serie de rutine deosebit de eficiente pentru
rezolvarea sistemelor liniare şi optimizare. Pot fi tratate următoarele tipuri
de probleme:
- sisteme liniare de ecuaţii cu egalităţi sau cu inegalităţi;
- sisteme neliniare de ecuaţii;
- optimizarea unei funcţii obiectiv (maximizare sau minimizare);
- optimizarea unei funcţii obiectiv pornind de la condiţii iniţiale;
În funcţie de varianta programului Mathcad numărul de
necunoscute variază: pentru varianta profesională maximum 200 de
variabile în sisteme neliniare şi maximum 500 de variabile în sisteme liniare
Metoda optimă de a optimiza sistemele de ecuaţii este de ale
introduce într-un "bloc de optimizare".
Un bloc de optimizare poate fi creat prin parcurgerea a patru etape:
- Furnizarea unei valori iniţiale previzionate pentru fiecare dintre
necunoscute. Mathcad-ul rezolvă ecuaţiile pe cale iterativă, căutând o
convergenţă către soluţia corectă. Furnizarea unei valori iniţiale constituie
punctul de plecare pentru procesul iterativ.
- Introducerea cuvântului Given, într-o regiune matematică
separată, amplasată sub valorile iniţiale ale necunoscutelor.
- Introducerea condiţiilor iniţiale sub cuvântul Given, folosind
operatorii booleeni.
- Introducerea ecuaţiilor ce include una dintre funcţiile de
optimizare (prezentate în tabelul 7.10) sub condiţii.
În procesul de rezolvare Mathcad-ul urmăreşte încadrarea în două
toleranţe:
- toleranţa de convergenţă, se calculează valorile succesive până
când diferenţa dintre două valori este mai mică decât valoarea variabilei
implicite Tol;
- toleranţa impusă de condiţiile iniţiale, determinată de valoarea
variabilei implicite Ctol.
Ca şi în cazul integrării numerice şi în rezolvarea ecuaţiilor
Mathcad-ul foloseşte o serie de metode aproximative, alegerea metodei
optime fiind implicită. Dacă se doreşte impunerea unui anumit algoritm de
rezolvare, se poate valida opţiune corespunzătoare în meniul contextual
accesibil prin click dreapta-mouse pe blocul de optimizare

63
MATHCAD - proiectare interactivă şi prelucrarea datelor experimentale

Funcţii de optimizare
Tab. 7.10
Funcţia Acţiune
întoarce valorile x0, x1.. ce satisfac
1. Find(x0, x1, ..)
condiţiile dintr-un bloc de optimizare
întoarce valorile x0, x1.. ce conduc la
2. Maximize(f, x0, x1…)
valori maxime ale funcţiei f
întoarce valorile x0, x1.. ce conduc la
3. Minimize(f, x0, x1..)
valori minime ale funcţiei f
întoarce valorile x0, x1.. ce se apropie
4. Minerr(x0, x1..) cel mai mult de realizarea condiţiilor
dintr-un bloc de optimizare

7.5. Statistică, probabilităţi şi analiza datelor

Mathcad-ul este foarte bine dotat cu funcţii specifice calculului


statistic şi de probabilităţi. În tabelul 7.11 sunt prezentate o serie de funcţii
utilizate în acest domeniu.

Funcţii statistice
Tab. 7.11
Funcţia Acţiune
întoarce coeficientul de corelaţie Pearsons
1. corr(A, B)
pentru tablourile A şi B
întoarce covariantul elementelor tablourilor A şi
2. cvar(A, B)
B
întoarce media geometrică a elementelor
3. gmean(A)
tabloului A
întoarce un vector ce reprezintă frecvenţa cu car
4. hist(int, A) valorile din A se regăsesc în intervalele
reprezentate de vectorul int
întoarce media armonică a elementelor tabloului
5. hmean(A)
A
întoarce media aritmetică a elementelor
6. mean(A)
tabloului A

64
Funcţii

Tab. 7.11 (continuare)


Funcţia Acţiune
întoarce valoarea tabloului A cu frecvenţa de
7. mode(A)
apariţie cea mai mare
întoarce deviaţia standard de populaţie pentru
8. stdev(A)
elementele tabloului A
întoarce deviaţia standard etalon pentru
9. Stdev(A)
elementele tabloului A
întoarce variaţia populaţiei elementelor
10. var(A)
tabloului A
întoarce variaţia etalon pentru elementele
11. Var(A)
tabloului A

Mathcad-ul include o serie de funcţii pentru lucrul cu densităţile de


probabilitate. Acestea sunt grupate în patru categorii:
- Densităţi de probabilitate. Denumirea acestor funcţii începe cu
litera "d" şi întorc probabilitatea ca o variabilă oarecare să ia o valoare
particulară.
- Distribuţii cumulative de probabilitate. Denumirea acestor funcţii
începe cu litera "p" şi întorc probabilitatea ca o variabila oarecare să ia o
valoare "mai mică decât" sau "egală cu" o valoare specificată.
- Distribuţii cumulative de probabilitate inverse. Denumirea acestor
funcţii începe cu litera "q", au probabilitatea "p" (cuprinsă între 0 şi 1) ca
argument şi întorc o probabilitate ca o variabilă aleatoare să fie "mai mică
decât" sau "egală cu" o valoare specificată de "p".
- Generatoare de numere aleatoare. Denumirea acestor funcţii
începe cu litera "r" şi întorc un vector cu n elemente generate aleator.
Mathcad-ul posedă o serie de funcţii implicite pentru interpolare şi
predicţie.
Interpolarea presupune existenţa unor date iniţiale şi livrează valori
cuprinse între aceste date. Reprezentarea generală a acestor tip de date este
prin puncte. Mathcad-ul permite unirea punctelor iniţiale fie prin linii drepte
(facilitatea de interpolare liniară) fie prin segmente de curbe polinomiale
cubice (facilitatea de interpolare splină cubică).
Funcţiile specifice de interpolare sunt prezentate în tabelul 7.12.

65
MATHCAD - proiectare interactivă şi prelucrarea datelor experimentale

Funcţii de interpolare
Tab. 7.12
Funcţia Acţiune
întoarce un vector al coeficienţilor unei
1. bspline(vx, vy, u, n) curbe spline de grad n, utilizat în funcţia
interp
întoarce un vector al coeficienţilor unei
2. cspline(vx, vy)
curbe spline cubice, utilizat în funcţia interp
întoarce valoarea interpolată y
corespunzătoare argumentului x, vs este un
3. interp(vs, vx, vy, x) vector cu rezultate intermediare obţinute
prin evaluări bspline, cspline, lspline sau
pspline
utilizează datele din vectoriivx şi vy pentru a
4. linterp(vx, vy, x) întoarce o valoare interpolată liniar y
corespunzătoare argumentului x
întoarce un vector al coeficienţilor unei
5. lspline(vx, vy)
curbe spline cubice, utilizat în funcţia interp
întoarce q valori prezise pe baza a p valori
6. predict(v, p, q)
consecutive din vectorul v
întoarce un vector al coeficienţilor unei
7. pspline(vx, vy)
curbe spline cubice, utilizat în funcţia interp

O altă categorie de funcţii din biblioteca implicită a Mathcad-ului


este constituită de funcţiile de regresie. Aceste funcţii generează o curbă sau
o suprafaţă (de un anumit tip), urmărind minimizarea erorii dintre acesta şi
datele furnizate. Funcţiile respective sunt grupate în trei categorii, prezentate
în tabelele 7.13…7.15.
Funcţii de regresie liniară
Tab. 7.13
Funcţia Acţiune
întoarce un scalar y, obţinut prin metoda
1. intercept(vx, vy) celor mai mici pătrate pe baza datelor din vx
şi vy
întoarce un scalar - panta, obţinută prin
2. slope(vx, vy) metoda celor mai mici pătrate pe baza
datelor din vx şi vy
66
Funcţii

Tab. 7.13 (continuare)


Funcţia Acţiune
întoarce valoarea erorii standard asociată cu
3. stderr(vx, vy) regresia liniară a elementelor vy pe
elementele vx.

Funcţii de regresie polinomială


Tab. 7.14
Funcţia Acţiune
întoarce vectorul coeficienţilor pentru
regresia polinomială a celor mai mici pătrate
1. regress(vx, vy, n)
(de grad n) pentru datele din vectorii vx şi
vy
întoarce un vector specificând un set de
2. loess(vx, vy, span) polinomiale de ordin secund care se apropie
cel mai bine de punctele din vectorii vx şi vy

Aceste funcţii sunt utile în situaţia în care se posedă un se de valori


măsurate y, corespunzătoare unor valori x şi se doreşte a se obţine o funcţie
polinomială care să le lege între ele.

Funcţii de regresie generalizată


Tab. 7.15
Funcţia Acţiune
întoarce un vector conţinând coeficienţii
folosiţi pentru a crea o combinaţie liniară de
1. linfit(vx, vy, F)
funcţii F care să aproximeze cel mai bine
datele din vectorii vx şi vy
întoarce parametrii pentru cea mai bună
aproximare a funţiei F în punctele date de
2. genfit(vx, vy, vg, F)
vectorii vx, şi vy, vg este un vector cu
elemente predicţionate

Funcţia linfit este proiectată să modeleze datele iniţiale printr-o


combinaţie de funcţii arbitrare, în timp ce funcţia genfit este proiectată să
aproximeze datele prin funcţii ale căror parametri trebuiesc impuşi.
67
MATHCAD - proiectare interactivă şi prelucrarea datelor experimentale

7.6. Rezolvarea ecuaţiilor diferenţiale

În cazul ecuaţiilor diferenţiale necunoscuta este, în general, o


funcţie. Pentru ecuaţiile ordinare această funcţie depinde de o singură
variabilă. Dacă funcţia necunoscută depinde de două sau mai multe
variabile, ecuaţiile devin cu derivate parţiale.
Mathcad-ul include un modul "rkfixed" (bazat pe metodele Runge-
Kutta), destinat rezolvării ecuaţiilor şi a sistemelor de ecuaţii diferenţiale de
ordin superior, pornind de la condiţii iniţiale.
În cazul utilizării modului rkfixed pentru rezolvarea ecuaţiilor
diferenţiale de ordinul întâi, este aplicată metoda Runge-Kutta de ordinul
patru, rezultatul fiind o matrice cu două coloane. Coloana din stânga conţine
punctele în care se evaluează soluţia ecuaţiei diferenţiale, în timp ce coloana
din dreapta conţine valorile corespunzătoare ale soluţiei. Sintaxa comenzii
este:
rkfixed(y, x1, x2, npoints, D)

unde:
y = un vector cu n valori iniţiale, unde n este ordinul ecuaţiei sau
mărimea sistemului de ecuaţii rezolvat;
x1, x2 = punctele de capăt ale intervalului pe care se va evalua
soluţia ecuaţiei;
npoints = numărul de puncte dincolo de punctul initial în care
soluţia va fi aproximată;
D(x,y) = un vector cu n elemente, acestea fiind derivatele de
ordinul întâi ale funcţiilor necunoscute.
În cazul rezolvării ecuaţiilor de ordin superior apar unele diferenţe
faţă de situaţia precedentă:
- vectorul valorilor iniţiale y are acum două componente - valorile
funcţiei şi valorile primei derivate în punctele iniţiale, x1;
- funcţia D(t, y) are de asemenea două componente;
- matricea soluţiilor conţine acum trei coloane, cea din stânga
pentrui valorile t, cea din mijloc pentru valorile y(t) şi cea din dreapta pentru
valorile y'(t).
Rezolvarea sistemelor de ecuaţii diferenţiale este foarte
asemănătoare cu rezolvarea ecuaţiilor de ordin superior. În prima etapă
trebuie definit un vector conţinând valorile iniţiale pentru fiecare funcţie
necunoscută.
68
Funcţii

În cea de-a doua etapă se defineşte un vector conţinând prima


derivată a fiecărei funcţii necunoscute. După stabilirea punctelor în care
urmează a se calcula soluţia se transferă informaţiile către modului rkfixed.
Rezultatul returnat va fi o matrice a cărei primă coloană conţine
punctele de evaluare a soluţiilor, restul coloanelor conţinând funcţiile soluţie
evaluate în punctele corespondente.

7.7. Funcţii diverse

Mathcad-ul include în bibliotecile de funcţii implicite o serie de


funcţii cu utilizări diverse. Printre acestea se numără funcţiile de expresii,
funcţiile de şir şi funcţiile de acces la fişiere. Toate acestea sunt prezentate
în tabelele următoare.

Funcţii de expresii
Tab. 7.16
Funcţia Acţiune
întoarce 1 dacă x este o matrice sau un
1. lsArray(x)
vector şi 0 în rest
întoarce 1 dacă x este un număr real
2. lsScalar(x)
sau complex şi 0 în rest
întoarce 1 dacă x este un şir de
3. lsString(x)
caractere şi 0 în rest
întoarce un şir de caractere obţinut prin
4. concat(S1, S2, [S3,..])
concatenarea argumentelor
întoarce un şir sub forma unui mesaj de
5. error(S)
eroare
întoarce un şir de caractere obţinut prin
6. num2str(x) convertirea numărului real sau complex
x în valoare decimală
întoarce un vector de coduri ASCII
7. str2vec(S)
corespunzătoare caracterelor din şirul S
întoarce poziţie de început a subşirului
8. search(S, S1, n)
S1 din şirul S, începând cu poziţia n
întoarce numărul de caractere din şirul
9. strien(S)
S

69
MATHCAD - proiectare interactivă şi prelucrarea datelor experimentale

Funcţii de acces la fişiere


Tab. 7.17
Funcţia Acţiune
citeşte un fişier de date structurate şi
1. READPRN(file)
întoarce o matrice
2. WRITEPRN(file) scrie un fişier pornind de la o matrice
3. APPENDPRN(file) adaugă o matrice la un fişier existent
creează o matrice conţinând
4. READBMP(file) reprezentarea unei imagini alb-negru în
format BMP
creează o matrice conţinând
5. READRGB(file) reprezentarea unei imagini în culori în
format BMP
creează o imagine alb-negru BMP
6. WRITEBMP(file)
pornind de la o matrice
creează o imagine color BMP pornind
7. WRITERGB(file)
de la o matrice
creează o matrice pornind de la un
8. READ_IMAGE(file) fişier de imagine tip BMP, JPG, GIF
etc.
întoarce un tablou conţinând valorile
9. LoadColormap(file)
din fişierul colormap
creează un fişier tip colomap pornind
10. SaveColormap(file) de la informaţiile conţinute într-o
matrice cu trei coloane.

Fişierele de tip colormap conţin trei coloane de valori


corespunzătore nivelurilor de roşu, verde şi albastru, fiind utilizate pentru
colorarea graficelor 3D.

70
Vectori, matrici, tablouri de date

CAPITOLUL 8
VECTORI, MATRICI, TABLOURI DE DATE

8.1. Tablouri de date

În Mathcad tablourile de date se pot întâlni sub două forme: vectori


şi matrici.
Un vector sau o matrice poate fi creată cu ajutorul comenzii Matrix,
amplasată în meniul Insert, prezentată la paragraful 5.3 (figura 5.6).
Mathcad-ul oferă posibilitatea modificării numărului de linii sau/şi
coloane ale unei matrici cu ajutorul aceleaşi comenzi. În acest scop, se
poziţionează cursorul în matricea de modificat, apoi se lansează comanda
Insert - Matrix şi se introduc în câmpurile corespunzătoare numerele dorite
(figura 8.1).
De remarcat faptul
că rândurile suplimentare
sunt introduse sub
elementul selectat, în timp
ce coloanele suplimentare
sunt introduse la dreapta a) b) c) d)
elementului selectat.
elementele Fig. 8.1
Modificarea numărului de elemente la o matrice
componente ale unei a) matricea originală; b) inserare cursor; c) lansare
matrici pot fi generate comandă Insert - Matrix; d) matricea finală
folosind variabile domeniu.
În acest scop se
poate utiliza o ecuaţie cu două variabile domeniu i şi j, elementele matricei
fiind definite printr-o ecuaţie de forma xi,j = i+j, figura 8.2.
O altă posibilitate oferită de Mathcad este importul tablourilor
create în alte aplicaţii. Se utilizează în acest scop comanda Component,
amplasată în meniul Insert. Lansarea comenzii conduce la deschiderea unei
ferestre de dialog în care utilizatorul specifică procedura de import adecvată.
Pentru importul de matrici se utilizează facilitatea File Read/Write.
Accesarea acesteia conduce la deschiderea mai multor ferestre succesive de
dialog în care utilizatorul specifică operaţiunea dorită (citire - Read sau
înregistrare - Write), tipul de fişier (text sau specific unei aplicaţii anume -
71
MATHCAD - proiectare interactivă şi prelucrarea datelor experimentale

Matlab. Excel etc.) şi calea către locaţia unde se află acesta în memoria
calculatorului gazdă.
De remarcat faptul că matricile
astfel create nu sunt incluse efectiv în
foia de lucru, ele fiind re-importate din
fişierul sursă la fiecare recalculare a
documentului respectiv.
O altă posibilitate oferită de
a) b) c) Mathcad pentru crearea tablourilor de
date este introducerea elementelor
Fig. 8.2 componente ale acestora în tabele
Definirea unei matrici cu ajutorul
variabilelor domeniu
corespunzătoare. Pentru aceasta, în lista
a) declararea variabilelor; b) ecuaţia afişată în fereastra activată de comanda
elementelor matricei; c) matricea Insert - Object se validează opţiunea
rezultată Input Table. După apăsarea butonului
Finish în foaia de lucru este inserată o
regiune ce conţine un element de substituţie (ca nume de variabilă) şi un
tabel (figura 8.3). Prin atribuirea unui nume şi completarea celulelor
tabelului se obţine o variabilă corespunzătoare unui tablou de date cu
elementele identice cu cele introduse în tabel. Deplasarea în tabel se poate
face cu ajutorul tastelor săgeţi, dimensiunile acestuia crescând corespunzător
cu numărul valorilor introduse.
Celulele tabelului pot fi editate prin executarea unui click stânga-
mouse în celula respectivă.

a) b)
Fig. 8.3
Introducerea tablourilor de date prin tabele
a) tabel introdus în foia de lucru de comanda Input Table; b) tabel cu celule
editate
Comanda Input Table poate fi utilizată pentru importarea unică a
datelor dintr-un fişier extern. Pentru aceasta, după introducerea tabelului în
foaia de lucru şi atribuirea numelui variabilei corespunzătoare, din meniul
contextual (accesibil executând click dreapta-mouse pe tabel) se alege

72
Vectori, matrici, tablouri de date

opţiune Import. În fereastra deschisă de comandă se indică fişierul sursă. În


acest mod datele sunt importare o singură dată în foaia de lucru.

8.2. Accesarea tablourilor de date

Un tablou de date poate fi accesat prin indicarea numelui variabilei


corespunzătoare. Mathcad-ul permite şi accesarea limitată a tablourilor de
date (numai anumite elemente din tablou), prin utilizarea operatorului
Subscript, amplasat în bara de unelte Arithmetic. Pentru aceasta se indică
numele variabilei ce reprezintă tabloul respectiv, se accesează operatorul
subscript şi se introduc indicii corespunzători elementului dorit.
De remarcat faptul că, în mod implicit, Mathcad-ul porneşte
numărătoarea rândurilor şi a coloanelor tablourilor de date de la valoarea 0.
Ca atare, pentru accesarea unui element aflat pe rândul "i" şi coloana "j",
valorile indecşilor introduşi lângă numele variabile ce reprezintă tabloul vor
fi "i-1", respectiv "j-1". În caz contrar, este accesat un element greşit sau se
obţine un mesaj de eroare, de depăşire a valorilor maxime a indicilor
tabloului (figura 8.4). Situaţia poate fi modificată prin alegerea
corespunzătoare a valorii variabilei implicite Origin (implicit această valoare
este 0).

a) b) c)

Fig. 8.4
Accesarea individuală a elementelor unui tablou de date
a) tablou de date; b) indici cu valori incorecte; c) indici cu valori corecte
Accesarea unor grupuri de elemente este posibilă prin utilizarea ca
indici a unor variabile domeniu corespunzătoare. În acest mod se poate
accesa numai o întreagă coloană sau numai un întreg rând dintr-un tablou.

8.3. Afişarea tablourilor de date

În mod implicit Mathcad-ul afişează tablourile de date (matricei sau


vectori) care au mai puţin de nouă rânduri sau coloane în notaţie clasică, sub
formă de tablouri. Pentru numere mai mari de rânduri sau coloane se
utilizează metoda afişării sub formă de tabele.
73
MATHCAD - proiectare interactivă şi prelucrarea datelor experimentale

Pentru forţarea afişării clasice în cazul tablourilor de dimensiuni


mari, este necesară selectarea tabelului respectiv şi validarea opţiunii Matrix
în fereastra de dialog deschisă cu ajutorul comenzii Format - Properties.
Atât tablourile cât şi elementele componente ale acestora se supun
operaţiilor cu Clipboard-ul (Copy, Cut, Paste).

8.4. Lucrul cu tablouri de date

Pe lângă operaţiile matematice dedicate pe care Mathcad-ul le poate


efectua cu tablouri de date există şi posibilitatea tratării acestora ca valori
unitare, accesându-le element cu element. În această situaţie se efectuează
calculele cu scalarii ce compun un tablou de date şi nu cu tabloul ca
variabilă unică.
Există două metode de operare cu scalarii ce compun tablourile de
date:
- accesarea iterativă a elementelor, folosind variabile domeniu;
- folosirea operatorului Vectorize (amplasat în bara de unelte
Matrix), care permite Mathcad-ului efectuarea de operaţii individuale cu
fiecare element component al tabloului.
În figura 8.5 se prezintă etapele efectuării unei operaţii de înmulţire
element cu element între două matrici.

a) b) c) d) e)

Fig. 8.5
Efectuarea de calcule individuale cu elementele tablourilor de date
a) definirea tablourilor; b) definirea ecuaţiei şi sublinierea cu ajutorul liniei de editarea
produsului de tablouri; c) accesarea operatorului Vectorize; d) ecuaţia cu operatorul
aplicat; e) tabloul rezultat.
Operatorul Vectorize are o serie de proprietăţi specifice:
- modifică semnificaţia operatorilor incluşi - obligă Mathcad-ul să
efectueze operaţiile cu scalari, element cu element;
- impune folosirea operanzilor cu structuri identice (acelaşi număr
de linii şi coloane;

74
Vectori, matrici, tablouri de date

- nu se poate folosi pentru produs de matrici, ridicarea matricilor la


putere, inversarea matricilor, şi extragerea determinantului (aceste operaţii
sunt transformate în produs element cu element, ridicarea la putere a
elementelor etc.;
- nu are efect asupra operatorilor şi funcţiilor care necesită operanzi
sau argumente tablouri de date, deoarece acestea nu au sens dacă sunt
aplicate scalarilor.

75
MATHCAD - proiectare interactivă şi prelucrarea datelor experimentale

CAPITOLUL 9
FORMATAREA REZULTATELOR

9.1. Unităţi de măsură

Mathcad-ul conţine un set de unităţi de măsură implicite,


disponibile odată cu deschiderea unei foi de lucru albe.
Implicit Mathcad-ul
foloseşte sistemul de internaţional de
unităţi d măsură, dar utilizatorul poate
alege alt sistem folosind comanda
Options, amplasată în meniul Math.
În fereastra de dialog deschisă de
această comandă, la pagina Unit
System (figura 9.1), utilizatorul poate
opta pentru sistemul de unităţi de
măsură dorit.
Pentru accesarea bibliotecii
de unităţi de măsură disponibile în
Fig. 9.1
Alegerea sistemului de unităţi de măsură Mathcad se poate utiliza comanda
Unit, amplasată în meniul Insert.
La activarea comenzii se
deschide o fereastră de dialog ce
conţine două liste derulante (figura
9.2). În prima listă se optează pentru
dimensiunea dorită, iar în cea de-a
doua listă se regăsesc unităţile de
măsură corespunzătoare. Dacă în
prima listă se selectează opţiunea
Dimensionless, în cea de-a doua lista
sunt incluse automat toate unităţile de
măsură disponibile în biblioteca
Fig. 9.2 programului.
Ferastra de dialog pentru alegerea În fereastră există şi un câmp
unităţilor de măsură unde se indică ce sistem de unităţi de
76
Formatarea rezultatelor

măsură este curent.


Pentru a atribui unităţi de măsură unui număr sau unei expresii
matematice este suficientă înmulţirea numărului sau expresiei respective cu
numele unităţii corespunzătoare.
Unităţile de măsură mai pot fi introduse prin poziţionarea
cursorului pe elementul de substituire corespunzător şi lansarea comenzii
Insert - Units. Comanda poate fi accesată rapid prin executarea unui dublu
click stânga-mouse pe elementul de substituire corespunzător unităţilor de
măsură, amplasat în mod automat de Mathcad la sfârşitul evaluării unei
relaţii matematice. După alegerea unităţii dorite, prin apăsarea butonului
Insert, aceasta este introdusă
în foia de lucru.
Mathcad-ul poate
afişa unităţile de măsură
automat, dacă se validează
opţiunea Display dimension,
din pagina Dimensions a
ferestrei de dialog deschisă de
comanda Math - Options
(figura 9.3).
Utilizatorul poate
schimba modul de
simbolizare al unităţilor de
măsură prin modificarea
corespunzătoare a numelor
din câmpurile din fereastra Fig. 9.3
menţionată mai sus. Activarea afişării automate a unităţilor de măsură

9.2. Formatarea rezultatelor

Mathcad-ul permite controlul modului de afişare al rezultatelor


evaluărilor expresiilor matematice cu ajutorul unor comenzi numite Result
Format. Comanda mai poate fi accesată şi prin executarea unui dublu click
stânga-mouse pe elementul de substituire rezultatului, afişat de Mathcad
după evaluarea expresiei.

77
MATHCAD - proiectare interactivă şi prelucrarea datelor experimentale

Activarea comenzii Result Format conduce la deschiderea unei


ferestre de dialog (figura 9.4)

Fig. 9.4
Fereastra corespunzătoare comenzii Result Format

în care utilizatorul poate specifica o serie de parametri cum ar fi:


- Displayed precision, permite impunerea numărului de zecimale
afişate.
- Show trailing zeros, permite completarea cu cifra 0 a numărului
de zecimale.
- Exponential treshold, permite stabilirea ordinului maxim de
mărime după care se trece la afişarea exponenţială - valoare multiplicată cu
puterile lui 10.
- Complex treshold, permite impunerea ordinului maxim de mărime
al părţii reale sau imaginare ale numerelor complexe de la care se suprimă
partea minimă (de exemplu: pentru Complex treshold = 10, un număr
Re(z )
complex este afişat ca pur real dacă ≥ 10 10 sau ca pur imaginar dacă
Im(z )
Im(z )
≥ 10 10 ).
Re(z )
- Zero treshold, permite stabilirea ordinului minim de mărime după
care un număr este afişat ca 0. Pentru modificarea valorii implicite (15)
trebuie validată opţiunea Set as default.
- Radix, permite selectarea bazei de numeraţie pentru numerele
afişate (zecimal, binar, octal sau hexagesimal).
78
Formatarea rezultatelor

- Imaginary value, permite impunerea modului de simbolizare


pentru numerele complexe. Pentru modificarea valorii implicite trebuie
validată opţiunea Set as default.
- Matrix display style, permite selectarea modului de afişare al
tablourilor de date. Pentru opţiunea Automatic, tablourile cu mai mult de
nouă rânduri sau coloane vor fi afişate ca tabele.
- Expand nested arrays, permite selectarea modului de afişare al
matricelor imbricate (Expand nested arrays). Validarea opţiunii conduce la
afişarea clară a matricelor imbricate.
- Simplify units when possible, permite optarea pentru afişarea
simplificată a unităţilor de măsură. Prin validarea opţiunii în loc de
kg*m/sec2 se afişează N.
- Formatarea uzuală a unităţilor de măsură. Validarea opţiunii
conduce la afişarea, de exemplu, a 1/sec în loc de sec-1.
Opţiunile din fereastra Result Format sunt valabile numai pentru
expresia selectată. Pentru aplicarea lor asupra tuturor expresiilor din foia de
lucru trebuie validată opţiunea Set as default. Dacă nu este selectată nici o
expresie, opţiunea Set as default nu este accesibilă.

9.3. Metode de calcul în Mathcad

Mathcad-ul poate efectua calculele în două variante de lucru:


automat şi manual.
Varianta automată de calcul, activată implicit la deschiderea
programului, permite refacerea calculelor din foia de lucru în mod automat,
pe măsura introducerii relaţiilor matematice şi a
datelor corespunzătoare.
În varianta manuală de calcul, Mathcad-
ul nu efectuează calcule decât la cererea expresă a
utilizatorului, exprimată fie prin activarea
comenzii Calculate, amplasată în meniul Math fie
prin apăsarea butonului corespunzător amplasat în
bara Standard.
Trecerea din modul implicit de lucru
automat în mod manual se face invalidând Fig. 9.5
opţiunea Automatic Calculation, amplasată în Specificarea şi simbolizarea
meniul Math. Modul de lucru curent este indicat modului de calcul
în partea din dreapta a barei de stare din ferestra
principală, figura 9.5.
79
MATHCAD - proiectare interactivă şi prelucrarea datelor experimentale

Mathcad-ul permite suspendarea temporară a efectuării calculelor.


În acest scop este necesară apăsarea tastei Escape, ce are ca efect afişarea
unei ferestre de dialog în care se cere confirmarea pentru operaţie. În cazul
validării opţiunii ecuaţia respectivă este marcată cu un mesaj de eroare,
evaluarea acesteia fiind anulată. Calculul poate fi reluat ulterior prin
activarea comenzii Calculate.
Utilizatorul poate opta pentru invalidarea evaluării, pentru o
anumită relaţie de calcul, prin selectarea acesteia şi lansarea comenzii
Format - Properties. În pagina Calculation a acesteia se validează opţiunea
Disable Evaluation. Acţiunea are efect numai asupra ecuaţiei selectate,
celelalte relaţii din foia de lucru fiind în continuare valide.

9.4. Mesaje de eroare

Dacă Mathcad-ul întâlneşte o eroare la evaluarea unei expresii


matematice, marchează relaţia respectivă evidenţiind operatorul implicat. La
poziţionarea cursorului pe expresia respectivă, Mathcad-ul afişează un
mesaj de eroare cu explicaţii adecvate (figura 9.6).
O relaţie ce conţine erori nu poate fi
evaluată. Dacă în relaţia respectivă este definită o
variabilă, aceasta va rămâne nedefinită
compromiţând calculele ulterioare şi conducând la
generarea de noi mesaje de eroare.
Fig. 9.6
Mesaj de eroare : variabilă La îndepărtarea erorilor dintr-o foaie de
nedefinită lucru se recomandă începerea din partea de sus a
foii. Pentru o operare mai facilă se recomandă
folosirea variantei de calcul manual.

80
Lucrul cu grafice şi obiecte

CAPITOLUL 10
LUCRUL CU GRAFICE ŞI OBIECTE

10.1. Inserarea graficelor

Mathcad-ul oferă posibilitatea creării atât a reprezentărilor grafice


2D (bi-dimensionale) cât şi a celor 3D (tri-dimensionale).
Comenzile utilizate pentru introducerea graficelor în foia de lucru
sunt amplasate în meniul Insert, submeniul Graph, fiind accesibile şi din
bara de unelte Graph. Un meniul Insert - Graph comenzile sunt ordonate
după tipul de grafic (2D cartezian, 2D polar, 3D).
Pentru introducerea în foaia de lucru a unui grafic 2D cartezian se
utilizează comanda X-Y Plot, accesibilă fie din meniul Insert - Graph fie din
bara de unelte Graph (figura 10.1).
Activarea
comenzii are ca efect
apariţia în foaia de lucru a
unei regiuni
dreptunghiulare care
conţine un grafic 2D gol.
Regiunea este introdusă
cu colţul din stânga sus la
poziţia curentă a
cursorului.
Regiunea, dotată Fig. 10.1
cu puncte de Activarea comenzii de introducere a graficelor 2D
redimensionare (figura
10.2a) conţine pe axa Y şi, respectiv, X elemente de înlocuire ce vor fi
substituite de utilizator prin ecuaţia de reprezentat grafic şi, respectiv,
valorile variabilei corespunzătoare. În momentul în care se începe
introducerea ecuaţiei sau a variabilei în elementele de înlocuire
corespunzătoare, la capetele axei respective apar noi elemente de înlocuire,
în acestea urmând a fi afişate valorilor capetelor de scală (figura 10.2b).
După introducerea expresiei ecuaţiei şi a valorilor corespunzătoare
ale variabilei, graficul se finalizează prin apăsarea tastei Enter, sau
efectuarea unui click stânga-mouse în afara regiunii graficului.
81
MATHCAD - proiectare interactivă şi prelucrarea datelor experimentale

a) b)
Fig. 10.2
Elemente de control ale graficelor 2D

Mathcad-ul permite afişarea simultană a mai multor grafice (mai


multe ecuaţii pe axa Y pentru o singură variabilă pe axa X, sau invers).
Programul este dotat cu un modul (Quick Plot), de afişare implicită a
graficelor, care completează automat valorile capetelor de scală permiţând
finalizarea graficului.
Inserarea în foaia de lucru a unui grafic 3D poate fi făcută în două
moduri: fie prin alegerea directă a unui tip de grafic, fie prin utilizarea unui
aşa-numit "vrăjitor". Comenzile respective sunt amplasate în meniul Insert,
submeniul Graph. O serie de grafice pot fi introduse direct şi cu ajutorul
butoanelor respective cuprinse în bara Graph.
La activarea comenzii corespunzătoare "vrăjitorului 3D", se
deschid o serie de ferestre consecutive. În prima dintre acestea (figura 10.3a)
utilizatorul poate opta pentru unul dintre cele cinci variante de grafic:
suprafaţă (Surface), contur (Contour Plot), câmp de vectori (Vector Field
Plot), bare verticale (Bar Chart) sau puncte (Scatter Plot), prin selectarea
căsuţei corespunzătoare.
Prin apăsarea butonului Next se trece la următoarea fereastră
(figura 10.3b), în care utilizatorul specifică modul de reprezentare al
graficului în câmpul foii de lucru. Funcţie de tipul de grafic ales la etapa
anterioară, opţiunile din cea de-a doua fereastră de dialog pot fi diferite. În
principal se întâlnesc următoarele variante: Draw lines, când este afişat
numai caroiajul corespunzător graficului respectiv, Fill surface with color,
când şi elementele componente ale graficului (suprafeţe, coloane etc.) sunt
colorate.

82
Lucrul cu grafice şi obiecte

În fereastra următoare
(figura 10.3c), deschisă prin
apăsarea butonului Next, se pot
alege diferite variante de colorare
a graficului: corelarea culorii cu
valorile ecuaţiei reprezentate,
Color by height, variaţia
luminozităţii, color using lighting a)
sau colorarea fără umbre, Solid
color.
Odată cu apăsarea
butonului Next, în foaia de lucru,
la poziţia curentă a cursorului,
este introdusă o regiune ce
conţine un grafic 3D. Pe grafic
sunt reprezentate implicit cele b)
trei axe de coordonate, cu scări
valorice predefinite, figura 10.3d.
De remarcat faptul că
toate ferestrele ce compun
"vrăjitorul" sunt dotate cu un
câmp în care utilizatorul poate
controla alegerea făcută cu
ajutorul unei imagini c)
corespunzătoare tipului de grafic
ales, afişată în aceeaşi fereastră
de dialog.
Pentru reprezentarea
grafică a unei expresii este
suficientă plasarea acesteia în
locul elementului de substituire
din regiunea graficului şi
apăsarea tastei Enter.
Şi în cazul graficelor 3D
este posibilă reprezentarea mai d)
multor ecuaţii simultan, chiar cu Fig. 10.3
tipuri diferite de grafice. Ferestre consecutive deschise de comanda
Atât graficele 2D cât şi 3D Wizard
cele 3D pot fi manipulate
83
MATHCAD - proiectare interactivă şi prelucrarea datelor experimentale

(mutate, redimensionate şterse etc.) folosind aceleaşi metode ca şi la


regiunile tip text.

10.2. Formatarea graficelor

O etapă importantă în crearea unui grafic este reprezentată de


formatarea acestuia. Prin formatare se înţelege specificarea opţiunilor
referitoare la o serie de elemente grafice şi logice caracteristice graficului.
Formatarea graficului este posibilă cu ajutorul unor comenzi
specifice fiecărui tip de grafic, amplasate în meniul format, submeniul
Graph.
Pentru graficele 2D, comanda X-Y Plot aferentă conduce la
deschiderea unei ferestre de dialog ce conţine mai multe pagini:
- Pagina X-Y Axes
(figura 10.4), care conţine opţiuni
referitoare la axele de coordonate.
Aici se poate opta pentru o scală
logaritmică (Log scale), pentru
afişarea caroiajului (Grid Lines),
pentru afişarea valorilor scalei
(Numbered), pentru ajustarea
automată a mărimii scării
(Autoscale) şi a dimensiunilor
caroiajului (Auto Grid), pentru
afişarea valorilor expresiei pe
grafic, în punctele reprezentative
(Show Markers), pentru o pereche
Fig. 10.4 de axe care să se intersecteze în
Fereastra corespunzătoare comenzii de origine graficul fiind limitat fie pe
formatare a graficelor 2D, pagina X-Y Axes toate laturile (Boxed) fie numai pe
două laturi (Crossed), pentru
absenţa axelor (None) şi pentru egalizarea scărilor de reprezentare pe cele
două axe (Equal Scales).
- Pagina Traces (figura 10.5a), care permite modificarea
simbolurilor, tipului, culorii şi grosimii liniei utilizate pentru trasarea
graficului. Mathcad-ul oferă un număr de 16 modele prestabilite (trace
1…trace 16), utilizatorul având atât posibilitatea modificării atributelor
acestora (prin selectare şi modificarea opţiunilor corespunzătoare în
câmpurile din partea de jos a ferestrei), cât şi posibilitatea definirii de
84
Lucrul cu grafice şi obiecte

modele noi (prin introducerea numelui modelului în câmpul Legend Label.


În aceeaşi fereastră se mai poate opta pentru ascunderea legendei sau a
argumentelor graficului.
- Pagina Labels (figura 10.5b), în care utilizatorul poate opta pentru
afişarea titlurilor pentru axele de coordonate şi pentru grafic. Se poate alege
şi poziţia titlului faţă de grafic.

a) b)
Fig. 10.5
Fereastra corespunzătoare comenzii de formatare a graficelor 2D
a) pagina Traces; b) pagina Labels.

- Pagina Defaults (figura 10.6), în care utilizatorul are posibilitatea


de a readuce toate opţiunile referitoare la formatarea graficelor 2D la
valorile implicite (Change to Defaults) sau de a salva ca implicite setările
modificate în sesiunea curentă (Use for Defaults).
Pentru ca modificările
făcute să fie aplicate este necesară
apăsarea butonului Apply (de pe
fiecare pagină pe care s-au operat
modificări) şi, în final, a butonului
O.K.
În cazul graficelor 3D,
fereastra activată de comanda de
formatare este mult mai complexă, Fig. 10.6
conţinând mai multe pagini: Fereastra corespunzătoare comenzii de
- Pagina General (figura formatare a graficelor 2D, pagina Defaults
10.7a), în care utilizatorul poate
modifica poziţia de afişare a axelor (secţiunea View), modul de dispunere a
85
MATHCAD - proiectare interactivă şi prelucrarea datelor experimentale

axelor pe ecran (secţiunea Axes Style), afişarea chenarului graficului


(secţiunea Frames), precum şi tipul de grafic (secţiunea Plot).
- Pagina Axes (figura 10.7b), care conţine câte o secţiune pentru
fiecare axă de coordonate. Aici utilizatorul optează pentru tipul, culoarea,
numărul şi grosimea liniilor caroiajului (secţiunea Grids), culoarea şi
grosimea liniilor de axe (secţiunea Axis Format) precum şi pentru valorile
capetelor de scală sau pentru scalarea automată a axelor (secţiunea Axis
Limits).

a) b)
Fig. 10.7
Fereastra corespunzătoare comenzii de formatare a graficelor 3D
a) pagina General; b) pagina Axes.

- Pagina Appearance (figura 10.8a), care permite utilizatorului


controlarea modului de colorare a graficului, în cazul în care se doreşte
colorarea graficului tip suprafaţă (secţiunea Fill Options), alegerea grosimii
liniilor şi a culorii liniilor caroiajului de pe suprafaţa graficului (secţiunea
Line Options), în cazul în care se doreşte afişarea caroiajului pe grafic
precum şi tipul şi culoarea punctelor, în cazul în care se doreşte afişarea
punctelor caracteristice pe grafic (secţiunea Point Options).
- Pagina Lighting (figura 10.8b), în care utilizatorul poate manipula
sursele de lumină virtuale ce iluminează graficul. Implicit sunt disponibile
opt surse de lumină, în secţiunea corespunzătoare fiecăreia utilizatorul
putând specifica activarea, culoarea şi poziţia sursei respective (secţiunile
Light 1….Light 8).
- Pagina Title (figura 10.9), unde se poate introduce titlul graficului
şi alege amplasarea acestuia pe grafic.
- Pagina Backplanes (figura 10.10a), unde pentru fiecare dintre cele
trei plane de fundal se pot specifica caracteristicile caroiajului (secţiunea
86
Lucrul cu grafice şi obiecte

Grids - pentru diviziuni, respectiv Sub-Grids pentru subdiviziunile axelor


de coordonate). Tot în această pagină se mai poate opta pentru colorarea
fundalului (Fill Backplane) şi pentru trasarea conturului acestuia (Backplane
Border).

a) b)
Fig. 10.8
Fereastra corespunzătoare comenzii de formatare a graficelor 3D
a) pagina Appearance; b) pagina Lighting.

- Pagina Special, conţine


o serie de opţiuni utile în situaţia
tresformării graficelor dintr-o
formă în alta.
- Pagina Advanced (figura
10.10b), conţine o serie de opţiuni
referitoare la modul de afişare al
graficului, cum ar fi: afişarea
difuză, perspectiva şi scalarea pe
verticală (secţiunea Advanced Fig. 10.9
View Options), strălucirea şi Fereastra corespunzătoare comenzii de
formatare a graficelor 3D, pagina Title
transparenţa graficului (secţiunea
Plot), modificarea dispunerii
culorilor pe grafic (secţiunea Colormap).
În funcţie de tipul de grafic 3D ales, unele opţiuni dintre cele mai
sus prezentate pot fi diferite.
Pentru a fi aplicate noile opţiuni, după modificarea acestora se va
apăsa butonul Apply de pe pagina respectivă iar în final butonul O.K.

87
MATHCAD - proiectare interactivă şi prelucrarea datelor experimentale

În cazul în care pe foaia de lucru se află dispuse mai multe grafice,


pentru a aplica modificări acestea trebuiesc selectare în prealabil, similar cu
selectarea regiunilor.
În fiecare pagină este amplasat în buton Help, la a cărui apăsare se
deschide o fereastră suplimentară în care se prezintă indicaţii pentru
opţiunile cuprinse în pagina respectivă.

a) b)
Fig. 10.10
Fereastra corespunzătoare comenzii de formatare a graficelor 3D
a) pagina Backplanes; b) pagina Advanced.

10.3. Reprezentarea grafică a expresiilor matematice

O expresie matematică cu o singură variabilă poate fi reprezentată


grafic în Mathcad fie sub formă de grafic 2D cartezian (cu axe x-0-y
perpendiculare) fie sub formă de grafic 2D polar. În acest scop, după
introducerea expresiei în foaia de lucru, se lansează comanda Insert - Graph
- X-Y Plot sau, respectiv, Polar Plot (figura 10.11).

a) b) c)
Fig. 10.11
Etapele creării unei reprezentări grafice 2D simple
a) introducerea ecuaţiei; b) introducerea graficului; c) afişarea graficului
88
Lucrul cu grafice şi obiecte

Pentru finalizarea operaţiei se execută un click stânga mouse în


afara suprafeţei graficului. În mod implicit Mathcad-ul atribuie un domeniu
de valori variabilei independente (-10…+10).
Dacă se doreşte introducerea unor alte valori pentru domeniul
variabile independente, se utilizează o variabilă domeniu, definită în mod
corespunzător.
Pentru reprezentarea pe acelaşi grafic a mai multor expresii
matematice, funcţii de o variabilă comună, acestea se scriu unele după altele,
separate prin virgule, selectându-se toate odată înainte de lansarea comenzii
Insert - Graph (figura 10.12).

a) b) c)
Fig. 10.12
Etapele creării unei reprezentări grafice 2D multiple
a) introducerea ecuaţiilor; b) introducerea graficului; c) afişarea graficului

Mathcad-ul permite reprezentarea grafică şi a unor expresii


matematice unele raportate la celelalte, condiţia fiind ca aceste expresii să
fie dependente de aceeaşi variabilă. Pentru aceasta, se introduce mai întâi
graficul, cu ajutorul comenzilor adecvate, înlocuindu-se apoi elementele de
substituire cu expresiile respective, figura 10.13.

a) b) c)
Fig. 10.13
Etapele creării unei reprezentări grafice 2D cu două expresii
a) introducerea expresiilor; b) introducerea graficului; c) afişarea graficului

89
MATHCAD - proiectare interactivă şi prelucrarea datelor experimentale

Modulul de grafică 2D poate fi utilizat pentru reprezentarea


vectorilor sau a datelor numerice.
Pentru reprezentarea vectorilor se defineşte o variabilă domeniu,
corespunzătoare indicilor elementelor vectorului respectiv, se activează
comanda Insert - Graph - X-Y Plot şi se completează elementele de înlocuire
în mod corespunzător (variabila domeniu pe abscisă, numele vectorului cu
indice variabila domeniu pe ordonată), figura 10.14.

a) b) c) d)

Fig. 10.14
Etapele creării unei reprezentări grafice 2D pentru un vector
a) declararea variabile domeniu şi introducerea expresiei vectorului; b) afişarea
vectorului - opţional; c) introducerea graficului; d) afişarea graficului

Pentru reprezentarea grafică a doi vectori, unul în raport cu celălalt,


se procedează la fel ca la reprezentarea expresiilor.

10.4. Inserarea imaginilor

Mathcad-ul oferă două posibilităţi de introducere a imaginilor în


foia de lucru: prin copiere din memoria temporară (Clipboard) sau prin
citirea informaţiilor numerice dintr-o matrice corespunzătoare.
Pentru introducerea imaginilor cu ajutorul Clipboard-ului se
poziţionează cursorul pe foia de lucru în locul dorit şi se utilizează comanda
Paste, accesibilă fie din meniul Edit, fie din meniul contextual deschis prin
executarea unui click dreapta-mouse. Imaginea existentă în Clipboard
(încărcată cu ajutorul comenzii Copy sau Cut) va fi inserată în foia de lucru.
Operaţia mai poate fi executată şi folosind comanda Paste Special,
90
Lucrul cu grafice şi obiecte

amplasată în aceleaşi meniuri. Comanda permite controlarea formatului în


care fa vi inserată imaginea. La activarea acestei comenzi se deschide o
fereastră de dialog (figura 10.15), în care utilizatorul poate opta pentru
diferite formate de imagine.
A doua metodă
presupune utilizarea comenzii
Picture, dispusă în meniul
Insert. Comanda este
accesibilă şi din bara de unelte
Matrix, figura 10.16. La
activarea comenzii Mathcad-ul
introduce în foia de lucru o
regiune asemănătoare cu cele
matematice, conţinând un
Fig. 10.15
element de substituire. Fereastra activată de comanda Paste Special
Utilizatorul trebuie să specifice
în acest loc numele matricei sursă pentru imaginea respectivă.
Mathcad-ul creează, pe baza informaţiilor numerice din matricele
sursă, o reprezentare alb negru cu 256 de nuanţe, considerând că fiecărui
element al matricei îi corespunde un pixel în câmpul imaginii. Valoarea 0
corespunde culorii negre, în timp ce valoarea 255 corespunde culorii albe.
Numerele mai mari sau mai mici sunt reduse cu ajutorul funcţiei modulo
256, numerele fracţionare fiind reduse la parte întreagă. Pentru reprezentarea
unei imagini colorate, în poziţia elementului de substituire trebuiesc
specificate trei matrice (corespunzătoare celor trei culori de bază - roşu,
verde şi albastru).
Pentru introducerea prin această metodă a
unei imagini existente, în locul elementului de
substituire trebuie specificat numele sau calea către
aceasta, dacă nu este amplasată în acelaşi director cu
foia de lucru. Informaţia va fi introdusă în locul
elementului de substituire între ghilimele duble. De
remarcat faptul că în foia de lucru există numai Fig. 10.16
referinţa la imaginea respectivă. În cazul mutării Amplasarea comenzii
acesteia din directorul respectiv, Mathcad-ul nu o Insert Picture
mai poate afişa.
Imaginile introduse în foia de lucru pot fi redimensionate şi mutate
ca orice regiune. În cazul distorsionării imaginilor, în urma redimensionării,
acestea pot fi readuse la mărimea originală cu ajutorul comenzii Properties,
91
MATHCAD - proiectare interactivă şi prelucrarea datelor experimentale

din meniul Format. Comanda, lansată cu imaginea respectivă selectată,


conduce la deschiderea unei ferestre de dialog în care utilizatorul poate opta
pentru afişarea la dimensiunea originală ( opţiunea Display at Original Size).
În aceeaşi fereastră se poate opta şi pentru afişarea unui chenar în jurul
imaginii (opţiunea Show Border).

10.5. Inserarea obiectelor

Mathcad-ul permite, prin intermediul facilităţilor sistemului de


operare Windows (O.L.E. - Object Linking and Embedding) introducerea în
foia de lucru a obiectelor create în alte aplicaţii, permiţând în acelaşi timp
editarea acestora în aplicaţiile sursă.
Un obiect poate fi introdus ca atare într-o foaie de lucru sau se
poate utiliza numai o referinţă, acesta fiind separat de documentul Mathcad.
Obiectele introduse ca atare în Mathcad nu se mai actualizează
automat în cazul modificării lor în aplicaţia sursă, spre deosebire de cele
inserate numai ca referinţă.
Pentru introducerea obiectelor în foaia de lucru este disponibilă
comanda Object, amplasată în meniul Insert. Lansarea comenzii conduce la
deschiderea unei ferestre de dialog cu două pagini, corespunzătoare creării
unui obiect nou sau utilizării unuia deja existent (figura 10.17).

a) b)

Fig. 10.17
Ferestre activate de comanda Insert - Object
a) pentru obiecte nou create; b) pentru obiecte existente.

Trecerea de la pagina pentru obiecte noi la cea pentru obiecte


existente se face cu ajutorul opţiunii Create New - Create from File.
În pagina corespunzătoare obiectelor noi se poate accesa o listă în
care se regăsesc toate aplicaţiile instalate pe calculatorul gazdă ce pot
furniza obiecte prin intermediul protocolului O.L.E.. În momentul selectării
92
Lucrul cu grafice şi obiecte

unei aplicaţii din listă şi a apăsării butonului O.K. aplicaţie respectivă este
lansată din interiorul foii de lucru, permiţând astfel crearea obiectului
respectiv.
Pentru introducerea unui obiect existent este necesară specificarea,
în pagina corespunzătoare, a locaţiei obiectului în memoria calculatorului
gazdă. În aceeaşi pagină se poate opta ca obiectul respectiv să fie introdus ca
atare în foaia de lucru sau numai ca referinţă (opţiunea Link). Se mai poate
opta ca obiectul să fie afişat sub forma unui simbol specific aplicaţiei
respective şi nu prin conţinutul său (opţiunea Display as Icon).
Mathcad-ul permite editarea obiectelor, în acest scop fiind suficient
executarea unui dublu click stânga-mouse pe obiectul respectiv. Obiectul va
fi editat într-o fereastră (cuprinsă în foia de lucru) a aplicaţiei sursă.
Pentru editarea referinţelor la obiecte existente este disponibilă
comanda Links amplasată în meniul Edit. Lansarea comenzii are drept
rezultat deschiderea unei ferestre de dialog (figura 10.18) în care utilizatorul
poate identifica, într-o listă
derulantă, toate referinţele din
foia de lucru. Pentru fiecare
referinţă selectată sunt
disponibile o serie de opţiuni:
- reîncărcarea sursei în
faoia de lucru (Update Now);
- deschiderea fişierului
sursă (Open Source);
- schimbarea fişierului
sursă pentru referinţa respectivă Fig. 10.18
Fereastra de dialog deschisă de comanda Edit -
(Change Source); Links
- eliminarea referinţei
respective (Break Link).
Există şi posibilitatea activării unui protocol de reîncărcare
automată a fişierului sursă pentru o referinţă, opţiunea Update - Automatic.

10.6. Animaţia

Mathcad-ul permite crearea de animaţii, cu ajutorul unei variabile


implicite Frame. Orice entitate inclusă în foaia de lucru care poate fi făcută
dependentă de această variabilă poate fi animat. Animaţia poate fi salvată în
fişiere video, cu extensia *.avi, în vederea rulării ulterioare.
93
MATHCAD - proiectare interactivă şi prelucrarea datelor experimentale

Pentru crearea unei animaţii trebuiesc parcurse următoarele etape:


- Crearea entităţilor (grafice, expresii, grupuri de expresii etc.a
căror aparenţă finală este dependentă de variabila Frame) ce vor fi supuse
animării.
- Lansarea comenzii Animate, amplasată în meniul View. Aceasta
are ca rezultat deschiderea unei ferestre de dialog (figura 10.9) în care
utilizatorul poate specifica valorile variabilei Frame. În timpul animaţiei
aceasta va fi incrementată, cu pas unitar, de la valoarea minimă la cea
maximă. Se specifică, de asemenea şi viteza de rulare animaţiei, în cadre pe
secundă. Din aceeaşi fereastră, cu ajutorul butonului Options, se poate trece
la specificarea algoritmului de comprimare pentru fişierul *.avi.
- Se selectează entităţile ce se supun animaţiei.
- Se lansează în execuţie animaţia, cu ajutorul butonului Animate.
- Se salvează animaţia într-un fişier video.
După salvarea fişierului video, Mathcad-ul deschide automat
player-ul cu ajutorul căruia se poate vedea animaţia.

a) b)

Fig. 10.19
Ferestre de dialog corespunzătoare comenzii View - Animate
a) configurarea variabilei Frame; b) selectarea encoderului video

94
Introducere în Mathcad

Bucureşti 2014
Prefaţă

De ce acest titlu?
Titlul cărţii, Utilizarea calculatoarelor, preia denumirea cursului existent în
planul de învăţământ al anului întâi de la facultatea "Căi Ferate, Drumuri şi Poduri"
din Universitatea Tehnică de Construcţii Bucureşti. Cum un calculator se poate
folosi în foarte multe domenii de activitate, acest titlul general impune o precizare:
cartea este o introducere în utilizarea programului Mathcad™ 1. Ea reflectă
experienţa dobândită de autori în iniţierea studenţilor din anul întâi în utilizarea
acestui program.

Cui se adresează această carte?


Cartea nu este o prezentare completă a tot ceea ce poate face programul Mathcad.
Ea se adresează studenţilor din primul an de facultate din învăţământul superior
tehnic, pe care îi iniţiază în folosirea programului Mathcad pentru efectuarea
calculelor numerice sau simbolice şi rezolvarea problemelor matematice pe care le
întâlnesc la celelalte discipline de studiu.

Ce conţine cartea?
După o scurtă prezentare a interfeţei Mathcad făcută în capitolul 1, cititorul este
iniţiat în capitolele 2 şi 3 asupra modului în care se poate folosi programul
Mathcad pentru rezolvare problemelor de "Algebră liniară" sau "Analiză
matematică". Capitolul 4 este consacrat graficii în Mathcad. În capitolul 5 sunt
prezentate posibilităţile de calcul simbolic ale acestui program. Capitolele 6 şi 7
sunt dedicate rezolvării numerice sau simbolice a ecuaţiilor şi sistemelor de ecuaţii
neliniare folosind Mathcad. O scurtă introducere în posibilităţile de programare în
Mathcad este făcută în capitolul 8. În final, în capitolele 9 şi 10, sunt propuse
subiecte pentru aplicaţiile practice şi teste de verificare.

Ce versiune de Mathcad este recomandată?


Toate programele Mathcad care au stat la baza scrierii acestei cărţii au fost
realizate în Mathcad, versiunea 14. Cu mici excepţii, ele pot funcţiona şi în
Mathcad 11, dacă sunt scrise în această versiune. De fapt, majoritatea programelor

1
Mathcad este marcă înregistrată a firmei PTC (Parametric Technology Corporation), 140 Kendrick Street,
Needham, MA 02494 USA, http://www.ptc.com/product/mathcad/.

i
au fost scrise iniţial în Mathcad 11.2a, una dintre cele mai bune şi stabile versiuni
de Mathcad, şi apoi transformate în versiunea 14. Diferenţele între cele două
versiuni pot să apară la programele care folosesc calculul simbolic, deoarece
Mathcad până la versiunea 11 a folosit procesorul de calculul simbolic de la
Maple™ iar începând cu versiunea 12 a trecut la MuPad™. Pentru scrierea
programelor în Mathcad autorii recomandă versiunile 14, mai precis 14.03, sau 15.

Bucureşti, februarie 2014 Autorii

ii
CUPRINS

Capitolul 1. Mathcad – Ghid de utilizare …….……………………………………1

Capitolul 2. Algebră liniară cu Mathcad …….…………………………………...15

Capitolul 3. Analiză matematică cu Mathcad ……………………………………78

Capitolul 4. Grafică în Mathcad ………………………………………………...109

Capitolul 5. Calcul simbolic în Mathcad ………………………………………..135

Capitolul 6. Rezolvarea ecuatiilor și inecuațiilor în Mathcad …………………..162

Capitolul 7. Rezolvarea sistemelor de ecuatii neliniare în Mathcad ……………181

Capitolul 8. Programare în Mathcad ……………………………………………207

Capitolul 9. Probleme pentru seminar …………………………………………..220

Capitolul 10. Teste de verificare ………………………………………………..241

Bibliografie ……………………………………………………………………..248

iii
1. MATHCAD – Ghid de utilizare
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR

MATHCAD Ghid de utilizare


Ecranul Mathcad

Pentru a lucra comod in Mathcad se recomanda ca barele Standard,


Formatting, Math, Status si Ruler sa fie afisate. Pentru aparitia acestora se
deschide meniul View si se selecteaza afisarea acestora, asa cum se vede in
figura de mai jos.

Afisarea barei Math in momentele redactarii unui document Mathcad este


obligatorie.

Cu ajutorul ei se introduc cu usurinta in document operatorii si simbolurile


Mathcad.

Apasarea butoanelor acestei bare duce la aparitia unor submeniuri (toolbars) care
contin operatori sau simboluri grupate pe domenii de utilizare.

In continuare vom prezenta, pe scurt, aceste submeniuri ale barei Math.

2
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR

Bara Calculator

Apasarea butonului duce la aparitia barei Calculator

Bara Graph

Apasarea butonului duce la aparitia barei

Butoanele care apar pe aceasta bara folosesc pentru crearea graficelor 2-D sau
3-D in Mathcad.

3
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR

Bara Matrix

Apasarea butonului duce la aparitia barei

Cu ajutorul acestei bare se introduc intr-o foaie de calcul Mathcad: matrice,


elemente de matice, indici de elemente etc.

Pictogramele barei se folosec pentru a calcula inversa si determinantul unei


matrice, podusul scalar si vectorial a doi vectori etc.

Bara Evaluation

Apasarea butonului duce la aparitia barei

Evaluate numerically = Comanda de evaluare numerica

1

 x dx  0.5
0

Evaluate Simbolically CTRL + . Comanda de evaluare simbolica

 x
2

1
1
 x dx   x dx 
 2 0 2

4
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR

Definition : Comanda folosita pentru definirea unei


functii, atribuirea unei valori numerice unri
variabile etc
2
f ( x)  x  x  1 z  3

Global Definition ~ Definitie globala valabila in intregul fisier.

De exemplu ORIGIN  1

Bara Calculus

Apasarea butonului duce la aparitia barei:

Folosind butoanele acestei bare se introduc in documentele Mathcad operatorii


pentru calculul derivatelor, integralelor, sumelor, produselor, limitelor si
simbolul plus infinit.

Bara Boolean

Apasarea butonului duce la aparitia barei

5
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR

Folosind butoanele acestei bare se introduc in documentele Mathcad operatorii


logici relationali.

Bara Programming

Apasarea butonului duce la aparitia barei

Butoanele acestei bare se folosesc pentru a introduce in documente cuvintele


cheie ale limbajului de programare de care dispune Mathcad-ul.

Bara Greek

Apasarea butonului duce la aparitia barei

Cu ajutorul acestei bare se introduc in documentele Mathcad literele


alfabetului grec.
Pentru a simplifica introducerea literelor grecesti Mathcad-ul dispune de
urmatoarea facilitate: se scrie litera latina corespunzatoare si apoi se tasteaza
CRTL + G.

6
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR

Bara Symbolic Keyword

Apasarea butonului duce la aparitia barei:

Folosind butoanele acestei bare se introduc in documentele Mathcad cuvintele


cheie pentru calculul simbolic.

Structura unui document Mathcad

Un document Mathcad este o combinatie de regiuni de:


1) text
2) formule
3) calcule numerice
4) calcule simbolice
5) grafice.

Pentru ca regiunile sa fie vizibile se deschide meniul View si se selecteaza


optiunea Regions.

7
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR

Exemplul 1. Combinatii de diverse tipuri de regiuni intr-un


document Mathcad
Acest exemplu ne permite sa ilustram cum se pot combina diferitele tipuri de
regiuni intr-un document Mathcad.
Regiune de text Se considera functia de gradul al doilea
2
Regiune de formule f ( x)  x  3 x  2

Regiune de text Se cere:


a) Valorile functiei date in punctele x1 = -3.5 si
x2 = 4.123
b) Determinati solutiile ecuatiei atasate f(x) = 0.
c) Reprezentati grafic pe intervalul [-0, 3] functia
data.
Regiune de calcule f ( 3.5 )  24.75
numerice
x2  4.123 f ( x2)  6.63

2
Regiune de formule x  3 x  2 = 0

Regiuni de calcule has solution(s)


simbolice
 1
 
 2

8
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR

Regiune de reprezentare grafica


2

1
f ( x)

0 1 2 3
1

Lucrul cu regiuni de text

Regiunile de text sunt folosite pentru a introduce in documentele Mathcad texte


explicatie asupra calculelor si reprezentarilor grafice care se fac in documentul
respectiv.
Crearea unei regiuni de text

1) Se da clic intr-o zona libera a documentului in care se doreste aparitia


zonei de text.
2) Se deschide meniul Insert si se da comanda Text Region sau se tasteaza
ghilimele ("). Mathcad deschide o zona de text in care cursorul se transforma
in reper de inserare de culoare rosie.

3) Se scrie textul dorit. Mathcad marcheza zona de text inconjurand-o cu un


chenar. Pe masura ce textul este scris, reperul de inserare se deplaseaza spre
drepta si zona de text creste.

4) Pentru parasirea zonei de text se da clic in afara acesteia. Chenarul care


marca zona dispare.

Observatie. Parasirea zonei de text nu se poate face tastand Enter.


Se poate parasi, totusi, o zona de text folosind tastatura in doua moduri:
1) Tastand combinatia Ctrl + Shift + Enter.
2) Apasand in mod repetat una dintre tastele sageti.

9
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR

MATHCAD - Ghid de utilizare


Folosirea unitatilor de masura

Exemplul 1

Un paralelipiped dreptunghic are urmatoarele dimensiuni:

L := 20m l := 15m h := 80cm

Perimbaza := 2  ( L + l) Perimbaza = 70 m

2
Ariabazei := L  l Ariabazei = 300 m

5
Volumul := L  l h Volumul = 2.4  10 L

2 2 2
Ldiagpara := L +l +h Ldiagpara = 25.013 m
2 2
Ldiagbaza := L +l Ldiagbaza = 25 m

Exemplul 2

Un cerc are raza egala cu 50 cm. Determinati lungimea si aria cercului si


exprimati rezultatul in metri, respectiv metri patrati.

R := 50cm

L := 2  π  R L = 3.142 m

A := π  R
2 2
A = 0.785 m

Programul face automat transformare in m, respectiv mp, deoarece este


setat sa folosesca Sistemul International de unitati de masura.

10
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR

Acesta setare se face in fereastra Worksheet Options, in tab-ul


Unit System.

11
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR

ALGEBRA LINIARA CU MATHCAD


Calcul matriceal

Trasformarea masurii unui unghi din radiani in grade sexazecimale

In Mathcad masura unui unghi se obtine in radiani. De multe ori avem nevoie de
a exprima acesta masura in grade, minute si secunde sexazecimale. In continuare
vom arata cum se poate face aceasta transformare si transformarea inversa.

Notatii folosite:
mung - masura unghiului (cand unitatea de masura este specificata dupa masura
unghiului)
mrad - masura unghiului in radiani
mdeg - numarul de grade din mausura unghiului in grade, minute si secunde
mmin - numarul de minute din masura unghiului in grade, minute si secunde
msec - numarul secundelor din masura unghiului in grade, minute si secunde
Fie dat un unghi a carei masura este

mung  1rad

Transformarea in grade se poate face prin doua metode:


a) folosind facilitatile pe care le ofera Mathcad pentru transformarea unitatilor de
masura.
b) direct, scriind formula de calcul pentru transformare.

a) Pentru a utiliza prima metoda se da click pe rezultatul obtinut si in locul


marcat care apare in partea dreapta a rezultatului se completeaza noua unitate
de masura deg (degree = gradul sexazecimal).
mung  57.296  deg

b) Se scrie firmula de transformare din radiani in grade sexazecimale


mrad  1
180
mdeg  mrad  mdeg  57.296
π
Se trunchiaza numarul de grade la partea intreaga.
mdeg_int  trunc ( mdeg) mdeg_int  57

In continuare partea fractionara a numarului de grade este transformata in


minute.

12
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR

mmin  ( mdeg  mdeg_int) 60 mmin  17.747

Se trunchiaza numarul de minute la partea intreaga.

mmin_int  trunc ( mmin) mmin_int  17

In final, partea fractionara a numarului de minute este trasformata in secunde

msec  ( mmin  mmin_int) 60 msec  44.806

Se rotunjeste numarul de secunde la un numar intreg prin lipsa (daca partea


fractionara este strict mai mica decat 0.5) sau prin adaos (daca partea fractionara
este mai mare sau egala cu 0.5).

msec_int  round ( msec) msec_int  45

In concluzie, mrad  1 are


unghi de
mdeg_int  57 grade

mmin_int  17 minute

msec_int  45 secunde

Transformarea masurii unui unghi din grade sexazecimale in radiani

Fie un unghi care are mdeg  57 grad


e
mmin  17 minute
msec  45 sec

Petru a transforma masura unghiului in radiani se transforma mai


intai totul in grade

msec
msecdeg  msecdeg  0.013
60  60

mmin
mmindeg  mmindeg  0.283
60

mdeg_total  mdeg  msecdeg  mmindeg mdeg_total  57.296

13
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR

Se face apoi transformarea din grade in radiani.


π
mrad  mdeg_total  mrad  1.000000939340584
180

Observatie. Valoarea obtinuta nu este exact un radian deoarece in calculele de


mai sus numarul de secunde a fost aproximat prin adaos.

14
2. ALGEBRĂ LINIARĂ CU MATHCAD
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR

ALGEBRA LINIARA CU MATHCAD


Calcul matriceal

Introducerea matricelor

Mathcad are predefinite functiile uzuale pentru calculul matriceal. Matricele


care au n linii si o singura coloana se numesc vectori.

Pentru introducerea unei matrice intr-un document Mathcad se parcurg etapele:


1. Se da clic cu mouse-ul sau, cu ajutorul tastelor sageti, se face deplasarea
cursorului in forma de cruce in locul din document in care se doreste sa fie
introdusa matricea.

2. Se tasteaza numele matricei urmat de operatorul de definire (atribuire).

A 

3. Se deschide meniul Insert si se da comanda Matrix sau se apasa butonul


corespunzator de pe bara Matrix.

16
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR

Deoarece operatia de introducere a unei matrice se va face foarte frecvent, se


recomanda retinerea comenzii de introducere a unei matrice folosind tastatura:
Ctrl+M.

Ca urmare, pe ecran apare fereastra de dialog Insert Matrix in care se


completeaza campurile care solicita numarul de linii (Rows) si de coloane
(Columns) ale matricei ce urmeaza a fi introdusa. Valorile implicite ale acestora
sunt 3 si 3.

Dupa complerare se tasteaza Enter sau se da clic cu mouse-ul pe unul dintre


butoanele Insert sau OK ale ferestrei Insert Matrix. In document este
inserata macheta matricei.

 
A   
 
 
4. Se completeaza pozitiile marcate cu valori numerice. Trecerea de la o pozitie la
alta se face cu ajutorul tastei Tab sau folosind mouse-ul si dand clic pe fiecare
pozitie.

 3 6 8 
A   5 7 2 
 
 10  12 9 

17
Dan Caragheorghepol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR

ALGEBRA LINIARA CU MATHCAD


Operatii cu matrice

Elementele unei matrice. Indici


Fie matricea
 1 2 3
A   4 5 6 
 
 7 8 9
Elementele matricei sunt variabile indexate de forma Ai,j. Indicii se scriu desparti
de virgula si au valoarea initiala implicita zero.
Scrierea la nivel de indice se face tastand [ (paranteza dreapta deschisa)
sau folosind butonul xn aflat pe bara Matrix. De exemplu, elementele
primei linii sunt

A0 0  1 A0 1  2 A0 2  3

iar elementele primei coloane au indicii

A0 0  1 A1 0  4 A2 0  7

Scrierea elementelor unei matrice cu litera mica corespunzatoare


numelui acesteia
Pentru ca elementele matricei A sa poata fi scrise cu litera mica a se defineste
a  A
Atunci avem

a0 0  1 a0 1  2 a0 2  3

Schimbarea originii indicilor

Schimbarea originii indicilor de la zero la unu se face in ferestra Worksheet


Options...
Pentru aparitia acesteia se da comanda Worksheet Options din meniul Tools.

De regula, la aparitia acestei ferestre functia Built-In Variables este activa si


rubrica Array Origin (ORIGIN) este vizibila. Aici se face schimbarea
inlocuind pe 0 cu 1.

18
Dan Caragheorghepol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR

Acest mod de schimbare a indicilor se face fara ca in pagina documentului sa


apara o mentiune expresa despre modificarea facuta. Uneori este preferabil ca
aceasta modificare sa fie vizibila in document. Pentru acesta se recomanda ca la
inceputul documentului sa se faca schimbarea valorii parametrului ORIGIN de la 0
la 1 scriind explicit instructiunea de atribuire a valorii 1.
ORIGIN  1

Pentru ca efectul acestei instructiuni sa se manifeste in intreg documentul ea


trebuie plasata ca prima instructiune in document.

O alta posibilitate este folosirea instructiunii de definire globala, care poate fi


amplasata oriunde in document.

ORIGIN  1
Observatie. Locul marcat (patratul negru) de langa numarul 1 arata ca in acest
caz instructiunea nu functioneaza fiind selectata optiunea "Disable Evaluation" .
Pentru a schimba acesta optiune in "Enable Evaluation" se selecteaza regiunea si
se da click cu butonul drept al mouse-ului pentru aparitia meniului contextual
unde apare aceasta.

19
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR

ALGEBRA LINIARA CU MATHCAD


Calcul matriceal

Operatii cu matrice

Mathcad permite efectuarea tuturor operatiilor posibile cu matrice.


Pentru exemplificare consideram matricele A, B si C definite mai jos.

 1 3 2  9 8 7  2 1
A   6 5 4  B   6 5 4  C   4 3 
     
 8 9 7  3 2 1  6 5
Adunarea, scaderea si inmultirea matricelor folosesc
operatorii uzuali

 10 11 9   8 5 5   26 20 
A  B   12 10 8  AB 0 0 0  A C   56 41 
     
 11 11 8   5 7 6   94 70 
La inmultirea a doua matrice A(m,n) cu B(n,p) trebuie se tina seama ca
numarul de coloane din prima matrice sa fie egal cu numarul de linii din
matricea a doua. Rezultatul, matricea C, este o matricea de tipul (m,p).
Simbolic scriem A(m,n)*B(n,p) = C(m,p)

La ridicarea la puterea m (m numar intreg) a unei matrice patratice A se va tine


sema de urmatoarele reguli:
Daca m = 0, se obtine matrice unitate.
Daca m = 1, se obtine matricea A.
Daca m = -1, se obtine inversa matricei A.
Daca m  2, se obtine puterea m a matricei A.
Daca m  2, se obtine puterea |m| a inversei matricei A.
Pentru obtinerea operatorului de ridicare la putere a unei matrice (la fel ca la
numere) se tasteaza Shift+6. Ca efect se obtine plasarea pozitiei marcate la nivel
de indice superior: A

 1 0 0  1 3 2  0.333 1 0.667 
A   0 1 0 A   6 5 4   3.333 3 2.667 
0 1 1
A
     
 0 0 1  8 9 7  4.667 5 4.333 

20
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR

 35 36 28   6.556 6.667 5.778 


A   68 79 60  A   23.556 25.667 21.778 
2 2
   
 118 132 101    38.444  41.333 35.222 
Pentru calculul determinantului unei matrice patratice se apasa butonul |x| aflat
pe bara Matrix (in cazul determinantului unei matrice se poate folosi si butonul
|x| din meniul Calculator) sau se tasteaza Shift+\. Pe ecran apare simbolul
determinantului in Mathcad, care are in interior o pozitie marcata ce trebuie
completata cu numele matricei.
A  3

Pentru determinarea transpusei unei matrice se scrie numele matricei si se


tasteaza Ctrl+1 sau se apasa butonul MT aflat pe bara Matrix.

 2 1
 2 4 6
C   4 3
T
C  
   1 3 5
 6 5 
Daca elementele matricei date sunt numere compleze se poate determina
matricea conjugata, adica matricea care are toate elementele egale cu
conjugatele numerelor complexe din matricea data. Matricea conjugata se
obtine tastand dupa numele ei ". De exemplu, fie

 1  2 i i 1  2 i    1  2i i 1  2i 
D    Atunci D 
 4 3i 1   4 3  i 1 

Inmultirea unei matrice cu un numar real r foloseste simbolul obisnuit de


inmultire.
De exemplu

3 9 6
3  A   18 15 12 
 
 24 27 21 

Pentru a aduna un numar real r la toate elementele unei matrice se scrie A


+ r si nu A +rU, unde U este matricea care are toate elementele egale cu 1.

21
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR

De exemplu
 1 3 2  3 5 4
A   6 5 4 A  2   8 7 6
   
 8 9 7   10 11 9 
in loc de
 1 1 1  3 5 4
U   1 1 1  A  2 U   8 7 6 
   
 1 1 1   10 11 9 

22
Dan Caragheorghepol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR

ALGEBRA LINIARA CU MATHCAD


Calcul matriceal

Operatii cu vectori
Vectorii n dimensionali sunt matrice cu n linii si o singura coloana. Prin urmare,
toate operatiile prezentate pentru matrice se pot utiliza si pentru vectori.
In plus, pentru vectori se adauga unele operatii specifice acestora:
 produsul scalar
 calculul normei euclidiene
 produsul vectorial (numai pentru vectorii cu trei componente).

Fie x si y doi vectori din R4.

 x1   y1 
ORIGIN  1  x2   y2 
x    y   
 x3   y3 
 x4   y4 
   
Produsul scalar al celor doi vectori este definit prin formula

x y 

Pentru a calcula produsul scalar al celor doi vectori in Mathcad se da


comanda obisnuita de inmultire de la tastatura: SHIFT + *.

Nu este neaparat nevoie sa se dea acesta comanda existenta pe


bara Matrix.

Norma euclidiana a vectorului x este egala cu radical din produsul scalar:

x = x x

Pentru un vector x, real sau complex, norma euclidiana este egala cu radical din
suma patratelor modulelor componentelor vectorului x. Daca vectorul x este real,
atunci nu mai este nevoie de a modul elementelor deoarece patratul unui numar
real este egal cu patratul modulului sau.

x 

23
Dan Caragheorghepol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR

Pentru calculul normei euclidiene Mathcad foloseste operatorul care are aceeasi
forma grafica cu cel folosit pentru calculul valorii absolute a unui numar real sau
complex sau pentru calculul determinantului unei matrice patratice. Trebuie
precizat ca nu trebuie folosit operatorul din meniul Matrix (acesta fiind folosit
exclusiv de Mathcad pentru calculul determinantului unei matrice), ci doar cel
din meniul Calculator. De la tastatura combinatia de taste SHIFT+\ este
functionala atat pentru calculul normei euclidiene a unui vector, cat si pentru
determinantul unei matrici.

Observatie.
1. Daca pozitia marcata este completata cu o matrice patratica se calculeaza
determinantul acesteia.
2. Daca in pozitia marcata se scrie numele unui vector atunci se calculeaza norma
euclidiana a acestuia (cu conditia ca operatorul cu forma grafica anterioara sa fie
din meniul Calculator sau de la tastatura).
3. Daca pozitia marcata se completeaza cu un numar real sau complex atunci se
va calcula modulul acelui numar(cu conditia ca operatorul cu forma grafica
anterioara sa fie din meniul Calculator sau de la tastatura).
De exemplu
 1 2 7 
A   5 3 1 
 
 0 6 9 
A  267 este valoarea determinantului matricei A

 2 
w   4 
 
 5

w 5 este valoarea normei euclidiane a vectorului x

Pentru numere reale sau complexe cu acelasi operator se calculeaza modulul,


dupa cum se poate vedea mai jos:
a  21.345 a  21.345 z  4  3 i z 5

24
Dan Caragheorghepol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR

Produsul vectorial se poate calcula numai pentru vectorii din R3. Rezultatul
este tot un vector din R3. Dati vectorii din R3
 x1   y1 
   
x   x2  y   y2 
x  y 
 3  3
produsul lor vectorial este un vector din R3, notat
xy

care are componentele


x  y

Pentru calculul produsului vectorial Mathcad are un operator


specific

al carui buton se afla pe bara Matrix.

Acest operator se poate introduce si de la tastatura tastand Ctrl+8.

Exemplul 1.

Se dau vectorii

 1  4  1 
a   2  b   5  c   2 
     
 3  6  5 
Calculati:
1) Produsul scalar si produsul vectorial dintre vectorii a si b.
2) Masura unghiului dintre vectrorii a si b.
3) Aria paralelogramului si aria triunghiului determinat de vectorii a si b.
4) Volumul paralelipipedului determinat de vectorii a,b si c.
Solutie.

1) Produsul scalar a b  32

25
Dan Caragheorghepol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR

 3 
2) Produsul vectorial ab   6 
 
 3 

3) Cosinusul unghiului dintre vectorii a si b


a b
cosab  cosab  0.975
a  b

Masura unghiului dintre vectorii a si b θ  acos ( cosab) θ  0.226

Masura unghiului  se determina implicit in radiani.


Pentru transformarea in grade sexazecimale se foloseste posibilitatea
Mathcad-ului de a face transformari de unitati de masura. In acest scop, se
da click pe rezultatul obtinut si in locul marcat care apare in partea dreapta a
rezultatului se completeaza noua unitate de masura deg (degree = gradul
hexazecimal).
θ  12.933 deg

3) Aria paralelogramului determinat de vectorii a si b este egala cu norma


produsului vectorial dintre cei doi vectori. Deci
APab  a  b APab  7.348
Aria triunghiului determinat de vectorii a si b este jumatate din aria
paralelogramului, deci
ab
ATab  ATab  3.674
2
4) Volumul paralelipiledului determinat de vectorii a, b si c este egal cu valoarea
absoluta a produsului mixt dintre cei trei vectori.

Vabc  a ( b  c) Vabc  30

26
Dan Caragheorghepol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR

Cazul vectorilor cu componente complexe

Daca vectorii u si v au componente complexe

 u1   v1 
   
u =  u2  v =  v2 
u  v 
 3  3
atunci produsul scalar este definit prin formula
  
u  v = u1 v1  u2 v2  u3 v3

iar norma este data de relatia


u = u u
De exemplu, fie vectorii

 1  2 i   i 
u   3  v   2  3  i 
   
 2i   1 

Atunci produsul scalar este u  v  2  11i


  
u1 v1  u2 v2  u3 v3  2  11i

Produsul scalar complex este anticomutativ. Aceasta inseamna ca daca in


produsul scalar se schimba ordinea factorilor atunci se obtine numarul complex
conjugat.
v  u  2  11i
  
v1 u1  v2 u2  v3 u3  2  11i

Norma vectorului u are valoarea

u  4.359
  
u1 u1  u2 u2  u3 u3  4.359

ORIGIN  1

27
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR

ALGEBRA LINIARA CU MATHCAD


Calcul matriceal

Extragerea coloanelor, liniilor si a submatricelor dintr-o matrice


Pentru a extrage o coloana dintr-o matrice data se foloseste butonul

de pe bara Matrix.
Coloanele unei matrice sunt indexate cu indici superiori incadrati de
paranteze unghiulare.
Pentru a scrie un astfel de indice cu ajutorul tastaturii se tasteaza Ctrl+6.
De exemplu, coloanele matricei
 1 2 3
A   4 5 6 
 
 7 8 9 
sunt
ORIGIN  1

 1  2  3
1   2   3  
A  4 A  5 A  6
     
 7  8  9
Pentru extragerea liniilor se transpune matricea data, se extrag coloanele
matricei transpuse AT care se transpun din nou. Pentru transpunerea unei
matrice folosind tastatura se foloseste comanda CTRL+1.
1T 2T 3T
A 
T
 ( 1 2 3) A 
T
 ( 4 5 6) A 
T
 ( 7 8 9)
Reciproc, daca se dau mai multi vectori cu ajutorul lor se poate obtine o
matrice, care are drept coloane vectorii dati. Pentru aceasta operatie se foloseste
functia din Mathcad numita augment.
De exemplu, fie vectorii

 1  4  7  10 
a   2  b   5  c   8  d   11 
       
 3  6  9  12 

28
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR

Cu acestia se poate forma matricea


M  augment ( a b c d)

 1 4 7 10 
M   2 5 8 11 
 
 3 6 9 12 

 1  4  7  10 
1   2   3   4  
M  2 M  5 M  8 M  11
       
 3  6  9  12 
O alta metoda de a obtine o matrice din mai multi vectori este aceea de a da
vectorilor acelasi nume si de a folosi indicii superiori.

 1  4  7  10 
1 2 3 4
z   2  z   5  z   8  z   11 
       
 3  6  9  12 
Matricea obtinuta are numele z.

 1 4 7 10 
z   2 5 8 11 
 
 3 6 9 12 

Extragerea unei submatrice dintr-o matrice

Functia submatrix(M,ir,jr,ic,jc) extrage din matrice M o submatrice care


contine liniile de la ir la jr si coloanele de la ic la jc.

De exemplu, fie matricea

1 2 3 4 5 
 
M  
6 7 8 9 10 
 11 12 13 14 15 
 
 16 17 18 19 20 

29
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR

Atunci

 8 9 10 
submatrix ( M 2 4 3 5)   13 14 15 
 
 18 19 20 

Daca se inverseaza indicii ir cu jr sau ic cu jr se schimba ordinea liniilor sau a


coloanelor.
 18 19 20 
submatrix ( M 4 2 3 5)   13 14 15 
 
 8 9 10 

 10 9 8 
submatrix ( M 2 4 5 3)   15 14 13 
 
 20 19 18 

Exemplu
Fie matricea
5 4 3 2
 
A  
4 5 3 2
ORIGIN  1 a  A
3 4 5 2
 
2 3 4 5

Calculati valorile minorilor principali ai matricei A.

Δ1  a1 1 Δ1  5

Δ2  submatrix ( A 1 2 1 2) Δ2  9

Δ3  submatrix ( A 1 3 1 3) Δ3  24

Δ4  A Δ4  84

30
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR

ALGEBRA LINIARA CU MATHCAD


Calcul matriceal - Exercitii

Operatii cu matrice

1. Se dau matricele

 1 2 5   2 7 5   8 2 
A   3 4 7  B   3 2 1  C   3 5 
     
 6 9 8   4 6 9   1 4 

3i i 2  3 i 
D   
 2 4  3  i 7 

Determinati valorile expresiilor matriceale

3 2 1 2
3 A  2 B ( A  B)  C A B A C

T
D   D  A 2   B 2
T
C B

Solutie.

 996 359 1566   35 43 


3  A  2  B   1082 409 1610  ( A  B)  C   58 50 
3 2
   
 2369 2453 2335   36 99 

 0.269 0.179 0.005   7 32 


  0.065 0.155 0.068  A C   29 42 
1 2
A B
   
 0.173 0.025 0.018   13 25 

 29 56 46  T  5  27i 
D   D  
T 24
C B    
 5 20 51   5  27i 78 

 A  2   B  2  202925

31
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR

2. Se dau vectorii din R3

 2   5  2
x   3  y   3  z   1 
     
 7  1   2

Calculati:
a) Produsul scalar dintre vectorii x si y.
b) Produsul vectorial al vectorilor y si z (in aceasta ordine)
c) Norma euclidiana a vectorului x.

Solutie.

 7 
x  y  8 y  z   12  x  7.874
 
  1 

3. Se dau vectorii din C3

 2  i  1i 
v   i  w   2 
   
 3  i   2  3  i 

Calcalati produsul scalar dintre vectorii v si w si normele


acestor vectori.

Solutie. v  w  12  8i v 4 w  4.359

32
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR

ALGEBRA LINIARA CU MATHCAD


Rezolvarea sistemelor liniare

Forma matriceala a unui sistem liniar


Fie sistemul de n ecuatii liniare cu n necunoscute
a1 1 x1  a1 2 x2  ....  a1 n xn = b1
a2 1 x1  a2 2 x2  ....  a2 n xn = b2
...............................................
an 1 x1  an 2 x2  ....  an n xn = bn
............

Pentru rezolvarea sistemului in Mathcad acesta trebuie scris sub forma matriceala

 a1 1 a1 2 .... a1 n   x1   b1 


    
 a2 1 a2 2 .... a2 n
  x2  =  b2 
 .... .... .... ....   ....   .... 
    
 an 1 an 2 .... an n   xn   bn 

sau
A x = b
unde
 A este matricea sistemului;
 x este vectorul necunoscutelor;
 b este vectorul termenilor liberi.
 a1 1 a1 2 .... a1 n   x1   b1 
     
a2 1 a2 2 .... a2 n x2 b2
A    x    b   
 .... .... .... ....   ....   .... 
     
 an 1 an 2 .... an n   xn   bn 

Rezolvarea sistemelor liniare nesingulare


1. Utilizarea functiei lsolve

Determinarea solutiei unui sistem de n ecuatii liniare cu n necunoscute

Ax = b,

33
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR

unde A este o matrice patratica nesingulara se poate face in Mathcad folosind


functia lsolve(A,b)

Exemplul 1. Fie sistemul de ecuatii


liniare
5  x1  3  x2  6  x3 = 15
2 x1  8  x2  7  x3 = 17
4  x1  x2  9 x3 = 19

Pentru rezolarea sa scriem matricea sistemului A si vectorul


termenilor liberi b.
 5 3 6   15 
A   2 8 7  b   17 
   
 4  1 9   19 
Calculam determinantul matricei A pentru a vedea daca matricea
este nesingulara.
A  713

Deoarece determinantul matricei A este nenul, sistemul are solutie unica.

Se defineste solutia: x  lsolve ( A b)

 3
Se calculeaza solutia: x   2
 
 1
 0.000000000000000 
Verificarea solutiei: A x  b   0.000000000000000 
 
 0.000000000000000 
2. Utilizarea matricei inverse. Calcul numeric
Daca matricea A este nesingulara, atunci exista matricea inversa A-1 si solutia
sistemului este data de formula
1
x= A b

34
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR

Exemplul 2. Fie sistemul de ecuatii liniare

5  x1  3  x2  6  x3 = 15
2 x1  8  x2  7  x3 = 17
4  x1  x2  9 x3 = 19

Pentru rezolarea sa scriem matricea sistemului A si vectorul termenilor liberi b.

 5 3 6   15 
A   2 8 7  b   17 
   
 4  1 9   19 
Calculam determinantul matricei A pentru a vedea daca matricea este inversabila.
A  713

Deoarece determinantul matricei A este nenul, matricea A este inversabila si


solutia sistemului este data de formula
1
x  A b
Deci
 3
x   2
 
 1
Verificare
 0.000 
A x  b   0.000 
 
 0.000 

Observatii.
 10-15 inseamna "practic zero" sau "zero Mathcad".
 Deoarece in calculul matricei inverse se fac mai multe erorii de rotujire decat
cele care se fac in metoda de rezolvare folosita de functia lsolve, se recomanda
ca sistemele liniare sa fie rezolvate cu lsolve si nu prin inversarea maticei.

35
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR

3. Utilizarea matricei inverse. Calcul simbolic

Exemplul 3. Fie sistemul de ecuatii liniare in care termenii liberi sunt variabile
reale si nu numere.
5  x1  3  x2  6  x3 = α
2 x1  8  x2  7  x3 = β
4  x1  x2  9 x3 = γ

Pentru rezolvare se procedeaza ca mai sus, dar in locul comenzii de calcul


numeric se da comanda de calcul simbolic.

 5 3 6  α
A   2 8 7  b   β 
   
 4  1 9  γ

Calculam determinantul matricei A pentru a vedea daca matricea


este inversabila.
A  713
Deoarece determinantul matricei A este nenul, matricea A este inversabila si
solutia sistemului este data de formula
1
s  A b

Pentru determinarea solutiei se da comanda de calcul simbolic (CRTL + . )

 3 γ  21 β  79 α 
 31 713 713 
 
 
s 
3 β γ 2 α
 
 31 31 31 
 2 γ 17 β 30 α 
   
 31 713 713 
Verificarea solutiei.

 0
A s  b   0 
 
 0

36
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR

Observatie. Deoarece procesorul numeric si cel simbolic al Mathcad-ului


folosesc methode diferite de calcul se recomanda ca in acelasi document
Mathcad sa nu se amestece cele doua tipuri de calcul.

37
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR

ALGEBRA LINIARA CU MATHCAD


Rezolvarea sistemelor liniare

Rezolvarea unui sistem patratic liniar si omogen


Orice sistem liniar si omogen de n ecuatii cu n necunoscute
a1 1 x1  a1 2 x2  ....  a1 n xn = 0
a2 1 x1  a2 2 x2  ....  a2 n xn = 0
...............................................
............
an 1 x1  an 2 x2  ....  an n xn = 0

sau, scris matriceal,

 a1 1 a1 2 .... a1 n   x1 


0
    
 a2 1 a2 2 .... a2 n
  x2  = 0
 .... .... .... ....   ....   .... 
    
 an 1 an 2 .... an n   xn  0

A x = 0
admite intotdeauna solutia nula x = 0.
Daca determinantul sistemului este nenul, sigura solutie a sistemului este
solutia nula.
Daca determinatul sistemului este nul, sistemul admite si solutii diferite de
solutia nula.
Solutia admisa va depinde de un numar de parametrii egal cu diferenta
dintre dimensiunea matricei sistemului si rangul ei.
Determinarea solutiilor diferite de solutia banala se poate face in Mathcad
folosind functia rref.

Exemplul 1

Fie sistemul liniar si omogen


x  2y  3z = 0
2x  6y  11z = 0
x  2y  7z = 0

38
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR

 1 2 3 
Matricea sistemului este A   2 6 11 
 
 1 2 7 
Calculam determinntul ei A 0

Deoarece matricea este singulara (i.e., determinantul ei este egal cu zero)


sistemul admite si solutii diferite de solutia nula: x = 0, y = 0, z = 0.
Pentru a vedea numarul de parametri de care depinde solutia se calculeaza
rangul matricei A
rank ( A)  2
si se scade din dimensiunea matricei
nr_par  cols ( A)  rank ( A) nr_par  1

In concluzie, solutia sistemului depinde de un parametru real. Notam cu R


forma redusa a matricei A obtinute cu ajutorul functiei rref din Mathcad.

1 0 2 
R  rref ( A) R   0 1 2.5 
 
 0 0 0 
Forma matricei reduse arata ca primele doua coloane sunt liniar independenete
iar necunoscutele x si y sunt necunoscute principale. Notam necunoscuta
secundara z cu  si trecem termenii care o contin in membrul drept. Atunci
solutia sistemului este functie de parametrul  si este data de formula
ORIGIN  1

0
3
S ( λ)  λ R   0 
 
λ

 2 λ 
5 λ 
S ( λ)  
 2 
 λ 
 

39
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR

 0
Verificare A  S ( λ)   0 
 
 0

Exemplul 2
In acest exemplu dorim sa rezolvam sistemul liniar si omogen
xyz=0
2 x  2 y  2 z = 0
3 x  3 y  3 z = 0

 1 1 1 
Matricea sistemului A   2 2 2  are determinantul nul A 0
 
 3 3 3 

Numarul de parametri de care va depinde solutia nenula a sistemului este


nr_par  cols ( A)  rank ( A) nr_par  2

Determinarea solutiei se face folosind rref. Forma redusa a matricei A


determinata cu rref este:
 1 1 1 
R  rref ( A) R 0 0 0 
 
0 0 0 
Forma matricii reduse R arata ca necunoscuta x este necunoscuta principala, iar
necunoscutele y si z sunt necunoscute secundare. Notand necunoscuta y cu λ si
necunoscuta z cu μ, se obtine solutia sistemului ca functie de λ si μ de forma
urmatoare:
0
2 3  
sol ( λ μ)  λ R  μ R  λ
 
 μ

40
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR

μ  λ
sol ( λ μ)   λ 
 
 μ 

 0
Verificare A sol ( λ μ)   0 
 
 0

41
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR

ALGEBRA LINIARA CU MATHCAD


Rezolvarea sistemelor liniare

Rezolarea sistemelor dreptunghiulare de m ecuatii cu n necunoscute


Fie sistemul de m ecuatii liniare cu n necunoscute
a1 1 x1  a1 2 x2  ....  a1 n xn = b1
a2 1 x1  a2 2 x2  ....  a2 n xn = b2
...............................................
............
am 1 x1  am 2 x2  ....  am n xn = bm

scris sub forma matriceala

 a1 1 a1 2 .... a1 n   x1   b1 


    
 a2 1 a2 2 .... a2 n
  x2  =  b2 
 .... .... .... ....   ....   .... 
    
 am 1 am 2 .... am n   xn   bm 

sau
A x = b

unde
 a1 1 a1 2 .... a1 n   b1   x1 
     
a2 1 a2 2 .... a2 n b2 x2
A    b    x   
 .... .... .... ....   ....   .... 
     
 am 1 am 2 .... am n   bm   xn 
Daca matricea sistemului este dreptunghiulara, pentru a decide daca sistemul
este compatibil sau nu folosim urmatorul rezultat:

Teorema Kronecker-Capelli. Unsistem de m ecuatii liniare cu n necunoscute


este compatibil daca si numai daca rangul matricei sistemului este egal cu rangul
matricei extinse.
Reamintim ca matricea extinsa se obtine adaugand la matricea sistemului inca o
coloana, a n+1-a, formata cu termenii liberi ai sistemului.

42
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR

 a1 1 a1 2 .... a1 n b1 


 
a2 1 a2 2 .... a2 n b1
AE   
 .... .... .... .... .... 
 
 am 1 am 2 .... am n bm 

Discutie asupra naturii unui sistem de m ecuatii liniare cu n necunoscute


Prezentam mai jos discutia asupra naturii unui sistem de m ecuatii liniare cu n
necunoscute in functie de rangul matricei sistemului si rangul matricei extinse.

1. Daca rank(A) < rank(AE), atunci sistemul nu are solutii, deci este un
sistem incompatibil.
2. Daca rank(A) = rank(AE), atunci sistemul are solutii, deci este un sistem
compatibil.
Mai precis:
2.1. Daca rank(A) = cols(A), atunci sistemul are solutie unica, deci
este un sistem compatibil determinat.

2.2. Daca rank(A) <cols(A), atunci sistemul are o infinitate de solutii,


deci este un sistem compatibil nedeterminat.

1. Sistem compatibil determinat

Exemplul 1. Folosirea blocului Given cu Find simbolic

Fie sistemul de 4 ecuatii liniare cu 3 necunoscute

2 x  3 y  4 z = 4
3  x  5  y  6  z = 13
4  x  y  3 z = 13
x  6  y  9  z = 0

Pentru a folosi notatii distincte la fiecare exemplu notam matricea sistemului cu A1


si vectorul termenilor liberi cu b1.

43
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR

 2 3 4   4 
   
5 6 
A1   b1   
3 13
 4 1 3   13 
   
 1 6 9   0 
Matricea extinsa a sistemului este A1E  augment ( A1 b1)

 2 3 4 4 
 
6 13 
A1E  
3 5
 4 1 3 13 
 
 1 6 9 0 

Calculam rank ( A1)  3 rank ( A1E)  3 cols ( A1)  3

Deoarece rank ( A1) = rank ( A1E)

sistemul are solutie, iar egalitatea

rank ( A1) = cols ( A1)

arata ca solutia este unica.


Pentru determinarea solutiei sistemului folosim blocul Given si functia Find
in modul simbolic.

x  2 y  3 z  4

Given
2 x  3 y  4 z = 4
3  x  5  y  6  z = 13
4  x  y  3 z = 13
x  6  y  9  z = 0

s1  Find ( x y z)


 3
s1   2 
 
 1

44
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR

Verificare
 0
 
A1 s1  b1   
0
 0
 
 0

2. Sistem compatibil nedeterminat

Exemplul 2. Folosirea functiei rref


Fie sistemul de ecuatii liniare
x  2 y  4 z = 0
7  x  4  y = 8
3  x  y  2  z = 4

Notam matricea sistemului cu A2 si vectorul termenilor liberi cu b2. Acestea sunt:

 1 2 4   0
A2   7 4 0  b2   8 
   
 3 1 2   4

Matricea extinsa a acestui sistem este

 1 2 4 0 
A2E  augment ( A2 b2) A2E   7 4 0 8 
 
 3 1 2 4 
Calculam valorile necesare pentru a testa compatibilitatea sistemului.

rank ( A2)  2 rank ( A2E)  2 cols ( A2)  3

rank ( A2) = rank ( A2E)

sistemul este compatibil, iar inegalitatea

rank ( A2)  cols ( A2)

45
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR

arata ca sistemul este nedeterminat (solutia sa depinde de cols(A2) - rank(A2) =


1 parametru).

Notam cu R forma redusa a matricei extinse obtinute cu ajutorul functiei


rref din Mathcad.
 1 0 8 8 
 5 5

R  rref ( A2E)
 
R  14 4 
0 1  
 5 5
 
0 0 0 0 

Forma matricei reduse arata ca primele doua coloane sunt liniar independenete
iar necunoscutele x si y sunt necunoscute principale. Notam necunoscuta
secundara z cu  si trecem termenii care o contin in membrul drept. Atunci
solutia sistemului este functie de parametrul  si este data de formula
ORIGIN  1

0
4 3  
S2 ( λ)  R  λ  R  0
 
λ
 8 λ  8 
 5 5

 
S2 ( λ)   14 λ 4 

 5 5
 
 λ 
 0
Verificare A2 S2 ( λ)  b2   0 
 
 0
Pentru orice valoare reala data parametrului  se obtine o solutie a sistemului. De
exemplu, pentru  = 0.5 solutia sistemului este

 0.8 
S2 ( 0.5)   0.6 
 
 0.5 

46
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR

3. Sistem incompatibil.

Exemplul 3.

Fie sistemul de 5 ecuatii cu 3 necunoscute

x  2 y  z = 1
3  x  7  y  4  z = 1
2  x  4  y  3  z = 3
4  x  11 y  9 z = 9
5  y  2  z = 1

Notam matricea sistemului cu A3 si vectorul termenilor liberi cu b3. Avem deci

1 2 1   1
3 7 4
  1 
   
A3   2 4 3  b3   3 
4 11 9   9 
   
0 5 2   1 
Matricea extinsa a sistemului este:
1 2 1 1 
3 7 4 1

 
A3E  augment ( A3 b3) A3E   2 4 3 3 
4 11 9 9 
 
0 5 2 1 
Calculam rank ( A3)  3 si rank ( A3E)  4

Deoarece rank ( A3)  rank ( A3E)


conform teoremei Kronecker-Capelli, sistemul este incompatibil.

47
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR

ALGEBRA LINIARA CU MATHCAD


Rezolvarea sistemelor liniare - Exercitii

Stabiliti natura sistemelor de mai jos si in caz de compatibilitate determinati


solutia lor:

1. 5  x  3  y  6  z = 15 2. x  y  2  z = 1

2  x  8  y  7  z = 17 2  x  y  4  z = 4

4  x  y  9z = 19 4x  y  4 z = 2

3. 2  x  3  y  10 z = 5 4. x  5 y  4 z  13 t = 3

x  7 y  14  z = 1 3 x  y  2 z  5 t = 2

3  x  8  y  9  z = 3 2 x  2 y  3 z  4 t = 1

5. 2 x  y  z = 1 6. x  2 y  z = 1

3 x  3 y  z = 2 3  x  7  y  4  z = 1

2 x  4 y = 3 2  x  4  y  3  z = 3

4 x  11 y  9 z = 9

5  y  2  z = 1

7. 2 x  y  3 z = 4 8. x  2 y  4 z = 0

3  x  4  y  z = 5 7  x  4  y = 8

x  5  y  4  z = 9 3  x  y  2  z = 4

48
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR

Solutie. ORIGIN  1

1. Fie sistemul
5  x  3 y  6  z = 15

2 x  8 y  7 z = 17

4  x  y  9z = 19

Notam cu A1 matricea sistemului, cu b1 vectorul termenilor liberi si cu A1E


matricea extinsa.

 5 3 6   15 
A1   2 8 7  b1   17 
   
 4  1 9   19 

 5 3 6 15 
A1E  augment ( A1 b1) A1E   2 8 7 17 
 
 4 1 9 19 
Calculam rangul matricei A1, rangul matricei extinse A1E si determinam numarul
de coloane ale matricei A1.

rank ( A1)  3 rank ( A1E)  3 cols ( A1)  3

Deoarece cele doua matrice au acelasi rang, conform teoremei


Kronecker-Capelli, sistemul este compatibil. Pentru ca rangul matricei A1 este
egal cu numarul de coloane ale acestei matrice sistemul este compatibil
determinat. Pentru calcularea solutiei folosim functia lsolve.

 3
s1  lsolve ( A1 b1) s1   2 
 
 1
Verificare  15   15 
A1 s1   17  b1   17 
   
 19   19 

49
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR

4. Fie sistemul
x  5 y  4 z  13 t = 3

3 x  y  2 z  5 t = 2

2 x  2 y  3 z  4 t = 1

Procedam ca mai sus notand folosind notatiile A4, b4, A4E.

 1 5 4 13   3
A4   3 1 2 5  b4   2 
   
 2 2 3 4   1

 1 5 4 13 3 
A4E  augment ( A4 b4) A4E   3 1 2 5 2 
 
 2 2 3 4 1 

rank ( A4)  2 rank ( A4E)  3

Deoerece rangul matricei sistemului este strict mai mic decat rangul matricei
extinse sistemul este incompatibil.

7. Fie sistemul
2 x  y  3 z = 4

3  x  4  y  z = 5

x  5  y  4  z = 9

Notam

 2 1 3   4
A7   3 4 1  b7   5 
   
 1 5 4   9 

50
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR

 2 1 3 4 
A7E  augment ( A7 b7) A7E   3 4 1 5 
 
 1 5 4 9 
Calculam

rank ( A7)  2 rank ( A7E)  2 cols ( A7)  3

Deoerece rangul matricei sistemului este egal cu rangul matricei extinse sistemul
este compatibil, dar nedeterminat pentru ca rangul matricei este strict mai mic
decat numarul de coloane al matricei sistemului.
Numarul de parametrii de care depinde solutia sistemului este
cols ( A7)  rank ( A7)  1

Determinam solutia sistemului folosind functia rref aplicata matricii extinse A7E.

1 0 1 1 
R  rref ( A7E) R   0 1 1 2 
 
0 0 0 0 

0
4 3  
Solutia depinzand de parametrul λ este S7 ( λ)  R  λ  R  0
 
λ
1  λ
S7 ( λ)   λ  2 
 
 λ 

 0
Verificarea solutiei A7 S7 ( λ)  b7   0 
 
 0

51
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR

ALGEBRA LINIARA CU MATHCAD


Baze in spatiul vectorial Rn

Scrierea unui vector intr-o baza

In spatiul vectorial R4 se considera vectorii

1 0  1   1 
       
1 2 3 1 4 1
a    a    a    a   
0 0
0 0  1   1 
       
1 1  1   1 
Demonstrati ca multimea B = [a<1>, a<2>, a<3>, a<4>] este o baza a spatiului
vectrial R4 si determinati scrierea vectorului
1
 
v   
0
1
 
1
in aceasta baza,
Solutie.
Multimea B = [a<1>, a<2>, a<3>, a<4>] este o baza pentru R4 daca
determinantul matricei formate cu componentele celor patru vectori este
nenul. Daca notam matricea respectiva cu A, atunci

1 0 1 
1
 

1 2 3 4
A  augment a a a a  A
0 0 1 1 
0 0 1 1 
 
1 1 1 1 
are determinatul A 2

Vectorul se scrie in baza B = [a<1>, a<2>, a<3>, a<4>] sub forma

ORIGIN  1 1 2 3 4


v = λ a  λ a  λ a  λ a
1 2 3 4

52
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR

 λ1 
λ 
Notam cu λ =  
2
λ 
 3
 λ4 
 
vectorul componentelor lui v in baza B = [a<1>, a<2>, a<3>, a<4>]

Acest vector se determina rezolvand sistemul

A λ = v

 1 
 
λ 
1
Solutia acestuia este λ  lsolve ( A v)
 0.5 
 
 0.5 

Prin urmare, vectorul v are in baza B = [a<1>, a<2>, a<3>, a<4>] scrierea

1 2 1 3 1 4


v = a  a  a  a
2 2

53
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR

ALGEBRA LINIARA CU MATHCAD


Baze in spatiul vectorial Rn

Matricea de trecere de la o baza la alta


Schimbarea coordonatelor unui vector la o schimbare a bazei

In spatiul vectorial R3 se considera vectorii


ORIGIN  1

 1  0  1
1 2 3
x   0  x   1  x   1 
     
 1  1  1

 1  1   0
1 2 3
y   1  y   0  y   0 
     
 0  0  1
1) Demonstrati ca multimile B = [x<1>, x<2>, x<3>] si B' = [y<1>, y<2>, y<3>] sunt
baze pentru R3 si determinati matricea de trecere de la baza B la baza B'.

2) Daca vectorul v din R3 are in baza B scrierea v = 3x<1> - x<2> +2x<3>, care
este scrierea lui v in baza B'?
Solutie.
1) Multimea B = [x<1>, x<2>, x<3>] este o baza pentru R3 daca determinantul
matricei formate cu componentele celor trei vectori este nenul. Daca notam
matricea respectiva cu B, atunci

 1 0 1

1 2 3
B  augment x x x  B   0 1 1
 
 1 1 1
are determinatul B  1

Analog avem
 1 1 0 

1 2 3
B'  augment y y y  B'   1 0 0  B'  1
 
 0 0 1 

54
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR

Pentru a determina matricea de trecere de la baza B la baza B' se scriu vectorii


noi baze in raport cu veche baza.
1 1 2 3
y = c1 1 x  c2 1 x  c3 1 x

Aceasta scriere este echivalenta cu forma matriceala

 c1 1 
1  1 2 3   
y = x x x  2 1 
c
c 
 3 1 
Daca notam

 c1 1 
1  
c =  c2 1 
c 
 3 1 
atunci forma matriceala de mai sus se poate scrie
1 1
y = B c

Rezolvam acest sistem sub forma matriceala

 1 
1  1 1 1
c  B y c   1 
 
 2
Analog obtinem

 0
2  1 2 2  
c  B y c  1
 
 1 
 1
3  1 3 3  
c  B y c  1
 
 1 

55
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR

Matricea de trecere de la baza B la baza B' este

C= c 
1 2 3
c c 

Conform formulelor de mai sus obtinem pentru matricea de trecere forma


1
C  B B'

Prin urmare

 1 0 1 
C   1 1 1 
 
 2  1  1 

2) Daca vectorul v se scrie in baza B sub forma v = 3x<1> - x<2> +2x<3>, atunci
scrierea matriceala a lui v in baza B este

 3
v   1 
 
 2
Scrierea lui v in noua baza B' este

 1
v'   4 
1
v'  C v
 
 4
Prin urmare, v se scrie in baza B' sub forma v = y<1> - 4y<2> + 4y<3>.

56
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR

ALGEBRA LINIARA CU MATHCAD


Baze in spatiul vectorial Rn

Matricea de trecere de la o baza la alta


Schimbarea coordonatelor unui vector la o schimbare a bazei

In spatiul vectorial R4 se considera vectorii

1 1 1 1


       
1 2 3 4
a    a    a    a   
1 2 1 3
1 1 2 2
       
1 1 1 3

1  2  2  2 
       
1 2 3 3 4 3
b    b    b    b   
0 2
3  5  5  4 
       
3  4  4  4 
1) Demonstrati ca multimile B1 = [a<1>, a<2>, a<3>, a<4> ] si
B2= [b<1>, b<2>, b<3>, b<4> ] sunt baze pentru R4 si determinati matricea de
trecere de la baza B1 la baza B2.

2) Daca vectorul v din R4 are in baza B1 scrierea v = 4a<1> +3a<2> +2a<3>-6a<4>,


care este scrierea lui v in baza B2?
Solutie.

1) Multimea B1 = [a<1>, a<2>, a<3>, a<4> ] este o baza pentru R4 daca


determinantul matricei formate cu componentele celor patru vectori este nenul.
Daca notam matricea respectiva cu A, atunci

1 1 1 1
 
A  augment  a a a a  A  
1 2 3 4 1 2 1 3
1 1 2 2
 
1 1 1 3
are determinantul A 2

57
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR

Analog avem
1 2 2 2 
 

1 2 3 4
B  augment b b b b  B
0 3 2 3 
B  2
3 5 5 4 
 
3 4 4 4 

Matricea de trecere de la baza B1 la baza B2 este

 2 0 1 1 
 
3 2
C
1 1 1 
C  A B
 1 2 2 1 
 
 1 1 1 1 

2) Daca vectorul v se scrie in baza B1 sub forma v = 4a<1> +3a<2> +2a<3>-6a<4>,


atunci scrierea matriceala a lui v in baza B1 este

 4 
 
λ   
3
 2 
 
 6 

Scrierea lui v in baza B2 este data de formula

 15 
 
μ 
1 25
μ  C λ
 33 
 
 1 
Prin urmare, vectorul v se scrie in baza B2 sub forma v = -15 b<1> + 25b<2> +
33b<3> - b<4>

58
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR

ALGEBRA LINIARA CU MATHCAD


Valori si vectori proprii

Definitii
Fie A o matrice patratica cu n linii si n coloane cu elemente reale.

 a1 1 a1 2 .... a1 n 


 
a2 1 a2 1 .... a2 n
A=  
 .... .... .... .... 
 
 an 1 an 2 .... an n 

Se numeste vector propriu al matricei A un vector nenul x din Rn

 x1 
 
x2
x=  
 ... 
 
 xn 
pentru care exista un numar real  astfel incat are loc egalitatea

A x = λ x

Numarul real  pentru care are loc egalitatea de mai sus se numeste
valoarea proprie corespunzatoare vectorului propriu x.

Determinarea valorilor proprii ale unei matrice. Functia eigenvals(A)

Se considera matricea

 3 1 0
ORIGIN  1 A   4 1 0 
 
 4 8  2 

Pentru determinarea valorilor proprii ale matricei patratice A se foloseste


functia Mathcad
eigenvals ( A)

59
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR

Rezultatul executiei este un vector de acelasi ordin cu matricea A care are drept
componente valorile proprii ale matricei.

 2 
eigenvals ( A)   1 
 
 1

Pentru a putea folosi in calculele ulterioare aceste valori proprii, notam cu 


vectorul care contine valorile proprii ale matricei A.

 2 
λ  eigenvals ( A) λ   1 
 
 1

Valorile proprii sunt λ1  2 λ2  1 λ3  1

Determinarea vectorilor proprii corespunzatori. Functia eigenvec(A,z)

Functia Mathcad
eigenvec ( A z)

determina vectorul propriu normalizat al matricei patratice A care corespunde


valorii proprii z. In cazul nostru obtinem
 0
x1  eigenvec  A λ1 x1   0 
 
 1 
 0.218 
x2  eigenvec  A λ2 x2   0.436 
 
 0.873 
 0.218 
x3  eigenvec  A λ3 x3   0.436 
 
 0.873 
Verificarea rezultatelor se face aratand ca Ax = x, unde x este un vector
propriu al matricei A, iar  este valoarea proprie corespunzatoare.

60
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR

 0
A x1  λ1 x1   0 
 
 0

 3.057  10 13 
 
A x2  λ2 x2   6.114  10 13 
 
 1.223  10 12 
 

 7.423  10 13 
 
A x3  λ3 x3   1.485  10 12 
 
 2.969  10 12 
 

Determinarea vectorilor proprii ai unei matrice. Functia eigenvecs(A)

Vectorii proprii se determina cu functia Mathcad


eigenvecs ( A)
Rezultatul este o matrice patrata de acelasi ordin cu matricea data ale carei
coloane sunt vectorii proprii normalizati ai matricei A. Coloana n a matricei este
vectorul propriu corespunzator valorii proprii n data de functia eigenvals.

 0 0.218 0.218 
eigenvecs ( A)   0 0.436 0.436 
 
 1 0.873 0.873 
Observatie.
 Functia eigenvals se poate folosi in calculul simbolic atat pentru matrice
reale cat si complexe.
 Functia eigenvals se poate folosi in evaluarea numerica numai pentru
matrice reale.

61
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR

ALGEBRA LINIARA CU MATHCAD


Diagonalizarea matricelor

Definitie. O matricea patrata A se numeste diagonalizabila daca exista o alta


matrice de acelasi tip cu matricea A si nesingulara astfel incat produsul C-1AC este
o matrice de forma diagonala. Matricea C se numeste matrice diagonalizatoare
pentru A.

Teorema. Matricea patratica reala (complexa) A este diagonalizabila daca si


numai daca exista o baza a spatiului Rn (Cn) formata din vectori proprii ai
matricei A.
Exemplul 1. Sa se cerceteze daca matricea reala data mai jos este diagonalizabila
si in caz afirmativ sa se aduca la forma diagonala punandu-se in evidenta
matricea diagonalizatoare.

 1 3 1 
A   3 5 1 
 
 3 3 1 
Pentru a cereceta daca matricea A este diagonalizabila determinam vectorii
proprii ai maticei A si stabilim daca ei formeaza sau nu o baza a spatiului
vectorial Rn. Notam cu C matricea care are drept coloane vectorii proprii ai
matricei A si calculam determinantul acesteia.
ORIGIN  1

 0.577 0.426 0.236 


C  eigenvecs ( A) C   0.577 0.64 0.086  C  0.108
 
 0.577 0.64 0.968 
Deoarece determinatul matricei C este nenul coloanele acestei matrice, care sunt
vectorii proprii ai matricei A, formeaza o baza a spatiului vectorial Rn. Prin
urmare matricea A este diagonalizabila.
Forma diagonala a matricei A este

 1 1.332  10
 15
0 
1  
C A  C   1.554  10 15 2 0 
 
 0 0 2 

62
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR

Se observa ca pe diagonala principala a matricei diagonale obtinute se afla


valorile proprii ale matricei A.

 1 
eigenvals ( A)   2 
 
 2 

Evident, matricea diagonalizatoare pentru matricea A este matricea C formata cu


vectorii proprii ai matricei A.

Exemplul 2. Sa se cerceteze daca matricea reala data mai jos este diagonalizabila
si in caz afirmativ sa se aduca la forma diagonala punandu-se in evidenta
matricea diagonalizatoare.

 4 5 2 
A   5 7 3 
 
 6  9 4 
Procedam ca mai sus si determinam matricea vectorilor proprii ai matricei A.

C  eigenvecs ( A)

 0.577 0.267  3.147i  10 8 0.267  3.147i  10 8 


 
C   0.577 0.535  3.147i  10 8 0.535  3.147i  10 8 
 
  0.577 0.802 0.802 

9
C  9.711i  10

Dupa cum se observa matricea C (in care elementele sunt afisate cu trei zecimale)
are doua coloane egale. Prin urmare, nu exista o baza a lui R3 formate cu vectori
proprii ai matricei A. Deci A nu este diagonalizabila.

63
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR

ALGEBRA LINIARA CU MATHCAD


Valori si vectori proprii

Valori si vectori proprii - Exemplu

 1 0 3 
Fie matricea A   3 2 3 
 
  3 0  1 
1) Determinati valorile si vectorii ai matricei A.
2) Cercetati daca matricea A este diagonalizabila. In caz afirmativ aduceti
matricea A la forma diagonala.
Solutie folosind calculul numeric.

1. Determinarea valorilor proprii

ORIGIN  1

Determinarea valorilor proprii ale unei matrice se face in Mathcad folosind


functia eigenvals

 2
λ  eigenvals ( A) λ 2 
 
 4 

2. Determinarea vectorilor proprii

Pentru determinarea vectorilor proprii ai matricei A se foloseste functia


eigenvecs.

 0 0.5 0.577 
C  eigenvecs ( A) C   1 0.707 0.577 
 
 0 0.5 0.577 
In continuare determinam vectorii proprii care corespund fiecarei valori proprii
si verificam acest lucru pornind de la definitie.

64
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR

 0  0
1 1 1
λ1  2 C   1 A C  λ1 C   0 
   
 0  0
 0.5   0
2 2 2
λ2  2 C   0.707  A C  λ2 C   0 
   
  0.5   0

 0.577   0
3  3 3  
λ 3  4 C  0.577  A C  λ3 C  0
   
 0.577   0
Observatie O eventuala evaluare simbolica a verificarii faptului ca fiecarui
vector propriu aflat ii corespunde valoarea proprie respectiva poate produce erori
in Mathcad 14. De exemplu in cazul nostru:

 6 
1 1
A C  λ1 C   6 
 
 6 
Din aceasta cauza se recomanda doar folosirea calculului numeric pentru
verificarea respectiva.

3. Diagonalizarea matricei A

Teorema. Matricea A este diagonalizabila daca si numai daca exista o baza a


spatiului R3 formata din vectori proprii ai lui A.
Acesata afirmatie este echivalenta cu: A este diagonalizabila daca si numia daca
matricea C are determinantul nenul.

Se calculeaza determinantul matricei C.

C  0.577
Deoarece determinantul lui C este nenul, matricea A este diagonalizabila.

65
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR

Forma diagonala a matricei A este

2 0 0 
C A C   0 2 0 
1
 
 0 0 4 

66
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR

ALGEBRA LINIARA CU MATHCAD


Baze ortonormate in spatiul euclidian Rn

Procedeul de ortogonalizare Gram-Schmidt

In spatiul euclidian R3 se dau vectorii

 1  2  1
1 2 3
x   0  x   1  x   3 
     
 1  0  1

1) Demonstrati ca multimea B = [x<1>, x<2>, x<3>] este o baza a spatiului R3.


2) Construiti o baza ortonormata B' pornind de la baza B.
3) Care este scrierea vectorului

 2
v   1 
 
 3
in baza B'?

Solutie.

1) Multimea B = [x<1>, x<2>, x<3>] este o baza a spatiului R3 daca determinantul


matricei formate cu componentele celor trei vectori este nenul. Daca notam
matricea respectiva cu B, avem

 1 2 1

1 2 3
B  augment x x x  B   0 1 3 ORIGIN  1
 
 1 0 1
B are determinantul B 6

2) Construim mai intai o baza ortogonala [y<1>, y<2>, y<3>] folosind procedeul
de ortogonalizare Gram-Schmidt.

1 1  1
y  x 1  
y  0
 
 1

67
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR

2 1  1
2 2 x y 1 2  
y  x      y y  1
y 1 y 1  
 1 

3 1 3 2  1 


3 3 x y 1 x y 2 3
y  x      y      y y  2 
y 1 y 1 y 2 y 2  
 1

Baza ortonormata B' = [z<1>, z<2>, z<3>] se obtine impartind fiecare vector y<1>,
y<2>, y<3> la norma sa.

  0.707 
1 y1 1
z    z  0 
y1  
 0.707 
  0.577 
2 y2 2
z    z   0.577 
y2  
  0.577 
  0.408 
3 y3 3
z    z   0.816 
y3  
 0.408 

  
3) Vectorul v are in baza B' scrierea v = λ1 z 1  λ2 z 2  λ3 z 3 unde

1
λ1  v z λ1  3.536

2
λ2  v z λ2  0

3
λ3  v z λ3  1.225

68
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR

ALGEBRA LINIARA CU MATHCAD


Forme patratice

Reducerea la expresia analitica canonica a unei forme patratice.


Metoda lui Jacobi

In spatiul euclidian R3 notam


 x1 
x =  x2 
 
 x3 
si consideram forma patratica

Q  x1 x2 x3 = x A x
T

unde A este matricea acestei forme in raport cu baza canonica a spatiului

 5 2 2 
A   2 6 0 
 
  2 0 4 
Mai precis, forma patratica are expresia analitica generala

T
 x1   x1 
Q ( x1 x2 x3)   x2   A  x2 
   
 x3   x3 
2 2 2
Q ( x1 x2 x3) simplify  5  x1  4 x1 x2  4 x1 x3  6 x2  4  x3

Problema
1) Determinati expresia canonica a formei patratice Q folosind metoda lui
Jacobi.
2) Precizati care este natura formei patratice: pozitiv definita, negativ definita
sau nedefinita ca semn.
3) Determinati baza in raport cu care forma patratica Q are expresia analitica
canonica determinata la punctul 1).

69
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR

Solutie. Expresia analitica canonica

Notam a  A

Minorii principali ai matricei A au valorile

Δ1  a1 1 Δ1  5

 a1 1 a1 2 
Δ2    Δ2  26
 a 2 1 a 2 
2 
Δ3  A Δ3  80

Deoarece toti minorii principali sunt nenuli, conform teoremei lui Jacobi, exista
o baza B' a spatiului R3 formata din vectorii

f1 f2 f3

astfel incat, daca vectorul x are in baza B' scrierea

x = x'1 f1  x'2 f2  x'3 f3

forma patratica Q are expresia analitica canonica data de formula


1 2 Δ1 2 Δ2 2
Q ( x'1 x'2 x'3) = ( x'1)  ( x'2)  ( x'3)
Δ1 Δ2 Δ3

In noua baza B' matricea formei patratice Q este

 1  1 0 0 
 Δ1 0 0  5 
     0.2 0 0 
B   0 0  B  0 0  B   0 0.192 0 
Δ1 5
 Δ2   26   
 Δ2   13 
 0 0 0.325 
 0 0  0 0 
 Δ3   40 

70
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR

Notam cu  x'1 
x' =  x'2 
 
 x'3 

scrierea unui vector oarecare in raport cu noua baza. Atunci forma patratica are
expresia analitica
T
 x'1   x'1 
Q ( x'1 x'2 x'3)   x'2   B   x'2 
   
 
x'3  x'3 
2 2 2
x'1 5  x'2 13 x'3
Q ( x'1 x'2 x'3) simplify   
5 26 40
Deoarece toti coeficientii expresiei analitice canonice sunt pozitivi, forma
patratica Q este pozitiv definita.

2) Determinarea bazei B' in care Q are expresia analitica canonica.

Baza B' se cauta de forma

f1 = c1 1  e1

f1 = c1 2  e1  c2 2 e2

f3 = c1 3  e1  c2 3 e2  c3 3 e3

unde

 1  0  0
e1   0  e2   1  e3   0 
     
 0  0  1

sunt vectorii bazei canonice a spatiului R3.

71
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR

Coeficientii ci,j se determina din relatiile de mai jos

1 1
c1 1  c1 1  c1 1  0.2
a1 1 5

1
 c1 2   a1 1 a1 2   0 
      
 2 2   2 1 2 2   1 
c a a

 1 
 c1 2   13   c1 2   0.077 
     
 2 2   5 
c  2 2   0.192 
c
 26 

1
 c1 3   a1 1 a1 2 a1 3   0 
     
 2 3    2 1 2 2 2 3   0 
c a a a
c  a 
 3 3   3 1 a3 2 a3 3   1 

 3 
 20 
 c1 3     c1 3   0.15 
   1     
 c 2 3    20   c 2 3    0.05 
c     c   0.325 
 3 3  13  3 3 
 
 40 
Atunci vectorii noii baze sunt

f1  c1 1  e1

f2  c1 2  e1  c2 2 e2

f3  c1 3  e1  c2 3 e2  c3 3  e3

72
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR

 3 
 1   20 
 1   13     0.15 
5  0.2    
0.077 
f1      0  f2   5   0.192  f3  
1  
 0.05 
0      20   
0  0   26   0   13   0.325 
     
 0 
 40 

Matricea de trecere de la baza canonica la baza B' este matricea formata cu


vectorii determinati mai sus.

1 1 3 
5 13 20 
   0.2 0.077 0.15 

C  augment f1 f2 f3  C  0
5 1 
C   0 0.192 0.05 
 26 20   
 13 
 0 0 0.325 
0 0 
 40 

Verificarea calculelor

1 0 0  1 0 0 
5  5 
   
C A C   0 0  B  0 0 
T 5 5
 26   26 
 13   13 
0 0  0 0 
 40   40 

73
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR

ALGEBRA LINIARA CU MATHCAD


Forme patratice

Reducerea la expresia analitica canonica a unei forme patratice.


Metoda valorilor proprii

In spatiul euclidian R3 notam


 x1 
x =  x2 
 
 x3 
si consideram forma patratica

Q  x1 x2 x3 = x A x
T

unde A este matricea acestei forme in raport cu baza canonica a spatiului

 5 2 2 
A   2 6 0 
 
 2 0 4 
Mai precis, forma patratica are expresia analitica generala
T
 x1   x1 
Q ( x1 x2 x3)   x2   A  x2 
   
 
x3  x3 
2 2 2
Q ( x1 x2 x3) simplify  5  x1  4 x1 x2  4 x1 x3  6 x2  4  x3

Problema
1) Determinati expresia canonica a formei patratice Q folosind metoda valorilor
proprii.
2) Precizati care este natura formei patratice: pozitiv definita, negativ definita
sau nedefinita ca semn.
3) Determinati baza ortonormata in raport cu care forma patratica Q are
expresia analitica canonica determinata la punctul 1.

74
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR

Solutie. Expresia analitica canonica


Expresia analitica canonica a formei patratice Q este
2 2 2
Q ( x'1 x'2 x'3) = λ1 ( x'1)  λ2 ( x'2)  λ3 ( x'3)

unde 1, 2, 3 sunt valorile proprii ale matricei A.

Valorile proprii ale matricei A sunt


 8
λ  eigenvals ( A) λ   5
 
 2
Vectorii proprii corespunzatori sunt coloanele matricei

 1  1 2 
  1 0.5 2 
 
2

C  eigenvecs ( A) C  1   0.5 1 2 
1 2  
2   1 1 1 
 
1 1 1 

In continuare determinam vectorii proprii care corespund fiecarei valori proprii si


verificam acest lucru pornind de la definitie.

 1 
 1   0
1
C      0.5 
1
λ1  8 1 1  
2   A C  λ1 C  0
 
1  1   0 
 

  1 
 0.5   0
2 2
λ2  5 C     1  2 2
A  C  λ 2  C   0 
 1     
 1   1   0 
 

75
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR

 2   2   0 
3 3 3  
λ3  2 C  2   2  A  C  λ 3  C  0
     
 1  1  0

Matricea C este o matrice ortogonala, adica are proprietatile

 1 0 0  1 0 0  0 0 0
C C   0 1 0  C C   0 1 0  C  C   0 0 0
T T T 1
     
 0 0 1   0 0 1   0 0 0 

In consecinta, acesti vectori proprii formeaza o baza ortonormata a spatiului


euclidian R3 in raport cu care forma patratica are matricea

 8 0 0
diag ( λ)   0 5 0 
 
 0 0 2

Notam cu
 x'1 
x' =  x'2 
 
 x'3 

scrierea unui vector oarecare in raport cu baza formata cu vectorii proprii.


Atunci forma patratica are expresia analitica

T
 x'1   x'1 
Q ( x'1 x'2 x'3)   x'2   diag ( λ)  x'2 
   
 x'3   x'3 
2 2 2
Q ( x'1 x'2 x'3) simplify  8 x'1  5 x'2  2 x'3

76
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR

Deoarece matricea A are toate valorile proprii pozitive, forma patratica Q este
pozitiv definita.

Verificarea calculelor.

 2 0 0
C A C   0 8 0 
T
 
 0 0 5 

77
3. ANALIZĂ MATEMATICĂ CU MATHCAD
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR

ANALIZA MATEMATICA CU MATHCAD


Calculul limitelor unei functii de o variabila

Pentru calculul limitelor unei functii de o variabila se foloseste calculul simbolic.


In Mathcad exista trei operatori pentru a calcula limite. Acestia se afla in bara
Calculus. Fiecarui operator ii corespunde si o comanda de la tastatura, asa cum
se vede mai jos.

Ctrl + L pentru limita in jurul unui punct

Ctrl + Shift + A pentru limita la dreapta

Ctrl + Shift + B pentru limita la stanga

Exemplul 1

sin ( x) 1  cos ( x) 1   1 
lim 1 lim  lim  x  sin     0
x 2 x 0  x 
2
x 0 x 0 x
x 3 2
e 1 x  2 x  3 x  5
lim 1 lim 1
x 0 x x 2 4 2
x  3 x  1

Exemplul 2

In cazul in care limita nu se poate calcula Mathcad afiseaza mesajul


"undefined", dupa cum se vede mai jos:
1
lim  undefined
x 1 x  1

In acest caz se incearca dereminarea


limitele laterale
1 1
lim ∞ lim  ∞
x 1  x  1 x 1  x  1

79
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR

1
Reprezenatrea grafica a functiei f ( x)  ilustreaza cel mai bine
x1
fenomemul care are loc.

10
1

5
1
x1 1 0 1 2 3
5

 10

Exemplul 3

 1  1  1
 x  x  x
lim

 x e   ∞ lim

 x e   0 lim  x  e   undefined
x 0 x 0 x 0

30

20

x exp  
1
10
 x

4 2 0 2 4

 10

80
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR

ANALIZA MATEMATICA CU MATHCAD


Calculul derivatelor

Calculul simbolic al derivatei unei functii intr-un punct

1. Se scrie definitia functiei.

f ( x) 
2  2
x  1 ln x  1  x atan ( x) 
2. Se tasteaza Shift + / sau se da clic cu mouse-ul pe simbolul operatorului de
derivare aflat pe bara Calculus.

Pe ecran apare operatorul de derivare cu pozitiile marcate necompletate.

d
d
3. Se completeaza pozitiile marcate cu numele functiei de derivat si variabila in
raport cu care se face derivata.
d
f ( x)
dx
5. Se da comanda de calcul simbolic Ctrl + . (Ctrl + punct) sau se apasa
butonul corespunzator aflat pe bara Evaluation. La terminare se apasa Enter
sau se da clic in afara zonei de editare. Se obtine

d
f ( x)  atan ( x) 
x 2 x 
x  ln x  1
2 
 
dx 2 2 2
x 1 x 1 x 1

Pentru calculul derivatelor de ordin superior se procedeaza la fel ca mai sus cu


deosebirea ca in locul operatorului de derivare de ordinul unu se foloseste
operatorul de derivare de ordin superior. Pentru aparitia acestui se tasteaza Ctrl
+ Shift + / sau se apasa butonul corespunzator aflat pe bara Calculus. Trecerea
de la o pozitie marcata la alta se face apasand tasta Tab.
De exemplu
2
d
2 2 2 x
g ( x)  x atan ( x) g ( x)  
x2  12
2 2
dx x 1

81
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR

2 4 6
d
6 144 2448 x 6144 x 3840 x
g ( x)    
x2  1 x2  1 x2  1 x2  16
6 3 4 5
dx

Calculul numeric al derivatei unei functii intr-un punct

1. Se scrie definitia functiei.

f ( x) 
2  2 
x  1 ln x  1  x atan ( x)

2. Se atribuie variabilei valoarea in care se doreste calcularea derivatei.

x  7

3. Se tasteaza Shift + / sau se da clic cu mouse-ul pe simbolul operatorului de


derivare aflat pe bara Calculus. Pe ecran apare operatorul de derivare cu
pozitiile marcate necompletae.
d
d

4. Se completeaza pozitiile marcate cu numele functiei de derivat si variabila in


raport cu care se face derivata.

d
f ( x)
dx

5. Se da comanda de calcul numeric apasand tasta pe care se afla


semnul egal.
d
f ( x)  7.422
dx

Pentru calculul derivatelor de ordin superior se procedeaza la fel ca mai sus cu


deosebirea ca in locul operatorului de derivare de ordinul unu se foloseste
operatorul de derivare de ordin superior. Pentru aparitia acestui se tasteaza Ctrl
+ Shift + / sau se apasa butonul corespunzator aflat pe bara Calculus.

82
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR

Pentru a calcula derivate de ordin mai mare ca 5 se scriu mai multi operatori de
derivare de ordin superior inclusi unul in altul. Exemple

2 3 4
d d d
f ( x)  0.29471 f ( x)  0.04390 f ( x)  0.01310
2 3 4
dx dx dx

5 5 1 5 2
d d d d d
f ( x)  0.00585 f ( x)  0.00346 f ( x)  0.00254
5 5 1 5 2
dx dx dx dx dx

Calculul numeric al derivatei unei functii in mai multe puncte

Pentru a calcula derivata unei functii in mai multe puncte se defineste variabila in
raport cu care se calculeaza derivata ca o variabila domeniu care are ca valori
acele puncte sau ca un vector care are drept componente punctele date.
Ne propunem sa calculam derivata de ordinul trei al functiei

h ( x)  x ln x  1  2 
in punctele 2, 3, 7, 15. Pentru aceasta definim varibila domeniu xk.

k  1  4 xk 

2
3
7
15

Pentru obtinerea formei de mai sus dupa scrierea fiecarei valori 2, 3, 7 se tasteaza
virgula.
Se defineste apoi functia derivata
3
d
Dh3 ( x)  h ( x)
3
dx
Pentru a obtine valorile functiei si ale derivatei de ordinul trei in punctele 2, 3, 7,
13 se scrie

83
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR

h  xk  Dh3  xk 


3.21888 -0.59200
6.90776 -0.26400
27.38416 -0.04307
81.30802 -0.00900

O alta posibilitate de introducere a punctelor in care se calculeaza derivata este


aceea de a considera un vector care are drept componente punctele respective. In
acest caz trebuie sa se tina sema ca, implicit, intr-un vector sau matrice originea
indicilor este 0. Aceasta se poate schimba in 1 folosind instructiunea ORIGIN.
2
  3
v   
3 d
ORIGIN  1 Dh3 ( x)  h ( x)
7 dx
3
 
 15 

n  rows ( v) n4 k  1  n

h  vk  Dh3  vk 


3.21888 -0.59200
6.90776 -0.26400
27.38416 -0.04307
81.30802 -0.00900

Calculul simbolic al derivatelor partiale ale unei functii de mai multe


variabile
Daca functia de derivat este o functie de mai multe variabile operatorul de
derivare din Mathcad efectueaza derivata in raport cu variabila indicata, celelalte
variabile fiind considerate constante. Cu alte cuvinte operatorul calculeaza derivata
partiala. Pentru ca forma grafica a operatorului sa fie cea cunoscuta de la cursul
de "Analiza matematica" se da clic cu dreapta pe operatorul de derivare respectiv,
din meniul derulant care apare se selecteaza comanda View Derivative As si apoi
se bifeaza optiunea Partial Deriative.

84
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR

Ca exemplu calculam derivatele partiale de ordinul unu si doi ale functiei

2 2
F ( s t)  s t

 s  t
F ( s t)  F ( s t) 
s s t
2 2 t 2
s t
2

1

 
2 2 2
 2 2 s
F ( s t)  s  t 
2 3
s
s2  t2 2

1

 
2 2 2
 2 2 t
F ( s t)  s  t 
2 3
t
s2  t2 2

  s t
F ( s t)  
s t 3

s2  t2 2

Daca se indica valorile numerice ale variabilelor in care se face calculul derivatei
atunci, folosind procedeul de calcul simbolic, se determina valorile numerice ale
drivatelor asa cum se vede in exemplul de mai jos.

Ca exemplu calculam derivatele partiale de ordinul unu si doi ale functiei de mai
sus in punctul P(3,4).

85
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR

2 2
F ( s t)  s t
s  3 t  4

 3  4
F ( s t)  F ( s t) 
s 5 t 5

2 2
 16  9   12
F ( s t)  F ( s t)  F ( s t)  
2 2
s 125 t 125 s t 125

Calculul numeric ale derivatelor partiale ale unei functii de mai multe
variabile
Se procedeaza ca mai sus indicand valorile numerice ale variabilelor in care se
face calculul derivatei, dar se da comanda de calcul numeric nu de calcul simbolic.

2 2
F ( s t)  s t
s  3 t  4

 
F ( s t)  0.6 F ( s t)  0.8
s t

2 2
   
F ( s t)  0.128 F ( s t)  0.072 F ( s t)  0.096
2 2
s t s t

86
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR

ANALIZA MATEMATICA CU MATHCAD


Calculul integralelor pentru functii reale
de o variabila reala

Mathcad dispune de operatori cu ajutorul carora se pot calcula:



a) Integrale nedefinte  f ( x) dx

b

b) Integrale definte  f ( x) dx
a

Calculul integralelor nedefinite


Dupa cum se stie simbolul  f ( x) dx desemneaza multimea tuturor

primitivelor functiei f ( x). Mathcad determina numai o primitiva a functiei
f ( x), celelalte obtinandu-se din aceasta prin adaugarea unei constante
oarecare. Determinarea primitivei se face folosind calculul simbolic.


Calculul integralei nedefinite  f ( x) dx, (ceea ce inseamna determinarea

unei primitive a functiei f ( x)) se face folosind operatorul de integrare
nedefinita


 d

Pentru aparitia acestuia se tasteaza Ctrl + I sau se apasa butonul cu simbolul


integralei nedefinite aflat pe bara Calculus.

Se completeaza locurile marcate cu expresia functiei de integrat si variabila in


raport cu care se face integrala. Functia poate fi de una sau mai multe variabile.

87
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR

3
De exemplu, pentru a determina o primitia a functiei f ( x)  x se procedeaza
astfel:
1. Se stabileste locul unde se calculeaza integrala si se introduce operatorul
pentru calculul integralei nedefinite


 d

2. Se completeaza locurile marcate cu expresia functiei si a variabilei de integrat

 3
 x dx

3. Pentru aparitia semnului de egalitate simbolica se tasteaza Ctrl + . .


calculul simbolic este executat daca se tasteaza Enter sau se da clic in afara
zonei matematice in care se scris operatorul de integrare nedefinita.

 3 x
4
 x dx 
 4

Alte exemple

 x
e  ( cos ( x)  sin ( x) )
 sin ( x) exp ( x) dx  
 2


 atan  x dx  atan  x  x  x atan  x

 2  3  x  1 
 3
2   
2 
ln  x 
1
  3 atan 
 
 ln ( x  1)

 1
d x  
 2 4

 3 
 3 3 6 3
 1x

88
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR

Daca functia de integrat este de mai multe variabile atunci integrarea se face in
raport cu variabila indicata, cealalta fiind considerata o constanta.
 2 3 2 4
x y
 x  y dy 
 4

Calculul integralelor definite

Calculul aproximativ al integralelor definite pentru functii de o variabila se face


folosind operatorul de integrare

 d

Pentru aparitia acestuia se tasteaza Shift+7 sau se apasa butonul cu simbolul
integralei definite aflat pe bara Calculus

b

Valoarea integralei definite  f ( x) dx este un numar care se obtine folosind
a
calculul numeric sau simbolic.
Folosirea operatorului de integrare pentru functii de o variabila este extrem de
simplu. Se completaeza locurile marcate cu limitele de integrare, functia de
integrat si variabila in raport cu care se face integrarea. Pentru realizarea
calculului numeric se tasteaza semnul = . De exemplu
1 π 2
 2  
 x  1 dx  1.148  sin ( x) 2 dx  1.571  x atan ( x) dx  1.482
0 0 1

Pentru realizarea calculului simbolic se foloseste egalul simbolic in locul


celui numeric.

ln  2  1
1
 2 2
 x  1 dx  
0 2 2

π
 π
 sin ( x) 2 dx 
0 2

89
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR

2
 5 atan ( 2) π 1
 x atan ( x) dx   
1 2 4 2

Din punct de vedere practic rezultatele sub aceasta forma sunt mai putin
utilizabile deoarece pentru folosirea lor in calcule ulterioare necesita aducerea
acestora la forma numerica. Aceasta se poate face selectand rezultatul obtinut
simbolic si tastand apoi = .

ln  2  1
1
 2 2
 x  1 dx    1.148
0 2 2

90
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR

ANALIZA MATEMATICA CU MATHCAD


Serii cu termeni pozitivi - Exemple

I. Sa se studieze, folosind criteriile de convergenta invatate, convergenta


sau divergenta urmatoarelor serii numerice cu temeni pozitivi.
1. ∞ 2


( n!)
( 2n)!
n=1
2
( n!)
Se noteaza cu a ( n) := si se aplica criteriul raportului.
( 2  n)!

a ( n + 1) 1
lim 
n  ∞ a ( n) 4

Deoarece limita raportului a doi termeni consecutivi ai sirului a(n)


este mai mica decat 1, conform criteriului raportului, seria data este
convergenta.
2. ∞
( 2  n)!
 n
n = 1 4  ( n!)
2

( 2  n)!
Se noteaza cu a ( n) := si se incearca din nou aplicarea
n 2
4  ( n!)
criteriului raportului:
a ( n + 1)
lim 1
n∞ a ( n )

Conform criteriului raportului, daca limita raportului a doi termeni


consecutivi ai sirului a(n) este egala cu 1, nu se poate decide asupra
naturii seriei date. Se incearca aplicarea criteriului Raabe-Duhamel.

n   a ( n) − 1  1
lim   
n∞   a ( n + 1)  2
Cum limita aflata anterior este mai mica strict decat 1, seria data este
divergenta conform criteriului Raabe-Duhamel.

91
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR

∞ n2
 n + 5  n + 1 
2


3.
 n + 3 
2
n=1 
n2
 n + 5n + 1  2
Se noteaza cu a ( n) :=   si se aplica criteriul radacinii.
 n 2 + 3 

n 5
lim a ( n)  e
n∞
Deoarece limita aflata anterior este strict mai mare decat 1, seria este
divergenta conform criteriului radacinii.

4.  1 − sin  1  

n=1
n

 n 
 

Pentru studiul convergentei acestei serii se foloseste criteriul de


comparatie prin raport.
Se ia, ca serie de comparatie, seria


1
.
3
n=1 n

Notand
1
u ( n) :=
1
− sin   si v ( n) :=
1
, se evalueaza limita
n n n
3

raportului sirurilor u(n) si v(n):

u ( n) 1
lim  .
n  ∞ v ( n) 6

Deoarece limita raportului sirurilor u(n) si v(n) este in intevalul deschis


(0,∞), conform criteriului de comparatie prin raport, seriile avand
termeni generali sirurile u(n) si v(n) au aceeasi natura.


1
Dar este un caz particular al seriei armonice generalizate
3
n=1 n

92
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR

∞ ∞

 
1 1
cu α > 1 , deci este convergenta. Asadar si
α 3
n=1 n n=1 n

 1 − sin  1  

n=1
n

 n 
 
este convergenta.

93
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR

ANALIZA MATEMATICA CU MATHCAD


Serii de puteri

Studiul convergentei seriilor de puteri in Mathcad

Exemplul 1

Sa se determine intervalul de convergenta al urmatoarei serii de puteri:


∞  n
2


n ( n!)
( −1)  x 
 ( 2  n)! 
n=1
2
n ( n!)
Se noteaza sirul coeficientilor seriei de puteri cu a ( n) := ( −1) 
( 2  n)!
Se determina raza de convergenta a seriei de puteri ca fiind limita din
modulul raportului a doi termeni consecutivi ai sirului a(n)
a ( n)
R := lim 4
n  ∞ a ( n + 1)
Cum valoarea razei de convergenta este 4, seria de puteri este absolut
convergenta pe (-4,4) si este uniform si absolut convergenta pe orice
subinterval [a,b] al intervalului (-4; 4). Se analizeaza in mod separat
convergenta seriei numerice obtinute pentru valorile lui x in capetele
intervalului (-4,4).
∞  ( n!) 2 n
Astfel pentru x=-4, seria devine: 
n=1
 4 
 ( 2  n)!  . Seria numerica astfel
2
( n!) n
obtinuta are termenul general b ( n) :=  4 pozitiv.
( 2  n)!
b ( n + 1) 1
Cum simplify  + 1 >1, deducem ca sirul b(n) este
b ( n) 2n + 1
crescator. In plus, b ( 1) = 2 si deci sirul b(n) nu tinde la zero. Asadar nu
este indeplinita conditia necesara de convergenta a unei serii numerice. Se
concluzioneaza ca pentru valoarea x=-4, seria este divergenta.
∞  n
2


n ( n!)
Pentru x=4, seria de puteri devine: ( −1)  4 
 ( 2  n)! 
n=1

94
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR

Seria astfel obtinuta este o serie alternata si, pastrand notatiile anterioare, de
forma:


n=1
( −1) n  b ( n)

Cum s-a aratat ca b(n) nu tinde la 0, rezulta ca si in cazul in care x este 4,


seria numerica obtinuta este divergenta.
In concluzie, intervalul de convergenta al seriei de puteri date va fi intervalul
deschis (-4, 4).

95
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR

ANALIZA MATEMATICA CU MATHCAD


Puncte de extrem local

Exemplul 1
Sa se afle punctele de extrem local ale functiei: f ( x , y) := x 3 + y3 − 3  x  y

Aflarea punctelor stationare:

 2
f ( x , y)  3  x − 3  y
x
 2
f ( x , y)  3  y − 3  x
y
Egalarea derivatelor partiale de mai sus cu 0, conduce la un sistem
neliniar, corespunzator intersectiei urmatoarelor curbe:
2
3x − 3y = 0
2
3y − 3x = 0
Aplicand metodele folosite la rezolvarea sistemelor neliniare, determinam
pentru inceput numarul si valoarea aproximativa a solutiilor sistemului
dat folosind metoda grafica. Se poate observa cu usurinta ca cele doua
ecuatii ale sistemului sunt ecuatiile unor parabole si ele se pot exprima in
forma explicita in felul urmator:
2
Prima ecuatie y1 ( x) := x
A doua ecuatie y2 ( x) := x sau y3 ( x) := − x

y1( x)
2
y2( x)
y3( x)
−2 0 2

−2

96
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR

Graficele celor doua functii au doua puncte comune din care in mod
evident unul este originea sistemului de axe.
Aflarea punctelor de intersectie se face cu blocul Given- Find

x := 0 y := 0
Given
2
3x − 3y = 0
2
3y − 3x = 0
M1 := Find ( x , y)
0 
M1 =  
0 

x := 1 y := 1

Given
2
3x − 3y = 0
2
3y − 3x = 0
M2 := Find ( x , y)
1 
M2 =  
1 

M1 si M2 astfel obtinute reprezinta punctele stationare ale functiei f.


Pentru verificarea faptului ca M1 sau M2 sunt sau nu puncte de extrem se
scrie expresia matricei hessiene asociate diferentialei de ordin 2 a functiei f.

 2   
 f ( u , v)  f ( u , v)  
 u 2
u  v   6  u −3 
Hf ( u , v) :=   Hf ( u , v)   
    2   −3 6  v 
  f ( u , v )  f ( u , v ) 
2
 u  v  v 

97
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR

Trebuie verificat daca matricea hessiana calculata in M1 si M2 este pozitiv


definita, negativ definita sau nedefinita ca semn. Pentru aceasta se calculeaza
semnul minorilor principali.

 0 −3 
Hf ( 0 , 0)   
 −3 0 
Cum Hf ( 0 , 0) = −9 , rezulta ca matricea Hf calculata in M1 este nedefinita
ca semn, deci M1(0,0) nu este punct de extrem.

 6 −3 
Hf ( 1 , 1)    ORIGIN  1
 −3 6 

Hf1 := submatrix ( Hf ( 1 , 1) , 1 , 1 , 1 , 1)

Hf1 = 6

Hf2 := Hf ( 1 , 1) = 27

Cum ambii minori sunt pozitivi rezulta ca Hf(1,1) este pozitiv definita,
asadar M2(1,1) este punct de minim local.
Reprezentarea grafica de mai jos confirma rezultatul obtinut:

M := CreateMesh ( f , −1 , 2 , −1 , 2 , 12 , 12)

98
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR

ANALIZA MATEMATICA CU MATHCAD


Puncte de extrem local

Exemplul 2
Sa se afle punctele de extrem local ale functiei:
3 2
f ( x , y) := x + 3  x  y − 30  x − 18  y + 5
Aflarea punctelor stationare:

 2 2
f ( x , y)  3  x + 3  y − 30
x

f ( x , y)  6  x  y − 18
y
Egalarea derivatelor partiale de mai sus cu 0, conduce la un sistem
neliniar, corespunzator intersectiei urmatoarelor curbe:
2 2
3  x + 3  y − 30 = 0
6  x  y − 18 = 0

Prin simplificarea celor doua ecuatii cu 3, respectiv 6, se obtine


urmatorul sistem echivalent
2 2
x + y = 10
xy = 3

Prima ecuatie reprezinta ecuatia unui cerc cu centrul in origine si raza 10


iar cea de a doua este ecuatia unei hiperbole. Punctele de intersectie ale celor
doua curbe reprezinta numarul de solutii ale sistemului obtinut.
Parametrizarea cercului este:
X ( t) := 10  cos ( t)
Y ( t) := 10  sin ( t)

Pentru a reprezenta grafic hiperbola, folosim scrierea in forma explicita a lui


y ca functie de x.
3
yy ( x) :=
x

99
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR

2
Y( t)
yy( x) −4 −2 0 2 4
−2

−4

X( t) , x

Se observa ca cele doua grafice este se intersecteaza in 4 puncte, iar pentru


determinarea lor se foloseste blocul Given-Find. Pentru determinarea
valorilor initiale ale solutiilor, folosim optiunea Trace din meniul
contextual ce apare la clic dreapta pe grafic

x := 0.98 y := 3.06
Given
2 2
x + y = 10
xy = 3
1 
M1 := Find ( x , y) M1 =  
3 

x := 3.06 y := 0.98

Given
2 2
x + y = 10
xy = 3
3 
M2 := Find ( x , y) M2 =  
1 

100
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR

x := −0.98 y := −3.06

Given
2 2
x + y = 10
xy = 3
 −1 
M3 := Find ( x , y) M3 =  
 −3 

x := −3.06 y := −0.98

Given
2 2
x + y = 10
xy = 3
 −3 
M4 := Find ( x , y) M4 =  
 −1 
M1, M2, M3, M4 aflate reprezinta punctele stationare ale functiei f.
Pentru a verifica care dintre aceste puncte sunt puncte de extrem,
scriem expresia matricii hessiene in fiecare din cele patru puncte si
verificam daca matricea este pozitiv definita, negativ definita, sau
nedefinita ca semn. Deoarece pe parcursul acestui exercitiu
variabilelor x si y le-au fost atribuite diferite valori numerice, se
renoteaza in expresia hessienei variabila x cu a si y cu b.

 2   
 f ( a , b)  f ( a , b)  
 a 2
a  b 
Hf ( a , b) :=  
     2 
  f ( a , b )  f ( a , b ) 
2
 a  b  b 

 6a 6b 
Hf ( a , b)   
 6b 6a 

101
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR

Pentru M1(1,3):

 6 18 
Hf ( 1 , 3)   
 18 6 
Hf ( 1 , 3) = −288
Cum minorul principal de ordin unu este 6, iar minorul principal de ordin 2
este negativ, rezulta ca M1 nu este punct de extrem.

Pentru M2(3,1):

 18 6 
Hf ( 3 , 1)   
 6 18 
Hf ( 3 , 1) = 288
Minorul principal de ordin unu este 18 (pozitiv), iar minorul principal de
ordin 2 este 288 (pozitiv), deci Hf(3,1) este pozitiv definita, de unde rezulta
ca M2 este punct de minim local.

Pentru M3(-1,-3):

 −6 −18 
Hf ( −1 , −3)   
 −18 −6 
Hf ( −1 , −3) = −288
Ambii minori fiind negativi rezulta ca Hf(-1,-3) este nedefinita ca semn,
deci M3 nu este punct de extrem.

Pentru M4(-3,-1):

 −18 −6 
Hf ( −3 , −1)   
 −6 −18 
Hf ( −3 , −1) = 288
Minorul principal de ordin unu este -18, negativ, iar minorul de
ordin doi este pozitiv, atunci Hf(-3,-1) este negativ definita, deci
M4(-3,-1) este punct de maxim local.

102
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR

Rezultatul obtinut poate fi observat si pe reprezentarea grafica de mai jos:

M := CreateMesh ( f , −4 , 4 , −2 , 2 , 16 , 8)

103
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR

ANALIZA MATEMATICA CU MATHCAD


Puncte de extrem local
Exemplul 3
Sa se afle punctele de extrem local ale functiei:
2 2 2
f ( x , y , z) := x + y + z − x  y + x − 2  z

Aflarea punctelor stationare:


f ( x , y , z)  2  x − y + 1
x


f ( x , y , z)  2  y − x
y


f ( x , y , z)  2  z − 2
z
Se observa ca, prin egalarea cu 0 a fiecarei derivate partiale a functiei f,
se obtine un sistem liniar de trei ecuatii cu trei necunoscute.

Matricea coeficientilor sistemului este:

 2 −1 0 
A :=  −1 2 0 
 0 0 2
 
Determinantul sistemului este nenul: A =6

Vectorul termenilor liberi este:

 −1 
b :=  0 
2 
 
Solutia unica a acestui sistem va fi punct stationar pentru functia data.

104
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR

−2 
 3
 
M := lsolve ( A , b) M  1 
−3 
 
 1 

Ramane de verificat daca punctul M este punct de extrem. Pentru aceasta


scriem matricea hessiana asociata diferentialei de ordin 2 a functiei f.

 2       
 f ( x , y , z)
 x 2  f ( x , y , z)   f ( x , y , z)  
x  y   x  z 

   2   
Hf ( x , y , z) :=     f ( x , y , z)  f ( x , y , z)  f ( x , y , z)  
2
 x  y  y y  z 
 
    f ( x , y , z)     2 
 x  z   f ( x , y , z)  2
f ( x , y , z)

   y  z  z 

 2 −1 0 
Hf ( x , y , z)   −1 2 0 
 0 0 2
 
 2 −1 0 
Valoarea hessienei in M este: Hf  − , − , 1   −1 2 0 
2 1
 3 3   
 0 0 2
Trebuie verificat daca matricea hessiana calculata in M este pozitiv
definita, negativ definita sau nedefinita ca semn. Pentru aceasta se
calculeaza semnul minorilor principali.

ORIGIN  1

105
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR

  2 1
Hf1 := submatrix  Hf  − , − , 1  , 1 , 1 , 1 , 1 
  3 3  
  2 1
Hf2 := submatrix  Hf  − , − , 1  , 1 , 2 , 1 , 2 
  3 3  
  2 1
Hf3 := submatrix  Hf  − , − , 1  , 1 , 3 , 1 , 3 
  3 3  
Hf1 = 2
Hf2 = 3
Hf3 = 6
Cum toti minorii principali sunt pozitivi, matricea hessiana calculata in M
este pozitiv definita, punctul M fiind astfel punct de minim local. Valoarea
minima a functiei f se obtine calculand valoarea acesteia in punctul M.

 2 1
f  − , − , 1   −
4
 3 3  3

106
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR

ANALIZA MATEMATICA CU MATHCAD


Puncte de extrem conditionat

Studiul punctelor de extrem conditionat in Mathcad


Exemplul 1
Sa se determine extremele functiei f ( x , y) := x 2 + y2 − x − y , variabilele
fiind legate prin conditia:
x + y − 1 = 0.

Se formeaza functia lui Lagrange F ( x , y , λ) := f ( x , y) + λ ( x + y − 1)


si se afla punctele stationare ale functiei F.


F ( x , y , λ)  λ + 2  x − 1
x

F ( x , y , λ)  λ + 2  y − 1
y

F ( x , y , λ)  x + y − 1
λ
Se obtine sistemul liniar:
2x + λ = 1
2y + λ = 1
x+y=1
 2 0 1 
Matricea sistemului este: A :=  0 2 1  A = −4
1 1 0
 
 1 
Vectorul termenilor liberi este b :=  1 
1 .
1 2
 
 
Solutia acestui sistem este M := lsolve ( A , b) M  1 
2
 
0

107
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR

Punctul M  , , 0 este punct stationar al functiei F(x,y,λ).


1 1
2 2 

Trebuie vazut daca M1  ,  este punct de extrem al functiei


1 1
2 2
g ( x , y) := F ( x , y , 0)

Pentru aceasta scriem expresia diferentialei de ordin 2 a functiei g in M1,


aplicata unei perechi (h1, h2). Calculam initial derivatele partiale de ordin 2
ale functiei g.

2
g2x ( x , y) := g ( x , y)
2
x

2
g2y ( x , y) := g ( x , y)
2
y

  
g2xy ( x , y) :=  g ( x , y) 
x  y 
Diferentiala de ordin 2 a functiei g calculata in M1, aplicata unei perechi
(h1, h2) va fi:
1 1 1 1 1 1
d2gM1 ( h1 , h2) := g2x  ,  h1 + 2  g2xy  ,   h1  h2 + g2y  ,  h2
2 2
2 2 2 2 2 2
2 2
d2gM1 ( h1 , h2)  2  h1 + 2  h2
Cum diferentiala de ordin 2 a functiei g calculata in M1 este pozitiv definita
(suma unor patrate perfecte), rezulta ca punctul M1 este punct de minim
conditionat al functiei initiale f.

108
4. GRAFICĂ ÎN MATHCAD
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR

GRAFICA IN MATHCAD
Reprezentarea grafica a functiilor de o variabila

Reprezentarea grafica a unei functii folosind optiunile comenzii X-Y Plot

Pentru a intelege mai usor posibilitatile de reprezentare grafica in Mathcad vom


incepe cu reprezentare grafica a unei functii elemetare al carui grafic este
cunoscut.

Fie functia f ( x)  cos ( x)

Pentru reperezentarea grafica a unei functii de o variabila se parcurg urmatoarele


etape:
1. Se da un clic pe ecran pentru a alege locul unde va apare reprezentarea
grafica.
2. Se tasteaza @ sau se parcurge calea Insert/Graph/X-Y Plot si se da clic pe
X-Y Plot. Ca urmare a acestei operatii pe ecran apare un dreptunghi ca cel de
mai jos, care are in partea de jos si in partea stanga doua locuri marcate.

3. Se completeaza locul marcat aflat la mijlocul laturii de jos cu numele


variabilei, in cazul nostru cu x.

110
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR

4. Cele doua locuri marcate care apar la colturile laturii de jos se completeaza
cu limitele intervalului de pe axa Ox pe care se doreste reprezentarea grafica.
Daca aceste locuri marcate sunt lasate necompletate programul foloseste
valorile setate implicit si va reprezenta grafic functia pe intervalul [-10, 10].

5. Se completeaza locul marcat aflat la mijlocul laturii verticale din partea


stanga cu numele functiei de reprezentat sau direct cu expresia acesteia.
Locurile marcate care apar deasupra si sub numele functie vor fi completate
atunci cand se cunosc valorile maxime si minime ale functiei. De regula,
acestea se vor lasa necompletate. Programul va afisa aici valorile extreme
ale functiei.

6. Pentru efectuarea reperezentarii grafice se da clic in afara zonei grafice.


Programul va trasa graficul ca in figura de mai jos.

1
0.5
f ( x) 0
 0.5
1
 10  5 0 5 10
x

Pentru aparitia axelor de coordonate se da dublu clic pe desen si in ferestra care


apare, numita Formating Currently Selected X-Y Plot, la rubrica Axes style se
selecteaza Crossed in loc de Boxed.

111
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR

La rubrica Traces se stabilesc caracteristicile curbelor care vor fi trasate.


Implicit, Mathcad traseaza prima curba printr-o linie solida de culoare rosie de
grosime 1. Putem modifica aceasta setare selectand din listele derulante alte
optiuni. De exemplu, la rubrica Weight putem modifica grosimea liniei de la
valoarea 1 la 2. In final, se apasa butonul Apply.

112
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR

Dupa efectuarea celor doua modificari mentionate mai sus reprezentarea grafica
capata forma

1
0.5
f ( x)
 10  5 0 5 10
 0.5
1

Dupa cum se vede, pentru ca nu am specificat intervalul pe care trebuie


trasat graficul, programul a utilizat valorile implicite si a facut reprezentarea
grafica pe intervalul [-10, 10]. De asemenea, se observa ca reprezentarea
grafica s-a facut folosind unitati de masura diferite pe cele doua axe de
coordonate, ceea ce duce la aparitia distorsionata a graficului.

Pentru reprezentarea nedistorsionata a graficului functiei cosinus pe intervalul


[0, 2] (de lungime egala cu perioada functiei), se fac urmatoarele operatii in
plus fata de cele descrise anterior:
 se completeaza locurile marcate pentru lungimea intervalului de pe axa Ox
cu 0 si 2;
 cu un dublu clic pe zona grafica se deschide fereastra Formating
Currently Selected X-Y Plot si la rubrica Axes style se selecteaza Equal
Scales;
 pentru trasarea graficului se da clic in afara zonei grafice.

Se obtine reprezentarea grafica de mai jos

2
1

f  x  1 0 2 4 6
2
3
4

113
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR

O mai buna reprezentare grafica se obtine specificand si lungimea intervalului


de pe axa Oy. In cazul functiei noastre [-1.2, 1.2] (putin mai mare decat
intervalul exact de reprezentare care este [-1, 1]). Aceasta optiune anuleaza
insa pe aceea de Equal Scales si graficul apare distorsionat. Folosind
posibilitatea de a redimensiona zona grafica se poate aduce graficul la forma
normala.

f ( x)
0 2 4 6

1

Daca se doreste delimitarea benzii in care are loc reprezentarea grafica se


deschide ferestra Formating Currently Selected X-Y si se selecteaza
Show Markers pentru axa Oy. Se completeaza apoi locurile marcate cu -1
si 1. Se obtine imaginea de mai jos.

1 1

f ( x)
0 2 4 6
1 1

114
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR

Reprezentarea grafica a mai multor functii in acelasi sistem de axe

Pentru a reprezenta grafic doua (sau mai multe) functii in acelasi sistem de
axe, dupa ce s-a scris numele primei functii se tasteaza virgula si se scrie
numele urmatoarei functii.
Ca exemplu, reprezezentam grafic in acelasi sistem de axe, pe intervalul
[0, 2] functiile cos(x), sin(x), sin(2x).

1.2
0.9 1
cos ( x) 0.6
0.3
sin ( x)
0 2 4 6
sin ( 2 x)  0.3
 0.6
 0.9 1
 1.2

Acest tip de reprezentare este este util pentru rezolvarea grafica a ecuatiilor
transcendente.

115
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR

GRAFICA IN MATHCAD
Reprezentarea grafica a functiilor de o variabila

Reprezentarea grafica a unei functii de o variabila prin puncte definite


de utilizator
Pentru reprezentarea grafica a unei functii de o variabila prin puncte definite de
utilizator se procedeaza astfel:

x
1. Se defineste functia F ( x) 
2
x 1

2. Se introduc capetele interalului [a,b] pe care se doreste reprezentarea


grafica a functiei
a  3 b  3
3. Se defineste numarul de puncte in care se imparte intervalul [a,b]
n  60

4. Se calculeaza si se afiseaza pasul diviziunii

ba
h  h  0.1
n

Un pas convenabil reprezentarii este 0.1. Daca nu ne satisface forma graficului


trebuie sa marim numarul n al punctelor necesare reprezentarii grafice.

5. Se definesc punctele diviziunii

i  0  n xi  a  i h

6. Se determina vectorul care are drept componente valorile functiei in


punctele xi

Fi  F  xi

7 Se tasteaza @ pentru aparitia zonei de reprezentare grafica si se completeaza


pozitiile marcate de pe orizontala cu xi, a, b si pozitia de la mijloc pe verticala cu
Fi.

116
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR

Dupa ce se da clic in afara zonei grafice se obtine graficul care urmeaza.

3
2
1
Fi
2 1 0 2
2
3

xi

Marim graficul avand grija ca sa avem aceeasi unitate de masura pe cele


doua axe. Obtinem un grafic de forma de mai jos.

Fi
2 0 2

1

2

xi

117
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR

GRAFICA IN MATHCAD
Reprezentarea grafica a functiilor de o variabila

Reprezentarea grafica a unei functii care are asimptote orizontale


2 x
1. Se defineste functia f ( x) 
2
x 1

2. O functie f(x) are ca asimptota orizontala la ramura spre plus infinit


dreapta y = c daca

lim f ( x) = c
x ∞

Definitie analoaga daca inlocuim plus infinit cu minus infinit.


In cazul nostru obtinem:

lim f ( x)   2 lim f ( x)  2
x  ∞  x ∞

Deoarece limita functiei la minus infinit exista si este finita, graficul are
asimptota orizontala y = -2 la ramura spre minus infinit.
Deoarece limita functiei la plus infinit exista si este finita, graficul are
asimptota orizontala y = 2 la ramura spre plus infinit.

3. Se reprezinta grafic functia si se foloseste optiunea Show Markers pentru


axa Oy pentru a reprezenta asimptotele orizontale.

2 2

1
2 x
2
x 1 2 0 2
1
2 2

118
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR

GRAFICA IN MATHCAD
Reprezentarea grafica a functiilor de o variabila

Reprezentarea grafica a asimptotelor verticale.


Folosirea optiunii Show markers

Exemplul 1
1
Se considera functia f ( x) 
2
x  3 x  2

Folosind comanda Symbolic/Factor obtinem

1
f ( x) 
( x  1)  ( x  2)

de unde rezulta ca dreptele x = 1 si x = 2 sunt asimptote verticale la


graficul acestei functii.
Pentru reprezentarea grafica a celor doua asimptote verticale se foloseste
optiunea Show Markers pentru axa Ox.

20
1 2

10

1
2
x 3 x2 0 1 2 3 4

 10

 20

119
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR

Exemplul 2.

Consideram acum functia


1
g ( x) 
3 2
x  6  x  11 x  6

Folosind comanda Symbolic/Factor se observa ca

1
g ( x) 
( x  1) ( x  2) ( x  3)

ceea ce arata ca functia g(x) are ca asimptote verticale dreptele x = 1, x = 2 si


x = 3.

Deoarece avem numai doua posibilitati de a folosi markere, vom reprezenta


aceste asimptote astfel. Se defineste variabila

y  20 19.9  20

care se scrie pe axa Oy, iar pe Ox se trec valorile asimptotelor verticale 1, 2, 3.

Se obtine astfel reprezentare grafica de mai jos.

20

g ( x) 10
y
y
0 1 2 3 4
y
 10

 20

x 1 2 3

120
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR

GRAFICA IN MATHCAD
Reprezentarea grafica a functiilor de o variabila

Reprezentarea grafica a unei functii si a asimptotelor sale


2
3 x
Fie functia f ( x) 
x2

Pentru reprezentarea grafica a unei functii trebuie sa trasam si asimptotele sale.

Care sunt asimptotele functiei de mai sus?

Reamintim ca dreapta x = a este asimptota verticala la graficul unei functii


daca cel putin una din limitele laterale

lim f ( x) lim f ( x)
x a x a

este infinita.

Asimptotele verticate se cauta in:


a) punctele in care functia nu este definita, dar sunt puncte de acumulare
ale domeniului de definitie (capete de intervale deschise);
b) punctele in care functia este definita, dar sunt puncte de discontinuitate
ale functiei.
In cazul nostru x = -2 este un punct din prima categorie. Calculand limitele
laterale obtinem
lim f ( x)  ∞ lim f ( x)  ∞
x  2  x  2 
deci x = -2 este asimptota verticala la graficul functiei f(x).

Asimptote orizontale

O functie f(x) are ca asimptota orizontala la ramura spre plus infinit


dreapta y = c daca
lim f ( x) = c
x ∞
Definitie analoaga daca inlocuim plus infinit cu minus infinit.

121
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR

Deoarece in cazul nostru avem

lim f ( x)  ∞ lim f ( x)  ∞
x ∞ x  ∞

functia nu are asimptote orizontale.

Determinarea asimptotelor oblice

Dreapta y(x) = mx + n este o asimptota oblica la ramura spre plus infinit a


graficului functiei f(x) daca

lim [ f ( x)  ( m  x  n) ] = 0
x ∞

Coeficientul unghiular al dreptei y(x) = mx +n, m, este dat de formula

f ( x)
m= lim
x ∞ x

Ordonata la origine a dreptei y(x) = mx + n, n, se determina cu formula

n= lim ( f ( x)  m  x)
x ∞

Definitie si formule analoage pentru cazul cand se inlocuiste plus infinit cu minus
infinit.
Pentru functia data se obtine

f ( x)
m  lim 3 n  lim ( f ( x)  m  x)  6
x ∞ x x ∞

deci functia f(x) are ca asimptota oblica la ramura spre plus infinit dreapta

y ( x)  3 x  6
Rezultat analog pentru ramura spre minus infinit.

122
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR

Reprezentarea grafica

100
2

50

f ( x)

y ( x) 4 2 0 2

 50

 100

123
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR

GRAFICA IN MATHCAD
Reprezentarea grafica a functiilor de o variabila

Formatarea reprezentarii grafice. Folosirea optiunii "Grid lines".

Ne propunem sa rezolvam ecuatia transcendenta

x
sin ( x) =
10

Pentru a determina numarul de radacini ale acestei ecuatii si valorile lor


aproximative (care se folosec ca valori initiale pentru functia root) reprezentam
grafic in acelasi sistem de axe cele doua functii.

REREZENTAREA GRAFICA A FUNCTIILOR


1
Functiile care sunt reprezentate grafic

0.75
0.5
sin ( x) 0.25
x
 10 9  8  7  6  5  4  3  2  1 0 1 2 3 4 5 6 7 8 9 10
10  0.25
 0.5
 0.75
1

x
Variabila x

Pentru obtinerea reprezentarii grafice de mai sus graficul trebuit formatat asa
cum se arata in ferestrele de mai jos.
Axele sunt in cruce (crossed).
La ambele axe se selecteaza "Grid lines" si se deselecteaza "Auto Grid"
La axa Ox se completeaza "Number of Grids" (numarul de linii paralele cu
axa Ox) cu 20.

124
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR

La axa Oy se completeaza "Number of Grids" (numarul de linii paralele cu axa


Oy) cu 8.

125
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR

GRAFICA IN MATHCAD
Reprezentarea grafica a curbelor in spatiu

Folosirea comenzii Graph / 3D Scatter Plot din meniul Insert


Exemplul 1. Pentru a ilustra cum se reperezinta grafic o curba in spatiu vom
reprezenta curba numita elice.

 a cos ( t) 
a  2 b  3 F ( t)   a  sin ( t) 
 
 b t 

Pentru aparitia liniilor care unesc punctele se da dublu click pe zona grafica pentru
aparitia ferestrei 3-D Plot Format. In aceasta se apasa butonul Appearance si se
activeaza optiunile Lines si Colormap.

126
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR

Graficul de mai jos reprezinta prima spira a elicei.

127
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR

GRAFICA IN MATHCAD
Reprezentarea grafica a curbelor in spatiu

Functia CreateSpace

Pentru reprezentarea grafica a curbelor in spatiu se foloseste functia CreateSpace.


Aceasta are urmatoarea structura
CreateSpace(F, t0, t1, tgrid, fmap)

unde:
F - este numele unei functii vectoriale de variabila reala t.
t0 - este limita inferioara a domeniului variabilei independente t (valoarea
implicita este -5).
t1 - este limita superioara a domeniului variabilei independente t (valoarea
implicita este 5).
tgrid - reprezinta numarul intreg de puncte create pentru variabila t (valoare
implicita 20).
fmap - este o functie care defineste o transformare de coordonate de la oricare
alt sistem la sistemul cartezian (implicit este functia identica).

Exemplul 1. Vom reprezenta grafic, cu ajutorul functiei CreateSpace, curba in


spatiu numita elice.

 a cos ( t) 
a  2 b  3 F ( t)   a  sin ( t) 
 
 b  t 
t0  10 t1  10 tgrid  100

M  CreateSpace ( F t0 t1 tgrid)

Se deschide meniul Insert se da comanda Graph, 3D Scatter Plot. In locul


marcat de la baza zonei grafice se scrie numele matricei de puncte M. Implicit,
graficul curbei arata astfel.

128
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR

Dupa formatare, graficul poate arata astfel.

129
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR

GRAFICA IN MATHCAD
Reprezentarea grafica a suprafetelor

Reprezentarea grafica a unei suprafete definite de o functie de


doua variabile
Pentru a reprezenta rapid o suprafata definite de o functie de doua variabile
folosind setarile implicite ale Mathcad-ului pentru astfel de reprezentari
grafice, operatie numita Quick Plot, se procedeaza astfel:

1. Se defineste functia de doua variabile a carei suprafata se va reprezenta. Ca


exemplu, vom reprezenta paraboloidul hiperbolic
2 2
x y
F ( x y)  
2 2
4 3

2. Se da clic pe locul unde se doreste aparitia graficului. Din meniul Insert se


selecteaza Graph si se da comanda Surface Plot. Se obtine cadrul grafic de
mai jos.

3. Se scrie numele functiei (fara variabile) in locul marcat aflat in partea stanga
jos a zonei grafice.

4. Pentru realizarea reprezentarii grafice se da clic in afara zonei grafice sau se


tasteaza Enter. Se obtine reprezentarea grafica de mai jos.

130
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR

Schimbarea modului in care este reprezentata grafic suprafata se face in ferestra


3-D Plot Format care se deschide cand se da un dublu clic pe zona grafica.

Pentru reprezentarea color a suprafetei se apasa butonul Appearance si se


selecteaza optiunile ca in figura de mai jos.

131
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR

Se obtine atunci urmatoarea reprezentare grafica color

In acest mod de reprezentare grafica (QuickPlot), dupa cum s-a mentionat si mai
sus, Mathcad-ul foloseste setarile implicite de care dispune. Acesta inseamna ca
variabilele x si y iau valori de la -5 la 5 cu pasul de crestere 0.5. Valorile de pe axa
Oz sunt calculate cu formula de definitie a functiei F in punctul (x,y), adica z =
F(x,y).

132
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR

GRAFICA IN MATHCAD
Reprezentarea grafica a suprafetelor

Functia CreateMesh

In cazul in care se doreste schimbarea setarilor implicite folosite de Mathcad


pentru reprezentarea grafica tridimensionala se foloseste functia CreateMesh.
Aceasta are urmatoarea structura
CreateMesh(F, x0, x1, y0, y1, xgrid, ygrid, fmap)

unde:
F - este numele unei functii reale de doua variabile reale x si y.
x0 - este limita inferioara a domeniului variabilei independente x (valoarea
implicita este -5).
x1 - este limita superioara a domeniului variabilei independente x (valoarea
implicita este 5).
y0 - este limita inferioara a domeniului variabilei independente y (valoarea
implicita este -5).
y1 - este limita superioara a domeniului variabilei independente y (valoarea
implicita este 5).
xgrid - reprezinta numarul intreg de puncte create pentru variabila x (valoare
implicita 20).
ygrid - reprezinta numarul intreg de puncte create pentru variabila y (valoare
implicita 20).
fmap - este o functie care defineste o transformare de coordonate de la oricare
alt sistem la sistemul cartezian (implicit este functia identica)

Exemplul 1. Vom reprezenta grafic, cu ajutorul functiei CreateMesh,


paraboloidul hiperbolic definit de functia
2 2
x y
F ( x y)  
2 2
4 3

Vom face reprezentarea grafica pe intrevalul bidimensional [-10,10]*[-8, 8].


Pentru aceasta definim parametrii reprezntatii si matricea M.

x0  10 x1  10 y0  8 y1  8 xgrid  50 ygrid  40

M  CreateMesh ( F x0 x1 y0 y1 xgrid ygrid)

133
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR

Reprezentarea grafica obtinuta este

Parametrii reprezentarii se pot defini direct in functia CreateMesh, asa cum se


vede in exempul de mai jos.

A  CreateMesh ( F 10 10 8 8 50 40)

134
5. CALCUL SIMBOLIC ÎN MATHCAD
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR

CALCUL SIMBOLIC IN MATHCAD


Meniul Symbolics si Symbolic Toolbar

Folosind Mathcad putem face:


a) calcule numerice in care rezultatul evaluarii unei expresii consta in unul
sau mai multe numere.
b) calcule simbolice in care rezultatul evaluarii unei expresii este o alta
expresie, de regula mai "simpla" decat cea initiala. Ce se intelege prin mai
"simpla" vom vedea din exemplele care urmeaza.
Pentru a intelege diferenta dintre calculele numerice si cele simbolice dam aici
un singur exemplu:
Calculul unei integrale definite este o evaluare numerica deoarece rezultatul
este un numar. De exemplu:

1
 2
 1 − x dx = 0.7854
0

Calculul unei integrale nedefinite este un exemplu de calcul simbolic


deoarece rezultatul este o functie, primitiva functiei de integrat. De
exemplu:
 2 asin ( x) x  1 − x
2
 1 − x dx  +
 2 2
O exceptie notabila de la regula de mai sus este constituita de calculul limitelor,
care este un calcul simbolic, desi rezultatul este o valoare numerica.

Evaluare simbolica directa


Evaluarea simbolica directa foloseste semnul de egalitatea simbolica
(Evaluate Symbolically)

care se afla pe bara Evaluation.

Semnul de evaluare simbolica are functii analoage semnului egal " = " din
calculele numerice. Este comanda pentru evaluarea simbolica a unei expresii.

136
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR

Diferenta dintre cele doua butoane asemanatoare care se vad pe aceasta bara
este urmatoarea:
Daca s-a scris o expresie si se doreste evaluarea sa simbolica se apasa

butonul .

Daca se apasa butonul atunci in foaia de calcul apare simbolul 

si locul marcat (patratelul rosu) se completeaza cu expresia de evaluat simbolic.

De la tastatura putem da comanda de evaluare simbolica tastand Ctrl + .


(punct).

Calcularea simbolica a unei expresii

Pentru a calcula simbolic o expresie folosind comanda de evaluare simbolica


se procedeaza astfel:
• Se da clic in locul de pe ecran in care se doreste aparitia rezultatului.

• Se scrie expresia care se doreste a fi evaluata simbolic.

• Se verifica daca comanda Automatic Calculation din meniul


Tools/Calculate este activa. Aceasta se vede prin prezenta cuvantului Auto
in bara de stare in partea dreapta jos a ecranului. Daca aceasta nu este
activa acolo apare scris Calc F9, ceea ce inseamna ca pentru efectuarea
calculelor trebuie apasata tasta functionala F9.
• Pentru activarea functiei de calcul automat se deschide meniul
Tools/Calculate si se selecteaza cu un clic comanda Automatic
Calculation. In fata numelui comenzii va apare un semn de validare.

137
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR

• Se tasteaza Ctrl + . (Ctrl + Punct) pentru introducerea comenzii de


evaluare simbolica. Mathcad va afisa semnul de egalitate simbolica

Acelasi lucru se poate obtine dand clic cu mouse-ul pe butonul de
egalitate simbolica aflat in bara Evaluation.

• Se tasteaza Enter sau se da un clic cu mouse-ul in afara zonei in care s-a


scris expresia. Mathcad va afisa in partea dreapta a semnului de egalitate
simbolica o forma simplificata a expresiei. Daca aceasta nu poate fi
simplificata Mathcad repeta in dreapta expresia initiala.

Observatie. Inainte de a trece la exemple de utilizare a calculului simbolic


direct mentionam cateva reguli de folosire a semnului de egalitate simbolica:

• Comanda de calcul simbolic se aplica numai asupra unei expresii in


intregimea sa. Nu se pot simplifica parti ale expresiei.

• Semnul de egalitate simbolica nu se poate aplica de doua ori succesiv.

O alta modalitate de a evalua simbolic o expresie este data de comanda


Symbolics/Evaluate/Symbolically, care simplifica expresia din partea stanga
in acelasi mod ca si semnul de evaluare simbolica.

Controlul modului de simplificare al unei expresii

Comanda de evaluare simbolica aplicata unei expresii conduce la afisarea in


partea dreapta acesteia a unei noi expresii, uneori de o forma "simplificata" in
comparatie cu expresia initiala. Dar ce inseamna "simplificata"?.
Se poate controla modul de simplificare pe care-l face Mathcad expresiei?
La aceste intrebari vom raspunde in cele ce urmeaza.

138
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR

Exista doua posibilitati de a controla modul de simplificare aplicat


expresiei date:
Folosind comenzile din meniul Folosind cuvintele cheie aflate
Symbolics. pe bara
Symbolic Keyword Toolbar.

In majoritatea cazurilor cele doua procedee sunt echivalente. Totusi, in


unele cazuri, folosirea cuvintelor cheie permite o mai buna manevrare a
optiunilor de simplificare care vor fi aplicate expresiei.
Inainte de a prezenta cuvintele cheie folosite vom face cateva precizari
generale asupra lor.
• Cuvintele cheie sunt "case sensitive", dar nu si "font sensitive". Aceasta
insemna ca ele trebuie scrise cu litere mici asa cum apar ele in Symbolic
Keyword Tolbar, dar nu conteaza in ce font.
• Un cuvant cheie este asociat celui mai apropiat semn de egalitate simbolica
care urmeaza cuvantului.

Daca se doreste introducerea cuvintelor cheie de la tastatura, atunci trebuie


tastat Ctrl +Shift + . pentru obtinerea semnului de evaluare simbolica cu
cuvinte cheie. Se tasteaza cuvantul cheie si se apasa Enter.

139
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR

CALCUL SIMBOLIC IN MATHCAD


Meniul Symbolics si Symbolic Toolbar

Meniul Symbolics. Comanda Evaluate

Symbolics/Evaluate/Symbolically sau Shift + F9 executa calcul simbolic


pentru integrale definite sau nedefinite, derivate, sume, produse, functii si alte
expresii algebrice sau matriceale.
2 4 2
  2 −
 x dx yields 3 3
1

3
 2  2 
 x dx yields x
 3

d2 −1
x yields
dx
2   3 
  2 
4x 
n


1 2 1 1
k yields  ( n + 1) −  n −
2 2 2
k=1

10


k=1
k yields 3628800

1
π
acos ( 0) yields
2

140
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR

−1 −b
a b   d 
  yields 
 c d   ( a  d − b  c) ( a  d − b  c) 
 −c a 
 ( a  d − b  c) ( a  d − b  c) 
 

Symbolics/Evaluate/Floating Point... executa calcul simbolic si intoarce un


rezultat numeric de cate ori este posibil. Stabilirea numarului de zecimale care
sa apara dupa virgula se face in ferestra Floating Point Evaluation. Implicit,
acest numar este 20.

acos ( 0) floating point evaluation 1.570796327


yields
ln ( 2) floating point evaluation .6931471806
yields
2
 floating point evaluation 1.218951415
 x dx yields
1

Cuvantul cheie float din Symbolic Keyword Tookbar realizeaza acelasi tip
de evaluare.
float , 
Primul loc marcat se completeaza cu expresia de evaluat, iar in al doilea se
indica numarul de zecimale care trebuie sa fie afisat dupa punctul zecimal.
acos ( 0) float , 

acos ( 0) float , 20  1.5707963267948966192

e float , 30  2.71828182845904523536028747135

141
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR

Symbolics/Evaluate/Complex executa calcul simbolic si intoarce un rezultat


sub forma complexa a + ib ori de cate ori este posibil.

) + i −  signum ( i)   π
ln ( i) evaluation over the complex plane ( 1 1
ln i
yields 2 2 

Cuvantul cheie complex din Symbolic Keyword Tookbar - indica


Mathcad-ului ca rezultatul evaluarii unei expresii trebuie scris sub forma a + ib,
adica partea reala a plus i inmultit cu partea imaginara b.
π  ( signum ( i + 1 , 0) − 1) 
ln ( 1 + i) complex  ln ( i + 1 ) −  i
 2 

142
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR

CALCUL SIMBOLIC IN MATHCAD


Meniul Symbolics si Symbolic Toolbar

Meniul Symbolics. Comanda Simplify


Comanda Simplify din meniul Symbolics simplifica expresia, face calculele
aritmetice, reduce factorii comuni, utilizeaza identitati trigonometrice pentru
functii directe si inverse.

Exemplu. Ne propunem sa evaluam si sa aducem la cea mai simpla forma


expresia:
3 2
x − 4x + 3 x − 3x + 2
+
x−1 x−2

Dand comanda Symbolics/Evaluate/Symbolically nu obtinem efectul


scontat:
3 2 2 3
x − 4x + 3 x − 3x + 2 yields x − 3x + 2 x − 4x + 3
+ +
x−1 x−2 x−2 x−1

Pentru a simplifica aceasta expresie o selectam si dam comanda


Symbolics/Simplify.
3 2
x − 4x + 3 x − 3x + 2 simplifies to 2
x + 2x − 4
+
x−1 x−2

Observatie. Plasarea rezultatului in partea dreapta a sumei si aparitia


cuvintelor de comentariu "simplifies to" se datoresc selectarii optiunilor
Horizontally si Show Comments in fereastra Evaluation Style din meniul
Symbolics.

143
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR

Cuvantul cheie simplify

Cuvantul cheie simplify aflat pe bara Symbolic Keyword Toolbar realizeaza


aceleasi lucruri ca si comanda Symbolics/Simplify.

simplify 
2 2 2
2  sin ( x) + 3  cos ( x) simplify  cos ( x) + 2

Prezentam alte cateva exemple pentru a se intelege cum se poate aduce la o


forma mai simpla o expresie folosind comanda Simplify din meniul
Symbolics. Pentru ca aceasta comanda sa functioneze corect trebuie ca
expresia sa fie selectata, adica sa fie subliniata de reperul albastru. Folositi
Spacebar pentru selectare.

2
x − 3x − 4
+ 2  x − 5 simplifies to 3x − 4
x−4
2  ln ( x) 2
e simplifies to x

2
1125  a  b simplifies to 15  5  a  b

5! simplifies to 120
1
asin ( 1) simplifies to π
2
3 5 13
+ simplifies to
4 2 4

144
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR

CALCUL SIMBOLIC IN MATHCAD


Meniul Symbolics si Symbolic Toolbar

Meniul Symbolics. Comanda Expand


Comanda Expand din meniul Symbolics efectueaza ridicari la putere si
desfaceri de paranteze in expresiile selectate.
2 2 2 2
( a + b + c) expands to a + 2  a b + 2  a c + b + 2  c b + c

6
( x + y) expands to
6 5 4 2 3 3 2 4 5 6
x + 6  x  y + 15  x  y + 20  x  y + 15  x  y + 6  x  y + y

( x 2 + 1)  ( y2 + 2) expands to 2 2
x y + 2x + y + 2
2 2

3
cos ( 3  x) expands to 4  cos ( x) − 3  cos ( x)

Cuvantul cheie expand


Aceleasi operatii se pot reliza folosind cuantul cheie expand aflat pe bara
Symbolic Keyword.
expand , 

In primul loc marcat se scrie expresia de dezvoltat, iar al doilea se


completeaza cu variabila in raport cu care se face dezvoltarea.

2 3
sin ( 3  x) expand , x  3  cos ( x)  sin ( x) − sin ( x)
3 3 2 2 3
( a + b) expand , a  a + 3  a  b + 3  a  b + b

145
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR

CALCUL SIMBOLIC IN MATHCAD


Meniul Symbolics si Symbolic Toolbar

Meniul Symbolics. Comanda Factor

Comanda Factor din meniul Symbolics restrange expresia selectata intr-un


produs, daca aceasta poate fi scrisa ca un produs. Pentru rastrangerea unei
subexpresii dintr-o expresie mai lunga, aceasta trebuie selectata. Comanda se
poate folosi si pentru aducerea la acelasi numitor a mai multor fractii.

4 3 2 2 3 4 4
x + 4x y + 6x y + 4xy + y by factoring, yields ( x + y)

2 2 2
x y + 2x + y + 2
2
by factoring, yields ( x 2 + 1)  ( y2 + 2)
Daca expresia de factorizat este un intreg, atunci acesta este descompus in
factori primi (adica este scris ca produs de puteri de numere prime).
3
375 by factoring, yields ( 3)  ( 5)
3
145750 by factoring, yields ( 2)  ( 5)  ( 11)  ( 53)

In general, Mathcad incearca sa transforme expresia in produs.

4 3
x +x −x +x−2
2
by factoring, yields (
( x − 1)  ( x + 2)  x + 1
2 )

1
+
x

2x
by factoring, yields
( 2
− 2x − 9x − 6 + x
3 )
x−1 x+3 x+2 [ ( x − 1)  [ ( x + 3)  ( x + 2) ] ]

Observatie. Mathcad factorizeaza numai ceea ce este selectat. De exemplu,


daca este selectata expresia a*b + a*c + x si se da comanda Factor, Mathcad
va returana ca raspuns expresia neschimbata deoarece aceasta nu este
factorizabila. Dar daca sunt selectati numai primii doi termeni ai sumei, atunci
Mathcad va returna ca raspuns a*(b + c) + x.

146
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR

a b + a c + x by factoring, yields a b + a c + x

a b + a c + x by factoring, yields a  ( b + c) + x

In expresia de mai jos, care contine suma a trei fractii, pentru a aduce la acelasi
numitor pe primele doua acestea se selecteaza aceste fractii si se da comanda
Factor.

1
+
x

2x
by factoring, yields
(3 + x 2) −
2x
x−1 x+3 x+2 [ ( x + 3)  ( x − 1) ] x+2

147
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR

CALCUL SIMBOLIC IN MATHCAD


Meniul Symbolics si Symbolic Toolbar

Meniul Symbolics. Comanda Collect

Comanda Collect din meniul Symbolics grupeaza termenii care contin puterile
asemenea ale expresiei selectate. Expresia poate sa fie o variabila sau o functie
impreuna cu argumentul sau. Rezultatul este un polinom in expresia selectata.

2 2 2
De exemplu, fie expresia x − a  y x + 2  y  x − x  y

Daca selectam variabila x si dam comanda Collect obtinem

2 2 2
x − a  y x + 2  y  x − x  y by collecting terms, yields
2 ( 2
( 1 − a  y)  x + 2  y − y  x )
In schimb, daca selectam variabila y, avem

2 2 2
x − a  y x + 2  y  x − x  y by collecting terms, yields

2 ( 2 )
2  y  x + −a  x − x  y + x
2

Cuvantul cheie collect

2 2 2 2 (
x − a  y x + 2  y  x − x  y collect , x  ( 1 − a  y)  x + 2  y − y  x
2 )
2 2 2 2 ( 2
x − a  y x + 2  y  x − x  y collect , y  2  x  y + −a  x − x  y + x ) 2

148
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR

CALCUL SIMBOLIC IN MATHCAD


Meniul Symbolics si Symbolic Toolbar

Meniul Symbolics. Comanda Polinomial Coefficients

Comada Polinomial Coefficients din meniul Symbolics determina


coeficientii unui polinom si-i afiseaza sub forma unui vector incepand cu
termenul liber al polinomului.
3   
 −7 
4 2 3
5  x − 2  x + x − 7  x + 3 has coefficients  −2 
 
1 
5 
 

Daca in expresia de mai jos selectam x + y si dam comanda Polinomial


Coefficients obtinem

0 
 
3 2
2  ( x + y) − 5  ( x + y) + 4  ( x + y) has coefficients 4 
 −5 
 
2 

Expresia de mai jos, considerata ca un polinom in cos(x) are coeficientii

0
 
cos ( x) + 4  cos ( x)
3
has coefficients 1
0
 
4

149
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR

Cuvantul cheie coeffs

 3 
 −7 
5  x − 2  x + x − 7  x + 3 coeffs , x   −2 
4 2 3
 
1 
5 
 
 4x + 4y 
 
2  ( x + y) − 5  ( x + y) + 4  ( x + y) coeffs , x + y  
3 2 0 
 −5 
 
 2 

150
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR

CALCUL SIMBOLIC IN MATHCAD


Meniul Symbolics si Symbolic Toolbar

Meniul Symbolics. Comanda Variable

Symbolics/Variable/Solve

Solve - gaseste valorile variabilei selectate care face egala cu zero expresia
din care face parte variabila. Cu alte cuvinte rezolva in raport cu variabila
respectiva ecuatia data de expresia considerata egalata cu zero. Daca variabila
selectata face parte dintr-o ecuatie sau inecuatie aceasta comanda rezolva
ecuatia sau inecuatia respectiva. Raspunsurile care constau in mai multe
valori sunt afisate sub forma unui vector.

Determinarea solutiilor unei expresii

* Se scrie expresia.
* Se selecteaza variabila in raport cu care se doreste determinarea solutiilor
expresiei date.
* Se da comanda comanda Symbolics/Variable/Solve sau se foloseste
cuvantul cheie solve din Symbolic Keyord Toolbar.
Observatie. Nu este necesar ca expresia care da ecuatia sa fie egalata cu zero.
Daca nu gaseste semnul egal Mathcad persupune ca expresia este egala cu
zero.
2 1 
x − 4  x + 3 solve , x   
3 

(
 1  −b + b 2 − 4  a  c ) 
2
a  x + b  x + c has solution(s)  ( 2  a) 
 1
( 2 )
 ( 2  a)  −b − b − 4  a  c


 

151
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR

Symbolic/Variable/Substitute

Substitute - inlocuieste toate aparitiile variabilei selectate cu ceea ce exista in


clipbord.
Pentru utilizarea acestei comenzi se procedeaza astfel:
* Se selecteaza expresia care va inlocui variabila.
* Se copiaza expresia in Clipbord folosind una dintre comanzile Cut sau
Copy din meniul Edit.
* Se selecteaza o aparitie a variabilei de inlocuit si de da comanda
Variable/Substitute din meniul Symbolics.
De exemplu, sa inlocuim expresia x + 3  a in locul variabilei z in

2 2 2 2
z + by substitution, yields ( x + 3  a) +
z ( x + 3  a)

Daca folosim cuvantul cheie substitute din Symbolic Keyword Toolbar


atunci va trebui sa indicam mai intai variabila pe care o inlocuim si apoi
expresia cu care aceasta este inlocuita, asa cum se observa in exemplul de
mai jos.

2 2  3 − cos ( 2  x)
y + y + 1 substitute , y = sin ( x)  sin ( x) +
2

Symbolic/Variable/Differentiate

Differentiate - deriveaza intrega expresie in raport cu variabila selectata.


Celelalte variabile sunt considerate constante.

2 5 2 4
x y by differentiation, yields 5x y
2 5
x y by differentiation, yields 2xy
5

152
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR

Symbolic/Variable/ Integrate

Integrate - integreaza intreaga expresia in raport cu variabila selectata.

2 3 2 3 3
2x + y by integration, yields x + xy
3

Symbolic/Variable/ Convert to partial fraction

Convert to partial fraction - transforma o expresie rationala (un raport de


polinoame) intr-o suma de fractii simple.

1 1 1
expands in partial fractions to −
2
x − 3x + 2 x−2 x−1

5 1
( x 3 − 5  x 2 + 4  x − 2) expands in partial
2x −
2

x−
2
4 2 2 2
x +x +1 fractions to x +x+1 x −x+1

Acelasi rezultat se poate obtine si folosind cuvantul cheie parfrac din bara
Symbolic.

5 1
( x 3 − 5  x 2 + 4  x − 2) parfrac 
2x −
2

x−
2
4 2 2 2
x +x +1 x +x+1 x −x+1
49
5 4 3 x−
x − 3x + 2x − 1 8 1 97
parfrac  x − − + −3
4
x − 16
2
x +4 32  ( x − 2) 32  ( x + 2)

153
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR

CALCUL SIMBOLIC IN MATHCAD


Meniul Symbolics si Symbolic Toolbar

Dezvltarea in serie Taylor a unei functii de o variabila

Symbolic/Variable/Expand to Series... - dezvolta in serie de puteri o functie


sau o expresie in raport cu variabila selectata in functia (sau expresia)
respectiva. O fereastra de dialog permite precizarea numarului de termeni ai
serie care sa fie afisati.
• Se scrie functia sau expresia care va fi dezvoltata in serie.
• Se selecteaza o variabila a functiei sau expresiei in raport cu care se
doreste dezvoltarea in serie.
• Din meniul Symbolics se da comanda Variable/Expand to Series.... O
ferestra de dialog ne propune sa precizam numarul de termeni ai seriei
care urmeaza sa fie afisati. Valoarea implicita este 6.

Exemple
sin ( x) converts to the x−
1 3
x +
1 5
x + O x
6 ( )
series 6 120
cos ( x) converts to the
series
1−
1 2 1 4
x + x −
1 6
x +
1 8
x + O x
10 ( )
2 24 720 40320

atan ( x) converts to the x−


1 3 1 5
x + x + O x
6 ( )
series 3 5

Observatii:
Comanda Expand to Series... este limitata la seriile de o singura variabila.
Orice alta variabila din expresie este tratata ca o constanta.

atan ( x  y) converts to the


 −1  y3  x 3 +  1  y5   x 5 + O ( x 6)
y x +    
series 3  5 

154
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR

Mathcad determina dezvoltarile in serie Taylor in jurul originii si dezvoltarile


in serie Laurent pentru functiile care au originea pol de ordin finit.

sin ( x)
converts to the x
( − 1) − 1  x + 1  x 3 + O ( x 4)
2 6 120
x series

Cuvantul cheie series - dezvolta in serie o expresie de una sau mai multe
variabile in jurul punctelor specificate. Implicit dezvoltarea este un polinom
de grad mai mic ca sase.
series , , 
Locurile marcate se completeaza, in ordine, cu:
• numele functiei
• punctul in jurul caruia se dezvolta functia
• numarul de termeni ai dezvoltarii
2 4
x x
cos ( x) series , x = 0  1 − +
2 24
2 4
x x
cos ( x) series , x = 0 , 6  1 − +
2 24
2 4 6
x x x
cos ( x) series , x = 0 , 7  1 − + −
2 24 720

x − π  x − π 
3 5
   
π π  2  2
cos ( x) series , x =  −x+ −
2 2 6 120

x − π 
3
 
π π  2
cos ( x) series , x = , 4  − x +
2 2 6
2 3

2 x −
1 
8 x −
1
1 2x
 
1 3
ln ( 1 + x) series , x = , 4  ln   − + −
 2
+
 2
2 2 3 3 9 81

155
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR

Dezvoltarea in serie Taylor a unei functii de mai multe variabile

Dezvoltarea unei functii de doua variabile in jurul originii x = 0, y = 0. Se cere


ca dezvoltarea sa fie un polinom in doua variabile de grad mai mic ca 3.
2 2
e
( x+y)
series , x = 0 , y = 0 , 3  1 + y +
y
+ x + xy +
x
2 2

Dezvoltarea aceleiasi functii in jurul punctului (1, 2), cu grad mai mic ca 2.

x+y 3 3 3
e series , x = 1 , y = 2 , 2  e + e  ( y − 2) + e  ( x − 1)

156
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR

CALCUL SIMBOLIC IN MATHCAD


Meniul Symbolics si Symbolic Toolbar

Calculul sumelor

Pentru calculul unei sume se tasteaza Ctrl + Shift + 4 sau se


da clic pe pictograma simbolului de suma aflat pe bara
Calculus. Ca efect apare simbolul sumei urmand a se
completa pozitiile marcate.


Exemplul 1 Calculul sumei 1  2  3  ....  n


n
n  ( n  1)
 k
2
k1

Diferenta dintre calculul numeric si cel simbolic

Pentru a vedea diferenta dintre evaluarea numerica si cea simbolica


consideram suma
3
 3 k 3k
F ( x) 
  k ( 3  k) x 2 
 
k0

Aceasta nu este altceva decat dezvoltarea conform binomului lui Newton a lui
3
( x  2) .
Pentru a evalua numeric aceasta functie trebuie data valoarea lui x in care se
face calculul. De exemplu

F ( 3)  125 F (  3)   1
Evaluarea simbolica a aceleiasi expresii conduce insa la obtinerea dezvoltarii lui
3
( x  2) .
3
 3 k 3k

3 2
 k ( 3  k) x 2   x  6 x  12 x  8
 
k0

157
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR

Exemplul 2 Calculul sumei unei progresii geometrice

2 3 n
1  q  q  q  ....  q

Folosind simbolul suma putem calcula suma unei


progresii geometrice
n n1
q 1

k
q 
q1
k0

Folosind comanda Simplify putem obtine rezultatul sub


forma de mai jos
n q( n1)  1

k
q simplifies to
( q  1)
k0
1 1 1 1
Pentru calculul sumei 1    .... 
3 2 3 100
3 3 3
se poate da comada de evaluare simbolica sau numerica

100
1 773066281098016996554691694648431909053161283001
 k

515377520732011331036461129765621272702107522001
 1.5
k0 3

100
1
 k
 1.5
k0 3

Calculul sumelor unor serii de puteri

Exemplul 3 Calculul sumei seriei geometrice


2 3 n
1  x  x  x  ....  x  ....

Obtinem ∞


k
x  ∞ if 1  x
k0 1
 if x  1  x  1
x1

158
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR

formula care este adevarata, dupa cum se stie de la cursul de "Analiza


matematica", daca
x 1

De exemplu
∞ k ∞ k
 1  2  1   3
  2
   3
  4
k0 k0

Sa vedem cum se "descurca" Mathcad-ul daca se cere calculul sumei seriei


geometrice pentru valori ale lui x din afara intervalului (-1, 1).

∞ ∞

 
k k
1 ∞ 2 ∞ Rezultate corecte!
Seriile sunt divergente si au suma infinita.
k0 k0

∞ ∞

 
k k
( 1)  undefined ( 2)  undefined
k0 k0

Rezultate corecte!
Seriile sunt divergente si nu au suma pentru x  1

Alte exemple de calculul sumelor unor serii

Pentru orice x numar real, au loc egalitatile:

2 3 n
x x x x
1    ....   ....
1 2 3 n
∞ n
x

x
e
n
n0

159
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR

2 4 6 8 n 2 n
x x x x (  1)  x
1     ....   ....
2 4 6 8 ( 2 n)
∞ n 2 n
(  1)  x
 ( 2 n)
 cos ( x)
n0

3 5 7 8 n 2 n1
x x x x (  1)  x
x     ....   ....
3 5 7 8 ( 2 n  1)
∞ n 2 n1
(  1)  x
 ( 2 n  1)
 sin ( x)
n0

160
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR

CALCUL SIMBOLIC IN MATHCAD


Meniul Symbolics si Symbolic Toolbar

Calculul produselor

Pentru calculul unui produs se tasteaza Ctrl + Shift + 3 sau


se da clic pe pictograma simbolului de produs aflat pe bara
Calculus. Ca efect apare simbolul produsului cu locurile
marcate necompletate.


=
Exemple.

Calculul produsul numerelor impare de la 1 la 19: 1  3  5  7  9  11  13  15  17  19


9


k =0
( 2  k + 1)  654729075

Calculul produsului numerelor pare de la 2 la 20: 2  4  6  8  10  12  14  16  18  20


10


k =1
( 2  k)  3715891200

Calculul numarului 10! 1  2  3  4  5  6  7  8  9  10 10! = 3628800


10


k =1
k  3628800

Daca in loc de un numar concret, cum este mai sus 10, se considera un numar
natural n atunci se obtine:
n


k =1
k  n!

161

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