Referat Algoritmi
Mai jos puteti citi fragmente din
Referat Algoritmi si de asemenea puteti face
Download Referat AlgoritmiCiteste fragmente din Referat Algoritmi
Algoritmi
Åži structuri de date
-conspect -
CUPRINS
Sistem Informaţional – Sistem Informatic
Structuri de date
Grafuri
Algoritmi definire
Descrierea algoritmilor
Structuri fundamentale ale algoritmilor
Evaluarea corectitudinii algoritmilor
Limbaje de programare
Algoritmi speciali
Tehnici de programare
Tehnici de programare structuratã
Probleme
Bibliografie
Introducere:
Semiotica se ocupã cu studiul semnelor în natura şi în societate.
Semnul nu este o calitate în sine a unui obiect, ci o funcţie pe care
acest obiect o poate dobandi. Studiind combinatorica rezultantã,
rezultã ca din punct de vedere teoretic sunt posibile mii de clase de
semne; dar imensa varietate de semne poate fi raportata la o anumita
tipologie conform careia semnele se repartizeazã în 3 categorii: semne
iconice, semne indiciale, semne simbolice. Aceasta clasificare se
referã la tipul de legatura al semnului cu referentul.
Sunt de remarcat 3 specii de semne iconice: imagini, grafuri, metafore.
Ştiinţa este bogatã în semne indiciale, inevitabile, atât în
procesele de generalizare cat şi în cele de demonstrare, dar metoda
modelarii promoveazã cu deosebita putere în cercetarea stiintifica,
semnele iconice.
Se poate afirma totodata, ca semnele simbolice prezinta caracterul cel
mai pronuntat social; ele sunt generate exclusiv prin puterea unei
conventii pe care o comunitate de indivizi, istoriceste constituita o
poate instaura.
ÅŸtiinte ( formule algebriece, formule din chimia organica, etc. ) dar
mai cu seama, limbajele de comunicare om – masina, de o deosebita
importanta astãzi datorita dezvoltarii calculatoarelor electronice.
O alta triada care a jucat un rol important în dezvoltarea semioticii
este constituita de distinctiile dintre:
Sintaxa – studiul relatiilor dintre semnele unui sistem semiotic;
Semantica – studiul relatiilor dintre semne şi obiectele pe care ele
le desemneaza;
Pragmatica – studiul relatiilor dintre semne şi cei care le
interpreteaza ÅŸi le folosesc.
Statutul pragmaticii este inca foarte controversat, mai ales în
legatura cu limbajele de programare a calculatoarelor electronice, ÅŸi
cu evolutia acestora.
Cele 6 functii ale procesului de comunicare codificata sunt:
Emotivã;
Conativã;
Referenţialã;
Faticã ( de centrare asupra canalului );
Metalingvisticã ( de centrare asupra codului );
Poeticã.
Superioritatea calitativã a vorbelor fata de semnale provine din
generalitatea semnificatiilor pe care le produce. „Magia†cuvintelor
tine de valoarea cognitiva ÅŸi pragmatica a notiunilor pe care le
vehiculeaza. „Fiecare cuvant era şi ramane o victorie contra
absentei, contra lipsei, contra neputinei†a spus Gerard Mendel în
cartea sa „La chasse structuraleâ€Â.
CAPITOLUL 1
Sistem informaţional – Sistem informatic
Sistem informaţional
Un sistem poate fi privit ca un ansamblu de elemente interconectate ÅŸi
interconditionate prin relaţii fizice, sociale şi de alta natura,
intre ele şi nu mediul extern sistemului, care functioneaza în vederea
realizarii unui scop sau a finalizarii unui obiect.
ÅŸi care la randul lor pot fi considerate sisteme:
Sistemul de conducere sau decizional ( S.D. )
Sistemul condus, de executie sau operational ( S.O. )
Sistem informational.
Sistemul de conducere are rolul de a dispune, indruma ÅŸi coordona
activitatea în vederea realizarii abiectivelor fixate, cu eficienta
maxima.
Sistemul condus are rolul de a executa practic deciziile luate ÅŸi de a
furniza date privind actiunile realizate, sau în curs de executie,
folosind pt aceasta resursele materiale, financiare stiintifice ÅŸi
umane existente, repartizate pe obiective dinainte stabilite.
Pentru executarea activitatiilor de bazã ale procesului decizional:
planificare, urmarire, control ÅŸi decizie, sistemului de conducere ii
sunt necesare permanent informatii despre starea ÅŸi evolutia sistemului
de executie, despre legaturile acestuia cu exteriorul. De la sistemul de
conducere, spre sistemul condus vor circula decizii. Acest circuit de
informatii şi decizii reprezintã un proces permanent care se
realizeaza prin existenta Sistemului Informational.
Sistemul Informational este un instrument indispensabil conducerii,
având ca parti componente mijloacele şi procedeele ce asigura
legaturile intre elementele de executie ÅŸi elementele decizionale
pentru conducere ÅŸi organizare.
ÃŽn felul acesta, prin sistemul informational se pot cunoaste la timp
şi în cantitati necesare toate elementele de caracterizare a
activitatilor desfasurate, el cuprinzand fondul de informatii, tehnicile
de colectare şi stocare, mijloacele şi metodele necesare în vederea
prelucrarii ÅŸi transmiterii informatiilor.
Deci, sistemul informational este un ansamblu de fluxuri ÅŸi circuite
informationale organizate intr-o conceptie unitara, el utilizeaza
modele, proceduri, resurse umane ÅŸi materiale pentru colectarea,
inregistrarea, prelucrarea, stocarea ÅŸi/sau transmiterea datelor ÅŸi a
informatiilor, prin intermediul carora asigura interconexiunile
informationale dintre sistemul de conducere ÅŸi sistemul condus.
Sistemul informational primeste intrari, le prelucreaza ÅŸi furnizeaza
iesiri. Intrarile ÅŸi iesirile unui sistem informational, sunt date,
informatii ÅŸi decizii.
Ansamblul operatiilor la care sunt supuse intrarile pentru a furniza
iesirile se constituie în proceduri.
ÃŽn cazul cand metodele, procedurile ÅŸi mijloacele utilizate pentru
colectarea, inregistrarea, prelucrarea, stocarea ÅŸi/sau transmiterea
datelor ÅŸi a informatiilor sunt cu preponderenta automatizate, sistemul
informational devine un sistem informatic.
Sistemul informatic – intrument al conducerii stiintifice a
societatilor comerciale
Conceptul de sistem informatic
În masura în care activitatiile din cadrul sistemului informational
sunt realizate cu ajutorul echipamentelor electronice de culegere,
transmitere, stocare ÅŸi prelucrare automata a datelor, se spune ca avem
de a face cu informatizarea sistemului informational ÅŸi implicit cu
aparitia conceptului de sistem informatic.
Sistemul informatic, reprezintã un ansamblu de elemente intercorelate,
functional în scopul automatizarii obtinerii informatiilor necesare
conducerii în procesul de elaborare a deciziilor.
Un sistem informatic, este compus, în principal din urmatoarele
elemente:
şi prelucrare a datelor, în care locul central revine calculatorului
electronic.
Sistemul de program sau software-ul sistemului, ce cuprinde totalitatea
programelor pentru functionarea sistemului informatic, în concordanta
cu functiunile ÅŸi obiectivele ce au fost stabilite.
Bazã stiintifico-metodologica, care este constituita din modele
matematice ale proceselor ÅŸi fenomenelor economice, metodologii, metode
ÅŸi tehnici de realizare a sistemelor informatice.
Bazã informationala cuprinde datele suspuse prelucrarii, fluxurile
informationale, sistemele ÅŸi nomenclatoarele de coduri.
Resursele umane ÅŸi cadrul organizatoric, care cuprinde personalul de
specialitate ÅŸi cadrul necesar functionarii sistemului informatic.
Obiectivele sistemului informatic
Obiectivele sistemului informatic pot fi clasificate dupa mai multe
criterii astfel:
A. ÃŽn functie de sfera de cuprindere pot fi: principale ( generale )
ÅŸi secundare ( derivate ).
B. Din punct de vedere al domeniului de activitati asupra carora se
rasfrang efectele utilizarii calculatoarelor electronice, obiectivele
pot fi clasificate astfel:
Obiective ce afecteaza activitatiile de bazã din cadrul unitatilor
economice ( comerciala, productia, etc. ) cum ar fi:
ÅŸi reducerea duratei ciclului de fabricatie;
cresterea volumului productiei;
reducerea consumurilor specifice de materii prime ÅŸi materiale
reducerea personalului administrativ – functionaresc;
cresterea gradului de utilizare a capacitatii de cazare;
sporirea volumului incasarilor din cativitati de prestari servicii;
cresterea profitului ÅŸi a rentabilitatii etc.
b. obiectivele ce afecteaza functionarea sistemului informational cum ar
fi:
cresterea vitezei de raspuns a sistemului la solicitarile
beneficiarilor;
cresterea exactitatii şi preciziei în procesul de prelucrare a datelor
ÅŸi informarea conducerii;
reducerea costului informatiei;
rationalizarea fluxurilor informationale;
rationalizarea circuitelor informationale;
sporirea completitudinii situatiilor de informare – raportare , etc.
C. Din punct de vedere al posibilitatiilor de cuantificare a efectelor
acestora:
obiective cuantificabile, cum ar fi:
accelerarea vitezei de rotatie a mijloacelor circulante, prin
inlaturarea imobilizarilor de mijloace circulante;
reducerea cheltuielilor de transport;
reducerea cheltuielilor indirecte;
cresterea volumului productiei;
rationalizarea formularisticii de evidenta, etc.
obiective necuantificabile, care influenteaza în mod direct indicatorii
cuantificabili.
Clasificarea sistemelor informatice
Sistemele informatice se clasifica dupa mai multe criterii:
A. În functie de domeniul de utilizare, acestea se clasifica în 4
grupe, astfel:
a. sisteme informatice pentru conducerea activitatiilor unitatiilor
economico sociale, care se caracterizeaza prin aceea ca datele de
intrare, de regula sunt furnizate prin documente intocmite de om, iar la
iesire sunt furnizate de catre sistem tot sub forma de documente, pentru
perceperea acestora de catre om.
b. sisteme informatice pentru conducerea sistemelor tehnologice care se
caracterizeaza prin aceea ca datele de intrare sunt asigurate prin
intermediul unor dispozitive automate care transmit sub forma de semnale
informatii despre diversi parametrii ai procesului tehnologic, iar
datele de iesire se transmit de asemenea sub forma de semnale unor
organe de executie, regulatoare, care modifica automat parametrii
procesului tehnologic.
ÅŸi proiectare, care asigura atutomatizarea calculelor
tehnico-ingineresti.
d. sistemele informatice speciale, care sunt destinate unor domenii
specifice de activitate, ca de exemplu: informare ÅŸi documentare
tehnico-stiintifica, medicina, etc.
B. Un alt criteriu de clasificare al sistemelor informatice economice
este nivelul ierarhic ocupat de sistemul economic în structura
organizatorica a societatii, conform caruia avem urmatoarea clasificare:
a. sisteme informatice pentru conducerea activitatii la nivelul
unitatilor economie. Acestea pot fi descompuse în subsisteme
informatice asociate functiunilor economico-sociale sau chiar unor
activitati;
b. sisteme informatice pentru conducerea activitatii la nivelul
organizatiilor economico-sociale cu structura de grup.
c. sistemele informatice teritoriale. Sunt constituite la nivelul
unitatilor administrativ-teritoriale ÅŸi servesc la fundamentarea
deciziilor adoptate de catre organele locale de conducere;
d. sistemele informatice pentru conducerea ramurilor, subramurilor ÅŸi
activitatilor la nivelul economiei nationale.
Se constituie la nivelul ramurilor, subramurilor ÅŸi activitatilor
individualizate în virtutea diviziunii sociale a muncii şi specificate
în clasificarea ramurilor economiei nationale. Principala lor functiune
consta în fundamentarea şi reglarea echilibrului dezvoltarii
economico-sociale în profil de ramura.
e. sistemele informatice functionale generale au ca atribut principal
faptul ca intersecteaza toate ramurile şi activitatiile ce au loc în
spatiul economiei nationale, furnizand informatiile necesare coordonarii
de ansamblu şi sincronizarilor în procesul reproductiei din cadrul
economiei de piata.
C. În functie de modul de organizare a datelor în cadrul sistemelor
informatice acestea pot fi:
sisteme informatice cu organizarea datelor în fisiere clasice. Acest
mod de organizare a datelor are tendinta de rasfrangere sub aspectul
aplicabilitatii, datorita neajunsurilor pe care le prezinta.
ÅŸi dezvoltare. De la baze de date cu structuri arborescente ÅŸi retea,
s-a trecut la baze de date rationale.
Sistemul informatic – instrument al conducerii moderne
Obtinerea de catre agentii economici ÅŸi societatiile comerciale a unei
eficiente economice sporite, este conditionata de existenta unei
conduceri stiintifice bazate pe o buna cunoastere a legilor economice.
ÅŸi macroeconomic a unor sisteme informatice care sa utilizeze tehnica
bazelor de date ÅŸi care sa contina o serie de modele matematice, iar
situatiile de informare – raportare sa aiba un caracter de semnalare
preventiva a abaterilor fata de starea normala, reprezintã o forma
superioara de organizare ÅŸi prelucrare a datelor.
Stadiul actual ÅŸi tendintele dezvoltarii sistemelor informatice
şi anume, trecerea de la orientarea industriala, în care accentul se
pune pe masina şi energie, la o noua orientare informationala în care
accentul este pus pe robot ÅŸi informatie. Masina ÅŸi energia vor juca
un rol important, fundamental în societatea informationala, dar pentru
noile masini, pentru noile industrii, ca ÅŸi pentru celelalte activitati
ale omului devin esentiale tehnologiile informatice care au la bazã
electronica, informatica, ÅŸi comunicatiile moderne.
Informatizarea activitatilor economico-sociale a cunoscut profunde
transformari precum:
Se manifesta în mod clar o tendinta spre divizarea costurilor
software-ului sistemelor informatice. Reducerea costurilor sistemelor
informatice se datoreaza, pe de o partea, reducerii costurilor
hardware-ului, iar pe de alta parte, reducerii costului software-ului.
În prezent se manifesta o tendinta clara în dezvoltarea sistemelor
informatice bazate tot mai mult pe platformele software la nivel inalt.
O platforma software corespunde unei platforme de aplicatii ÅŸi contine
functii software de bazã şi functii specifice aplicatiei companiei.
Se manifesta o intensa tendinta spre tehnologia sistemelor informatice
bazate pe retele de calculatoare. Cresterea complexitatii, varietatii
aplicatiilor ÅŸi aparitia de noi produse informatice cu un raport pret /
performanta din ce în ce mai avantajos au facut necesara şi rentabila
conectarea intre ele a calculatoarelor în cadrul unor retele care
constituie la ora actuala suportul cel mai adecvat pentru
teleinformatica.
ÃŽn domeniul organizarii datelor, se manifesta tendinta spre baze de
date orientate obiect.
Structurile clasice de date bazate pe text ÅŸi valori numerice fie se
dovedesc insuficiente, fie complexitatea lor depaseste posibilitatiile
de stocare ÅŸi prelucrare oferite de tehnologiile clasice. Aplicatiile
asociate cu disciplinele tehnologice cum ar fi : proiectarea asistata pe
calculator, sistemele informatice geografice ÅŸi sistemele bazate pe
cunostinte, presupun stocarea unor cantitati mari de informatii cu o
structura complexa.
Unele aplicatii informatice solicita monitorizarea unor desene formate
din grupuri de elemente complexe ce trebuie sa fie combinate, separate,
suprapuse ÅŸi modificate astfel incat sa permita elaborarea unor
variante de proiect. Bazele de date clasice sau relationale ofera prea
putin suport teoretic ÅŸi practic pentru tipurile neconventionale de
date.
Se manifesta tendinta catre sisteme deschise.
Apreciem ca în prezent domeniul informaticii se caracterizeaza prin cel
mai pronuntat dinamism. Se asista la o proliferare de produse hardware
ÅŸi software, apar de la o zi la alta noi versiuni ÅŸi noi produse.
Faptul ca un sistem este deschis, nu implica ÅŸi nu impune nici o
implementare practica de sistem, tehnologie sau mijloc de
interconectare, termenul de sistem deschis se referã doar la
recunoasterea reciproca ÅŸi aplicabilitatea acelorasi standarde.
Astfel de standarde au cel putin urmatoarele efecte mai importante:
Producatorii se simt incurajati sa le implementeze deoarece, având în
vedere larga circulatie a acestor standarde, produsele lor informatice
vor fi mult mai vandabile decat daca nu le utilizeaza;
Asigura o crestere a gradului de portabilitate de pe o platforma de
sistem pe alta, atât a datelor cat şi a produselor software;
Faciliteaza insusirea teoretica ÅŸi practica a hardware-ului ÅŸi
software-ului de catre utilizatori
Standardizarea se regaseste intr-o multitudine de domenii de activitati
Standardizarea retelelor de calculatoare. Au luat o amploare deosebita
preocuparile privind realizarea unor retele eterogene de calculatoare,
precum ÅŸi interconectarea retelelor a.i. sa se obtina sisteme
teleinformatice de dimensiuni mari.
Aceste preocupari s-au materializat atât în plan practic, prin
realizarea unor sisteme mari cat şi în plan teoretic, prin elaborarea
de catre ISO ( International Standard Organization ) a unui model
arhitectural stratificat de referinta pentru interconectarea sistemelor
deschise.
Modelul a fost adoptat în 1983 şi reprezintã un cadru conceptual de
lucru pentru definirea de standarde referitoare la interconectarea
calculatoarelor eterogene. Scopul fundamental al acestui standard
international este asigurarea unei baze comune pentru coordonarea de noi
standarde privind interconectarea sistemelor, permitand în acelasi timp
evaluarea standardelor existente.
ÅŸi standardele corespunzatoare de a putea fi interconectate. De
asemenea a fost adoptat teoretic ÅŸi practic ÅŸi un model arhitectural
ierarhizat, elaborat de catre Departamentul Apararii din S.U.A. (
Departament of Defence – DoD )
Standardizarea arhitecturii Sistemelor de Gestiune a Bazelor de Date.
ÃŽn acest sens amintim arhitectura propusa de CODASYL ÅŸi ANSI.
Standardizarea limbajelor de programare s-a materializat prin
propunerile grupului de lucru CODASYL, care au elaborat limbajul de
programare COBOL. Unele limbaje cum sunt: C, C++, Basic, SQL, au devenit
standarde de facto, datorita faptului ca s-au impus prin performantele
ÅŸi facilitatiile ce le ofera.
CAPITOLUL 2
Structuri de date
Prelucrarea automata a datelor necesita, pe langa activitatiile legate
de formularea problemei, de analiza acesteia în vederea gasirii
algoritmului de rezolvare ÅŸi o alta activitate deosebit de importanta,
legata de organizarea datelor.
Organizarea datelor este un proces care cuprinde urmatoarele activitati:
identificarea datelor;
clasificarea ÅŸi descrierea propietatiilor, a caracteristicilor datelor;
gruparea datelor în colectii de date destinate prelucrarii automate;
reprezentarea externa pe suporturi tehnice;
identificarea, definirea ÅŸi descrierea procedurilor de prelucrare
automata.
Eficienta prelucrarii automate a datelor, succesul acesteia depind în
mare masura, de organizarea interna ÅŸi externa a datelor, de stabilirea
unor structuri de date care sa corespunda cerintelor de prelucrare.
Concepte de bazã
Odata cu aparitia bazelor de date, în terminologia curenta au fost
introduse şi utilizare 3 concepte de bazã în organizarea datelor, şi
anume: entitate, atribut ÅŸi valoare.
Entitatea reprezintã un obiect concret sau abstract, reprezentat prin
proprietatiile lui. Pe de alta parte orice proprietatea a unui obiect
poate fi descrisa printr-o pereche ( Atribut, Valoare ); prin urmare o
entitate poate fi reprezentata prin mai multe proprietati, deci mai
multe perechi de forma ( Atribut, Valoare ).
De exemplu, un student X se poate reprezenta prin perechi ( Nume, Ion ),
( Facultate, Informatica ), ( Telefon, 435 34 76 ), ( Grupa 601 ) etc.
Practic, multimea atributelor, Nume, Facultate, Telefon, Grupa, poate fi
asociata mai multor studenti; aceasta inseamna ca un atribut nu
caracterizeaza doar o entitate, ci o clasa de entitati, numita entitate
grup.
ÃŽn exemplul nostru, entitatea grup se poate numi STUDENTI.
Notiunea de atribut este cunoscuta ÅŸi sub numele de camp sau
caracteristica.
Notiunea de data
ÃŽn informatica prin data, se intelege un model de reprezentare a
informatiilor despre obiectele supuse prelucrarii automate, accesibil
atât utilizatorului cat şi componentelor calculatorului.
În functie de obiectele pe care le reprezintã datele se pot clasifica
în:
date elementare sau scalare care se prezinta sub forma de entitati
indivizibile
colectii de date, care se prezinta sub forma unor multimi de date
elementare intre care se definesc şi se descriu anumite relaţii.
Componentele unei structuri se pot identifica ÅŸi selecta prin numele de
identificare sau prin pozitia pe care o ocupã în cadrul structurii,
potrivit relatiei de ordine stabilita.
Dupa tipul componentelor, structurile de date se pot grupa în:
structuri de date omogene, care contin elemente de acelasi tip;
structuri de date eterogene, care contin componente de tipuri diferite.
OBSERVATIE:Daca o structura se poate descompune în structuri de acelasi
tip, atunci structura respectiva este recursiva.
ÃŽn mod corespunzator, structurile de date vor putea fi:
structuri de date interne , având caracter temporar, deoarece sunt
realizate în memoria interna de tip RAM ( volatila );
structuri de date externe, care au un caracter relativ permanent,
deoarece sunt memorate pe suport extern. Aceste structuri pot curpinde:
fisiere de date
baze de date
banci de date
Din punct de vedere al modului de alocare a zonelor de memorie,
structurile de date pot fi grupate astfel:
structuri de date statice, la care alocarea zonelor de memorie necesare
pastrarii temporare a datelor este facuta în momentul compilarii
programului ÅŸi ramane aceasi pe toata durata de executie a programului
respectiv;
structuri de date dinamice, la care alocarea zonelor de memorie se face
numai în momenutl executiei programului, la momentul necesar, ele
putand fi modificate, eliberate, sau realocate pe toata durata de
executie a programului respectiv.
Dupa nivelul de structurare a datelor se poate face gruparea:
structura logica, care se referã la modul de ordonare a datelor, la
operatorii de prelucrare a datelor;
structura fizica, reprezentand modul de implementare, de reprezentare a
datelor, pe suport magnetic de date.
Tipuri de structuri de date
relaţii care duc la un anumit mecanism de selectie şi identificare a
datelor.
Aceste relaţii pot fi de tipul:
de echivalenta
de ordine
de ordine totala
de preordine
Se numeste tip de structura de date o multime ordonata de date, intre
care s-au stabilit anumite relaţii şi care folosesc, pentru realizarea
operatiilor un grup de operatori de bazã cu o anumita semantica.
Principalele tipuri de structuri de date ( logice ) sunt:
structura punctuala
structura liniara
a1 a2 a3
a4
Structurã liniarã simplã
Principalele caracteristici ale acestui tip de structura sunt:
cardinalul multimii elementelor initiale este egal cu 1
cardinalul multimii elementelor terminale este egal cu maxim 1
orice element neterminal are un succesor imediat unic
primul element nu are predecesori
ultimul element nu are succesori
relatiile stabilite intre date sunt de tip 1 la 1
daca exista un cuplu în relatie de forma ( u, v ), unde v este ultimul
element al structurii, iar u este primul element, atunci structura se
numeste structura liniara inelara sau circulara.
intre date se stabilesc relaţii de tipul 1 la 1
structura liniara se numeste structura liniara cu elemente structurate
arborescent, daca componentele ei sunt structuri arborescente
structura liniara se numeste structura liniara cu elemente structurate
retea, daca componentele ei sunt structuri de tip retea
structura arborescenta, sau descendenta, sau ierarhica este definita
atunci cand intre elementele colectiei de date exista o relatie de
ordine.
Arbori binari
Datorita specificului lor, arborii binari admit o reprezentare grafica
simetrica, axa de simetrie trecand prin radacina arborelui. De aceea,
subarborii unui element oarecare sunt denumiti subarbore stang, ÅŸi
respectiv subarbore drept, functie de pozitia relativa a acestora fata
de elementul respectiv.
Astfel pentru arborii binari s-au identificat ÅŸi s-au descris 3
modalitati de parcurgere a elementelor arborelui denumite:
parcurgere în preordine
parcurgere în inordine
parcurgere în finordine ( postordine )
structura retea, definita atunci cand intre elementele colectiei de date
exista o relatie de preordine. Ea are urmatoarele caracteristici:
este practic un graf care are, intre doua noduri, legaturi
budirectionale;
exista unul sau mai multe noduri initiale (cardinalul miltimii este egal
sau mai mare cu 1);
exista unul sau mai multe noduri finale (cardinalul mltimii nodurilor
finale este egal sau mai mare cu 1);
orice nod poate avea mai multi predecesori, el putand fi predecesorul
propriului predecesor. Atunci apar în retea cicluri. Un ciclu se
defineste atunci cand nodul initial este acelasi cu nodul final;
aţii de tip m la n.
Structura relationara este formata din mai multe tabele de date
elementare, numite tablori sau relaţii, obtinute prin metoda
normalizarii, pentru a asigura conditiile de integritate ÅŸi unicitate a
datelor ÅŸi a elimina astfel nomaliile la actualizari.
Despre acest tip de structura vom invata mai mult la S.G.B.D.-uri, adica
la sisteme de gestiune a bazelor de date, special realizate pentru
operatii cu colectii de date memorate pe suporti externi.
Informatii despre cantitatile de produse finite care trebuie realizate
Informatii despre structura produselor finite respective.
ÅŸi al cerintelor de prelucrare. Aceasta multime este organizata ca o
lista liniara, cu elemente structurale arborescente.
Bazã de date se defineste ca o colectie de date aflate în
interdependenta, memorata pe suport impreuna cu descrierea datelor ÅŸi a
relatiilor dintre ele.
Banca de date reprezintã un sistem de organizare şi prelucrare
respectiv tele-prelucrare a datelor constituit din:
bazã de date
un sistem de programe pentru gestiunea datelor.
Structuri de date interne
Cele mai frecvent utilizate structuri statice de date sunt:
masive (tablouri )
articole ( inregistrari logice )
Limbajele de programare permit implementarea acestor structuri statice
de date.
Masivul reprezintã o structura de date omogena cu una, doua sau n
dimensiuni. Masivul cu o dimensiune se numeste în mod uzual vector, iar
cu doua matrice.
Exemplu:
Fie vectorul X cu elementele x1, x2, x3, ... ,xn un tablou
unidimensional cu n elemente componente de acelasi tip.
ÃŽn memoria interna el va fi memorat astfel:
X
1 2 ....
n
Adresa Adresa Adresa
Adresa
de de de
de
bazã bazã+1 bazã+2*1
bazã+(n-1)*1
Reprezentarea elementelor unui vector în memoria interna
Articole.Fisiere de date
Articolul sau inregistrarea logica reprezintã o structura de date
interna, eterogena de tipul „ structura arborescenta „.
Un articol este format din campuri de date care se identifica în mod
unic printr-un identificator sau nume asociat.
ÅŸi formeaza o colectie de date omogene din punct de vedere al
semnificatiei ÅŸi al cerintelor de prelucrare.
Metodele de organizare a fisierelor definesc regulile care stau la bazã
constituirii articolelor în fisiere şi se stabilesc la operatia de
creare a fisierelor. Astfel fisierele pot avea:
Organizare secventiala care memoreaza articolele de date secvential în
ordinea introducerilor iar accesul la articole poate fi doar secvential.
Organizare secvential-indexata care presupune crearea fisierului de date
cu articolele ordonate crescator dupa valoarea unui camp de date numit
cheie de indexare.
ÅŸi apoi identificarea articolelor printr-o cheie care poate fi un camp
de date, sau nu, dar a carei valoare se asociaza fiecarui articol în
parte.
Metodele de acces la articolele unui fisier stabilesc modalitatile prin
care se localizeaza un articol în fisierul de date.
Tipuri de acces:
Acces secvential
Acces direct
Programare orientata spre obiecte
Programare orientata spre obiecte reprezintã un stil de programare nou,
care utilizeaza concepte ÅŸi constructii noi, modalitati noi de
structurare a datelor, de tratare a colectiilor de date ÅŸi programare.
La programarea orientata spre obiecte procedurile de prelucrare ÅŸi
datele sunt incapsulate în obiecte, asupra carora se aplica mesaje care
modeleaza comportamentul sistemului.
Date ÅŸi expresii
Asupra datelor elementare sau memorate în structuri de date statice sau
dinamice, interne sau externe, în cadrul prelucrarii atutomate, se pot
aplica diferiti operatori, rezultand astfel constructii sintactice
denumite expresii.
şi operatori. Din evaluarea unei expresii rezultã o valoare, care
reprezintã rezultatul ei.
Operatorii pot fi grupati în:
operatori aritmetici
operatori logici
operatori de comparare
operatori pe siruri de caractere
Toate limbajele de programare permit implementarea acestor tipuri de
operatori ÅŸi constructia unor tipuri de expresii corespunzatoare.
ÃŽn toate limbajele de programare, operatorii aritmetici au
reprezentarea:
+ pentru adunare
- pentru scadere
* pentru inmultire
/ pentru impartire
^n pentru ridicarea la putere n
( ) pentru gruparea operatiilor ÅŸi schimbarea ordinii normale de
executie a acestora.
Este permisa includerea unor paranteze în altele, ordinea de desfacere
a acestora fiind dinspre interior spre exterior.
CAPITOLUL 3
Grafuri
Definitii, tipuri
Notiunile de algoritm ÅŸi schema logica pot fi definite, explicate ÅŸi
mai ales foarte des utilizate în legatura cu elemente de teoria
grafurilor.
Se umeste graf neorientat o pereche ordonata G = ( X, U ), unde X este o
multime finita ÅŸi nevida de elemente numite noduri ( varfuri ), iar U
este o multime de perechi neordonate de elemente distincte ale lui X,
numite muchii.
Se numeste lant intr-un graf G = ( X, U ) o succesiune de muchii de
forma [i1,i2], [i2,i3],...,[în-1,în], notata prescurtat prin
[i1,i2,...în]
Un lant în care muchiile sunt diferite doua cate doua se numeste ciclu.
Un varf care este extre,otatea imeo somgire ,icjoo se mi,este varf
terminal.
Doua varfuri unite printr-o muchie se numesc varfuri adiacente.
Un graf orientat este o pereche ordonata G = ( X, U ), deosebirea fata
de graful neorientat constand în faptul ca elementele lui U sunt
perechi ordonate de varfuri numite arce. ÃŽn cazul grafurilor orientate,
notiunile de lant şi ciclu isi au corespondent în notiunile de drum
ÅŸi circuit.
Arbori
Se numeste arbore un graf neorientat, conex,
varfuri, exista cel putin doua varfuri terminale.
Se poate demonstra, cu privire la grafuri, teorema:
1 varfuri. Urmatoarele afirmatii sunt echivalente:
1. G este un arbore;
ÅŸi nu contine cicluri;
3. G are n-1 muchii ÅŸi este conex;
4. Orice doua varfuri din G sunt unite printr-un unic lant.
Se numeste arbore binar un arbore orientat, în care fiecare varf are
cel mult doi descendenti, facandu-se insa distinctia intre descendetul
stang ÅŸi cel drept al fiecarui varf.
Se numeste arbore de sortare un arbore binar cu proprietatile:
INF(j) pentru orice varf j din subarborele stang al lui i;
INF(j) pentru orice varf j din subarborele drept al lui i.
CAPITOLUL 4
Algoritmi definire
Notiunea de algoritm, preluata din matematica, este fundamentala în
activitatea de programare a calculatoarelor electronice.
Programarea este practic activitatea prin care se concepe ÅŸi se
realizeaza programul pentru rezolvarea unei probleme, cu ajutorul
calculatorului electronic.
Un program reprezintã o succesiune de instructiuni şi comenzi
apartinand unui/unor limbaje de programare ( Pascal, Basic, C, Java )
care conduc la solutionarea problemei formulate.
Daca ne referim la activitatea de programare, vom identifica în cadrul
acestea etapele:
formularea problemei
elaborarea, identificarea ÅŸi descrierea algoritmului de rezolvare
scrierea programului
programul trebuie sa fie bun, simplu ÅŸi eficient.
testarea programului
realizarea, completarea ÅŸi definitivarea documentatiei programului
exploatarea curenta
Notiunea de algoritmi
Cuvantul algoritm este de origine araba, derivand din numele
matematicianului Abu Ja`far Mohammed ibn Musa al-Kahowarizmi.
Cunoscuta cu aproape 2000 ani I.H., notiunea de algoritm a devenit una
din notiunile centrale ale matematicii actuale.
Sunt mai multe tipuri de algoritmi, cum ar fi:
algoritmul impartirii a doua numere
algoritmul extragerii radacinii patrate a unui numar
algoritmul rezolvarii ecuatiei de gradul II
S-a demonstrat apoi ca nu orice problema poate fi rezolvata alcatuind un
algoritm de rezolvare a acesteia.
Se spune ca o problema este decidabila daca exista un algoritm pentru
rezolvarea ei.
De exemplu, problema gasirii solutiilor unei ecuatii diofantice de
gradul I de forma:
ax+by=c a,b,c sunt numere intregi, este decidabila.
CAPITOLUL 5
Limbaje de prezentare a algoritmilor ( pseudocod )
Descrierea in practica a algoritmilor in limbaj natural sau cu ajutorul
schemelor logice prezinta unele dezavataje. Astfel, prima este prea
detaliata pentru gustul programatorilor si de aceea nu este acceptata
decat in cazuri speciale, in care trebuie sa sustina in fata unor
nespecialisti in informatica, solutia adoptata.
Practica acceptata si alte metode de descriere, dintre care in ultima
vreme s-au impus limbajele de prezentare a algoritmilor, numite si
pseudocod.
Unele notatii folosite la descrierea algoritmilor
Formulele folosite in matematica si in tehnica sunt date pentru cazul
general, aparand in ele atat numele unor cantitati variabile, cat si a
unor constante.
In pseudocod subprogramele au urmatoarea forma generala:
ANTET
Secventa de instructiuni
END
ANTET poate fi de forma:
PROGRAM nume_program
PROCEDURE nume_procedura
FUNCTIE nume_functie
Apelul subprogramelor se face prin referirea de forma:
Nume ( lista_parametrii ) sau prin intermediul unui cuvant cheie cum ar
fi cuvantul CALL:
CALL nume_procedura ( lista_parametrii )
Exista posibilitatea reluarii repetate a unui pas sau grup de mai multi
pasi in interiorul unui aloritm; aceste procee repetitive pot fi
definite ca iterative sau recursive.
Iterativitatea este procesul prin care rezultatul este obtinut prin
executia repetata a uui set de operatii, de fiecare data cu alte valori
de intrare.
Recursivitatea reprezinta un proces repetitiv prin care rezultatul de la
un anumit pas se determina pe baza unuia sau mai multor rezultate
obtinute in pasii anteriori.
Scheme logice
Schema logica este o forma de prezentare a algoritmului si a modului de
lucru al acestuia sub forma grafica, folosind diferite simboluri
grafice.
Se stie ca in practica programarii se acorda o importanta deosebita
realizarii schemelor logice in perioada de debut, astfel ca dupa o
anumita experienta in domeniu, se incearca tot mai des renuntarea la
aceasta importanta etapa a proiectarii.
Figurile geometrice folosite la realizarea schemelor logice se numesc
simboluri sau blocuri.
Principiile ralizarii schemelor logice:
orice schema logica incepe cu blocul START
dupa START, daca e necesar si daca sunt date de intrare, se citesc
datele de intrare.
Dupa terminarea activitatii unui bloc de prelucrare, incepe activitatea
blocului imediat urmator.
Dupa terminarea activitatii unui bloc de decizie isi incepe activitatea
blocul conectat la iesirea corespunzatoare conditiei adevarate, in cazul
unui bloc simplu, cu doua iesiri, se executa blocul conectat la DA daca
este adevarata conditia specificata si blocul conectat la NU in caz
contrar.
Schema logica isi inceteaza activitatea la blocul STOP.
Schemele logice pot aparea, functie de gradul lor de dificultate, fiind:
scheme logice simple
scheme logice ramificate
scheme loice cu cicluri
scheme logice cu cicluri ierarhizate
CAPITOLUL 6
Structuri fundamentale ale algoritmilor
Structura secvenţialã sau liniarã desemneazã una sau mai multe
operaţii ce se executã una dupã cealaltã, în mod liniar
(secvenţial).
Structura alternativãdesemneazã execuţia unei secvenţe de operaţii
S1 sau a alteia S2, în funcţie de îndeplinirea sau nu a unei
condiţii.
Structurile alternative sunt de mai multe tipuri:
Structura IF – THEN – ELSE, selecteazã succesiunea operaţiilor ce
urmeazã a fi executate, funcÅ£ie de valoarea logicã de ,,adevãrâ€Â
sau ,,fals†pe care o are în momentul respectiv condiţia
specificatã. Dacã este adevãratã condiţia se urmeazã calea
specificatã de ramura DA, altfel se urmeazã calea NU.
Blocul are deci o intrare şi douã ieşiri, corespunzãtoare celor
douã valori logice posibile pentru o expresie logicã (Adevarat şi
fals, Da ÅŸi Nu)
Structura IF – THEN numitã şi selecţia simplã, este practic o
formã particularã a selecţiei IF – THEN – ELSE, în care blocul
de pe ramura Nu este vid.
În mod asemãnãtor se poate construi şi selecţia IF – ELSE, cu
precizarea cã în acest caz blocul vid va fi cel de pe ramura Da.
Practic, în ambele forme particulare, se testeazã condiţia logicã
şi se specificã doar succesiunea de operaţii ce trebuie efectuate pe
una dintre ramuri. Pe ramura cu bloc vid nu se executã nimic.
Structura CASE – OF selecteazãuna dintre mai multe ramuri, în
funcţie de valoarea unui selector. De aceea structura de acest tip se
mai numeşte selecţie multiplã.
Structura repetitivã sau iteraţia indicã repetarea unei operaţii sau
secvenţe de operaţii S, atâta timp cât este îndeplinitã o anumitã
conditie.
În funcţie de momentul în care se face testarea condiţiei
specificate, structurile repetitive sunt de mai multe tipuri:
Condiţia poate fi testatã anterior execuţiei secvenţei de comenzi S
şi atunci avem o structurã de tip WHILE – DO
Condiţia se testeazã posterior execuţiei secvenţei de comenzi S şi
atunci avem o structurã de tip DO – UNTIL
Structura repetitivã mai poate fi analizatã şi din punct de vedere al
numãrului de reluãri. Din acest punct de vedere, o structurã poate
fi:
fãrã numãrãtor, cãci nu se cunoaşte de la început numãrul de
reluãri. Aşa este cazul structurii de tip WHILE, indiferent de tipul
ei.
cu numãrãtor, atunci când se ştie sau se poate calcula automat
numãrul de reluãri. Aşa e cazul structurii repetitive de tip DO –
FOR
Pentru a evita ciclarea la infinit a structurilor repetitive,
programatorul trebuie sã aigure negarea condiţiei pentru a permite
ieşirea din structurile WHILE – DO şi DO – UNTIL.
Se observã cã diferenţa esenţialã între cele douã structuri
constã în faptul cã DO – UNTIL executã S cel puţin o datã, în
timp ce WHILE – DO poate sã nu-l execute pe S deloc, dacã la
intrarea în structurã condiţia este deja falsã.
Programarea structuratã beneficiazã şi de un puternic suport teoretic
constând într-o construcşie de principii, termeni şi teoreme
matematice specifice.
Teorema de structurã Bohm şi Jacopini spune:
Orice schemã logicã este echivalentã cu o schemã logicã
structuratã
Dacã o organigramã cuprinde o mulţime F de acţiuni şi o mulţime P
de predicate, astfel încât organigrama sã fie structuratã şi sã
fie echivalentã cu cea iniţialã.
Corolarul ,,de sus în josâ€Â: Un program structurat este echivalent cu
un program scris sub una din urmãtoarele forme:
P=Secvenţial(f,g)
P=Alternativ(p,f,g)
P=Repetitiv(p,f)
Unde p este un predicat al lui P, iar f şi g sunt secvenţe
structuratesau funcţii ale programului.
Teorema de corectitudine:
Corectitudinea unui program structurat poate fi verificatã prin
examinarea fiecãrui nod din arborescenţa sa. Dacã fiecare nod se
verificã local, se spune cã programul structurat este corect.
CAPITOLUL 7
Evaluarea corectitudinii algoritmilor
Un program realizat trebuie sã fie corect, clar, sigur în
funcţionare, uşor de modificat, portabil, eficient, însoţit de o
documentaţie corespunzãtoare. Existã numeroase tehnici de verificare
şi validare a algoritmilor, adresate în general practicienilor, dar
şi uşor accesibile unui începãtor în programare.
Dintre acestea amintim:
testarea programelor ÅŸi depanarea programelor
verificarea formalizatã a programelor
cea mai slabã precondiţie
cea mai tare postcondiţie
instrucţiuni generalizate
sintaxa expresiilor logice
Acţiunea de testare a programelor se deosebeşte de celelalte faze prin
care trec acestea (proiectare, programare, documentaţie, etc.) prin
caracterul ei în aparenţã “demolatorâ€Â. Astfel, în timp ce alte
faze au o esenţã constructivã, testarea are în aparenţã un
caracter distructiv, deoarece scopul ei este de a pune în evidenţã
proasta funcţionare a programului, de a gãsi hibele aeestuia şi nu
pãrţile sale bune. Din punct de vedere psihologic, programatorul
însuşi trebuie sã adopte în aceastã etapã 0 atitudine
“duşmãnoasã†faţã de propriul program, pentru a putea gãsi
defectele acestuia,
Analizând problema mai atent, realizãm de fapt cã scopul testãrii
este în realitate tot constructiv, acela de a pune în funcţiune un
program care sã funcţioneze la parametri prevãzuţi.
Se ştie cã, într-un algoritm de calcul şi deci, într-un program,
este oricând posibilã prezenţa unei/unor erori, oricât de precisä
şi laborioasã ar fi metodologia de elaborare. Proeesul de detectare
şi apoi de eliminare a erorilor unui algoritm/program are douã
componente, numite:
• verificare
• validare
Aceste douàaetivitãţi ar trebui sã earacterizeze practic toate
etapele prin care trece un program, de la formularea cerinţei de
rezolvare a unei probleme, la analiza acesteia, la identificarea ÅŸi
apoi descrierea algoritmului de rezolvare a problemei, a codificãrii
datelor şi validarea rezultatelor obţinute.
Aceasta deoarece tot mai mulţi specia1işti din diferite domenii aratã
cã aceastã activitate de testare şi validare nu este specificã doar
activitäţii de programare, ci se întâ1neşte pretutindeni, acolo
unde se produce sau construieşte ceva; existã în acest sens controale
efectuate la nivelul fiecärei operaţii sau grup de operaţii, dupã
cum existã şi un control final, produsului finit, pentru realizarea
recepţiei lui finale.
ÃŽn acest sens, activitatea de verificare ÅŸi validare a unui produs
program urmãreşte în principal, urmàtoarele:
• descoperirea defectelor programului
• certificarea faptului cã programul va funcţiona
corect în condiţii de exploatare curentã.
Testarea programului rãmâne metoda de bazã pentru verificarea
corectitudinii unui program, succesul ei fiind condiţionat în primul
rând de experienţa programatorului, de complexitatea şi
completitudinea setului de date folosite în procesul testãrii, de
analiza riguroasã, atentã a rezultatelor obţinute în urma fiecãrui
test.
Prin testarea programului se înţelege deci executarea programului
respectiv cu scopul de a descoperi o anomalie sau eroare. Ea se bazeazã
pe construirea unor eşantioane de date de intrare care sã conducã la
depistarea unor erori în functionarea programului, într-un timp cât
mai scurt şi cu efort cât mai mic.
Practic, pornind de la niÅŸte date de test construite de el,
programatorul aşteaptã sã obţinã la final sau pe parcurs, anumite
rezultate. Dacä acestea sunt corecte, complete sau în formatul
aşteptat avem cel putin o eroare în execuţia programuiui. Putem spune
cã succesul testãrii depinde de “arta†programatorului de a-şi
construi setul de date de test.
Trebuie sä precizãm insã faptul cã relevanţa testului depinde de
numãrul eşantioane1or de date de test, dar mai ales de calitatea
datelor alese. În acest sens, au apãrut, în ultimul timp, o serie de
metode de elaborare a datelor de test, care ajutã programatorul,
oferindu-i posibilitatea de a aborda sistematic activitatea de testare a
programelor, cu o probabilitate crescutã de depistare a erorilor.
Aceste metode pot fi denumite:
• testarea funcţionalã sau metoda cutiei negre, care presupune
construirea datelor de test astfel încât sã permita testarea
fiecãrei funcţiuni a programului;
• testarea structuralã sau rnetoda cutiei transparente, care
presupune construirea datelor de test astfel încât toate pãrţile
programului sã poatã fi testate.
Succesul activitãţii de testare constã deci în conceperea unor date
de intrare prin prelucrarea cãrora defectele algoritmului şi deci şi
a programului sã fie puse în evidenţã prin observarea şi analiza
rezultatelor obţinute.
De aceea el este în mare mãsura dependent de experienţa şi
îndemânarea programatorului, de abilitatea lui de a-şi construi
datele de test cât mai complete, complexe, cuprinzãtoare din punct de
vedere al situaţiilor sau valorilor de excepţie ce pot apare în
execuţia curectã a programului.
Testarea unui program trebuie sã se finalizeze, pentru a fi utilã, cu
semnalarea erorii ÅŸi localizarea ei. De aceea, testarea programului
este urmatã de depanarea lui.
Depanarea unui program constã în localizarea erorii, determinarea
naturii sale şi corectitudinea ei. Ea se poate face în mod:
sttic, dupã executarea programului
dinamic, în timpul execuţiei acestuia
Depanarea simbolicã, o altã metodã de depanare, este mai uşor de
utilizat, deoarece oferã posibilitatea de a urmãri executarea
programului la nivel de limbaj sursã. Limbajele de programare oferã,
în ultimile lor versiuni, un depanator simbolic integrat, care permite
depanarea uşoarã, plãcutã şi eficientã a programelor prin
urmãtoarele operaţii:
• executarea pas cu pas a programului (un pas inseamnã de fapt o
instrucţiune executabilã);
• observarea, în timpul execuţiei, a valorilor unor variabile sau
expresii specificate de programator (care apar într-o fereasträ
specialã - Watch Window);
• specificarea unor puncte de suspendare a execuţiei programului;
• modificarea valorilor unor variabile.
-
(
*
D
-
"
$
&
(
*
D
F
à ¨€&䘋0æ‘§ä°®ÂÂá €D
F
h
j
â€Â
˜
¨
¬
®
²
þ
à ¨€&䘋
æ‘§á¶¡Â†à ¨€&䘋
à ¨€&䘋
à ¨Â氃愀öᄌ
h
N
Â
Ã¢ÂÆ’à ´ƒ×†Ä€ÆŒá„€Ã‚„ሂï¤þ㄀$â·㠀$⑈怀„愂̤摧⸫¿ሀgurã
parcurgerea elementelor unui vector. Aceasta trebuie iniţializatã cu
poziţia primului element din şir care trebuie prelucrat şi apoi
testatä şi comparatã valoarea ei cu cea finalã. Deasemenea, expresia
care stabileşte dacã un ciclu se executã sau nu trebuie astfel
formulatã sau initializatã încât sã asigure sau nu prima execuţie,
aşa cum necesitã algoritmul de prelucrare descris. În acest sens,
trebuie sã facem precizarea cä adeseori, suntem nevoiţi sã facem
noi, prin program, iniţializarea variabilei care controleazã execuţia
ciclului, pentru a asigura execuţia lui pentru prima datã. Este vorba
de ciclul cu testarea iniţialã a condiţiei, la care reluarea
ulterioarã va fi hotãrâtã de valoarea pe care respectiva variabilã
o primeşte, în timpul execuţiei programului, în cadrul ciclului.
Deci, ciclul cu testarea iniţialã a condiţiei trebuie sã fie bine
analizat, verificat ÅŸi testat din punctul de vedere al expresiei care-i
controleazã reluarea.
Practica a dovedit, în timp, cã oricât de numeroase ar fi testele
efectuate asupra unor programe foarte complexe, ele nu pot garanta
funcţionarea corectã a acestora. Ele rãmân deosebit de utile pentru
semnalarea multora dintre erori ÅŸi deasemenea pentru familiarizarea
programatorului cu algoritmul, cu modul sãu de lucru.
Proprietatea P se numeşte precondiţie sau proprietate finalã, iar
proprietatea Q postcondiţie san proprietate finalã.
Practica a dovedit cä existã situaţii când pentru un algoritm A şi
o postcondiţie datã, nu intereseazã o precondiţie oarecare, ci se
cautã “ cea mai bunã†precondiţie care rezolvã algoritmul dat.
Fie secvenţa de comenzi, care calculeazã factorialul unui numãr >=2:
(n>=2)
f:=1;
i:=1;
while i
=1). Deci, precondiţia n>=2 poate fi inlocuitã cu
n>=1 care se considerä o precondiţie mai bunã, care descrie o
mulţime de date iniţiale mai cuprinzãtoare, obtinutã prin adãugarea
valorii 1.
O analizã mai atentã a algoritmului aratã cã precondiţia n>=1 poate
fi inlocuitã cu n>0 consideratä o precondiţie mai bunã, care atestã
capacitatea algoritmului de a calcula factorialul oricãrui numãr
natural, mulţimea datelor initiale fiind din nou mãritã prin
adãugarea valorii 0 (0!=1).
CAPITOLUL 8
Limbaje de programare
Un limbaj de programare este un ansamblu de simboluri, cuvinte,
instrucţiuni şi semnificaţii atribuite acestora, utilizat pentru
descrierea algoritmilor. Limbajul de programare este astfel un mijloc
prin care programatorul comunicã cu calculatorul.
Programul este o succesiune de intrucţiuni aparţinând unui limbaj de
programare, prin care se descriu operaţiile la care sunt supuse datele
şi ordinea de execuţie a acestora, pentru rezolvarea automatã a unei
probleme date. Un program reprezintã o alta modalitate de descriere a
unui algoritm de rezolvare a unei probleme date.
Pentru a înlãtura acest mare dezavantaj au apãrut limbajele simbolice
ÅŸi apoi limbajele de programare evoluate care prin intermediul
ansambloarelor ÅŸi compilatoarelor de care dispun, permit traducerea
automatã a instrucţiunilor scrise într-un limbaj apropiat de limbajul
curent de limbajul binar. Limbajele de programare reprezinta
principalele mijloace de comunicare om-masina, evolutia lor fiind
nemijlocit legatã de cea a calculatoarelor electronice, a caror era a
inceput prin anii 1944.
Dintre limbajele de programare evoluate utilizate pe toata gama
sistemelor de calcul menţionãm:
Basic
Algol
Fortram
Cobol
Pascal
C
PL/1
În ultimul timp s-au impus tot mai multe limbaje de inteligenţã
artificialã şi sisteme expert cum sunt:
C++
Lisp
Prolog
precum ÅŸi programarea pe obiecte ( Basic, C, etc. ).
Orice limbaj de programare presupune definirea urmatoarelor elemente
componente:
alfabetul
vocabularul
gramatica
punctuatia
semantica
Rezultatul activitãţii de programare îl constituie programul scris ca
text într-un limbaj de programare. Un astfel de program se numeşte
program sursa. El este scris printr-un editor de texte acceptat de
limbajul de programare respectiv.
Fiind scris ca format text, programul sursã nu este înţeles de cãtre
ÅŸistemul electronic de calcul. Pentru aceasta este necesara traducerea
lui intr-un cod intern, accesibil calculatorului. Aceastã operaţie se
realizeazã cu un program translator numit compilator. Compilatorul este
componenta software care realizeazã traducerea programului sursa în
cod intern, rezultand aÅŸa numitul program cod obiect. Lucrul cu un
anumit limbaj de programare presupune existenta compilatorului pentru
acel limbaj. Ansamblul format din limbajul de programare ÅŸi programul
translator asociat, formeaza sistemul de programare.
Limbajul de programare pascal face parte din categoria limbajelor de
programare evoluate de nivel inalt. Un program structurat este
constituit din unitati functionale bine definite, ierarhizate conform
naturii specifice a problemei de rezolvat. ÃŽn interiorul unei astfel de
unitati functionale, structurarea se manifesta atât la nivelul
operaţiilor de executat cât şi la cel al datelor de prelucrat.
Programarea structurata este o metoda independenta de limbajul de
programare utilizat. Limbajul Pascal include conceptele programarii
structurate în ambele sensuri ale efortului de abstractizare presupus
de realizarea unui program: ogranizarea datelor ÅŸi conceperea
succesiunii de operaţii.Limbajul Pascal a fost implementat pânã în
prezent pe o mare varietate de calculatoare, având un inalt grad de
portabilitate comparativ cu implementarea altor limbaje de programare.
Un program reprezintã o mulţime ordonatã de instrucţiuni, asociatã
unui algoritm de rezolvare a unei probleme care comandã operaţiile de
prelucrare a datelor.
Instrucţiunea reprezintã exprimarea intr-o forma riguroasa a unei
operatii şi precizeaza functia şi adresele operanzilor.Relaţia dintre
cele 3 elemente: algoritm, limbaj şi program poate fi exprimatã
astfel:
Blocul executabil constituie lanţul de instructiuni prin care este
codificat programul în limbajul pascal, deci prin care se descrie
algoritmul de prelucrare. Acestea sunt cuprinse între Begin şi End.
Este interzis sa dam nume diverselor obiecte care sa coincida cu acele
cuvinte rezervate. ÃŽn partea declarativa orice declaratie careia nu i
se asociaza obiectele legate de programul în cauza se poate omite.
Toate obiectele manipulate în pascal poarta un nume. Acest nume se
numeste identificator. Identificatorii sunt denumiri prin care se
desemneaza datele, procedurile, functiile, programele.
Un tip de date reprezintã setul de valori pe care le poate lua
elementul respectiv, împreunã cu mulţimea operaţiilor care se aplica
asupra acestora. Orice variabila utilizata în program trebuie sa
apartina unui tip. Tipul de date poate fi: predefinit ÅŸi construit pe
baza celor predefinite.
Din punct de vedere al posibilitatii de modificare a valorii în faza de
executie a programului, datele se pot clasifica în:
date variabile
date constante
Tipurile intregi de date sunt:
Byte
Word
Shortint
Integer
Longint
Tipul real reprezintã un numãr real cuprins între douã limite care
diferã de la un compilator la altul şi de la un tip la altul.
Astfel tipurile reale pot fi:
real
single
double
extended
comp
Funcţiile SUCC şi PRED nu functioneazã, tipul REAL nefiind ordinal.
Tipul Caracter ( CHAR )
O variabilã de tip caracter poate avea drept valoare un caracter. O
constanta de tip caracter poate fi:
`a` `:` literele mari au alte valori decat cele mici
x:char se reprezinta în memorie pe un octet, adica 255 coduri.
x:=`a` sau x:=a
Existã funcţii care permit trecerea de la caracter la codul ASCII şi
invers.
CHR ( cod ) este o funcţie care intoarce ca rezultat caracterul
respectiv.
x:=chr(64)
ORD ( caracter ) este o funcţie care intoarce codul ASCII al
caracterului respectiv.
Tipul Boolean este un tip ordinal, enumerativ, care ocupã un octet
memorie ÅŸi poate lua 2 valori logice: adevarat ÅŸi fals.
Declaraţia de tip se face :
Type boolean = ( True, False )
Tipul Declarat ( Enumerativ ) este definit de utilizator ca o lista
ordonatã, prin enumerarea valorilor posibile astfel:
TYPE identif tip = ( lista elemente )
TYPE zi-sapt= ( luni, marti, ... , duminica )
Tipul Subdomeniu se mai numeste tip interval ÅŸi se defineste ca
submultime a unui tip ordinal prin precizarea intervalului inchis de
valori. Toate caracteristicile tipului parinte ( Integer , Char ) se
regasesc în tipul subdomeniului, singura deosebire dintre ele constand
în multimea valorilor pe care le poate lua.
Declararea constantelor:
CONST ident = valoare;
Pot fi numai de tip standard ( scalar ) şi se declarã în sectiunea
CONST
Valoarea constantei nu poate fi modificatã în timpul
rulãrii programelor.
Orice încercare de a atribui constantelor o valoare, chiar
dacã este egalã cu cea iniţialã, va genera un mesaj de eroare.
Se asigurã astfel protecţia valorilor.
Declaraţia de tip
TYPE Identif_tip=definiţie tip;
Declaraţia de variabile
Var identif var: spaţiu tip var
Dacã sunt mai multe variabile de acelasi tip, se inşirã separate cu
`,`
Declaraţia de funcţii şi proceduri
function nume_funcţie (declaraţie de var): tip rez;
function fact (n: integer):integer;
Mai multe variabile se separã prin `;`
Instrucţiuni pascal: Limbajul pascal este puternic orientat spre
programarea structuratã, fiind conceput astfel încât sa implementeze
corect conceptele proiectãrii şi realizãrii structurate şi
modularizate a programelor. Progamul scris într-un limbaj de programare
evoluat deci în pascal, se numeste progream sursã.
Instrucţiuni simple:
de atribuire
apeluri de procedura
instrucţiunea de salt necondiţionat(goto)
instrucţiunea vidã
Instrucţiuni simple
Prin instructiuni simple se realizeazã o mare parte din operatiile de
bazã a algoritmilor de prelucrare. Instructiunea vidã descrie
acţiunea vidã, ea este definitã prin lipsa în contextul unor
construcţii pascal, fãrã a avea o mnemonica explicitã.
Se prezintã ca o linie goala urmatã de `;`
i:=1 ; 2 instrucţiuni vide
If x>0 then
x:=x+1
else;
Instrucţiunea de atribuire evalueazã o expresie şi atribuie
rezultatul obtinut unei variabile sau functii.
Are formatul general:
Identificator:=valoare;
Prioritatea operanzilor în Pascal:
NOT
* / DIV MOD AND
+ - OR ( *, +, -, pe multimi )
= , > , < ,<= , >= , <> , ÅŸi operatori relationali pe multimi
Expresii logice sunt cele care în urma evaluarii produc un rezultat
logic de TRUE sau FALSE ( Boolean ). Ele se prezintã fie sub forma unor
condiţii simple, fie sub forma unor conditii compuse, formate din mai
multe conditii simple legate prin operatorii logici: AND, OR, NOT.
Dacã nu suntem siguri de prioritatea anumitor operator