Sunteți pe pagina 1din 191

Specializarea

Forma de nvmnt ID - semestrul I


FIZIC
INFORMATIC PENTRU
PRELUCRAREA DATELOR FIZICE
Anioara CONSTANTINESCU Adrian DAFINEI
2010
Proiect cofinanat din Fondul Social European prin Programul Operaional Sectorial Dezvoltarea Resurselor Umane 2007-2013
Investete n oameni!
Formarea profesional a cadrelor didactice
din nvmntul preuniversitar
pentru noi oportuniti de dezvoltare n carier
Program de conversie profesional la nivel postuniversitar
pentru cadrele didactice din nvmntul preuniversitar












FIZIC

INFORMATICA PENTRU PRELUCRAREA
DATELOR FIZICE




Anioara Adrian
CONSTANTINESCU DAFINEI



2010




2010 Acest manual a fost elaborat n cadrul "Proiectului pentru nvmntul
Rural", proiect co-finanat de ctre Banca Mondial, Guvernul Romniei
i comunitile locale.

Nici o parte a acestei lucrri nu poate fi reprodus fr acordul scris al
Ministerului Educaiei, Cercetrii, Tineretului i Sportului.











































ISBN 973-0-04084-2

Cuprins


Proiectul pentru nvmntul Rural i

Cuprins


1. ALGORITMI 1
1.1. Obiectivele Unitii de nvare 1 - Algoritmi 2
1.2. Algoritmi 2
1.3. Caracteristicile algoritmilor 3
1.4. Exemple de algoritmi 3
1.4.1. Calculul mediei aritmetice a n valori numerice
i
x , n i , 1 r 3
1.4.2. Extragerea termenului cu valoarea cea mai mare
max
x , dintr-un ir
i
x dat. 4
1.4.3. Evaluarea valorii unui polinom pentru o valoare dat a variabilei x 5
1.4.4. Ordonarea cresctoare a unui ir 6
1.4.5. Algoritmul lui Euclid 8
1.5. Test de autoevaluare 1 8
1.6. Rspunsuri la testul de autoevaluare 1 9
1.7. Termeni i expresii cheie. Formule cheie 10
1.8. Lucrare de verificare 11
1.9. Bibliografie 12

2. SCHEME LOGICE 13
2.1. Obiectivele Unitii de nvare 2 - Scheme logice 14
2.2. Elementele grafice ale unei scheme logice 14
2.3. Ciclu de instruciuni 15
2.3.1. Ciclu cu numr cunoscut de pai 15
2.3.2. Ciclu cu ieirea determinat de realizarea unei condiii 16
2.4. Exemple de scheme logice 17
2.4.1. Schem logic pentru algoritmul de calcul al mediei
aritmetice a n valori numerice date 17
2.4.2. Schema logic pentru algoritmul de calcul al valorii unui polinom 18
2.4.3. Schem logic pentru algoritmul de ordonare 19
2.5. Test de autoevaluare 1 20
2.6. Rspunsuri la testul de autoevaluare 1 21
2.7. Termeni i expresii cheie. 21
2.8. Lucrare de verificare 22
2.9. Bibliografie 22

3. ELEMENTE DE LIMBAJ TURBO PASCAL 23
3.1. Obiectivele Unitii de nvare 3 - Elemente de limbaj Turbo Pascal 24
3.2. Editorul TP 24
3.3. Structura unui program n TP 27
3.4. Tipuri de date n TP 27
3.5. Expresii, operatori, funcii intrinseci 34
3.6. Test de autoevaluare 1 37
3.7. Rspunsuri la testul de autoevaluare 1 38
3.8. Termeni i expresii cheie. 38
3.9. Lucrare de verificare 39
3.10. Bibliografie 39

Cuprins


ii Proiectul pentru nvmntul Rural
4. INSTRUCIUNI N TURBO PASCAL 40
4.1. Obiectivele Unitii de nvare 4 Instruciuni n Turbo Pasca 41
4.2. Instruciuni simple 42
4.2.1. Instruciuni de atribuire 42
4.2.2. Instruciuni de apelare a unei proceduri 42
4.2.3. Instruciunea GOTO 43
4.3. Instruciuni structurate 43
4.3.1. Instruciunea compus 43
4.3.2. Instruciuni condiionale 44
4.3.3. Instruciuni repetitive 46
4.4. Instruciunile de transfer de date: READ, READLN, WRITE, WRITELN 48
4.4.1. Instruciunile READ, READLN 48
4.4.2. Instruciunile WRITE, WRITELN 49
4.4.3. Fiiere de date 51
4.5. Test de autoevaluare 1 56
4.6. Rspunsuri la testul de autoevaluare 1 58
4.7. Lucrare de verificare 61
4.8. Termeni i expresii cheie 62
4.9. Bibliografie 62

5. FUNCII I PROCEDURI N TURBO PASCAL 63
5.1. Obiectivele Unitii de nvare 5 - Funcii i proceduri n Turbo Pascal 64
5.2. Proceduri 64
5.2.1. Variabile locale i globale 65
5.2.2. Domeniul de valabilitate al obiectelor 66
5.2.3. Parametri 67
5.3. Funcii 70
5.4. Parametri funcii i parametri proceduri 72
5.5. Recursivitate 74
5.6. Test de autoevaluare 1 76
5.7. Rspunsuri la testul de autoevaluare 1 77
5.8. Termeni i expresii cheie. Formule cheie 79
5.9. Bibliografie 79
5.10. Lucrare de verificare 80

6. GRAFIC N TURBO PASCAL 81
6.1. Obiectivele Unitii de nvare 6 Grafica n Turbo Pascal 82
6.2. Unit-uri standard 82
6.3. Unit-ul GRAPH 83
6.3.1. Iniializarea modului grafic 84
6.3.2. Tratamentul erorilor grafice 85
6.3.3. Definirea ferestrelor n grafica TP 85
6.3.4. Reprezentarea punctelor n grafica TP 86
6.3.5. Reprezentarea liniilor- culori, stiluri i grosimi;
deplasarea n fereastra grafic 87
6.3.6. Reprezentarea cercului , a arcului de cerc, a elipsei ,
a sectorului de cerc. Umplerea suprafeelor nchise. 88
6.3.7. Reprezentarea liniilor poligonale 89
6.3.8. Scrierea grafic 90
6.4. Test de autoevaluare 1 96
6.5. Rspunsuri la testul de autoevaluare 1 97
Cuprins


Proiectul pentru nvmntul Rural iii
6.6. Termeni i expresii cheie. 98
6.7. Lucrare de verificare 98
6.8. Bibliografie 98

7. ALGORITMI COMPLECI 99
7.1. Obiectivele Unitii de nvare 7 - Algoritmi compleci 100
7.2. Sisteme de numeraie 100
7.2.1. Conversia zecimal - binar 101
7.2.2. Conversia binar-zecimal 103
7.2.3. Conversia octal-binar 104
7.2.4. Conversia binar-octal 104
7.2.5. Conversia binar-hexazecimal i invers 104
7.3. Test de autoevaluare 1 105
7.4. Rezolvarea ecuaiilor algebrice 106
7.4.1. Metoda njumtirii intervalului 107
7.4.2. Metoda Newton-Raphson 108
7.4.3. Metoda Birge-Vieta 109
7.5. Rezolvarea sistemelor de ecuaii algebrice liniare 111
7.5.1. Metoda Gauss-Seidel 112
7.5.2. Metoda Gauss-Jordan 114
7.6. Integrarea numeric 115
7.6.1. Metoda trapezelor 116
7.6.2. Metoda Simpson 116
7.7. Integrarea numeric a ecuaiilor difereniale de ordin 1 118
7.7.1. Metoda Runge-Kutta de ordin 4 119
7.8. Metoda Monte Carlo 121
7.8.1. Numere aleatoare 124
7.8.2. Principiul fundamental al metodei Monte Carlo 124
7.9. Test de autoevaluare 2 129
7.10. Rspunsuri la testele de autoevaluare 129
7.11. Termeni i expresii cheie. Formule cheie 130
7.12. Lucrare de verificare 131
7.13. Bibliografie 132

8. PRELUCRAREA STATISTIC A DATELOR RXPERIMENTALE 133
8.1. Obiectivele Unitii de nvare 8
Prelucrarea statistic a datelor experimentale 134
8.2. Valoare medie, varian, abatere standard 134
8.3. Propagarea erorilor 137
8.4. Distribuii 139
8.4.1. Distribuia binomial 140
8.4.2. Distribuia Poisson 142
8.4.3. Distribuia Gauss 146
8.5. Metode de fit 149
8.5.1. Metoda celor mai mici ptrate pentru o dreapt 149
8.5.2. Metoda celor mai mici ptrate pentru un polinom de grad 3 154
8.6. Test de autoevaluare 159
8.7. Rspunsuri la testul de autoevaluare 1 160
8.8. Termeni i expresii cheie. Formule cheie 160
8.9. Lucrare de verificare 162
8.10. Bibliografie 162
Cuprins


iv Proiectul pentru nvmntul Rural
9. SIMULAREA UNUI EXPERIMENT DE FIZIC 163
9.1. Obiectivele Unitii de nvare 9 Simularea unui experiment de fizic 164
9.2. Experimentul Rutherford 164
9.2.1. Tratarea mprtierii particulelor prin formalismul Lagrange 168
9.3. Lucrare de verificare 178

Bibliografie 179
Introducere


Proiectul pentru nvmntul Rural v

Introducere


Vrei s fii profesor de fizic membru al clubului select al fizicienilor ?
Exist un standard al cerinelor pe care trebuie s le mplineti pentru
asta. Trebuie mai ales s fii contient de vocaia de tiin integratoare a
fizicii. Fizica vrea s explice totul de la nucleu la galaxii dar, totodat,
trebuie s foloseasc aparate tiinifice din toate domeniile. Nu poi face
fizic fr solide cunotine de matematic sau chimie. Nu poi s nu
ncerci s filozofezi asupra lumii. i nu poi s te apropii de fizica modern
fr sprijinul informaticii.

Cursul pe care tocmai ai nceput s-l citeti reprezint modulul
fundamental M1.2. din primul tu semestru de pregtire. Timpul alocat prin
program studiului la acest modul este de dou ore pentru curs i dou
ore pentru pregtirea practic de laborator. Examinarea de la sfritul
semestrului este scris i ea acoper 70% din aprecierea final. Cadena
cu care vei rspunde la temele pe care i le propun unitile de nvare i
corectitudinea acestor rspunsuri, ntreaga ta activitate de-a lungul
semestrului vor acoperi alte 30% din aprecierea final. La sfritul fiecrei
uniti de nvare vei gsi un test de verificare. Tema care i se propune
nu are rspuns n aceast carte . Nu are nici mcar sugestii de rspuns.
Va trebui s rezolvi problemele propuse. Fiecare lucrare de verificare este
punctat maximal cu 10 puncte. Punctele obinute pentru rezolvarea
problemelor din lucrrile de verificare reprezint principalul criteriu pentru
aprecierea din cursul semestrului. Va fi de asemenea apreciat de tutore
capacitatea demonstrat (n ntlnirile directe) de a rezolva cu uurin
probleme de programare.
Absolvirea modulului i aduce 8 credite.

Aceast carte i propune s te familiarizeze cu un minim de cunotine de
informatic necesar prelucrrii datelor experimentale, simulrii unor
experimente de fizic i prezentrii rezultatelor ntr-o form corect i
atractiv.
Presupunem un minim de cunotine n folosirea unui calculator electronic
(cteva comenzi DOS, editare simpl de fiiere) i un compilator TP
implementat pe calculatorul cu care lucrezi.



Sigur ai construit n copilrie vaporae din hrtie. tii ce important este s
faci toate ndoiturile n ordine perfect. S nu uii nimic. S desfaci hrtia
exact ct trebuie ca s obii un obiect tridimensional drgu dintr-o foaie
oarecare de hrtie.
nelegi deci c pentru orice lucrare ai nevoie de un plan bun, care s
prevad ceea ce se va ntmpla la un moment dat i c trebuie s fixezi
Introducere


vi Proiectul pentru nvmntul Rural
foarte bine succesiunea operaiilor pe care urmeaz s le mplineti. Tot
astfel Pentru rezolvarea problemelor de fizic, n general de calcul
numeric, e necesar s cunoti:
datele de la care porneti (input)
rezultatul sau rezultatele la care vrei s ajungi (output)
algoritmul ce te duce de la input la output
Dac pentru rezolvarea problemei vrei s fi asistat de calculator, va trebui
s cunoti i
un limbaj de programare

Este foarte important ca fiecare din lucrurile de mai sus s-i fie foarte
clare.

Dac primele dou sunt destul de uor de fixat, algoritmul i limbajul de
programare sunt ns mai dificil de nsuit. Pentru rezolvarea aceleiai
probleme pot exista algoritmi diferii i ntotdeauna este necesar un studiu
pentru a vedea care algoritm se potrivete cel mai bine problemei tale.
Pentru a avea o imagine clar a algoritmului ( adic succesiunea de
operaii elementare ce conduc de la input la output) e bine s foloseti o
schem logic pentru reprezentarea lui. i va fi cu siguran mult mai uor
s traduci apoi aceast schem logic ntr-un limbaj de programare.
Programul surs (programul scris n limbajul de programare pe care l
cunoti i pentru care dispui de un compilator pe calculatorul pe care
lucrezi) trebuie compilat. Calculatorul ncearc prin aceast operaie s
neleag ce i se cere s fac. Dac felul n care au fost scrise
instruciunile nu este corect, el i semnaleaz erorile de sintax fcute. Va
trebui s corectezi erorile pe care le-ai fcut.
Dup corectarea programul din fiierul cu programul surs intri din nou n
dialog cu calculatorul compilezi din nou. Dac de aceast dat
compilatorul nu mai gsete erori de sintax atunci poi da comanda de
execuie a programului. Este bine s verifici programul din punct de
vedere al corectitudinii execuiei. Pentru aceasta l vei rula mai nti pe un
exemplu simplu de control, pentru care tii rezultatul. Dac programul d
rezultat corect pe exemplul de control poi s-l foloseti pe o clas larg
de probleme de acelai tip.

n modul sunt incluse 9 uniti de nvare. Dac le vei urmri cu ngrijire,
vei ajunge de la elementele primare de programare la rezolvarea unor
probleme frumoase (dar complicate) de fizic.
n prima unitate de nvare te vei familiariza cu noiunea de algoritm i vei
vedea descrierea ctorva algoritmi simpli. Parcurgnd a doua unitate de
nvare vei cpta competene n nelegerea elementelor unei scheme
logice i vei fi capabil s exemplifici cu schemele logice civa din
algoritmii prezentai n prima unitate. Este foarte important ca aceste dou
capitole s fie bine nelese. Va trebui s rezolvi toate temele propuse i
s te asiguri c soluiile sunt acceptabile.

Parcurgnd unitile de nvare de la trei la nou vei cpta competene
de programare a asistenei calculatorului pentru probleme de fizic.
Introducere


Proiectul pentru nvmntul Rural vii
Dintre limbajele de programare am ales Turbo Pascal, acesta fiind un
limbaj mai prietenos dect FORTRAN, C++ sau altele.

Credem c sunt anse mari ca tu s fi avut n liceu contact cu acest limbaj
de programare. Nu n ultimul rnd, achiziia compilatorului nu este foarte
mpovrtoare financiar. Pe scurt, preul pltit (n bani i timp de pregtire)
este acoperit prin nsuirea folosirii unui limbaj util n rezolvarea
problemelor de fizic i n multe alte activiti.
Trebuie s ai n minte tot timpul c rmnerea n editorul TP n timpul
compilrii face mai uoar corectarea erorilor de sintax. HELP-ul on line
(CTRL-F1 i cursorul pe cuvntul al crui neles vrem s-l verificm) este
de mare ajutor n lmurirea unor comenzi TP i prin exemplele pe care le
furnizeaz.
Programele transcrise - listate n acest manual sunt
operante. Ele sunt scrie cu un corp de liter diferit
de textul normal.
Elementele limbajului Turbo Pascal sunt prezentate n capitolele 3-6.
Considernd c ai cptat suficiente competene generale, n unitatea de
nvare 7 vei fi instruit cu utilizarea unor algoritmi compleci de rezolvare
a unor probleme de matematic ntlnite n fizic. Vei vedea doar
descrierea sumar a acestor algoritmi (pentru studiul lor detaliat vei gsi
trimiteri la referinele bibliografice) nsoit ns de programe n TP.
Unitatea de nvare 8 este consacrat problemelor des ntlnite la
prelucrarea datelor n fizic: valori medii, abateri standard, distribuii,
metode de fit. Unitatea de nvare 9 este un exemplu de simulare a unui
experiment de fizic experimentul Rutherford.
Am considerat c experiena lui Rutherford prezint un deosebit interes
pentru fizica atomic i nuclear i c din simularea ei se pot aprofunda
cunotinele asupra conservrii energiei de-a lungul traiectoriei particulei
n cmpul electric al unui nucleu int (Au sau Ag ca n experimentul lui
Rutherford sau orice alt nucleu ). Tehnicile informatice folosite (achiziie,
prelucrare i reprezentare de date) reprezint ilustrarea practic a utilitii
folosirii informaticii pentru prelucrarea datelor de fizic. Aceast ultim
unitate de nvare este inclus n modul pentru a ilustra ct de util este tot
ceea ce s-a nvat n unitile de nvare 1-8.
Chiar dac unele din cunotinele de mecanic analitic le vei cpta ceva
mai trziu, rularea programului este simpl i rezultatele sunt de interes
pentru un experiment care nu se poate efectua n laboratoare obinuite.
Reine c simularea asistat de calculator a experimentelor de fizic este
una dintre cele mai fructuoase direcii de utilizare a informaticii n fizic.
Fiecare dintre unitile de nvare are scopurile definite la nceput. i se
spune ce competene se ateapt s capei prin parcurgerea fiecrei
unitii de nvare.

Pictograma din captul acestui rnd marcheaz la fiecare
unitate de nvare competenele pe care ne ateptm s le dobndeti.
Folosete coloana alb, nescris, a paginilor tiprite pentru a face
adnotrile pe care le consideri necesare.
n banda alb a acestei pagini este plasat o pictogram.
Introducere


viii Proiectul pentru nvmntul Rural
Ai la sfritul fiecrui capitol teste la care rspunsurile sunt uor de dat,
dac ai citit cu atenie capitolul.

Pictograma din captul acestui rnd este plasat n zona testelor de
autoverificare.
Fiecare test de autoevaluare are rspunsuri la sfritul unitii de nvare.
Dac rspunsurile tale nu se apropie de cele corecte, trebuie s reciteti
unitatea de nvare sau anumite pri din ea conform recomandrilor
din text.

La sfritul fiecrei uniti de nvare ai un test de verificare pentru care
nu ai sugestii de rspunsuri.

Rezolv-le cu ngrijire i trimite rspunsurile pe care le consideri corecte
tutorelui tu.
n zona unui test de verificare, se afl ntotdeauna o pictogram care
conine semnul scrisorii electronice.

Pentru aprofundarea cunotinelor acumulate, la sfritul fiecrei uniti de
nvare vei gsi o bibliografie recomandat. Vei gsi de asemenea pe
una dintre ultimele pagini ale unitii un breviar al lucrurilor eseniale
noiuni, principii, formule a cror cunoatere este esenial pentru
acumularea de competene vizat. Dac doreti, ne poi cere lmuriri;
toate relaiile sunt numerotate i ne poi cere lmuriri despre oricare
numind-o cu numrul su.


Sperm s poi parcurge ntreaga carte. Suntem gata s te ajutm s treci
orice hop fiind siguri c din aceast interaciune avem de nvat i noi.
Ateptm s conversm la adresele

anisoara@olimp.fiz.infim.ro asdafinei@yahoo.com

Nu ezitata s ne contactezi. Vei economisi timp i noi vom acumula
experien de lucru cu studeni aflai la distan de noi.

Anioara CONSTANTINESCU
Adrian DAFINEI


Algoritmi


1
Unitatea de nvare 1
ALGORITMI


Cuprins Pagina

ALGORITMI 1
1.1. Obiectivele Unitii de nvare 1 - Algoritmi 2
1.2. Algoritmi 2
1.3. Caracteristicile algoritmilor 3
1.4. Exemple de algoritmi 3
1.4.1. Calculul mediei aritmetice a n valori numerice
i
x , n i , 1 3
1.4.2. Extragerea termenului cu valoarea cea mai mare
max
x , dintr-un ir
i
x dat 4
1.4.3. Evaluarea valorii unui polinom pentru o valoare dat a variabilei x 5
1.4.4. Ordonarea cresctoare a unui ir 6
1.4.5. Algoritmul lui Euclid 8
1.5. Test de autoevaluare 1 8
1.6. Rspunsuri la testul de autoevaluare 1 9
1.7. Termeni i expresii cheie. Formule cheie 10
1.8. Lucrare de verificare 11
1.9. Bibliografie 12

Algoritmi


2
1.1 Obiectivele Unitii de nvare 1 - Algoritmi

























1.2 Algoritmi

Iniial calculatoarele au fost folosite pentru a efectua calcule matematice.
S-a constatat c majoritatea problemelor de calcul ce trebuiesc rezolvate
se pot descompune n pai elementari foarte simpli. Rezolvarea problemei
complicate revine la efectuarea pailor mici, elementari. Pentru a pute s
aplici ideea de mai sus trebuie ca mai nti:

s te asiguri c exist o soluie a problemei pe care vrei s o rezolvi;
aceast asigurare poate fi dat de un studiu matematic fcut n prealabil

s gseti succesiunea operaiilor aritmetice sau logice elementare cu
ajutorul crora se obine soluia problemei. Se spune n acest caz c
dispui de algoritmul de rezolvare al problemei.
Noiunea de algoritm este o noiune de baz pentru programarea unui
calculator.

Definiie
Algoritmul reprezint un set finit de reguli care indic operaiile
necesare pentru a ajunge de la datele iniiale ale unei probleme
(input) la rezultat (output).
Altfel spus un algoritm trebuie s descrie fr ambiguiti calea de
rezolvare a unei probleme.
Cnd vei termina de studiat acest capitol vei fi capabil :

s defineti algoritmul i s-i clarifici ideea construciei
logice a algoritmului;


s identifici caracteristicile algoritmilor;


s precizezi succesiunile de instruciuni ale unor algoritmi
fundamentali


s aplici cunotinele dobndite pentru a construi algoritmi
cu care s rezolvi probleme de matematic utile n studiul
fizicii.
Algoritmi


3









1.3 Caracteristicile algoritmilor

Principalele caracteristici ale unui algoritm sunt:
claritate; formularea precis, deci neinterpretabil, a propoziiilor
algoritmului

universalitate; aplicabilitatea algoritmului trebuie s fie posibil nu numai
pentru anumite date ci pentru o clas larg de date

eficacitate; algoritmul permite obinerea unui rezultat.

La baza eficacitii unui algoritm stau trei proprieti i anume:

algoritmul conine un umr finit de instruciuni (indicaii de calcul)

fiecare instruciune descrie o singur operaie de efectuat sau un numr
finit de asemenea operaii

algoritmul conduce la un numr finit de rezultate dup un numr finit de
parcurgeri ale instruciunilor lui. Faptul c un algoritm este finit, n sensul
descris mai sus, permite reprezentarea lui grafic sub forma unui desen
numit schema logic.

1.4. Exemple de algoritmi

1.4.1. Calculul mediei aritmetice a n valori numerice
i
x , n i , 1

Enun

Consider c i se dau n valori
i
x , cu n i , , 1 = . Gsete o modalitate
prin care s calculezi media aritmetic a acestor valori.

Input: valoarea lui n i valorile
i
x cu n i , , 1 =

Output: valoarea mediei dat de relaia matematic

=
=
n
i
i
x
n
x
1
1
(1.1)
Un algoritm este un proces alctuit
dintr-o mulime ordonat de pai
descrii fr echivoc.
Algoritmi


4
Algoritm:

1. se citeten
2. se citesc valorile
i
x
3. se iniializeaz cu zero variabila s n care se face
suma;
0 = s
4. se iniializeaz indicele i la 1, 1 = i
5. se adun n s valoarea lui
i
x i se scrie rezultatul n s,
i
x s s + =
6. se crete valoarea lui i cu 1,
1 + = i i
7. se compar i cu n i ct timp
n i
se repet operaiile ncepnd de la pasul 5; dac
n i >
atunci se trece la pasul urmtor
8. La sfritul execuiei vei avea n s suma elementelor
a cror medie o calculezi

=
=
n
i
i
x s
1

i poi calcula valoarea mediei:
9.
n
s
x =






























1.4.2. Extragerea termenului cu valoarea cea mai mare
max
x ,
dintr-un ir
i
x dat.
Enun

Consider un ir format din n elemente, avnd valorile
i
x , cu n i , , 1 = .
Stabilete o modalitate de a determina valoarea cea mai mare
max
x a
elementelor din acest ir.


Input: valoarea lui n i valorile
i
x cu n i , , 1 =
Output: valoarea cea mai mare din ir ,
max
x
Calea care i este propus mai jos este s compari ntre ele valorile
termenilor din ir i s pstrezi de fiecare dat valoarea cea mai mare.
Paii algoritmului sunt descrii n cele ce urmeaz:






Algoritmi


5






























1.4.3. Evaluarea valorii unui polinom pentru o valoare dat a variabilei x

Enun
Consider un polinom dat prin gradul su m i coeficienii si a
i
Algoritmul se bazeaz pe schema lui Horner care scrie polinomul
cu i lund
valori de la m la 0, . Determin valoarea polinomului pentru o valoare dat
x0 a variabilei x.
( )
0 1
1
1
a x a x a x a x P
m
m
m
m
+ + + =


(1.2)

n forma
( ) ( ) ( ) ( )
0 1 2 1
) ( a x a x x a x a x a x P
m m m
+ + + + + =

(1.3)
Input: gradul polinomului m, coeficienii a
i

i valoarea lui x0.
Output: valoarea polinomului

Scrierea polinomului n forma dat de relaia (1.3) i permite stabilirea
unei modaliti n pai de rezolvare a problemei.

Algoritm:

1. se citeten
2. se citesc valorile
i
x
3. se atribuie lui
max
x valoarea
1
x
1 max
x x =
4. se ia 2 = i
5. se compar
max
x cu
i
x ; dac
i
x x <
max

atunci se atribuie lui
max
x valoarea
i
x
i
x x =
max

i se trece la pasul urmtor; dac
i
x x >
max

atunci se trece la pasul urmtor adic
6. se crete valoarea lui i cu o unitate,
1 + = i i
7. se compar i cu n
;
ct timp
n i
se repet de la pasul 5; dac
n i >
atunci putem scrie c valoarea celui mai mare
element din ir este dat de
max
x
Algoritmi


6





























1.4.4. Ordonarea cresctoare a unui ir

Enun
Ordoneaz cresctor, dup valoare, termenii
i
x ai unui ir dat cu
n i , , 1 =
.

Exist mai muli algoritmi de ordonare; n continuare vei face cunotin cu
doi dintre acetia.

Algoritmul A este un algoritm n care , plecnd de la primul termen, se
face comparaia unui termen cu toi termenii de dup el. De fiecare dat
termenul comparat este aezat n ordine n poziia corespunztoare valorii
sale. La sfritul fiecrei secvene de comparaie, pe ultimul loc ntre
termenii comparai se afl cel cu valoarea cea mai mare. Paii algoritmului
sunt descrii mai jos.





Algoritm:

1.se citete m
2.se citesc coeficienii a
i
pentru i mergnd de la m la 0 cu
pasul -1
3.se citete valoarea lui x0
4.se atribuie valoarea a
m
variabilei p, n care se calculeaz
valoarea polinomului, adic :
p = a
m

5.se ia i=m-1
6.se calculeaz
p = px0 + a
i

(adic la p nmulit cu x0 s-a adunat coeficientul a
i
unde acum
i = m-1
i rezultatul s-a scris n variabila p)
7. din i se scade 1,
i=i-1
8. se compar i cu 0 i ct timp
i 0
se repet de la pasul 6.
9. pentru i < 0 procesul de calcul s-a ncheiat i rezultatul dorit
este valoarea actual a lui p
Algoritmi


7





















Algoritmul B este un algoritm n care se compar vecinii. Dac ordinea lor
este greit, sunt rotii, trecui unul n locul altuia folosind o variabil
intermediar de stocare. Ori de cte ori se face o astfel de rotire un contor
este incrementat cu o unitate. Procesul este repetat pn cnd exist o
comparare a vecinilor care nu mai produce inversiuni ceea ce nseamn
c ordinea gsit la nceputul comparaiilor este bun. Paii algoritmului
sunt descrii mai jos.























Algoritm A:

1. se citete n
2. se citesc cele n valori x
i

3. se ia j=n-1
4. se ia i=1
5. se compar x
i
cu x
i+1
; dac x
i
> x
i+1
atunci se trece pe
locul cu indice mai mare termenul cu valoarea mai mare,
prin folosirea unei variabile ajuttoare aux ;
aux = x
i
, x
i
= x
i+1
, x
i+1
= aux
6. se crete i cu 1, i=i+1
7. pentru i j se repet de la pasul 5; pentru i > j pe locul j+1
se afl cea mai mare valoare din irul de dimensiune j+1
8. se scade valoarea lui j cu 1
9. se compar j cu 1; ct timp j 1 se repet de la pasul 4
10. pentru j=0 irul este ordonat
Algoritm B:

1. se citete n
2. se citesc cele n valori xi
3. se ia o variabil, s zicem k, egal cu zero, k=0; ea i va
schimba valoarea ori de cte ori vom schimba ntre ele
valori x
i

4. se ia i=1
5. se compar x
i
cu x
i+1
; dac x
i
> x
i+1
atunci aux = x
i
x
i
= x
i+1
,
x
i+1
= aux i k=k+1; se trece la pasul 7
6. dac x
i
x
i+1
se trece la pasul urmtor
7. se ia i=i+1
8. se compar i cu n-1; ct timp i n 1 se repet procesul
ncepnd de la pasul 5; cnd i = n se verific valoarea lui
k; dac este zero irul este ordonat; dac nu este zero
nseamn c am fcut o schimbare de valori x
i
deci irul
poate s nu fie nc ordonat; se repet procesul ncepnd
de la pasul 3
Algoritmi


8




1. Scrie ce nseamn algoritm



2. Precizeaz dac ansamblul de instruciuni de mai jos poate fi
considerat un algoritm i argumenteaz rspunsul.
1. Iei din casa i mergi la coal
2. Repet pasul 1.
1.4.5. Algoritmul lui Euclid

Consider c i se dau dou numere ntregi i pozitive, m i n, i i se cere
s determini cel mai mare divizor comun al acestor numere, adic cel mai
mare numr ntreg pozitiv la care se mpart att m ct i n.
Algoritmul Euclid i permite s determini cel mai mare divizor comun a
dou numere ntregi pozitive n urmtorul mod : mparte numrul mare la
numrul mic i se reine primul rest. mparte apoi numrul mic la primul
rest i se reine noul rest restul doi. mparte primul rest la cel de-al doilea
rest i se reine cel de-al treilea rest. Continu procedeul pn la
realizarea unei mpriri exacte. Ultimul rest obinut naintea mpririi
exacte este divizorul comun al celor dou numere cu care s-a nceput
procesul. Paii algoritmului problemei sunt descrii mai jos.

















1.5. Test de autoevaluare 1
















Algoritm:

1. se citesc m i n.
2. te asiguri c m n; dac nu este aa atunci le schimbi
ntre ele cu ajutorul unei variabile ajuttoare ( aux=m,
m=n, n=aux ).
3. se determin restul mpririi lui m la n ( acest rest se
scrie n variabila r , unde 0 r < n ).
4. se atribuie lui m valoarea lui n i lui n valoarea lui r.
5. dac n=0 algoritmul se ncheie, rspunsul este
valoarea curent a lui m.
6. dac n 0 se repet procesul ncepnd cu pasul 3.
Algoritmi


9
























Rspunsurile le gseti la pagina 9

1.6. Rspunsuri la testul de autoevaluare 1




















1. Algoritmul reprezint un set finit de reguli care indic operaiile
necesare pentru a ajunge de la datele iniiale ale unei probleme
(input) la rezultat (output).
Altfel spus un algoritm trebuie s descrie fr ambiguiti calea de
rezolvare a unei probleme.
2. Nu. Descrierea este echivoc. Nu tii n ce fel persoana din
propoziii ajunge napoi de la coal acas.
3. 7
4. 1
5. 5
6. -78, 0, 2, 5, 7




3. Alege valoarea maxim din irul de 5 numere de mai jos
2, 7, -78, 0, 5


4. Calculeaz media numerelor
7, 3, 5, -15, 5


5. Calculeaz cel mai mare divizor comun al numerelor 1000 i 1255,
folosind algoritmul lui Euclid


6. Ordoneaz cresctor termenii irului de la ntrebarea 3, urmnd
succesiunea pailor prezentai n algoritmul A ( sau/i B) de la
pagina numrul 7 din aceast unitate de nvare.
Algoritmi


10
1.7. Termeni i expresii cheie. Formule cheie










































Termeni i expresii cheie
Algoritm
Evaluarea valorii unui polinom pentru o valoare
dat a variabilei
Algoritm de ordonare
Algoritmul lui Euclid
Formule cheie
Formula de calcul a mediei aritmetice

=
=
n
i
i
x
n
x
1
1

Formula de calcul a valorii unui polinom pentru o
valoare dat a variabilei
( ) ( ) ( ) ( )
0 1 2 1
) ( a x a x x a x a x a x P
m m m
+ + + + + =


Algoritmi


11
1.8. Lucrare de verificare

Rezolv problemele de mai jos. Trimite tutorelui rspunsurile pe care le
consideri corecte.



















































1. Scrie algoritmul pentru gsirea numrului de valori negative ntr-
un ir de n valori x
i
date. (2pt)


2. Scrie algoritmul pentru rezolvarea ecuaiei de grad 2,
0
2
= + + c x b x a
oricare ar fi valorile coeficienilor a, b i c. (2pt)


3. Scrie algoritmul pentru simplificarea unei fracii, m/n, folosind
algoritmul lui Euclid de gsire a celui mai mare divizor comun al
numerelor m i n. Dac m i n nu au un divizor comun scrie c
fracia nu se poate simplifica. (1pt)



4. Consider un ir n care mai muli termeni au cea mai mare
valoare, din cele atribuite elementelor irului
( de ex: 7, 20, 3, 20, 6, 2, 20, 1, 9).
Scrie algoritmul pentru determinarea valorii maxime a elementelor
dintr-un ir dat i pentru stabilirea primei poziii n ir pe care se
afl aceast valoare maxim. (2pt)



5. Scrie algoritmul pentru aflarea valorii maxime, amax ntr-o matrice
ptrat de ordinul 4 dat, a(4X4). (1pt)



6. Dac n matricea prezentat la punctul 5 exist mai muli termeni
cu valoare maxim, scrie algoritmul pentru determinarea poziiei
primului termen cu valoare maxim. (1pt)

Not: Se acord un punct din oficiu
Total 10 puncte
Algoritmi


12
1.9. Bibliografie

1. Donald E. Knuth Arta programrii calculatoarelor Vol 1 Algoritmi
fundamentali, paginile 19-26, 106-116, Editura Teora
2. J. Glenn Brookshear Introducere n informatic, paginile 162-209,
Editura Teora









Scheme logice


13
Unitatea de nvare 2
SCHEME LOGICE


Cuprins Pagina
2. SCHEME LOGICE 13
2.1. Obiectivele Unitii de nvare 2 - Scheme logice 14
2.2. Elementele grafice ale unei scheme logice 14
2.3. Ciclu de instruciuni 15
2.3.1. Ciclu cu numr cunoscut de pai 15
2.3.2. Ciclu cu ieirea determinat de realizarea unei condiii 16
2.4. Exemple de scheme logice 17
2.4.1. Schem logic pentru algoritmul de calcul
al mediei aritmetice a n valori numerice date 17
2.4.2. Schema logic pentru algoritmul de calcul al valorii unui polinom 18
2.4.3. Schem logic pentru algoritmul de ordonare 19
2.5. Test de autoevaluare 1 20
2.6. Rspunsuri la testul de autoevaluare 1 21
2.7. Termeni i expresii cheie. 21
2.8. Lucrare de verificare 22
2.9. Bibliografie 22



















Scheme logice


14
2.1. Obiectivele Unitii de nvare 2 - Scheme logice




















Faptul c un algoritm conine un numr finit de instruciuni i permite reprezentarea sa
grafic sub forma unei scheme logice. Schema logic faciliteaz schimbul de informaii cu
ali programatori care i pot nelege ideile algoritmului din schem. Ea i este util chiar
i ie adic celui ce a fcut programul de rezolvare a problemei. Dup un timp mai
ndelungat de la crearea programului i dac problema pe care o rezolv programul are un
grad nalt de dificultate poate fi greu s-i reaminteti ideile de baz i detaliile programului
construit.

2.2. Elementele grafice ale unei scheme logice

Orice schem grafic este construit cu un numr de elemente avnd
form standardizat i un neles comun pentru toi programatorii. Aceste
elemente i sunt prezentate mai jos.

sgeat: Este un simbol cu care se leag blocurile n schema
logic indicnd i sensul lor de parcurgere

conector n pagin: Este un cerc ce conine o liter sau un
numr; permite realizarea i descrierea de legturi ntre puncte ale
schemei logice.

bloc delimitator: Este o elips ce conine cuvntul START
sau STOP. Simbolul este folosit pentru marcarea celor dou limite
ntre care se desfoar schema logic.

bloc de intrare/ieire: Este un paralelogram n care se scriu date
(informaia INPUT sau OUTPUT).
Cnd vei termina de studiat acest capitol vei fi capabil:

s foloseti schemele logice pentru a-i clarifica ideile i
pentru a putea comunica;

s identifici i s foloseti simbolurile grafice utilizate n
schemele logice;

s precizezi gruparea operaiilor elementare ale unui
algoritm n interiorul schemei logice.;
;
s aplici cunotinele dobndite pentru a construi schemele
logice ale unor algoritmi.
Scheme logice


15
bloc de calcul: Este un dreptunghi n care se scriu instruciunile de
calcul. Dreptunghiul conine descrierea unui proces.
bloc de decizie cu 2 ieiri: Este un triunghi n care este scris o
expresie relaional sau logic pentru luarea unei decizii n caz de
realizare (DA sau valoare TRUE a rezultatului) sau altei decizii n caz de
nerealizare (NU sau valoare FALSE a rezultatului).

bloc de decizie cu 3 ieiri: Este un romb n care este scris o
expresie aritmetic ce se compar cu zero; cele trei ieiri corespund
valorilor negativ, zero i pozitiv ale expresiei aritmetice.

bloc de procedur: Este un hexagon n care este scris numele
procedurii ce va fi nserate n acest punct al schemei logice.

2.3. Ciclu de instruciuni

Atunci cnd n rezolvarea unei probleme un grup de calcule se repet de
un numr de ori vei spune c n schema logic de rezolvare a problemei
exist un ciclu. Ciclul este format dintr-un grup de instruciuni care sunt
parcurse de attea ori de cte ori se specific prin structura ciclului.








2.3.1. Ciclu cu numr cunoscut de pai
n figura 2.1. poi observa schema logic a unui ciclu cu numr finit de pai














Figura 2.1
Ciclul este o structur iterativ n care o serie de
instruciuni corpul ciclului se execut repetat
sub supravegherea unui proces de control


Scheme logice


16
n aceast schem logic, i este variabila ce controleaz ciclul; ea variaz
ntre valorile iniial, v
i
i final, v
f

, cu pasul r; corpul ciclului conine
ansamblul calculelor care se efectueaz n cadrul unui pas al ciclului.
Reine c ntr-un astfel de ciclu
se cunoate numrul de repetri ale ciclului egal cu MAX(ABS(INT((v
f

v
i
+ r)/r)), 0). Altfel spus numrul de repetri ale ciclului este dat de cea
mai mare valoare ntre 0 i valoarea absolut a prii ntregi a expresiei (v
f

v
i

+ r)/r; n cazul obinerii valorii zero se trece la instruciunea ce
urmeaz ultimei instruciuni din ciclu, adic ciclul nu se mai execut
variabila care controleaz ciclul poate s participe sau nu la calculele
care se fac n cadrul ciclului

nu este permis modificarea valorii variabilei de control a ciclului n
corpul ciclului; modificarea se face doar n locul unde se d avans
variabilei, i=i+r, adic unde se pregtete noua iteraie - pasul urmtor al
ciclului.

2.3.2. Ciclu cu ieirea determinat de realizarea unei condiii

Schema logic a unui ciclu cu numr necunoscut de pai i este
prezentat n figura 2.2.


















Figura 2.2

Observ c n acest tip de ciclu repetarea calculelor din corpul ciclului se
face ct timp nu este ndeplinit condiia de ieire din ciclu. Evident n
corpul ciclului, n cursul execuiilor succesive, trebuie s se modifice una
sau mai multe variabile din condiia de ieire din ciclu; dac acest lucru nu
se realizeaz, ciclul se execut la infinit.




Scheme logice


17
2.4. Exemple de scheme logice
n continuare vei putea analiza cteva scheme logice propuse pentru
algoritmii analizai n unitatea de nvare anterioar.

2.4.1. Schem logic pentru algoritmul de calcul al mediei aritmetice a n
valori numerice date

Algoritmul de calcul al mediei aritmetice prezentat anterior are ca scop
stabilirea operaiilor necesare pentru a calcula media aritmetic a n valori
numerice x
i
Schema logic a algoritmului este prezentat n figura 2.3.
.





















Figura 2.3

Observ c, n aceast schem logic, ciclul are un numr cunoscut de
pai, n, i c ciclul asigur repetarea instruciunii s=s+x
i
de n ori astfel c
la ieirea din ciclu n s se afl suma valorilor x
i
citete n i x
. S verificm aceast
schem logic pe calculul mediei notelor unui elev detept dar nu prea
silitor. Fie aceste note 5, 9, 7, 10, 4. n urma execuiei blocului
i
n=5, x
se realizeaz introducerea datelor de intrare
1
=5, x
2
=9, x
3
=7, x
4
=10 i x
5

=4.
Urmnd schema logic, procesul este amorsat cu valorile
s=0 i i=1.
Reine c variabilele din dreapta semnului =(care are sens de atribuire i
nu de egal sau identic aa cum se obinuiete n scrierea din matematic)
au valori atribuite anterior iar rezultatul este atribuit variabilei din stnga
semnului de atribuire. Succesiunea ciclic de operaii este urmtoarea:
s=0+x
1
=0+5=5; i=1+1=2; 2 < 5
Scheme logice


18
(s-a executat ciclul cu valoarea x
1
s=s+x
; s-a comandat trecerea la noua valoare
a indicelui i; s-a verificat dac numrul de pai nu depete numrul de
pai programai). ntruct nu s-a efectuat numrul declarat de pai, se
reiau operaiile ciclului
i
=5+x
2
apoi
=5+9=14; i=2+1=3; 3 < 5,
s=14+x
3
i din nou
=14+7=21; i=3+1=4; 4 < 5,
s=21+x
4
Apoi
=21+10=31; i=4+1=5; 5=5;
s=31+x
5
ntruct s-a realizat numrul propus de pai (6 nu mai este mai mic sau
egal cu 5) se oprete execuia ciclurilor i nota medie este
=31+4=35; i=5+1=6;
35/5=7;
Se scrie acum nota medie 7(apte) i calculul se termin.

2.4.2. Schema logic pentru algoritmul de calcul al valorii unui polinom

Un algoritm prezentat anterior conine succesiunea de operaii pentru
evaluarea unui polinom de grad m i coeficieni a
m
, a
m1
,..., a
1
, a
0
ntr-un
punct x
0

. n figura 2. 4 este prezentat schema logic a algoritmului.






















Figura 2.4

Urmnd schema logic vei evalua polinomul
p(x) = 5x
4
+ 2x
3
5x
2
3 pentru x
0
n urma execuiei blocului citete m, i a
= 1.
i
cu i=m,...,0 i x
0
vei avea n
cursul execuiei m=4, a
4
=5, a
3
=2, a
2
=-5, a
1
=0, a
0
=-3 i x
0
=1.

Scheme logice


19
2.4.3. Schem logic pentru algoritmul de ordonare

Acest algoritm ordoneaz cresctor un ir de valori x
i

. Vei folosi dou
cicluri; unul dup j (j ia valori descresctoare ntre m-1 i 1) i un ciclu
dup i, inclus n ciclul dup j (i ia valori de la 1 la j). Schema logic este
prezentat n figura 2.5.






















Figura 2.5

Poi verifica aceast schem logic pe irul de 7 valori x
i
Dup prima execuie a ciclului dup i de la 1 la j=n-1=6, irul ia forma:
: 7, -1, 3, 1, 10, 4,
-5.
-1, 3, 1, 7, 4, -5, 10.
Dup a doua execuie a ciclului dup i de la 1 la j-1=5 irul ia forma:
-1, 1, 3, 4, -5, 7, 10.
A treia execuie a ciclului dup i de la 1 la j=4 duce la irul:
-1, 1, 3, -5, 4, 7, 10.
A patra execuie a ciclului dup i de la 1 la j=3 d irul:
-1, 1, -5, 3, 4, 7, 10.
A cincia execuie a ciclului dup i de la 1 la j=2 d irul:
-1, -5, 1, 3, 4, 7, 10.
n sfrit a asea execuie a ciclului dup i de la 1 la j=1 d irul ordonat:
-5, -1, 1, 3, 4, 7, 10.
Observ n aceast schem logic folosirea conectorilor n pagin i
drumul de la START la STOP pe orice ramur a schemei logice.
Scheme logice


20




1. Definete schema logic.



2. Scrie cuvintele ce se pot afla n interiorul elipsei care reprezint
blocul delimitator.



3. Precizeaz ce simboluri grafice pot fi scrise n interiorul
conectorului.





4. Ce conine simbolul grafic al blocului de calcul




5. Descrie simbolurile grafice folosite n schemele logice care sunt
reprezentate prin patrulatere.




6. Definete ciclul aa cum este el neles n programare.
2.5. Test de autoevaluare 1




































Rspunsurile le gseti la pagina 21





Scheme logice


21
2.6. Rspunsuri la testul de autoevaluare 1




































2.7. Termeni i expresii cheie.





Reprezentarea structurii logice a algoritmului prin
simboluri grafice;
Ciclu;
Bloc delimitator, conector, bloc de intrare ieire;
Bloc de calcul , bloc de decizie, bloc de procedur.





1. Schema logic este reprezentarea grafic a unui algoritm cu numr
finit de instruciuni. Schema logic faciliteaz schimbul de informaii
ntre programatori.

2. n elipsa care reprezint blocul delimitator se pot afla cuvintele
START sau STOP. Simbolul este folosit pentru marcarea celor dou
limite ntre care se desfoar schema logic.

3. n interiorul cercului care reprezint conectorul de pagin se pot
afla litere sau numere care permit realizarea i descrierea de legturi
ntre puncte ale schemei logice.

4. Dreptunghiul care reprezint grafic blocul de calcul conine
descrierea unui proces.

5. Sunt trei simboluri n form de patrulater :
bloc de intrare/ieire; Este un paralelogram n care se
scriu date (informaia INPUT sau OUTPUT).

bloc de calcul; Este un dreptunghi n care se scriu
instruciunile de calcul. Dreptunghiul conine descrierea unui proces.
bloc de decizie cu 3 ieiri;

Este un romb n care este
scris o expresie aritmetic ce se compar cu zero; cele trei ieiri
corespund valorilor negativ, zero i pozitiv ale expresiei aritmetice.

6.Ciclul este o structur iterativ n care o serie de instruciuni corpul
ciclului se execut repetat sub supravegherea unui proces de
control
Scheme logice


22
2.8. Lucrare de verificare

Rezolv problemele de mai jos. Trimite tutorelui rspunsurile pe care le
consideri corecte.































2.9. Bibliografie

1. Petre Dimo, Programarea n FORTRAN, Editura Didactic i
Pedagogic, Bucureti, paginile 9-44
















1. a. Elaboreaz o schem logic pentru algoritmul de extragere a
valorii maxime dintr-un ir dat. (1,5pt)
b. Exemplific funcionarea schemei pe care o propui, pentru
selectarea valorii maxime din irul de numere ntregi 2, 7 ,-78, 0, 5.
(1,5pt)


2. a. Realizeaz o schema logic pentru un algoritmul de tip B,
descris la paragraful 1.4.4 i folosit pentru a ordona cresctor valorile
elementelor unui ir. (1,5pt)
b. Exemplific funcionarea schemei logice propuse de tine pentru
irul 7, 3, 5, -15, 5, 2. (1,5pt)



3. a. Elaboreaz o schem logic pentru implementarea algoritmului
lui Euclid. (1,5pt)
b. Descrie funcionarea schemei logice propuse, pentru
determinarea celui mai mare divizor comun al numerelor 2006004 i
3003006. (1,5pt)

Not: se acord un punct din oficiu;
Total: 10 puncte
Elemente de limbaj Turbo Pascal


23
Unitatea de nvare 3
ELEMENTE DE LIMBAJ TURBO PASCAL


Cuprins Pagina

3. ELEMENTE DE LIMBAJ TURBO PASCAL 23
3.1. Obiectivele Unitii de nvare 3 - Elemente de limbaj Turbo Pascal 24
3.2. Editorul TP 24
3.3. Structura unui program n TP 27
3.4. Tipuri de date n TP 27
3.5. Expresii, operatori, funcii intrinseci 34
3.6. Test de autoevaluare 1 37
3.7. Rspunsuri la testul de autoevaluare 1 38
3.8. Termeni i expresii cheie. 38
3.9. Lucrare de verificare 39
3.10. Bibliografie 39

















Elemente de limbaj Turbo Pascal


24
3.1. Obiectivele Unitii de nvare 3 - Elemente de limbaj Turbo Pascal




















Limbajul PASCAL este un limbaj de programare de nivel nalt, proiectat de Niklaus Wirth
de la Universitatea Tehnic din Zurich n 1971 i numit astfel n cinstea lui Blaise Pascal,
celebrul matematician i filozof francez.
TURBO PASCAL conine o serie de faciliti fa de limbajul PASCAL:
mediu integrat, ordonare liber a seciunilor n partea de declaraie a programului, etc. O
descriere detaliat a limbajului Turbo Pascal o gseti, de exemplu, n referinele
bibliografice generale [4].

3.2. Editorul TP

ntre utilizatorul care ar vrea s foloseasc n operarea calculatorului un
limbaj ct mai apropiat de limbajul natural i calculatorul care folosete
limbajul lui 1 i 0 exista straturi de comunicare. Datele sunt primite de
calculator dup ce au fost condiionate de BIOS. Schimbul efectiv de
informaii ntre utilizator i calculator este facilitat de sistemul de operare
primar, DOS. Peste acest sistem de comunicare se poate interpune un
altul, mai prietenos cu utilizatorul cum ar fi de exemplu Windows. n
sfrit, peste sistemul de operare se poate aeza un limbaj de
programare, o limba simpl , cu nu prea multe cuvinte , n care utilizatorul
comunic mainii de calcul sarcinile pe care dorete s le vad executate.
Pe calculatoarele personale mai vechi conversaia cu calculatorul se
face prin tastare de instruciuni la prompter-ul DOS
Calculatoarele mai evoluate, folosesc Windows - care permite n
continuare folosirea prompter-ului DOS. Acest prompter poate fi activat
prin succesiunea de comenzi Start, Programs, Accessories, Command
Prompt.
Cnd vei termina de studiat acest capitol vei fi capabil :

s nelegi modul n care programatorul interacioneaz cu
calculatorul n construirea i exploatarea programelor de
calcul;
s utilizezi editorul TP i s tii s repari erorile de sintax
semnalate dup compilare;

s identifici caracteristicile datelor de intrare i ieire pentru
programul TP i s le selectezi tipul;

s utilizezi expresiile, operatorii i funciile intrinseci TP;
;
s aplici cunotinele dobndite pentru a construi programe
cu care s rezolvi probleme simple de fizic.
Elemente de limbaj Turbo Pascal


25
Dac pe calculatorul tu, ceva mai vechi, ruleaz un sistem de operare
DOS, editorul Turbo Pascal se activeaz tastnd cuvntul turbo la
Command Prompt i ENTER. Pe ecran apare urmtoarea imagine:



Figura 3.1

Dac pe calculator ruleaz ca sistem de operare o variant oarecare de
Windows, se poate activa modul DOS prin tastarea succesiunii de taste
deja descrise. Acelai rezultat se obine dac din meniul Start se face
opiunea Run, urmat de comanda cmd scris n fereastra de comenzi.
Dup tastarea la prompter-ul DOS a cuvntului turbo i a tastei ENTER.
Pe ecran apare aceeai figur dar ntr-o fereastr Windows. Dac se
dorete rularea limbajului Turbo Pascal n fereastr DOS, unic, se poate
tasta (n Windows) combinaia de taste Alt-Enter. Revenirea la Windows
se face cu aceeai combinaie de taste. Un avantaj al utilizrii ecranului
DOS este posibilitatea imediat de folosire a mouse-ului.
Aa cum se vede n figura 3.1. primul rnd al ecranului editorului conine
un meniu. El este activat apsnd tasta F10 . Te poi deplasa pentru
opiuni apsnd tastele sgei la stnga sau la dreapta pe una din
componente. Dac apei tasta ENTER se deschide o fereastr cu un
submeniu, n care te deplasezi cu tastele sgei n sus sau n jos pn la
comanda dorit. Apsarea tastei ENTER activeaz comanda selectat din
submeniu. De exemplu ieirea din editor se face tastnd F10, deplasndu-
te pe FILE, tastnd ENTER, deplasndu-te apoi n submeniu pe EXIT i
tastnd ENTER.
n rndul de jos sunt date aciunile unor taste (cel mai des folosite):










DOS acronim pentru disk operating system (sistem de operare pe disc).
Termen generic prin care se face referire la orice sistem de operare care se
ncarc de pe disc la pornirea sau reiniializarea calculatorului. Iniial,
termenul fcea deosebire ntre sistemele de operare aflate pe discuri i cele
destinate unor microcalculatoare n care erau pstrate ntr-o memorie
permanent sau erau ncrcate de pe band magnetic
BIOS
acronim
pentru basic
input/output
system
(sistem de
intrare/ieire
de baz). n
cazul
calculatoarelo
r compatibile
PC(personal
computer),
este setul
esenial de
rutine
software care
verific
componentele
hardware la
pornire ,
lanseaz
sistemul de
operare i
ofer suportul
necesar
traficului
datelor ntre
componentele
hardware.
Elemente de limbaj Turbo Pascal


26
F3-OPEN deschide un fiier cu extensia .PAS din directorul curent, F2
SAVE salveaz programul n fiierul curent, F 10 MENIU activeaz rndul
de sus. Comenzile importante sunt duplicate n sensul c se pot face
att din meniul de sus ct i din comenzi nscrise n bara de jos.












Alte combinaii de taste de interes sunt:
ALT-F5 determin ieirea temporar din editor pentru a vedea
rezultatele unui calcul. Revenirea n editorul TP se face tastnd ENTER.
ALT-n determin trecerea n fereastra n ( 9 1 n )
ALT-F3 determin nchiderea ferestrei curente.
CTRL-F9 determin lansarea n execuie a programului din fereastra
curent.
ntre rndul de sus i cel de jos se afl ecranul pe care l poi considera o
pagin alb pe care scrii textul programului n Turbo Pascal. Compilatorul
TP nu distinge ntre literele mari i mici (nu este case sensitive).
Comentariile se scriu n acolade. Rmnnd n editorul TP putem edita
simultan mai multe programe cu F10, FILE, NEW; fiecare program este
editat ntr-o pagin; paginile sunt numerotate de la 1 la 9.

n ecranul de editare, vei scrie n limbaj TP toate lucrurile necesare
programului pe care l generezi. Ansamblul redactat este codul surs al
programului. naintea execuiei programului, codul sursa trebuie tradus n
cod obiect o form pe care calculatorul s-o neleag. Operaia de
trecere de la codul surs la codul obiect este compilarea. Pentru TP
operaia de compilare este asigurat de compilatorul TP lansat prin
tastarea ALT-F9 sau Compile. n cursul compilrii, este verificat
corectitudinea formal a scrierii cuvintelor TP pe care intenionezi s le
foloseti n program. i sunt semnalate toate erorile de sintax. Trebuie s
ai n vedere c operaia de verificare este strict formal. Compilatorul nu-i
poate semnala c programul tu este prost conceput i c nu rspunde
cerinelor pe care le ai n vedere. Dup ce prin compilare codul surs
este acceptat, poi comanda execuia programului tastnd RUN. Verific
pe cazuri cunoscute corectitudinea rezultatelor furnizate de program.





Windows sistem de operare lansat de Microsoft
Corporation . Windows este un mediu multitasking (care
poate rezolva simultan mai multe sarcini) cu interfa
grafic cu utilizatorul, care poate rula pe sisteme bazate
pe MS-DOS sau ca sistem de operare independent.
Elemente de limbaj Turbo Pascal


27











3.3. Structura unui program n TP

Un program, n orice limbaj de programare, reprezint o serie de
instruciuni pe care procesorul calculatorului le execut dac le nelege.
Un program n TP este compus dintr-un bloc precedat de un antet. Antetul
conine cuvntul PROGRAM urmat de numele programului. Blocul
programului conine o parte declarativ i o parte executabil.
Partea declarativ poate conine definiii de constante (seciunea ncepe
cu CONST), declaraii de variabile (seciunea ncepe cu VAR), etichete
(LABEL), definirea unor tipuri de date (TYPE), funcii i proceduri.
Pentru etichete, constante, tipuri de date, variabile, funcii, proceduri, unit-
uri i programe se folosesc identificatorii. Un identificator ncepe cu o
liter, dup primul caracter sunt permise litere, cifre i caracterul _
(underscore) . Un identificator nu poate conine blancuri (n TP blancul e
considerat separator). Lungimea unui identificator poate fi oricare dar doar
primele 63 de caractere sunt semnificative.
Partea executabil ncepe cu BEGIN, specific aciunile asupra datelor
conform algoritmului de calcul i se termin cu END.
Observ aceast structur n EX1.PAS la pagina 29.

3.4. Tipuri de date n TP

n memoria calculatorului, la nivel de cod main, datele se reprezint ca
iruri de cifre binare. Trecerea de la datele de intrare (n sistemul zecimal)
la aceast reprezentare binar i invers, trecerea de la reprezentarea
intern a datelor la cea a datelor de ieire (n sistemul zecimal), nu te
intereseaz n detaliu; pentru calculator informaia asupra felului n care se
face aceast transformare este dat de tipul de date.
Un tip de date definete o mulime finit de valori i o mulime finit de
operaii asociate.
Fiecrei date i se asociaz un tip unic.
n limbajul PASCAL exist patru tipuri de date nestructurate: INTEGER,
REAL, CHAR, BOOLEAN i mai multe tipuri de date structurate ntre care
vei distinge deocamdat numai tipurile: ARRAY, STRING, RECORD, FILE
i procedural. Un tip structurat de date este caracterizat prin tipul sau
tipurile componentelor i prin metoda structurrii sale. Cnd programezi
poi defini i alte tipuri de date - de exemplu tipurile enumerare i interval.

Dac ai de fcut o comunicare ntr-o limb strin, concepi mai nti un text cu
idei clare, ordonate i nlnuite logic n limba romn (ai conceput algoritmul
comunicrii ideilor); verifici apoi c toate cuvintele pe care le foloseti sunt
clare i toate virgulele sunt puse la locul lor (ai fcut compilarea). Traduci apoi
textul i trimii scrisoarea (execui programul pe care i l-ai propus). i atepi
rezultatele!
Nu uita: Editare Compilare - Execuie
Elemente de limbaj Turbo Pascal


28
3.4.1. Tipul INTEGER

Tipul INTEGER reprezint o submulime a mulimii numerelor ntregi
dependent de implementare. n Turbo Pascal exist 5 tipuri ntregi
predefinite.
n tabelul din figura 3.2 i sunt prezentate caracteristicile acestor tipuri de
ntregi.

Tip Domeniu Memorie
shortint -129...127 8-bit cu semn
integer -32768...32767 16-bit cu semn
longint -2147483648...2147483647 32-bit cu semn
byte 0...255 8-bit fr semn
word 0..65535 16-bit fr semn
Figura 3.2

Reine c operaiile aritmetice cu operanzi de tip ntreg folosesc precizia 8-
bit, 16- bit sau 32-bit conform urmtoarelor reguli:

tipul unei constante de tip ntreg este predefinit tip ntreg cu domeniul cel
mai mic care include valoarea constantei ntregi.
pentru un operator binar, ambii operanzi sunt convertii la tipul lor comun
nainte de operaie. Tipul comun este predefinit ca tipul ntreg cu cel mai
mic domeniu care include toate valorile posibile ale ambelor tipuri.
Operaia este realizat folosind precizia tipului comun i tipul rezultatului
este tipul comun.
expresia din partea dreapt a unei instruciuni de atribuire este evaluat
independent de domeniul i tipul variabilei din stnga.
dac rezultatul operaiei ntre valori ntregi se situeaz n afara
domeniului reprezentnd tipul ntreg apare o eroare n faza de execuie a
programului.
operatorii binari pentru operanzi ntregi sunt: +, -, *, DIV, MOD
funcii pentru operanzi ntregi sunt: ABS, SQR
operatorii relaionali sunt: =, <>, >=, <=, >, <
tipul ntreg definete o succesiune ordonat de valori deci pentru fiecare
valoare (cu excepia capetelor intervalului ) se pot defini un succesor i un
predecesor cu funciile:
SUCC(x)=x+1
PRED(x)=x-1

3.4.2. Tipul REAL

Tipul REAL reprezint o submulime finit a numerelor reale. n Turbo
Pascal exist 5 tipuri reale predefinite, dar n directiva de compilare
selectat implicit, {$N-}, se lucreaz doar cu variabile de tip real crora li
se aloc 6 octei/variabil, au domeniul de valori 2.9 E-38..1.7E38 i 11-12
cifre semnificative.

operatorii binari pentru tipul REAL sunt: +, -, *, /
Elemente de limbaj Turbo Pascal


29
funciile standard sunt: ABS, SQR, LN, EXP, SQRT, SIN, COS, ARCTAN
funciile de transfer sunt:
TRUNC pentru conversia n ntreg cu trunchierea prii fracionare a
argumentului i
ROUND pentru conversia n ntreg cu rotunjirea prii fracionare a
argumentului
ROUND(x) = TRUNC(x+0.5) pentru x>=0
ROUND(x) = TRUNC(x-0.5) pentru x<0
pe mulimea valorilor reale nu este definit o relaie de ordonare deci nu
pot fi folosite funciile SUCC i PRED.

3.4.3. Tipul CHAR

Tipul CHAR reprezint o mulime finit i ordonat de caractere din setul
de caractere ASCII ( American Standard Code for Information Interchange
) extins.
ncearc programul urmtor pentru a vedea caracterele ASCII i numrul
de ordine corespunztor fiecrui caracter:

EX1.PAS
program caractere_ASCII;
label unu;
var i,j:integer; f:text;
begin
assign(f,codASCII.out); rewrite(f);
for i:=1 to 6 do write(f, i:2,:,char(i):2,;);
writeln(f); j:=0;
for i:=14 to 255 do
begin
write(f,i:3,:,char(i):2,;);j:=j+1;
if j<10 then goto unu
else
begin
j:=0; writeln(f);
end;
unu: end;
end.

3.4.4. Tipul BOOLEAN

Tipul BOOLEAN este un tip de date logice cu 2 elemente FALSE < TRUE
ceea ce-i permite s aplici asupra variabilelor de acest tip
operatori logici: NOT, AND, OR
operatori relaionali: =, <>, <=, >=, <, >
relaii de ordine: ORD(FALSE) = 0; ORD(TRUE) = 1;
SUCC(FALSE) = TRUE; PRED(TRUE) = FALSE
Tipurile predefinite INTEGER, CHAR i BOOLEAN definesc mulimi finite
i ordonate, motiv pentru care se mai numesc i tipuri scalare sau
ordinale.
Elemente de limbaj Turbo Pascal


30
3.4.5. Tipul enumerare

Tipul enumerare este descris de enumerarea componentelor sub forma
unei liste ordonate de valori pe care le poate lua o variabil de tipul
respectiv. Exemplu: TYPE culoare=(alb, rou, galben, verde, albastru);

Ordinea n care sunt enumerai identificatorii n list i definete relaia
ntre componente permind aplicarea operatorilor relaionali precum i a
funciilor PRED, SUCC i ORD (Atenie! numrul de ordine al primei
componente este 0).
ORD(alb) = 0; ORD(rosu) = 1; PRED(rosu) = alb; SUCC(alb) = rosu,...

3.4.6. Tipul interval

Tipul interval este un subdomeniu de valori dintr-un tip primitiv ( cu
excepia celui REAL) sau al unui tip enumerare, denumit tip de baz.

Definiia unui interval ( sau subdomeniu ) specific valorile cea mai mic
i cea mai mare n interval separate prin simbolul .. . Ambele constante
trebuie s fie de acelai tip ordinal.

Exemple:
0..99 subdomeniu al tipului de baz BYTE
-128..127 subdomeniu al tipului de baz SHORTINT
C..R subdomeniu al tipului de baz CHAR
rosu..albastru subdomeniu al tipului de baz enumerare definit mai sus

O variabil de tip interval are toate proprietile variabilelor tipului de
baz, dar valoarea sa n timpul execuiei programului trebuie s fie n
intervalul specificat.

3.4.7. Tipul ARRAY

Tipul ARRAY (tablou) este o structur omogen format dintr-un numr fix
de componente de acelai tip numit tip de baz.
Diagrama de sintax ce definete acest tip este prezentat n figura 3.3:





Figura 3.3

n care tip_indice este un tip ordinal iar tip_baz este orice tip.
Fiecare component a unui tablou este selectat printr-un indice care ia
valori ntr-o mulime finit numit tipul indicelui. Tipuri indice valabile sunt
toate tipurile ordinale cu excepia lui LONGINT; tip indice nu poate fi un tip
structurat.
Elemente de limbaj Turbo Pascal


31
Exemple:
TYPE vector=array[1..10] of real; {defineste tipul
structurat vector reprezentand multimea tablourilor ce
au 10 componente de tip real; observati definirea
domeniului in care ia valori indicele}
VAR u, v : vector;
[
Tipul de baz poate fi orice tip nestructurat sau structurat.
Accesarea unei componente a tabloului se face prin identificatorul tablo-
ului i valoarea indicelui.
Pot exista i tablouri cu mai multe dimensiuni. Astfel
ARRAY [BOOLEAN] OF ARRAY[1..10] OF ARRAY[1..2] OF REAL;
este interpretat de compilator ca
ARRAY[BOOLEAN, 1..10, 1..2] OF REAL;
Poi accesa un element al tabloului multidimensional specificnd valorile
indicilor din parantezele drepte. Astfel
VAR a:ARRAY[1..10] OF ARRAY[1..20] OF REAL;
definete o matrice cu 10 linii i 20 coloane. Elementul din linia i i coloana
j se identific prin a[i][j] sau a[i, j].

3.4.8. Tipul STRING

Tipul string (ir de caractere) este specific limbajului Pascal. Valoarea unei
variabile de acest tip este format dintr-un numr de caractere.
Tipurile string sunt tipuri structurate ntr-un mod asemntor cu tipul
ARRAY, cu diferena major c numrul de caractere ntr-un ir poate
varia dinamic ntre zero i limita superioar specificat (ntre 1 i 255).
Diagrama de sintax ce definete acest tip este prezentat n figura 3.4:


Figura 3.4

ntreg_fr_semn este o constant ntreag n domeniul 1..255 i d
lungimea maxim a irului de caractere. Dac lungimea nu este explicit
specificat, valoarea implicit considerat este 255.

Exemple:
TYPE nume=STRING[14];
VAR s1, s2:nume;
sau direct
VAR s1, s2:STRING[14] {tip anonim }

Variabilele de tip STRING ocup n octei lungimea maxim plus un octet
(primul) ce conine lungimea curent a variabilei. Caracterele individuale
ntr-un ir sunt indiciate de la 1 la lungimea irului.
Expresiile STRING constau din constante iruri, variabile tip STRING,
nume de funcii i operatori.
Elemente de limbaj Turbo Pascal


32
Operaia de concatenare se realizeaz cu operatorul + sau cu funcia
concat. Dac lungimea irului rezultat depete 255 calculatorul
semnaleaz o eroare la execuie.

Aplicarea operatorilor de relaie (prioritate mai mic dect + ) se face
caracter cu caracter de la stnga la dreapta conform valorilor ASCII
asociate. Dac irurile au lungimi diferite dar sunt egale pn la ultimul
caracter din irul mai scurt, atunci irul mai scurt este considerat mai mic.
irurile sunt egale numai dac lungimile i coninutul irurilor sunt identice.

O valoare tip CHAR este compatibil cu o valoare tip STRING
considerndu-se un string de lungime 1.

Asignarea irurilor:
age := optsprezece;

Reine c dac prin asignare se depete lungimea maxim a variabilei
de tip STRING, caracterele n exces sunt trunchiate.

3.4.9. Tipul RECORD

Tipul RECORD (nregistrare) este un tip compus format dintr-un numr de
componente, numite cmpuri. Spre deosebire de variabilele de tip
ARRAY, cmpurile, elemente ale variabilelor de tip RECORD, pot fi de
tipuri diferite. Fiecare cmp are un nume, identificatorul de cmp.
Diagrama de sintax a definirii tipului RECORD i este prezentat n
figura de mai jos:

Figura 3.5
unde lista cmpurilor are diagrama de sintax:

Figura 3.6
Referirea la o component a unei variabile de acest tip o vei face conform
urmtoarei diagrame de sintax:

Figura 3.7
Fiierele
constau
dintr-o
secven de
componente
de acelai tip.
Numrul de
componente
ntr-un fiier
(dimensiunea
fiierului) nu
este
determinat
prin definirea
fiierului
Elemente de limbaj Turbo Pascal


33
Exemple de variabile de tip record pe care le vei folosi n grafic, sunt cele
prezentate mai jos.

TYPE viewporttype=RECORD
x1, y1, x2, y2 : integer;
clip : boolean;
END;

TYPE pointtype=RECORD
x, y : integer;
END;

3.4.10. Tipul FILE

n TP exist dou fiiere standard predeclarate: fiierul standard de intrare
(tastatura) i fiierul standard de ieire (ecranul monitorului). Dac vrei s
citeti sau s scrii date folosind un fiier de pe discul magnetic atunci
trebuie s defineti o variabil de tip FILE pe care s o pui n
coresponden cu fiierul dorit.
Fiierele constau dintr-o secven de componente de acelai tip. Numrul
de componente ntr-un fiier (dimensiunea fiierului) nu este determinat
prin definirea fiierului. Tipul unui fiier este definit de cuvntul rezervat
FILE OF i urmat de tipul componentelor fiierului. Componentele unui
fiier pot fi de orice tip exceptnd tipul file.
n figura 3.8 poi observa diagrama de sintax pentru tipul FILE .


Figura 3.8

Exemple:
TYPE f=file of byte;
g=file of real;

VAR a,b:f;
c:g;

Corespondena ntre variabila tip fiier i numele fiierului o vei face
apelnd procedura ASSIGN(FilVar, Str) unde FilVar este numele variabilei
tip fiier iar Str este numele fiierului.
Exemple:
ASSIGN(a,date.in);
ASSIGN(c,xdat.out);

Dup asignarea numelui fiierului variabilei tip fiier n instruciunile
READ sau WRITE va interveni doar numele variabilei tip fiier.


Elemente de limbaj Turbo Pascal


34
3.5. Expresii, operatori, funcii intrinseci

O expresie reprezint o formul ce definete calculul unei valori prin
aplicarea unor operatori asupra unor operanzi care pot fi constante,
variabile, funcii. Evaluarea unei expresii se face de la stnga la dreapta
respectnd nite reguli de prioritate ale operatorilor. n Turbo Pascal exist
4 nivele de prioritate prezentate n tabelul din figura 3.9:


Figura 3.9

Exist trei reguli de baz pentru prioritate ntr-o expresie i anume:
un operand aflat ntre doi operatori de prioriti diferite este legat de
operatorul de prioritate mai nalt.
un operand aflat ntre doi operatori de prioriti egale este legat de
operatorul din stnga sa.
expresiile din paranteze se evalueaz prioritar fiind tratate ca un singur
operand.
La scrierea expresiilor trebuie s ai n vedere:
s nu omii operatorul nmulirii , ntre doi operanzi.
s nu-i apar doi operatori consecutivi: de exemplu expresia xy
este scris greit pe cnd expresia x(-y) este scris corect.
s fi sigur c toi operanzii reprezentai prin variabile au valori definite
anterior evalurii expresiei.

3.5.1. OPERATORII ARITMETICI
n tabelul din figura 3.10 i sunt prezentai operatorii aritmetici.


Figura 3.10

Elemente de limbaj Turbo Pascal


35
3.5.2. OPERATORI LOGICI

Tabelul din figura 3.11 i evideniaz operatorii logici cu operanzii i
aciunea efectuat.


Figura 3.11
dac operandul operatorului not este de un tip ntreg, rezultatul este de
acelai tip ntreg
dac ambii operanzi ai operatorilor and, or, xor sunt de cte un tip
ntreg, tipul rezultatului este tipul comun al celor doi operanzi.

3.5.3. OPERATORI BOOLEENI

Poi observa operatorii booleeni cu operanzii i aciunea efectuat n
tabelul din figura 3.12.


Figura 3.12

3.5.4. OPERATORUL STRING


Figura 3.13
Elemente de limbaj Turbo Pascal


36
3.5.5. OPERATORI DE RELAIE


Figura 3.14

Reine c:
la compararea tipurilor simple e necesar ca tipurile s fie compatibile;
totui dac un operand este de tip real, cellalt poate fi de un tip ntreg

compararea irurilor se face conform cu ordonarea setului de caractere
ASCII. Oricare dou valori string pot fi comparate deoarece toate valorile
string sunt compatibile. O valoare tip CHAR este compatibil cu o valoare
tip STRING; cnd ele sunt comparate valoarea tip CHAR este tratat ca o
valoare tip STRING de lungime 1.

3.5.6. FUNCII STANDARD: B A : f


n expresie, A este domeniul pe care sunt definite funciile, B este
domeniul n care iau valori funciile. Funciile care opereaz n TP sunt
funcii matematice:
sin, cos, arctan, exp, ln, sqrt, A = {real, integer}, B = {real}
abs, sqr, A = {real, integr }, B = A
funcii de transfer:
trunc, round, A = {real}, B = {integer}
funcii scalare:
ord, A = {integer, char}, B = {integer} pred, succ, A = {integer, char }, B = A
chr, A = {integer }, B = {char }

3.5.7. Exerciiu pentru familiarizare cu Turbo Pascal

ncearc un program simplu pentru a te familiariza mai bine cu editorul TP.
Programul pe care i-l propunem convertete un unghi dat n radiani ntr-
un unghi n grade, minute, secunde. Scrie programul n fiierul EX2.PAS.
Elemente de limbaj Turbo Pascal


37





1. Definete operaia de compilare TP.



2. Descrie structura unui program TP.



3. Precizeaz caracteristicile tipului de date INTEGER.



4. Scrie tipurile de date structurate din TP



5. Scrie operatorii aritmetici cu care se opereaz n TP.
EX2.PAS.
program conversie; {acesta este antetul programului}
const pi=3.14159; {partea de declaratie a programului
cu definire constante si declaratii de variabile}
var gfr, mfr, radian : real;
grade, minute, secunde : integer;
begin {partea executabila a programului}
writeln( introdu unghiul in radiani); readln(radian);
gfr:=radian*180.0/pi; grade:=trunc(gfr);
mfg:=(gfr-grade)*60.0; minute:=trunc(mfr);
secunde:=trunc((mfr-minute)*60.0);
writeln(radian:10:2, radiani = , grade, grade ,
minute, minute ,secunde, secunde);
readln;
end.

3.6. Test de autoevaluare 1



























Rspunsurile le gseti la pagina 38
Elemente de limbaj Turbo Pascal


38





1. Compilarea este operaia de trecere de la codul surs la codul
obiect . n cursul compilrii sunt semnalate erorile formale de scriere
ale codului surs care mpiedic scrierea codului obiect inteligibil
calculatorului.


2. Un program n TP este compus dintr-un bloc precedat de un antet.
Antetul conine cuvntul PROGRAM urmat de numele programului.
Blocul programului conine o parte declarativ i o parte executabil.
Partea declarativ poate conine definiii de constante (seciunea
ncepe cu CONST), declaraii de variabile (seciunea ncepe cu VAR),
etichete (LABEL), definirea unor tipuri de date (TYPE), funcii i
proceduri.

3.
Domeniu Memorie
shortint -129...127 8-bit cu semn
integer -32768...32767 16-bit cu semn
longint -2147483648...2147483647 32-bit cu semn
byte 0...255 8-bit fr semn
word 0..65535 16-bit fr semn


4. ARRAY, STRING, RECORD, FILE i procedural .

5. Adunare scdere, nmulire, mprire, mprire ntreag (diviziune)
restul mpririi (modulo)
3.7. Rspunsuri la testul de autoevaluare 1





































3.8. Termeni i expresii cheie




Editare, compilare, rulare a unui program TP
Tipuri structurate i nestructurate de date n TP
Operatori aritmetici, logici booleeni i de relaie
Funcii matematice, funcii de transfer, funcii scalare
Elemente de limbaj Turbo Pascal


39
3.9. Lucrare de verificare
Rezolv problemele de mai jos. Trimite tutorelui rspunsurile pe care le
consideri corecte.












































3.10. Bibliografie

1. Anioara Constantinescu, Simona erban, Victor Ionu Stoica, Limbajul
de programare Turbo Pascal Editura Anima, paginile 5-24.





1. Cte tipuri de date nestructurate sunt predefinite n TP ? Sunt toate
aceste tipuri de date tipuri ordinale? Care din ele sunt i de ce?
(1pt)
2. Ce tipuri de date structurate sunt recunoscute de limbajul TP?
(0,5pt)
3. Prin ce se deosebete tipul String de tipul Array? (0,5pt)
4. Care sunt operatorii aritmetici i care este ordinea lor de execuie
ntr-o expresie aritmetic? (1pt)
5. Care sunt operatorii de relaie i care este aciunea lor? (1pt)
6. Ce realizeaz operatorul + aplicat asupra unor variabile de tip Char
sau String ? (1pt)
7. Scrie o succesiune de instruciuni care s permit efectuarea
urmtoarelor calcule aritmetice (2pt)
( ) ( )
( )

|
|
.
|

\
|

+
+
+
+
yz
y z
yz
y z
tg .
y x
y x y x
.
/ /
2 2
2
1
2 2 2 2
2 1 2 1


8. Variabilele L1 i L2 sunt variabile logice ce pot lua valorile TRUE
sau FALSE; scrie instruciunea prin care se calculeze funcia Q1,
definit prin urmtoarea tabel de adevr. (1 pt)
L1 F F T T
L2 F T F T
Q1 T F F F
9. Variabilele L1 i L2 sunt variabile logice ce pot lua valorile TRUE
sau FALSE; scrie instruciunea prin care se calculeze funcia Q2,
definit prin urmtoarea tabel de adevr. (1 pt)
L1 F F T T
L2 F T F T
Q2 F T T T
Not: se acord un punct din oficiu
Total: 10 puncte
Instruciuni n Turbo Pascal


40
Unitatea de nvare 4
INSTRUCIUNI N TURBO PASCAL


Cuprins Pagina

4. INSTRUCIUNI N TURBO PASCAL 40
4.1. Obiectivele Unitii de nvare 4 Instruciuni n Turbo Pasca 41
4.2. Instruciuni simple 42
4.2.1. Instruciuni de atribuire 42
4.2.2. Instruciuni de apelare a unei proceduri 42
4.2.3. Instruciunea GOTO 43
4.3. Instruciuni structurate 43
4.3.1. Instruciunea compus 43
4.3.2. Instruciuni condiionale 44
4.3.3. Instruciuni repetitive 46
4.4. Instruciunile de transfer de date: READ, READLN, WRITE, WRITELN 48
4.4.1. Instruciunile READ, READLN 48
4.4.2. Instruciunile WRITE, WRITELN 49
4.4.3. Fiiere de date 51
4.5. Test de autoevaluare 1 56
4.6. Rspunsuri la testul de autoevaluare 1 58
4.7. Lucrare de verificare 61
4.8. Termeni i expresii cheie 62
4.9. Bibliografie 62




Instruciuni n Turbo Pascal


41
4.1. Obiectivele Uniti de nvare 4 Instruciuni n Turbo Pascal






















Imagineaz-i instruciunile TP ca pe nite indicaii redactate - cu sintaxa
specific n limba TP. Aceste indicaii sunt nelese i executate de
calculator.

O instruciune n TP se termin de regul cu simbolul ; se pot scrie mai
multe instruciuni pe un rnd sau o instruciune pe mai multe rnduri n
funcie de poziionarea semicolonului ; Instruciunea poate avea o
etichet. Diagrama de sintax pentru o instruciune o poi observa n figura
4.1.

Figura 4.1








Cnd vei termina de studiat acest capitol vei fi capabil :

s nelegi structura programului TP
s foloseti declaraii i instruciuni specifice limbajului
Turbo Pascal;

s identifici instruciunile dup aciunea lor;

s foloseti sintaxa corect n limbajul Turbo Pascal pentru
instruciunile structurate;

s aplici cunotinele dobndite pentru a construi programe
TP cu care s rezolvi probleme de diferite tipuri.
Instruciunea este un enun care specific o aciune ntr-un limbaj de
calculatoare. Programele sunt formate din dou tipuri de enunuri: instruciuni
i declaraii. Declaraia este asociaia dintre un identificator i anumite
informaii. Declaraia unei constante de exemplu - presupune asocierea
dintre numele i valoarea sa.
Instruciuni n Turbo Pascal


42
4.2. Instruciuni simple

n vorbirea direct te poi exprima n cuvinte singulare, n propoziii simple,
n fraze sau n blocuri de fraze. Tot astfel n limbajul TP exist diferite
tipuri de instruciuni.
Instruciuni simple sunt instruciunea de atribuire, instruciunea de apelare
a unei proceduri i instruciunea de transfer pentru execuia programului la
o instruciune cu etichet.

4.2.1. Instruciuni de atribuire








Figura 4.2

Exemple:
radian := 1.5;
gfr := radian180.0/pi; grade := trunc(gfr);
{ai ntlnit aceste instruciuni de atribuire
n exemplul EX2.PAS }

Instruciunea de atribuire nlocuiete valoarea curent a unei variabile cu o
valoare specificat ca o expresie. Valoarea expresiei trebuie s fie de
acelai tip sau de un tip compatibil cu tipul variabilei.

4.2.2. Instruciuni de apelare a unei proceduri

Procedura este un ansamblu de instruciuni cruia i sunt asociate
constante, tipuri de date i variabile i care are ca scop realizarea unei
anumite sarcini de regul unice. Procedura are un nume (identificator).
Diagrama de sintax a instruciunii procedur este:










Figura 4.3


Instruciuni n Turbo Pascal


43
Instruciunea procedur specific activarea unei proceduri notate prin
identificatorul procedurii. Dac declararea procedurii conine o list de
parametrii formali atunci instruciunea procedur trebuie s aib aceeai
list de parametrii actuali ( problema va fi repus i tratat n detaliu n
unitatea de nvare numrul 5).

4.2.3. Instruciunea GOTO

Diagrama de sintax a instruciunii goto este urmtoarea:




Figura 4.4








Instruciunea goto (du-te la o etichet) transfer execuia programului la
instruciunea ce are ca prefix eticheta la care instruciunea face referin .
La folosirea instruciunii goto urmrete regula ca eticheta referit n
instruciunea goto s fie obligatoriu n acelai bloc ca i instruciunea
nsi. Cu alte cuvinte nu poi face transfer n sau n afara unei proceduri
sau funcii.

4.3. Instruciuni structurate

Instruciunile structurate sunt construcii formate din alte instruciuni
executate fie secvenial ( n instruciunea compus ) fie condiional ( n
instruciunile condiionale ) fie iterativ ( n instruciunile repetitive ).

4.3.1. Instruciunea compus

Instruciunea compus reprezint o secven de instruciuni considerat
un tot i executat n ordinea n care instruciunile din secven sunt
scrise. Instruciunile componente ale instruciunii compuse sunt separate
prin ; i sunt ncadrate n parantezele de instruciune BEGIN i END ca n
diagrama de sintax ce i este prezentat n figura 4.5.







Figura 4.5

Blocul este un grup de instruciuni dintr-un program care sunt tratate
ca un tot.

Instruciuni n Turbo Pascal


44
Reine c instruciunea compus este tratat sintactic ca o singur
instruciune.
Partea executabil a unui program poate fi astfel considerat ca o singur
instruciune compus.

4.3.2. Instruciuni condiionale

O instruciune condiional selecteaz pentru execuie o singur
instruciune (sau nici o instruciune) din instruciunile sale componente.
Diagrama de sintax a instruciunii IF i este prezentat n figura
urmtoare








Figura 4.6

n care expresie este o expresie boolean ce trebuie s dea un rezultat
de tip boolean. Dac rezultatul evalurii expresiei este TRUE se execut
instruciune1. Dac rezultatul evalurii expresiei este FALSE i este
prezent ELSE se execut instruciune2. Dac rezultatul evalurii
expresiei este FALSE i nu este prezent ELSE atunci se trece la
instruciunea urmtoare instruciunii IF.

Reine c:
delimitatorul ; nu trebuie pus naintea lui ELSE deoarece ar duce la
terminarea deciziei implicate de IF fr a considera i cea de a doua
alternativ.

dac instruciune1 sau/i instruciune2 sunt formate din mai
multe instruciuni, ele se trateaz ca instruciuni compuse i sunt
executate n integritatea lor.

n general un ELSE este asociat cu cel mai apropiat IF neasociat deja cu
un alt ELSE. Ambiguitatea sintactic ce apare din construcii ca:
IF expresie1 THEN IF expresie2 THEN instruciune1
ELSE instruciune2;
se rezolv interpretnd construcia astfel:
IF expresie1 THEN
BEGIN
IF expresie2 THEN
instructiune1
ELSE
instructiune2
END
Instruciuni n Turbo Pascal


45
( nu era neaprat necesar paranteza begin .. end ) . n cazul prezentat n
continuare, pentru interpretarea corect este neaprat necesar
paranteza begin .. end.
IF expresie1 THEN
BEGIN
IF expresie2 THEN instructiune1
END
ELSE
instructiune2











4.3.2.2. Instruciunea CASE























Figura 4.7

Instruciunea CASE permite alegerea i execuia unei singure instruciuni
dintre mai multe instruciuni componente n funcie de valoarea unei
expresii scalare (expresie din diagrama de sintax) numit expresie
selector.

n limbajul TP faptul c scrii cu litere mari sau mici este
nesemnificativ. Totui, pentru urmrirea mai uoar a
programelor este bine s-i faci un automatism de scriere.
De exemplu poi s scrii mereu comenzile cu majuscule.
Este, evident, doar o sugestie
Instruciuni n Turbo Pascal


46
Instruciunile componente sunt precedate de una sau mai multe constante
distincte ce au valori de acelai tip simplu ( INTEGER, CHAR, BOOLEAN,
enumerare, interval ) ca i tipul expresiei selector. Ordinea acestor
etichete este arbitrar.

Expresia selector, de tip ordinal, poate lua valori ntre -32768 i 32767 i
deci nu poate fi de tip LONGINT, WORD sau STRING. Instruciunea CASE
execut instruciunea prefixat de o constant CASE egal cu valoarea
expresiei selector sau prefixat de un domeniu CASE ce conine valoarea
expresiei selector. Dac nu exist o astfel de constant CASE i este
prezent partea ELSE se execut instruciunea ce urmeaz pe ELSE.
Dac nu exist partea ELSE nu se execut nici-o instruciune.

4.3.3. Instruciuni repetitive

Instruciunea repetitiv specific faptul c anumite instruciuni urmeaz a
se executa n mod repetat. Dac numrul de repetri e cunoscut dinainte
vei folosi instruciunea FOR altfel vor fi folosite instruciunile WHILE sau
REPEAT.

4.3.3.1. Instruciunea REPEAT...UNTIL

Poi observa diagrama de sintax a instruciunii REPEAT n schema din
figura 4.8.








Figura 4.8

n cursul execuiei instruciunii (care nseamn repet pn cnd...),
expresie controleaz repetarea execuiei succesiunii de instruciuni din
cadrul instruciunii REPEAT. Expresie trebuie s dea un rezultat de tip
BOOLEAN.
Instruciunile aflate ntre cuvintele rezervate ale limbajului Pascal, REPEAT
i UNTIL, se execut n succesiune repetat pn cnd expresie
evaluat d rezultatul TRUE.
Este important s reii c succesiunea de instruciuni este executat cel
puin o dat deoarece evaluarea pentru expresie este fcut dup
execuia succesiunii de instruciuni.
Instruciuni n Turbo Pascal


47
4.3.3.2. Instruciunea WHILE...

Poi studia diagrama de sintax a instruciunii WHILE n figura 4.9.




Figura 4.9

Aa cum vezi, instruciunea conine o expresie care controleaz repetarea
execuiei unei instruciuni ( care poate fi o instruciune compus).
Expresie trebuie s fie de tip BOOLEAN i este evaluat nainte ca
instruciune s fie executat. Instruciune este executat repetat ct
timp expresie d rezultatul TRUE; dac expresie are valoare FALSE
de la nceput , instruciune nu se execut nici o dat.

4.3.3.3. Instruciunea FOR...

Analizeaz diagrama de sintax a instruciunii FOR prezentat n schema
din figura 4.10:











Figura 4.10

i ine cont c n schem :
Variabil_control este un identificator de variabil iar
valoare_iniial i valoare_final sunt cte o expresie.
Instruciunea FOR face ca instruciune ( care poate fi o instruciune
compus) s se execute repetat ct timp variabilei de control i se atribuie
o progresie de valori cuprinse ntre valorile extreme ale variabilei de
control.
Variabila de control trebuie s fie de unul din tipurile ordinale ;
valoare_iniial i valoare_final trebuie s fie de un tip
compatibil din punct de vedere atributiv cu tipul variabilei de control.
Cnd se intr ntr-o instruciune valorile iniial i final sunt date ca
valori pentru tot restul execuiei instruciunii FOR. Valorile final i iniial
nu pot fi modificate n cursul execuiei. Instruciunea controlat cu FOR se
execut o dat pentru fiecare valoare a variabilei de control.
Variabila_control ncepe ntotdeauna prin a avea valoarea egal
cu valoare_iniial. Cnd instruciunea FOR folosete TO valoarea
Instruciuni n Turbo Pascal


48
variabilei de control crete cu unu la fiecare repetare. Dac valoarea
iniial este mai mare dect valoarea final, instruciune nu se
execut. Cnd instruciunea FOR folosete DOWNTO, valoarea variabilei de
control scade cu unu la fiecare repetare. Dac valoarea iniial este mai
mic dect valoarea final, instruciune nu se execut.





4.4. Instruciunile de transfer de date: READ, READLN, WRITE,
WRITELN

Instruciunile din aceast categorie i asigur transferul datelor spre i
dinspre calculator.

4.4.1. Instruciunile READ, READLN

Poi face transferul datelor din fiierul standard de intrare n memoria
calculatorului prin apelarea procedurii READ conform diagramei de sintax
prezentate n figura 4.11:










Figura 4.11

Variabilele din list pot aparine doar tipurilor simple INTEGER, REAL,
CHAR. Prin execuia operaiei de intrare se preiau valori din fiierul
standard de intrare i se atribuie variabilelor n ordinea dat de
lista_de_variabile.
Datele de intrare sunt considerate de program ca un flux continuu; o
operaie de intrare preia o valoare de pe mediul de intrare din punctul
imediat urmtor ultimei valori preluate prin operaia de intrare precedent.
Reine c o form deosebit a operaiei de intrare are sintaxa a crei
schem apare n figura 4.12







Figura 4.12
Reine : este eroare dac instruciune schimb valoarea variabilei de
control
Instruciuni n Turbo Pascal


49
n acest caz se realizeaz, dup transferul de valori din fiierul de intrare
la lista de variabile, o poziionare la nceputul liniei urmtoare ignorndu-
se prin aceasta informaia rmas n linia curent.
Procedura READLN fr list_de_variabile nu realizeaz un
transfer de informaie ci doar poziionarea la nceputul liniei urmtoare.

4.4.2. Instruciunile WRITE, WRITELN

Operaia de ieire se realizeaz prin apelarea procedurii WRITE conform
diagramei de sintax din figura 4.13. Spre deosebire de lista de intrare (
care este o list de variabile) n lista_de_ieire pot apare expresii.
Ca i la intrare, datele de ieire sunt transferate n flux continuu. Ele pot fi
structurate pe linii folosind procedura WRITELN care are diagrama de
sintax prezentat n figura 4.14.
Forma WRITELN (fr lista_de_ieire ) realizeaz doar trecerea la
linia urmtoare n timp ce WRITELN( lista_de_ieire ) scrie n linia
curent valorile expresiilor din lista_de_ieire dup care face
trecerea la linia urmtoare.










Figura 4.13








Figura 4.14

o valoare boolean apare la ieire sub forma irului de caractere TRUE
sau FALSE

o valoare ntreag apare ca un ir de cifre precedat, eventual, de semnul
(minus)

o valoare real apare la ieire n virgul mobil normalizat coninnd o
mantis i un exponent.

Operaia de ieire permite specificarea numrului de poziii n care se
transfer valoarea de ieire.
Instruciuni n Turbo Pascal


50
n cazul n care valoarea de ieire este de tip INTEGER, CHAR sau
BOOLEAN se poate specifica un singur parametru i anume lungimea
total a zonei ca o expresie ntreag. n acest caz valoarea respectiv va
fi plasat n linia de ieire aliniat la dreapta n zona de lungime
specificat. Dac lungimea zonei este mai mic dect lungimea valorii de
tiprit, zona va fi extins pentru a afia ntreaga valoare.

cnd valoarea de ieire este de tip REAL sunt necesari doi parametri:
lungimea total a zonei i lungimea fraciei. Dac sunt specificai ambii
parametri, valoarea real este scris fr exponent, cu punct zecimal i
semn n zona rezervat, aliniat la dreapta, avnd partea fracionar
rotunjit la numrul de cifre precizat ca lungime a fraciei.
Exemplu:
valoarea din memorie x=-15.864 va apare la scrierea cu WRITE(x:6:1)
ca -15.9
Dac vei specifica doar lungimea zonei, valoarea de tip REAL va
fi afiat normalizat avnd mantisa rotunjit astfel nct s ncap n
lungimea total a zonei minus 6.
Exemplu:
WRITE(x:8) afieaz, pentru aceeai valoare x de mai sus, -1.6 E+01
(unde - este semnul numrului, 1.6 este mantisa iar 01 puterea lui 10 cu
care trebuie nmulit mantisa pentru a avea valoarea din memorie; deci
1.6 10
1
Diagrama de sintax a procesului este prezentat n figura 4.15.
).













Figura 4.15

Programul prezentat mai jos utilizeaz instruciunile de scriere i citire.

EX3.PAS
program plimbare;
var ore, min, sec, tplimbare : word;
begin
write( dati ora plecarii de acasa in ore minute
secunde);
readln( ore, min, sec );
writeln(plecare la: , ore:2, /,min:2,/,sec:2);
write(dati in secunde cat timp vreti sa va plimbati);
Instruciuni n Turbo Pascal


51
readln(tplimbare);
writeln(durata plimbarii:,tplimbare:6,secunde);
sec:=sec+tplimbare; min:=min+sec div 60; sec:=sec
mod 60;
ore:=ore+min div 60;min:=min mod 60;
{ afisare moment sosire }
writeln(veti sosi la: ,ore:2, /, min:2, /,
sec:2);
end.

Vei introduce datele, ntregi, cerute de acest program, fie cte una pe un
rnd (valori numerice pentru or ENTER, minut ENTER, secund ENTER)
fie toate valorile numerice separate cu blanc pe un singur rnd.

4.4.3. Fiiere de date

Cnd vei avea multe date de intrare sau ieire (ca n cazul lucrului cu
matrici sau tabele de date) este recomandabil s foloseti fiiere de date
n locul introducerii datelor de la consol ( vezi tipul FILE ).

4.4.3.1. Scrierea fiierelor

Un fiier, numit n continuare g este pregtit pentru scriere prin apelarea
procedurii
REWRITE(g).
Poi realiza scrierea valorilor n fiier cu procedura
WRITE(g,x
1
, ..., x
n
unde n prima poziie apare numele variabilei tip fiier iar valorile x
)
1
,
..., x
n
Programul prezentat n continuare scrie, la rnd, n fiierul a
componentele unei matrici cu 10 linii i 5 coloane. Editeaz programul,
compileaz-l, execut-l apoi i urmrete efectele instruciunii de scriere n
fiier.
trebuie s fie de acelai tip cu cel al componentelor fiierului g.


EX4.PAS

program testfile1;
TYPE f=FILE OF real; {aici e definit tipul FILE}
VAR a:f;{variabila a este de tipul f definit mai sus}
x:array[1..10,1..5] of real;
i,j:byte;
BEGIN
assign(a,testfile.dat); rewrite(a);
for i:= 1 to 10 do
for j:= 1 to 5 do
begin
x[i,j]:=1.*i*j; {1. transforma i*j intr-o valoare
reala}
write(a,x[i,j]);
end;
Instruciuni n Turbo Pascal


52
close(a);
END.

4.4.3.2. Citirea fiierelor

Pregtirea unui fiier, f, pentru citire o poi face apelnd procedura
RESET(f )
Citirea datelor dintr-un fiier o vei face cu procedura standard
READ(f,a,b,c)
unde variabilele a,b,c trebuie s fie de acelai tip cu cel al componentelor
fiierului f.
n exemplul de mai jos se citete i se scrie pe ecran matricea generat
de EX4.PAS. Execut programul apoi i urmrete efectele instruciunii de
scriere.


EX5.PAS

program testfile2;
TYPE f=FILE OF real;
VAR a:f;
x:array[1..10,1..5] of real;
i,j:byte;
BEGIN
assign(a,testfile.dat); reset(a);
{citeste datele din fisierul testfile.dat}
for i:=1 to 10 do
for j:=1 to 5 do read(a, x[i, j]);
{scrie datele citite pe ecran, o linie a matricei
pe un rnd}
for i := 1 to 10 do
begin
for j := 1 to 5 do write(x[i, j]:6:1);
writeln;
end;
close(a); readln;
END.

Observ utilizarea ciclurilor unul ntr-altul ; ciclul dup j este inclus n
ciclul dup i . Observ de asemenea diferena ntre citirea datelor n flux
continuu, la rnd, cu procedura READ i scrierea lor ordonat n form
standard de matrice . n al doilea caz ciclul dup j, n care se scriu
elementele unei linii a matricei, este urmat de instruciunea WRITELN ce
realizeaz trecerea la linia urmtoare. n ciclul dup i apar deci 2
instruciuni (ciclul dup j i WRITELN) ceea ce face necesar paranteza de
instruciune compus BEGIN...END;

Instruciuni n Turbo Pascal


53
4.4.3.3. Cteva proceduri pentru manipularea fiierelor

SEEK
Sintaxa: SEEK(FilVar, n)
SEEK mut pointerul de fiier la a n-a component a fiierului asignat lui
FilVar. n este o expresie de tip ntreg. Prima component a fiierului are
n=0. Extinderea fiierului asignat lui FilVar se poate face tot cu
procedura SEEK, n care n are valoarea numrul de componente din fiier
plus unu sau cu
SEEK(FilVar, FileSize(FilVar))

CLOSE
Sintaxa: CLOSE(FilVar)
Folosind aceast instruciune fiierul asignat variabilei FilVar va fi nchis.
Reine c este ntotdeauna necesar aplicarea instruciunii CLOSE ori de
cte ori se ncheie lucrul cu un fiier inclusiv asupra fiierelor deschise
pentru citire.

4.4.3.4. Funcii standard asupra fiierelor

EOF
Sintaxa: EOF(FilVar)
Aceast funcia ntoarce valoarea TRUE dac pointerul de fiier este
poziionat la sfritul fiierului, peste ultima component a fiierului. Altfel
ntoarce FALSE.

FilePos
Sintaxa: FilePos(FilVar)
Funcia ntoarce poziia curent a pointerului de fiier n interiorul lui
FilVar. Reine c prima component are numrul zero.

FileSize
Sintaxa: FileSize(FilVar)
Funcia ntoarce numrul de nregistrri din fiier.

Exerciiul pe care i recomandm s-l ncerci, scrie date n fiierul f -
cruia i vei da nume n cursul execuiei. Poziioneaz pointerul n
interiorul fiierului i scrie apoi informaiile referitoare la poziia pointerului
i cteva date


EX6.PAS
program testfile3;
var f : file of byte;
nume : string;
i, j : byte;
BEGIN
write(introdu nume fisier: ); {numele fiierului se
introduce in timpul execuiei
programului}
Instruciuni n Turbo Pascal


54
readln(nume); assign(f,nume); rewrite(f);
for i := 1 to 15 do
begin
j := i * i; write(f, i, j);
end;
close(f); reset(f);
while not eof(f) do
begin
read(f, i, j); writeln(i : 3, j :4);
end;
write(filesize(f)=,filesize(f)); writeln; close(f);
reset(f); seek(f, 10); {poziionare pointer la
sfritul nregistrrii 10}
writeln(filepos(f)=, filepos(f)); {scrie poziia
pointerului in fisier}
read(f, i, j); writeln(i, :, j);
{ scrie nregistrrile 11 si 12}
close(f);
END.

4.4.3.5. Fiiere de tip Text

Este important s reii c fiierele descrise mai sus pot fi scrise sau citite
doar ntr-un program n Turbo Pascal - nu i cu un editor DOS sau de alt
tip. n schimb, fiierele de tip TXT pot fi ns scrise sau citite i n DOS sau
NotePad sau alte editoare de text.
Fiierele de tip TEXT sunt structurate n linii, fiecare linie se termin cu
End-Of-Line (EOL) iar fiierul se termin cu Enf-Of-File (EOF). Fiierele de
tip TEXT sunt fiiere secveniale. Operaiile cu caractere se fac cu
procedurile READ i WRITE. Liniile din fiier sunt procesate cu procedurile
READLN i WRITELN. Sintaxa de declarare a unei variabile de tip fiier text
este:
VAR f:TEXT;

Editeaz, compileaz i execut urmtorul program care citete cte trei
coordonate a 10 puncte materiale i masa acestor puncte din fiierul al
crui nume este dat n timpul execuiei programului. Programul scrie apoi
aceste date pe ecran sub form de tabel, calculeaz coordonatele
centrului de mas al ansamblului acestor puncte materiale i masa total
i scrie valorile determinate pe ecran.

EX7.PAS

program testfile4;
const n=10;
var f : text; nume:string;
x, y, z, m : array [1..n] of real;
xcm, ycm, zcm, mtot, sxm, sym, szm, sm : real;
i : byte;
BEGIN
Instruciuni n Turbo Pascal


55
write(introdu nume fisier cu x, y, z, m ale celor n
puncte materiale)
readln(nume); assign(f,nume); reset(f);
for i:= 1 to n do
readln(f, x[i], y[i], z[i], m[i]);
close(f); {scrie pe ecran datele citit}
writeln( i x y z m );
for i:= 1 to n do
writeln(i:5,x[i]:10:2,y[i]:10:2,z[i]:10:2,m[i]:10:2);
{iniializare sume}
sxm :=0; sym :=0; szm:= 0; sm := 0;
for i := 1 to n do
begin
sxm := sxm + x[i] * m[i]; sym:=sym + y[i]*
m[i];
szm := szm + z[i]*m[i];sm:= sm+m[i];
end;
xcm:=sxm/sm; ycm:=sym/sm; zcm:=szm/sm; mtot:=sm;
{scrie pe ecran rezultatele}
writeln(coordonatele centrului de masa sunt:);
writeln(xcm=,xcm, ycm=, ycm, zcm=,zcm);
writeln(masa totala=, mtot);
readln;
END.

Fiierul cu date de intrare, al crui nume l introducei n timpul execuiei
programului, poate arta astfel:
testfile4.in
1 2 3 4
2 3 4 5
3 4 5 6
4 5 6 7
5 6 7 8
8 7 6 5
7 6 5 4
6 5 4 3
5 4 3 2
4 3 2 1
Instruciuni n Turbo Pascal


56
4.5. Test de autoevaluare 1






































1. Ce simbol se folosete pentru instruciunea de atribuire? Scrie un
exemplu de instruciune de atribuire n TP.







2. Denumete instruciunile condiionale pe care le cunoti i
exemplific folosirea n TP a fiecreia dintre ele.






3. Scrie un program TP corespunztor algoritmului de calcul al mediei
aritmetice a 10 numere, prezentat n unitatea de nvare 1.






4. Scrie un program TP corespunztor algoritmului de gsire a
termenului cu valoare maxim x
max
dintr-un ir cu 10 termeni. Programul
va trebui s determine i poziia acestui termen n ir.
Instruciuni n Turbo Pascal


57

















































Rspunsurile la acest test le gseti la pagina 58


T
T
T
e
e
e
s
s
s
t
t
t


d
d
d
e
e
e


a
a
a
u
u
u
t
t
t
o
o
o
e
e
e
v
v
v
a
a
a
l
l
l
u
u
u
a
a
a
r
r
r
e
e
e


1
1
1


-
-
-


C
C
C
o
o
o
n
n
n
t
t
t
i
i
i
n
n
n
u
u
u
a
a
a
r
r
r
e
e
e



5. Consider polinomul ( )
0 1
1
1
a x a x a x a x P
m
m
m
m
+ + + =

dat prin
gradul su, m, i coeficienii a
i
. Elaboreaz un program TP pentru
determinarea valorii acestui polinom, pentru o valoare indicat a
variabilei x, x = x0.
Indicaie: poi elabora cu uurin acest program, dac revezi schema
logic prezentat n paragraful 2.4.2 din unitatea de nvare 2.






6. Elaboreaz un program TP pentru ordonarea unui ir de numere care
s corespund algoritmului A de la paragraful 1.4.4.






7. Scrie un program TP pentru ordonarea unui ir de numere care s
corespund algoritmului B de la paragraful 1.4.4, citind datele din
fiierul tip text, date.in; n acest caz, n prima linie a fiierului va fi dat
valoarea lui n i din linia a doua vor fi date valorile x
i







8. Elaboreaz un program TP pentru implementarea algoritmului Euclid
pentru determinarea divizorului comun maxim a dou numere.
Instruciuni n Turbo Pascal


58
4.6. Rspunsuri la testul de autoevaluare 1





















































1.Instruciunea de atribuire conine simbolul atribuirii :=. Un exemplu este prezentat n
continuare radian := 1.5;
2. IF, CASE
3. Calculul mediei aritmetice
EX8.PAS
program valmedie;
const n=10;{se poate modifica pentru alt numar de valori x}
var x : array[1..n] of real;
s, xm : real;
i : byte;
begin
writeln( introdu , n, valori x);
for i:=1 to n do read(x[i]);
s:=0; for i:=1 to n do s:=s+x[i]; xm:=s/n;
writeln( xmediu = , xm:10:2);
end.
4. Gsirea termenului cu valoare maxim
EX9.PAS
program sir;
const n=10; {se modifica pentru alt numar de valori x}
var x:array[1..n] of integer;
xmax, imax, i:integer;
begin
writeln( introdu , n, valori intregi );
for i:=1 to n do read(x[i]);
xmax:=x[1]; imax:=1;
for i:=2 to n do
if xmax < x[i] then
begin
xmax:=x[i]; imax:=i; end;
writeln( i x[i] );
for i:=1 to n do writeln(i:3,x[i]:10);
writeln( xmax= , xmax:10, in pozitia , imax:3);
readln; {pentru a ramane in ecranul de lucru}{pentru a reveni
in editorul TP tastati ENTER}
end.
Instruciuni n Turbo Pascal


59


















































Testul de autoevaluare 1 - rspuns

5. Calculul valorii polinomului
EX10.PAS
program polinom;
var a : array[0..10] of real; {aceasta limiteaza gradul polinomului
la 10}
x0, p : real;
i, m : byte;
begin write( introdu gradul polinomului, m = ); readln(m);
writeln( introdu coeficientii a[i] in ordinea i=m,...,0);
for i := m downto 0 do read(a[i]);
write(introdu x0=); readln(x0);
p:=a[m];
for i:=m-1 downto 0 do p:=p*x0+a[i];
Writeln(p(, x0:5:1, )=, p:10:2); readln;
end.
6. Ordonare A
EX11.PAS
program ordonareA;
var x:array[1..100] of integer;
i, j, n:byte; a:integer;
begin
write( introdu numarul de elemente:); readln(n);
for i:=1 to n do
begin
write( introdu elementul intreg x[,i:3, ]=);
readln(x[i]);
end;
for j:=n-1 downto 1 do{asigura scaderea dimensiunii sirului}
for i:=1 to j do
if x[i]> x[i+1] then
begin
a:=x[i]; x[i]:=x[i+1]; x[i+1];=a;
end;
writeln( sirul ordonat este:);
for i:=1 to n do writeln(x[i]:5);
readln;
end.
Instruciuni n Turbo Pascal


60
Testul de autoevaluare 1 - rspuns


7. Ordonare B
EX12.PAS
program ordonareB;
label unu; var x:array[1..100] of integer;
i, k, n:byte; a:integer; f:text;
begin
assign(f,date.in); {fisierul date.in trebuie sa existe in
directorul curent}
reset(f); readln(f, n);
for i:=1 to n do read(f, x[i]);
unu: k := 0;
for i:=1 to n do
if x[i]> x[i+1} then
begin
a:=x[i]; x[i]:=x[i+1]; x[i+1];=a;
k:=k+1;
end;
if k > 0 then goto unu; writeln( sirul ordonat este:);
for i:=1 to n do write(x[i]:5, );
readln;
end.
8. Algoritmul Euclid
EX13.PAS
program euclid; var m, m1, n, n1, r : integer;
BEGIN
writeln( introdu m si n ca numere intregi, pozitive); read(m,n);
m1:=m; n1:=n;{in m1 si n1 pastram valorile m si n distruse de
algoritmul lui Euclid}
if m < n then
begin
r:=m; m:=n; n:=r;
end;
while n <> 0 do {impartiri repetate}
begin
r:=m mod n; m:=n; n:=r;
end;
if m > 1 then
writeln(m1:5, si ,n1:5, au cel mai mare divizor comun:, m) else
writeln(m1:5, si ,n1:5, nu au un divizor comun > 1);
end.






Instruciuni n Turbo Pascal


61
4.7. Lucrare de verificare
Rezolv problemele de mai jos. Trimite tutorelui rspunsurile pe care le consideri corecte.















































1.D un exemplu de instruciune compus. (0,5p)

2.Folosete instruciunea CASE... pentru a afla ultima zi din lun, oricare ar fi anul i
luna ca date input. (0,5p)

3.Numete instruciunile repetitive pe care le cunoti? (0,5p)

4.n ce ordine introduc datele x
i
cnd le citesc cu instruciunea
FOR i:=1 TO n DO read(x[i])? (0,5p)

5.n ce ordine introduc datele x
i
cnd le citesc cu instruciunea
FOR i:=n DOWNTO 1 DO read(x[i])? (0,5p)

6. crie, folosind REPEAT...UNTIL, urmtoarea secven de program
while n<>0 do begin
r:= m MOD n; m:=n; n:=r;
end;
m i n sunt dou numere ntregi i pozitive, m > n, r este o variabil
ntreag n care scriem restul mpririi lui m la n. La ieirea din ciclu
n m avem cel mai mare divizor comun al numerelor m i n. (0,5p)

7.nlocuiete n EX7.PAS ciclurile for i:=1 to n do cu WHILE i <= n do... i cu
REPEAT...UNTIL i > n (1p)

8.Elaboreaz programul care rezolv ecuaia de grad 2 0
2
= + + c x b x a cu orice
coeficieni a, b, c. (2p)

9.Scrie programul care citete dintr-un fiier tip text valorile numrului de termeni
dintr-un ir i termenii irului x
i
i gsete termenul cel mai mic din ir x
min
i poziia
sa n ir. (1p)

10.Consider dou matrici ptrate de ordin n 10. Elaboreaz un program TP n
care s citeti dintr-un fiier tip text valorile n i a
i,j
, b
i,j
cu i i j mergnd de la 1 la n
i s calculezi matricea produs C, ale crei elemente sunt date de

=
=
n
1 k
j , k k , i j , i
b a c .
(2p)
Indicaie: Recitete algoritmul pentru calculul unei sume.
n programul pe care-l vei elabora va trebui s foloseti 3 cicluri: - ciclul dup i (ciclul
exterior), pentru care i variaz de la 1 la n i indiciaz liniile, - ciclul dup j ( inclus n
ciclul dup i) n care j variaz i el de la 1 la n i este indicele coloanei; n acest ciclu
vei avea 3 instruciuni: iniializarea lui s la zero, ciclul dup k, n care se calculeaz

=

n
1 k
j , k k , i
b a i instruciunea c
i,j
= s .
Ai grij s plasezi corect parantezele de instruciune compus.
Not: se acord un punct din oficiu. Total:10 puncte
Instruciuni n Turbo Pascal


62
4.8. Termeni i expresii cheie











4.9. Bibliografie

1. Anioara Constantinescu, Simona erban, Victor Ionu Stoica, Limbajul
de programare Turbo Pascal Editura Anima, paginile 25-44.

Instruciune i declaraie n interiorul unui program TP
Instruciuni de atribuire
Instruciuni structurate ( compuse, condiionate,
repetitive)
Instruciuni pentru transferul datelor
Funcii i proceduri n Turbo Pascal


63
Unitatea de nvare 5
FUNCII I PROCEDURI N TURBO PASCAL


Cuprins Pagina

5. FUNCII I PROCEDURI N TURBO PASCAL 63
5.1. Obiectivele Unitii de nvare 5 - Funcii i proceduri n Turbo Pascal 64
5.2. Proceduri 64
5.2.1. Variabile locale i globale 65
5.2.2. Domeniul de valabilitate al obiectelor 66
5.2.3. Parametri 67
5.3. Funcii 70
5.4. Parametri funcii i parametri proceduri 72
5.5. Recursivitate 74
5.6. Test de autoevaluare 1 76
5.7. Rspunsuri la testul de autoevaluare 1 77
5.8. Termeni i expresii cheie. Formule cheie 79
5.9. Bibliografie 79
5.10. Lucrare de verificare 80
























Funcii i proceduri n Turbo Pascal


64
5.1. Obiectivele Unitii de nvare 5 - Funcii i proceduri n Turbo
Pascal






















Procedurile i funciile i permit structurarea programelor complexe.
Fiecare procedur sau funcie realizeaz complet o sarcin concret n
cadrul programului n care apare. Fiecare declaraie de procedur sau
funcie, ce apare n partea declarativ a unui program, are un antet urmat
de un bloc. O procedur este activat printr-o instruciune de procedur,
iar o funcie este activat ca orice funcie standard.

5.2. Proceduri

O declaraie de procedur asociaz un identificator cu un bloc de
procedur. Diagrama de sintax pentru cazurile simple, pe care le vei
studia, este prezentat n figura urmtoare:











Figura 5.1
Cnd vei termina de studiat acest capitol vei fi capabil :

s utilizezi diferite proceduri n elaborarea programelor
Turbo Pascal;

s operezi cu variabilele globale i locale;

s cunoti domeniul de valabilitate al obiectelor;

s defineti funcii proprii i s le utilizezi n programele
Turbo Pascal;

s aplici atunci cnd este cazul mecanismul recursivitii n
elaborarea unor programe Turbo Pascal.
Funcii i proceduri n Turbo Pascal


65
Reine c n antetul procedurii vei scrie identificatorul procedurii i, dac
trebuie, parametrii formali. n cadrul programului vei apela procedura prin
numele ei urmat de parametrii actuali dac acetia exist.

5.2.1. Variabile locale i globale

Urmrete programul de mai jos, care simplific o fracie de numere
ntregi ( dac numrtorul i numitorul au un divizor comun mai mare
dect unu). Vei vedea c se folosete o procedur (cmmdc) pentru
algoritmul de calcul al celui mai mare divizor comun al celor 2 numere
ntregi. Poi nelege procedura pentru c aceasta a fost prezentat cu
algoritm, schem logic i program TP n unitile de nvare anterioare.
Deoarece algoritmul lui Euclid, folosit pentru gsirea celui mai mare divizor
comun al numerelor a i b, modific n cursul execuiei - semnificaiile
numerelor iniiale a i b, acestea vor trebui copiate n x i y. Poi stabili cu
uurin etapele programului:
citirea i afiarea numrtorului a i numitorului b
copierea lui a n x i a lui b n y
algoritmul lui Euclid cere x > y
calculul cmmdc pentru numerele x i y
dac cmmdc > 1 atunci a i b se mpart la acesta
afiarea numrtorului i numitorului simplificate

EX14.PAS
PROGRAM fractie;
{simplificare fractie a/b prin impartire cu cmmdc}
VAR a, b, x, y, z : INTEGER;
PROCEDURE cmmdc; {calcul cmmdc cu algoritmul lui
Euclid}
begin
if x < y then { asigurare x > y }
begin
z:=x; x:=y; y:=z;
end;
while y<>0 do {impartiri repetate}
begin
z:=x mod y; x:=y; y:=z;
end;
end; {end procedura cmmdc}
BEGIN {programul principal}
write(introdu numaratorul si numitorul ca numere
intregi pozitive);
readln(a,b);
writeln(fractie nesimplificata: ,a,/,b);
x:=a; y:=b; cmmdc; {apelare procedura cmmdc}
if x>1 then{simplificare fractie}
begin
a:=a div x; b:=b div x;
writeln(fractie simplificata: ,a,/,b);
end
else writeln(fractia nu se poate simplifica);
END.
Variabila
global
este o
variabil a
crei
valoare
poate fi
folosit i
modificat
oriunde n
program
Funcii i proceduri n Turbo Pascal


66
Observ c n exemplul de mai sus declaraia de procedur nu conine o
parte de declaraie de variabile; toate variabilele, declarate n programul
principal, vor fi considerate i n procedur. Astfel de variabile sunt numite
variabile globale.
Exist posibilitatea de a scrie o parte de declaraie n interiorul procedurii
la fel ca n orice program n Turbo Pascal. Identificatorii introdui n partea
de declaraie a procedurii sunt locali, ei pot fi referii i cunoscui numai n
blocul n care au fost declarai, blocul reprezentnd domeniul acestor
identificatori.
Poi scrie programul de mai sus folosind variabilele locale, n modul
urmtor:

EX15.PAS
PROGRAM fractie2;
VAR a, b, c : integer; {variabile globale}
PROCEDURE cmmdc;
VAR x, y, z : integer; {variabile locale}
begin
x:=a; y:=b;
if x < y then
begin
z:=x; x:=y; y:=z;
end;
while y <> 0 do
begin
z:= x mod y; x:=y; y:=z;
end;
c:=x; { cmmdc e transmis intr-o variabila globala}
end; {end cmmdc}

BEGIN {programul principal}
write(introdu numaratorul si numitorul ca numere
intregi pozitive);
readln(a,b);
writeln(fractie nesimplificata: ,a,/,b);
cmmdc; {apelare procedura cmmdc}
if c>1 then {simplificare fractie}
begin
a:=a div c; b:=b div c;
writeln(fractie simplificata: ,a,/,b);
end {atentie nu puneti ; inainte de else}
else writeln(fractia nu se poate simplifica);
END.

5.2.2. Domeniul de valabilitate al obiectelor

Fiecare corp de procedur poate conine n partea sa de declaraie o
declaraie de procedur sau funcie ( numit procedur sau funcie inclus
sau local). Prin obiecte nelegem constante, tipuri, variabile, proceduri,
funcii identificate prin identificatorul asociat.
Reine regulile ce determin domeniul de valabilitate i durata de via ale
unui identificator:
Variabila
local este
o variabil
de program
al crei
domeniu de
valabilitate
este
restricionat
la un blocul
de cod n
care a fost
definit
Funcii i proceduri n Turbo Pascal


67
1. domeniul unui identificator l constituie blocul n care a fost declarat i
toate blocurile incluse n acest bloc

2. dac un identificator a, declarat ntr-un bloc x, este redeclarat ntr-un
bloc y atunci blocul y i blocurile incluse lui se exclud din domeniul de
valabilitate al identificatorului a, declarat n x. Urmrete acest joc n
programul prezentat mai jos

EX16.PAS
program test_var;
var x, y:real;
procedure citit_scris;
var x, u:real;
begin
write( introdu x si u, numere reale: ); readln(x, u);
writeln( x=,x:5:1; u=,u:5:1);
end;
begin
write( introdu x si y, numere reale: );
readln(x, y);
citit_scris; writeln(x=,x:5:1, y=,y:5:1);
end.

Dac ai introdus x=1.5, y=2.5 i apoi x=10.5 i u=20.5 pe ecran va apare:

x= 10.5 u= 20.5
valorile citite i scrise n procedura citit_scris
x=1.5 y=2.5
valorile citite nainte de apelarea procedurii i
scrise dup apelarea ei.

3. identificatorii de proceduri se supun acelorai reguli de domeniu ca i
ceilali identificatori, deci o procedur poate fi folosit doar n blocul n care
ea a fost declarat i n blocurile incluse n acesta

4. o procedur se poate referi la ea nsi (apelare recursiv)

Regulile 14 determin durata de via a identificatorilor. Reine c o
variabil declarat ca local ntr-o procedur exist numai n timpul
execuiei procedurii fiind creat la activarea procedurii prin alocarea de
memorie i distrus la ieirea din procedur prin eliberarea memoriei
ocupate.

5.2.3. Parametri

Folosirea parametrilor formali i permite apelarea acelorai proceduri n
etape diferite ale programului, cu valori diferite ale variabilelor.
Un parametru formal reprezint un obiect local al procedurii. Observ lista
parametrilor formali prezentat n diagrama de sintax n figura 5.2.
Funcii i proceduri n Turbo Pascal


68










Figura 5.2

Este important s reii c exist trei feluri de parametri (valoare, variabile,
variabile fr tip) caracterizai astfel:

1. un grup de parametri care la declarare sunt separai prin virgul, fr a
fi precedai de cuvntul cheie VAR dar urmai de identificatorul de tip.
Ansamblul lor este o list de parametri valoare.

2. un grup de parametri care la declarare sunt separai prin virgul, sunt
precedai de cuvntul cheie VAR i sunt urmai de identificatorul de tip.
Ansamblul lor este o list de parametri variabile.

3. un grup de parametri care la declarare sunt separai prin virgul, sunt
precedai de cuvntul cheie VAR dar nu sunt urmai de identificatorul de
tip. Ansamblul lor este o list de parametri variabile fr tip.

Urmrete rolul fiecrui tip de parametru :

1. Un parametru formal valoare acioneaz ca o variabil local pentru
procedur cu diferena c la activarea procedurii i ia valoarea iniial din
parametrul actual corespunztor. Din aceast cauz se mai numete i
parametru de intrare. Modificrile fcute asupra parametrului formal
valoare n procedur nu afecteaz valoarea parametrului actual
corespunztor. Parametrul actual trebuie s fie de un tip compatibil
atributiv cu tipul parametrului formal valoare.

2. Un parametru formal variabil este folosit cnd valoarea trebuie
transferat de la procedur la programul apelant. Parametrul actual
corespunztor n instruciunea procedur (care activeaz procedura )
trebuie s fie o referire de variabil. Orice schimbri ale parametrului
formal variabil sunt reflectate n parametrul actual. Tipul parametrului
actual trebuie s fie identic cu tipul parametrului formal variabil (aceast
restricie se poate evita prin folosirea unor parametri formali fr tip).

3. Cnd un parametru formal este o variabil fr tip, parametrul actual
corespunztor poate fi orice referire de variabil indiferent de tipul ei.

Studiaz programele EX17.PAS i EX18.PAS. Ele reprezint rescrierea
programului fracie2 cu procedura cmmdc, cu parametri valoare i apoi
cu parametri valoare i variabile.
Funcii i proceduri n Turbo Pascal


69
EX17.PAS
PROGRAM fractie3;
VAR a, b, c : integer;
PROCEDURE cmmdc(x, y:integer);
{x si y sunt parametrii valoare}
VAR z:integer;
begin
if x < y then
begin
z:=x; x:=y; y:=z;
end;
while y < > 0 do
begin
z:=x mod y; x:=y; y:=z;
end;
c:=x;
{ cmmdc e transmis intr-o variabila globala c}
end; { end cmmdc}

BEGIN {program principal}
write( introdu a si b, numere intregi, pozitive);
readln(a,b);
writeln(fractie nesimplificata: ,a,/,b);
cmmdc(a,b);
if c > 1 then
begin
a:= a div c; b:=b div c;
writeln(fractia simplificata: ,a,/,b);
end
else writeln(cmmdc=,c); readln;
END.

O nou form a programului , cu parametri valoare i variabile.

EX18.PAS
PROGRAM fractie4;
VAR a, b, c :integer;
PROCEDURE cmmdc(x, y :integer; VAR w:integer);
{x si y sunt parametri valoare, w este parametru
variabila}
VAR z:integer;
PROCEDURE swap;
begin
z:=x; x:=y; y:=z;
end; {end swap}
begin {begin cmmdc}
if x < y then swap; while y < > 0 do
begin
z:=x mod y; x:=y; y:=z;
end;
w:=x
end; {end cmmdc}
Funcii i proceduri n Turbo Pascal


70
BEGIN {program principal}
write( introdu a, b numere intregi, pozitive);
readln(a, b);
writeln( fractia nesimplificata: ,a,/,b);
cmmdc(a, b, c);
if c > 1 then
begin
a:= a div c; b:=b div c;
writeln(fractie simplificata:, a, /,b);
end
else writeln(cmmdc=,c);
readln;
END.

5.3. Funcii

n afara funciilor standard poi defini funcii proprii. Diagrama de sintax
pentru declararea unei funcii este urmtoarea:

Figura 5.3

Este important s reii urmtoarele caracteristici specifice funciilor:
lista parametrilor formali conine doar parametrii valoare (ei avnd rolul
datelor de intrare din declaraia de procedur) i parametrii variabil fr
tip.
tip_rezultat apare n plus fa de declaraia de procedur i
specific tipul rezultatului transmis prin numele funciei.

Deoarece corpul funciei este un bloc, el poate include declaraii de
constante, tipuri, variabile, proceduri i funcii locale. n partea executabil
a funciei trebuie s apar cel puin o atribuire prin care se transfer
identificatorului funciei valoarea rezultatului calculat.
Apelarea (activarea) funciei o vei face conform diagramei de sintax din
figura 5.4:

Figura 5.4
Funcii i proceduri n Turbo Pascal


71
Exemplu:
Programul de mai jos determin cele 4 rdcini reale ale ecuaiei
x4 9x3 2x2 + 120x 130 = 0. ( 5.1)
atunci cnd sunt date intervalele n care se afl rdcinile. Programul
conine o funcie care definete pe
) (x f
din ecuaia
0 ) ( = x f
i o
procedur care gsete rdcina ecuaiei n intervalul dat de valorile
parametrilor actuali ce nlocuiesc pe a i b la apelarea procedurii i scrie
pe ecran aceast valoare. Pentru lmuriri suplimentare poi consulta
referina bibliografic [5] .

EX19.PAS
PROGRAM rezec4;
LABEL zero;
VAR a, b : real; i:byte;
ai:array[1..4] of real;
{limita inferioara a intervalului in care se afla
o radacina}
bi:array[1..4] of real;
{ limita superioara a intervalului in care se
afla o radacina}
FUNCTION f(x:real):real;
begin
f:=sqr(x)*sqr(x) - 9*sqr(x)*x - 2*sqr(x) +
120.*x - 130.
end;
PROCEDURE solutie(a,b:real; i:byte);
label unu, doi;
CONST eps=1.E-05;
var c:real;
begin
unu: c:=(a+b)/2;
if f(c)=0 then
begin
writeln( x(,i:2,)=,c); goto doi;
end;
if f(a)*f(c) < 0 then b:=c else a:=c;
if abs(b-a)<eps then
begin
writeln( x(,i:2,)=,(a+b)/2); goto doi;
end
else goto unu;
doi: end;
BEGIN {main program}
writeln( introdu limitele a, b pentru cele );
writeln( 4 intervale in care se afla o radacina:);
writeln( (-4., -3.), (1., 2.), (4., 5.), (7., 8.)
);
for i:= 1 to 4 do
begin
zero: readln(a, b);
{ verifica corectitudinea intervalelor}
if f(a)*f(b) > 0 then
Funcii i proceduri n Turbo Pascal


72
begin
writeln(intervaldat gresit,reintrodu a si b: );
goto zero;
end;
ai[i]:=a; bi[i]:=b;
end;
for i:=1 to 4 do solutie(ai[i], bi[i],i);
readln;
END.

5.4. Parametri funcii i parametri proceduri

O procedur sau funcie poate apela o alt procedur sau funcie dac
aceasta din urm a fost deja declarat.
Sunt ns situaii n care numele i efectul procedurii sau funciei apelate
nu i sunt cunoscute la scrierea procedurii sau funciei apelante ci doar n
momentul execuiei programului. n aceste cazuri numele
procedurii/funciei apelate va fi transmis ca parametru.
De exemplu, funcia ce calculeaz prin metoda Simpson integrala

b
a
dx ) x ( f ( 5.2)
va avea antetul:
FUNCTION simpson(a, b:real; n:integer; f:fct):real;
Tipul fct este definit n programul apelant astfel:
TYPE fct=function(x:real):real;
Parametrii formali funcii i procedur pot fi numai parametri de tip valoare.
Funciile i procedurile standard nu pot fi transmise ca parametri actuali.
La apelarea unei funcii/proceduri care are printre parametri formali o
funcie sau procedur, parametrul actual corespunztor trebuie s fie un
identificator de funcie sau procedur.
Reine c folosirea parametrilor de tip procedur sau funcie se face sub
controlul directivei de compilare {$F+} aezat fie nainte de antetul
programului fie naintea declarrii funciei actuale i, n acest ultim caz, se
folosete la sfritul declarrii funciei directiva de compilare {$F-}.
Exemple
1. Calculeaz, folosind metoda Simpson [6], integrala
( ) ( )


=
2 /
0
2 2
sin sin 1
d
) ( K

( 5.3)
pentru = 30 i 60 grade.
Programul ce i este prezentat n continuare realizeaz calculul cerut.

EX20.PAS
Program calcul_int_simpson;
const pi=3.14159;
type fct=function(x:real):real;
var a, b, t1, t2, t, s1, s2:real;
{$F+} function k(x:real):real;
begin
k:=1/sqrt(1-sin(t)*sin(t)*sin(x)*sin(x))
Funcii i proceduri n Turbo Pascal


73
end;
{$F-}
function simpson(a,b:real;n:integer; f:fct):real;
var s, h:real; i:integer;
begin
h:=(b-a)/n/2; s:=f(a)+f(b); i:=1;
while i<2*n do
begin
if i mod 2 = 0 then s:=s + 2*f(a+i*h)
else s:=s + 4*f(a+i*h);
i:=i+1;
end;
simpson:=s*h/3;
end; {end simpson}

BEGIN { incepe programul principal}
a:=0; b:=pi/2;
t1:=30; t:=t1*pi/180; s1:=simpson(a, b, 10, k);
t2:=60; t:=t2*pi/180; s2:=simpson(a, b, 10, k);
writeln(K(,t1:4:1,)=,s1);
writeln( K(,t2:4:1,)=,s2); readln;
END.

i recomand s salvezi funcia simpson ntr-un fiier cu numele
simpson.inc. De cte ori vei avea nevoie de ea vei folosi directiva de
compilare {$i simpson.inc} nainte de BEGIN (programul principal);
n acest fel nu mai este nevoie s tastezi din nou funcia Simpson.

2. Calculeaz integrala
( )



=
1
1
2
13
2 7
dx
x 2
x 1 x
I ( 5.4)

Dac vei folosi funciile xp(x:real; p:integer):real, pentru
ridicarea lui x la o putere ntreag, fs pentru funcia de sub semnul
integralei i simpson pentru calculul integralei atunci programul care
rezolv problema propus se poate scrie:

EX21.PAS
Program calcul_integrala;
type fct=function(x:real):real;
var a, b, s1:real;
function xp(x:real; p:integer):real;
var i:integer; px:real;
begin
px:=1; for i:=1 to p do px:=px*x; xp:=px;
end;
{$F+} function fs(x:real):real;
begin
fs:=xp(x,7)*sqrt(1-sqr(x))/sqrt(xp(2-x,13));
end;
{$F-}
Funcii i proceduri n Turbo Pascal


74
{$i simpson.inc}

BEGIN
s1:=simpson(-1.,1.,10,fs);
writeln( integrala este: ,s1);
readln;
END.

5.5. Recursivitate

Exemple:

pentru numerele naturale, factorialul

>
=
=
0 n
1 0!
1)! - (n * n n!
( 5.5)
n ecuaiile fizicii matematice , polinoamele Legendre

( ) ( ) ( ) ( ) ( ) | |
( )
( )

=
=
=

u u P
1 u P
u P 1 m u P 1 m 2 u
m
1
u P
1
0
2 m 1 m m
( 5.6)
Apel recursiv nseamn folosirea numelui procedurii (funciei) n cadrul
textului procedurii (funciei); apelul recursiv este permis n Turbo Pascal.
Puterea recursiv st n posibilitatea de a defini o mulime infinit de
obiecte printr-o declaraie finit; un numr infinit de calcule poate fi descris
printr-un program recursiv finit chiar dac programul nu conine repetiii
explicite. Pentru terminarea programului, apelarea recursiv a unei
proceduri trebuie condiionat fie printr-o condiie ce la un moment dat
devine fals fie asociind procedurii un parametru n i apelnd-o recursiv
cu parametrul n-1.
Studiaz cele dou exemple de mai jos.

Fiind dat un numr ntreg i pozitiv scrie numrul obinut prin citirea cifrelor
numrului dat de la dreapta la stnga (numrul rsturnat).


EX22.PAS
program nr_rasturnat;
var n : longint;
procedure invers(n : longint);
begin
write(n mod 10);
if n div 10<> 0 then invers(n div 10);
end; {end procedura invers}

Funcii i proceduri n Turbo Pascal


75
begin
write( introdu numarul intreg: ); readln(n);
writeln(numarul dat este: ,n);
write(numarul rasturnt este: ); invers(n);
readln;
end.

2. Calculeaz
( ) ! k ! k n
! n
C
k
n

=
folosind forma recursiv a funciei fact(n)
=
k
n
C fact(n)/fact(n-k)/fact(k)

EX23.PAS
program combnk;
var n,k : byte; c : real;
FUNCTION fact(n:byte):longint;
begin
if n=0 then fact:=1 else fact:=n*fact(n-1);
end; {end functia fact}
begin
write( introdu n si k pentru a calcula combinari de
n luate cate k);
readln(n, k);
c:= fact(n)/ fact(n-k)/ fact(k);
writeln(comb. de , n:3, luate cate
,k:3,=,c:10:2);
readln;
end.

Este important s reii c recursivitatea poate fi ntotdeauna transformat
n iteraie. n majoritatea cazurilor forma nerecursiv a unui program este
mai eficient dect forma recursiv n ceea ce privete timpul de execuie
i memoria ocupat. Varianta recursiv este preferat acolo unde
nlocuirea ei cu iteraia ar cere un efort deosebit sau tehnici speciale de
programare, algoritmul pierzndu-i claritatea exprimrii.
Un exemplu n care folosirea funciei recursive e justificat este problema
partiiilor unui numr natural N.
Prin partiie a unui numr N se nelege totalitatea posibilitilor de
exprimare a numrului N ca o sum de alte numere naturale, fiecare din
ele nedepind o valoare M.
Ataeaz numrului de partiii o funcie P(n, m) definit astfel:

> + =
+ =
=
= =
m n dac m) m, - P(n 1) - m P(n, m) P(n,
m n dac 1) - n P(n, 1 m) P(n,
1 n sau
1 m dac 1 m) P(n,
( 5.7)
Funcii i proceduri n Turbo Pascal


76




1. Unde sunt declarate i definite procedurile i funciile ntr-un
program TP?



2. Care este principala deosebire ntre o procedur i o funcie?




3. Care este deosebirea ntre variabilele globale i cele locale ?
Varianta iterativ de implementare ar fi greoaie n timp ce varianta
recursiv este foarte simpl.

EX24.PAS

program partitii;
uses crt;
var L, k:integer;
function p(n, m:integer):longint;
begin
if (n=1) or (m=1) then p:=1
else
if n<=m then p:=1 + p(n, n-1)
else p:= p(n, m-1) + p(n-m, m); {observati acest
else legat de if imediat anterior}
end;{end function p}
begin {program principal}
clrscr;
write(introdu n si m, intregi si pozitive, n>m );
readln(L, K);
writeln( numar de partitii p(, L:3,,, K:3,)=,
p(L,K));
readln;
end.
Observ aici necesitatea de a scrie (n=1) i (m=1) pentru c operatorul de
relaie (=) are prioritate mai mic dect operatorul or (vezi tabelul de la
paragraful 3.5). Exemple cunoscute de apelare recursiv justificat sunt
programele ce rezolv probleme ca turnurile din Hanoi i aezarea pe
tabla de ah a opt regine.

5.6. Test de autoevaluare 1





















Funcii i proceduri n Turbo Pascal


77

Rspunsurile le gseti la pagina 77

5.7. Rspunsuri la testul de autoevaluare 1





1. Procedurile i funciile apar n partea declarativ a programului,
imediat dup variabilele globale.
2. Procedurile sunt activate printr-o instruciune de procedur n timp
ce funciile sunt activate ca orice funcie standard.
3. Variabila local este o variabil de program al crui domeniu de
valabilitate este restricionat la blocul de cod n care a fost declarat.
Variabila global este o variabil declarat n programul principal, a
crei valoare poate fi folosit i modificat oriunde n program chiar
i ntr-un bloc inclus dac nu a fost redeclarat n acesta. O
variabil cu acelai nume declarat ntr-un bloc, are valoarea
respectiv n interiorul blocului. La prsirea blocului variabila reia
valoarea din programul principal. Exemplul EX16.PAS
4. Recursivitatea este capacitatea unei rutine de a se autoapela.
Utilizarea eronat a recursivitii poate aduce un program n situaia
de a nu mai avea spaiu pentru execuie blocndu-l astfel.






4. Definete recursivitatea.




5. Elaboreaz un program care s afieze toate permutrile de n
elemente
Funcii i proceduri n Turbo Pascal


78



R
R
R

s
s
s
p
p
p
u
u
u
n
n
n
s
s
s
u
u
u
r
r
r
i
i
i


l
l
l
a
a
a


t
t
t
e
e
e
s
s
s
t
t
t
u
u
u
l
l
l


d
d
d
e
e
e


a
a
a
u
u
u
t
t
t
o
o
o
e
e
e
v
v
v
a
a
a
l
l
l
u
u
u
a
a
a
r
r
r
e
e
e


-
-
-


C
C
C
o
o
o
n
n
n
t
t
t
i
i
i
n
n
n
u
u
u
a
a
a
r
r
r
e
e
e

5. PROGRAM permutari scrise
USES CRT
CONST lim=20;linii_in_pagina=22
VAR n,l:Integer;a:Array[1..lim] of 1 ..lim;
Procedure permutari(k:Integer);
Var I,x:integer;c:Char;
BEGIN
If k=1 then
Begin
If l> linii_in_pagina Then
Begin write (Apasa o tasta)
c:= readkey;clrscr;l:=0
end;
For i:=1 to n
Do write(a[i]:2,);writeln;l:=l+1
End
Else
For i:=1 to k do
Begin
x:=a[i]; a[i]:=a[k];a[k]:=x;
Permutari(k-1)
x:=a[i]; a[i]:=a[k];a[k]:=x;
End
End;
Begin {program principal}
Writeln( scrie permutarile d n elemente)
Write ( n=);readln(n)
For l:=1 to n Do
a[l]:=l;l:=2;
permutari(n)
End
Funcii i proceduri n Turbo Pascal


79
5.8. Termeni i expresii cheie. Formule cheie




























5.9. Bibliografie

1. Anioara Constantinescu, Simona erban, Victor Ionu Stoica, Limbajul
de programare Turbo Pascal Editura Anima, paginile 69-88.

Termeni i expresii cheie
Proceduri;
Variabile locale; variabile globale;
Domeniul de valabilitate al obiectelor;
Parametru valoare; parametru variabil;
parametru variabil fr tip;
Funcii definite de utilizator;
Recursivitate.
Formule cheie
Proprietile recursive ale factorialului

>
=
=
0 n
1 0!
1)! - (n * n n!

Recursivitatea Polinoamelor Legendre
( ) ( ) ( ) ( ) ( ) | |
( )
( )

=
=
=

u u P
1 u P
u P 1 m u P 1 m 2 u
m
1
u P
1
0
2 m 1 m m

Funcii i proceduri n Turbo Pascal


80
5.10. Lucrare de verificare

Rezolv problemele de mai jos. Trimite tutorelui rspunsurile pe care le
consideri corecte

















































1. Care este deosebirea ntre parametrii valoare i parametrii
variabile? (1p)

2. Cnd trebuie folosii parametri procedurali? (1p)

3. Scrie un program care s conin o procedur pentru calculul unei
sume de valori . Programul va trebui s foloseasc aceast
procedura de calcul al sumei pentru a face sumele din programul aflat
n fiierul EX7.PAS (3p)
4. Elaboreaz un program care:

s conin o procedur de nmulire a dou matrici
procedure promat(x:matrice; lx, cx:byte; y:matrice;
ly, cy:byte; VAR z:matrice; VAR lz, cz:byte);
tipul matrice e definit n programul principal type
matrice=array[1..10,1..10] of real;
s citeasc dintr-un fiier tip text date despre matricea a:
la=numrul de linii, ca=numrul de coloane i a[i, j]=elementele
matricei a (i=1...la, j=1...ca)
s citeasc din acelai fiier date despre matricea b:
lb=numr de linii, cb=numr de coloane i b[i, j]=elementele matricei
b (i=1...lb, j=1...cb)
s citeasc din acelai fiier date despre matricea c:
lc=numr de linii, cc=numr de coloane i elementele matricei c[i,
j](i=1...lc, j=1...cc)

s calculeze matricea produs d=a*b i apoi matricea produs e=d*c
folosind procedura promat

s scrie cele 2 matrici produs, d i e ntr-un fiier text.
(4p)
Indicaii :
a) Redacteaz rspunsurile folosind un editor de texte
b) Pentru itemul 4 pregtete un fiier care s conin matricile pe
care le operezi. Scrie rezultatul executrii programului ntr-un
fiier text. Introdu n textul rspunsurilor coninutul fiierului cu
date de intrare i coninutul fiierului cu date de ieire.

Not: se acord un punct din oficiu Total 10 puncte
Grafic n Turbo Pascal


81
Unitatea de nvare 6
Grafic n turbo pascal


Cuprins Pagina

6. GRAFIC N TURBO PASCAL 81
6.1. Obiectivele Unitii de nvare 6 Grafica n Turbo Pascal 82
6.2. Unit-uri standard 82
6.3. Unit-ul GRAPH 83
6.3.1. Iniializarea modului grafic 83
6.3.2. Tratamentul erorilor grafice 85
6.3.3. Definirea ferestrelor n grafica TP 85
6.3.4. Reprezentarea punctelor n grafica TP 86
6.3.5. Reprezentarea liniilor- culori, stiluri grosimi; deplasarea n fereastra 87
6.3.6. Reprezentarea cercului a elipsei Umplerea suprafeelor nchise. 88
6.3.7. Reprezentarea liniilor poligonale 89
6.3.8. Scrierea grafic 90
6.4. Test de autoevaluare 1 96
6.5. Rspunsuri la testul de autoevaluare 1 97
6.6. Termeni i expresii cheie. 98
6.7. Lucrare de verificare 98
6.8. Bibliografie 98






Grafic n Turbo Pascal


82
6.1. Obiectivele Unitii de nvare 6 Grafica n Turbo Pascal






















Pentru grafica n TP se folosete unit-ul GRAPH. Prin unit vei nelege o
colecie de constante, declaraii de tip i variabile, proceduri i funcii, care
poate fi compilat separat i care poate fi utilizat de un program principal
prin specificarea numelui unit-ului ntr-o clauz uses. Lungimea unui unit
este limitat la 64Kb dar un program poate folosi un numr arbitrar de
unit-uri funcie doar de memoria disponibil a calculatorului folosit. Prin
utilizarea unit-urilor crete viteza de compilare.

6.2. Unit-uri standard

Exist opt unit-uri standard n Turbo Pascal, fiecare cu un profil i o
structur bine delimitate: SYSTEM, DOS, OVERLAY, CRT, GRAPH,
PRINTER, GRAPH3, TURBO3.

Unit-ul System conine toate procedurile i funciile standard din Turbo
Pascal. El se ncorporeaz automat n toate programele fr a fi necesar
o clauz Uses pentru el;

Unit-ul Dos conine proceduri i funcii echivalente cu apelurile DOS cele
mai obinuite: citire de date, sistemul de ntreruperi, etc. Folosirea lui se
face cu clauza Uses Dos;

Unit-ul Overlay permite folosirea tehnicii de scriere a programelor mari
din buci. Se folosete cu clauza Uses Overlay;.

Aceste trei unit-uri se gsesc n fiierul Turbo.tpl

Cnd vei termina de studiat acest capitol vei fi capabil :

s utilizezi proceduri din UNIT-ul GRAPH


s operezi cu ferestre n ecranul grafic TP stabilindu-le
dimensiunile, culorile precum i caracteristicile obiectelor
grafice interioare


s cunoti modul de stabilire a proprietilor pentru punct,
linie, cerc, linie poligonal.

s aplici cunotinele dobndite pentru a desena pe ecranul
grafic TP figuri i grafice.
Grafic n Turbo Pascal


83
Unit-ul Crt (character) permite utilizarea funciilor i procedurilor pentru
comanda funcionrii ecranului alfanumeric: tergerea ecranului cu
procedura clrscr (clear screen), funciile KeyPressed:boolean; i
ReadKey:char. Pentru anunarea folosirii unitului vei folosi clauza Uses
crt dup antetul programului.

Unit-ul Graph conine procedurile i funciile grafice. Acest unit se
afl n fiierul Graph.tpu. Subprogramele din acest unit au nevoie de
informaiile din fiiere de tipul *.BGI i *.CHR.

i vei anuna intenia de folosire n programul pe care-l construieti a
unitului Graph prin scrierea (dup antetul programului) a clauzei Uses
Graph;

Unit-ul Printer permite redirectarea scrierilor n fiierul text cu numele lst
direct la imprimant.

Unit-urile Graph3 i Turbo3 permit folosirea subprogramelor grafice din
versiunea a 3-a a compilatorului Turbo Pascal.

Exemplu: Uses Dos, Crt, Graph;

Programele n Turbo Pascal permit att folosirea unit-urilor standard
enumerate mai sus ct i scrierea i folosirea unor unit-uri personale, pe
care i le poi construi .

6.3. Unit-ul GRAPH

Programele care utilizeaz subprogramele din acest unit trebuie s aib
directiva Uses Graph; dup antetul programului.
Subprogramele din unit-ul Graph realizeaz:

1. iniializarea modului grafic

2. tratarea erorilor grafice

3. definirea de ferestre i pagini

4. reprezentarea punctelor

5. reprezentarea liniilor

6. reprezentarea de cercuri i alte curbe

7. reprezentarea de poligoane i haurri

8. scrierea grafic

Dimensiunile ecranului grafic folosit de TP i modul n care sunt fixate
coordonatele pe acest ecran rezult din imaginea din figura 6.1. Toate
dimensiunile sunt date n pixeli.
Grafic n Turbo Pascal


84













Figura 6.1 Ecranul pentru grafic Turbo Pascal

6.3.1. Iniializarea modului grafic

Pentru a iniializa modul grafic poi folosi urmtoarea secven de
instruciuni:

1.procedure grstart;
begin
gd:=detect; InitGraph(gd, gm, \TP\BGI);
If graphresult <>grok then halt(1);
end;

Trebuie s te asiguri c ai plasat antetul procedurii InitGraph:

Procedure InitGraph( var gd:integer; var gm:integer;
cd:string);

n care gd i gm reprezint codul corespunztor driverului i modului
grafic iar cd reprezint calea spre fiierele de grafic.
Vei iniializa Variabila gd cu constanta predefinit
const detect=0
pentru a se omite apelarea procedurii DetectGraph naintea apelrii
procedurii InitGraph.

Pixel:
Prescurtare de la picture PIX ELEment. Element de imagine.
Fiecare pixel este unul din punctele care formeaz reeaua
bidimensional a unei imagini plane pe hrtie sau monitor. Fiecare
pixel este desenat individual pentru a compune imaginea total de
pe hrtie sau ecran. Pixelul este elementul ultim pe care hardware-
ul sau software-ul de afiare sau tiprire l pot manipula.
Grafic n Turbo Pascal


85
2.Procedura DetectGraph cu antetul:
Procedure DetectGraph(var gd, gm:integer);
determin valorile pentru variabilele gd i gm.

3. Funciile GetMaxX cu antetul Function GetMaxX:integer;
i GetMaxY cu antetul Function GetMaxY:integer;
dau valorile maxime pentru X i, respectiv, Y n modul grafic actual. Pentru
ecranul setat la o imagine standard cu 640x480 pixeli aceste valori sunt
respectiv 639 i 479.

4. Funcia GetDriverName, apelat dup activarea procedurii InitGraph,
d numele driverului grafic actual. Antetul ei este:
Function GetDriverName:string;

5. Funcia GetGraphMode d codul modului grafic actual. Antetul ei este:
Function GetGraphMode:integer;
Valoarea ei variaz ntre 0 i 5 n funcie de driverul grafic actual.

6. Procedura GetAspectRatio d rezoluia ecranului grafic din care se
poate calcula raportul Xasp/Yasp ce d alungirea formelor circulare;
raportul Xasp/Yasp e necesar la unele rotunjiri n trasarea cercurilor,
sectoarelor de cerc, arcelor. Procedurile folosite pentru aceasta sunt:
GetAspectRatio(var Xasp, Yasp:word);
SetAspectRatio(Xasp, Yasp:word);

7. Revenirea la ecranul alfanumeric se face cu procedura CloseGraph

6.3.2. Tratamentul erorilor grafice

Erorile n modul grafic sunt returnate de funcia GraphResult sub forma
unui cod de eroare. Dac codul returnat este zero nseamn c
operaia grafic a reuit; dac codul este mai mic dect zero nseamn c
operaia grafic a euat. Antetul funciei este:

function GraphResult:integer;
Cteva valori predefinite ale funciei sunt:
Const
grOK=0; {operaie grafic reuit, nici o eroare}
grNoInitGraph=-1; { grafica BGI neinstalat cu
InitGraph}
grNotDetected=-2; {grafica hardware nedetectat}
grFileNotFound=-3; {fiierul driver *.BGI nu a fost
gsit}
De notat c GraphResult e pus la zero dup ce este apelat aa c
rezultatul trebuie stocat ntr-o variabil temporar pentru a fi testat.

6.3.3. Definirea ferestrelor n grafica TP

Prin fereastr vei nelege o zon dreptunghiular a ecranului (n particular
tot ecranul). Fereastra sau ferestrele sunt folosite pentru
gruparea informaiilor grafice.
Grafic n Turbo Pascal


86
De regul fiecare fereastra va fi ocupat cu o anumit categorie de
informaii grafice sau literale. Pentru a defini i lucra cu ferestre n
grafica TP se folosesc procedurile:
procedure SetViewPort(x1,y1,x2,y2:integer;
clip:boolean);
unde:
x1, y1 coordonatele absolute stnga-sus ale ferestrei active
x2, y2 coordonatele absolute dreapta-jos ale ferestrei active
clip determin dac liniile din afara ferestrei sunt sau nu
vizibile.

Constantele predefinite pentru stabilirea valorii variabilei clip sunt:
const
clipon=true; {tierea este activ; exteriorul este
invizibil}
clipoff=false; {tierea este pasiv; exteriorul este
vizibil}

Procedura definete fereastra grafic.

procedure GetViewSettings(var infofer:ViewPortType);
permite obinerea de informaii referitoare la fereastra actual i felul
tierii. Variabila infofer este de tipul predefinit ViewPortType i va conine
informaii referitoare la fereastr.


Type ViewPortType = RECORD
x1, y1, x2, y2 : integer;
clip : boolean;
END;

procedure ClearDevice;
terge ecranul grafic actual i poziioneaz pointerul n poziia (0, 0).

procedure ClearViewPort
terge fereastra grafic actual. Culoarea ferestrei va fi culoarea de
fond; este apelat procedura rectangle pentru trasarea unui dreptunghi
corespunztor ferestrei i pointerul este mutat n colul stnga - sus al
ferestrei, punctul de coordonate relative (0, 0).

6.3.4. Reprezentarea punctelor n grafica TP

Pentru a desena puncte se folosete procedura :
procedure PutPixel(x, y :integer ; cul :word) ;
Execuia ei i va produce un punct, de culoarea dat de variabila cul n
punctul de coordonate x, y.
Variabila cul ia valori ntre zero i valoarea dat de funcia GetMaxColor,
(max=15 pentru o setare a plcii grafice la adncime de culoare 16 ).
Antetul funciei este :
function GetMaxColor:word;
Grafic n Turbo Pascal


87
6.3.5. Reprezentarea liniilor- culori, stiluri i grosimi; deplasarea n
fereastra grafic

Pentru a desena linii se folosesc procedurile:
Line(x1,y1,x2,y2:integer):
care deseneaz o linie ntre punctele de coordonate (x1,y1) i (x2,y2).

Atenie: dup trasarea liniei pointerul nu rmne n punctul de coordonate
(x2,y2) ci revine la poziia (0,0). Nu poi conta pe poziionarea pointerului
n ultimul punct desenat aa cum se ntmpl la executarea altor
programe de grafic.

Culoarea n care este desenat linia poate fi stabilit cu procedura:
SetColor(color:word);
Implicit, adncimea de culoare este 16. Culorile de desen merg de la 0 la
15. n general adncimea de culoare este dependent de driverul grafic
curent i de modul grafic curent. Culorile sunt definite pentru adncimea
de 16 culori conform informaiilor de mai jos prin fixarea valorii pentru
CONST

black=0; blue=1; green=2;
cyan=3; red=4; magenta=5;
brown=6; lightgray=7; darkgray=8;
lightblue=9; lightgreen=10; lightcyan=11;
lightred=12; lightmagenta=13; yellow=14;
white=15; blink=128;

Vei stabili stilul i grosimea liniei cu procedura:
SetLineStyle(linestyle:word;pattern:word;
thickness:word);

Constantele pentru LineStyle pot stabili c linia este plin, sau punctat
sau linie punct, sau linie ntrerupt , precum i grosimea liniei. Astfel
CONST poate avea valorile date mai jos pentru fixarea stilului liniei
solidln=0;
dottedln=1;
centerln=2;
dshedln=3;
userbitln=4; {user-define line style}.
Pentru fixarea grosimii liniei ai la dispoziie valorile :
CONST
normwidth=1;
thickwidth=3;
Variabila pattern este ignorat ct timp linestyle este diferit de 4. Cnd
linestyle = 4, ceea ce nseamn c linia este trasat dup un model
decis de utilizator, linia este trasat folosind un model 16-bit definit de
parametrul Pattern. De exemplu dac pattern=$AAAA atunci modelul 16-
bit arat astfel:
1010101010101010 {pentru normwidth}
Grafic n Turbo Pascal


88
1010101010101010
1010101010101010
1010101010101010 {pentru thickwidth}

LineTo(x, y:integer);
deseneaz o linie din poziia curent a pointerului pn la un punct de
coordonate (x, y). Aceleai observaii pentru culoare i stil ca la procedura
Line.

LineRel(Dx, Dy:integer);
deseneaz o linie din poziia curent a pointerului pn la un punct definit
de distanele Dx, Dy. Aceleai observaii pentru culoare i stil ca la
procedura Line.

Poi deplasa pointerului n punctul de coordonate (x, y) cu comenzile :

MoveTo(x, y:integer):care mut pointerul din poziia curent n
punctul de coordonate (x,y).
Dac este definit o fereastr, valorile (x, y) sunt relative la fereastr.
Poi de asemenea muta pointerul n mod relativ, la distane date fa de
poziia curent. Comanda
- MoveRel(Dx, Dy:integer);
duce pointerul din poziia curent la un punct aflat la distanele Dx, Dy de
poziia curent.

6.3.6. Reprezentarea cercului , a arcului de cerc, a elipsei , a sectorului
de cerc. Umplerea suprafeelor nchise.

Pentru a desena un cerc, un arc de cerc, un arc de elips sau un sector
de cerc foloseti urmtoarele proceduri.

procedure Circle(x, y:integer; raza:word);
care i deseneaz un cerc cu centru n punctul de coordonate (x, y) i cu
raza dat.

procedure Arc(x, y:integer; ustart, ufinal, r:word);
i deseneaz un arc de cerc cu centrul n punctul de coordonate (x, y) i
raza dat. Arcul ncepe de la unghiul ustart i se sfrete la unghiul
ufinal, ambele unghiuri date n grade i mergnd n sens trigonometric.

procedure Ellipse
(x,y:integer;ustart,ufinal:word;xraza,yraza:word);
i deseneaz un arc de elips pentru care (x, y) sunt coordonatele
centrului, ustart, ufinal sunt unghiurile de nceput i sfrit luate n sens
trigonometric, iar xraza, yraza sunt axele orizontal i, respectiv, vertical
ale elipsei.

procedure PieSlice(x, y:integer; ustart,
ufinal,r:word); deseneaz i haureaz un sector de cerc. Modelul i
culoarea de haurat sunt definite cu:
Grafic n Turbo Pascal


89
procedure SetFillStyle(pattern:word; color:word);
Modelul implicit este compact (solid) i culoarea implicit este culoarea cu
cod maxim din palet. Constantele a cror valoare determin stilul
haurrii sunt:

CONST
emptyfill=0; {umple in culoarea de fond}
solidfill=1; {umple cu culoare\}
linefill=2; {umple aria cu modelul- - -}
ltslashfill=3; {umple aria cu modelul /// }
slashfill=4; {umple aria cu modelul ///
mai groase }
bkslashfill=5; {umple aria cu modelul \\\ }
ltbkslashfill=6; {umple aria cu modelul \\\
dar mai subtiri}
hatchfill=7; {umple aria cu modelul ||| }
xhatchfill=8; {umple aria cu modelul xxx }
... ...
userfil=12; {modelul e dat de programator}

procedure SetFillPattern
(pattern:FillPatternType;color:word);
umple figura grafic cu un model definit de programator n culoarea
definit de parametrul color.

Type FillPatternType=array[1..8] of byte;

Motivul de umplere ( elementul grafic folosit pentru realizarea umplerii) se
bazeaz pe valoarea celor 8 bytes (octei) coninui n vectorul pattern;
fiecare octet corespunde la 8 pixeli de motiv. Dac un bit are valoarea 1
pixelul are culoarea cernelii, dac el are valoarea 0 pixelul are culoarea
fondului.

procedure FillEllipse(x, y:integer; xraza,
yraza:word); deseneaz i haureaz o elips n culoarea curent i
modelul de haurare definit de procedurile SetFillStyle sau
SetFillPattern.

6.3.7. Reprezentarea liniilor poligonale

Pentru a desena poligoane se folosesc urmtoarele proceduri.

rectangle(x1, y1, x2, y2:integer);
care i deseneaz un dreptunghi pentru care:
(x1, y1) sunt coordonatele colului stnga-sus
(x2, y2) sunt coordonatele colului dreapta-jos

Bar(x1, y1, x2, y2:integer);
deseneaz un dreptunghi i l haureaz n culoarea i modelul stabilite cu
procedurile SetFillStyle sau SetFillPattern. (x1, y1) i (x2, y2)
au aceeai semnificaie ca n procedura rectangle.
Grafic n Turbo Pascal


90
Bar3d(x1, y1, x2, y2:integer; ad:word; top:boolean);
deseneaz un paralelipiped dreptunghi n relief i l haureaz n culoarea
i modelul curente.(x1, y1) i (x2, y2) au aceeai semnificaie ca n
procedurile rectangle i bar; ad este adncimea corpului.

top = TRUE nseamn c deasupra paralelipipedului se poate aeza un
alt paralelipiped
top = FALSE nseamn c deasupra paralelipipedului nu se poate aeza
alt paralelipiped. Exist valori predefinite ale constantei de fixare a
reliefului i anume :
topon = TRUE;
topoff=FALSE;

DrawPoly(nrpct:word; var puncte);
deseneaz o linie poligonal n culoarea i stilul curente.
nrpct reprezint numrul vrfurilor liniei poligonale
puncte este un parametru variabil fr tip care conine coordonatele
fiecrui vrf n linia poligonal. De notat c pentru a desena o figur
nchis cu n vrfuri trebuie s se transmit n+1 coordonate ; punctul de
nceput al liniei trebuie s coincid cu cel final.
puncte[n+1]=puncte[1]

procedure FillPoly(nrpct:word; var puncte);
deseneaz i haureaz un poligon n culoarea i modelul curente.

6.3.8. Scrierea grafic

Pentru scrierea textelor n modul grafic sunt incluse fonturi (tipuri de
caractere) 8*8 bit-mapped i fonturi vectoriale.
Un caracter 8*8 bit-mapped este definit de o matrice 8*8 pixeli.
Un font vectorial este definit de o serie de vectori care spun sistemului
grafic cum s deseneze caracterul.
Scrierea i selecia caracterelor se face cu urmtoarele proceduri:

SetTextStyle(font:word; direction:word;
charsize:word);
n funcie de valorile pe care le vei atribui constantelor pentru caracter,
direcie i dimensiune vei obine rezultatele descrise n cele ce urmeaz.

CONST

DefaultFont=0; {8*8 bit-mapped font}
TriplexFont=1; {font vectorial}
SmallFont=2; {font vectorial}
SansSerifFont=3; {font vectorial}
GothicFont=4; {font vectorial}

HorizDir=0; VertDir=1;
Grafic n Turbo Pascal


91
SetUserCharSize(multX, divX, multY, divY:word)
permite programatorului s varieze lrgimea i nlimea caracterului n
cazul folosirii fonturilor vectoriale.
multX : divX este raportul cu care trebuie nmulit limea normal
pentru fontul activ
multY : divY este raportul cu care trebuie nmulit
nlimea normal pentru fontul activ
De exemplu, pentru a face fontul de 2 ori mai lat se folosete 2 pentru
multX i 1 pentru divX.

Apelul acestei proceduri pune mrimea caracterului curent la valoarea
dat.

Textul grafic se realizeaz apelnd una din procedurile urmtoare:
OutText(text:string); unde text este textul trimis la ieire la
poziia curent a pointerului folosind fontul curent pus cu SetTextStyle.

OutTextXY(x, y:integer; text:string);
textul este scris ncepnd din punctul de coordonate (n pixeli) (x, y).
Fr apelarea procedurii SetTextStyle scrierea se face cu fontul
DefaulFont.

Ca s te familiarizezi cu utilizarea informaiilor despre grafic pe care le-ai
studiat pn aici, i propunem s exersezi utilizarea funciilor i
procedurilor grafice cu un program care i propune ca pe ecranul
monitorului s se deseneze patru ferestre, fiecare ocupnd un sfert de
ecran. n prima fereastr trebuie s se scrie coordonatele colurilor stnga-
sus i dreapta-jos i valoarea variabilei clip; n ea trebuie s scrii i c este
prima fereastr. n a doua fereastr i propunem s desenezi linii paralele
n diverse stiluri, grosimi i culori. n a treia fereastr vei desena un cerc, o
elips i un sector de cerc - ultimele haurate n diferite stiluri i culori. n a
patra fereastr vei desena un triunghi gol i un triunghi haurat. Vei aranja
culoarea fondului n alb i vei folosi culoarea albastra a cernelii cu care
scrii i desenezi. ncearc s scrii singur programul. Compar rezultatul
obinut de tine cu cel pe care l obii executnd programul listat mai jos.
Urmrete cu atenie alegerile pentru valorile constantelor care determin
aciunile procedurilor grafice.

EX25.PAS

program ex_viewport;
uses graph;
var gd,gm,centrux,centruy,i:integer;
xmax, ymax, maxcolor:integer;
inf:viewporttype;
cx1,cy1,cx2,cy2:string[5];
const cstil:array[1..3]of string=
(dotted,centerln,dashedln);
triunghi:array[1..4] of pointtype=
((x:10;y:50),(x:150;y:50),
Grafic n Turbo Pascal


92
(x:150;y:100),(x:10;y:50));
triunghi1:array[1..4] of pointtype=
((x:170;y:100),(x:270;y:100),
(x:270;y:200),(x:170;y:100));
begin
gd:=detect; initgraph(gd,gm,\tp\bgi);
centrux:=getmaxx div 2;
centruy:=getmaxy div 2;
setbkcolor(15); setcolor(1);
rectangle(10,10,centrux-10,centruy-10); {prima
fereastra}

setviewport(10,10,centrux-10,centruy-10,clipon);
getviewsettings(inf);
str(inf.x1,cx1); str(inf.y1,cy1);
str(inf.x2,cx2); str(inf.y2,cy2);

outtextxy(10,30,cx1);outtextxy(70,30,cy1);
outtextxy(10,50,cx2);outtextxy(70,50,cy2);
outtextxy(10,70,clipon);
outtextxy(10,100,prima fereastra);
xmax:=centrux-20;
ymax:=centruy-20;
maxcolor:=getmaxcolor;
randomize;
for i:=1 to 200 do
putpixel(random(xmax)+1,random(ymax)+1,randommaxcolor
)+1);
readln;
{revenirea la ecran}
setviewport(0,0,getmaxx,getmaxy,clipon);
rectangle(centrux+10,10,getmaxx-10,centruy-10);
{a doua fereastra}
setviewport(centrux+10,10,getmaxx-10,centruy-
10,clipon);
line(10,10,50,10);
outtextxy(60,10,standard);
setlinestyle(dottedln,0,normwidth);
line(10,50,50,50);outtextxy(60,50,dottedline,
normwidth); setlinestyle(dottedln,0,thickwidth);
line(10,90,50,90);outtextxy(60,90,dottedline,
thickwidth); setlinestyle(userbitln,$c3,thickwidth);
line(10,130,50,130);
outtextxy(60,130, userbitln, thickwidth);
for i:=1 to 3 do
begin
setcolor(i+2);
setlinestyle(i,0,normwidth);line(10,130+20*i,60,20*i+13
0); outtextxy(140,20*i+130,cstil[i]);
setlinestyle(i,0,thickwidth);line80,20*i+130,130,20*i+1
30);
Grafic n Turbo Pascal


93
end;
readln;
setlinestyle(0,0,1);setcolor(1);
{revenirea la ecran}
setviewport(0,0,getmaxx,getmaxy,clipon);
{a reia fereastra}
rectangle(10,centruy+10,centrux-10,getmaxy-10);
setviewport(10,centruy+10,centrux-10,getmaxy-
10,clipon);
circle(60,60,50); setfillstyle(7,3);
fillellipse(160,120,60,40);
setfillstyle(4,5); pieslice(250,170,0,270,40); readln;
setcolor(1); {revenirea la ecran}
setviewport(0,0,getmaxx,getmaxy,clipon); { a patra
fereastra} rectangle(centrux+10,centruy+10,getmaxx-
10,getmaxy-10);
setviewport(centrux+10,centruy+10,getmaxx-10,getmaxy-
10,clipon); setfillstyle(2,4);
drawpoly(sizeof(triunghi) div sizeof(pointtype),
triunghi);
fillpoly(sizeof(triunghi) div sizeof(pointtype),
triunghi1);
readln;
closegraph; end.

Not: funcia Sizeof(x) d numrul de octei ocupat de argument; x
poate fi o referire de variabil sau un identificator de tip.
Rezultatul executrii programului este producerea pe ecranul monitorului a
unei imagini identice cu aceea prezentat n figura 6.2.


Figura 6.2
Grafic n Turbo Pascal


94
Utilizarea graficii n TP este o facilitate agreabil pentru aplicaiile
matematice i pentru reprezentarea rezultatelor studiilor de fizic.
Urmtorul program reprezint grafic funcia:

130 - 120x 2x - 9x - x (x) f
2 3 4
+ =
ntr-un sistem de coordonate reprezentat de asemenea. Rezultatul grafic
produs de program este dat n figura 6.3.

EX26.PAS

program repr_fct;
uses graph;
const n=48; dx=0.25;
type vector=array[1..n]of real;
var i:byte;
xarg, yfv:vector;
xp, yp:array[1..n] of integer;
xpmax, ypmax, xpmin, ypmin, xscal, yscal, xf:real;
xreper:array[1..3] of integer;

function xlap(p:byte; x:real):real;
var i:byte; xp:real;
begin
xp := 1;
for i :=1 to p do xp := xp * x;
xlap := xp;
end;
fnction f(x:real):real;
begin
f := xlap(4, x)-9*xlap(3, x)-2*xlap(2, x)+120*x-
130.;
end;
procedure gr_fct;
var i:byte; gd, gm :integer;
begin
gd := detect; Initgraph(gd, gm, \tp\bgi);
setbkcolor(15); setcolor(1);
setviewport(0, 0, 630, 470,clipon);
setlinestyle(1, 1, 1); line(0, 225, 600, 225);
line(300, 0, 300, 440);
line(xreper[1],220,xreper[1],230);
outtextxy(xreper[1]-10,240,-4);
line(xreper[2],220,xreper[2],230);
outtextxy(xreper[2]-10,240,4.);
line(xreper[3],220,xreper[3],230);
outtextxy(xreper[3]-10,240,8.);
outtextxy(60,50,x^4-9x^3-2x^2+120x-130);)
for i := 1 to n do circle(xp[i],yp[i],2); r
readln;
closegraph;
end;
Grafic n Turbo Pascal


95
BEGIN
xpmax:=-1E30; xpmin:=1E30; ypmax:=-1E30; ypmin:=1E30;
for i := 1 to n do
begin
xarg[i] := -4. + i*dx; xf:=xarg[i]; yfv[i]:=f(xf);
if xpmax < xarg[i] then xpmax := xarg[i];
if xpmin > xarg[i] then xpmin := xarg[i];
if ypmax < yfv[i] then ypmax := yfv[i];
if ypmin > yfv[i] then ypmin :=yfv[i];
end;
writeln(xpmax=, xpmax:10:2, ypmax=, ypmax:10:2);
writeln(xpmin=,xpmin:10:2, ypmin=, ypmin:10:2);
readln;
xscal := 400/(xpmax-xpmin); yscal := 300/(ypmax-ypmin);
writeln(xscal=,xscal:10:2, yscal=,yscal:10:2);
xreper[1] := 300 -trunc(4*xscal);
xreper[2] := 300 + trunc(4*xscal);
xreper[3] := 300 + trunc(8*xscal); readln;
for i := 1 to n do
begin
xp[i] := 300 + trunc(xarg[i]*xscal);
yp[i] := 225 - trunc(yfv[i]*yscal);
end;
gr_fct; {apelarea procedurii de grafica}
END.


Figura 6.3

Grafic n Turbo Pascal


96




1. cu ce procedur se intr n modul grafic?



2. care sunt dimensiunile n pixeli ale ecranului grafic?


3. cu ce procedur se reprezint punctele pe ecranul grafic?



4. cu ce proceduri se reprezint liniile n ecranul grafic?



5. cu ce proceduri se stabilete culoarea cernelii i a fondului?



6. cu ce proceduri se deseneaz cercuri, dreptunghiuri; dar figuri
nchise haurate?



7. ce trebuie fcut cnd avem de reprezentat o funcie ale crei valori
ies din domeniul de pixeli pe x i pe y?



8. cu ce procedur se iese din modul grafic?
6.4. Test de autoevaluare 1

















































Rspunsurile le gseti la pagina 97
Grafic n Turbo Pascal


97




1.Dup antetul programului trebuie scris directiva Uses Graph.
Iniializarea modului grafic se face cu
procedure grstart;
begin
gd:=detect; InitGraph(gd, gm, \TP\BGI);
If graphresult <>grok then halt(1);end;
Trebuie s te asiguri c ai plasat antetul procedurii InitGraph:
Procedure InitGraph( var gd:integer; var
gm:integer; cd:string);
2. 640X480
3. procedure PutPixel(x, y :integer ; cul :word) ;
4. Line(x1,y1,x2,y2:integer):
Culoarea n care este desenat linia este stabilit cu procedura:
SetColor(color:word) ;
Stilul i grosimea liniei sunt stabilite cu procedura:
SetLineStyle(linestyle:word;pattern:word;
thickness:word);
5. setbkcolor(numr)- pentru fond; setcolor(numr)-
pentru cerneal;
6. procedure Circle(x, y:integer; raza:word);
procedure SetFillPattern
(pattern:FillPatternType;color:word);
umple figura grafic cu un model definit de programator n culoarea
definit de parametrul color.
Type FillPatternType=array[1..8] of byte;
rectangle(x1, y1, x2, y2:integer);
procedure FillPoly(nrpct:word; var puncte);
deseneaz i haureaz un poligon n culoarea i modelul curente.
7. Imaginea trebuie rescalat cu
max y
400
yscal ;
max x
600
xscal = = ;
valorile maxime trebuie fixate n program
8. Revenirea la ecranul alfanumeric se face cu procedura
CloseGraph
6.5. Rspunsuri la testul de autoevaluare 1









































Grafic n Turbo Pascal


98
6.6. Termeni i expresii cheie











6.7. Lucrare de verificare

Rezolv problemele de mai jos. Trimite tutorelui rspunsurile pe care le
consideri corecte


























6.8. Bibliografie

1. Anioara Constantinescu, Simona erban, Victor Ionu Stoica, Limbajul
de programare Turbo Pascal Editura Anima, paginile 89-112.
Termeni i expresii cheie
Unit GRAPH
Proceduri grafice;
Adncime de culoare;umplere, pattern
Pixel:; utilizarea punctului, a liniei; a cercului i
liniei poligonale.
Fixarea caracteristicilor grafice;
Scriere n mod grafic.



Dac eti sigur c ai neles bine cum se iniializeaz modul grafic i
cum se folosesc procedurile grafice atunci construiete programe
care s execute sarcinile de mai jos.
Folosind un editor de texte scrie listingul programului pe care l-ai
propus. Insereaz n text imaginea rezultat dup execuia
programului. Trimite lucrarea pentru apreciere.

1. deseneaz 2 ferestre pe ecranul grafic. n prima deseneaz un
cerc plin uniform cu culoarea fondului i unul haurat cu desenul
haurrii n culoarea verde; n a doua fereastr deseneaz un ptrat
(3 pct)
2. deseneaz o csu cu u, ferestre, gard i civa pomi
(3 pct)
3. deseneaz o floare din sectoare de cerc i scrie cteva rnduri cu
diferite fonturi; o felicitare s zicem.
(3 pct)

Not: se acord un punct din oficiu Total 10 puncte
Algoritmi Compleci


99
Unitatea de nvare 7
ALGORITMI COMPLECI


Cuprins Pagina
ALGORITMI COMPLECI97 99
7.1. Obiectivele Unitii de nvare 7 - Algoritmi compleci 100
7.2. Sisteme de numeraie 100
7.2.1. Conversia zecimal - binar 101
7.2.2. Conversia binar-zecimal 103
7.2.3. Conversia octal-binar 104
7.2.4. Conversia binar-octal 104
7.2.5. Conversia binar-hexazecimal i invers 104
7.3. Test de autoevaluare 1 105
7.4. Rezolvarea ecuaiilor algebrice 106
7.4.1. Metoda njumtirii intervalului 107
7.4.2. Metoda Newton-Raphson 108
7.4.3. Metoda Birge-Vieta 109
7.5. Rezolvarea sistemelor de ecuaii algebrice liniare 111
7.5.1. Metoda Gauss-Seidel 112
7.5.2. Metoda Gauss-Jordan 114
7.6. Integrarea numeric 115
7.6.1. Metoda trapezelor 116
7.6.2. Metoda Simpson 116
7.7. Integrarea numeric a ecuaiilor difereniale de ordin 1 118
7.7.1. Metoda Runge-Kutta de ordin 4 119
7.8. Metoda Monte Carlo 121
7.8.1. Numere aleatoare 124
7.8.2. Principiul fundamental al metodei Monte Carlo 124
7.9. Test de autoevaluare 2 129
7.10. Rspunsuri la testele de autoevaluare 129
7.11. Termeni i expresii cheie. Formule cheie 130
7.12. Lucrare de verificare 131
7.13. Bibliografie 132


Algoritmi Compleci


100
7.1. Obiectivele Unitii de nvare 7 - Algoritmi compleci























7.2. Sisteme de numeraie

Ne este tuturor cunoscut c numerele sunt reprezentate n memoria
calculatorului n sistemul binar n timp ce noi lucrm cu numere n sistemul
zecimal. Pentru a vedea ct de necesar este s indicm bine tipul datelor
cu care lucrm ntr-un program, din punct de vedere al domeniului valorilor
definite (pentru numere ntregi) sau din punct de vedere al preciziei
reprezentrii lor (pentru numere reale) s spunem cteva cuvinte despre
sistemele de numeraie i trecerea dintr-un sistem de numeraie n altul.
Cnd un numr N se scrie ntr-o form care conine cifre succesive, adic
n scriere poziional,
m m 1 2 1 0 1 2 n 1 n
d d d d d d d N

= ( 7.1)
se subnelege c valoarea avut n vedere este
m
m
1
1
0
0
1
1
2 n
2 n
1 n
1 n
r d r d r d r d r d r d N

+ + + + + + + = ( 7.2)
n expresiile de mai sus :
d reprezint o cifr,
r este baza sau rdcina,
n este numrul de cifre ntregi i
m este numrul de cifre fracionare ale numrului.
De exemplu numrul zecimal 123,45 (n reprezentare poziional)
nseamn de fapt
2 1 0 1 2
10 5 10 4 10 3 10 2 10 1 45 , 123

+ + + + = ( 7.3)
Cnd vei termina de studiat acest capitol vei fi capabil:

s construieti algoritmi pentru rescrierea numerelor n
diverse sisteme de numeraie.


s identifici tipul algoritmului utilizabil pentru rezolvarea
ecuaiilor algebrice i a sistemelor de ecuaii lineare;


s construieti algoritmi de rezolvare numeric pentru
ecuaiilor difereniale.


s aplici cunotinele dobndite n utilizarea metodei Monte
Carlo pentru a construi algoritmi cu care s rezolvi
probleme de fizic.
Algoritmi Compleci


101
n alte baze de numeraie numerele au alte nelesuri. De exemplu ,
numrul binar 101,01 are cu totul alt semnificaie dect acelai numr
scris n baza 10 i anume
2 1 0 1 2
2 1 2 0 2 1 2 0 2 1 01 , 101

+ + + + = ( 7.4)

Astfel, ntr-un sistem de numeraie, cifra este un simbol care reprezint o
cantitate anumit. Numrul de simboluri permise pentru reprezentarea
cifrei ntr-un sistem de numeraie este numit baza sau rdcina sistemului
de numeraie.
Pentru numerele zecimale poi folosi cifrele de la 0 la 9 n total 10
simboluri. Baza sistemului de numeraie este 10. Pentru numerele binare
poi folosi dou simboluri cifrele 0 i 1. Baza sistemului de numeraie
este doi.
n reprezentarea poziional cifra
1 n
d

este cifra cea mai reprezentativ a
numrului iar cifra
m
d

este cifra cea mai puin reprezentativ.


Cifra binar se numete bit i sunt definii multiplii acestei uniti: byte (sau
octet pentru 8 bii), kilobyte, megabyte, gigabyte.
Principalele sisteme de numeraie ntlnite de programatori sunt
prezentate n tabelul din figura 7.1.

Baza
sistemul de
numeraie
Numele
sistemului
2 binar
8 octal
10 zecimal
16 hexazecimal
Figura 7.1

n continuare vei ntlni punctul ca separator ntre partea ntreag i
partea fracionar ale unui numr.

7.2.1. Conversia zecimal - binar

7.2.1.1. Metoda mpririi repetate pentru conversia numerelor ntregi

Conversia zecimal - binar a unui numr ntreg N nseamn gsirea
cifrelor binare ale lui N, adic scrierea numrului ca o sum de puteri ale
lui 2 n forma
N = b
n1

2
n1
+ ... + b
1
2
1
+ b
0
2
0
Problema const n gsirea cifrelor b
( 7.5)

i
mparte numrul ntreg N cu 2; vei obine un numr ntreg, Q
. Algoritmul operaiei este urmtorul:
1
, i restul
b
0
; Q
1
Q
are expresia
1
= b
n1
2
n2
+ ... + b
1
2
0
mparte Q
( 7.6)
1
la 2; vei obine un numr ntreg, Q
2
i restul b
1
Continu acest procedeu pn cnd obii ctul zero i rest cifra cea mai
semnificativ, b
.

n1

Algoritmi Compleci


102
Urmrete n tabelul din figura 7.2. aplicarea algoritmului de mai sus
pentru reprezentarea binar a numrului ntreg N10 =53 (indicele 10
nseamn c numrul este scris n baza 10)

Q b
i

53:2
i

ct 26 + rest 1
26:2 ct 13 + rest 0
13:2 ct 6 + rest 1
6:2 ct 3 + rest 0
3:2 ct 1 + rest 1
1:2 ct 0 + rest 1
Figura 7.2.

Aadar, reprezentarea binar (n baza 2) a lui N
10
este N
2

= 110101
7.2.1.2. Metoda nmulirii repetate pentru conversia numerelor
fracionare

Pentru conversia zecimal - binar a unui numr zecimal (subunitar) se
folosete metoda nmulirilor repetate. Dac N este numrul zecimal
fracionar (subunitar) care urmeaz a fi transformat n numr binar poi
gsi cifrele reprezentrii sale binare astfel
m
m
2
2
1
1
2 b 2 b 2 b N

+ + + = ( 7.7)
Algoritmul este urmtorul:
nmulim cu 2 expresia de mai sus; obinem b
1
ca ntreg i un numr
fracionar, F
1
1 m
m
1
2 1
2 b 2 b F
+

+ + =
care are expresia:
( 7.8)
nmulim F
1
cu 2 i obinem cifra b
2
F
ca ntreg i un numr fracionar
se poate continua pn se obine un numr fracionar zero dar nu
ntotdeauna acest lucru este posibil. Un numr fracionar finit ntr-un
sistem de numeraie nu poate fi ntotdeauna reprezentat tot de un numr
finit ntr-un alt sistem de numeraie; de aici rezult precizia limitat a
reprezentrii numerelor reale n memoria calculatorului.
2


Ca exemplu i propunem s urmreti procedura de trecere le
reprezentarea binar a numrului zecimal N
10

= 0.3 prezentat n figura
7.3. Conform algoritmului de nmulire repetat:
...... ...
1 0.2 1.2 2 * 0.6
1 0.6 1.6 2 * 0.8
0 0.8 0.8 2 * 0.4
0 0.4 0.4 2 * 0.2
1 0.2 1.2 2 * 0.6
0 0.6 0.6 2 * 0.3
b F
-i i
=
=
=
=
=
=

Figura 7.3
Algoritmi Compleci


103
Aa dar reprezentarea binar lui 0.3 este 0.010011 Dac se iau doar
primele 4 cifre (dup punctul zecimal) ale reprezentrii binare, numrul din
memorie este 0.25! Dac se consider 6 cifre binare (dup punctul
zecimal) atunci reprezentarea lui 0.3 n memoria calculatorului este
0.296875, mai bun dar nu exact. Cum unui numr real i se aloc n TP
6 octei adic 6*8=48 cifre binare, este clar c exist o precizie limitat de
reprezentare a numerelor reale n memoria calculatorului.

7.2.2. Conversia binar-zecimal

7.2.2.1. Metoda nmulirii repetate pentru conversia numerelor ntregi

Pentru conversia binar - zecimal a unui numr ntreg se folosete metoda
nmulirii repetate cu 2. Presupune c numrul N este un numr binar
ntreg cu 6 cifre; l poi deci scrie astfel:
0
0
1
1
2
2
3
3
4
4
5
5
2 b 2 b 2 b 2 b 2 b 2 b N + + + + + = ( 7.9)
sau, pentru a evita folosirea puterilor lui 2,
( ) ( ) ( ) ( )
0 1 2 3 4 5
b 2 b 2 b 2 b 2 b 2 b N + + + + + = ( 7.10)
Ca exemplu de utilizare a algoritmului i propunem s urmreti exemplul
de mai jos n care se gsete reprezentarea zecimal a numrului binar
N=110101. Numrul poate fi scris fie ca
53 2 1 2 0 2 1 2 0 2 1 2 1 N
0 1 2 3 4 5
= + + + + + = ( 7.11)
fie ca
( ) ( ) ( ) ( ) 53 1 2 0 2 1 2 0 2 1 2 1 N = + + + + + = ( 7.12)
Se vede c numrul ntreg maxim pentru un numr n dat de cifre binare
este 1 2
n
; 7 pentru 3 bii, ( numrul binar111), 255 pentru un byte=8bii,
(numrul binar11111111). i devine mai clar n acest moment
importana tipului ntreg ales pentru valorile ntregi cu care lucrezi n TP.

7.2.2.2. mpriri repetate pentru conversia numerelor fracionare

Dac N este un numr binar fracionar pe care vrei s-l converteti n
numr zecimal fracionar, poi s foloseti metoda mpririlor repetate.
Dac N este de exemplu - un numr binar zecimal cu 4 cifre, el poate fi
scris n forma:
4
4
3
3
2
2
1
1
2 b 2 b 2 b 2 b N

+ + + = ( 7.13)
sau n forma :
( ) ( ) ( )
4
1
3
1
2
1
1
1
b 2 b 2 b 2 b 2 N

+ + + = ( 7.14)
ncearc s gseti folosind algoritmul propus - reprezentarea zecimal
a numrului binar N=0.01001. Dac foloseti prima form vei obine:
28125 . 0 2 1 2 0 2 0 2 1 2 0 N
5 4 3 2 1
= + + + + =

( 7.15)
valoare pe care o obii utiliznd i forma a doua. ntr-adevr a doua
formul d
( ) ( ) ( ) 28125 . 0 ) 1 2 0 ( 2 0 2 1 2 0 2 N
1 1 1 1 1
= + + + + =

( 7.16)
Algoritmi Compleci


104
7.2.3. Conversia octal-binar

Dat fiind c 8 = 2
3

, conversia dintr-o baz n alta se face simplu. Cea mai
mare cifr octal, 7, se scrie ca o combinaie de 3 bii, adic sub forma
numrului binar 111 Pentru conversia unui numr din octal n binar se
nlocuiete fiecare cifr octal cu o combinaie de 3 cifre binare conform
tabelului din figura 7.4.:
cifr
octal
Reprezentare
binar
0 000
1 001
2 010
3 011
4 100
5 101
6 110
7 111
Figura 7.4
Exemplu: dac scrii reprezentarea binar a numrului octal N
8
N
=346.25
conform cu regula stabilit mai sus, obii evident
8

= 346.25 = 011100110.010101 = 11100110.010101 ( 7.17)
7.2.4. Conversia binar-octal

Conform tabelului de mai sus vei forma combinaii de 3 bii pornind de la
punctul zecimal spre stnga pentru partea ntreag i tot de la punctul
zecimal spre dreapta pentru partea fracionar i scrii cifra octal ce
corespunde fiecrei combinaii de 3 bii.
Dac la prima cifr a prii ntregi sau la ultima cifr a prii fracionare nu
avem 3 bii vei aduga zerouri n faa primei cifre sau dup ultima cifr
pentru a forma combinaii de 3 bii. Operaia este permis deoarece zero
n faa unui numr ntreg sau la sfritul unui numr fracionar nu schimb
numrul
Exemplu: s ne propunem s scriem reprezentarea octal a numrului
binar
N
2
Aplicnd algoritmul enunat, pornind de la punctul zecimal formm spre
stnga combinaii de 3 bii: prima cifr n stnga punctului zecimal este
6=110, urmtoarea este 4=100, pentru urmtoarea avem doar 2 bii: 11;
punem n faa lor 0 i recunoatem numrul octal 3=011. Partea ntreag a
numrului octal este deci 346 . Pornind de la punctul zecimal spre dreapta
ai cifrele 2=010 i, adugnd un zero la sfrit, 4=100 . Numrul octal este
prin urmare 346.24
= 11100110.01010

7.2.5. Conversia binar-hexazecimal i invers

La fel de uor se face trecerea de la numerele scrise n baza 2 la numere
scrise n baza 16 i invers. Cea mai mare cifr n baza 16 este F(=15
zecimal) care se poate scrie ca o combinaie de 4 bii, 1111 Fiecare cifr
Algoritmi Compleci


105




1. Cte sisteme de numeraie au fost descrise n aceast seciune?



2. Care este algoritmul de trecere a unui numr ntreg din baza 10 n
baza 2?
hexazecimal se va scrie deci ca o combinaie de 4 bii conform tabelului
din figura 7.5.

Cifra
Zecimal
Cifra
Binar
Cifra
Octal
Cifra
Hexazecimal
0 0000 0 0
1 0001 1 1
2 0010 2 2
3 0011 3 3
4 0100 4 4
5 0101 5 5
6 0110 6 6
7 0111 7 7
8 1000 10 8
9 1001 11 9
10 1010 12 A
11 1011 13 B
12 1100 14 C
13 1101 15 D
14 1110 16 E
15 1111 17 F
16 10000 20 10
Figura 7.5

Exemple:
1. reprezentarea binar a numrului hexazecimal 1AB1.AB este
0001101010110001.10101011
sau renunnd la zerourile din fa,
1101010110001.10101011

2. reprezentarea hexazecimal a numrului binar 11100.11001 este
1C.C8
Regula de scriere este aceea deja enunat anterior adic vei ncepe
scrierea corespondent plecnd de la punctul zecimal spre stnga sau
dreapta i dac nu sunt destule cifre binare adaugi zerouri.

7.3. Test de autoevaluare 1

Algoritmi Compleci


106





3. Care este algoritmul de trecere a unui numr fracionar (subunitar)
din baza 10 n baza 2?



4.Cum vei proceda ca s treci un numr zecimal cu parte ntreag i
fracionar n binar?




5. Trece numrul 12.25 din baza 10 n baza 2


6.Trece numrul binar 110011.10101 ntr-un numr n baza zece, ntr-
un numr n baza 8 i ntr-un numr n baza 16




























Rspunsurile le gseti la pagina 129.

7.4. Rezolvarea ecuaiilor algebrice

Fie ecuaia
( ) 0 x F = ( 7.18)
n care ( ) x F este o funcie polinomial. Vei spune c x
0
este o rdcin a
ecuaiei dac nlocuind x cu x
0
( ) 0 x F
0
=
se obine
( 7.19)
Ne vom ocupa aici doar de ecuaiile ce admit rdcini reale. Pentru
ecuaiile de gradul unu, doi sau trei exist ntotdeauna expresii exacte
pentru soluii analitice. Pentru ecuaii de grad mai mare ca 3 exist mai
multe metode de gsire a unei rdcini aproximative. Metodele se pot
aplica i pentru ecuaiile de grad doi sau trei. Vei nelege aici prin
rdcin aproximativ o valoare x apropiat de x
0
n limita unei precizii
date.
Este bine ca mai nainte de a cuta rdcinile unei ecuaii s o tabelm pe
un domeniu de valori x n care presupunem c s-ar afla aceste rdcini i
cu un pas, dx, care s duc la cel mult o rdcin ntr-un interval x, x+dx.
Iat un astfel de program pentru tabelarea funciei:
130 x 120 x 2 x 9 x ) x ( F
2 3 4
+ = ( 7.20)
Algoritmi Compleci


107
EX27.PAS

program Tabel_functie;
var f:text;
x, dx:real;
nume:string[20];
function f(x:real):real;
begin
f:=sqr(x)*sqr(x)-9*sqr(x)*x-2*x*x+120*x-130;
end; {end function}
begin {program principal}
write(introdu numele fisierului out);
readln(nume); assign(f,nume);
rewrite(f);
x=-10.; dx:=1.;
while x <= 10 do
begin
writeln(f,x,f(x)); x:=x+dx;
end;
end.
n fiierul al crui nume l-ai dat de la tastatur se vor afla, dup execuia
programului, valorile x i valorile corespunztoare ale lui F(x). Poi afla
deci intervalele n care funcia schimb de semn adic intervalele n care
funcia trece prin zero. De aceast informaie ai nevoie n cele ce
urmeaz.

7.4.1. Metoda njumtirii intervalului

Dac [a, b] este un interval n care funcia schimb de semn (deci
0 ) b ( f ) a ( f < ) i deoarece funcia polinomial este continu i are prin
urmare proprietatea Darboux, funcia polinomial va avea o rdcin n
intervalul considerat . Pentru funcia dat mai sus aceste intervale sunt [-4,
-3], [1, 2], [3, 4] i [7,8]. ntruct conform teoremei fundamentale a algebrei
ecuaia are patru rdcini, sigur n fiecare interval avem o singur
rdcin. Algoritmul gsirii rdcinii prin metoda njumtirii intervalului
este urmtorul:

1. Vei lua o valoare la mijlocul intervalului [a, b], c=(a+b)/2
2. Calculezi f(c)
3. Dac f(c)=0 nseamn c c este rdcina cutat ; dac 0 ) c ( f ) a ( f < (
i evident 0 ) b ( f ) c ( f > ) nseamn c rdcina se afl n intervalul [a, c]
i atunci vei relua algoritmul punnd b=c . Dac 0 ) c ( f ) a ( f > rdcina se
afl n intervalul ] b , c [ i vei relua algoritmul punnd c a = . Prin metoda
propus fie ai gsit rdcina fie ai redus la jumtate intervalul n care
rdcina se afl.
4. Vei verifica dac intervalul rezultat este mai mic dect precizia cu care
vrei s determini rdcina; dac DA scriem valoarea gsit, dac NU se
reia cutarea soluiei ca la punctul 1.

Algoritmi Compleci


108
Programul n TP pentru gsirea celor 4 rdcini ale ecuaiei
0 130 x 120 x 2 x 9 x ) x ( f
2 3 4
= + = ( 7.21)
a fost construit n unitatea de nvare 5 i are numele EX19.PAS.

7.4.2. Metoda Newton Raphson

Metoda Newton-Raphson este o metod iterativ de rezolvare a ecuaiei
( ) 0 x F = . Formula dup care se calculeaz o rdcin aproximativ n
funcie de rdcina aproximativ din iteraia anterioar este urmtoarea:
( )
( )
1 n
1 n
1 n n
x ' F
x F
x x

= ( 7.22)
unde x
n
este valoarea lui x n iteraia n iar x
n1
Condiiile de convergen sunt:
este valoarea lui x n
iteraia anterioar.

S se plece cu o valoare iniial a rdcinii aproximative x
0

suficient de
apropiat de o rdcin a ecuaiei
Este necesar ca derivata secund a funciei ( ) x " F s nu fie prea mare,

Este necesar ca derivata prim a funciei ( ) x ' F s nu fie prea apropiat
de zero. De fapt, ultimele dou condiii cer ca ecuaia s nu aib dou
rdcini foarte apropiate.
Ieirea din procesul iterativ se face fie cnd s-a atins precizia cerut (
abs(x
n
x
n1
n continuare este prezentat programul n TP pentru gsirea rdcinilor
ecuaiei
) < ) fie cnd s-a atins un numr maxim de iteraii, itermax.
0 130 x 120 x 2 x 9 x ) x ( f
2 3 4
= + = cu metoda Newton.

EX28.PAS
program rezec4_2; label 10, 20;
const eps=1.E-05; itermax=30;
type intx=array[1..4] of real;
const x1:intx=(-4, 1, 3, 7);

var x0,x:real;
i, iter:byte;
function f(x:real):real;
begin
f:=sqr(x)*sqr(x)-9*sqr(x)*x-2*x*x+120*x-130;
end;
function df(x:real):real;
begin
df:= 4*sqr(x)*x-27*sqr(x)-4*x+120;
end;

BEGIN {programul principal}
for i:= 1 to 4 do
begin
x0:=x1[i];
Algoritmi Compleci


109
for iter:=1 to itermax do
begin
20: x:= x0 - f(x0)/df(x0);
if abs(x-x0)<eps goto 10
else
begin
x0:=x;
goto 20;
end;
end;

10:writeln(la iteratia,iter:2,x[,i:1,]=,x:10:2;
end;
readln;
END.

7.4.3. Metoda Birge-Vieta

n cele 2 metode descrise mai sus programele sunt scrise pentru o
anumit ecuaie. Programele trebuie s aib ns un caracter mai general.
Acest lucru este posibil n cazul cnd F(x) este un polinom, adic
0
1
1
2 m
2 m
1 m
1 m
m
m
a x a x a x a x a ) x ( F + + + + + =

( 0.8)
Pentru scrierea unei soluii generale pentru ecuaia algebric vei folosi tot
metoda Newton-Raphson dar pentru evaluarea lui F(x
0
) i a lui F(x
0
( )
0 0
b x x ) x ( Q ) x ( F + =
) vei
folosi urmtorul algoritm. Vei scrie polinomul F(x) sub forma
( 7.23)
cu
1
1
2
2 m
1 m
1 m
m
b x b x b x b ) x ( Q + + + + =

( 7.24)
Observ c
0 0
b ) x ( F = ( 7.25)
i c
( )
0 0
x Q ) x ( ' F = ( 7.26)
Problema se reduce deci la a evalua b
0
i Q(x
0
( )
1 0
c x x ) x ( R ) x ( Q + =
). Scriind i Q(x) ca
( 7.27)
cu
2 3
3 m
1 m
2 m
m
c x c x c x c ) x ( R + + + + =

( 7.28)
se vede c
Q(x
0
) = c
1
Aadar trebuie s calculezi b
( 7.29)
0
i c
1
pentru fiecare x
0
( )
( )
0
0
x ' F
x F
0 x x =
n decursul iteraiilor
de gsire a unei rdcini a polinomului, expresia
( 7.30)
avnd acum forma
1
0
c
b
0 x x = ( 7.31)
Algoritmi Compleci


110
Dac nlocuieti n ecuaia (7.24) ( )
0 0
b x x ) x ( Q ) x ( F + = expresiile
polinoamelor F(x) i Q(x) obii
( ) ( )

+ + + + + =
= + + + + +

0 1
1
2
2 m
1 m
1 m
m 0
0
1
1
2 m
2 m
1 m
1 m
m
m
b b x b x b x b x x
a x a x a x a x a

( 7.32)
i identificnd coeficienii diferitelor puteri ale lui x obii expresiile
coeficienilor b
j

+ =
=
+ 0 1 j j j
m m
x b a b
a b
:
( 7.33)
cu j mergnd de la m-1 la 0. La fel introducnd n ecuaia ( 7.34)
( )
1 0
c x x ) x ( R ) x ( Q + = expresiile lui Q(x) i R(x), vei obine:
( ) ( )

+ + + + + =
= + + + +

1 2 3
3 m
1 m
2 m
m 0
1
1
2
2 m
1 m
1 m
m
c c x c x c x c x x
b x b x b x b

( 7.35)
de unde, prin identificarea coeficienilor puterilor lui x, vei gsi relaiile
pentru coeficienii c
k

+ =
=
+ 0 1 j k k
m m
x c b c
b c

( 7.36)
unde k ia valori de la m-1 la 1.

n continuare poi urmri paii programul n TP pentru gsirea rdcinilor
polinomului F(x) folosind aceast procedur numit deseori metode Birge-
Vieta.

EX29.PAS program rezec4_3; l

abel 10, 20, 30;
const eps=1.E-05; itermax=30;
var x0,x:real; {variabile globale}
a:array[0..20] of real;
b:array[0..20] of real;
i, iter, m:byte;

function b0(x:real):real;
var j:byte; {variabila locala}
begin
b[m]:=a[m];
for j:=m-1 downto 0 do b[j]:= b[j+1]*x +a[j];
b0:=b[0];
end;
function c1(x:real):real;
var k:byte; {variabile locale}
c:array[1..20] of real;
begin
c[m]:=b[m];
for k:=m-1 downto 1 do c[k]:=c[K+1]*x+b[k];
c1:=c[1];
end;
Algoritmi Compleci


111
BEGIN {programul principal}
write(introdu gradul polinomului,m=); readln(m);
writeln(introdu coef.polinom am*x^m+...+a1*x+a0);
for i:=m downto 0 do
begin
write(introdu a(,i:2,)=); readln(a[i])
end;
30: write(introdu x0=); readln(x0);
for iter:=1 to itermax do
begin
20: x:= x0 - b0(x0)/c1(x0);
if abs(x-x0)<eps goto 10
else
begin
x0:=x; goto 20;
end;
end;
10: writeln(la iteratia,iter:2,radacina
este,x:10:2);
Write(introdu 1 pentru alta radacina);
readln(ic);
if ic=1 then goto 30
readln;
END.

ncerc i acest program pentru rezolvarea ecuaiei
0 130 x 120 x 2 x 9 x ) x ( f
2 3 4
= + =
Ai gsit aceleai rdcini?

7.5. Rezolvarea sistemelor de ecuaii algebrice liniare

Consider un sistem de n ecuaii algebrice liniare. Vei spune c un sistem
de n valori, corespunztoare celor n variabile, este o soluie a acestui
sistem
de ecuaii dac, nlocuind variabilele cu aceste valori toate cele n ecuaii
sunt satisfcute simultan. Aa cum probabil tii, pentru un sistem de
ecuaii dat nu putem spune, fr un studiu, dac exist o soluie i dac
aceast soluie este unic. Exist dou categorii de metode numerice de
rezolvare a sistemelor de ecuaii algebrice liniare: metodele directe care
presupun un numr finit de operaii (metoda Gauss-Jordan) i metodele
iterative care implic un numr foarte mare de operaii (metoda Gauss-
Seidel). Ambele metode au avantaje i limite de utilizare. Un studiu
detaliat asupra aplicrii metodelor de rezolvare este fcut n cartea aflat
n bibliografia general la numrul [5].
Algoritmi Compleci


112
7.5.1. Metoda Gauss-Seidel

Poi urmri principiul metodei de rezolvare pe cazul unui sistem de 3
ecuaii algebrice liniare:

= + +
= + +
= + +
3 3 33 2 32 1 31
2 3 23 2 22 1 21
1 3 13 2 12 1 11
b x a x a x a
b x a x a x a
b x a x a x a
( 7.37)

Presupune c elementele diagonale sunt nenule

0 a
0 a
0 a
33
22
11
( 7.38)
n acest caz ecuaiile de mai sus se pot scrie sub forma.
( )
( )
( )

=
=
=
2 32 1 31 3
33
3
3 23 1 21 2
22
2
3 13 2 12 1
11
1
x a x a b
a
1
x
x a x a b
a
1
x
x a x a b
a
1
x
( 7.39)
Pornind cu o soluie aproximativ a sistemului de ecuaii, ( )
) 0 (
3
) 0 (
2
) 0 (
1
x , x , x i
nlocuind-o n sistemul (7.39) vei obine o nou aproximaie a
necunoscutelor x
i
( )
( )
( )

=
=
=
) 1 (
2 32
) 1 (
1 31 3
33
) 1 (
3
) 0 (
3 23
) 1 (
1 21 2
22
) 1 (
2
) 0 (
3 13
) 0 (
2 12 1
11
) 1 (
1
x a x a b
a
1
x
x a x a b
a
1
x
x a x a b
a
1
x
:
( 7.40)
Procedura continu ct timp

( ) ( ) >
) 1 k (
i
) k (
i
x x ABS MAX ( 7.41)
unde
reprezint precizia cu care vrei s gseti soluia
k este numrul iteraiei curente i k-1 este numrul iteraiei anterioare
i merge de la 1 la numrul de necunoscute ale sistemului

sau ct timp nu ai atins numrul maxim de iteraii stabilit prin program,
itermax.

Iat un programul n TP care rezolv aproximativ sisteme lineare conform
algoritmului propus mai sus:
Algoritmi Compleci


113
EX30.PAS

program gauss_seidel;
label unu, doi, trei;
type matrice=array[1..10,1..10] of real;
vector=array[1..10] of real;
const eps=1.E-04; itermax=50;
var n, i, j, iter:byte;
a:matrice;
b, x:vector;
f:text;
big, sum, temp:real;
begin assign(f,gs.in); reset(f); readln(f,n);
for i:=1 to n do
begin
for j:=1 to n do read(f,a[i, j]);
readln(f,b[i]);
end;
for i:=1 to n do if a[i,i]=0 then goto unu;
writeln( sistemul de ecuatii este:);
for i:=1 to n do
begin
forj:=1 to n do
write(a[i,j]:10:2);write(b[i]:10:2);
writeln;
end;
for i:=1 to n do x[i]:=0.;
for iter:=1 to itermax do
begin
big:=0.;
for i:=1 to n do
begin
sum:=0;for j:=1 to i-1 do
sum:=sum+a[i,j]*x[j];
for j:=i+1 to n do sum:=sum+a[i,j]*x[j];
temp:=(b[i]-sum)/a[i,i];
if abs(temp-x[i])> big then big:=abs(temp-x[i]);
x[i]:=temp;
end;
if big <= eps then goto trei;
end;
trei:Writeln(la iteratia:,iter:2,solutia este:);
for i:=1 to n do writeln(x(,i:2,)=,x[i]:10:2);
goto doi;
unu:writeln(sistemul nu poate fi rezolvat prin
metoda Gauss Seidel);
doi: readln;
end.
Algoritmi Compleci


114
Pentru rezolvarea sistemului de ecuaii algebrice liniare:

= +
= +
= +
= +
=
1 x 4 x x
2 x x 4 x x
6 x x x 4 x x
2 x x x 4 x
1 x x x 4
5 4 3
5 4 3 2
5 4 3 2 1
4 3 2 1
3 2 1
( 7.42)
fiierul gs.in va avea coninutul:
5
4. -1. -1. 0. 0. -1.
-1. 4. -1. -1. 0. 2.
-1. -1. 4. -1. -1. 6.
0. -1. -1. 4. -1. 2.
0. 0. -1. -1. 4. -1.

Soluia este x
1
= 1, x
2
= 2, x
3
= 3, x
4
= 2 i x
5

= 1
7.5.2. Metoda Gauss-Jordan

Consider din nou sistemul de ecuaii algebrice liniare (7.37). Consider
c
0 a
11

ceea ce evident nu este o restricie (sistemul are cel puin un coeficient
nenul). Dac n forma primar
( 7.43)
0 a
11
=
11
21
1
a
a
m =
ecuaiile se rearanjeaz pentru a
satisface condiia. Definete multiplicatorul
( 7.44)
nmulete prima ecuaie a sistemului (7.37) cu m
1
11
31
2
a
a
m =
i scade-o din a doua
ecuaie. Definete i multiplicatorul
( 7.45)
cu care nmulete prima ecuaie a sistemului dup care scade-o din a
treia. Noul sistem de ecuaii are forma

= +
= +
= + +
3 3 33 2 32
2 3 23 2 22
1 3 13 2 12 1 11
' b x a x ' a
' b x a x ' a
b x a x a x a
( 7.46)
n a doua ecuaie a sistemului coeficientul necunoscutei x
1
0 a m a
11 1 21
=
este
( 7.47)
iar coeficienii celorlalte necunoscute i termenul liber sunt

=
=
=
1 1 2 2
13 1 23 23
12 1 22 22
b m b ' b
a m a ' a
a m a ' a
( 7.48)
n a treia ecuaie a sistemului coeficientul necunoscutei x
1
0 a m a
11 m 31
=
este
( 7.49)
Algoritmi Compleci


115
iar coeficienii celorlalte necunoscute i termenul liber sunt

=
=
=
1 2 3 3
13 2 33 33
12 2 32 32
b m b ' b
a m a ' a
a m a ' a
( 7.50)
Verifici dac pentru noul sistem coeficientul necunoscutei x
2
din a doua
ecuaie este nenul,
0 ' a
22

( 7.51)
(dac nu rearanjezi sistemul) i defineti un nou multiplicator.
22
32
3
' a
' a
m = ( 7.52)
nmuleti apoi a doua ecuaie cu multiplicatorul m
3
i o scazi din a treia
ecuaie. Sistemul are n acest moment forma triunghiular.

=
= +
= + +
3 3 33
2 3 23 2 22
1 3 13 2 12 1 11
" b x " a
' b x a x ' a
b x a x a x a
( 7.53)
cu coeficienii ecuaiei a treia dai de expresiile

=
=
2 3 3 3
23 3 33 33
' b m ' b " b
' a m ' a " a
( 7.54)
Metoda descris mai sus este adesea numit metoda reducerii gaussiene.
Astfel, dac
0 ' a
33

( 7.55)
poi calcula
( )
( )

=
=
=
3 13 2 12 1
11
1
3 23 2
22
2
33
3
3
x a x a b
a
1
x
x ' a ' b
' a
1
x
' a
" b
x
( 7.56)
Programul TP care implementeaz metoda se afl n fiierul gaussj.inc
i este luat din biblioteca de subprograme [7]. Vei folosi programul n
studiul metodei celor mai mici ptrate pentru un polinom de grad m > 2 n
unitatea de nvare urmtoare.

7.6. Integrarea numeric

Derivarea i integrarea numeric sunt bine studiate n capitolul 5 al
referinei bibliografice generale [5]. Vei urmri n continuare descrierea a
dou dintre cele mai cunoscute metode de evaluare numeric a
integralelor

=
b
a
dx ) x ( f I cu restriciile c a i b sunt valori finite iar f(x)
este o funcie continu pe intervalul [a,b]. Ideea de baz a calculului de
integral definit este aceea a calculului ariei de sub graficul funciei ntre
punctele a i b.
Algoritmi Compleci


116
7.6.1. Metoda trapezelor

Intervalul [a,b] se mparte n n intervale cu lungimi egale. Metoda
trapezelor aproximeaz integrala cu suma ariilor celor n trapeze de
nlime h=(b-a)/n, bazele mici respectiv f(a), f(a+h),...,f(a+(n-1)h) i bazele
mari respectiv f(a+h), f(a+2h),...,f(b). Se vede c exceptnd capetele
intervalului, celelalte baze ale trapezelor figureaz de 2 ori: o dat ca baz
mic i o dat ca baz mare - n trapeze succesive. Formula de
aproximare a integralei este:

( )
( )

+ =
+ + + + + + =

ih a f y
y y y 2 y 2 y 2 y
2
h
I I
i
n 1 n 2 n 2 1 0 Trapeze

( 7.57)
i ia valori ntre 0 i n.

7.6.2. Metoda Simpson

Metoda Simpson este una din cele mai folosite metode de integrare
numeric. Ca i n metoda trapezelor intervalul [a, b] se mparte n n
intervale de lungime egal aprnd astfel delimitrile intervalelor de valori
ale lui x de forma
h i a x
i
+ =
dar aici se consider suprafaa de sub o
parabol pentru a aproxima aria corespunztoare la dou intervale
adiacente. Situaia este reprezentat n figura 7.6.

Figura 7.6

Aceasta impune ca n s fie par.
Formula de aproximare este acum dat de:
( )
( )

+ =
+ + + + + + =

ih a f y
y y 4 y 2 y 2 y 4 y
3
h
I I
i
n 1 n 2 n 2 1 0 Simpson

( 7.58)
EX31.PAS conine un program n TP care integreaz prin cele 2 metode,
expuse mai sus, diferite funcii f(x) i compar rezultatele cu valorile
analitice ale integralelor. Din rezultate se vede c integrala prin metoda
trapezelor d rezultat exact doar pentru f(x) de forma unui polinom de
grad 1 n timp ce metoda Simpson d rezultat exact pentru f(x) de forma
unui polinom de grad 1, 2 i 3. Abia pentru polinoame de grad mai nalt
ncep s se observe abateri de la valoarea analitic a integralei.
Algoritmi Compleci


117
EX31.PAS
program integrare;
const a=0.; b=1.;
type fct=function(x:real):real;
var st1, st2, st3, st4, st5:real;
ss1, ss2, ss3, ss4, ss5:real;
function trapez(a,b:real; n:byte; f:fct):real;
var h, s:real; i:byte;
begin
h:=(b-a)/n;
s:=f(a)+f(b);
for i:=1 to n-1 do s:=s+2*f(a+i*h);
trapez:=s*h/2;
end;
function simpson(a, b:real; n:byte; f:fct):real;
var h, s:real; i:byte;
begin
h:=(b-a)/2/n;
s:=f(a)+f(b);
for i:=1 to 2*n-1 do
if i mod 2 = 0 then s:=s+2*f(a+i*h)
else s:=s+4*f(a+i*h);
simpson:=s*h/3;
end;
{$F+} function f1(x:real):real;
begin
f1:=1+x;
end;
function f2(x:real):real;
begin
f2:=1+x*x;
end;
function f3(x:real):real;
begin
f3:=1+sqr(x)*x;
end;
function f4(x:real):real;
begin
f4:=1+sqr(x)*sqr(x);
end;
function f5(x:real):real;
begin f5:=1+sqr(x)*sqr(x)*x;
end;
{$F-}
begin
st1:=trapez(a,b,10,f1);
ss1:=simpson(a,b,10,f1);
writeln( functia|val.int. analitica|val.int. trapez|
val.int. simpson);
writeln( 1+x , 1.5:16:6, st1:18:6,ss1:18:6);
st2:=trapez(a,b,10,f2);
ss2:=simpson(a,b,10,f2);
Algoritmi Compleci


118
writeln( 1+x^2,1.333333:16:6,st2:18:6,ss2:18:6);
st3:=trapez(a,b,10,f3);
ss3:=simpson(a,b,10,f3);
writeln( 1+x^3,1.25:16:6,st3:18:6,ss3:18:6);
st4:=trapez(a,b,10,f4);
ss4:=simpson(a,b,10,f4);
writeln( 1+x^4,1.2:16:6,st4:18:6,ss4:18:6);
st5:=trapez(a,b,10,f5);
ss5:=simpson(a,b,10,f5);
writeln(1+x^5,1.166666:16:6,st5:18:6,ss5:18:6);
readln;
end.


7.7. Integrarea numeric a ecuaiilor difereniale de ordin 1

Ecuaia
y
dx
dy
= ( 7.59)
are ca soluie o funcie de forma
x
e a ) x ( y = ( 7.60)
unde a este o constant arbitrar. Valori diferite ale constantei a conduc
la o familie de curbe care satisfac ecuaia diferenial (7.59). Constanta a
este unic determinat dac pe lng ecuaia diferenial se mai d i o
valoare a lui y pentru un x oarecare - o condiie iniial. De exemplu dac
la x = 0, y = 1 ( y ( 0 ) = 1 ) atunci a = 1 i
x
e ) x ( y = .

Exist o serie de tehnici pentru determinarea soluiei unei ecuaii
difereniale sub forma unor funcii elementare sau a unor funcii speciale,
ca de exemplu funciile Bessel. Deseori apar probleme care nu pot fi
rezolvate prin metode clasice sau care conduc la soluii dificil de obinut.
Vei cuta atunci aproximaii numerice.
Pentru ecuaii difereniale ordinare de ordinul nti cu o singur condiie
iniial
( )

=
=
0 0
y x y
) y , x ( f ' y
( 7.61)
metodele Runge - Kutta sunt cele mai cunoscute.
Metodele Runge-Kutta de care te vei ocupa n continuare, au trei
proprieti speciale :

1. sunt metode directe. Informaiile pe care le primeti prin enunul
descris mai sus sunt suficiente pentru a amorsa o metod n care soluia
(care este o funcie ) x ( y ) este determinat numeric, iterativ.
Aceasta nseamn c plecnd de la condiia iniial se pot determina
punctele care constituie soluia ( ) ( )
m m
x y , x printr-o metod iterativ n
care se folosete valoarea soluiei existente n punctul precedent x
m
, y
m

pentru a gsi y
m+1

Algoritmi Compleci


119
2. sunt identice cu seriile Taylor pn la termeni h
p

unde p este diferit
pentru metode diferite, fiind numit ordinul metodei
3. nu necesit evaluarea nici unei derivate a funciei f(x, y) ci numai a
funciei f

7.7.1. Metoda Runge-Kutta de ordin 4

Pentru metoda Runge - Kutta de ordin 4, una din cele mai rspndite
metode de integrare a ecuaiilor difereniale ordinare, formula de calcul
este:
( )
4 3 2 1 m 1 m
k k 2 k 2 k
6
h
y y + + + + =
+
( 7.62)
unde
( )
( )

+ + =
|
.
|

\
|
+ + =
|
.
|

\
|
+ + =
=
3 m m 4
2
m m 3
1
m m 2
m m 1
hk y , h x f k
2
hk
y ,
2
h
x f k
2
hk
y ,
2
h
x f k
y , x f k
( 7.63)
Eroarea de trunchiere este
5
h K .
Se observ c n aceast metod funcia trebuie evaluat de 4 ori.
Estimarea erorii de trunchiere presupune c derivatele pariale de ordinul
4 ale funciei f(x, y) sunt continue.
S considerm mpreun exemplul unei ecuaii difereniale simple cu o
condiie iniial dat
( )

=
=
1 0 y
y
dx
dy
( 7.64)
Folosind formulele de mai sus, se pot calcula valorile ) h ( y , h fiind pasul
cu care este parcurs domeniul valorilor variabilei x.

|
|
.
|

\
|
|
.
|

\
|
+ + + =
|
.
|

\
|
+ + =
+ =
=
2
hk
y
2
h
y h y k
2
hk
y
2
h
y k
2
hk
y k
y k
1
m m m 4
1
m m 3
1
m 2
m 1
( 7.65)
astfel c, n conformitate cu relaia (7.62)
|
|
.
|

\
|
+ + + + =
+
24
h
6
h
2
h
h 1 y y
4 3 2
m 1 m
( 7.66)
identic cu dezvoltarea n serie Taylor a funciei e
h
n vecintatea
punctului h=0 pn la termenul n h
4
Programul EX32.PAS care folosete subrutina RK4 pentru a integra
numeric ecuaia
.
1 ) 0 ( y ; y dx / dy = = pentru ( ) 1 , 0 x cu pas 0.1 este
Algoritmi Compleci


120
prezentat n continuare. i-ar fi util s compari rezultatele programului cu
soluia exact, analitic.

EX32.PAS
program ec_dif;
const h=0.1; n=10;
var x, y, k1, k2, k3, k4, x0, y0 : real;
i:byte;
function f(x, y : real) : real;

begin
f:=exp(x);
end;
begin
x0:=0; y0:=1; {valorile initiale}
writeln(x| valoarea analitica|valoarea
calculata);
for i:=1 to n do
begin
k1:=f(x0,y0); k2:=f(x0+h/2, y0+h*k1/2);
k3:=f(x0+h/2, y0+h*k2/2);
k4:=f(x0+h,y0+h*k3);
y:=y0+h/6*(k1+2*k2+2*k3+k4);
writeln(x0+h:5:2,exp(x0+h):20:6,y:20:6);
x0:=x0+h; y0:=y;
end;
readln;
end.

Reine c pentru integrarea unui sistem de ecuaii difereniale de ordinul
nti poi folosi procedura rk4 din trimiterea bibliografic general [7]
salvat n fiierul rk4.inc. Vei folosi procedura n unitatea de nvare 9
pentru integrarea ecuaiilor micrii particulei n cmpul Coulomb al
unui nucleu de Au sau Ag. Procedura este prezentat mai jos.

PROCEDURE rk4(y,dydx: glnarray;n:integer;x,h:real;
VAR yout:glnarray);
{* Programele ce folosesc procedura RK4 trebuie
sa aib o procedura PROCEDURE derivs(x:real;
y:glnarray; VAR dydx:glnarray); in care sunt
calculate derivatele dydx la valoarea x, fiind
date valoarea lui x si valorile functiilor y(x).
De asemeni programul apelant al procedurii rk4
trebuie sa defineasca tipul TYPE glnarray =
ARRAY [1..nvar] OF real;
unde nvar este numarul de variabile y. *}
VAR
i: integer;
xh,hh,h6: real;
dym,dyt,yt: glnarray;
BEGIN
hh := h*0.5;
Algoritmi Compleci


121
h6 := h/6.0;
xh := x+hh;
FOR i := 1 to n DO BEGIN
yt[i] := y[i]+hh*dydx[i]
END;
derivs(xh,yt,dyt);
FOR i := 1 to n DO BEGIN
yt[i] := y[i]+hh*dyt[i]
END;
derivs(xh,yt,dym);
FOR i := 1 to n DO BEGIN
yt[i] := y[i]+h*dym[i];
dym[i] := dyt[i]+dym[i]

END;
derivs(x+h,yt,dyt);
FOR i := 1 to n DO BEGIN
yout[i]:=y[i]+h6*(dydx[i]+dyt[i]+2.0*dym[i])
END
END;

7.8. Metoda Monte Carlo

Pentru rezolvarea unei probleme matematice prin metoda ncercrilor
statistice [6] se construiete pentru problem un proces aleator cu
parametri egali cu mrimile cutate ale problemei. Prin aceasta,
determinarea aproximativ a acestor mrimi are loc pe calea observrii
procesului aleator i a calculului caracteristicilor lui statistice egale
aproximativ cu parametrii cutai. Calculul pentru o prob presupune 10
4

10
6
Caracteristicile metodei au determinat folosirea sa ntr-o varietate de
domenii.
ncercri; pentru folosirea metodei sunt necesare calculatoare
performante - care exist astzi curent.
Un exemplu simplu este calculul integralei
dx x I
1
0
=

( 7.67)
Problema revine la calculul ariei de sub graficul funciei. Aa cum se vede
i n figura 7.4, graficul este ncadrat n ptratul 1 x 0 ; 1 x 0
Problema revine la calculul ariei de sub graficul funciei. Aa cum se vede
i n figura 7.4, graficul este ncadrat n ptratul 1 x 0 ; 1 x 0

Figura 7.7
Algoritmi Compleci


122
Deoarece analitic valoarea integralei este 3 / 2 I = raportul ariei de sub
curb la aria ptratului unitate este 2/3.
Pentru a rezolva problema prin metoda Monte Carlo , se folosesc
numerele aleatoare astfel:

1. se ia un numr aleator i se plaseaz pe axa Ox
2. se ia radical din acest numr aleator i se pune pe grafic punctul de
coordonate (x, y = x
1/2
3. se ia un alt numr aleator; el poate fi mai mare dect x
)
1/2
i

atunci
punctul pe care l determin se afl n afara ariei dintre axa Ox i curba
funciei, sau poate fi mai mic dect x
1/2
acest ultim caz, n care punctul a czut n aria de interes, un contor , N
1
este incrementat ( crescut) cu o unitate.
i atunci punctul determinat se
afl n interiorul ariei determinate de graficul funciei. n
4.Toate ncercrile sunt numrate de un alt contor, N.

Dup un numr mare de ncercri, o estimare a ariei de sub curb este
dat de raportul N1/N .
Ct de bun este aceast estimare?
Probabilitatea a N1 reuite din N ncercri independente este dat de
funcia de distribuie binomial:
( )
( )
1 1
N N N
1 1
1
q p
! N N ! N
! N
p , N , N B

= ( 7.68)
unde p 1 q = iar p este probabilitatea de reuit la o ncercare (pentru
cazul considerat p=2/3)
Valoarea ateptat a lui N
1
este dat de media ponderat
( ) Np p , N , N B N ) N ( E
0 N
1 1 1
1
= =

=
( 7.69)
amintindu-ne c B(N1 , N, p) este normat la unitate ca orice funcie de
distribuie. Valoarea ateptat a ptratului abaterii de la medie sau
varianta lui N
1
fa de medie este
( ) ( ) | | ( ) ( ) | |
( ) ( ) Npq p 1 Np p N Np p 1 N N
N E N E Np N E N var
2 2 2
2
1
2
1
2
1 1
= = +
= = =
( 7.70)
Abaterea standard este
( ) ( ) | | ( )
2 / 1 2
1 1
Npq Np N E N = = ( 7.71)
Deviaia standard a estimrii N
1
/N a ariei de sub curba y = x
1/2
( )
N
pq
N
Npq
N
N var
N
N
var
2 2
1 1
= = |
.
|

\
|
este
( 7.72)
N
pq
N
N
1
= |
.
|

\
|
( 7.73)
Pentru cazul considerat la N=100 valoarea ateptat pentru N
1
este
aproximativ 67 , 0 N ,
3
2
100
1
iar 2
3
10
3
1
3
2
100 ) N (
1
=
i
( )( )
047 . 0
30
2
100
3 / 1 3 / 2
N
N
1
= |
.
|

\
|
sau % 7
3 / 2
047 . 0

Algoritmi Compleci


123
Aadar, eroarea relativ a determinrii integralei prin metoda Monte Carlo
este de 7% pentru N=100 un rezultat absolut acceptabil pentru un
numr att de mic de ncercri. Dup ce ai urmrit exemplul descris, se
poate face o generalizare a calculului integralei definite pentru o funcie
oarecare

=
b
a
dx ) x ( f y ( 7.74)
cu aceeai metod. Pornirea metodei Monte Carlo se face dac
defineti un dreptunghi de int dup cum urmeaz
{ } c ) x ( f 0 , b x a = ( 7.75)
c fiind valoarea maxim din domeniu a funciei.
Pentru puncte generate aleator i aruncate spre dreptunghiul definit mai
sus, raportul dintre numrul de puncte N
1
care cad ntre graficul funciei i
axa Ox i numrul total de puncte aruncate N exist relaia
c ) a b (
dx ) x ( f
N
N
b
a 1


( 7.76)
de unde nelegi c
c ) a b (
N
N
dx ) x ( f
1
b
a

( 7.77)
este valoarea aproximativ a integralei.
Practic, pentru fiecare punct generat aleator ( )
i i
, se verific
respectarea condiiei
( )
i i
f ( 7.78)
Respectarea condiiei produce creterea cu o unitate a contorului N
1
Dup N ncercri se calculeaz valoarea aproximativ a integralei.
O problem pe care ai sesizat-o probabil, este c nu s-a stabilit o cale
prin care folosind un numr aleator cu valori cuprinse ntre 0 i 1 s se
produc perechea de coordonate pentru fiecare punct ce urmeaz s fie
plasata n domeniul dreptunghiular. Algoritmul respectiv va fi tratat ceva
mai trziu. Gndete-te deja la o soluie posibil.
n continuare urmrete o alt metod de evaluare Monte Carlo a
integralei

=
b
a
dx ) x ( f I . Dac notezi o mrime aleatoare distribuit
uniform n domeniu ( ) b , a cu densitatea de probabilitate
( )
( )


=
b , a x dac 0
b , a x dac ) a b /( 1
) x ( p

( 7.79)
Poi defini o speran matematic a funciei ( ) f cu expresia
( ) | | I
a b
1
dx ) x ( p ) x ( f f E
b
a

= =


( 7.80)
Presupune c se fac N ncercri n urma crora se obin valorile
N 2 1
, , , ale mrimii aleatoare . Deoarece pentru numere mari
sperana matematic a funciei este dat de
( ) | | ( )

N
1 i
i
f
N
1
f E ( 7.81)
Algoritmi Compleci


124
rezult c pentru un numr suficient de mare de ncercri
( )

N
1 i
i
f
N
a b
I ( 7.82)


7.8.1. Numere aleatoare

Din exemplele de mai sus ai vzut c pentru utilizarea metodei Monte
Carlo este necesar s producem valori aleatoare ale unor parametri;
pentru realizarea acestei cerine este nevoie s ai acces la o surs
oarecare de numere aleatoare uniform distribuite n intervalul [0, 1).
Exist liste cu astfel de numere generate aleator i exist algoritmi de
generare pe calculatoarele digitale. De fapt calculatoarele opereaz cu
numere pseudo-aleatoare care satisfac condiiile pentru numere
aleatoare pe o prob dat ( perioad ) de numere. ntotdeauna trebuie
fcut testul distribuiei uniforme pe intervalul [0, 1) a numerelor generate.
Exist rutine de generare a numerelor pseudo-aleatoare fie uniform
distribuite fie distribuite Gauss ( urmrete de exemplu problema n
referina bibliografic general [9]).

7.8.2. Principiul fundamental al metodei Monte Carlo

cazul discret
Gndete-te la E
1
, E
2
, ..., E
n
evenimente independente care se exclud
reciproc i care se produc cu probabilitile p
1
, p
2
, ..., p
n
astfel nct
1 p p p
n 2 1
= + + + ( 7.83)
Un numr aleator, r, uniform distribuit n intervalul [0, 1) care satisface
relaia:
i 2 1 1 i 2 1
p p p r p p p + + + + + +

( 7.84)
va determina evenimentul E
i
. Acesta este principiul fundamental al
metodei Monte Carlo aa cum se aplic la cazul discret al unui numr
finit de evenimente.

cazul continuu
n cazul unei variabile x care variaz continuu pe un interval [a, b), care
are probabilitatea p(x)dx ca x s se gseasc n intervalul x, x+ dx i
pentru care

=
b
a
1 dx ) x ( p ( 7.85)
relaia
( )

=
x
a
d p r ( 7.86)
determin unic pe x ca funcie de r. Acesta este principiul metodei
Monte Carlo aa cum se aplic el pentru variabile continue.

Algoritmi Compleci


125
7.8.2.1. Exemplul 1

Fie x uniform distribuit pe intervalul [a, b]. Atunci probabilitatea ca x s ia
valori n intervalul x, x+dx este p(x)dx = dx / (b-a). Aplicnd principiul
metodei MC pentru cazul continuu
( )
( ) a b
a x
a b
d
r
x
a


( 7.87)
de unde
( ) a b r a x + = ( 7.88)
ne d legtura ntre numrul aleator r uniform distribuit pe intervalul [0,1)
i mrimea de interes, x. Relaia este folosit la calculul integralei prin
metode MC pentru obinerea lui x i y pe intervalele [a,b] i, respectiv
[0,c] unde c este o valoare egal sau mai mare dect cea mai mare
valoare a lui f(x) n intervalul [a,b], presupunnd c 0 ) x ( f n acest
interval.
Dac vei analiza urmtorul program vei vedea c acesta calculeaz

1
0
dx x prin prima metod Monte Carlo aa cum aceasta a fost expus
la nceputul unitii de nvare.

EX33.PAS
program intmc; {integrala prin metoda Monte Carlo}
const n=1000; a=0; b=1;
{n=numar de numere aleatoare de generat
a, b=limitele inferioara si superioara ale
integralei}
var i, r, n1:word;
x, y, smc:real;
function f(x:real):real;
begin
f:=sqrt(x); {functia de integrat}
end;
begin
n1:=0; randomize;
for i:=1 to n do
begin
x:=random(100)/100.; y:=random(100)/100.;
if y<=f(x) then n1:=n1+1;
end;
smc:=1.*n1/n; writeln( int.mc. = ,smc:10:4);
readln;
end.
Algoritmi Compleci


126
Rulnd programul vei nelege ce nseamn pentru precizia rezultatului
creterea numrului de probe i de asemenea care este importana
folosirii de numere cu adevrat aleatoare.

Programul EX34.PAS calculeaz prin cele dou metode Monte Carlo
integrala


1
0
dx ) x ( f pentru forme ale lui f(x) deja considerate n
EX31.PAS Calculeaz i compar rezultatele cu cele date de metodele
trapezelor i Simpson.

EX34.PAS

program intmc; {integrala prin metoda Monte Carlo}
const n=10000; a=0; b=1;
{n=numar de numere aleatoare de generat
a,b=limitele inferioara si superioara ale
integralei}
c=2 {valoarea maxima a functiei pe intervalul 0,a}
var i, r, n1:word;
x, y, smc:real;
function f(x:real):real;
begin
f:=1+x; {functia de integrat}
end;
begin
n1:=0;randomize; {primul algoritm}
for i:=1 to n do begin
x:=random(100)/100.; y:=c*random(100)/100.;
if y<=f(x) then n1:=n1+1;
end;
smc:=c*(b-a)*n1/n;
writeln( int.mc. 1= ,smc:10:4); readln;
{al doilea algoritm}
smc:=0; for i:=1 to n do
begin
x:=random(100)/100.; smc:=smc+f(x);
end;
smc:=smc*(b-a)/n; writeln( int.mc. 2=,smc:10:4);
readln; end.

ntr-un al doilea exemplu i se propune rezolvarea unei probleme de
fizic nuclear folosind metoda MC.

Consider o substan radioactiv depus uniform ntr-un strat subire pe
un suport n form de inel de raze R
0
< R
1
(fig.7.8). Determin
coordonatele x i y ale punctului din care este emis la un moment dat o
particul din sursa radioactiv.
Probabilitatea emisiei este proporional cu arie suprafeei emitoare;
prin urmare
( )
2
0
2
1
R R
dR R 2
S
dS
dR ) R ( p


= =

( 7.89)
Algoritmi Compleci


127

Figura 7.8
O surs radioactiv uniform depus pe un inel de raze R
0
i R
1


Aplicnd principiul fundamental al metodei Monte Carlo n cazul continuu
( )
( )
( )
2
0
2
1
2
0
2 R
R
2
0
2
1
R
R
R R
R R
d
R R
2
d ) ( p r
0 0

= =

( 7.90)
astfel c
( )
2
0
2
1
2
0
R R r R R + = ( 7.91)
n ceea ce privete unghiului care este uniform distribuit pe intervalul
[0, 2], densitatea de probabilitatea are expresia


2
d
d ) ( p = ( 7.92)
i

= =


0
2
d ) ( p r ( 7.93)
de unde
r 2 = ( 7.94)
Astfel

=
=

sin R y
cos R x
( 7.95)

Programul EX35.PAS propune o soluie a problemei enunate. Poi
schimba valoarea constantei N. Ai putea lua - de exemplu - n=10 i apoi
n=1000 . Ruleaz programul pentru cele 2 valori ale lui n. Ce observi?
Numerele sunt uniform distribuite pe suprafaa inelului dar un punct este
aleator n sensul c genernd un punct el se poate afla oriunde pe
suprafaa inelului. Concluzia pe care poi s-o tragi este c generarea se
face uniform pe tot inelul dar c nu poi prezice unde anume , la un
moment dat se produce emisia.
Algoritmi Compleci


128
EX35. PAS
program sursarad; {sursa radioactiva distribuita
uniform pe un inel de raze R0,R1}
uses graph;
const n=10; r0=50.; r1=70; {sau n=1000 sau orice
alta valoare in domeniul WORD}
{n=numar de numere aleatoare de generat si razele
inelului}
pi=3.14159;
var i:word;
x, y :array[1..n] of integer;
r, raza, teta:real;
procedure grafica;
var i:word; gd, gm:integer;
xc,yc:word;
begin
gd:=detect; Initgraph(gd,gm,c:\tp\bgi);
xc:=300; yc:=200;
{coordonatele centrului sistemului de referinta}
setbkcolor(15); setcolor(1);
moveto(0,yc); lineto(600,yc); outtextxy(610,yc,X);
{axe X}
moveto(xc,0); lineto(xc,400); outtextxy(xc,10,Y);
{axa Y}
circle(xc,yc,50); circle(xc,yc,70);
{cele 2 cercuri ce definesc inelul}
for i:=1 to n do
putpixel(xc+x[i],yc+y[i],4);
end; {end procedura grafica}

begin
randomize;
for i:=1 to n do
begin
r:=random(100)/100.; {r intre 0 si 1}
raza:=sqrt(r0*r0 +r*(r1*r1-r0*r0));
r:=random(100)/100.; {alt r intre 0 si 1}
teta:=2*pi*r;
x[i]:=trunc(raza*cos(teta));
y[i]:=trunc(raza*sin(teta));
end;
{for i:=1 to n do writeln(x[i]:10,y[i]:10); readln;}
grafica;
readln;
end.
Algoritmi Compleci


129






1
1
1
.
.
.
Descie scrierea poziional a unui numr.




2..Decide dac poate avea rdcini n intervalul ) , ( b a o funcie
polinomial pentru care 0 ) ( ) ( > b f a f .


3.. Descrie o metod rapid de determinare a intervalelor n care se
pot afla rdcinile unei funcii polinomiale


4. Scrie care este nelesul integralei definite a funciei f, pozitive, pe
intervalul ) , ( b a .


5. Scrie relaia recurent de rezolvare a ecuaiilor difereniale cu
metoda Runge Kutta de ordin 4.


T
T
T
e
e
e
s
s
s
t
t
t
u
u
u
l
l
l


d
d
d
e
e
e


a
a
a
u
u
u
t
t
t
o
o
o
e
e
e
v
v
v
a
a
a
l
l
l
u
u
u
a
a
a
r
r
r
e
e
e


1
1
1


1. Patru. Zecimal, binar, octal, hexazecimal.
2. Metoda mpririlor repetate la 2.
3. Metoda nmulirilor repetate cu 2.
4. Se combin metodele de la punctele 1 i 2
5. 1100.01
6. 51.8125
10
,63.52
8
, 33.A8
16
5. Trece numrul 12.25 din baza 10 n baza 2
6. Trece numrul binar 110011.10101 ntr-un numr n baza zece,
ntr-un numr n baza 8 i ntr-un numr n baza 16
7.9. Test de autoevaluare 2





























Rspunsurile le gseti la pagina 129

7.10. Rspunsuri la testele de autoevaluare
Algoritmi Compleci


130


T
T
T
e
e
e
s
s
s
t
t
t
u
u
u
l
l
l


d
d
d
e
e
e


a
a
a
u
u
u
t
t
t
o
o
o
e
e
e
v
v
v
a
a
a
l
l
l
u
u
u
a
a
a
r
r
r
e
e
e


2
2
2


1. Numerele se scriu ca sume de puteri succesive ale bazei sistemului
cu coeficieni numere pozitive strict mai mici dect aceast baz.
2. Da. Cel puin dou.
3. irul lui Rolle de exemplu. ntre dou rdcini succesive ale
derivatei unei funcii se poate afla o rdcin a funciei.
4. Integrala definit este aria cuprins ntre graficul funciei i axa Ox
delimitat de verticalele b x a x = = ,
5. Soluia se scrie sub forma ( )
4 3 2 1 m 1 m
k k 2 k 2 k
6
h
y y + + + + =
+

unde
( )
( )

+ + =
|
.
|

\
|
+ + =
|
.
|

\
|
+ + =
=
3 m m 4
2
m m 3
1
m m 2
m m 1
hk y , h x f k
2
hk
y ,
2
h
x f k
2
hk
y ,
2
h
x f k
y , x f k

































7.11. Termeni i expresii cheie. Formule cheie

















Termeni i expresii cheie

Sistem de numeraie; scriere poziional
Algoritmi de conversie
Metoda njumtirii intervalului
Algoritmi de rezolvarea ecuaiilor algebrice i a
sistemelor lineare.
Integrare numeric
Metoda Runge Kutta
Metoda Monte Carlo
Algoritmi Compleci


131



























7.12. Lucrare de verificare

Rezolv problema de mai jos. Trimite tutorelui rspunsurile pe care le
consideri corecte



















Formule cheie
Scrierea poziional
m
m
1
1
0
0
1
1
2 n
2 n
1 n
1 n
r d r d r d r d r d r d N

+ + + + + + + =
Formula rdcinii aproximative iterate n metoda Newton
( )
( )
1 n
1 n
1 n n
x ' F
x F
x x

=
Integrarea numeric prin metoda trapezelor
( )
( )

+ =
+ + + + + + =

ih a f y
y y y 2 y 2 y 2 y
2
h
I I
i
n 1 n 2 n 2 1 0 Trapeze


Integrare Runge Kutta de ordin 4
( )
4 3 2 1 m 1 m
k k 2 k 2 k
6
h
y y + + + + =
+


( )
( )

+ + =
|
.
|

\
|
+ + =
|
.
|

\
|
+ + =
=
3 m m 4
2
m m 3
1
m m 2
m m 1
hk y , h x f k
2
hk
y ,
2
h
x f k
2
hk
y ,
2
h
x f k
y , x f k



1. Editeaz programul EX33.PAS (1 p)
2. Ruleaz programul folosind diferite valori pentru n
a. n=10 (2 p)
b. n=1000 (2 p)
c. n= 10000 (2 p)

3. Comenteaz rezultatul obinut cunoscnd valoarea analitic
exact a integralei. (1 p)

4. Pune randomize n stare de comentariu. Ruleaz din nou
programul de cteva ori. Comenteaz. (1 p)


Not: Se acord un punct din oficiu
Total 10 puncte
Algoritmi Compleci


132
7.13. Bibliografie

1. W.S.Dorn, D.D. Mc Crocken, Metode numerice cu programe n
Fortran, Editura Tehnic, p 13-49










Prelucrarea statistic a datelor experimentale


133
Unitatea de nvare 8
PRELUCRAREA STATISTIC A DATELOR EXPERIMENTALE


Cuprins Pagina
8. PRELUCRAREA STATISTIC A DATELOR RXPERIMENTALE 133
8.1. Obiectivele Unitii de nvare 8
Prelucrarea statistic a datelor experimentale 134
8.2. Valoare medie, varian, abatere standard 134
8.3. Propagarea erorilor 137
8.4. Distribuii 139
8.4.1. Distribuia binomial 140
8.4.2. Distribuia Poisson 141
8.4.3. Distribuia Gauss 146
8.5. Metode de fit 149
8.5.1. Metoda celor mai mici ptrate pentru o dreapt 149
8.5.2. Metoda celor mai mici ptrate pentru un polinom de grad 3 154
8.6. Test de autoevaluare 159
8.7. Rspunsuri la testul de autoevaluare 1 160
8.8. Termeni i expresii cheie. Formule cheie 160
8.9. Lucrare de verificare 162
8.10. Bibliografie 162





Prelucrarea statistic a datelor experimentale


134
8.1. Obiectivele Unitii de nvare 8
Prelucrarea statistic a datelor experimentale






















8.2. Valoare medie, varian, abatere standard

Scopul acestei uniti de nvare este s te nvee cum se pot obine cele
mai bune rezultate din datele experimentale i cum stabileti precizia
acestor rezultate.

Adesea n procesul de msurare a unei mrimi fizice se obin valori
diferite la repetarea msurrii n aceleai condiii fizice. Aceasta fie pentru
c mrimea fizic respectiv are un caracter statistic ( de exemplu
numrul de dezintegrri ntr-o secund ale unui element radioactiv,
lungimea drumului ntre dou ciocniri ale unui neutron n combustibilul
nuclear sau n mediul moderator ntr-un reactor nuclear, etc.)fie din cauza
preciziei limitate a aparaturii de msur ( de exemplu erorile de calibrare
a ceasului, riglei, balanei folosite la msurarea intervalelor de timp, a
lungimilor sau a maselor).

n toate cazurile enumerate mai sus repetarea msurrilor n aceleai
condiii va conduce la rezultate diferite. Dac aceste msurri se fac de
un numr foarte mare de ori se constat c valorile pentru mrimea fizic
respectiv fluctueaz n jurul unei valori medii. Dac N este numrul de
repetri ale msurrii mrimii fizice n exact aceleai condiii i x
i
valoarea
obinut ntr-una din msurri valoarea medie x a irului finit de N
msurri va fi media aritmetic a valorilor x
i
Cnd vei termina de studiat acest capitol vei fi capabil :

s foloseti mrimile statistice care descriu rezultatele
experimentelor de fizic .


s foloseti metode asistate de calculator pentru a prelucra
datele experimentale;


s alegi metoda adecvat de fitare a datelor experimentale
cu un model dat pentru a determina parametrii modelului

s aplici cunotinele dobndite pentru a interpreta statistic
rezultatele experimentelor de fizic.
Prelucrarea statistic a datelor experimentale


135

=
=
N
1 i
i
x
N
1
x ( 8.1)
iar abaterea valorii x
i
de la x va fi
i
dat de:
x x
i i
= ( 8.2)
de unde rezult c fiecare msurare individual se aeaz n jurul valorii
medii
i i
x x + = ( 8.3)
Abaterile pot fi mai mari sau mai mici. O msur a mprtierii valorilor x
i

fa de valoarea medie x poate fi dat de ansamblul abaterilor sau de o
mrime care s descrie acest ansamblu. Aceast mrime nu poate fi o
abatere medie deoarece aceast mrime ar fi zero indiferent care sunt
valorile
i
.
( )

= =
|
.
|

\
|
= = =

= = =
0 x x
x x
N
1
x x
N
1
N
1
N
1 i
i
N
1 i
i
N
1 i
i


( 8.4)
Abaterea ptratic medie, variana, este ns diferit de zero. Aceast
mrime este definit ca
( )
( )

> = |
.
|

\
|
+ =
= = =


=
= =
0 x x x x x 2 x
N
1
x x
N
1
N
1
2
2
N
1 i
2
i
2
i
2
x
N
1 i
2
i
N
1 i
2
i
2 2
x


( 8.5)
de unde i
2
2
x x >

( 8.6)
adic media ptratelor este mai mare dect ptratul mediei unui ir de
valori.
Pentru caracterizarea mprtierii se mai folosesc i mrimile
2
x
= ( 8.7)
numit abatere standard i abaterea standard relativ definit de:
x
2
x

= ( 8.8)
numit i fluctuaie.
Sumele se fac pe N valori ale probei msurate. n general ns valoarea
medie nu este cunoscut; x este o estimare a ei i de aceea
( )

=
N
1 i
2
i
2
x
x x
1 N
1
( 8.9)
Astfel o singur msurare a mrimii nu ne permite s estimm dispersia
valorilor, dac valoarea adevrat nu este cunoscut.
Este important s reii c este o msur a dispersiei distribuiei
msurrilor i nu a preciziei cu care este determinat x .
Prelucrarea statistic a datelor experimentale


136
N
x
x

= ( 8.10)
Astfel crescnd numrul de msurri ale mrimii x, variana
2
x
nu se
schimb (exceptnd mici fluctuaii) deoarece numitorul i numrtorul
ecuaiei (8.5) sau (8.9) cresc mai mult sau mai puin proporional, aceasta
ntruct
2
x
se presupune a fi o estimare a varianei ntregii populaii care
este clar independent de dimensiunea probei N. Pe de alt parte,
variana valorii medii N /
2
x
descrete cu creterea lui N; mai multe date
ajut la localizarea valorii medii cu o precizie mai nalt.
Uneori msurrile sunt grupate astfel nct o aceeai valoare a x
j
apare
n m
j
evenimente. Atunci ecuaiile (8.1) i (8.9) se scriu

=
j
j
j
j j
m
x m
x ( 8.11)
i
( )
1 m
x x m
j
j
j
2
j j
2
x

|
|
.
|

\
|

( 8.12)
Variana asupra valorii medii este

=
j
j
2
x 2
m
u

( 8.13)
Pentru distribuii continue, valoarea medie i variana sunt date respectiv
de formulele

= dx x x n
N
x ) (
1
( 8.14)
( )

= dx x x ) x ( n
N
1 2
2
x
( 8.15)
unde

= dx ) x ( n N ( 8.16)
Factorul (N -1) din formula lui
2
x
s-a nlocuit cu N care se presupune a fi
foarte mare n acest caz.
Cnd cteva experiene msoar aceeai mrime fizic i se obine un
set de rezultate a
i

a dispersiei sunt date de formulele:
cu diferite erori
i
, atunci cele mai bune estimri ale lui
a i

=
2
i
2
i
i
1
a
a

( 8.17)
Prelucrarea statistic a datelor experimentale


137
i

=
2
i
2
1 1

( 8.18)
Astfel rezultatul experimentului i urmeaz a fi ponderat cu un factor
2
i
/ 1
. ntr-un anume sens,
2
i
/ 1 d o msur a informaiei coninute de acel
experiment particular.
Cnd diferitele experiene de msur realizeaz diferite precizii
i
folosind
aceleai aparate dar repetnd msurarea de n
i
ori i mediind, atunci
i
i
n
1
( 8.19)
i formulele de mai sus devin

=
=


i
i i i
n N
n / a n a
( 8.20)
Prima din relaiile de mai sus spune c fiecare din msurrile originale de
precizie egal este egal ponderat; a doua este evident.

8.3. Propagarea erorilor

Presupune o funcie f(x, y) de dou variabile independente. Fie f , x i y
valorile medii ale funciei i variabilelor. Prin repetarea msurrilor se
obin abaterile
i
i
j
ale variabilelor x i y ( i i j iau toate valorile ntregi
ntre 1 i N, N fiind numrul de repetri ale msurrii). Pe baza ipotezei
c abaterile sunt mici fa de mrimile respective, funcia f (x
i
, y
j
) se
poate dezvolta n serie Taylor n ordinul 1; forma pe care o obii este
( )
( )

+ =
+ + = + =
j
y , x
i
y , x
j i
j i ij j i
y
f
x
f
y , x f ) y , x ( f
y , x f f f ) y , x ( f


( 8.21)
Ai neglijat termenii de ordin mai nalt dect unu. Identificnd:
( )

=
=
j
y , x
i
y , x
ij
y
f
x
f
f
y , x f f

( 8.22)
Abaterea medie ptratic a funciei f este, prin definiie
( )
( ) ( )

|
|
.
|

\
|

+
|
.
|

\
|

=
(
(

|
|
.
|

\
|

+
|
.
|

\
|

=
|
|
.
|

\
|

= =

2
y
2
2
x
2
2
f
i j
2
j
2
2
i
2
2
f
i j
2
j i
2
ij
2
f
y
f
x
f
y
f
x
f
N
1
y
f
x
f
N
1
f



( 8.23)
conform definiiei (8.5) i a faptului c suma produselor
i

j
conine
termeni ce se vor anula.
Prelucrarea statistic a datelor experimentale


138
Generaliznd, pentru o funcie f (x
1
, x
2
, ..., x
m
) de m variabile x
k

( m , 1 k = ):

=
|
|
.
|

\
|

=
m
k
k
x
f
x
f
1
2
2
2
( 8.24)
Relaia de mai sus este cunoscut sub numele de teorema de
propagare a abaterilor standard sau, mai obinuit, teorema de
propagare a erorilor.

Pentru a te obinui cu tipul de calcule implicate n estimarea erorilor i
propunem s urmreti urmtoarea
Aplicaie: se fac mai multe msurri ale nlimii de la care cade liber un
corp greu (h
1
, h
2
, ..., h
n
) i ale timpului de cdere (t
1
, t
2
, ..., t
n
). Ne
propunem ca din datele experimentale s aflm valoarea numeric a
acceleraiei gravitaionale.
Pentru aceasta, s presupunem c ai lsat corpul s cad liber de la
aceeai nlime. Trebuie s calculezi valoarea medie pentru h, nlimea
de aruncare, precum i pentru timpul de cdere, t. Trebuie de asemenea
s determini abaterile standard ale celor dou mrimi
h
i
i
.
Din valorile medii vei putea calcula g i aplicnd teorema de propagare a
erorilor vei putea afla i abaterea standard pentru g,
g
.

Programul prezentat n continuare, pe care i sugerm s-l studiezi , s-l
editezi i s-l rulezi, realizeaz calculele descrise mai sus calcul.

EX36.PAS
program prop_er;
type vec100=array[1..100] of real;
vec20=array[1..20] of real;
var xmediu,sigx2:vec20;
valx:vec100;
i,j,m,n:integer;
fmediu,sigfm2,sig1fm2,sig2fm2:real;
procedure med_abstd(x:vec100;n:integer;
Var xm,sigx2:real);
var sx:real; i:integer;
begin
sx:=0; for i:=1 to n do sx:=sx+x[i];
xm:=sx/n;
sx:=0; for i:=1 to n do sx:=sx+sqr(x[i]-xm);
sigx2:=sx/n;
end;
function f(h,t:real):real;
begin
f:=2*h/(t*t);
end;
function dfh(h,t:real):real;
begin
dfh:=f(h,t)/h;
end;
Prelucrarea statistic a datelor experimentale


139
function dft(h,t:real):real;
begin
dft:=-2*f(h,t)/t;
end;
begin
write( introdu nr. de variabile ); readln(m);
write( introdu numarul de seturi de
masuratori,n=); readln(n);
{n este numarul de masuratori asupra lui h si t} for
i:=1 to m do
{in cazul nostru m=2}
begin
writeln( introdu valorile x[,i,]); {x[1] sunt
valorile h, aici}
for j:=1 to n do read(valx[j]); {x[2] sunt valorile t,
aici} med_abstd(valx,n,xmediu[i],sigx2[i]);
end;
fmediu:=f(xmediu[1],xmediu[2]); {fmediu este g aici}
sig1fm2:=sqr(dfh(xmediu[1],xmediu[2]));
sig2fm2:=SQR(dft(xmediu[1],xmediu[2]));
sigfm2:=sig1fm2*sigx2[1]+sig2fm2*sigx2[2]; writeln(
h=,xmediu[1]:10:2,+/-,SQRT(sigx2[1]):10:2);
writeln(
t=,xmediu[2]:10:2,+/-,SQRT(sigx2[2]):10:2);
writeln(
g=,fmediu:10:2,+/-,SQRT(sigfm2):10:2); readln;
readln;
end.

8.4. Distribuii

n cadrul unei msurri se ncearc obinerea valorii adevrate a mrimii
fizice. Ceea ce obii de obicei este valoarea medie care este o
aproximaie a valorii adevrate cu att mai bun cu ct numrul de
msurri este mai mare. Dar valoarea pentru mrimea fizic msurat
dei nu este unic nu este totui liber a fi oricare. Ea are o distribuie
care de obicei poate fi aproximat cu o funcie matematic simpl numit
funcie densitate de probabilitate, p(x), sau funcie de distribuie.
Aceasta nseamn c probabilitatea de a obine o valoare x n intervalul
(x, x+dx) este dat de p(x)dx dac variabila x variaz continuu i de p(x
i
)
pentru x
i
dac x are valori discrete.
Funcia de distribuie satisface condiia


=1 dx ) x ( p ( 8.25)
pentru x continuu i respectiv

=
=
N
1 i
i
1 ) x ( p ( 8.26)
pentru x discret, N fiind numrul de valori posibile pentru x
i

Prelucrarea statistic a datelor experimentale


140
Parametrii importani ce caracterizeaz o distribuie sunt
valoarea medie definit de


= dx ) x ( p x ( 8.27)
pentru o mrime care variaz continuu i respectiv

=
=
N
1 i
i i
) x ( p x ( 8.28)
pentru o mrime cu variaie discret
abaterea ptratic medie (variana) definit de:
( )

>= <
> =< =


dx ) x ( p x x
x dx ) x ( p x
2 2
2 2 2 2

( 8.29)
respectiv
( )

=
=
N
1 i
i
2
i
2
) x ( p x ( 8.30)

8.4.1 Distribuia binomial

Distribuia binomial este prima funcie de distribuie care a fost enunat
teoretic; Bernoulli a stabilit probabilitatea unei frecvene de apariie n
cazul fenomenelor ntmpltoare. El a artat c dac p este
probabilitatea de apariie a unui eveniment i q = 1 - p este probabilitatea
ca acel eveniment s nu apar, atunci ntr-o serie de N probe
independente probabilitatea ca acel eveniment s apar de k ori este
( )
( )
k N k
p 1 p
! k N ! k
! N
) k ( P

= ( 8.31)
k fiind variabila aleatoare. Se vede c probabilitatea P(k) are forma
termenului de ordin k+1 din dezvoltarea binomului lui Newton (p + q)
N
Distribuia binomial este normat la unitate
de
unde i numele acestei distribuii.
( )
( ) ( ) 1 q p p 1 p
! k N ! k
! N
) k ( P
N
N
0 k
k N k
N
0 k
= + =

=

=

=
( 8.32)
Distribuia binomial este un caz particular al distribuiei multinomiale.
n cazul distribuiei binomiale la o singur prob sunt posibile numai dou
evenimente ale cror probabiliti sunt, respectiv, p i q ( evident p + q =
1). n cazul distribuiei multinomiale la o singur prob sunt posibile mai
multe evenimente; dac probabilitile acestor evenimente sunt p
1
, p
2
, ...,
p
s
atunci

1 p p p
s 2 1
= + + + ( 8.33)

Distribuia binomial este distribuia fundamental care guverneaz
fenomenele ntmpltoare. Celelalte funcii de distribuii se pot deduce
din aceasta.
Prelucrarea statistic a datelor experimentale


141
Distribuia binomial are doi parametri independeni: probabilitatea
simpl, p, i numrul N de probe independente. Aceast distribuie se
aplic riguros fenomenelor n care numrul total de probe N i valoarea
aleatoare K pot lua numai valori ntregi. Pentru acest motiv valorile k i
2
k se calculeaz prin sumare i nu prin integrare.
( )
( )
( )

= + =

= =

=

=

Np q p Np k
q p
! k N ! k
! 1 N
Np ) k ( P k k
1 N
N
0 k
k N 1 k
N
0 k
( 8.34)
unde s-a inut seama c numrul combinrilor de N obiecte luate cte k,
k
N
C este
( )! k N ! k
! N
C
k
N

= ( 8.35)
i c exist relaia
1 k
1 N
k
N
C N C k

= ( 8.36)
La fel
( ) | |
( ) ( )

+ = + =
+ = =

= =
2 2 2 2
N
0 k
N
0 k
2 2
p N p 1 Np Np p 1 N N k
) k ( P k 1 k k ) k ( P k k
( 8.37)
i
Npq p N p N Npq k k
2 2 2 2
2
2 2
= + = = ( 8.38)
Valoarea ateptat a lui k ( realizarea evenimentului de probabilitate p)
fiind Np k = putem estima p ca raportul N / k i de asemeni o aproximaie
a varianei cu
|
|
.
|

\
|

=
N
k
1
N
k
N
1 N
N
s
2
( 8.39)
Din relaiile (8.34) i (8.38) se vede c k
2
< egalitatea realizndu-se
doar pentru p=0. Astfel n general variana este mai mic dect valoarea
ateptat. Aceasta deoarece N impune o limit superioar asupra lui k,
limit ce reduce dispersia distribuiei n k. De exemplu dac p=1 atunci
singura valoare diferit de zero a lui P este cea pentru k = N ( avem doar
reuite) i deci = 0. Dac p este foarte mic, limita superioar impus de
N nu e important i k
2
Similar pentru p aproape egal cu 1,
constrngerea asupra numrului de nereuite nu este important i
variana n numrul de nereuite (care evident este egal cu variana
numrului de reuite ) este aproximativ egal cu numrul de nereuite.
Distribuia binomial are o form greoaie pentru aplicaii n fizica nuclear
din cauza factorialelor care sunt greu de calculat n cazul numerelor mari.
Din aceast cauz experiena a impus gsirea altor funcii de distribuie
mai comode diferitelor aplicaii.
) t tan cons ( m Np dar , N , 0 p = ( 8.40)
distribuia binomial trece n distribuie Poisson
t tan cons p , N = ( 8.41)
distribuia binomial trece n distribuie Gauss.
Prelucrarea statistic a datelor experimentale


142
8.4.2. Distribuia Poisson

Distribuia Poisson descrie apariia evenimentelor rare, adic a
evenimentelor a cror probabilitate de apariie este foarte mic i
constant. Aceast distribuie este foarte important pentru msurrile de
radiaii unde se nregistreaz dezintegrri puine fa de numrul foarte
mare al nucleelor prezente.
Distribuia Poisson se obine din distribuia binomial cnd
m Np , N , 0 p = ( 8.42)
Dac introduci p = m / N n expresia distribuiei binomiale vei obine
( )
( ) ( )

|
.
|

\
|

|
.
|

\
| +
=
|
.
|

\
|

|
.
|

\
|

k N k
k N k
N
m
1
N
m
! k
1 k N 1 N N
) k ( P
N
m
1
N
m
! k N ! k
! N
) k ( P

( 8.43)
Dac N este foarte mare atunci
( ) ( )
1
N
1 k N 1 N N
k
N
lim
=
+

( 8.44)
i
m
N
N
k N
N
e
N
m
1
N
m
1
lim lim


=
|
.
|

\
|
=
|
.
|

\
|
( 8.45)
astfel c forma distribuiei Poisson este:
m
k
e
! k
m
) k ( p

= ( 8.46)
unde k este - de exemplu - valoarea obinut pentru numrul de
dezintegrri nregistrate n intervale egale de timp iar m este valoarea
medie dat de:

=
=
=
max
max
0
0
k
i
i
k
i
i i
n
k n
m ( 8.47)
n care n
i
este frecvena cu care s-a obinut valoarea k
i
.

=
=
max
0
k
i
i
n N ( 8.48)
este numrul total de msurri.

Ar trebui s reii cteva dintre proprietile principale ale distribuiei
Poisson
1. este normat la unitate; deoarece

=
=
0
!
k
m
k
e
k
m
( 8.49)
rezult

=
=
0
1 ) (
k
k p ( 8.50)
Prelucrarea statistic a datelor experimentale


143
2. valoarea sa medie este m.
( )

=
= =

=
m e
k
m
m k
e
k
m
k k kp k
k
m
k
k
m
k
k
0
1
0 0
! 1
!
) (
( 8.51)
3. abaterea standard este m
( ) | |
( ) ( )

+ =

=
+ = =

=
m m e
k
m
m e
k
m
m k
k p k k k k p k k
k
m
k
k
m
k
k k
2
0
1
0
2
2 2
0 0
2 2
! 1 ! 2
) ( 1 ) (
( 8.52)
rezult c (vezi i relaiile 8.5)
m k k
k
= =
2
2
( 8.53)
4. probabilitatea de a obine zero evenimente (de exemplu numr de
dezintegrri zero) este diferit de zero i cu att mai mare cu ct valoarea
medie, m, a variabilei k este mai mic.
5.deoarece variabila k ia doar valori ntregi, reprezentarea grafic a
funciei p(k) este o histogram. Distribuia este mai asimetric pentru m
mai mic ;n plus
) ( ) 1 ( m p m p = ( 8.54)
dac m este ntreg:
6. distribuia Poisson are un singur parametru independent. Acesta este
valoarea medie m. Cu
( )
( ) ( )
m
k
t
k
k
e
k
m
e
k
t
t p

=

=
! !

( 8.55)
probabilitatea de a observa k evenimente independente ntr-un interval
de timp t cnd viteza de numrare este i numrul ateptat de


evenimente n intervalul de timp este m, valoarea medie a variabilei k ce
are o distribuie Poisson este m i
2
n n
= m. Aceasta este baza cunoscutei
formule
( 8.56)
formul care se aplic erorilor statistice n multe situaii ce implic
numrarea unor evenimente independente ntr-un interval de timp fixat.
Cnd m distribuia Poisson tinde la o distribuie Gauss; pentru ca
aceast aproximaie s fie valabil rezonabil se gsete c 5 sau mai
mult este o aproximaie suficient de bun pentru considerarea lui m ca
infinit. Aceasta este foarte util deoarece multe calcule statistice sunt mult
mai simplu de realizat dac erorile sunt distribuite Gauss.
Un exemplu de variabil care este distribuit Poisson este numrul de
particule detectat de un contor ntr-un interval de timp t n situaiile cnd
sursa radioactiv este o surs slab ca intensitate.
Urmtorul program calculeaz, plecnd de la un ir de valori msurate
pentru frecvena de apariie a unui numr k de pulsuri n detector,
mrimea m i distribuia frecvenelor teoretice, ( )
i i
k p N = i reprezint
grafic histograma.
Prelucrarea statistic a datelor experimentale


144
Observ forma histogramei pentru diferite valori n
k
. Pentru aceasta
ruleaz programul activnd alt set de valori n
k
prin tergerea acoladelor
de la setul respectiv.
Atenie: doar un set n
k
trebuie s fie activ ntr-o rulare a programului. Vei
verifica n acest fel proprietile 4 i 5 ale distribuiei Poisson i faptul c
ea tinde la o distribuie Gauss pentru de ndat ce 5 = k

EX37.PAS
program distr_Poisson;
uses graph;
type vector=array[0..10] of integer;
const k:vector=(0,1,2,3,4,5,6,7,8,9,10);
nk:vector=(5,10,30,60,76,85,72,50,30,15,4);
{ nk:vector=(35,70,98,100,70,40,30,20,10,5,2);}
{ nk:vector=(70, 90, 50, 30, 10, 5, 0, 2,0,0,0);}
{ nk:vector=(48,90,90,50,30,10,5,2,1,0,1);}
label unu, doi, trei;
var nkmax, kmax, snk,sknk:integer;
cx:array[0..10] of string[2];
kmediu, sigk, scy, sknk1:real;
niuk:vector;
i, scx, gd, gm, ix, iy1, iy2:integer;
g:char;
begin
sknk:=0; snk:=0; kmax:=10;
for i:=0 to kmax do
begin
sknk:=sknk+nk[i]*k[i]; snk:=snk+nk[i];
end;
kmediu:=1.*sknk/snk;sknk1:=0;
writeln(kmediu=,kmediu:6:2);
for i:=0 to kmax do sknk1:=sknk1+sqr(k[i]-
kmediu)*nk[i]; sigk:=sqrt(1.*sknk1/snk);
niuk[0]:=round(snk*exp(-kmediu));
for i:=1 to kmax do niuk[i]:=round(niuk[i-
1]*kmediu/i);
writeln(k n(k) niu(k) );
writeln;
for i:=0 to kmax do writeln(k[i]:7,nk[i]:7,
niuk[i]:7);

trei: write( doriti histograma? (d/n));
readln(g); if upcase(g)=N then goto unu;
if upcase(g)=D then goto doi;
goto trei;

doi: nkmax:=nk[0]; if nkmax<niuk[0] then
nkmax:=niuk[0];
for i:=1 to kmax do
begin
if nkmax<nk[i] then nkmax:=nk[i];
if nkmax<niuk[i] then nkmax:=niuk[i];
end;
Prelucrarea statistic a datelor experimentale


145
scx:=50;scy:=300./nkmax;gd:=detect;
initgraph(gd,gm,\tp\bgi);
setlinestyle(0,0,1);line(10,330,10+scx*(kmax+1),330);
line(10,330,10,330-round(scy*nk[0]));moveto(10,330-
round(scy*nk[0]));
linerel(scx,0); for i:=1 to kmax do
begin
ix:=10+i*scx; iy1:=330-round(scy*nk[i-1]);
iy2:=330-round(scy*nk[i]);
line(ix,iy1,ix,iy2);
moveto(ix,iy2);linerel(scx,0);
end;

moveto((kmax+1)*scx+10,iy2);lineto((max+1)*scx+10,330)
; setlinestyle(1,0,1);line(10,330,10,330-
round(scy*niuk[0])); moveto(10,330-
round(scy*niuk[0]));linerel(scx,0);
for i:=1 to kmax do
begin
ix:=10+i*scx; iy1:=330-round(scy*niuk[i-1]);
iy2:=330-round(scy*niuk[i]);
line(ix,iy1,ix,iy2);
moveto(ix,iy2);linerel(scx,0);
end;

moveto((kmax+1)*scx+10,iy2);lineto((kmax+1)*scx+10,330
);
for i:=0 to kmax do
begin
str(i,cx[i]); outtextxy(35+i*scx, 335,cx[i]);
end;
repeat until keypressed; closegraph;

unu:end.


Figura 8.1
Distribuii Gauss cu = 1 i diferite
Prelucrarea statistic a datelor experimentale


146
8.4.3. Distribuia Gauss

Distribuia normal sau distribuia Gauss este distribuia cea mai des
folosit n prelucrarea datelor experimentale. Forma sa este
( )
2
2
2
2
1
) (

=
x
e x p ( 8.57)
Aa cum vezi, forma sa este determinat de doi parametri independeni,
i . Reine cteva dintre proprietile distribuiei Gauss

1. este normat la unitate


= 1 ) ( dx x p ( 8.58)
(reamintete-i o proprietate important a integralei Euler - c

= du e
u
2
)

2. este simetric fa de dreapta x = n sensul c are valori egale pentru
puncte egal deprtate de .
p(x
1
) = p(x
2
) ( 8.59)
dac
| x
1
| = |x
2
| ( 8.60)

3. admite un singur maxim, pentru

=
=

2
1
) ( p
x
( 8.61)

4.prin integrare numeric se poate verifica faptul c probabilitatea ca o
valoare msurat,x, s aparin intervalului ( ) + , este
( )

+

= = +


693 . 0 ) ( dx x p x r ( 8.62)
analog pentru intervalele de 2 i 3,
( )

+

= = +



2
2
954 . 0 ) ( 2 2 dx x p x r ( 8.63)
( )

+

= = +



3
3
9973 . 0 ) ( 3 3 dx x p x r ( 8.64)
Aa cum vezi, pentru o mrime, ale crei valori sunt distribuite Gauss,
valoarea ei apare cu o probabilitate de:
69,3 % n intervalul (, +)
95,4 % n intervalul (2, +2)
99,7 % n intervalul (3, +3)
nelegi c vei grei foarte puin ( cu mai puin de 0,3%) dac arunci
valorile ce nu aparin intervalului (3, +3).
Prelucrarea statistic a datelor experimentale


147
Programul EX38.PAS calculeaz, pentru un set de valori distribuite
Gauss, valorile de mai sus folosind pentru integrare funcia simpson
care a aprut prima dat n EX31.PAS - aflat acum n fiierul
simpson.inc

EX38.PAS

program distr_Gauss;
uses graph;
type fct=function(x:real):real;
const pi=3.14159; n=51;
xm:array[1..10]of real
=(11.,12.,13.,14.,15.,13.,12.,14.,13.,13);
var x,y:array[1..100] of real;
s,xmediu,sigx,xmin,xmax,dx,xscal,yscal:real;
r:array[1..3] of real;
i:byte;
gd,gm,nxx,nyy:integer;
nx,ny:array[1..100] of integer;
maxx,maxy:integer;
{$F+}
function gauss(x:real):real;
begin
gauss:=EXP(-sqr(x-xmediu)/2/sigx/sigx);
end; {end Gauss}

{$F-}
{$i simpson.inc}
BEGIN
s:=0;for i:=1 to 10 do s:=s+xm[i]; xmediu:=s/10;

writeln(xmediu=,xmediu);
s:=0; for i:=1 to 10 do s:=s+sqr(xm[i]-xmediu);
sigx:=sqrt(s/10);
writeln(sigx=,sigx); readln;
for i:=1 to 3 do
begin
xmin:=xmediu-i*sigx;
xmax:=xmediu+i*sigx;
r[i]:=simpson(xmin,xmax,20,gauss)/sigx/sqrt(2*pi);
writeln(probabilitatea ca o valoare x sa cada);
writeln(in intervalul xmediu-,i,*sigx -
xmediu+,i,*sigx=,r[i]);
end;
readln;
writeln( urmeaza reprezentarea grafica a
distr. Gauss a valorilor x);
readln;
dx:=6*sigx/51;
xscal:=n/sigx/2;
yscal:=300*sigx*sqrt(2*pi);
writeln(xscal=,xscal, yscal=,yscal);
Prelucrarea statistic a datelor experimentale


148
for i:=1 to n do
begin
x[i]:=xmediu-(n div 2+1-i)*dx;
y[i]:=gauss(x[i])/sigx/sqrt(2*pi);
nx[i]:=trunc(x[i]*xscal+0.5);nxx:=nx[i];
ny[i]:=trunc(y[i]*yscal+0.5);nyy:=ny[i];
end;
readln;
gd:=detect;
InitGraph(gd,gm,c:\tp\bgi);setbkcolor(1);
line(10,400,600,400);{axa X} outtextxy(600,400,x);
line(10,0,10,400);{axa Y} outtextxy(0,10,y);
setlinestyle(userbitln,$aa,normwidth);setcolor(14);
line(nx[27],400,nx[27],0);{axa ce marcheaza xmediu}
outtextxy(nx[27]-20,410,xmediu);
line(10,400-trunc(ny[26]*0.5),600,400-
trunc(ny[26]*0.5));
{axa ce marcheaza dispersia }
for i:=1 to n do outtextxy(nx[i],400-ny[i],+);
readln; end.
Fiierul simpson.inc conine:
function simpson(a, b:real; n:integer; f:fct):real;
var s, h:real;
i:integer;
begin
h:=(b-a)/n/2; s:=f(a)+f(b);
i:=1;
while i < 2*n do begin
if i mod 2 = 0 then s:=s + 2*f(a+i*h)
else s:=s+4*f(a+i*h);
i:=i+1 end;
simpson:=s*h/3;
end; {end simpson}

Distribuia Gauss are largi aplicaii n teoria erorilor. Proprietile
distribuiei Gauss sunt de regul folosite la interpretarea semnificaiei
unor rezultate experimentale. Folosirea lor n acest context se leag de
urmtoarele presupuneri:
Valoarea mrimii de interes a fost calculat corect ( adic nu exist erori
sistematice (biases) importante.
Mrimea erorilor a fost corect calculat. Aceasta este deosebit de
important deoarece o estimare incorect a preciziei unui experiment ar
putea avea un efect foarte mare asupra semnificaiei rezultatului pe care
l calculezi i deci asupra concluziilor pe care le tragi. Astfel, o
subestimare a erorilor experimentului pe care l analizezi cu un factor 2
poate schimba efectul unei deviaii standard de 2 ( care apare la nivel de
5%) ntr-unul de deviaie standard 4 ( a crui probabilitate este de doar
610
5
Forma rezoluiei experimentale este astfel nct aproximaia Gauss este
rezonabil. Aceasta este aproape ntotdeauna neadevrat, prin aceea c
probabilitatea de a obine deviaii mai mari ( 3) de la valoarea corect
adic un astfel de efect nu poate s se ntmple dac teoria
este corect.
Prelucrarea statistic a datelor experimentale


149
este adesea mai mare dect cea dat de distribuia Gauss. Acest efect
este de asemeni probabil s rezulte din creterea artificial a estimrii
asupra semnificaiei deviaiilor observate.

8.5. Metode de fit

Cnd vrei s testezi modul n care o teorie explic datele experimentale
pe care le analizezi, trebuie s recurgi la aa numitele metode de fit
pentru a vedea n ce msur datele experimentale se potrivesc cu
formula teoretic presupus (testul
2
) fie
pentru a determina valorile parametrilor liberi care determin
potrivirea formulei teoretice presupuse corecte cu datele
experimentale (metoda celor mai mici ptrate).

8.5.1. Metoda celor mai mici ptrate pentru o dreapt

Presupune c msori n punctele x[1]..x[n] valorile unei mrimi fizice y
despre care tii c depinde liniar de x ( y = a*x + b ) i c ai obinut
valorile y[1]..y[n]. Din cauza erorilor (
i
) n msurarea lui y punctele nu se
aeaz perfect pe o dreapt. Cum trasezi totui dreapta printre punctele
experimentale i cum obii parametrii ei?
Dac suma ponderat a ptratelor distanelor de la punctele
experimentale la o anumit dreapt este cea mai mic cu putin, se
poate spune c din motive statistice aceast dreapt descrie cel mai bine
, se potrivete cel mai bine, fiteaz, datele experimentale. Dac dreapta
cutat are forma b x a y + = , matematic, condiia de mai sus se scrie
( )
minim
1
2
2
=

=

=
n
i i
i i
b x a y
S

( 8.65)
Pentru gsirea minimului expresiei, trebuie determinate punctele critice,
n care derivatele pariale se anuleaz, adic, succesiv

0 =

a
S
( 8.66)
din care rezult
0
1
2
1
2
1
2
2
=

+

= = =
n
i i
i i
n
i i
i
n
i i
i
y x x
b
x
a

( 8.67)
i
0 =

b
S
( 8.68)
din care rezult
0
1
1
2
1
2
1
2
= +

= = =
n
i i
i
n
i i
n
i i
i
y
b
x
a

( 8.69)
Ansamblul relaiilor(8.67)(8.69) formeaz un sistem de 2 ecuaii cu 2
necunoscute, a i b. Notnd
i
i
p =
2
1

( 8.70)
Prelucrarea statistic a datelor experimentale


150
ponderea unei msurri, sistemul se scrie:

= +
= +


= = =
= = =
n
i
i i
n
i
i
n
i
i i
n
i
i i i
n
i
i i
n
i
i i
y p p b x p a
y x p x p b x p a
1 1 1
1 1 1
2
( 8.71)
cu soluiile

|
|
.
|

\
|

|
|
.
|

\
|

|
|
.
|

\
|
|
|
.
|

\
|

|
|
.
|

\
|

|
|
.
|

\
|

|
|
.
|

\
|

=
|
|
.
|

\
|

|
|
.
|

\
|

|
|
.
|

\
|
|
|
.
|

\
|

|
|
.
|

\
|

|
|
.
|

\
|

|
|
.
|

\
|
=




= = =
= = = =
= = =
= = = =
2
1 1
2
1
1 1 1 1
2
2
1 1
2
1
1 1 1 1
n
i
i i
n
i
i i
n
i
i
n
i
i i i
n
i
i i
n
i
i i
n
i
i i
n
i
i i
n
i
i i
n
i
i
n
i
i i
n
i
i i
n
i
i i i
n
i
i
x p x p p
y x p x p y p x p
b
x p x p p
y p x p y x p p
a
( 8.72)
Dac

1
=
2
= ... =
n
=
y
( 8.73)
atunci
p
1
= p
2
= ... = p
n
( 8.74)
i expresiile pentru a i b devin cele ntlnite adesea n fitul cu o dreapt
prin metoda celor mai mici ptrate



|
|
.
|

\
|

|
|
.
|

\
|

|
|
.
|

\
|

|
|
.
|

\
|

|
|
.
|

\
|

|
|
.
|

\
|
=
|
|
.
|

\
|

|
|
.
|

\
|

|
|
.
|

\
|

|
|
.
|

\
|

|
|
.
|

\
|

=




= =
= = = =
= =
= = =
2
1 1
2
1 1 1 1
2
2
1 1
2
1 1 1
n
i
i
n
i
i
n
i
i i
n
i
i
n
i
i
n
i
i
n
i
i
n
i
i
n
i
i
n
i
i
n
i
i i
x x n
y x x y x
b
x x n
y x y x n
a
( 8.75)
Pentru a gsi erorile cu care sunt determinai parametrii a i b ai dreptei
poi aplica teorema de propagare a erorilor (8.24)

|
|
.
|

\
|

+ |
.
|

\
|

= =

|
|
.
|

\
|

+ |
.
|

\
|

= =
2
2
2
2
2
2
2
2
2
2
) , (
) , (
y x b
y x a
y
b
x
b
y x b b
y
a
x
a
y x a a


( 8.76)
Cum am presupus c erori se fac doar n y rezult c
x
= 0 i deci
Prelucrarea statistic a datelor experimentale


151

|
|
.
|

\
|

|
|
.
|

\
|

=
=
n
i
y
i
b
n
i
y
i
a
y
b
y
a
1
2
2
2
1
2
2
2


( 8.77)
cu
y y y y
n
= = = =
2 1
( 8.78)
Cum
2
2
1 1
2
1
2
(
(
(
(
(

|
|
.
|

\
|

|
|
.
|

\
|

|
|
.
|

\
|

=
|
|
.
|

\
|

= =
=
n
i
i
n
i
i
n
i
i i
i
x x n
x x n
y
a
( 8.79)
rezult
y
n
i
i
n
i
i
a
x x n
n

|
|
.
|

\
|

|
|
.
|

\
|

=

= =
2
1 1
2
( 8.80)
La fel, din
2
2
1 1
2
1 1
2
2
(
(
(
(
(

|
|
.
|

\
|

|
|
.
|

\
|

|
|
.
|

\
|

|
|
.
|

\
|
=
|
|
.
|

\
|



= =
= =
n
i
i
n
i
i
n
i
i i
n
i
i
i
x x n
x x x
y
b
( 8.81)
rezult
y
n
i
i
n
i
i
n
i
i
b
x x n
x

|
|
.
|

\
|

|
|
.
|

\
|

= =
=
2
1 1
2
1
2
( 8.82)
n EX39.PAS se afl un program de fit pentru o dreapt.
Datele luate din ((([6] tabelul 7.2))) se refer la nlimea (n metri) i
greutatea
(n kilograme) a 9 oameni cu vrst cuprins ntre 25 i 29 de ani. Se
presupune o eroare n aprecierea greutii de 1 Kg. Toate aceste date se
afl n fiierul datehg.in

EX39.PAS

program fit_dreapta; { metoda celor mai mici patrate}
uses graph;
label unu,doi,trei,patru;
var x,y,z:array[1..100] of real;
sx,sy,sxy,sx2,sigy,num,a,b,siga,sigb,ymax:real;
h, scx, scy:real;
i,n,gd,gm,px,py,sigpy:integer;
g:char; f:text;
begin
Prelucrarea statistic a datelor experimentale


152
assign(f,datehg.in); reset(f);
readln(f,n); for i:=1 to n do readln(f,x[i],y[i]);
readln(f,sigy);
sx:=0;sy:=0;sxy:=0;sx2:=0;{initializare pentru sume}
for i:=1 to n do
begin
sx:=sx+x[i]; sy:=sy+y[i]; sxy:=sxy+x[i]*y[i];
sx2:=sx2+x[i]*x[i];
end;
num:=n*sx2-sx*sx;{calcul numitor si verificare cu
0}
if num=0 then goto unu;
{calcul paramatrii dreptei}
a:=(n*sxy-sx*sy)/num; b:=(sx2*sy-sx*sxy)/num;
siga:=sqrt(n/num)*sigy; sigb:=sqrt(sx2/num)*sigy;
for i:=1 to n do z[i]:=a*x[i]+b; {punctele de pe
dreapta}
writeln( i , x , y , y=a*x+b );
{ scrie rezultate}
for i:=1 to n do
writeln(i:3,x[i]:10:2,y[i]:10:2,z[i]:10:2);
writeln( parametrii dreptei y=a*x+b sunt:);
writeln(a=,a:8:2,+/-,siga:8:2);
writeln(b=,b:8:2,+/-,sigb:8:2);
writeln( doriti greutatea cea mai probabila );
writeln( pentru o anumita inaltime?
(d/n)); readln(g);
if upcase(g)=N then goto trei else
begin

write( introdu h in metri= ); readln(h);
writeln(greutatea la h=,h:10:2, este ,
a*h+b:10:2);

end;
trei: write( doriti reprezentare grafica?(d/n));
readln(g);if upcase(g)=N then goto doi;
if upcase(g)=D then goto patru else goto
trei;
{rerprezentare grafica a dreptei si
punctelor experimentale}
patru: ymax:=y[1]; if ymax<z[1] then ymax:=z[1];
for i:=2 to n do
begin
if ymax<y[i] then ymax:=y[i];
if ymax<z[i] then ymax:=z[i];
end;
ymax:=ymax+10;
scx:=400./x[n]; scy:=300./ymax; {factori de scalare}
gd:=detect; InitGraph(gd,gm,c:\tp\BGI);
setbkcolor(15); setcolor(1);
Prelucrarea statistic a datelor experimentale


153
line(10,10,10,410); line(10,400,600,400);{axele X si
Y}
for i:=1 to n do
begin
px:=trunc(scx*x[i]+0.5);
py:=400-trunc(scy*y[i]+0.5);
sigpy:=trunc(scy*sigy+0.5); setcolor(3);
circle(px,py,trunc(sigpy*0.7*scy));
putpixel(px,py,4);
end;
setcolor(2);
line(0,400-trunc(scy*b),trunc(scx*3.+0.5),
400-trunc(scy*(a*3.+b)+0.5));
outtextxy(20,10,Y);outtextxy(600,400,X);
line(trunc(1.*scx),390,trunc(1.*scx),410);
outtextxy(trunc(1.*scx),415,100cm);
line(trunc(2.*scx),390,trunc(2.*scx),410);
outtextxy(trunc(2.*scx),415,200cm);
py:=trunc(scy*(a*1.+b)+0.5);
line(0,400-py,20,400-py);outtextxy(20,400-py,33.51);
py:=trunc(scy*(a*2.+b)+0.5);line(0,400-py,20,400-py);
outtextxy(20,400-py,85.42);
readln; closegraph; goto doi;
unu: writeln( calcul imposibil);
doi:end.


Figura 8.2
Prelucrarea statistic a datelor experimentale


154
Reprezentarea grafic a datelor din fiierul datehg.in fitate cu o
dreapt

Fiierul datehg.in are coninutul prezentat n tabelul din figura 8.3













Figura 8.1

Rezultatul grafic al rulrii programului EX39.PAS se vede n figura 8.2.

8.5.2. Metoda celor mai mici ptrate pentru un polinom de grad 3

Dac punctele experimentale se ateapt s descrie un polinom de grad 3
3
3
2
2 1 0
x a x a x a a y + + + = ( 8.83)
atunci plecnd tot de la condiia:
( ) minim
1
2
3
3
2
2 1 0
= =

=
n
i
i
x a x a x a a y S ( 8.84)
se obine urmtorul sistem de 4 ecuaii cu 4 necunoscute (a
0
, a
1
, a
2
i a
3
)
din anularea derivatelor pariale

0 ; 0
0 ; 0
3 2
1 0
a
S
a
S
a
S
a
S
( 8.85)

= + + +
= + + +
= + + +
= + + +




= = = = =
= = = = =
= = = = =
= = = =
n
1 i
i
3
i
n
1 i
6
i 3
n
1 i
5
i 2
n
1 i
4
i 1
n
1 i
3
i 0
n
1 i
i
2
i
n
1 i
5
i 3
n
1 i
4
i 2
n
1 i
3
i 1
n
1 i
2
i 0
n
1 i
i i
n
1 i
4
i 3
n
1 i
3
i 2
n
1 i
2
i 1
n
1 i
i 0
n
1 i
i
n
1 i
3
i 3
n
1 i
2
i 2
n
1 i
i 1 0
y x x a x a x a x a
y x x a x a x a x a
y x x a x a x a x a
y x a x a x a N a
( 8.86)
Sistemul de ecuaii algebrice lineare se rezolv prin metoda Gauss-
Jordan, metod prin care sistemul se reduce la o form n care
coeficienii sub diagonala principal sunt zero.
9
1.57 61.24
1.63 63.50
1.63 71.21
1.68 69.85
1.73 68.95
1.78 73.03
1.83 78.93
1.88 81.65
1.93 78.93


Prelucrarea statistic a datelor experimentale


155
Procedura
gaussj(var a:glnpbynp; n,np:integer; var b:glnpbymp;
m,mp:integer)
din [7] cere ca programul principal ce o folosete s defineasc tipurile:
type glnpbynp=array[1..np,1..np] of real;
glnpbymp=array[1..np,1..mp] of real;
glnp=array[1..np] of integer;
a este matricea coeficienilor i are dimensiunea npXnp
n este numrul de ecuaii ale sistemului, n < np
b este matricea termenilor liberi, de dimensiune npXmp atunci cnd cu
aceeai matrice a se rezolv mai multe (m) sisteme de ecuaii ce difer
prin termenii liberi (n cazul nostru matricea b are o singur coloan).
PROCEDURE gaussj(VAR a: glnpbynp; n,np: integer;
VAR b: glnpbymp; m,mp: integer);
VAR
big,dum,pivinv: real;
i,icol,irow,j,k,l,ll: integer;
indxc,indxr,ipiv: glnp;
BEGIN
FOR j := 1 to n DO BEGIN ipiv[j] := 0 END;
FOR i := 1 to n DO BEGIN
big := 0.0; FOR j := 1 to n DO BEGIN
IF (ipiv[j] <> 1) THEN BEGIN
FOR k := 1 to n DO BEGIN
IF (ipiv[k] = 0) THEN BEGIN
IF (abs(a[j,k]) >= big) THEN BEGIN
big := abs(a[j,k]); irow := j; icol := k
END
END ELSE IF (ipiv[k] > 1) THEN BEGIN
writeln(pause 1 in GAUSSJ - singular matrix);
readln
END
END
END
END;
ipiv[icol] := ipiv[icol]+1;
IF (irow <> icol) THEN BEGIN
FOR l := 1 to n DO BEGIN
dum := a[irow,l]; a[irow,l] := a[icol,l];
a[icol,l] := dum
END;
FOR l := 1 to m DO BEGIN
dum := b[irow,l]; b[irow,l] := b[icol,l];
b[icol,l] := dum
END
END;
indxr[i] := irow; indxc[i] := icol;
IF (a[icol,icol] = 0.0) THEN BEGIN
writeln(pause 2 in GAUSSJ - singular matrix);
readln
END;
pivinv := 1.0/a[icol,icol]; a[icol,icol] := 1.0;
Prelucrarea statistic a datelor experimentale


156
FOR l := 1 to n DO BEGIN
a[icol,l] := a[icol,l]*pivinv
END;
FOR l := 1 to m DO BEGIN
b[icol,l] := b[icol,l]*pivinv
END;
FOR ll := 1 to n DO BEGIN
IF (ll <> icol) THEN BEGIN
dum := a[ll,icol]; a[ll,icol] := 0.0;
FOR l := 1 to n DO BEGIN
a[ll,l] := a[ll,l]-a[icol,l]*dum
END;
FOR l := 1 to m DO BEGIN
b[ll,l] := b[ll,l]-b[icol,l]*dum
END
END
END
END;
FOR l := n DOWNTO 1 DO BEGIN
IF (indxr[l] <> indxc[l]) THEN BEGIN
FOR k := 1 to n DO BEGIN
dum := a[k,indxr[l]];
a[k,indxr[l]] := a[k,indxc[l]];
a[k,indxc[l]] := dum
END
END
END
END;

Fiierul se salveaz n directorul curent ca gaussj.inc
Iat n continuare o aplicaie de fit cu polinom de grad trei.
Datele experimentale, aflate n fiierul tip text, polinom3.dat,
reprezint dependena cldurii specifice masice a apei de temperatur.
Datele folosite sunt cele prezentate n tabelul din figura 8.4 i sunt luate
din[6] (tabelul 7.4)


Fiierul polinom3.dat:








Figura 8.2

21
0. 1.00762 5. 1.00392 10. 1.00153 15. 1.00000 20. 0.99907
25. 0.99852 30. 0.99826 35. 0.99818 40. 0.99828 45. 0.99849
50. 0.99878 55. 0.99919 60. 0.99967 65. 1.00024 70. 1.00091
75. 1.00167 80. 1.00253 85. 1.00351 90. 1.00461 95. 1.00586
100. 1.00721

Prelucrarea statistic a datelor experimentale


157
Iat i programul de calcul care realizeaz fitul propus

EX40.PAS
program mcmp_polinom;
uses graph;
const np=10; mp=10;
type glnpbynp=array[1..np,1..np] of real;
glnpbymp=array[1..np,1..mp] of real;
glnp=array[1..np] of integer;
var x, y, yt:array[1..30] of real;
a:glnpbynp; b:glnpbymp;
i, j, n:byte; gd, gm:integer;
px, py, pyt:integer;
scx, scy, ymin, ymax:real;
sx6, sx5, sx4, sx3, sx2, sx, sx3y, sx2y, sxy,
sy:real;
a0, a1, a2, a3:real;
f:text; numef:string;
BEGIN
write(introdu nume fisier cu date de \intrare:);
readln(numef);
assign(f,numef); reset(f); readln(f,n);
for i:=1 to n do read(f,x[i],y[i]); close(f);
sx6:=0;sx5:=0;sx4:=0;sx3:=0;sx2:=0;
sx:=0;sx3y:=0;sx2y:=0;sxy:=0;sy:=0;
for i:=1 to n do
begin
sx6:=sx6+sqr(x[i])*sqr(x[i])*sqr(x[i]);
sx5:=sx5+ sqr(x[i])*sqr(x[i])*x[i];
sx4:=sx4+sqr(x[i])*sqr(x[i]);
sx3:=sx3+sqr(x[i])*x[i];
sx2:=sx2+sqr(x[i]);
sx:=sx+x[i]; sx3y:=sx3y+sqr(x[i])*x[i]*y[i];
sx2y:=sx2y+sqr(x[i])*y[i]; sxy:=sxy+x[i]*y[i];
sy:=sy+y[i];
end;
a[1,1]:=n; a[1,2]:=sx; a[1,3]:=sx2; a[1,4]:=sx3;
b[1,1]:=sy;
a[2,1]:=sx; a[2,2]:=sx2; a[2,3]:=sx3; a[2,4]:=sx4;
b[2,1]:=sxy;
a[3,1]:=sx2; a[3,2]:=sx3; a[3,3]:=sx4; a[3,4]:=sx5;
b[3,1]:=sx2y;
a[4,1]:=sx3; a[4,2]:=sx4; a[4,3]:=sx5; a[4,4]:=sx6;
b[4,1]:=sx3y;
writeln(matricea a este:); for i:=1 to 4 do
begin
for j:=1 to 4 do
write(a[i, j]:17:1);
writeln;
end;
readln; writeln(matricea b este:);
for i:=1 to 4 do writeln(b[i,1]:15:5); readln;
Prelucrarea statistic a datelor experimentale


158
gaussj(a,4,np,b,1,mp);
writeln(parametrii polinomului
y=a0+a1*x+a2*x^2+a3*x^3 sunt:);
a0:=b[1,1]; a1:=b[2,1];
a2:=b[3,1]; a3:=b[4,1];
writeln(a0=,a0, a1=,a1);
writeln(a2=,a2, a3=,a3); readln;
writeln( i x y yt);
for i:=1 to n do
yt[i]:=a0+a1*x[i]+a2*x[i]*x[i]+a3*sqr(x[i])*x[i];
for i:=1 to n do writeln(i:3, x[i]:10:1, y[i]:10:5,
yt[i]:10:5);
ymin:=1.E30; ymax:=-1.E30;
for i:=1 to n do
begin
if ymin > y[i] then ymin:=y[i];
if ymin > yt[i] then ymin:=yt[i];
if ymax < y[i] then ymax:=y[i];
if ymax < yt[i] then ymax:=yt[i];
end;
writeln(ymin=, ymin, ymax=, ymax); READLN;
scy:=300/(ymax-ymin); scx:=6.;
gd:=detect;InitGraph(gd,gm,\tp\bgi);
setcolor(3);
for i:=1 to n do
begin
px:=trunc(scx*x[i]+0.5);
py:=400+trunc(scy*ymin+0.5)-trunc(scy*y[i]+0.5);
pyt:=400+trunc(scy*ymin+0.5)-trunc(scy*yt[i]+0.5);
circle(px+5, py, 2); putpixel(px+5, pyt, 2);
end;
readln; pyt:=400+trunc(scy*ymin+0.5)-trunc(scy+0.5);
line(trunc(scx*x[1])+5, pyt, trunc(scx*x[n])+5, pyt);
{axaX}
outtextxy(trunc(scx*x[n])+10,pyt,X);line(trunc(scx*x
[1])+5,
pyt,trunc(scx*x[1])+5, 400-pyt); {axa Y}
outtextxy(trunc(x[1]*scx)+5,400-pyt-10,Y);
px:=trunc(scx*(x[n]-x[1]));
line(px,pyt-10,px,pyt+10);outtextxy(px,pyt+20,1.);
px:=trunc(scx*((x[n]-x[1])/2));
line(px+10,pyt-
10,px+10,pyt+10);outtextxy(px,pyt+20,0.5);
px:=trunc(scx*x[1])+5;
line(px,pyt-10,px,pyt+10);outtextxy(px,pyt+20,0.);
outtextxy(px-5,pyt-5,1. ); readln; closegraph;
END.
Prelucrarea statistic a datelor experimentale


159




1.Calculeaz media punctelor realizate atunci cnd arunci de foarte
multe ori un zar.



2.Calculeaz dispersia punctajelor obinute n experimentul de mai
sus



3.Scrie expresia matematic a legii de propagare a erorilor .



4.Calculeaz probabilitatea ca aruncnd de 5 ori un zar s obii de
dou ori 6



5.Scrie expresia pantei dreptei de fit pentru o dependen linear

Figura 8.5
fitul datelor c
p
(T ) cu un polinom de grad 3

Figura 8.5 arat ct de bine sunt fitate datele cu un polinom de grad 3.
Cercurile albe reprezint datele experimentale, iar punctele sunt valorile
rezultate din fitul datelor cu un polinom de grad 3

8.6. Test de autoevaluare


Rspunsurile le
gseti la pagina 160
Prelucrarea statistic a datelor experimentale


160




1. ( )
6
21
6 5 4 3 2 1
6
1
= + + + + + = m .
2. 108 / 315

3.

=
|
|
.
|

\
|

=
m
k
k
x
f
x
f
1
2
2
2


4. Numrul cerut este coeficientul lui x
2
n dezvoltarea
5
6
5
6
1
|
.
|

\
|
+ x adic
5 5
3
2
5
6
1250
6
5
= C

5.
2
1 1
2
1
1 1 1 1
|
|
.
|

\
|

|
|
.
|

\
|

|
|
.
|

\
|
|
|
.
|

\
|

|
|
.
|

\
|

|
|
.
|

\
|

|
|
.
|

\
|
=


= = =
= = = =
n
i
i i
n
i
i i
n
i
i
n
i
i i
n
i
i i
n
i
i i i
n
i
i
x p x p p
y p x p y x p p
a
8.7. Rspunsuri la testul de autoevaluare 1



























8.8. Termeni i expresii cheie. Formule cheie











Termeni i expresii cheie


Valoare medie, varian, abatere standard
Funcie de distribuie
Metoda celor mai mici ptrate
Algoritmi pentru prelucrare statistic a datelor
Prelucrarea statistic a datelor experimentale


161
































Formule cheie
Formula de calcul a mediei

=
=
N
1 i
i
x
N
1
x
Formula de calcul a abaterii ptratice medii
( )
( )

> = |
.
|

\
|
+ =
= = =


=
= =
0 x x x x x 2 x
N
1
x x
N
1
N
1
2
2
N
1 i
2
i
2
i
2
x
N
1 i
2
i
N
1 i
2
i
2 2
x




Distribuia binomial

( )
( )
k N k
p 1 p
! k N ! k
! N
) k ( P

=

Distribuia Poisson
m
k
e
! k
m
) k ( p

=

Distribuia Gauss

( )
2
2
2
2
1
) (

=
x
e x p
Dreapta de fit

|
|
.
|

\
|

|
|
.
|

\
|

|
|
.
|

\
|

|
|
.
|

\
|

|
|
.
|

\
|

|
|
.
|

\
|
=
|
|
.
|

\
|

|
|
.
|

\
|

|
|
.
|

\
|

|
|
.
|

\
|

|
|
.
|

\
|

=




= =
= = = =
= =
= = =
2
1 1
2
1 1 1 1
2
2
1 1
2
1 1 1
n
i
i
n
i
i
n
i
i i
n
i
i
n
i
i
n
i
i
n
i
i
n
i
i
n
i
i
n
i
i
n
i
i i
x x n
y x x y x
b
x x n
y x y x n
a

Prelucrarea statistic a datelor experimentale


162
8.9. Lucrare de verificare

Alege una dintre lucrrile de laborator pe care ai studiat-o deja n cursul
semestrului la o disciplin experimental.
Scrie un program care s fac analiza statistic a datelor.




















8.10. Bibliografie

1.Numerical Recipes The art of Scientific Computing. W.H.Press,
Cambridge Press.





1. Tabeleaz cteva zeci de perechi de date msurate de tine.
(2pt)

2. Scrie programul pe care intenionezi s-l foloseti. (2pt)


3. Ruleaz programul propus. (3 pt)


4. Asigur-te c programul tu comand imprimarea unui tabel de
rezultate. Trimite tutorelui acest tabel mpreun cu listingul
programului. (2 pt)

Not: Se acord un punct din oficiu
Total 10 puncte
Simularea unui experiment de fizic


163
Unitatea de nvare 9
SIMULAREA UNUI EXPERIMENT DE FIZIC


Cuprins Pagina

9. SIMULAREA UNUI EXPERIMENT DE FIZIC 163

9.1. Obiectivele Unitii de nvare 9
Simularea unui experiment de fizic 164

9.2. Experimentul Rutherford 164

9.2.1. Tratarea mprtierii particulelor prin formalismul Lagrange 168

9.3. Lucrare de verificare 178

Bibliografie 179







Simularea unui experiment de fizic


164
9.1. Obiectivele Unitii de nvare 9
Simularea unui experiment de fizic




















Aceast ultim unitate de nvare a cursului are scopul de a ilustra
posibilitatea simulrii asistate de calculator a unor fenomene fizice
complexe.

9.2. Experimentul Rutherford

n 1910 cei mai muli fizicieni ajunseser s cread c atomii sunt formai
din sarcini electrice pozitive i negative i c forele de atracie i repulsie
dintre aceste sarcini electrice sunt responsabile de toate fenomenele
fizice i chimice n solide, lichide, gaze. Deoarece se tia c electronii
sunt prezeni n toate aceste forme ale materiei, prea rezonabil a
presupune c fiecare atom const dintr-o combinaie de sarcini pozitive i
negative. Micrile de vibraie ale electronilor ntr-un astfel de atom ar fi
explicat emisia undelor electromagnetice i, deci, emisia luminii de ctre
atom. Totui att aranjarea sarcinilor electrice n atom ct i mecanismul
care s explice caracteristicile de culoare ale luminii emise au rmas un
mister pn cnd E.Rutherford a descoperit nucleul atomic i Niels Bohr
a dat cuantificarea strilor atomice. Un atom const dintr-un numr de
electroni, s zicem Z electroni, dispui ntr-un nor de sarcini pozitive.
Norul este greu avnd aproape ntreaga mas a atomului. Sarcina
pozitiv n nor este +Ze astfel c ea neutralizeaz sarcina negativ - Ze,
a celor Z electroni. Intr-un atom neperturbat electronii se afl
n poziiile lor de echilibru unde atracia norului asupra electronilor este
anulat de repulsia lor reciproc. Dar dac electronii sunt perturbai, s
zicem prin ciocnire, atunci ei vor avea o micare de oscilaie n jurul
Cnd vei termina de studiat acest capitol vei fi capabi :

s faci legtura dintre un fenomen fizic i simularea lui;


s scrii algoritmi care s permit construirea de programe
pentru simulare

s foloseti capacitile calculatorului pentru a propune
modele operante pentru fenomene fizice

s aplici cunotinele dobndite pentru a studia fenomene
fizice complexe prin simulare .
Simularea unui experiment de fizic


165
poziiilor lor de echilibru i vor emite lumin. Acest model al atomului,
numit modelul budincii cu stafide ddea frecvene ale vibraiilor de
acelai ordin de mrime cu frecvenele luminii dar nu reproducea seriile
spectrale observate.
Rutherford stabilete c cea mai mare parte a masei atomului este
concentrat ntr-o zon mult mai mic, nucleul, aflat n centrul atomului.
Rutherford a studiat emisia particulelor din substanele radioactive. De
exemplu poloniu emite spontan particule cu energii de ordinul MeV care
trec uor prin folii de metal sau sticl sau alte materiale. Rutherford a fost
impresionat de puterea de ptrundere a acestor particule i s-a gndit
c le poate folosi pentru a sonda interiorul atomului.
Cnd un fascicol de particule lovete o foi de metal, ele ptrund n
atomi i sunt deviate prin ciocnirile cu structurile subatomice. De
exemplu, dac interiorul unui atom are structura budincii cu stafide
propus de J.J.Thomson, atunci particulele vor suferi doar deviaii
foarte mici deoarece nici electronii, cu masele lor foarte mici, nici norul
difuz de sarcin pozitiv nu vor fi n stare s perturbe micarea unei
particule masive i cu energie de civa MeV.






n experiment s-au folosit folii subiri de Au i Ag ca inte care au fost
bombardate cu fascicule de particule de la o surs radioactiv. Dup ce
particulele treceau prin folii, ele erau detectate pe un ecran de ZnS care
nregistra impactul fiecrei particule printr-o scintilaie slab. Spre uimirea
lui Rutherford unele particule erau deviate la unghiuri aa de mari c
veneau napoi. Rutherford a intuit imediat c deviaiile mari trebuie s fie
produse de o ciocnire ntre particula i un nucleu masiv dar de
dimensiuni mici n interiorul atomului. Prin urmare a propus modelul
atomic n care atomul e format dintr-un nucleu mic de sarcin +Ze
coninnd aproape ntreaga mas a atomului; acest nucleu este
nconjurat de o mulime de Z electroni. Astfel atomul este asemeni
sistemului solar, nucleul jucnd rolul soarelui i electronii rolul planetelor.









ntr-o ciocnire central conservarea energiei totale d distana minim de
apropiere. n figura de mai jos cele dou drumuri cel de apropiere i cel
de ndeprtare - sunt desenate distinct dei pentru ciocnire central
aceste drumuri sunt suprapuse.
Experiena crucial care a stabilit distribuia spaial a electronilor i a sarcinii
pozitive din atom a fost realizat de H.Geiger i E.Marsden lucrnd sub ndrumarea
lui Rutherford.
Sir Ernest Rutherford 1871 - 1937, fizician englez, profesor la McGill i la
Manchester, director al laboratorului Cavendish la Cambridge ( succesor al lui
J.J.Thomson) este considerat fondatorul fizicii nucleare datorit descoperirii
nucleului atomic i a transmutaiei elementelor prin dezintegrare radioactiv.
Laureat al Premiului Nobel pentru chimie n 1908
Simularea unui experiment de fizic


166

Figura 9.1

min 0
2
2 1
2
4 2 r
e Z Z Mv
E
cin

= = ( 9.1)
cu fm MeV e = 44 . 1 4 /
0
2
, 79 , 2 , 4 . 6
2 1
= = = Z Z MeV E

se obine
fm r 5 , 35
min
= adic o distan de 3.610
14
m sau 1/10
6

din
dimensiunea atomului.
Pe baza acestui model al atomului Rutherford a calculat distribuia
unghiular a particulelor funcie de parametrul de ciocnire b (adic
distana la care ar trece particula fa de nucleu dac nu ar fi deviat).
Deoarece energia cinetic a particulei este mic comparativ cu energia
ei de mas, tratamentul aplicat problemei este unul de mecanic clasic.
Se poate trata probleme n formalismul Lagrange. n care vei lua n
considerare dou grade de libertate: distana ntre centrele celor dou
nuclee ( particula i nucleul int) i unghiul polar fa de direcia
incident (Fig. 9.2).

Din conservarea energiei totale
( ) ( ) r U r r
v
E + + =

=
2 2 2
2
2 2


( 9.2)
poi scoate derivata n raport cu timpul a lui r
( ) ( )
2 2
2


r r U E
dt
dr
= ( 9.3)
Din conservarea momentului cinetic orbital

= = L r b v
2
( 9.4)
poi scoate derivata n raport cu timpul a lui .
2
r
L
dt
d


( 9.5)
Dac elimini timpul ntre relaiile de mai sus gseti

1
2
2 2
2
2
2

(
(

|
|
.
|

\
|
=
r
L
U E
r
L
dr
d


( 9.6)
Simularea unui experiment de fizic


167

Figura 9.2

Traiectoria unei particule alpha n cmpul nucleului de Au cu ilustrarea
coordonatelor r i

Cu schimbarea de variabil w = b/r , dw = b dr/r
2
( )



=
min
0
2
/ 1
2
r
b
w E U
dw
r
obii funcia de
deflecie
( 9.7)
Pentru
r
e Z Z
r U
0
2
2 1
4
) (

= ( 9.8)
vei obine unghiul de mprtiere a particulei legat de parametrul de
ciocnire i de energia cinetic prin relaia
Eb
e Z Z
tg
2 2
2
2 1
= |
.
|

\
|
( 9.9)
Seciunea geometric de interaciune este

=
=


d
db
b
d
d
b
2
2
( 9.10)
i
2
sin 4
1
2 4
2
2
2 1

|
|
.
|

\
|
=
E
e Z Z
d
d
( 9.11)
bine cunoscuta formul Rutherford pentru descrierea distribuiei
unghiulare a particulelor mprtiate pe Au sau Ag.
Simularea unui experiment de fizic


168
9.2.1. Tratarea mprtierii particulelor prin formalismul Lagrange

Pentru studiul mprtierii particulelor pe nuclee de Au sau Ag ai putea
folosi formalismul clasic Lagrange ( lungimea de und de Broglie asociat
sistemului este mic n comparaie cu dimensiunea sa
fm
Ec
c
E k
74 . 0
2
2
1
2
= = =


( 9.12)
cu

+
=
=
=
2
2 1
2 1 2
2
5 . 931
32 . 197
mc
A A
A A
c
MeV mc
fm MeV c

( 9.13)
i
( )
0
3 / 1
2
3 / 1
1 0
1 . 7 r A A r R + = ( 9.14)
(cu r
0
variind ntre 0.9 i 1.5 fm )

n sistemul centrului de mas funcia Lagrange, n coordonatele r i
este
( ) ( ) r U r r + =
2 2 2

2
L ( 9.15)
unde
( ) ( )
2
2 1 2 1
/ mc A A A A + = ( 9.16)
este masa redus a sistemului particul nucleu atomic de aur sau
particul nucleu atomic de argint.
Cnd sarcina ce creeaz cmpul electric n care se mic particula este
o sarcin punctiform
r
e Z Z
r V r U
Coulomb
0
2
2 1
4
) ( ) (

= = ( 9.17)
Ecuaiile de micare Lagrange sunt, n forma general
0 =

|
|
.
|

\
|

i i
q
L
q
L
dt
d
( 9.18)
unde q
i
reprezint coordonatele generalizate corespunztoare
numrului gradelor de libertate de interes - n cazul de care ne ocupm r
i .
Se obin 4 ecuaii difereniale de ordinul nti: Soluiile acestui sistem de
ecuaii difereniale de ordinul nti sunt calculate numeric folosind metode
Runge - Kutta de ordin 4. Pentru rezolvare ai nevoie de condiiile iniiale;
n rezolvarea numeric vei urmri anumite etape . Astfel

vei considera c momentul iniial t=0 este unul la care particula se
afl la o distan suficient de mare de nucleul de Au sau Ag ( n listing-ul
programului constanta x la t0=80 fm), distan la care se consider c
energia de interaciune Coulomb este mult mai mic dect energia
micrii relative a celor dou nuclee i prin urmare poate fi neglijat.
Simularea unui experiment de fizic


169
n programul al crui listing este prezentat mai jos, se calculeaz r
0
ca
funcie de parametrul de ciocnire: pentru opiunea t (studiul traiectoriilor
doar) se genereaz 10 valori pe care le considerm ilustrative, pentru
opiunea s (studiul seciunii Rutherford ) se genereaz aleator 100 valori
ale parametrului de ciocnire b uniform distribuit n cercul de raz 3 b
max

unde b
max
= 3*r
rint
iar r
int
este raza de interaciunee calculat dup formula
3 / 1
2 int
5 . 1 A r =
2 2
0
0 xlat b r + = ( 9.19)
se calculeaz
0
din relaia
( ) 0 /
0
xlat b arctg = ( 9.20)
se calculeaz viteza iniial v
0
a particulei incidente din energia iniial a
acesteia
E
v
=
2
2
0

( 9.21)
se calculeaz
0

din conservarea momentului cinetic orbital

=
= =
2
0
0
0
0
2
0 0
r
b v
r b v L

( 9.22)
Prin opiuni la rularea programului poi solicita diferite tipuri de rezultate
finale:

fie traiectoriile - prin programul trcoul din fiierul ex41.pas (studiaz
listingul prezentat n continuare) daca alegi opiunea t
fie seciunile eficace prin rularea programului trcoul din fiierul
ex41.pas cu opiunea s; cerculeele albe dau rezultatele n form grafic
astfel c se pot compara cu seciunea obinut din integrarea ecuaiilor
de micare.

n secvena care urmeaz este prezentat listing-ul programului din fiierul

EX41.PAS

EX41.PAS Program trCoul;
uses graph;
{ traiectorii Coulomb ale particulei alpha in
cmpul nucleelor int de masa A2 si sarcina Z2}
{pentru vizualizare traiectorii se genereaza 10
traiectorii si se apeleaza procedura grafica}
{ pentru sectiuni se genereaza Monte Carlo 100
valori pentru parametrul de ciocnire uniform
distribuit pe
suprafata cercului de raza=bmax fm,
b=sqrt(2*r)*bmax fm. r este un numar aleator
uniform distribuit
pe intervalul [0,1). Se deseneaza cu puncte
dsigma/domega
pentru unghiurile rezultate din integrarea ecuatiilor
de miscare;
Simularea unui experiment de fizic


170
cu cerculete se deseneaza dsigma/domega functie de
1/sin^4(theta/2) pentru valori echidistante ale lui
theta;
procedura graficas }

type glnarray=array[1..4] of real {cerut de rk4};
label 25, 30, unu, doi, trei, patru, 35, 40;
const n=4;t0=0.; tf=1.; dt=5.E-03;
pi=3.14159; amu=931.478; clum=2.99793E+03;
hc=197.32; p13=0.333333; e2c2=129.6E+05;e2=1.44;
xlat0=80.; a1=4; z1=2;
var rint, cp, cm, cz, c1, c2, v0, cb, cw:real;
cs, cs2, bmax, dmin:real;
y, dydx:glnarray;
st:array[1..20]of string;
stdim,a2c,z2c,elabc:string;
bcioc,tetaf:array[1..100]of real;
xt,yt:array[1..250] of real;
xtg, ytg:array[1..20,1..250] of integer;
xsigtg, ysigtg:array[1..100] of integer;
xsigt, ysigt:array[1..100]of real;
xtmax, ytmax, xtmin, ytmin:real;
xscal, yscal, arg, dsigmax, dsigmin :real;
dsig:array[1..100] of real;
nmax,ndim, nparc, l, i, j:word;
clum2, a2, z2, ared, elab, ecm, vinit, moml:real;
r0, z0, z0g, w0, r, x:real;
tetat, dsigt:array[1..20] of real;
xsigtt,ysigtt:array[1..20] of integer;
ia:char;
{$F+}
procedure derivs(x:real; y:glnarray; var
dydx:glnarray);
{ceruta de rk4}
begin dydx[1]:=y[2]*y[3]*y[3]+cz/y[2]/y[2];
dydx[2]:=y[1];
dydx[3]:=-2*y[1]*y[3]/y[2];
dydx[4]:=y[3];
end; {end derivs}
{$F-}
function putere(baza,exponent:real):real;
begin
putere:=EXP(exponent*LN(baza));
end; {end putere}
procedure grafica;
var i:word; gd, gm:integer;
xc, yc:integer;
begin gd:=detect; Initgraph(gd,gm,c:\tp\bgi);
xc:=400; yc:=400;
{coordonatele centrului sistemului de referinta}
setbkcolor(15); setcolor(1);
moveto(0,yc);lineto(600,yc);
Simularea unui experiment de fizic


171
outtextxy(610,yc,X);
setfillstyle(1,1);

fillellipse(xc,yc,trunc(rint+0.5),trunc(rint+0.5));
outtextxy(xc-10,yc+10,A2=+a2c);
outtextxy(xc-10,yc+30,Z2=+z2c);
outtextxy(10,50,miscarea particulei alpha in
campul Coulomb al nucleului Z2, A2);

outtextxy(10,70,energia+elabc+MeV);
outtextxy (500,330,dmin=+stdim+fm);
outtextxy(470,30,unghiul de deviatie);

for i:=1 to nparc do
begin
for j:=1 to nmax-1 do
putpixel(xc+xtg[i,j],400-ytg[i,j],1);
outtextxy(530,10+i*30,st[i]);
end;
end; {end grafica}
procedure graficas;
var i:word; gd, gm:integer;
xc, yc:integer;
begin
gd:=detect; Initgraph(gd,gm,c:\tp\bgi);
xc:=5; yc:=400;
{coordonatelecentruluisistemului de referinta}
setbkcolor(15); setcolor(1);
moveto(0,yc); lineto(600,yc);
outtextxy(600,yc-10,theta);{axa X}
outtextxy(xc,yc+10,0);
outtextxy(10,50,miscarea particulei alpha in
campul Coulomb al
nucleului Z2= +z2c);
outtextxy(10,70,energia+elabc+ MeV);
moveto(trunc(xscal*pi)+xc,410);
lineto(trunc(xscal*pi)+xc,390);
outtextxy(trunc(xscal*pi)+xc,410,pi);
moveto(trunc(xscal*pi/2)+xc,410);
lineto(trunc(xscal*pi/2)+xc,390);
outtextxy(trunc(xscal*pi/2)+xc,410,pi/2);
moveto(xc,0); lineto(xc,400);
outtextxy(xc,10,dsig/domega);
for i:=1 to nparc do putpixel(xc+xsigtg[i],400-
ysigtg[i],1);
{distr. rezultata din generarea lui b}
for j:=1 to 18 do circle(xc+xsigtt[j],400-
ysigtt[j],2);
{distr. teoretica}
end; {end graficas}

Simularea unui experiment de fizic


172
{$i rk4.inc}
BEGIN
clum2:=clum*clum;
{ marimi ce caracterizeaza sist.de ioni grei}
write( a si z pentru tinta: ); readln( a2, z2);
str(a2:5:1,a2c);str(z2:5:1,z2c);
write(elab=); readln( elab );
{calcul constante ce depind de sistemul de ioni
grei}
ared:=a1*a2/(a1+a2)*amu;
cm:=clum2/ared;
rint:=1.5*putere(a2,p13);
cz:=z1*z2*e2c2/ared;
cb:=hc/ared/sqrt(2*elab/a1/amu);
cw:=hc*clum/ared; ecm:=a2/(a1+a2)*elab;
cs:=z1*z2*e2/2./ecm;
cs2:=cs*cs; vinit:=clum*sqrt(2*elab/a1/amu);
writeln( a2=,a2:5:1, z2=,z2:5:1);
writeln( elab=,elab:10:2, ecm=,ecm:10:2,
ared=,ared:10:2 , rint=,rint:10:2);
ndim:=trunc((tf-t0)/dt); writeln(ndim=,ndim:5);
dmin:=z1*z2*e2/2/ecm;
str(dmin:6:2,stdim); str(elab:6:1,elabc);

{nparc=10 pentru traiectorii, nparc=100 pentru
sectiune}

write( pentru traiectorii tastati t, pentru sectiune
tastati s:);
readln(ia);
if upcase(ia)=T then goto unu;
if upcase(ia)=S then goto doi;

unu: nparc:=10;
for i:=1 to nparc do
begin
if i<= 3 then bcioc[i]:=2*i else bcioc[i]:=3*i;
l:=trunc(bcioc[i]/cb);
moml:=sqrt(l*(l+1));
r0:=sqrt(bcioc[i]*bcioc[i]+xlat0*xlat0);
z0:=pi-Arctan(bcioc[i]/xlat0);
z0g:=z0*180/pi; w0:=moml*cw/r0/r0;
x:=t0; y[1]:=-vinit; y[2]:=r0; y[3]:=-w0; y[4]:=z0;

for j:=1 to ndim do
begin
derivs(x,y,dydx);
rk4(y,dydx,4,x,dt,y);
x:=x+dt;
xt[j]:=y[2]*cos(y[4]);
yt[j]:=y[2]*sin(y[4]);
Simularea unui experiment de fizic


173
if abs(y[2]) > 100 then goto 25
end;
nmax:=j-1;
25: nmax:=j;
30: if xt[nmax] < xt[nmax-1] then
tetaf[i]:=pi-arctan((yt[nmax]-yt[nmax-1])/
(xt[nmax-1]-xt[nmax]))
else tetaf[i]:=arctan((yt[nmax]-yt[nmax-1])/
(xt[nmax]-xt[nmax-1]));
tetaf[i]:=tetaf[i]*180./pi;
str(tetaf[i]:10:2,st[i]);

xtmax:=xt[2]; xtmin:=xt[2]; ytmax:=yt[2];
ytmin:=yt[2];

for j:=1 to nmax do
begin
if xtmax < xt[j] then xtmax:=xt[j];
if xtmin > xt[j] then xtmin:=xt[j];
if ytmax < yt[j] then ytmax:=yt[j];
if ytmin > yt[j] then ytmin:=yt[j];
end;

{factorii de scalare pentru grafica}
xscal:=600./(xtmax-xtmin); yscal:=400./(ytmax-ytmin);

for j:=1 to nmax do
begin
xt[j]:=xscal*xt[j]; yt[j]:=yscal*yt[j];
end;

for j:=1 to nmax do
begin
xtg[i,j]:=trunc(xt[j]+0.5);
ytg[i,j]:=trunc(yt[j]+0.5);
end;
end;{end pe ciclul dupa i de la 1 la nparc}

grafica; readln; closegraph;

writeln( doriti sectiuni? d/n); read(ia);
if upcase(ia)=N then goto trei
else goto doi;

{se genereaza aleator 100 parametri de ciocnire}
{functia de distributie este p(b)db=
2bdb/bmax/bmax,
s-a luat bmax=3*rint}

doi: nparc:=100; randomize; bmax:=3*rint;
for i:=1 to nparc do
begin
Simularea unui experiment de fizic


174
patru: r:=random(100)/100.;
bcioc[i]:=sqrt(2*r)*bmax;
if bcioc[i]<0.5 then goto patru;
l:=trunc(bcioc[i]/cb); moml:=sqrt(l*(l+1));
r0:=sqrt(bcioc[i]*bcioc[i]+xlat0*xlat0);

z0:=pi-Arctan(bcioc[i]/xlat0); z0g:=z0*180/pi;
w0:=moml*cw/r0/r0; x:=t0;
y[1]:=-vinit; y[2]:=r0; y[3]:=-w0; y[4]:=z0;
for j:=1 to ndim do
begin
derivs(x,y,dydx);
rk4(y,dydx,4,x,dt,y);
x:=x+dt;
xt[j]:=y[2]*cos(y[4]); yt[j]:=y[2]*sin(y[4]);
if abs(y[2]) > 100 then goto 35
end;
nmax:=j-1;goto 40;
35: nmax:=j;
40: if xt[nmax] < xt[nmax-1] then
tetaf[i]:=pi-arctan((yt[nmax]-yt[nmax-1])/
(xt[nmax-1]-xt[nmax]))
else tetaf[i]:=arctan((yt[nmax]-yt[nmax-1])/
(xt[nmax]-xt[nmax-1]));
end; {inchide ciclul dupa i de la 1 la nparc}

for i:=1 to nparc do
begin
arg:=tetaf[i]/2.;
dsig[i]:=cs2/sin(arg)/sin(arg)/sin(arg)/sin(arg);
end;

dsigmax:=dsig[1]; dsigmin:=dsig[1];

for i:=2 to nparc do
begin
if dsig[i] > dsigmax then dsigmax:=dsig[i];
if dsig[i] < dsigmin then dsigmin:=dsig[i];
end;
yscal:=400./(dsigmax-dsigmin); xscal:=600./3.14159;

for j:=1 to nparc do
begin
xsigt[j]:=xscal*tetaf[j]; ysigt[j]:=yscal*dsig[j];
end;
for j:=1 to nparc do
begin
xsigtg[j]:=trunc(xsigt[j]);
ysigtg[j]:=trunc(ysigt[j]);
end;

Simularea unui experiment de fizic


175
for j:=1 to 18 do
begin
tetat[j]:=j*10*pi/180;arg:=tetat[j]/2.;
dsigt[j]:=cs2/sin(arg)/sin(arg)/sin(arg)/sin(arg)*ysca
;
tetat[j]:=xscal*tetat[j]; xsigtt[j]:=trunc(tetat[j]);
ysigtt[j]:=trunc(dsigt[j]);
end;
graficas; readln; readln;closegraph;
trei:end.

Fiierul rk4.inc conine subrutina de integrare a ecuaiilor difereniale
de ordin 1 (uit-te din nou n unitatea de nvare 7)






















Figura 9.3

traiectoriile particulei alpha n campul nucleului de Ag;
energia incidenta 10MeV
Simularea unui experiment de fizic


176





















Figura 9.4

traiectoriile particulei alpha n cmpul Coulomb al nucleului de
Ag, energia incidenta 5 MeV;observ valoarea lui dmin


Figura 9.5

traiectoriile particulelor alpha n cmpul Coulomb al nucleului de Au
Energia incidenta 10 MeV
Simularea unui experiment de fizic


177

Figura 9.6

traiectoriile particulei alpha n cmpul Coulomb al nucleului de Au;
energia incidenta 5 MeV


Figura 9.7
seciunea Rutherford pentru mprtierea particulei alpha pe Ag,
energia incidenta 10 MeV
Simularea unui experiment de fizic


178

Figura 9.8

sectiunea Rutherford pentru mprtierea particulei alpha pe Au,
energia incidenta 10 MeV

9.3. Lucrare de verificare



1.Tasteaz programul trcoul n editorul TP (1pt)
2.Verific-l din punct de vedere sintactic. (1pt)
3.Ruleaz programul pentru Ag (A=109, Z=47) la 5 MeV energie
incident a particulei 4.Apas t pentru vizualizare de traiectorii;
noteaz dmin i unghiul maxim de deflecie (2pt)
5.Ruleaz programul tot pentru Ag dar la 10 MeV sau 20 MeV.
Observ dmin i compar-l cu valoarea de la 5 MeV. Ce observi?
(1pt)
6.Repet pentru Au (A=197, Z=79),observ dmin i compar-l cu
valorile la aceeai energie pentru Ag. Ce observi?
(1pt)
7.Apas s pentru seciuni pentru toate cazurile studiate mai sus
(1pt)
8. Compar seciunile pentru cele 2 inte la aceeai energie.
(1pt)
Not: Se acord un punct din oficiu
Total 10 puncte
Simularea unui experiment de fizic


179
Bibliografie

[1] J.Glenn Brookshear, Introducere n informatic, Teora, 1998

[2] Donald E.Knuth, Algoritmi fundamentali, Teora, 2002

[3] Petre Dimo, Programare n Fortran, EDITURA Didactic i
pedagogic.

[4] A.Constantinescu, S.Serban, V.I.Stoica, Limbajul de programare
Turbo
Pascal, Anima, 2004

[5] W.S.Dorn, D.D.McCracken, metode numerice cu programe n fortran,
Editura Tehnic, 1972

[6] O.Sima, Simularea Monte Carlo a transportului radiaiilor, ALL, 1994

[7] W.H.Press, B.P.Flannery, S.A.Teukolsky, W.T.Vetterling, Numerical
Recipes; The Art of Scientific Computing, Cambridge University Press,
1986

[8] Louis Lyons, Statistics for nuclear and particle physicists, Cambridge
Univ. Press, 1986

[8] Hans C. Ohanian, Physics,W.W.Norton & Company New York -
London, 1985
Unitatea de Management al
Proiectelor cu Finanare Extern
Str. Spiru Haret nr. 12, Etaj 2,
Sector 1, Cod potal 010176,
Bucureti
Tel: 021 305 59 99
Fax: 021 305 59 89
http://conversii.pmu.ro
e-mail: conversii@pmu.ro
I
S
B
N

9
7
3
-
0
-
0
4
0
8
4
-
2
Proiect cofinanat din Fondul Social European prin Programul Operaional Sectorial Dezvoltarea Resurselor Umane 2007-2013
Investete n oameni!
Formarea profesional a cadrelor didactice
din nvmntul preuniversitar
pentru noi oportuniti de dezvoltare n carier

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