Documente Academic
Documente Profesional
Documente Cultură
SISTEME DE OPERARE I
LIMBAJE DE PROGRAMARE
(NDRUMAR DE LABORATOR)
ROMEO CHELARIU
SISTEME DE OPERARE I
LIMBAJE DE PROGRAMARE
(NDRUMAR DE LABORATOR)
IAI-2004
CUPRINS
Lucrarea 1
Lucrarea 2
CALCULATOARE PERSONALE.
SISTEME DE OPERARE
20
Lucrarea 3
CALCULATOARE PERSONALE.
SOFTWARE DE APLICAII
36
Lucrarea 4
48
Lucrarea 5
PROGRAMAREA STRUCTURAT.
INSTRUCIUNI FUNDAMENTALE
57
Lucrarea 6
64
Lucrarea 7
71
Lucrarea 8
CONSTRUCIA CASE.
PROGRAMELE ARIE I TIP_TASTA
75
Lucrarea 9
79
Lucrarea 10
84
Lucrarea 11
89
Lucrarea 12
93
Lucrarea 13
98
Lucrarea 14
102
Lucrarea 15
107
Lucrarea 16
TESTAREA PROGRAMELOR
112
Lucrarea 17
RELAII DE RECUREN
119
Cuprins
Lucrarea 18
123
Lucrarea 19
129
Lucrarea 20
133
BIBLIOGRAFIE
137
LUCRAREA 1
1. NOIUNI INTRODUCTIVE
Calculatorul numeric a fost conceput iniial ca instrument de lucru pentru
matematicieni i fizicieni cu scopul de a uura efectuarea de calcule complexe. Charles
Babbage (1792-1871), proiectantul primei maini de calcul, a justificat necesitatea
acesteia prin volumul mare de calcul necesar contruirii unor tabele matematice. Din
pcate, ideile lui Charles Babbage, inclusiv cele privind calculul paralel, au trebuit s
atepte un secol, pn cnd tehnologia electronic a permis realizarea lor practic. Dup
anul 1945, considerat ca an de natere a calculatoarelor electronice, evoluia
calculatoarelor a fost marcat, pe de o parte, de lrgirea domeniului de aplicaii, iar pe
de alt parte, de o evoluie tehnologic impresionant asociat cu definirea unei noi
tiine, tiina calculatoarelor (computer science).
Calculatorul, cunoscut i sub denumirea de sistem de calcul, este perceput de
marea majoritate a utilizatorilor ca fiind o main ce execut un set de instruciuni,
reunite ntr-un program, cu scopul de a prelucra datele furnizate de ctre acetia (date
de intrare) pentru a obine rezultate (date de ieire). Utilizarea unui sistem de calcul
poate contribui n mod substanial la rezolvarea unei anumite probleme ce apare n
activitatea unei persoane. Acest lucru este posibil prin
ALGORITM
PROGRAM
CALCULATOR
Figura 1.1. Etapele parcurse n rezolvarea unei probleme cnd se utilizeaz calculatorul.
Lucrarea 1
PROGRAME
instruciuni
CALCULATOR
introducere, prelucrare, extragere
REZULTATE
date de ieire
DATE
date de intrare
Figura 1.2. Modelul black-box (cutie neagr) al unui calculator.
Echipamentele
fizice
sunt
reprezentate
de
totalitatea
componentelor
ECHIPAMENTE PERIFERICE
UNITATE DE
INTRARE
DATE
UNITATE DE
IEIRE
MEMORIE
UNITATE DE
COMAND I
CONTROL
UNITATE
ARITMETIC
I LOGIC
INSTRUCIUNI
PROCESOR
COMENZI
3. ECHIPAMENTE FIZICE
n interiorul calculatoarelor circul semnale electrice transmise sub form de
impulsuri. Pentru a memora i transmite informaia (instruciuni, date) prin
intermediul acestor semnale, calculatoarele folosesc un sistem de reprezentare a
informaiei pe dou nivele. Practic, n calculator exist semnale electrice de tensiune ce
are o valoare mai mare, interpretat ca avnd valoarea unu (1) i semnale electrice de
Tensiune
electric
Nivel
logic
Cifr
binar
Mare
3,5 V
1,5 V
Mic
calculator
un
caracter,
cum
Lucrarea 1
3.1. MICROPROCESORUL
n cazul calculatoarelor personale (personal computer-PC) sau microcalculatoarelor, procesorul (CPU) este materializat fizic de un dispozitiv electronic numit
microprocesor (P).
Unitatea central de prelucrare (CPU) ndeplinete dou funcii eseniale:
!
Lucrarea 1
Cyrix
Frecvena
(MHz)
Am286
816
Am386
2040
Cyrix486
20120
Cyrix5x86
75166
166450
450650
I8088
I80186
I8086
(80)286
(80)286
I386
486
I486
586
Pentium
686
Pentium
II/III
786
AMD
Intel
Pentium
III
Pentium
IV
I80286
I386SX
I386DX
I486SX
I486DX
I486DX-2
I486DX-4
Pentium (I)
Pentium Pro
Klamath
Katmai
Celeron
Celeron
Coopermine
Tualatin
Willamette
Northwood
P4EE
Precott
AMD486
486DX
486DX-2
486DX-4
5x86(DX5)
AMD K5
AMD K6
K6
K6-2
Cyrix6x86
IBM 6x86
AMD K7
Duron
Athlon
VIA Cyrix
III
6501200
12003200
Tabelul 1.2
Caracteristici
Proces de
fabricaie
Numr de
tranzistori
(milioane)
Dimensiune
pastil (mm2)
Cache L1 (KB)
Cache L2 (KB)
Cache L3 (KB)
Frecvena
maxim (GHz)
Athlon 64
(FX51, 3400+)
180 nm
130 nm
130 nm
90 nm
130 nm
42
55
178
125
106
170
131
237
112
193
8
256
NA
8
512
NA
8
512
2048
16
1024
NA
128
1024
NA
3,4
3,4
3,4
2,2
posibilitatea real de a executa simultan mai multe activiti, facilitate pe care Intel a
denumit-o Hyper Threating. Microprocesorul Prescott a primit i un numr de
intruciuni SSE suplimentare, codificate SSE3.
3.2. MEMORIA INTERN
Memoria unui calculator se numete memorie intern deoarece n componena
sa mai exist i alte dispozitive de memorare, dar cu alte caracteristici i funcii, care
alctuiesc mpreun aa-numita memorie extern.
n memoria unui calculator sunt stocate (memorate) obiecte, adic informaie
codificat ntr-un anumit mod, folosind sistemul binar. Modelul de reprezentare a
informaiei, n form scris, reprezint o dat. Deosebirea dintre informaie i dat este
echivalent cu cea dintre un obiect i modelul su. Informaia stocat n memorie poart
denumirea generic de date. n memorie sunt stocate att instruciunile programelor ce
se execut, ct i datele pe care acestea le prelucreaz, folosind acelai mod de
codificare. n acest mod prin denumirea de date vom nelege att datele ce se
prelucreaz (date de intrare, intermediare, finale, de ieire etc), ct i instruciunile ce
se execut.
Din punct de vedere fizic, memoria intern este format tot din cipuri ce au
proprietatea de a memora secvene de bii. n cazul memoriei, un bit este materializat
printr-un element fizic cu dou stri distincte ce pot fi codificate cu:
!
Fals sau 0;
Adevrat sau 1.
Lucrarea 1
Memorie ROM (Read Only Memory memorie doar citit), care are
urmtoarele caracteristici: poate fi numai citit, nu poate fi scris sau
modificat, este nevolatil (permanent).
Memoria RAM este folosit pentru a memora date sau instruciuni ale
programelor care se execut la cererea utilizatorului, iar memoria ROM conine
8
Lucrarea 1
nevolatil, cu rol de stocare timp ndelungat a datelor, este cunoscut sub denumirea de
memorie extern. Memoria extern a unui calculator este format din discurile
magnetice.
De menionat c trebuie fcut distincie ntre unitatea de memorie extern i
suportul fizic de memorare.
Unitile de discuri magnetice sunt nelipsite din componena oricrui sistem de
calcul, fiind utilizate i ca extensie a memoriei interne. Memorarea datelor se face pe
suprafeele magnetice ale unui disc sau pachet de discuri. Un disc magnetic este format
dintr-un suport, ce poate fi flexibil (material plastic)sau rigid (aluminiu sau aliaje ale
acestuia), pe a crui suprafee se depune un film subire de substan magnetic, care
formeaz partea activ a acestuia. n cazul pachetului de discuri, acestea se monteaz
paralel i echidistant pe un ax comun.
Pentru transferul datelor pe/de pe un astfel de disc sau pachet de discuri,
acestea trebuie introduse ntr-un dispozitiv numit unitate (drive) de disc. Unitatea de
disc este prevzut cu un dispozitiv special, numit dispozitiv de acces, format dintr-un
numr de capete de citire/scriere egal cu numrul de suprafee active ale suportului de
memorare. Capetele de citire/scriere au, n funcie de tipul echipamentului periferic, un
anumit numr de poziii distincte fa de axul pachetului. Fiind montate rigid pe acelai
dispozitiv de antrenare, capetele de citire/scriere se deplaseaz simultan, gsindu-se la
aceeai distan fa de axul suportului magnetic. Fiecare cap de citire/scriere, pe
suprafaa activ asociat, descrie o circumferin numit pist, ce are drept centru,
centrul axului pachetului de discuri (Figura 1.6a). Totalitatea pistelor de acelai
diametru, n cazul pachetelor de discuri, formeaz un cilindru (Figura 1.6b). O pist la
rndul ei este divizat n mai multe zone distincte, numite sectoare, cu o anumit
mrime. Fiecare sector are aceeai mrime, care de obicei este 512 B. Unitatea de
adresare a discului magnetic este sectorul de disc, care are asociat o valoare numit
adres.
Sector
Cilindru
Pist
Disc
magnetic
10
Norma de conectare, care poate fi PIO Mode 14, ATA, UltraDMA 33, 66,
100 etc;
Densitatea de nregistrare.
Includerea unei memorii cache (buffer) cu capaciti ntre 256 KB8 MB;
Unitile cu disc amovibil (poate fi montat sau extras din unitatea de disc ori
de cte ori este necesar) i suport flexibil sunt cunoscute sub denumirea de floppy-disk.
Discul propriu-zis este cunoscut i sub denumirea de dischet. Dischetele sunt alctuite
dintr-un singur disc magnetic, cu suport flexibil, protejat de o carcas de material
plastic, n interiorul creia se mic liber. Dei au existat mai multe variante
constructive, astzi se utilizeaz doar unitile floppy-disk pentru dischete cu diametrul
de 3,5 (inches) cu o capacitate de memorare de 1,44 MB.
3.5.2. Tastatura
Tastatura este principalul dispozitiv periferic al unui calculator prin
intermediul cruia se transmit informaii (comenzi, date) ctre unitatea central. De la
tastatur datele circul unidirecional ctre unitatea central, fiind un periferic de
intrare. Cuplarea tastaurii la calculator se face prin intermediul unui cablu de conectare
i a unui conector special ce intr n legtur cu interfaa corespunztoare i
magistralele sistemului.
Versiunile clasice ale tastaturilor calculatoarelor personale au un numr de
101/102 taste. Din punctul de vedere al funcionalitii, o tastatur standard cu 101
taste cuprinde urmtoarele grupe:
11
Lucrarea 1
), care
), Page Up
RETURN (
Back Space (
Tab (
Lucrarea 1
Modul video text, cnd suprafaa afiabil este format din celule caracter
delimitate de 25 linii i 80 coloane, controlul datelor afiate pe ecran
fcndu-se la nivel de caracter alfanumeric; n acest caz, pixelii nu mai
sunt adresabili individual, n fiecare celul putnd fi afiat un caracter
alfanumeric.
Numrul de culori ce pot fi afiate, exprimat prin puteri ale lui 2 (24, 28,
216, 224, 232);
Definiia, care reprezint dimensiunea unui pixel n mm; valorile cele mai
utilizate sunt cuprinse n intervalul 0,240,28 mm.
216
= 65536
culori
(High
Color),
iar cu 32
bii
Lucrarea 1
Imprimante laser, care folosete o raz laser sau mici diode luminiscente
pentru a ncrca electrostatic un cilindru de imprimare, corespunztor
caracterului ce urmeaz a fi imprimat; cilindrul vine n contact cu o
pulbere special, numit toner, care ader pe suprafeele ncrcate
electrostatic, dup care trece peste suprafaa hrtiei de imprimat unde este
ars tonerul; viteza de imprimare se msoar n pages per minute (ppm).
Constituie prima alternativ cnd se tipresc tiraje de mrime mediemare pe format A3 transversal, frecvent ntlnit n contabilitate.
Tabelul 1.4
Caracteristici de performan ale imprimantelor uzuale
Matriceal
Rezoluie
[dpi]
~ 180
Vitez de
imprimare
100400 cps
Cu jet de cerneal
3002800
A4, A5, B5
315 ppm
Cu laser
3001200
A4, A5, B5
550 ppm
Tip imprimant
Format hrtie
Culoare
Monocrom
Monocrom
Color
Monocrom
Color
3.5.5. Mouse-ul
Mouse-ul este un periferic de intrare, unidirecional, care face parte din
categoria dispozitivelor de digitizare (introducere digital a datelor). Ca funcionalitate,
mouse-ul este asemntor cu tastatura.
Modelul clasic este un dispozitiv de dimensiuni nu prea mari, uor manevrabil,
avnd la partea superioar 2 sau 3 butoane, iar la partea inferioar o bil ce se rotete
liber ntr-un loca special, cu sensibilitate i vitez reglabile. Prin deplasarea mouseului pe o suprafa orizontal are loc rotirea bilei. Rotirea bilei este descompus de
componentele mouse-ului n deplasare pe dou direcii sus-jos i stnga-dreapta,
deplasare care determin pe ecranul monitorului o micare echivalent a unui cursor.
Cursorul specific mouse-ului este o reprezentare grafic a poziiei curente de pe ecran,
de obicei, o sgeat. Cursorul focalizeaz atenia asupra locului n care vor avea loc
aciunile determinate de apsarea butoanelor mouse-ului (validare/confirmare de
opiuni, indicare de poziii, deplasri etc). Cursorul de mouse se mai numete i pointer
sau indicator. Declanarea unei aciuni (transmiterea unei comenzi, selectarea unei
17
Lucrarea 1
zone dintr-un text etc) se face prin poziionarea cursorului pe obiectul, imaginea, zona
de pe ecran care intereseaz i apsarea unuia dintre butoane.
Exploatarea mouse-ului este determinat de urmtorii parametri:
!
Capacitatea de stocare este de 650 sau 700 MB. Principala caracteristic a unitilor
CD-ROM este viteza de transfer, indicat prin factorul de multiplicare a vitezei de
transfer a primului periferic de acest tip (150 KB/s). n prezent o dezvoltare deosebit o
au compact disk-urile cu densitate mare de nregistare, numite DVD i care necesiti
uniti dedicate numite uniti DVD.
Calculatoarelor personale actuale le pot fi ataate o gam larg de periferice
(legtur reea, sisteme audio, camere digitale,
Legtura se face fie folosind porturile (loc de conectare) interfeelor de tip serial (COM,
USB) sau paralel (LPT), fie folosind echipamente fizice dedicate (plac de reea, plac
audio, plac video cu TV-out, tuner TV etc) cu rol de interfa i care folosesc conexiuni
interne standardizate ale unitii centrale ( ISA, PCI, AGP).
3.5.7. Configuraia calculatoarelor personale
Configuraia unui calculator personal se refer la echipamentele fizice ce intr
n componena sa, fiind o descriere sumar i strict a componentelor, ce are scopul de a
18
Mouse: PS2
Monitor
Tastatur
Date
Comenzi
CPU
Memorie
Hard-disk
Figura 1.7. Configuraie minim a unui calculator personal
19
prelucrri
LUCRAREA 2
CALCULATOARE PERSONALE.
SISTEME DE OPERARE
1. NOIUNI INTRODUCTIVE
A doua component important a unui sistem de calcul este reprezentat de
ansamblul de programe disponibile la un moment dat, cunoscut sub denumirea generic
de software. n lipsa acestei componente, calculatoarele nu ar putea transfera, memora
sau prelucra date, nu ar putea realiza multitudinea de aplicaii, de la simple jocuri pn
la simulri complexe utilizate n diverse domenii de activitate (cercetare, industrie,
medicin etc).
Programele sunt colecii de instruciuni care determin execuia unor operaii,
activiti, comenzi de ctre echipamentele fizice din componena unui calculator pentru
a rspunde unei cerine concrete a utilizatorului.
Execuia unui program, numit i rulare, presupune existena acestuia n
memoria intern, executarea secvenial a instruciunilor prin transferul acestora n
microprocesor, transformarea n instruciuni proprii microprocesorului, execuia
acestora folosind datele transferate din
fie
Lucrarea 2
3. SISTEMUL DE FIIERE
3.1. Conceptul de fiier
Calculatoarele dispun pentru memorarea i stocarea permanent (timp
ndelungat) a datelor diferite suporturi fizice corepunztoare unui anumit echipament
periferic. Fiecare periferic cu rol de memorare i stocare a datelor are propriile
caracteristici i mod de organizare fizic. Pentru a face posibil utilizarea
calculatoarelor, sistemele de operare i exercit funciile folosind o modalitate uniform
de organizare a datelor, din punct de vedere logic.Astfel, a aprut noiunea de fiier i
organizarea fiierilor ntr-un sistem recunoscut de SO.
Prin fiier se nelege o colecie de date elementare (articole) grupate i
organizate logic ntr-o unitate de memorare, cu scopul de a permite controlul accesului,
regsirea i modificarea elementelor componente.
Pentru ca un utilizator s poat realiza diferite operaii asupra fiierelor i a
coninutului acestora, sistemul de operare are n componena sa un set de rutine
cunoscut sub denumirea de sistem de gestiune a fiierelor. n acest mod, SO asigur
corespondena fiecrui fiier cu un anumit periferic.
Din punct de vedere a utilizatorului ce efectueaz operaii asupra unui fiier
prin intermediul unui program, sistemul de operare face ca acesta s perceap fiierul
ca un ntreg, ntreg ce rezult din organizarea sa logic, fr nici o referire real la
implementarea acestuia pe suportul fizic. Prin sistemul de gestiune a fiierelor,
sistemul de operare are sarcina de a regsi la nivel fizic toate datele organizate logic
ntr-un fiier. Pentru a putea ndeplini aceast sarcin a fost necesar ca suporturile de
memorare i stocare s aib propria organizare fizic.
3.2. Organizarea fizic a fiierelor
Echipamentele periferice sunt, din punct de vedere a funciei pe care o au, de
dou tipuri:
!
Dintre suporturile fizice de memorare i stocare a datelor cel mai utilizat este
suportul de tip disc magnetic. Aa cum se observ din clasificarea de mai sus, unitatea
de schimb de date ntre memoria intern i unitile de disc magnetic este blocul. n
acest caz, operaiile de I/O (Input/Output-Intrare/Ieire) ntre memorie i discul
magnetic sunt efectuate n grupuri de unu sau mai multe sectoare de disc. Adresarea
unui anumit sector implic precizarea cilindrului, pistei, feei i sectorului. Ca urmare,
un disc poate fi tratat de ctre SO ca un tablou unidimensional de blocuri disc. Astfel, la
nivel fizic, SO consider fiierul ca o succesiune de blocuri. n fapt, la nivelul fizic al
discului magnetic, datele ce alctuiesc fiierul respectiv pot s ocupe un spaiu contiguu
sau nu.
Utilizatorul, prin programul folosit, are la un moment dat acces numai la o
anumit entitate din cadrul unui fiier, cunoscut sub numele de articol sau
nregistrare. Putem spune c un fiier este o mulime ordonat de nregistrri.
nregistrarea reprezint mulimea datelor care fac obiectul unei singure operaii I/O, n
condiiile specifice fiecrui suport fizic.
O unitate de discuri magnetice (hard-disk, dischet) se numete, generic,
volum. n cadrul unui volum datele sunt grupate de ctre SO, la cererile utilizatorului,
n fiiere.
3.3. Tipuri de acces la articole
Accesul la un articol reprezint metoda utilizat pentru localizarea la nivel fizic
a articolelor ce alctuiesc un fiier.
Se cunosc dou tipuri de acces:
!
Lucrarea 2
Fiiere tastatur;
Fiiere imprimant;
Etc.
Fiiere cu acces direct, care permit accesul direct cel puin la operaia
de citire.
CALE
NUME FISIER
EXTENSIE
VERSIUNE
24
Deoarece suportul de tip disc magnetic ofer cele mai multe posibiliti de lucru, se va
face referire doar la operaiile cu acest tip de fiiere, care sunt:
!
Lucrarea 2
!
!
Compararea, prin care se verific dac dou fiiere sunt identice, prin
parcurgerea lor secvenial;
de
operare
DOS
Acesta poate
nume
de
fiiere
i/sau
27
rdcin,
toate
celelalte
Lucrarea 2
Directorul este un fiier special creat de sistemul de operare DOS, ce conine numele
fiierelor i subdirectoarelor ce i urmeaz n structura arborescent, precum i adresa
de nceput a acestora. Cu excepia directorului rdcin, creat de sistemul de operare
prin formatare, celelalte directoare sunt create de SO, de obicei, la cererea
utilizatorului. Pentru a putea fi deosebite fiecrui director i se atribuie un nume n
momentul creerii. Directorul n care SO identific un fiier numai prin specificarea
numelui su i, eventual, a extensiei (dac exist sau este necesar) este cunoscut sub
denumirea de director curent.
Pentru a specifica n mod complet un fiier, n cazul sistemului de operare
DOS, trebuie indicate perifericul pe care se afl, directorul n care se creaz sau exist,
numele fiierului i extensia acestuia, dac este necesar. Sintaxa unui specificator de
fiier DOS este urmtoarea:
[d:][cale]\numefisier[.extensie]
Semnificaiile cmpurilor din specificatorul de fiier sunt urmtoarele:
!
!
con, care semnific tastatura (la intrare) i monitorul consolei (la ieire)
(echipamentele periferice pentru comunicarea calculator-utilizator);
!
!
Lucrarea 2
parametri care trebuiau s fie corect folosii, necesitnd un efort de memorare. Apariia
interfeelor GUI, a micorat sensibil nevoia de a memora iruri de caractere, activarea
programelor fiind posibil prin intermediul unor imagini grafice afiate pe ecranul
monitorului. Pentru interfeele text aplicaiile sunt accesate prin tastatur, ns n
cazul sistemelor cu interfa grafic se utilizeaz mouse-ul sau alt dispozitiv de tip
pointer.
Mai important dect avantajele oferite de utilizarea interfeei grafice pentru
dialogul utilizator-calculator, este faptul c Windows sunt sisteme de operare
multitasking. Multitasking-ul presupune ncrcarea n memorie a cel puin dou
programe n acelai timp, fiecare avnd rezervat propria zon de memoria i timp
procesor n mod alternativ, astfel nct utilizatorul are impresia c cele dou programe
se execut simultan. Alte avantaje ale sistemelor Windows sunt comunicaia i
transferul de date ntre aplicaii prin mecanismul DDE (Dynamic Data Exchange),
precum i protocolul OLE (Object Linking and Embedding), care face posibil
combinarea diferitelor aplicaii i integrarea n acelai fiier a datelor obinute cu
programe diferite. Aceste caracteristice
Pictograme
Fereastr de
aplicaie
Meniu
contextual
Butoane
Bara de aplicaii
31
Lucrarea 2
Meniu principal
Buton de control
Suprafaa de lucru
Butoane redimensionare
Buton de
nchidere
Fereastr de aplicaie
Submeniu
List opiuni
Meniu principal
Butoane
declanatoare
32
Efectul provocat de un dublu-clic (apsarea dubl a butonului stng al mouseului) dup poziionarea cursorului
Lucrarea 2
!
!
Deschiderea unei uniti de disc, activnd opiunea New a meniul File, se pot
crea noi foldere, fiiere de diferite tipuri etc. Celelalte opiuni ale meniului principal i
opiunile submeniurilor corespunztoare permit gestiunea sistemului de fiiere,
configurarea modului de lucru cu acest program, modul de afiare a datelor pe care le
afieaz.
5.2.2. Programul utilitar Windows Explorer
Foarte nrudit i asemntor cu utilitarul My Computer, programul Windows
Explorer este utilizat pentru gestionarea sistemului de fiiere, ns prin configuraia
ferestrei este mult mai adecvat explorrii acestuia (Figura 2.7).
Se observ c fereastra principal este mprit n mai multe ferestre. Cea din
stnga cuprinde structura arborescent a sistemului de fiiere, nivelele de subordonare
fiind de la stnga la dreapta. Un dublu-clic pe fiecare din nume va determina afiarea
coninutului acestuia n fereastra din dreapta, care este asemntoare cu fereastra
34
My Computer. Se observ c pentru unele nume din fereastra stng exist o caset cu
simbolul + , ceea ce indic faptul c respectivele foldere conin alte foldere i/sau fiiere.
Execuia unui clic pe acest simbol determin afiarea structurii folderului i apariia
simbolului n caseta corespunztoare numelui folderului.
Utilitarul Windows Explorer are posibilitatea
de
face operaii
de
35
LUCRAREA 3
CALCULATOARE PERSONALE.
SOFTWARE DE APLICAII
1. NOIUNI INTRODUCTIVE
Pentru a putea rezolva probleme specifice (creare i modificare de documente
de tip text, imagini grafice, calcule tiinifice etc), pe lng sistemul de operare,
resursele software ale unui calculator trebuie completate cu programe de aplicaii. Dac
sistemul de operare asigur buna funcionare i ntreinerea sistemului de calcul,
programele de aplicaii ofer utilizatorului mijloacele de a crea fiiere de un anumit tip
i de a modifica datele pe care acesta le conine, ele fiind dedicate unor activiti cum ar
fi: (1) editarea i procesarea de fiiere tip text sau document, (2) gestiunea bazelor de
date, (3) calcul tabelar, (4) crearea de imagini grafice, (4) proiectarea asistat de
calculator, (5) crearea de publicaii, (6) prelucrarea de imagini grafice, (7) comunicarea
ntre calculatoare, (8) dezvoltarea de software, (9) procesare multimedia, (10) gestiune
financiar-contabil, (10) pot electronic etc.
Pe lng programele de aplicaii, exist i aa-numitele programe utilitare,
utilizate pentru gestiunea resurselor sistemului, compresia datelor, detectarea i
combaterea viruilor etc.
2. EDITAREA I PROCESAREA DE TEXTE I DOCUMENTE
Crearea unui fiier de tip text sau document este asemntoarea cu activitatea
de redactare a unui text folosind maina de scris. Dac n cazul utilizrii mainii de
scris suportul pe care se stocheaz textul este hrtia, atunci cnd folosim calculatorul
tipul de suport este divers: suport magnetic, suport optic, suport de hrtie. Este evident
c aceast activitate necesit i programe de aplicaii adecvate. Ele sunt capabile,
atunci cnd utilizatorul dorete, s ndeplineasc pe lng funcia de creare a textului i
funciile de salvare (stocarea pe un suport magnetic), deschidere, nchidere, imprimare,
modificare.
Trebuie menionat faptul c este indicat s se fac distincie ntre fiiere text i
fiiere document. Fiierele text nu conin dect litere, cifre i caractere speciale (setul de
caractere ASCII), iar fiierele document vor conine att caracterele ASCII ct i obiecte
create cu alte tipuri de programe de aplicaii (imagini grafice, tabele, sunet etc). pentru
crearea i prelucrarea fiierelor text se folosesc editoarele de texte (Notepad, Edit etc),
iar pentru fiierele document, procesoarele de documente (WordPad, Microsoft Word,
Microsoft Works, Lotus WordPro, Corel Wordperfect etc).
Procesoarele de documente dispun de comenzi prin care se controleaz
caracteristici referitoare la:
36
Aspectul caracterelor;
Lucrarea 3
Tabelul 3.1
Comenzi de editare obinute prin acionarea unor taste singure sau n combinaii
Tasta sau combinaia
Aciunea produs
Deplasarea i poziionarea cursorului n interiorului textului sau documentului
Sgeat stnga/dreapta
Deplasare stnga/dreapta a cursorului cu un caracter
Sgeat sus/jos
Deplasare sus/jos a cursorului cu un rnd
Home
Salt la nceputul rndului curent
End
Salt la sfritul rndului curent
Page Up
Salt la pagina anterioar de afiare pe ecran
Page Down
Salt la pagina urmtoare de afiare pe ecran
Ctrl + sgeat stnga
Salt la nceputul cuvntului din stnga poziiei curente
Ctrl + sgeat dreapta
Salt la sfritul cuvntului din dreapta poziiei curente
Ctrl + sgeat sus
Salt la nceputul paragrafului anterior
Ctrl + sgeat jos
Salt la nceputul paragrafului urmtor
Ctrl + Page Up
Salt la nceputul paginii anterioare
Ctrl + Page Down
Salt la nceputul paginii urmtoare
Ctrl + Home
Salt la nceputul documentului
Ctrl + End
Salt la sfritul documentului
tergerea/inserarea de caractere sau iruri de caractere
Delete/Del
terge un caracterdin dreapta poziiei curente a cursorului
BackSpace
terge un caracter din stnga poziiei curente a cursorului
Activeaz/dezactiveaz
modul
de
scriere
cu
inserare
i
Insert
dezactiveaz/activeaz modul de scriere prin suprapunere
Comenzi de copiere, mutare, inserare
Copie caracterul sau irul de caractere sau obiecte n clipboard (zon
de memorie alocat pentru stocarea temporar a datelor n vederea
Ctrl + C
transferului n alt poziie n acelai document sau n alte documente
sau fiiere)
Ctrl + X
Mutarea datelor selectate n clipboard i tergerea lor din document
Ctrl + V
Inserarea datelor stocate n clipboard la poziia indicat
Comenzi de anulare, cutare i nlocuire
Anuleaz ultima operaie de editare i reface datele existente naintea
Ctrl + Z
ultimei operaii de editare
Permite cutarea n cadrul documentului a unui caracter sau ir de
Ctrl + F
caractere i, eventual, nlocuirea cu un alt caracter sau ir de caractere
Linia de titlu
cursor
Linia pictogramelor
pentru stiluri, fonturi,
alinieri
Rigla de poziionare
Linia meniului principal
Linia pictogramelor
pentru stiluri, fonturi,
alinieri
Linia de stare
Suprafaa de lucru
Buton de minimizare
Denumirea editorului
Buton de maximizare
Nume document
Buton de nchidere
Pictograma editorului
Meniu contextual
Lucrarea 3
Meniul File:
de
dialog,
care
permit
exemplu,
prin
activarea
din
Figura
3.4.
Caseta
este
prin
deschiderea
crora
[ ] i [Cancel ].
butoane declanatoare: OK
Activarea
butonului
OK
determin
nchiderea
ferestrei
de
dialog
Cancel
anuleaz
toate
Meniul Edit
Lucrarea 3
Meniul View:
Ruler,
activarea
acestei
opiuni
determin
afiarea
riglei
de
poziionare;
Meniul Insert:
Meniul Format:
Paragraphschimb
caracteristicile
de
editare
paragrafelor
Meniul Help:
Lucrarea 3
- Open,
- Cut,
- Copy,
- Save,
- Print,
- Paste,
- Print Preview,
- Undo,
(Font)
prezint
fontul
(forma
caracterelor) curent, folosit n documentul activ; executarea unui clic cu butonul drept al
mouse-ului pe butonul stng al acestei pictograme se deschide o fereastr unde sunt
afiate fonturile disponibile; executarea unui clic pe un alt font i nchiderea ferestrei
determin schimbarea fontului curent; schimbarea fontului se poate face i pentru
caracterele selectate;
- (Font Size) afieaz mrimea curent a fontului utilizat; executarea unui
clic cu butonul stng al mouse-ului pe butonul drept al pictogramei deschide o fereastr
unde sunt afiate toate mrimile predefinite pentru fonturi; executarea unui clic pe o
alt mrime i nchiderea ferestrei determin schimbarea mrimii fontului; schimbarea
mrimii fontului se poate face i pentru caracterele selectate; schimbarea mrimii
fontului la valoarea dorit (exprimat n pt, punctul egal cu 1/72 inches) se poate face i
prin tastarea noii mrimi n zona de indicare a valorii curente i apsarea tastei Return;
- (Bold) determin afiarea i imprimarea caracterelor n stilul ngroat;
- (Italic) determin afiarea i imprimarea caracterelor n stilul nclinat;
- (Underline) determin afiarea i imprimarea caracterelor n stilul subliniat;
- (Align Left) fixeaz alinierea textului n raport cu marginea stng a textului;
- (Center) fixeaz centrarea textului n raport cu marginile spaiului de scriere;
- (Align Right) fixeaz centrarea textului n raport cu marginile spaiului de
scriere;
- (Bullets) insereaz un marcator pentru fiecare paragraf indicat de utilizator i
aliniaz textul n raport cu marcatorul la aceeai distan.
44
c
Figura 3.7. Rigla de poziionare: a- inches; b- points, c- centimetri.
Lucrarea 3
opiunii
Cut
din
submeniul
corepunztor,
(3)
activarea
pictogramei
alegerea tipului fiierului. Dup efectuarea setrilor se activeaz butonul Save . Dac
Deschiderea unui fiier este posibil doar pentru un fiier creat anterior, atunci
cnd se dorete modificarea, imprimarea sau cunoaterea coninutului su. Operaia de
deschidere se poate face prin utilizarea combinaiei de taste Ctrl+O sau prin activarea
opiunii Open din submeniul corespunztor meniului File. Activarea opiunii determin
deschiderea unei casete de dialog (Figura 3.11) care este foarte asemntoare cu cea a
opiunii Save As.
nchiderea unui document se face prin activarea opiunii Exit din submeniul
corespunztor meniului File. nainte de nchidere se deschide o fereastr de interogare
prin care utilizatorul este ntrebat dac salveaz sau nu modificrile efectuate sau dac
renun la operaia de nchidere.
47
LUCRAREA 4
1. NOIUNI INTRODUCTIVE
Transpunerea pe calculator a modurilor de rezolvare a unor tipuri de probleme
presupune, pe lng cunoaterea problemei (problemelor) i cunotine privind
ntocmirea i reprezentarea algoritmilor, precum i cel puin un limbaj de programare.
Limbajul este principalul mijloc de comunicare. Cele mai cunoscute sunt
limbajele naturale.
Odat cu dezvoltarea tiinei i tehnicii au luat natere limbajele artificiale
folosite la realizarea comunicrii n diferite domenii ale activitii umane, fiind utilizate
de grupuri restrnse de persoane. Astfel, exist limbajul matematic sau al formulelor
chimice.
Pentru a putea fi utilizat, orice limbaj trebuie nvat. nvarea unui limbaj
necesit cunoaterea regulilor de formare a propoziiilor corecte (sintaxa) i a regulilor
ce descriu formarea semnificaiei acestor propoziii (semantica).
Propoziia reprezint o construcie complet, de sine stttoare, ce are un
neles. Propoziiile sunt construite folosind simboluri (semne, caractere), n numr finit,
care mpreun alctuiesc alfabetul limbajului (setul de caractere).
Limbajele de programare sunt mijloace de comunicare ntre programator i
calculator. Programatorul transmite calculatorului prelucrrile pe care trebuie s le
execute acesta din urm pentru ca pornind de la datele de intrare s obin
datele de ieire (rezultate).
Prelucrrile necesare sunt exprimate printr-o succesiune de comenzi sau
instruciuni care alctuiesc ceea ce se numete program. Exprimnd ntr-un program
ceea ce trebuie s fac un calculator, programatorul i transmite acestuia din urm un
algoritm. mpreun cu algoritmul, programatorul trebuie s transmit calculatorului
i informaii despre tipul i organizarea datelor (de intrare, de ieire i uneori
intermediare), precum i despre relaiile dintre ele. Limbajul de programare ofer
posibilitatea transmiterii algoritmului i informaiilor referitoare la date de la
programator la calculator.
2. ETAPELE REZOLVRII UNEI PROBLEME
Principalele etape pe care un programator trebuie s le parcurg pentru a
putea rezolva o problem cu ajutorul calculatorului sunt: (1) specificarea problemei;
(2) proiectarea algoritmului de rezolvare a problemei; (3) programarea propriu-zis;
(4) testarea i depanarea programului; (5) exploatarea i ntreinerea programului.
48
Lucrarea 4
Simbol terminal
, utilizat
START
pentru
crearea
blocului
START,
care
, utilizat
pentru
crearea
blocului
STOP,
care
Simbol intrare-ieire
READ
list var
WRITE
list var
datelor
de
Simbol decizie
p
Simbol conector
Simbol nod
, indic punctele de reunire din shema logic; are mai
multe intrri i o singur ieire;
Simbol sgeat
, arat modul de parcurgere a algoritmului; indic un
singur sens i face legtura ntre celelalte simboluri.
Schema logic este un graf orientat ce poate conine trei tipuri de noduri:
(1) nod funcional; (2) nod predicativ; (3) nod de reunire (Figura 4.1).
Figura 4.1. Nodurile unei scheme logice: a-nod funcional; b-nod decizional; c-nod de reunire.
START
READ
list var
v1
e1
limbajul natural.
Pseudocodul utilizeaz setul de caractere al
limbajului natural cu ajutorul cruia alctuiete un
p
v2
e2
WRITE
list var
STOP
descriu
pri
ale
algoritmului
nc
complet
Lucrarea 4
stop;
end
exemplul
alturat
termenii
utilizai
au
urmtoarele semnificaii:
!
grupul de instruciuni ce urmeaz descrie operaiile prin care datele de intrare sunt
transformate n rezultate;
!
executabil;
!
i trei
descriere a datelor de prelucrat. Dup complexitatea lor, datele pot fi date scalare
(atomice, elementare) i date structurate (grupate).
Datele sunt caracterizate prin notaie (identificator), atribute i valoare.
Notaia (identificatorul) este un nume care se asociaz unei date cu scopul de a
o distinge de alte date i de a putea fi referite n mod unic n procesele de prelucrare.
Atributele precizeaz proprieti ale datei i determin modul n care aceasta
53
Lucrarea 4
rspuns
adevrat
fals
-
(a = 0) ?;
55
aciune
Lucrarea 4
i.atribuie
( b +
evalurii
adevrat
fals
continu cu i
salt la l
expresiei
j.atribuie
evalurii
expresiei
read a,b,c
( delta 0 ) ?
F
( a 0) ?
T
write Date incorecte!
a este nenul!;
read a1;
x1 ( b +
delta ) /( 2 a )
x1 ( b +
delta ) /( 2 a )
write x1, x2
a a1
Write
Ecuatia nu are
rdcini reale
delta b 4 a c
2
end
Figura 4.3. Schema logic a algoritmului de calcul a soluiilor reale ale ecuaiei de gradul al doilea
56
LUCRAREA 5
PROGRAMAREA STRUCTURAT.
INSTRUCIUNI FUNDAMENTALE
1. NOIUNI INTRODUCTIVE
Programarea structurat reprezint o manier de concepere a programelor
respectnd reguli bine stabilite. Scopul programrii structurate este elaborarea unor
programe uor de scris, de depanat i modificat (actualizat) atunci cnd se impune acest
lucru. Programele obinute sunt clare, ordonate, inteligibile, fr salturi i reveniri.
Programarea structurat permite ca programele s poat fi scrise n limbaj pseudocod,
limbaj independent de main (sistem de calcul), convertibil n orice limbaj de
programare. Programarea structurat are ca fundament teorema de structur, care se
aplic pentru programele (algoritmii) cu un singur punct de nceput (o singur intrare)
i un singur punct de sfrit (o singur ieire). n programarea structurat se utilizeaz
trei instruciuni simple (read, write, ) i trei instruciuni compuse (secvena,
selecia, iteraia). Instruciunile compuse sunt exemple de structuri de control: (1)
structura secvenial (secvena), (2) structura alternativ (selecia, decizia), (3)
structura repetitiv (iteraia).
2. INSTRUCIUNI FUNDAMENTALE
2.1. INSTRUCIUNI SIMPLE
Cele mai simple instruciuni de prelucrare ale unui algoritm descris ntr-un
limbaj de programare sunt: instruciunea de citire, instruciunea de scriere i
instruciunea de atribuire.
Instruciunea de citire are urmtoarea form scris n limbaj pseudocod:
read vname [,vname] ...
n care read nseamn citete, iar vname reprezint un nume de variabil.
Modul de execuie este urmtorul: din urmtoarea nregistrare a fiierului de
intrare procesorul citete valori pe care le stocheaz n memorie n celulele cu numele
din lista de intrare; ordinea de stocare este ordinea de la stnga la dreapta a
variabilelor din lista de intrare.
Instruciunea de scriere are urmtoarea form scris n limbaj pseudocod:
write entitate[,entitate]...
57
Lucrarea 5
n care write nseamn scrie, iar entitate un nume de variabila sau o expresie.
Modul de execuie este urmtorul: n fiierul de ieire procesorul creaz o nou
nregistrare cu valorile entitilor din list n ordinea de la stnga la dreapta.
Prin expresie se nelege o serie de prelucrri, indicate prin operatori, efectuate
asupra unor date, care au rol de operanzi.
Instruciunea de atribuire are urmtoarea form scris n limbaj pseudocod :
vname
expr
reprezint semnul
de atribuire.
Dac expr este o expresie numeric, vname este o variabil numeric, dac este
logic, vname este o variabil logic, iar daca este o expresie caracter, vname este o
variabil caracter.
Instruciunea se execut astfel: cu datele existente n memorie procesorul
evalueaz expr i apoi rezultatul este stocat n memorie la adresa variabilei vname.
2.2. INSTRUCIUNI COMPUSE
2.2.1. Secvena
Secvena este o structur format din dou sau mai multe pri ce se execut
fiecare o singur dat. Prin parte nelegem fie o instruciune simpl, fie o instruciune
compus. Este important de subliniat c secvena are o singur intrare i o singura
ieire. Schema logica a unei secvene i descrierea n pseudocod sunt aratate n
Figura 5.1.
Modul de execuie este urmtorul:
- se execut A;
A
A;
B;
C;
- se execut B;
- se execut C;
i secvena ia sfrit.
Dac A, B, C sunt instruciuni simple, n
pseudocod secvena poate fi cea scris ca mai jos:
Exemplu:
a
58
2.2.2. Selecia
Selecia este o structur de control cu dou pri A i B, din care se execut
numai una n funcie de rezultatul unui test logic L. Aceast structur compus are o
singur intrare i o singur ieire. n Figura 5.2 este reprezentat schema logic i
descrierea n pseudocod a unei selecii.
Modul de execuie a seleciei este
urmtorul: cu datele din memorie se evalueaz
L
if L then
A;
else
B;
endif
Exemplu:
if ( a > 0 ) then
suma = a + b;
else
suma = a b;
endif
if L then
A;
endif
A1
A2
A3
A4
59
A5
Lucrarea 5
2.2.3. Iteraia
Iteraia este o structur cu o singur intrare i o singur ieire format dintr-o
singur parte (A) ce se execut n funcie de rezultatul unui test logic L. Exist dou
forme de iteraie, iteraie cu testul la nceput, numit do while (Figura 5.5) i iteraie cu
testul la sfrit, numit repeat until (Figura 5.6).
do while (L)
A
end do
repeat
A
until (L)
A
F
Exemplu:
i vinitial ;
do while ( i 100 )
s1 s1 + x ;
s2 s2 + x x ;
i i + p;
i 1;
Exemplu:
enddo
60
repeat
s1 s1 + x 2 ;
s2 s2 + x + y ;
i i + 1;
until ( i n )
r2
l
Read
r1, r2, h, l
h
r1
arial pi l ( r1 + r 2 )
program tr_con
! declararea variabilelor din program
real r1, r2, h, l, arial, ariat, vol, pi;
! citirea datelor de intrare
read r1, r2, h, l;
! calculul ariei laterale, ariei totale,
! volumului
arial pi*l*(r1+r2);
ariat arial+pi*(r1**2*r2**2);
vol pi*h*(r1**2+r1*r2+r2**2)/3;
! scrierea datelor de ieire
write arial, ariat, vol;
end
ariat arial + pi ( r1 2 + r 2 2 )
vol pi h ( r1 2 + r1 r 2 + r 2 2 ) / 3
Write
arial, ariat, vol
END
a
b
Figura 5.7. Algortimul de calcul al ariei laterale, ariei totale, volumului unui trunchi de con:
a-schema logic; b-program n pseudocod.
R2
R1
61
Lucrarea 5
R serie = R1 + R 2
R paralel =
Read
r1, r2
1
1
R1
rechsr r1 + r 2
1
R2
program r_ech
! declararea variabilelor
real r1, r2, rechsr, rechpl;
! citirea datelor de intrare
read r1, r2;
! calculul rezistenei echivalente
rechsr r1+r2;
rechpl r1*r2/(r1+r2);
! scrierea datelor de ieire
write rechsr, rechpl;
end
rechpl r1 r 2 /( r1 + r 2 )
Write
Rechsr, rechpl
END
a
Figura 5.9. Schema logic i programul n pseudocod pentru calculul rezistenei echivalente.
i .
i =1
Pentru acest program singura dat de intrare este variabila de tip ntreg n.
Suma celor n termeni 1/i este singura dat de ieire, variabil de tip real. Variabila i
este o variabil intermediar cu care se calculeaz fiecare termen al sumei i se asigur
ncheierea calculului sumei ntr-un numr finit de pai. Schema logic i programul n
pseudocod sunt prezentate n Figura 5.10.
6. ALGORITMUL PENTRU SORTAREA A DOU NUMERE
N ORDINE CRESCTOARE
Fie dou numere ntregi m i n. S se scrie un algoritm pentru sortarea n
ordine cresctoare a celor dou numere.
Programul are dou date de intrare, variabilele de tip ntreg m i n,
reprezentate de cele dou numere, dou date de ieire nrmin i nrmax, varabile de tip
ntreg (Figura 5.11).
62
CALC_SUMA
read
n
s 0
i 1
s s + 1/ i
i i +1
(i n)?
b
Figura 5.10. Schema logic i programul n
pseudocod pentrul calculul unei sume.
SRT_NR
read
x,y
write
s
(mn)?
END
T
program srt_nr
! declararea variabilelor
integer n, m, nrmin, nrmax;
! citirea datelor de intrare
read m, n;
! sortarea n ordine cresctoare
if (m n) then
nrmin m;
nrmax n;
else
nrmin n;
nrmax m;
endif
write nrmin, nrmax;
end
nr min m;
nr min n;
nr max n ;
nr max m
write
nrmin, nrmax
END
Figura 5.11. Descrierea n pseudocod i schema logic a algoritmului de sortare a dou numere.
63
LUCRAREA 6
1. NOIUNI INTRODUCTIVE
Limbajele de programare reprezint unul din mijloacele principale de
comunicaie om-main. Prin limbaj de programare se nelege, n general, orice limbaj
folosit pentru descrierea algoritmilor i a structurilor de date. Elementul constitutiv al
oricrui limbaj de programare este instruciunea, care reprezint exprimarea ntr-o
form riguroas a unei cereri de utilizare a unei resurse a unui
sistem de calcul.
erau
scrise
form
numeric.
Pentru
reprezentri
externe
nivel nalt (Fortran, Algol, Pascal, Basic etc), (2) limbaje neprocedurale sau limbaje de
nivel foarte nalt (succesiunea instruciunilor scrise n program influeneaz n mic
msur succesiunea executrii lor), (3) limbaje specializate sau orientate pe problem,
(4) limbaje conversaionale, care asigur dialogul utilizator-calculator pe parcursul
execuiei programului), (5) limbaje ale inteligenei artificiale.
Specificarea oricrui limbaj presupune definirea sintaxei, semanticii i
pragmaticii limbajului. Sintaxa (studiul structurii limbajului) reprezint un set de
reguli ce guverneaz alctuirea mulimii propoziiilor din limbaj. Definirea riguroas a
sintaxei impune folosirea unor elemente de teoria limbajelor formale: vocabular,
propoziie,
mulimii propoziiilor corecte, n cazul definirii semanticii problema principal este cea
a specificrii semnificaiei propoziiilor corecte. Pragmatica este o mulime de reguli ce
descriu formarea efectului propoziiilor limbajului pentru un anumit receptor. n cazul
limbajelor de programare pragmatica are legtur cu studiul eficienei programelor,
independenei fa de main etc.
Primul limbaj de programare de nivel nalt standardizat a aprut n anul 1954
i s-a numit FORTRAN (FORmula TRANslation). Limbajul Fortran este un limbaj
procedural, conversaional, orientat ctre rezolvarea problemelor din domeniile tehnicoinginereti.
2. ELEMENTELE DE BAZ ALE LIMBAJULUI FORTRAN
Elementele de baz ale limbajului Fortran sunt:
!
Setul de caractere: literele mari i mici ale alfabetului limbii engleze, cifrele
arabe (sistemului de numeraie zecimal) i caractere speciale; cu acest set
de caractere, respectnd sintaxa specific limbajului, se pot forma entiti
cum ar fi: cuvinte cheie, nume simbolice (identificatori), etichete, constante,
expresii, instruciuni etc;
Lucrarea 6
Lucrarea 6
compilare,
respectiv
editare
legturilor
(generrii
fiierului
executabil);
!
Dac compilarea fiierului surs s-a efectuat cu succes (sistemul nu indic erori
de sintax) se creaz fiierul obiect ce are acelai nume cu fiierul
surs, dar cu
extensia OBJ. Fiierul obiect se obine doar n cazul n care toate instruciunile
fiierului surs au respectat ntocmai regulile sintactice ale limbajului de programare.
Dac n fiierul surs exist erori de sintax, n urma compilrii este generat un fiier
text ce cuprinde o list a erorilor de sintax i informaii minime asupra tipului i
locului acestora n program. Dup corectarea lor, prin modificarea textului fiierului
surs, acesta din urm se compileaz din nou. Procesul se repet pn nu mai exist
mesaje despre erorile de sintax.
Dup compilare se lanseaz comanda de generare a fiierului executabil.
Realizarea fiierului executabil ne permite executarea programului.
4. PRIMUL PROGRAM FORTRAN
4.1. Declararea tipului variabilelor scalare
O variabil scalar este un obiect notat cu un nume ( vname). Pentru a specifica
tipul i unele atribute ale variabilelor ce descriu modul de prelucrare a acestora n
program se folosesc instruciune de declarare a tipului, care sunt instruciuni
neexecutabile.
Limbajul Fortran utilizeaz cinci tipuri de date scalare: intreg, real, complex,
logic, caracter. Pentru fiecare tip exist un cuvnt cheie: integer, real, complex, logical,
character.
Sintaxa formal a unei instruciuni de declarare a tipului variabilelor scalare
este:
spec_tip [[, atrib]::] lista
n care spec_tip este unul din cuvintele cheie de mai sus, care indic tipul variabilei
scalare, atrib este un atribut, iar lista este o list de nume de variabile scalare separate
68
c - constant;
Lucrarea 6
print*, [entitate[,entitate]...]
Asteriscul (*) n instruciunea PRINT nseamn formatare implicit, adic
formatul datelor de ieire este lsat pe seama computerului. Modul de execuie este
urmtorul: n fiierul de ieire, ecranul terminalului, se creaz o nregistrare, adic se
scrie o nou linie, linie ce conine n ordinea de la stnga la dreapta valorile entitilor
din lista de ieire. Dac lista nu are nici un element n fiierul de ieire se scrie o
nregistrare vid, ce are doar blancuri.
Instruciunea de atribuire scalar. Instruciunii de atribuire simple din
programarea structurat, n Fortran, i corespunde o instruciune executabil numit
instruciune de atribuire scalar ce are urmtoarea sintax:
var = expr
n care var este un nume de variabil, iar expr o expresie. Regulile de sintax impun ca
ntre tipul variabilei i tipul expresiei s fie acelai. n funcie de tipul datelor scalare
avem instruciune de atribuire scalar numeric, logic sau caracter.
4.3. Program Fortran pentru calculul ariei laterale, ariei totale
i volumului unui trunchi de con drept
n continuare este artat programul scris n limbaj Fortran, n form fix,
pentru algoritmul de calcul al ariei laterale, ariei totale i volumului unui trunchi de
con drept. Schema logic i programul n pseudocod pentru acest algoritm sunt
prezentate n Lucrarea 5.
15
772
program tr_con
70
7380
LUCRAREA 7
1. CONSTRUCIA IF
O constructie IF selecteaz pentru execuie cel mult un bloc de instruciuni i
construcii. Sintaxa instruciunii este:
if (expr1) then
bloc1
[else if (expr2) then
bloc2]...
[else
bloc3]
endif
bloc2,
bloc3
reprezint
fiecare
un
bloc
de
in interiorul unei construcii IF este permis saltul la END IF din oricare din
blocurile construciei IF; saltul dinafar la END IF este permis, dar este
considerat o caracteristic depit.
Construcia IF se execut astfel: expresiile logice sunt evaluate n ordine pn
ce se gasete una adevarat; atunci se execut primul bloc ce urmeaz dup prima
expresie adevarat i execuia construciei IF se termin. Expresiile logice adevrate
care urmeaz nu mai au efect. Se poate ntmpla ca nici una din expresiile logice ale
construciei s nu fie adevrat. n acest caz se execut blocul ce urmeaz dup
instruciunea ELSE dac exist unul; n caz contrar nu se execut nici unul din
blocurile construciei.
Cazul cel mai simplu al construciei IF este selecia cu schema logic artat n
Figura 7.1, care n FORTRAN se poate codifica ca mai jos.
Cazul unei construcii IF ce conine o
instruciune ELSE IF este n esen o selecie
expr
if (expr) then
A;
else
B;
endif
Lucrarea 7
Varianta 1
if (expr1) then
a
else if (expr2) then
b
else
c
end if
expr1
expr2
Varianta 2
if (expr1) then
a
else
if (expr2) then
b
else
c
end if
end if
expr1
if (expr1) then
a
else if (expr2) then
b
else if (expr3) then
c
else
end if
expr2
expr3
72
2. PROGRAMUL SEMN_NR
Schema logic i programul n pseudocod a algoritmului pentru determinarea
semnului unui numr ntreg sunt prezentate n Figura 7.4.
program semn
! declararea variabilelor
integer numar, semn;
! citirea variabilelor
write Introduceti un numar intreg;
read numar;
! identificarea semnului
if (numar<0) then
semn = -1;
else if (numar=0) then
semn = 0;
else (numar=0) then
semn = +1;
endif
write Semnul este =, semn;
end
SEMN_NR
write
introduceti un
numar intreg
read
numar
(numar<0)
T
semn = -1
F
(numar=0)
T
semn = 0
semn = +1
write
semnul este,
semn
END
73
Lucrarea 7
15
772
7380
program semn_nr
c
772
program semn_nr
74
7380
LUCRAREA 8
CONSTRUCIA CASE.
PROGRAMELE ARIE I TIP_TASTA
1. CONSTRUCIA CASE
Construcia CASE selecteaz pentru execuie cel mult un bloc, ns schema de
selectare a blocului este diferit de cea a construciei IF. Sintaxa construciei CASE este
prezentat n continuare.
select case (expr)
[case (select)
bloc]...
[case default
bloc]
end select
expresia expr din instruciunea SELECT CASE; apoi sunt examinate expresiile fiecrui
selector select din instruciunile CASE pna ce se gasete una cu acceai valoare ca expr,
sau cu un domeniu ce include valoarea lui expr, se execut blocul ce urmeaz acestei
instruciuni CASE i execuia construciei CASE se termin. Nu trebuie s existe mai
mult dect o instruciune CASE care s poat avea o valoare a selectorului care s se
potriveasc cu valoarea lui expr. Dac nici o instruciune CASE nu se potrivete la
valoarea expresiei expr i exist o instruciune CASE DEFAULT se execut blocul ce
urmeaz lui CASE DEFAULT. Instruciunea CASE DEFAULT este opional.
Construcia Case este o caracteristic nou a limbajului Fortran, existent
ncepnd cu versiunea Fortran 90. n acest caz, selecia se bazeaz pe valoarea unei
expresii scalare aflat n instruciunea SELECT CASE la nceputul construciei.
Valoarea acestei expresii se numete index. Instruciunea ce conine cuvintele cheie
SELECT CASE se numete instruciunea SELECT CASE. Instruciunea ncepnd cu
cuvntul cheie CASE este numit instruciunea CASE. Instruciunea ncepnd cu
cuvintele cheie END SELECT este numit instruciunea END SELECT. O list de
domenii de valori sau cuvntul cheie DEFAULT se numete selector (selector case).
Semnificaia sintaxei domeniului de valori ale unui selector este urmtoarea:
!
Lucrarea 8
e expr
F
e=e1
T
F
F1
e=e2
T
F
F2
e=e3
T
F
F3
e=e4
T
F4
F5
772
program arie
implicit none
character*1 figura
real raza, pi, aria, latura
real lungime, latime
print*,'figura? alegeti p = patrat'
print*,
'c = cerc'
print*,
print*,
'd = dreptunghi'
read*, figura
select case (figura)
case ('c')
print*,'raza cercului?'
read*, raza
pi = 4.0*atan(1.)
aria = pi*raza*raza
print*,'aria= ',aria
case ('p')
print*,'latura patratului ?'
read*, latura
aria = latura*latura
print*,'aria= ',aria
case ('d')
print*,'lungimea?'
read*,lungime
print*,'latime?'
read*, latime
aria=lungime*latime
print*,'aria= ',aria
case ('t')
print*,'latura?'
read*,latura
aria= 0.25*latura8latura*sqrt(3.)
print*,'aria= ',aria
case default
print*,'eroare. introduceti doar una din literele p,c,t sau d'
end select
end
77
7380
Lucrarea 8
15
772
program tip_tasta
implicit none
character*1 tasta
print*,' alegeti o tasta'
read*, tasta
select case (tasta)
case ('a', e,i,o,u)
print*, tasta, este o vocala
case (0:9)
print*,tasta, este o cifra
case (b:'d',f:h,j:n,p:t,v:z)
print*,tasta, este o consoana
case (" ")
print*, tasta, " este spatiu liber"
case default
print*, tasta, este un caracter special
end select
end
78
7380
LUCRAREA 9
Iniializarea construciei DO
T
Trebuie executat
domeniul DO?
Execuia domeniului DO
Exist dou forme de baz ale construciei DO: (1) construcia DO bloc;
(2) construcia DO non-bloc. Practica programrii moderne recomand utilizarea
construciei DO bloc.
O construcie DO bloc este o construcie DO ce se termin cu o instruiune END
DO sau CONTINUE ce nu face parte dintr-o alt construcie DO. Execuia unei bucle
79
Lucrarea 9
do
bloc
end do
do while (expr)
bloc
end do
evalueaz expresia logic expr; dac valoarea expresiei este .TRUE. se execut blocul.
Dup execuia ultimei instruciuni a blocului, execuia revine la instruciunea
DO WHILE, expresia logic expr este din nou evaluat i ciclul se repet. Dac valoarea
expresiei logice expr este .FALSE. blocul nu se mai execut i controlul trece la prima
instruciune executabil dup END DO.
Construcia DO WHILE implementeaz n FORTRAN iteraia cu testul la
nceput, adic iteraia do while.
2. PROGRAMELE PRODUS_SUMA_MEDIA, TAB_FUNCTIE, FUN_TRIG
Folosind o construcie DO simpl s-a scris un program Fortran pentru calculul
produsului, sumei i mediei unui ir de numere reale. Numrul factorilor (termenilor)
80
772
7380
program produs_suma_media
implicit none
integer i
real x, produs, suma,media
character*1 raspuns
print*, "Primul numar"
read*, x
suma=x
produs=x
i=1
b1:do
i=i+1
print*, " Numarul", i
read*, x
suma=suma+x
produs=produs*x
media=suma/float(i)
print*, "Continuati? [y/n]"
read*, raspuns
if (raspuns.eq."Y".or.raspuns.eq."y") then
cycle b1
else
exit
endif
enddo b1
print*, "produsul= ", produs
print*, "suma = ", suma
print*, "media= ", media
end
Lucrarea 9
15
772
7380
program tab_fun
implicit none
integer n
real x, xinit, xfinal, pas, fx
print*,'introduceti numarul de puncte'
read*, n
print*, 'introduceti capetele intervalului'
read*, xinit, xfinal
pas = (xfinal-xinit)/float(n-1)
x=xinit
do while (x.le.xfinal)
fx = 2.0*x**3 - x + 4.5
print*, 'x= ',x, 'f(x)= ', fx
x = x + pas
end do
end
15
772
7380
program fun_trig
implicit none
integer i, n
real pi,x_grad,x_rad,pas_grad, pas_rad,xinit_grad, xinit_rad
real xfinal_grad, xfinal_rad,y_sin, y_cos
character*10, raspuns
print*, " Numarul de valori ale argumentului"
read*, n
print*, "Valoarea argumentului este in radiani sau in grade?
*
[radiani/grade]"
read*,raspuns
pi=4.*atan(1.)
if (raspuns.eq."radiani") then
print*, "Valoarea initiala si finala in radiani"
read*, xinit_rad, xfinal_rad
pas_rad=(xfinal_rad-xinit_rad)/float(n-1)
x_rad=xinit_rad
print*, "Doriti indicarea argumentului si in grade?[Y/N]"
read*, raspuns
if (raspuns.eq."Y".or.raspuns.eq."y") then
","x, [grad]
print*, " x, [rad]
do while (x_rad.le.xfinal_rad)
y_sin=sin (x_rad)
y_cos=cos(x_rad)
82
", "y_sin
","
y_cos "
",x_grad,"
",y_sin,"
", y_cos
x_rad=x_rad+pas_rad
enddo
else
print*, "
x, [rad]
", "y_sin
"," y_cos"
do while (x_rad.le.xfinal_rad)
y_sin=sin (x_rad)
y_cos=cos(x_rad)
print*, x_rad, "
",y_sin,"
",y_cos
x_rad=x_rad+pas_rad
enddo
endif
else
print*, "Valoarea initiala si finala in grade"
read*, xinit_grad, xfinal_grad
xinit_rad=xinit_grad*pi/180.
xfinal_rad=xfinal_grad*pi/180.
pas_rad=(xfinal_rad-xinit_rad)/float(n-1)
x_rad=xinit_rad
print*, "Doriti indicarea argumentului si in radiani?[Y/N]"
read*, raspuns
if (raspuns.eq."Y".or.raspuns.eq."y") then
print*, " x, [rad]
","x, [grad]
", "y_sin
","
y_cos "
do while (x_rad.le.xfinal_rad)
y_sin=sin (x_rad)
y_cos=cos(x_rad)
x_grad=x_rad*180./pi
print*, x_rad, "
",x_grad,"
",y_sin,"
", y_cos
x_rad=x_rad+pas_rad
enddo
else
print*, "
x, [grad]
", "y_sin
"," y_cos"
do while (x_rad.le.xfinal_rad)
y_sin=sin (x_rad)
y_cos=cos(x_rad)
x_grad=x_rad*180./pi
print*, x_grad, "
",y_sin,"
x_rad=x_rad+pas_rad
enddo
endif
endif
end
83
",y_c
LUCRAREA 10
tablou se stocheaza n memorie astfel c cel mai din stnga indice s varieze cel mai
rapid. Orice tablou este descris printr-o specificaie de tablou format din declaratori de
dimensiune. Numrul de declaratori de dimensiune definete rangul tabloului sau altfel
spus numrul de dimensiuni al tabloului. Limbajul de programare FORTRAN accept
tablouri cu cel mult 7 dimensiuni.
Forma explicit a unui declarator de dimensiune este:
[lower:] upper
unde lower i upper sunt expresii de specificaie, care sunt expresii scalare sau constante
ntregi ce arat valoarea minim, respectiv maxim a indicelui. Valorile lui lower i
upper pot fi pozitive, negative sau zero. Dac valoarea minim este omis, valoarea ei
implicit se consider 1.
Instruciunea de declarare a tipului i dimensiunilor are forma:
type [DIMENSION] [::] array(spec) [,array(spec)]
adic este format din cuvntul cheie type ce arat tipul (specificator de tip) i o
instruciune de declarare a tipului.
Elementul de tablou specific un element al tabloului. Elementul de tablou se
scrie astfel:
array (s[,s]...)
unde (s[,s]) reprezint o list de valori corespunztoare numrului declaratorilor de
dimensiune.
Cu elementele de tablou se pot efectua toate operaiile pentru variabile scalare
(citire, scriere, operaii aritmetice sau logice). Una din proprietile ce confer
flexibilitate prelucrrii datelor reprezentate prin tablouri este posibilitatea de a efectua
calcule asupra indicilor, adic posibilitatea ca indicii s fie expresii aritmetice.
2. CONSTRUCIA DO CU CONTOR AL ITERAIEI
Cele mai generale construcii DO cu contor al iteraiei sunt cele n care
valoarea iniial, cea final i pasul sunt expresii. Fie i variabila ciclului, e1 expresia
pentru valoarea iniiala a lui i, e2 expresia pentru valoarea final a lui i i e3 expresia
pentru incrementul variabilei DO (controlului buclei). n acest caz este util s se
introduc o variabil auxiliar ic, numit variabil contor, ce controleaz execuia
iteraiei. Schema logic a unui astfel de construcii DO este dat n Figura 10.1. Pentru
forma bloc, construcia DO cu contor al iteraiei are sintaxa prezentat n continuare.
85
Lucrarea 10
m 1
e1
m 2
e 2
m 3
e3
DO i_bucla = e1,e2,e3
bloc
END DO
Calcul ic
DO i_bucla = e1,e2[,e3]
unde i_bucla este o variabil ntreag sau
ic=0
real,
e1,
e2
sunt
expresii
ntregi
bloc
ic ic 1
i _ bucla i _ bucla + m3
nlocui
printr-o
singur
instruciune
de
este incrementul. Dac e1, e2, e3 sunt expresii, atunci ele sunt expresii aritmetice
ntregi.
n continuare se prezint programul FORTRAN scris pentru algoritmul de
calcul al mediei i dispersiei unui set de n date experimentale obinute prin msurtori
directe. Media i dispersia se determin folosind urmtoarele relaii:
n
xmediu =
x
i =1
=
15
(x
i =1
xmediu )
n 1
772
program masuratori
implicit none
integer i,n
parameter (n=50)
real x(n), suma, xmediu, s2abat,sigma
i=1
do while (i.le.n)
read*, x(i)
i=i+1
end do
suma = 0.
i=1
do while (i.le.n)
suma = suma + x(i)
i=i+1
end do
xmediu=suma/float(n)
s2abat=0.
do k = 1,n
s2abat = s2abat + (x(k) - xmediu) **2
end do
sigma=sqrt(s2abat/float(n-1))
print*, 'x mediu= ',xmediu
print*, 'abaterea standard= ',sigma
end
87
7380
SUBPROGRAME. PROGRAMELE
CENTRU_DE_MASA I SORTARE
LUCRAREA 11
1. SUBPROGRAME
1.1. Proceduri funcie
O funcie este o procedur ce se folosete de obicei ca primitiv ntr-o expresie.
n FORTRAN o funcie extern se scrie in forma:
[spec_tip] FUNCTION nume ([lista_de_nume_de_argumente_formale])
[partea_de_specificatie]
[partea_de_executie]
END
Astfel o funcie extern este o unitate de program ce ncepe cu instruciunea
FUNCTION i se termin cu instruciunea END. Corpul funciei poate conine orice
instruciune cu excepia instruciunilor BLOCK DATA, FUNCTION, INTERFACE TO,
PROGRAM sau SUBROUTINE. n instruciunea FUNCTION nume este numele
funciei ales de ctre programator. Numele funciei nu poate s apar n instruciunile
AUTOMATIC, COMMON, DATA, EQUIVALENCE, INTRINSIC, NAMELIST sau
SAVE.
Lista
lista_de_nume_de_argumente_formale
este
format
din
nume
de
nume_functie ([lista_de_argumente_de_lucru])
Lista_de_argumente_ de_lucru trebuie s conin acelai numr de argumente
ca i instruciunea de definiie FUNCTION.
Argument_de_lucru poate fi constant, variabil, expresie, element de tablou,
nume de funcie intrinsec. Argumentele formale i cele de lucru trebuie s reprezinte
acelai tip de date.
Execuia procedurii funcie se face astfel:
!
reprezint
numele
subrutinei
ales
de
ctre
programator,
iar
sau
de
declarare
tipului,
instruciuni
ce
se
scriu
Lucrarea 11
RETURN
Instruciunea RETURN este o instruciune executabil a crei aciune este
returnarea controlului execuiei unei subrutine sau unei funcii la unitatea de program
apelant. ntr-un subprogram instruciunea END are acelai efect ca i instruciunea
RETURN.
Apelul unei subrutine se face cu o instruciune CALL, ce are urmatoarea
sintaxa:
CALL nume ([lista_de_argumente_de_lucru])
unde nume este numele subrutinei. Lista_de_argumente_de_lucru trebuie s conin
acelai
numr
de
argumente
ca
cel
din
instruciunea
SUBROUTINE.
Argumentul formal pentru care argumentul de lucru este o variabil (sau nume
de tablou) se zice c este apelat prin referin, iar argumentul formal pentru care
argumentul actual este o constant sau o expresie mai complex dect o variabil, se
zice c este apelat prin valoare.
2. PROGRAMELE CENTRU_DE_MASA I SORTARE
Cu scopul de a determina coordonatele centrului de mas pentru diferite
sisteme de puncte materiale s-a scris un program FORTRAN (centru_de_masa),
prezentat n continuare. Se consider c sistemul de puncte materiale este format din n
puncte, ce au coordonatele xi, yi, zi i masele mi, iar i = 1,n.
Coordonatele centrului de mas sunt date de formulele urmtoare:
n
xcm =
mi xi
i =1
xcm =
mi xi
i =1
i =1
i =1
90
xcm =
m x
i
i =1
i =1
772
7380
program centru_de_masa
implicit none
integer i, n
parameter (n=10)
real x(n), y(n), z(n), m(n)
real centru, xcm, ycm, zcm
do i=1,n
read*, m(i),x(i),y(i),z(i)
end do
xcm = centru (n,x,m)
ycm = centru (n,y,m)
zcm = centru (n,z,m)
print*, 'coordonatele centrului de masa a sistemului'
print*, 'xcm= ', xcm,'ycm= ',ycm, 'zcm= ',zcm
end
real function centru(n,u,v)
implicit none
integer i, n
parameter (n=10)
real u(n), v(n), su1, su2
su1 = 0.0
su2 = 0.0
do i=1,n
su1 = su1 + v(i)
su2 = su2 + u(i)*v(i)
end do
centru = su/masa
return
end
772
program sortare
implicit none
real x1, x2, x3
91
7380
Lucrarea 11
92
INSTRUCIUNEA EXTERNAL.
PROGRAMELE INTEGRALA I SEMN_FUNCTIE
LUCRAREA 12
1. INSTRUCIUNEA EXTERNAL
Dac ntr-un apel de subrutin sau de funcie (definite de utilizator)
argumentele de lucru sunt numele unor subrutine sau a unor funcii, acestea trebuie
declarate cu o instruciune EXTERNAL.
Instruciunea EXTERNAL trebuie s fie scris n unitatea de program ce
conine apelul. In acest fel compilatorul este informat c anumite nume sunt nume de
proceduri externe i nu sunt nume de tablouri sau de variabile. Instruciunea
EXTERNAL are sintaxa:
EXTERNAL nume[,nume]...
unde nume este nume de subrutin extern sau funcie.
2. PROGRAMELE INTEGRALA I SEMN_FUNCTIE
S se evalueaze valoarea unei integrale definite, ce are ca integrant o funcie de
o singur variabil, prin metoda trapezelor, folosind un program FORTRAN ce descrie
algoritmul acestei metode. Funcia de integrat este definit prin:
2
f ( x ) = x sin( x ) e
f ( x) dx
a
cu ajutorul unui numr finit de valori ale funciei considerate. Pentru a obine o
aproximare a valorii date cu o precizie impus se utilizeaz formule de cuadratur
iterate. Aceste metode presupun parcurgerea urmtoarelor etape: (1) se mparte
intervalul de integrare [a,b] ntr-un numr convenabil de subintervale egale,
(2) pe fiecare din acestea se aproximeaz integrala cu ajutorul unei formule de
cuadratur simple, (3) se sumeaz toate valorile obinute pe subintervale, obinnd
93
Lucrarea 12
astfel o aproximaie a integralei pe ntregul interval. Una din formulele cele mai
utilizate este formula trapezelor dat de relaia:
b
f ( x ) dx
n 1
h
= f ( a ) + 2 f ( a + i h ) +
2
i =1
f (b )
(b a ) h 2 "
f ( )
12
n care h = (b-a)/n reprezint pasul reelei de puncte, iar n este numrul de intervale. n
acest caz, x0 = a i xn = b.
Cu ajutorul termenului
( b a ) h2
12
intervale astfel nct eroarea s nu fie mai mic dect o valoare adoptat anterior
evalurii integralei. Dac se nlocuiete h i se adopt o eroare minim err se obine
condiia:
(b a )3
12 n 2
f " ( ) err
( b a )3
12 err
f " ( ) n
(b a )3
12 err
( b2 + 2 b + 2 ) eb n
772
7380
program integrala
implicit none
real a, b, val, trapez, functie, err
integer n, nmin
external functie
print*, " Care este intervalul de integrare ([a,b])?"
read*, a, b
print*, " Care este eroarea de calcul adoptata (err)?"
read*, err
nmin= aint (sqrt(((b-a)**3*(b**2+2*b+2))/(12.*err)))
print*, " Numarul minim de intervale pentru o eroare de ", err,"
*
Lucrarea 12
15
772
program semn_functie
implicit none
integer i,n, nmax
integer l, m, mmax
parameter (nmax=1000, mmax=2)
real xinitial, xfinal, x(nmax)
real a(nmax), b(nmax), rezultat(nmax,mmax), functie
external functie
print*,"Care este intervalul pe care se verifica semnul functiei?"
read*, xinitial, xfinal
print*, "Pentru cate valori se face evaluarea functiei(nmax=1000)?"
read*, n
print*, "Se calculeaza cele ",n," valori ale argumentului. Asteptati!"
do i=1,n
x(i)=xinitial+((xfinal-xinitial)/float(n-1))*float(i-1)
enddo
call schimbare(nmax,n,x,functie,l,m,a,b)
if ((l.eq.0).and.(m.eq.0)) then
print*, " Functia nu are schimbare de semn pe intervalul considerat"
else
call omatrice(nmax,mmax,n,l,m,a,b,rezultat)
endif
end
subroutine schimbare(nmax,n,x,functie,l,m,a,b)
integer i, j, k,l, m, n, nmax
real x(nmax), a(nmax), b(nmax), functie
j=0
k=0
do i=1,(n-1)
if ((functie(x(i))*functie(x(i+1))).le.0.) then
j=j+1
k=k+1
a(j)=x(i)
96
7380
b(k)=x(i+1)
endif
l=j
m=k
enddo
return
end
subroutine omatrice(nmax,mmax,n,l,m,a,b,rezultat)
integer i, j, nmax, mmax, n, l, m
real x(nmax), a(nmax), b(nmax), rezultat(nmax,mmax)
character*1 matrice
print*, " Matricea rezultat este: "
read*, matrice
do j=1,2
if (j.eq.1) then
do i=1,l
rezultat(i,j)=a(i)
enddo
else
do i=1,m
rezultat(i,j)=b(i)
enddo
endif
k=j
enddo
print*, " Matricea ",matrice, "(",l,",",k,") este "
do i=1,l
print*,"
enddo
return
end
real function functie(x)
real x
functie=x**3-0.5*x**2+2.*x-1.5
return
end
97
LUCRAREA 13
1. FIIERE
Un fiier este o colecie de date nregistrate pe un suport extern de informaie.
Fiecare fiier se asociaz unei uniti de intrare/ieire. ntr-un fiier datele sunt grupate
n nregistrri. Limbajul Fortran consider o nregistrare ca o linie la terminal, o linie la
imprimare sau o nregistrare logic pe un suport magnetic. O nregistrare este format
dintr-un ir de date. nregistrarea poate fi reprezentat printr-o succesiune de cmpuri,
ce conine fiecare valoarea unei date. Valorile nregistrrilor pot fi formatate sau
neformatate. O nregistrare formatat se scrie i se citete cu o instruciune de
intrare/ieire formatat, iar o nregistrare neformatat se citete i se scrie cu o
instruciune de intrare/ieire neformatat. Exist dou tipuri de nregistrri: ce conin
date i o nregistrare special end-of-file.
n FORTRAN se face distincie ntre fiierele localizate pe un fiier extern i
fiierele stocate n memorie, accesibile programului. Astfel, deosebim dou tipuri de
fiiere: fiiere externe i fiiere interne.
Fiierele externe sunt stocate pe dispozitivele periferice: unitate de band
magnetic, unitate de discuri, terminal. Pentru fiecare fiier extern exist un set de
metode de acces permise, un set de forme permise(formatat sau neformatat), un set de
aciuni permise i un set de lungimi ale nregistrrilor permise. Stabilirea acestor
caracteristici este determinat de ctre cererile de utilizare ale fiierului i
caracteristicile sistemului de operare.
Fiierele interne sunt stocate, spre deosebire de cele externe, n memoria
intern a computerului.
Fiierele FORTRAN au nume. Numele unui fiier intern este numele unei
variabile caracter sau a tabloului caracter a crui valori constituie nregistrrile
fiierului. Numele unui fiier extern, sau cum se mai numete specificaia de fiier, este
un ir de caractere pe care sistemul de operare l recunoate ca nume de fiier. Dac nu
se specific o cale de acces sistemul de operare presupune c fiierul se gsete n
directorul curent.
Pentru majoritatea operaiilor de I/O un fiier se identific printr-un
specificator de unitate. Pentru FORTRAN Microsoft specificatorul de unitate este, fie o
expresie de tip ntreg, fie un asterisc (*). n FORTRAN se spune c un fiier exist dac
el exist ca fiier la care un program poate avea acces.
Un fiier se zice c este conectat la un program, dac este asociat cu un
specificator de unitate cunoscut sistemului. Conectarea (deschiderea unitii) se face
98
Lucrarea 13
STATUS = expr, unde expr este o expresie caracter ce poate lua valorile
'OLD', 'NEW', 'REPLACE','UNKNOWN' (default) sau 'SCRATCH'; fiierele
SCRATCH sunt fiiere temporare i nu trebuie numite;
fiierului;
expresia
caracter
are
una
din
valorile
IOSTAT = ios, unde ios este o variabil de tip ntreg ce permite obinerea
de date despre modul de execuie a instruciunilor de I/O.
ERR = et, unde et este eticheta instruciunii executabile din aceeai unitate
de program cu OPEN la care se transfer controlul, dac exist o
eroare de I/O.
3. INSTRUCIUNEA CLOSE
Instruciunea CLOSE se folosete pentru a deconecta un fiier ce a fost conectat
cu OPEN. Sintaxa instruciunii CLOSE este:
CLOSE ([UNIT=] u, clist)
unde u este o expresie ntreag ce specific o unitate extern, iar clist o lista de
specificatori opionali:
!
STATUS = expr, unde expr este o expresie caracter ce poate lua valoarea
'KEEP' sau 'DELETE'; n afara fiierelor 'SCRATCH', valoarea implicit
este 'KEEP'.
772
7380
program impar
implicit none
integer impar_max, impar_urmator
parameter (impar_max=99)
character*4 fmt
fmt="(i3)"
open (unit=10, file='nrimp', form='formatted'
&
access='sequential',status='unknown')
do impar_urmator=1,impar_max,2
write(10,fmt) impar_urmator
end do
endfile (unit=10)
close (unit=10)
end
15
772
program transmatr
implicit none
integer nmax, mmax, eroare
parameter (mmax=100, nmax=100)
integer i, j, m, n
real a(mmax, nmax), transpusa(nmax,mmax)
print*, " Cate linii (mmax=100) si cate coloane (nmax=100) are ma
tricea A(mmax,nmax)?"
read*, m,n
print*, " Elementele matricii A pe fiecare linie"
do i=1,m
read*, (a(i,j), j=1,n)
enddo
do i=1,m
do j=1,n
transpusa(j,i)=a(i,j)
enddo
enddo
open (unit=10, file="transpusa.dat", status="replace",
100
101
7380
LUCRAREA 14
INTRUCIUNI DE TRANSFER.
PROGRAMELE SUBSIR I EL_MAX_MIN_MED
[REC =rcl], unde rcl este o expresie de tip ntreg ce reprezin numrul
nregistrrii. Se folosete doar n acces direct.
!
!
[END = endlabel], unde endlabel este eticheta unei instruciuni din acceai
unitate de program.
Dac se omite UNIT=, primul parametru trebuie s fie u. Dac se omite FMT=
sau NML=, al doilea parametru trebuie s fie fmtspec sau nmlspec. Ceilali parametri
pot s apar n orice ordine. Nu este permis s existe i specificatorul de format i
102
Lucrarea 14
READ ([UNIT=]u[,[FMT=]fmtspec],ADVANCE=expr,[SIZE=var][,EOR=et]
[,IOSTAT=ios][,ERR=et][,END=et]) [lista_ent_input]
WRITE ([UNIT=]u[,[FMT=]fmtspec],ADVANCE=expr, [,IOSTAT=ios]
[,ERR=et]) [lista_ent_input]
Valoarea entitii expr din specificatorul ADVANCE trebuie s fie NO pentru a
nu se produce avansul. Format poate fi eticheta unei instruciuni FORMAT sau o
expresie caracter a crei valoare este specificaia de format. Format nu poate fi un
asterisc deoarece ar indica o formatare condus de list.
2. PROGRAMELE SUBSIR I EL_MAX_MIN_MEDIA
Cu programul FORTRAN subsir se determin elementul maxim din subirul
format din termenii de rang impar ai unui ir iniial de n numere reale i elementul
minim al subirului format din termenii de rang par ai aceluiai ir, precum i rangurile
acestor elemente n ir.
Programul FORTRAN el_max_min_media se determin elementul cu valoarea
maxim, respectiv, elementul cu valoarea minim pentru un ir de n numere reale i
media aritmetic a acestora.
Cele dou programe sunt prezentate n continuare.
15
772
program subsir
implicit none
integer i,n,nmax,rang_max,rang_min
parameter (nmax=20)
real x(nmax), xmin, xmax
open (unit=1, file='sir.dat', form='formatted',
access='sequential', status='old')
open (unit=2, file='subsir.dat', form='formatted',
access='sequential', status='unknown')
10
format (i3)
read (1,10) n
read (1,20) (x(i),i=1,n)
20
format (10f8.3)
xmax=x(1)
do i=1,n,2
if (xmax.le.x(i)) then
xmax=x(i)
104
7380
rang_max=i
end if
end do
write (2,30)
30
format ('********************************************************
*****************************************')
write (2,40) xmax, rang_max
40
50
format ('********************************************************
*****************************************')
60
write (2,70)
70
format ('********************************************************
*****************************************')
end
15
772
program el_max_min_med
input
output
105
7380
Lucrarea 14
implicit none
integer i,k,l,n,nm
parameter (nm=20)
real x(nm),xmax,xmin,s,sxm
character*10 fmt1
fmt1='(a\)'
write (*,fmt1,ADVANCE=NO) ' Numarul elementelor vectorului n= '
read*,n
print*,' introdu elementele vectorului x '
read*,(x(i),i=1,n)
xmax=x(1)
k=0
do i=1,n
if (x(i).ge.xmax) then
xmax=x(i)
k=i
endif
enddo
xmin=x(1)
l=0
do i=1,n
if (x(i).le.xmin) then
xmin=x(i)
l=i
endif
enddo
s=0.0
do i=1,n
s=s+x(i)
enddo
sxm=s/float(n)
write (*,10) n
10
20
format(/,8(1x,f9.3))
write(*,20) (x(i),i=1,n)
write(*,30) k,xmax
30
40
write(*,40) l,xmin
write(*,50) sxm
50
106
LUCRAREA 15
1. INTRODUCERE
Interpolarea este una din metodele importante de aproximare a valorilor
funciilor. A interpola nseamn a rezolva o problem de tipul:
Dac pentru o funcie de n variabile F:D R (D Rn) se cunosc valorile ntr-un
i
Lucrarea 15
P( x) = f ( xi ) Li ( x)
i =0
Li ( x ) =
( x x 0 ) ( x x1 ) ( x x i 1 ) ( x x i +1 ) ( x x n )
( x i x 0 ) ( x i x1 ) ( x i x i 1 ) ( x i x i +1 ) ( x i x n )
Se noteaz cu L (x0, x1, x2, , xn; f|x) polinomul de interpolare asociat funciei f
pe nodurile x0, x1, x2,,xn, sub forma lui Lagrange.
Definiie. Funcia Rn : I R definit prin Rn = f(x) - L (x0, x1, x2, , xn; f|x),
adic eroarea cu care f(x) este aproximat de valoarea polinomului lui Lagrange n
punctul x, se numete restul de ordin n asociat funciei f pe nodurile x0, x1, x2,,xn.
Din relaia de definiie a restului de ordin n se obine:
f(x) = L (x0, x1, x2, , xn; f|x) - Rn, x I
care este formula de interpolare a lui Lagrange.
3. ALGORITMUL DE INTERPOLARE AITKEN-NEVILLE
Teorem. Polinomul lui Lagrange L (x0, x1, x2, , xn; f|x) satisface urmtoarea
relaie de recuren:
L ( x 0 , x1 ,..., x n ; f | x ) =
( x x ) L ( x , x ,..., x ; f | x ) ( x x ) L ( x , x ,..., x
1
n 1
; f | x)
(x x )
n
xi
x - x0
x x1
x x2
x x3
x xi
L(x0;f|x)
L(x1;f|x)
L(x2;f|x)
L(x3;f|x)
L(xi;f|x)
L(x0,x1;f|x)
L(x1,x2;f|x)
L(x2,x3;f|x)
L(xi-1,xi;f|x)
L(x0,x1,x2;f|x)
L(x1,x2,x3;f|x)
L(xi-2,xi-1 ,xi;f|x)
108
L(x0,x1,x2,,xi; f|x)
i 1, j 1
( x) ( x x
(x
i j
i j
)L
i, j 1
( x)
x )
i
xi
L00
L10
L20
L30
Li0
L11
L21
L31
Li1
L22
L32
Li2
Lii
Lucrarea 15
772
program interpolare
implicit none
integer i, j, n, nmax
parameter (nmax=50)
real x(nmax), fx(nmax), l(nmax, nmax+1), x_eval, epsilon
character*10 fmt
fmt=(a\)
write (*,fmt,ADVANCE=NO) Numarul nodurilor de interpolare este =
read*, n
print*, Valorile argumentului corespunztoare nodurilor
read*, (x(i), i=1,n)
print*, Valorile functiei in nodurile de interpolare
read*, (fx(i), i=1,n)
write (*,fmt,ADVANCE=NO) Valoarea punctului de evaluare a functiei=
read*, x_eval
write (*,fmt,ADVANCE=NO) Eroarea de calcul epsilon=
read*, epsilon
l(1,1) = fx(1)
110
7380
111
LUCRAREA 16
TESTAREA PROGRAMELOR
1. INTRODUCERE
Proiectarea este un proces de concepie a unei soluii posibile pentru problema
propus spre rezolvare, bazat pe urmtoarele procedee generale: analiz, sintez,
abstractizare, elaborare, reprezentare, evaluare i operaionalizare. n cazul produselor
software, proiectarea este activitatea care ncepe cu definirea cerinelor i specificaiilor
produsului, continu cu detalierea i transformarea acestora pn la definirea structurii
unei soluii. Aceast soluie trebuie s fie reprezentat ntr-un limbaj astfel nct
proiectul obinut s poat servi mai departe la construirea sau elaborarea propriu-zis a
produsului software (codificarea, testarea). Proiectul rezultat trebuie s precizeze exact
structura produsului, adic componentele (de tip program sau de tip date), relaiile ntre
componente i interaciunea produsului cu mediul.
Proiectarea oricrui produs se descompune n dou subactiviti:
!
precizarea
algoritmilor,
structurile
de
date,
interfeele
dintre
112
Testarea programelor
erori n definirea i utilizarea datelor; aceste erori pot avea drept cauze
neiniializarea tuturor variabilelor, formate improprii pentru instruciunile
de citire, definirea incorect a cmpurilor n fiierele de intrare etc;
Cea mai mare parte a erorilor enumerate mai sus sunt depistate n etapele de
compilare i editarea legturilor.
n timpul execuiei programelor pot apare erori de tipul:
!
Cele mai cunoscute strategii de testare a unui produs program complex sunt
testarea de sus n jos (top-down), testarea de jos n sus (bottom-up), metoda mixt.
Testarea trebuie aplicat fiecrui modul n parte, interfeei (legturii) dintre module i
produsului program n ansamblu.
Scopul testrii programelor este depistarea i eliminarea erorilor. Cea mai
simpl tehnic de analiz a corectitudinii programelor este aa-numita testare prin
exemple concrete. n acest caz, testarea reprezint operaia de verificare a corectitudinii
unui program prin furnizarea de date date de intrare i compararea rezultatelor cu
datele de ieire cunoscute. Tehnica testrii prin observarea comportrii programului n
timpul execuiei programului cu datele de test este cunoscut sub denumirea de testare
experimental a programelor. Ideea testrii experimentale este descris n continuare.
Dispunem de un program executabil ce a fost scris ntr-un limbaj de programare, de
exemplu FORTRAN. Alegem o problem test ce se bucura de proprietatea c i
cunoatem dinainte rspunsul pentru anumite date de intrare. Cu datele de intrare
113
Lucrarea 16
Problemele test trebuie s fie alese n aa fel nct s fie testate prin calcul
toate drumurile posibile din schema logic. Un program preluat din literatura de
specialitate se consider corect implementat pe un computer sau cum se mai spune
validat, dac el d rezultate satisfctoare la rularea problemelor test. Trebuie
remarcat faptul c testarea experimental a unui program nu este echivalent cu
demonstraia corectitudinii programului.
Stabilirea datelor de test
problemei fie textul programului. Prima metod de stabilire a datelor de test este
adecvat problemelor simple sau n testarea modulelor. n al doilea caz pentru a stabili
datele de test se ine seama de instruciunile ce trebuie executate.
Adesea este imposibil s se execute programul cu toate datele de test posibile.
n aceast situaie apare problema alegerii acelei submulimi de date care s depisteze
cu probabilitate maxim erorile prezente n program. Testarea minim care trebuie
fcut const n realizarea unui numr de execuii ale programului care s asigure
execuia fiecrei instruciuni cel puin odat.
Este necesar i testarea robusteei programului. Aceasta nseamn o buna
comportare a programului atunci cnd datele de intrare sunt intenionat greite, iar
problema nu are sens. Un program robust nu trebuie s fie afectat de datele de intrare
eronate. Comportarea cea mai normal n astfel de situaii ar fi semnalarea unor mesaje
de eroare corespunztoare.
Detectarea unor erori, att n faza de compilare ct i n cea de testare necesit
depanarea programului. Depanarea este procesul de transformare a unui program sau a
unei pri de program pentru a nltura o eroare detectat. Sistemele de operare sau
mediile de programare moderne ofer pachete de programe care asist programatorul n
depanarea programului, prin execuia lor pas cu pas i vizualizarea valorilor curente ale
variabilelor (depanare dinamic).
2. TESTAREA PROGRAMULUI INTERPOLARE
Testarea
programului
interpolare
experimentale.
114
se
va
face
prin
metoda
testrii
Testarea programelor
Fie funciile:
f ( x) = 2 x 5
g ( x) = x x + 1
Datele de test sunt formate dintr-un numr n de valori ale argumentului i o
valoare a argumentului diferit de cele alese pentru noduri ca punct de evaluare a
funciei, pentru care trebuie calculat i valoarea funciei. Se consider c programul a
trecut testul dac valoarea funciei obinut prin evaluarea expresiei corespunztoare n
punctul considerat difer de valoarea funciei obinut prin interpolare cu o valoare eps.
n vederea testrii, programul Interpolare va fi rescris astfel nct s poat fi calculate
valorile celor dou funcii n punctul de evaluare i s se poat verifica dac diferena
dintre valoarea obinut prin calcul i cea obinut prin interpolare este mai mare dect
eps. Atunci cnd condiia f ( xevaluare ) calcul f ( xevaluare )interpolare eps este ndeplinit se
va afia mesajul Programul Interpolare a trecut testul, iar dac nu este ndeplinit
mesajul Pentru eps=valoare, programul Interpolare nu a trecut testul.
15
772
program test_interpolare
7380
001
implicit none
002
integer i, j, n, nmax
003
parameter (nmax=50)
004
005
real fx, gx
006
character*10 fmt
007
fmt=(a)
008
009
read*, n
010
011
012
013
014
015
read*, x_eval
016
017
read*, errcalcul
018
019
read*, epsilon
020
do i=1,n
021
fx(i)= functie(x(i))
022
115
Lucrarea 16
023
enddo
call interpolare(n,x,fx,x_eval,errcalcul,ierr,fx_interpolat)
024
if (ierr.eq.1) then
025
print*, " F(", x_eval,")= ", fx_interpolat, " cu o toleranta mai mica decat: ,
*
errcalcul
027
else
028
print*, " F(", x_eval,")= ",fx_interpolat, " fara a avea o toleranta mai mica
*
026
decat: ",errcalcul
029
030
endif
031
val_fx=functie(x_eval)
032
if (abs(val_fx-fx_interpolat).le.epsilon) then
033
print*, " Programul Interpolare a trecut testul pentru eps= ", epsilon
034
035
else
print*, " Programul Interpolare nu a trecut testul pentru eps= ", epsilon
036
endif
037
end
038
subroutine interpolare(n,x,fx,x_eval,errcalcul,ierr,fx_interpolat)
implicit none
integer i, j, ierr, n
real x_eval
real x(n), fx(n), errcalcul, fx_interpolat, l(n,n+1)
do i=1,n
l(i,1)=fx(i)
do j=2,i
l(i,j)=((x_eval-x(i))*l(i-1,j-1)-(x_eval-x(i-j+1))*l(i,j-1))/(x(i-j+1)-x(i))
if ((l(i,j)-l(i-1,j-1)).le.errcalcul) then
fx_interpolat=l(i,j)
ierr=1
return
endif
enddo
enddo
fx_interpolat=l(i,j)
return
end
real function functie(x)
implicit none
real x
functie=2.*x-5.
return
end
116
Testarea programelor
772
7380
Din cele artate mai sus se observ c pentru a putea testa programul
interpolare trebuie realizat un program de testare dedicat. Dac dorim s testm
programul pentru funcii diferite trebuie rescris programul.
Scrierea programului de testare i modificarea acestuia se simplific, dei
procedeul este asemntor ca cel descris mai sus, dac exist biblioteci de programe ce
conin subprograme funcie i programul pe care dorim s-l testm. Produsul software
Developer Studio permite crearea bibliotecilor de programe.
3. CREAREA I UTILIZAREA BIBLIOTECILOR DE PROGRAME
Pentru crearea unei biblioteci de programe trebuie procedat n felul urmtor:
!
!
!
Lucrarea 16
022
022
118
RELAII DE RECUREN
LUCRAREA 17
1. INTRODUCERE
O categorie important de probleme necesit pentru a fi rezolvate utilizarea
unor relaii de recuren. Utilizarea relaiilor de recuren este posibil prin
implememtarea acestora n algoritmul de rezolvare sub forma unor structuri iterative.
Din punct de vedere matematic, aplicarea unei relaii de recuren poate genera o
secven finit sau infinit de calcule, dar algoritmul ce o implementeaz se realizeaz
ntr-un numr finit de pai. Folosirea unei relaii de recuren presupune existena
unor date iniiale. Astfel, o relaie de forma:
x n = f ( x n 1 )
definete o relaie de recuren ntr-un singur pas i necesit cunoaterea unei singure
date iniiale, de exemplu x0.
O relaie de recuren mai general, de tipul:
x n = f ( x n 1 , x n 2 ,..., x n r )
definete o relaie de recuren n r pai ce necesit r valori iniiale, de exemplu
x0, x1,,xr-1.
2. CALCULUL COEFICIENILOR BINOMIALI
0
n care n
i p sunt ntregi pozitivi cunoscui. Relaia de recuren existent ntre doi termeni
succesivi este:
k
n
n k +1
k
k 1
n
Lucrarea 17
14
30
. n continuare sunt
Relaii de recuren
prezentate cele trei variante ale programului pentru calculul coeficienilor binomiali.
15
772
7380
program coef_binomial
implicit none
integer k, n, p
integer coef_binom
character*10 fmt
fmt="(a)"
write (*, fmt, advance="no") " Valorile pentru n si p: "
read*, n,p
open(unit=1, file="coefbinom.txt",form="formatted",access="sequent
*
ial",status="unknown")
coef_binom=1
k=0
write(1,10) k, coef_binom
do k=1,p
coef_binom= (n-k+1)*coef_binom/k
write(1,10) k, coef_binom
enddo
10
format(3x,i3,4x,i12)
close (unit=1)
end
15
772
program coef_binomial
implicit none
integer k, n, p, pmax
parameter (pmax=50)
integer coef_binom(pmax)
character*10 fmt
fmt="(a)"
write (*, fmt, advance="no") " Valorile pentru n si p: "
read*, n,p
open(unit=1, file="coefbis.txt",form="formatted",access="sequent
*
ial",status="unknown")
coef_binom(0)=1
k=0
do k=1,p
coef_binom(k)= (n-k+1)*coef_binom(k)/k
enddo
121
7380
Lucrarea 17
do k=0,p
write(1,10) k, coef_binom(k)
10
format(3x,i3,4x,i12)
enddo
end
15
772
program coef_binomial
implicit none
integer k, n, p
integer, allocatable :: coef_binom(:)
character*10 fmt
fmt="(a)"
write (*, fmt, advance="no") " Valorile pentru n si p: "
read*, n,p
open(unit=1, file="coefbinom.txt",form="formatted",access="sequent
*
ial",status="unknown")
allocate (coef_binom(p+1))
coef_binom(0)=1
k=0
do k=1,p
coef_binom(k)= (n-k+1)*coef_binom(k)/k
enddo
do k=0,p
write(1,10) k, coef_binom(k)
enddo
10
format(3x,i3,4x,i12)
close (unit=1)
end
122
7380
PROCEDURI RECURSIVE.
PROGRAMUL PUTERI
LUCRAREA 18
1. INTRODUCERE
O relaie de recuren este o formul prin care un termen al unui ir se poate
calcula din unul sau mai muli termeni precedeni.
Fie primii k termeni ai unui ir (k numr natural), i anume u1, u2, u3,,uk,
sau altfel scris {uk}k1. O relaie de forma:
u
n+ k
= a u
1
n + k 1
+ a u
2
n+k 2
+ ... + a u ,1 m n
k
(1)
(2)
(3)
(4)
Lucrarea 18
un+1 = un + r
(5)
care ns nu este de forma (1). Pentru a obine o astfel de relaie considerm relaii de
tipul 5 pentru doi termeni consecutivi:
un+2 = un+1 + r, un+1 = un + r
iar prin diferen rezult:
un+2 = 2un+1 un
(6)
(7)
Termenul pk poate fi scris sub forma pm = npm-1 = nnm-1 = nm. Se obine o relaie
de recuren de ordinul nti pentru care k = 1, a1 = n.
Descrierea n pseudocod a algoritmului iterativ, respectiv a algoritmului
recursiv, pentru calculul puterilor numrului natural n este prezentat n continuare:
algoritm iterativ
algoritm recursiv
k / 2 2
daca k este par
n
=
n ( k 1) / 2 2 daca k este impar
Lucrarea 18
procesorului, n secunde.
O problem important a programelor formate din mai multe uniti de
program este corectitudinea apelului unei proceduri externe. Datele necesare
compilatorului pentru a genera un apel corect al unei proceduri sunt furnizate de o
colecie de proprieti ale procedurii care sunt cunoscute sub denumirea de interfaa
procedurii. Dac ntreaga colecie de proprieti este accesibil compilatorului atunci
cnd acesta ntlnete un apel de procedur nseamn c se utilizeaz o interfa
explicit. Atunci cnd ntr-o unitate de program ntlnete un apel de procedur extern
compilatorul nu posed un mecanism pentru a accesa codul obiect al procedurii care a
fost compilat n mod separat. n acest caz, se utilizeaz o interfa implicit. Interfeele
implicite sunt o surs important de erori, mai ales n programele mari cu multe uniti
de program i apeluri frecvente.
Limbajul Fortran 90 permite specificarea de interfee explicite pentru
procedurile externe prin intermediul unui bloc interfa. Exemple de utilizare a
blocurilor interfa sunt prezentate n programele de mai jos, care implementeaz
algoritmii de mai sus.
15
772
program puteri
! varianta iterativa
implicit none
integer:: n, k
real :: t1, t2
interface
real function putere(n,k)
integer, intent (in)::n,k
integer::i
end function putere
end interface
write (*,"(A)",advance="no") " Numarul n = "
read*,n
write (*,"(A)",advance="no") " Exponentul k = "
read*,k
call cpu_time(t1)
print*, " Puterea ",k," a numarului ",n," este ", putere(n,k)
call cpu_time(t2)
print*, " Timpul de executie a programului este: ", (t2-t1), " secunde"
end
real function putere(n,k)
implicit none
integer, intent (in) :: n,k
integer :: i
126
7380
putere=1
do i=1,k
putere=n*putere
enddo
return
end
15
772
program puteri
7380
! varianta recursiva 1
implicit none
integer:: n, k
real :: t1, t2
interface
recursive real function putere(n,k)
integer, intent (in)::n,k
end function putere
end interface
write (*,"(A)",advance="no") " Numarul n = "
read*,n
write (*,"(A)",advance="no") " Exponentul k = "
read*,k
call cpu_time(t1)
print*, " Puterea ",k," a numarului ",n," este ", putere(n,k)
call cpu_time(t2)
print*, " Timpul de executie a programului este: ", (t2-t1), " secunde"
end
recursive real function putere(n,k) results (puteri_n)
implicit none
integer, intent (in) :: n,k
if (k.eq.0) then
puteri_n = 1
else
puteri_n=n*putere(n,k-1)
endif
end
15
772
program puteri
! varianta recursiva 2
implicit none
integer:: n, k
real :: t1, t2
127
7380
Lucrarea 18
interface
recursive real function putere(n,k)
integer, intent (in)::n,k
end function putere
end interface
write (*,"(A)",advance="no") " Numarul n = "
read*,n
write (*,"(A)",advance="no") " Exponentul k = "
read*,k
call cpu_time(t1)
print*, " Puterea ",k," a numarului ",n," este ", putere(n,k)
call cpu_time(t2)
print*, " Timpul de executie a programului este: ", (t2-t1), " secunde"
end
recursive real function putere(n,k) results (puteri_n)
implicit none
integer, intent (in) :: n,k
if (k.eq.0) then
puteri_n = 1
else
if (mod(k,2).eq.0) then
puteri_n =putere(n,k/2)*putere(n,k/2)
else
puteri_n =n*putere(n,(k-1)/2)*putere(n,(k-1)/2)
endif
endif
end
128
EXPRESII TABLOU.
PROGRAMUL GRAM_SCHMIDT
LUCRAREA 19
1. INTRODUCERE
Fie V un spaiu vectorial peste un cmp K. O mulime B de vectori din V se
numete baz pentru V dac B este liniar independent i genereaz spaiul vectorial V.
Un spaiu vectorial pe care s-a definit un produs scalar se numete spaiu
vectorial euclidian. Pentru spaiul vectorial euclidian R3 produsul scalar este definit
prin funcia real:
( x, y ) = x y + x y + x y
1
(1)
3
(2)
Doi vectori din spaiul vectorial euclidian V se numesc ortogonali dac produsul
lor scalar este nul. O submulime a spaiului vectorial se numete ortogonal dac
vectorii si sunt ortogonali doi cte doi. O mulime ortogonal se numete ortonormat
dac fiecare element al su are norma egal cu unitatea. Orice mulime ortogonal
dintr-un spaiu vectorial euclidian format din elemente nenule este
liniar
independent. Dac spaiul vectorial euclidian are dimensiunea n, atunci orice mulime
ortogonal care conine n elemente nenule este o baz a spaiului vectorial.
Pentru un spaiu vectorial euclidian din orice mulime liniar independent de
vectori din spaiu vectorial se poate construi o mulime ortonormat, mulime
ortogonal ale crei elemente au norma 1.
Procedeul prin care se trece de la o mulime liniar independent la o mulime
ortonormat se numete procedeul de ortogonalizare Gram-Schmidt.
Fie V un spaiu euclidian cu dimensiunea 3, iar (v1, v2, v3) este o baz a lui V.
Exist o baz ortonormat a lui V, (e1, e2, e3), care genereaz acelai spaiu ca i baza
(v1, v2, v3).
Mai nti se construiete o mulime ortogonal dup care se vor norma
elementele acestei mulimi. Mulimea ortogonal (w1, w2, w3) se obine din elementele
bazei (v1, v2, v3) n felul urmtor:
!
se consider w1 = v1;
129
Lucrarea 19
liniar independeni;
din condiia de ortogonalitate a vectorilor noii baze rezult:
vectorul w2 = v2 ((v2,w1)/(w1,w1))w1;
0 = (w3,w1) = (v3,w1) + k1( w1, w1) i 0 = (w3,w2) = (v3,w2) + k2( w2, w2),
din care se obin k1 = - (v3,w1)/(w1,w1) , k2 = - (v3,w2)/(w2,w2);
e =
i
w
i
, i = 1, 2, 3
(3)
2. PROGRAMUL GRAM-SCHMIDT
Fie R3 spaiul vectorial euclidian canonic cu trei dimensiuni. Se pune problema
gsirii unei baze ortonormate cunoscnd o baz oarecare a spaiului vectorial euclidian.
Pentru aceasta s-a scris programul Fortran numit gram-schmidt.
Programul conine i instruciuni de atribuire ce folosesc expresii tablou.
Limbajul Fortran accept i expresii tablou care conin operanzi tablouri.
Unui tablou i se poate aplica o operaie unar. Rezult un tablou cu aceeai
form, fiecare element al tabloului rezultat are valoarea corespunztoare operaiei
unare aplicate elementului respectiv.
Programul gram-schmidt este artat n continuare.
15
772
130
7380
print*
print*,"
d1,
d2,
d3"
e1,
e2,
e3"
f1,
f2,
f3"
print*,(d(i), i=1,n)
print*
print*,"
print*,(e(i), i=1,n)
print*
print*,"
print*,(f(i), i=1,n)
print*
print*, " Se verifica daca vectorii sunt ortogonali"
a=produs(n,d,e)
if (a.le.1.d-10) then
a=0.d0
endif
b=produs(n,d,f)
if (b.le.1.d-10) then
b=0.d0
endif
c=produs(n,e,f)
if (c.le.1.d-10) then
c=0.0
endif
print*
print*, " Produsul scalar (d,e) este= ", a
print*
print*, " Produsul scalar (d,f) este= ", b
print*
print*, " Produsul scalar (e,f) este= ", c
print*
norma_d= dsqrt(produs(n,d,d))
131
Lucrarea 19
norma_e= dsqrt(produs(n,e,e))
norma_f= dsqrt(produs(n,f,f))
print*, " Se verifica daca vectorii sunt normati"
print*
print*, " Norma vectorului d este= ",norma_d
print*
print*, " Norma vectorului e este= ",norma_e
print*
print*, " Norma vectorului f este= ",norma_f
end
real*8 function produs(n,u,v)
implicit none
integer :: i,n
real*8 :: u(n), v(n)
produs=0.
do i=1,n
produs=produs+u(i)*v(i)
enddo
return
end
132
LUCRAREA 20
1. INTRODUCERE
1. BIBLIOTECI DE PROGRAME
Dac iniial un programator scria o mulime de programe pentru rezolvarea
problemelor concrete, prin creterea complexitii problemelor abordate i a tehnicilor
utilizate, s-a impus schimbarea modului de rezolvare problemelor tehnico-tiinifice cu
ajutorul calculatorului. Un mare progres a fost reprezentat de dezvoltarea unor
biblioteci de programe, ce conin subprograme (rutine) concepute, scrise i documentate
ntr-un cadru unitar, testate complet i destinate unei mari comuniti de utilizatori.
Exist dou tipuri de biblioteci de programe: (1) biblioteci generale, care
acoper o marie arie tematic din matematic i statistic, (2) bibliotecile specializate,
care sunt destinate rezolvrii unor anumite categorii de probleme, cum ar fi analiza i
rezolvarea sistemelor liniare, rezolvarea sistemelor de ecuaii neliniare etc.
Folosirea bibliotecilor de programe implic realizarea de ctre programator, pe
baza documentaiei, a programelor proprii ce fac apel la componente ale bibliotecii,
rezolvnd astfel ntr-un mod eficient probleme concrete.
Calitatea bibliotecilor de programe se manifest att la nivelul componentelor,
ct i la nivelul ntregului, prin urmtoarele atribute: fiabilitate, robustee, structurare,
utilizabilitate, validitate i portabilitate.
SLATEC este o biblioteca general de programe ce conine peste 1000 de rutine
scrise n limbajul FORTRAN. Acestea sunt rodul cercetrilor intreprinse de-a lungul
anilor '80 la institute tiinifice de mare prestigiu din Statele Unite (Air Force Weapons
Laboratory - Albuquerque, Lawrence Livermore National Laboratory-Livermore, Los
Alamos National Laboratory-Los Alamos, National Bureau of Standards-Washington,
National Magnetic Fusion Energy Computer Center-Livermore, Oak Ridge National
Laboratory-Oak
Ridge,
Sandia
National
Laboratories-Alburquerque&Livermore).
Lucrarea 20
Datorit
proprietilor
polinoamelor
exist
metode
specifice
de
x3 + 2 x x = 0
Pentru a putea realiza un apel corect al rutinei dfzero se va prezenta mai nti
documentaia de utilizare a acesteia.
134
cu
toleran
specificat
prin
criteriile
de
oprire
algoritmului
2.
Lucrarea 20
3.
4.
5.
F ( x) = x 3 + 2 x x
pentru care se determin zerourile pe aceleai intervale ale variabilei x.
15
772
program radacina
implicit none
integer :: iflag
real*8 :: f, b, c, r, re, ae
external f
data re/1.e-6/ae/1.e-5/
write(*,10)
10
call dfzero(f,b,c,r,re,ae,iflag)
if ((iflag.eq.1).or.(iflag.eq.2)) then
write (*,20) b
20
136
7380
BIBLIOGRAFIE
1.
2.
Balan, Draga-Maria, Balan, G., Windows, Word for Windows, Excel, Editura
Promedia Plus Computers, Cluj-Napoca, 1995.
3.
Brsan, T., Burdujan, I., Vrabie, I., Metode numerice, Rotaprint I.P.Iai, 1990.
4.
5.
6.
7.
Dodescu, Gh., Odgescu, I., Nstase, P., Copos, Cristina, Compendiu de programare
a mini/micro calculatoarelor, Editura Enciclopedic, Bucureti, 1993.
8.
9.
Gheorghiu,
Anca,
Programarea
calculatoarelor
electronice,
Editura
Victor,
Bucureti, 2003.
10. Kovacs, S., Kovacs, Antonia, Un PC pentru fiecare, Editura Microinformatica,
Cluj-Napoca, 1993.
11. Mitrana, V., Provocarea algoritmilor, Editura Agni, Bucureti, 1994.
12. Mocanu, M., Marian, Gh., Bdic, C., Bdic, Carmen, 333 probleme de programare,
Editura Teora, Bucureti, 1993.
13. Patriciu, V.-V.,Sisteme de operare pentru mini i microcalculatoare, Editura
Militar, Bucureti, 1992.
14. Petru, O., Fortran 90/95 Limbaj i tehnici de programare, Universitatea Tehnic
Iai, 2001.
15. Popovici, P., Cira, O., Rezolvarea numeric a ecuaiilor neliniare, Editura Signata,
Timioara, 1992.
16. Rocule, M., Algebr liniar, geometrie analitic i geometrie diferenial, Editura
Tehnic, Bucureti, 1987.
17. Rocule, M., Analiz matematic, Editura Tehnic, Bucureti, 1996.
18. erbnai, L.-D., Limbaje de programare i compilatoare, Editura Academiei
Romne, Bucureti, 1987.
19. Sima, V., Varga, A., Practica optimizrii asistate de calculator, Editura Tehnic,
Bucureti, 1986.
20. Udrite, C., Bucur, C., Probleme de matematici i observaii metodologice, Editura
Facla, Timioara, 1980.
21. Vraciu, G., Popa, A., Metode numerice cu aplicaii n tehnica de calcul, Editura
Scrisul romnesc, Craiova, 1982.
137