Sunteți pe pagina 1din 22

MinisterulEducaiei al Republicii Moldova Universitatea Tehnic a Moldovei Facultatea Calculatoare, Informatic i Microelectronic

Proiect de Curs
Disciplina:SDA
Tema:AplicatiaPrognozaMeteo.

(Varianta nr.1)

Aefectuat:St.gr.AI-111 Sainsus Mihai A verificat:Prof. Stefan Marin

2013
1

Sarcina tezei de an la disciplina Structuri de Date i Algoritmi

Studentul grupei AI-111 (Nume, prenume) Tema : Aplicaia Prognoza Meteo_

Sainsus Mihai______

Sarcina tezei de an la disciplina Structuri de Date i Algoritmi................................................................2 Cuprins........................................................................................................................................................3 Introducere..................................................................................................................................................4 Notiuni Introductive...................................................................................................................................4 1.1. Istoria apariiei limajului de programare C..........................................................................................7 1.2. Tipuri de date.......................................................................................................................................9 1.3. Alocarea memoriei.............................................................................................................................10 1.4. Sintaxa limbajului C..........................................................................................................................11 1.5. Standartizarea limbajului C................................................................................................................11 1.6. Apariia limbajului C++.....................................................................................................................12 Descrierea sarcinei.....................................................................................................................................14 Listingul programului................................................................................................................................14 Scheme logice...........................................................................................................................................19 Bibliografia................................................................................................................................................21

Semntura studentului_______________

Conductorul

TEFAN Marin

Cuprins
Sarcina2 Sarcina tezei de an la disciplina Structuri de Date i Algoritmi................................................................2 Cuprins........................................................................................................................................................3 Introducere..................................................................................................................................................4 Notiuni Introductive...................................................................................................................................4 1.1. Istoria apariiei limajului de programare C..........................................................................................7 1.2. Tipuri de date.......................................................................................................................................9 1.3. Alocarea memoriei.............................................................................................................................10 1.4. Sintaxa limbajului C..........................................................................................................................11 1.5. Standartizarea limbajului C................................................................................................................11 1.6. Apariia limbajului C++.....................................................................................................................12 Descrierea sarcinei.....................................................................................................................................14 Listingul programului................................................................................................................................14 Scheme logice...........................................................................................................................................19 Bibliografia................................................................................................................................................21 Bibliografie..21

Introducere
Notiuni Introductive
n a doua jumtate a secolului al XIX-lea, observaii meteorologice regulate, dei cuprinznd arii reduse, au fost fcute de ctre chimistul Petru Poni la Iai. Au urmat o serie de observaii efectuate de intelectuali pasionai, care au neles rolul informaiilor meteorologice pentru economie. Astfel, au fost consemnate observaii meteorologice n Bucureti (ncepnd cu 1773), Sibiu (din 1789), la Cluj (din 1833), la Sulina (ncepnd cu 1857), la Giurgiu (ncepnd cu 1863), la Timioara (ncepnd cu 1874), la Galai i la Brila (ncepnd cu 1878). La 18/30 iunie 1884, tefan Hepites pune bazele Serviciului Meteorologic al Romniei, devenind una dintre cele mai vechi instituii cu caracter tiinific din ar. n acelai an, la iniiativa lui tefan Hepites, Romnia, mpreun cu alte ri, pune bazele Organizaiei Meteorologice Mondiale (World Meteorological Organization - WMO). n anul 1889 este nfiinat Serviciul de Msuri i Greuti, iar mai trziu a fost deschis i o secie de magnetism terestru i seismologie. De-a lungul timpului, personaliti de seama ca Prof. Poenaru, Prof. I. Pangrati, T. Stamate, Dr. Carol Davila, Dr. Barasch, Eric Otetelisanu, Nicolae Topor,Andrei Doneaud, N. Beleag au contribuit la progresul meteorologiei. n cadrul Conferinei Comitetului Internaional de Meteorologie, care s-a desfurat la Munchen (1891), tefan Hepites a fost ales membru al consiliului. n 1900, Serviciul Meteorologic al Romniei primete medalia de argint i Diploma de onoare la Expoziia Internaional de la Paris, iar n anul 1903 i se decerneaz medalia de aur. Anul 1908 aduce o schimbare n structura serviciiului, acesta fiind integrat n Observatorul Astronomic i Meteorologic, sub autoritatea Ministerului Instruciunii Publice. Din 1915, staiile meteorologice militare ncep efectuarea sistematic a sondrii atmosferei cu balon pilot, iar n anul 1920 este constitut Institutul Meteorologic Central n cadrul Ministerului Agriculturii i Domeniilor, prin desprirea de Observatorul Astronomic. n 1924, activitile de seismologie i magnetism terestru sunt separate de Institutul de Meteorologie, acesta trecnd la Ministerul de Rzboi pe lng Direcia Superioar a Aeronauticii, iar la 1 ianuarie 1925 s-a nfiinat Serviciul sinpotic de prevedere a timpului. n 1930 se construiete lng Aeroportul Bneasa primul Observator Meteorologic, care, ntre altele, devine i centru de formare profesional. Institutul meteorologic revine n administrarea Ministerul Agriculturii i Domeniilor. ase ani mai trziu se organizeaz reeaua de observaii sinoptice de stat cu personal bugetizat i, prin aceasta, ncepe sistematizarea sistemului meteorologic naional. Sunt deschise centre regionale de prognoz, primul fiind deschis la Constana, fiind urmat de cele din Bucureti Bneasa, Cluj i Iai. Din anul 1942, la Aeroportul Bneasa se ncepe activitatea de radiosondaj, folosindu-se radiosondele de tip LANG, iar n 1946, Nicolae Topor prezint primele prognoze de lung i foarte lung durat. Conform conveniei de la Washington din anul 1947, Romnia i-a schimbat statutul de membru fondator cu cea de membru cu drepturi depline al Organizaiei de Meteorologie Mondiale. ntre anii 1949 i 1950 se deschide, la Afumai, Observatorul de Fizic Atmosferic, aflat sub conducerea profesorului Mircea Herovanu, deasemenea se aprob prima program
4

analitic n domeniul meteorologiei la Facultatea de Fizic din cadrul Universitii Bucureti. n anul 1951 a fost nfiinat Direcia General Hidrometeorologic, aceasta incluznd att Institutul Meteorologic Central, ct i Sectorul Hidrologic. n 1951, Direcia General Hidrometeorologic coordona o reea meteorologic ce cuprindea 102 staii sinoptice, 230 staii climatologice, 1665 posturi pluviometrice i 250 posturi fenologice. Din 1945, sistemul de transmitere a informaiilor din interorul reelei trece la unsistem modern. Astfel se renun la comunicaiile prin telegraf care utilizau alfabetul Morse, la transmiterea prognozelor prin teleimprimatoare. n urma reglementrilor OMM, din anul 1959 se ncepe efectuarea msurtorilor aerologice la 4 termene de observaii standard, iar din 1960 se implementeaz o metod grafo-analitic de calcul numeric al hrii probabile pe 24 de ore pentru nivelul de 500 hPa. n 1961, se d n folosin prima staie meteorologic automat, instalat la Staia Meteo de pe vf. Cozia (Ciuha Mare) (1668 m). Din 1961, sediul Institutului Metorologic se alf pe os.BucuretiPloieti nr. 97. Tot atunci s-au pus bazele primului sistem de comunicaii prin utilizareatelexului. n 1962, Institutul de Meteorologie ncepe s fac msurtori ale radioactivitii i ale calitii aerului. n 1967 s-a dat n folosin primul radar meteorologic, la Bucureti, i au mai fost deschise nc 2 staii meteorologice automate, fiind amplasate pe vf. Parngul Mic (2075 m) i vf. Pietrosul Rodnei (2305 m). n anul 1970 a fost inaugurat la Bucureti prima staie de recepie a datelor furnizate de sateliii meteorologici, la eveniment asistnd D. A. Davis, secretarul General al OMM. n 1973, n zona viticol Drgani, se fac primele experimentri n ncercarea combaterii grindinei.n anul 1977, IMH (Institutul de Meteorologie i Hidrologie) se conecteaz la Sistemul Global de Telecomunicaii Meteorologice al OMM, fapt datorat utilizrii n premier a microcalculatoarelor specializate. Din 1980, IMH se implic n proiectul de cercetare a ozonului atmosferic, proiect iniiat de OMM, iar pentru aceasta se utiliza spectrofotometrul Dobson. n 1982 a fost deschis Centrul de Calcul Electronic, dotat cu primul calculator romnesc dedicat meteorologiei, denumit Felix C. n acelai an, au fost inaugurate primele reele automate (600/1200 bps) cu instituiile meteorologice din Belgrad,Budapesta, Moscova i Sofia. n anul 1988 a fost dat in funciune radarul meteorologic MRL-5 i se fac primele tentative de digitalizare a datelor i de folosire a acestora n scopuri nowcasting, prin sincronizarea cu datele furnizate de sateliiimeteorologici. n 1990, Institutul Meteo France propune o colaborare cu rile din Europa Central i de Est (proiectul ALADIN - Aire Limite Adaptation dynamique Dveloppement InterNational) n domeniul prevederii numerice a vremii, cu scopul de a dezvolta un model numeric de prevedere a vremii, care s fie integrat pe domenii mici, la rezoluii nalte. Din 1992, IMH a fost transferat n administrarea Regiei Autonome Apele Romne, schimbandu-i denumirea n Institutul Naional de Meteorologie i Hidrologie (INMH). Din 1997, modelul ALADIN devine operaional, iar n 1998 ia start programul de automatizare a sistemului naional de comunicaii meteorologice, fiind instalat primul sistem de comutare de mesaje MESSIR-COM dar i prin sistemul automatizat de vizualizare a datelor meteorologice MESSIR-VISION. n 2000, la Bucureti i Craiova sunt date n exploatare dou radare meteorologice de tip Doppler (n banda C) i sunt instalate primele 12 staii meteorologice automate. n acelai an se implemeteaz i se d n exploatare Sistemul de Gestiune a Bazelor de Date Relaionale ORACLE, sistem menit s nlocuiasc Sistemul Naional de Gestiune a Bazelor de Date Meteorologice (la care s-au folosit produsele infomatice dBASE i FOXPRO). Dup desprinderea de INMH a activitii de hidrologie, n 2003 se finalizeaz proiectul SIMIN, care a urmrit n prim faz modernizarea infrastructurii de meteorologie ce cuprindea 60 de staii automate, o reea de detecie a fulgerelor i 5 staii meteo prevzute cu radare meteorologice de tip Doppler n band S. n 2004, Romnia devine membr EUMETSAT i ECMWF. Prin
5

Legea 216 din 24 martie 2004, ia natere Administraia Naional de Meteorologie (ANM), dat fiind reorganizarea companiei naionale Institutul Naional de Meteorologie, Hidrologie i Gospodrire a Apelor. Prognoz de scurt i medie durat Aceste prognoze se realizeaz de regul pentru un intervalul de la 1 la 7 zile, avnd la baz rezultatele obinute n urma unui set complex de ecuaii matematice care se nregistreaz n timp pornind de la starea iniial a atmosferei. Aceleai ecuaii matematice se pot utiliza n determinarea strii probabile pentru un interval de maxim 10 zile, utiliznd modele mai performante. n cazul prognozelor pentru un interval mai mare de 710 zile, erorile de prognozare sunt nsemnate, fapt pentru care nu pot fi luate n considerare. Prognoza de scurt i medie durat se stabilete n urma unei videoconferine zilnice, prin consultarea meteorologilor previzioniti, nu nainte de a fi parcurse n prealabil urmtoarele etape: analizarea evoluiei situaiei atmosferice la sol i la altitudine n ultimele 24 de ore n spaiul atlantico-european cu accent pe situaia curent; analizarea datele de sol i altitudine, imagini furnizate de satelii, radar, descrcri electrice (compararea acestora cu anticiprile din ziua precedent); analiza rezultatelor modelelor atmosferice globale i pe arie limitat disponibile la punctele de elaborare ale prognozei meteo (CNPM i cele 6 Servicii Regionale de Prognoz a Vremii) analiza rezultatelor procesrii statistice asupra rezultatelor modelelor, procesare care, folosind irurile lungi de date de la staiile meteorologice de suprafa, realizeaz o corecie, de regul pozitiv, a rezultatelor modelelor.

Acest tip de prognoz urmrete prezentarea strii vremii la nivel naional i regional (Muntenia, Oltenia, Dobrogea, Moldova, Transilvania de nord, Transilvania de sud, Banat, Criana), existnd posibilitatea ca aria de prognozare s fie restrns putndu-se prezenta situaiei la nivelul litoralului romnesc, la nivel montan sau de jude. Prognoza de foarte scurt durat Prognoz meteorologic de foarte scurt durat se realizeaz pentru intervale mici de 12 ore pn la 23 ore de unde se ncepe prognoza imediat (nowcasting). Informaiile ce stau la baza acestor prognoze meteorologice sunt furnizate sistemului naional de radare i sistemul de detecie al fulgerelor, imaginile furnizate de sateliii meteorologici i informaiilor de la staiile automate de suprafa. Fenomenele meteorologice sunt permanent monitorizate de fiecare Serviciu Regional de Prognoz a Vremii i Colectivul de nowcasting, elabornd prognoze pe intervale sub 12 ore dar i avertizri privind cantiti mari de precipitaii, vijelie, grindin. Prognoza imediat Obiectivul principal al acestui model de prognoz meteorologic l reprezint furnizarea informaiilor despre apariia unui fenomen meteorologic ca trznetele, grindina, ploile abundente, intensificri ale vntului. Cantitatea informaional furnizat de prognoza imediat este condiionat de capacitatea de anticipare i detectare a fenomenului respectiv. Trznetele i tornadele sunt fenomene care se
6

pot anticipa cu numai cteva minute nainte ca acestea s se produc, cu toate acestea, apariia lor poate fi detectat n timp real cu ajutorul detectorilor de fulgere i a radarelor meteorologice. Prognoze imediate specializate pentru Sistemul Naional Antigrindin Pentru evitarea pagubelor produse de grindin, Romnia dezvolt un program de protecie a unor importante zone agricole din ar. Grupul de dezvoltare i aplicare Prognoze Specializate furnizeaz prognoze privind posibilitatea de formare a norilor purttori de grindin precum i date despre localizarea spaial a zonelor ce trebuie nsmnate. Astfel, Sistemul Naional Antigrindin (SNA) are ca scop combaterea grindinei prin mprtierea n atmosfer a unor substane (iodur de argint, substan despre care specialitii n protecia mediului spun c este nepoluant) care mpiedic formarea grelonelor de mari dimensiuni. Substanele sunt mprtiate cu ajutorul unor rachete grupate n baterii de 5%ndash;10 buci asigurnd protecia a aproximativ 150 000 ha. Costul unei rachete este de 250 dolari americani i sunt produse la fabrica Electromecanica SA, Ploieti.

1.1. Istoria apariiei limajului de programare C.


Limbajul "C" este un limbaj de programare care are o destinatie universala. El este utilizat in rezolvarea problemelor stiintifice si tehnico-ingineresti, in prelucrari de date, precum si in scrierea programelor de sistem. El a aparut in anul 1972. Autorul principal al limbajului este Dennis Ritchie de la firma BELL LABORATORIES. Limbajul C a aparut in legatura cu implementarea sistemului de operare UNIX pe minicalculatoarele firmei DEC, seria PDP-11. Justificarea pentru obinerea primului computer care a fost utilizat pentru dezvoltarea sistemului de operare Unix a fost acela de a crea un sistem pentru a automatiza completarea autorizaiilor. Prima versiune a sistemului de operare Unix a fost scris n limbaj de asamblare. Mai trziu, limbajul de programare C a fost folosit pentru a rescrie sitemul de operare. Sistemul de operare UNIX, compilatorul C si in esenta toate aplicatiile sub sistemul UNIX sunt scrise in C intr-o proportie mare. Astfel, din cele 13000 linii sursa ale sistemului de operare UNIX, numai 800 linii sunt scrise in limbaj de asamblare, restul fiind scrise in C. De asemenea, insasi compilatorul C este scris in C in proportie de 80%. In felul acesta limbajul C asigura o portabilitate buna pentru programele scrise in el. C a fost creat avnd drept scop important de a face ca programele mari s poat fi scrise mai uor i cu mai puine erori n paradigma programrii procedurale, dar fr a pune un obstacole n scrierea compilatorului de C, care este ncrcat de caracteristicile complexe ale limbajului. C are urmatoarele caracteristici importante: Este un limbaj de baz simplu, cu importante funcionaliti cum ar fi funciile matematice sau cele de manipulare ale fiierelor. Este focalizat pe paradigma programrii procedurale, care faciliteaz programarea ntr-un mod structurat. Utilizeaz un set simplu de tipuri de date ce mpiedic multe operaii neintenionate.

Folosete un limbaj preprocesor, preprocesorul C, pentru sarcini cum ar fi definirea de macrouri i includerea mai multor fiiere surs. Permite accesarea la nivel sczut a memoriei calculatorului prin utilizarea pointerilor. Permite folosirea parametrilor, care sunt comunicai funciilor prin valoare i nu prin referin. Pointeri la funcii, ce permit forme rudimentare de nchidere (englez closure) i polimorfism. Declararea variabilelor. Structuri de date sau tipuri de date agregate, definite de utilizator prin (struct), ce permit ca date nrudite s fie combinate i manipulate ca un ntreg.

Printre caracteristicile ce lipsesc n C, dar care pot fi gsite n alte limbaje de programare se enumer:

Un sistem automat de colectare a reziduurilor (de memorie). Clasele i obiectele (programarea orientat pe obiecte). Un sistem avansat de tipuri de date. Programarea generic. Suprancrcarea. Metaprogramarea. Suport nativ pentru programarea multifir (englez multithreaded) i funciile de reea. Procesarea listelor.

Dei lista minusurilor limbajului C este destul de lung, aceasta nu reprezint un dezavantaj suficient de mare pentru inhiba utilizarea limbajului C n practic, deoarece permite ca noi compilatoare s poat fi scrise pe noi tipuri de platforme i pentru c permite programatorului s in bine sub control programul pe care l scrie. Acesta este unul din motivele care face ca un cod scris n C s fie mult mai eficient dect dac ar fi scris n alte limbaje de programare. Numai un cod scris cu foarte mare grij ntr-un limbaj de asamblare poate fi mai performant, deoarece are control integral asupra mainii, dar performana avansat a compilatoarelor, combinat cu complexitatea noilor tipuri de procesoare, a fcut ca limbajul C s fie preferat i s fie acceptat din ce n ce mai mult de programatori.Una din consecinele acceptrii i eficienei C-ului este aceea c multe compilatoare, biblioteci i interpretoare ale limbajelor de nivel nalt sunt adesea implementate n C. In prezent limbajul C este implementat si sub alte sisteme de operare. Practic el este disponibil pe toate calculatoarele, incepand cu microcalculatoarele personale si terminand cu supercalculatoarele. Pe calculatoarele de tip IBM PC este implementata o varianta a limbajului C numita TURBO C.Aceasta varianta dispune de un mediu de programare menit sa ajute utilizatorul in scrierea si punerea la punct a programelor.De asemenea, pe acelasi tip de
8

calculatoare este implementata varianta quickC, care dispune si ea de un mediu de programare dezvoltat. C este un limbaj de programare standardizat, compilat, de nivel mediu. Este implementat pe majoritatea platformelor de calcul existente azi, i este cel mai popular limbaj de programare pentru scrierea de software de sistem. Este apreciat pentru eficiena codului obiect pe care l poate genera, i pentru portabilitatea sa.Compilatorul C ofera programatorului o flexibilitate mai mare in scrierea programelor decat alte limbaje de programare. El realizeaza un numar mai redus de controale la compilarea textului sursa. Din aceasta cauza programarea in limbajul C este mai expusa la erori decat programarea in alte limbaje, cum ar fi de exemplu, limbajul Pascal. C este prezentat uneori ca "asamblor portabil", fcndu-se astfel diferenele principale fa de limbajele de asamblare: codul unui program C poate fi compilat i rulat pe aproape orice tip de main (calculator), asemntor altor limbaje de programare, n timp ce limbajele de asamblare sunt specifice unui anumit model de main. Limbajul C aparine clasei limbajelor de nivel sczut sau de nivel mediu, aceasta indicnd strnsa legtur ntre interoperabilitate i echipamentul hardware.C este un limbaj de programare relativ minimalist ce opereaz n strns legtur cu hardware-ul, fiind cel mai apropiat de limbajul de asamblare fa de majoritatea celorlalte limbaje de programare. Limbajul C contine structurile proprii programarii structurate. Succesul ei s-a dovedit din plin odata cu aparitia limbajului Pascal. De asemenea, limbajul C dispune si de facilitati oferite de limbajele de asamblare, cum sunt lucrul pe biti si utilizarea adreselor. El este considerat ca fiind un intermediar intre limbajele de nivel inalt si cele de asamblare.

1.2. Tipuri de date.


C are un sistem de tipuri de date similar cu cel al descendenilor ALGOL, cum ar fi Pascal, dar totui cu anumite diferene. Cuprinde tipuri de date cum ar fi ntregi de diferite dimensiuni, cu sau fr semn, numere n virgul mobil, enumerri (enum), structuri de date (struct) i uniuni (union). C utilizeaz foarte mult pointerii, un tip de referin foarte simplu, care pstreaz adresa locaiei din memorie. Adresa poate fi manipulat cu ajutorul atribuirilor i a aritmeticii pointerilor. n momentul rulrii unui program, un pointer reprezint o adres de memorie. n momentul compilrii, un pointer este un tip de dat complex, ce reprezint att adresa de memorie ct i tipul de dat. Acest lucru permite expresiilor ce utilizeaz pointeri s fie evaluate dup tipul de dat. Pointerii au mai multe utilizri n C. De exemplu, irurile de caractere (englez text string) sunt adesea reprezentate printr-un pointer la un vector de caractere. Alocarea dinamic a memoriei este realizat tot cu ajutorul pointerilor. Un pointer null are o valoare rezervat, indicnd faptul c face referire la o locaie nevalid. Acest lucru este folositor n cazuri speciale cum ar fi pointerul next (urmtorul) n nodul final al unei liste nlnuite. Dereferenierea unui pointer null poate cauza un comportament imprevizibil al aplicaiei. De asemenea, exist i pointeri de tip void, fapt ce indic referirea la un obiect de tip necunoscut. Aceti pointeri sunt foarte folositori n programarea generic. Deoarece dimensiunea i tipul obiectelor la care acest tip de pointeri face referire sunt necunoscute, acetia nu pot fi derefereniai, dar pot fi convertii la alt tip de pointeri. n C, anterior standardului C99, tablourile (vectorii) sunt de dimensiune fix, static, cunoscut la momentul compilrii; n practic, acest lucru nu reprezint o piedic, avnd n vedere c se pot aloca blocuri de memorie n momentul rulrii, tratndu-le ca pe tablouri utiliznd librria standard. Spre deosebire de multe alte limbaje de programare, C reprezint
9

tablourile ca i pe pointeri: o adres i un tip de dat. Prin urmare, valorile index pot depi dimensiunea actual a unui tablou.De asemenea, C ofer posibilitatea de lucru cu tablouri multidimensionale. Din punct de vedere semantic, tablourile multidimensionale sunt tablouri de tablouri, dar, din punct de vedere fizic, acestea sunt stocate ca un singur tablou unidimensional cu un offset calculat. C este adesea folosit n programarea de nivel sczut, unde poate fi necesar ca un ntreg s fie tratat ca o adres de memorie, un numr n virgul mobil ca un ntreg sau un tip de pointer ca un alt tip de pointer. Pentru astfel de cazuri C ofer operatorul de casting, care foreaz explicit conversia unei valori dintr-un tip de dat n alt tip de dat

1.3. Alocarea memoriei.


Una din cele mai importante funcii ale unui limbaj de programare este ca acesta s furnizeze metode de management a memoriei i al obiectelor stocate n memorie. C furnizeaz trei metode distincte de alocare a memoriei pentru obiecte:

Alocarea static a memoriei: adresele i dimensiunile obiectelor ce fac uz de alocarea static a memoriei sunt fixate n momentul compilrii i pot fi plasate ntr-o zon de dimensiune fix ce corespunde unei seciuni din cadrul fiierului linkedidat final. Acest tip de alocare a memoriei se numete static deoarece locaia i dimensiunea lor nu variaz pe durata de execuie a programului. Alocarea automat a memoriei: obiectele temporare (variabilele locale declarate n cadrul unui bloc de cod) sunt stocate ncadrul de stiv asociat funciei apelate, iar spaiul alocat este automat eiberat i reutilizat dup ce s-a prsit blocul n care acestea au fost declarate. Alocarea dinamic a memoriei: blocuri de memorie de orice dimensiune pot fi alocate ntr-o zon de memorie numit heap prin intermediul funciilor malloc(), calloc() i realloc(). Aceste blocuri de memorie pot fi reutilizate dup ce zona de memorie a fost eliberat prin apelul funciei free(). Nu toate variabilele sunt automat alocate. Urmtoarele tipuri de variabil sunt alocate

static:

toate variabilele globale, indiferent dac au fost sau nu declarate ca statice; variabilele locale declarate explicit ca fiind statice.

Variabilele alocate static au alocat locaia lor de memorie i iniializat nainte ca funcia main s fie executat i nu sunt dealocate pn cnd se termin execuia funciei main. Variabilele alocate static nu sunt reiniializate la fiecare apel al funciei n cadrul crora au fost declarate. O variabil alocat static are avantajul c i pstreaz valoarea, chiar dac funciile care acceseaz acea valoare nu mai sunt active. Acolo unde este posibil, alocarea automat sau static este preferat deoarece alocarea memoriei este coordonat de compilator, nemaifiind nevoie ca programatorul s aloce iar apoi s elibereze memoria - operaie ce adesea genereaz erori. Totui, multe structuri de date sunt variabile n dimensini i deoarece alocarea automat i cea static trebuie s fie de dimensiune fix n momentul compilrii, sunt multe situaii n care alocarea dinamic trebuie folosit. Un exemplu ar fi tablourile de dimensiuni variabile.

10

1.4. Sintaxa limbajului C.


Spre deosebire de alte limbaje de programare cum ar fi Fortran 77, C-ul are o form liber, lsnd programatorul s-i organizeze codul folosind spaiile albe. Comentarii pot fi nserate oriunde n cadrul programului utiliznd delimitatorii /* i */. Fiecare fiier surs conine declaraii de variabile i definiii de funcii. Funciile, la rndul lor, conin alte declaraii de variabile i comenzi. Declaraiile de variabile fie definesc noi tipuri folosind cuvinte cheie precum struct, union i enum sau atribuind un tip de date predefinite, prin scrierea tipului de dat i urmat de numele variabilei. Cuvinte cheie precum char, int, precum i pointerul la unul din aceste tipuri * reprezint tipuri de date implementate nativ n C. Seciuni de cod sunt incluse ntre paranteze acolade ({ i }), pentru a indica pentru ce poriune a codului se aplic declaraiile de variabile i celelalte structuri de control. Comenzile execut aciuni cum ar fi cele de modificare ale valorii unei variabile sau afiarea unui text la consol. Structurile de control sunt variabile pentru execuii condiionale sau iteraii, realizate cu ajutorul cuvintelor rezervate if, else, switch, do, while i for. Salturi arbitrare sunt posibile prin folosirea cuvntului cheie goto. Cu ajutorul unei varieti de operatori implementai n C, se pot realiza operaii aritmetice, logice, comparative, pe bii, indexarea tablourilor i atribuiri. Comenzile pot de asemenea apela funcii, incluznd un numr mare de funcii din bibliotecile standard ale limbajului C, necesare pentru realizarea diferitelor sarcini cerute de programator.

1.5. Standartizarea limbajului C.


La sfritul anilor 1970, C a nceput s nlocuiasc limbajul BASIC devenind cel mai utilizat limbaj de programare. n anii 1980 a fost adoptat i de calculatoarele IBM PC, popularitatea acestuia ncepnd s creasc semnificativ. n acest timp, Bjarne Stroustrup mpreun cu ali colegi de la Bell Labs au nceput s adauge limbajului C caracteristici ale programrii orientate pe obiecte. Limbajul rezultat a fost denumit C++ i este cel mai popular limbaj de programare pe sistemele de operare Microsoft Windows; totui C-ul rmne cel mai popular limbaj de programare n Unix. Alt limbaj de programare dezvoltat n acea vreme se numete Objective-C care adaug de asemenea C-ului caracteristici ale programrii orientate pe obiecte. Dei nu la fel de popular ca C++, Obejective-C este folosit pentru dezvoltarea aplicaiilor pe ce folosesc interfaa Cocoa a sistemului de operare Mac OS X. n 1983, American National Standards Institute (ANSI) a format un comitet, X3J11, pentru a stabili specificaiile unui limbaj C standard. Dup un proces ndelungat, standardul a fost terminat n 1989 i ratificat ca ANSI X3.159-1989 "Programming Language C". Aceast versiune a limbajului ne este cunoscut sub numele ANSI C. n 1990, standardul ANSI C (cu mici modificri) a fost adoptat de International Organization for Standardization (ISO) ca ISO/IEC 9899:1990. Una din intele procesului de standardizare ANSI C a fost acela de a produce un superset al K&C R, ncorpornd multe dintre caracteristicile neoficiale introduse secvenial. Totui, comitetul pentru standardizare a introdus cteva caracteristici noi, cum ar fi prototipul funciilor (mprumutat din C++) i un preprocesor mult mai capabil. ANSI C este suportat de marea majoritate a compilatoarelor folosite astzi. Mare parte din codul C scris acum este bazat pe ANSI C. Orice program scris exclusiv n standardul C este garantat s funcioneze corect pe orice platform cu o implementare C conform. Totui, multe programe sunt scrise astfel nct aceste vor putea fi compilate numai pe anumite platforme, sau folosind un anumit compilator, deoarece (i) se folosesc biblioteci non-standard, de exemplu
11

pentru interfaa grafic, (ii) unele compilatoare ce nu respect standardul ANSI C, deci i urmaii lor n mod implicit sau (iii) bazarea pe dimensiunea unui anumit tip de date pe anumite platforme Dup procesul de standardizare ANSI, specificaiile limbajului de programare C au rmas nemodificate pentru o perioad, n timp ceC++ a continuat s evolueze. (Amendamentul Normativ I a creat o nou versiune a limbajului C n 1995, dar aceast versiune este prea puin cunoscut.) Totui, la sfritul anilor 1990, standardul a suferit o revizie, conducnd la publicarea standardului ISO 9899:1999 n anul 1999. Acest standard este cunoscut sub numele C99. A fost adoptat ca standard ANSI n martie 2000. Noile aspecte ale limbajului C includ: funcii inline variablele pot fi declarate oriunde n cadrul unui program (la fel ca i n C++) cteva noi tipuri de date, incluznd i long long int (pentru a reduce efortul legat de tranziia de la 32-bii la 64-bii), un tip explicit de date boolean i un tip complex de date reprezentnd numerele complexe tablourile de dimensiuni variabile suport pentru comentariile pe o singur linie, marcate la nceput de //, ca i n BCPL sau C++ i care au fost suportate de multe compilatoare ca o extensie a limbajului C noi funcii, cum ar fi snprintf() noi fiiere header, cum ar fi stdint.h

n ceea ce privete interesul n adoptarea noului standard C99, dac GCC i alte compilatoare suport noile caracteristici C99, compilatoarele celor de la Microsoft i Borland nu suport C99 i cele dou companii nu par interesate n a oferi nici un fel de suport.

1.6. Apariia limbajului C++.


Stroustrup a nceput s lucreze la C cu clase n 1979. Ideea crerii unui nou limbaj a venit din experiena de programare pentru pregtirea tezei sale de doctorat. Stroustrup a descoperit cSimula avea faciliti foarte utile pentru proiecte mari, ns era prea lent, n timp ce BCPL era rapid, ns nu era de nivel nalt i era nepotrivit pentru proiecte mari. Cnd a nceput s lucreze pentru Bell Labs, avea sarcina de a analiza nucleul UNIX referitor la calcul distribuit. Amintindu-i de experiena sa din perioada lucrrii de doctorat, Stroustrup a nceput s mbunteasc Ccu faciliti asemntoare Simula. C a fost ales deoarece era rapid i portabil. La nceput facilitile adaugate C-ului au fost clase, clase derivate, verificare a tipului, inline i argumente cu valori implicite. n timp ce Stroustrup a proiectat C cu clase (mai apoi C++), a scris de asemenea i Cfront, un compilator care genera cod surs C din cod C cu clase. Prima lansare comercial a fost n1985. n 1982, numele limbajului a fost schimbat de la C cu clase la C++. Au fost adaugate noi faciliti, inclusiv funcii virtuale, suprancrcarea operatorilor i a functiilor, referine, constante, alocare dinamic, un control al tipului mai puternic i noua variant de comentariu pe un singur rnd (liniile care ncep cu caracterele '//').
12

n 1985 a fost lansat prima ediie a crii "The C++ Programming Language" (Limbajul de programare C++), oferind informaii importante despre limbaj, care nc nu era un standard oficial. n 1989 a fost lansat versiunea 2.0 a C++. Au aprut acum motenirea multipl, clase abstracte, funcii statice, funcii constante i membri protected. n 1990 o alt carte a fost lansat, oferind suport pentru standarde viitoare. Ultimele adugri includeau template-uri, excepii, spaii de nume (namespace-uri) i tipul boolean. O dat cu evoluia limbajului C++, a evoluat i o bibliotec standard. Prima adugire a fost biblioteca de intrri/ieiri (I/O stream), care oferea faciliti pentru a nlocui funciile tradiionale C cum ar fi printf i scanf. Mai trziu, printre cele mai semnificative adugari la biblioteca standard a fost STL (Standard Template Library) (Biblioteca de formate standard). Dup ani de lucru, un comitet ANSI-ISO a standardizat C++ n 1998 (ISO/IEC 14882:1998). Limbajul de programare C++ a fost iniial derivat din C. Totui, nu absolut orice program scris n C este valid C++. Deoarece C i C++ au evoluat independent, au aprut, din nefericire, o serie de incompatibiliti ntre cele dou limbaje de programare. Cea mai ampl revizie a limbajui C, C99, a creat un numr suplimentar de conflicte. Diferenele fac s fie greu de scris programe i biblioteci care s fie compilate i s ruleze corect n calitate de cod C sau C++, i produce confuzii celor care programeaz n ambele limbaje. Diferenele fac ca fiecare din cele dou limbaje de programare s mprumute din caracteristicile celuilalt limbaj de programare. Bjarne Stroustrup, creatorul limbajului C++, a sugerat de nenumrate ori s se reduc incompatibilitile pe ct de mult posibil pentru a maximiza interoperabilitatea dintre cele dou limbaje de programare. Unii au argumentat c C i C++ sunt dou limbaje de programare distincte, compatibilitatea dintre ele fiind util dar nu vital; potrivit acestei opinii, eforturile de a reduce incompatibilitatea nu trebuie s reduc eforturile de a aduce elemente noi n mod independent celor dou limbaje de programare. Cele mai importante diferene sunt: inline funciile inline apar n seciunea de declarare a variabilelor globale n C+ +, iar in C acestea apar n aa zisele fiiere statice. Cuvntul cheie bool are n C99 propriul su header, <stdbool.h>. n variantele anterioare de C tipul de date boolean nu era definit, n schimb erau folosite o serie de metode (incompatibile) pentru a simula acest tip de date. Constantele caracter (cuprinse ntre apostrofuri) au dimensiunea unui int n C i char n C++. Cu alte cuvinte, n C,sizeof('a') == sizeof(int); n C++, sizeof('a') == sizeof(char). Chiar i n aceste condiii, valoarea acestui tip de constante nu va depi valoarea maxim ce poat fi pstrat de char, deci o conversie de genul (char)'a' este sigur. Cuvinte cheie suplimentare au fost introduse n C++, deci acestea nu pot fi folosite ca identificatori aa cum ar putea fi folosite n C. (de exemplu, code>try, catch, template, new, delete, ...) n C++, compilatorul creeaz automat o etichet pentru orice structur (struct), uniune (union) sau enumeraie (enum), astfel nct struct S {}; n C++ este echivalent cu typedef struct S {} S; n C.

C99 a adoptat unele funcionaliti ce au aprut iniial n C++. Printre acestea se enumer:
13

Declararea obligatorie a prototipului funciilor Cuvntul cheie inline Eliminarea variabilei implicite int ca valoare de ntoarcere.

Descrierea sarcinei.
Pe baza unor informatii culese de senzori se va dezvolta un sistem care sa modeleze si sa prognozeze viteza vintului pe termen scurt,mediu sau lung.Datele folosite pentru elaborarea prognozei se vor pastra intr-un fisier.

Listingul programului.
Main.cpp
In fisierul dat noi creat functiile care prelucreaza informatia si care executa toate operatiile asupra datelor, precum citirea datelor din fisier si calcularea acestora.
#include<iostream> #include<stdlib.h> #include<time.h> usingnamespace std; int CresteDescreste() { int x = rand() % 2; return x; } int ValoareaDeSchimbare() { int x = rand() % 8; } return x;

void LungaDurata(doublevitezaVint) { double start = vitezaVint / 10; int tipSchimb; cout<<"Prima zi vintul va avea viteza cuprinsa intre "<<vitezaVint - start <<" si "<<vitezaVint + start <<" m\\s\n"; tipSchimb = CresteDescreste(); if (tipSchimb == 0) { cout<<"A doua zi vintul va avea viteza aproximativa de "<<vitezaVint + (ValoareaDeSchimbare() * start) <<" m\\s\n"; } elseif (tipSchimb == 1)

14

{ cout<<"A doua zi vintul va avea viteza aproximativa de "<<vitezaVint (ValoareaDeSchimbare() * start) <<" m\\s\n"; } tipSchimb = CresteDescreste(); if (tipSchimb == 0) { cout<<"A treia zi vintul va avea viteza aproximativa de "<<vitezaVint + (ValoareaDeSchimbare() * start) <<" m\\s\n"; } elseif (tipSchimb == 1) { cout<<"A treia zi vintul va avea viteza aproximativa de "<<vitezaVint (ValoareaDeSchimbare() * start) <<" m\\s\n"; } tipSchimb = CresteDescreste(); if (tipSchimb == 0) { cout<<"A patra zi vintul va avea viteza aproximativa de "<<vitezaVint + (ValoareaDeSchimbare() * start) <<" m\\s\n"; } elseif (tipSchimb == 1) { cout<<"A patra zi vintul va avea viteza aproximativa de "<<vitezaVint (ValoareaDeSchimbare() * start) <<" m\\s\n"; } tipSchimb = CresteDescreste(); if (tipSchimb == 0) { cout<<"A cincia zi vintul va avea viteza aproximativa de "<<vitezaVint + (ValoareaDeSchimbare() * start) <<" m\\s\n"; } elseif (tipSchimb == 1) { cout<<"A cincia zi vintul va avea viteza aproximativa de "<<vitezaVint (ValoareaDeSchimbare() * start) <<" m\\s\n"; } tipSchimb = CresteDescreste(); if (tipSchimb == 0) { cout<<"A sasea zi vintul va avea viteza aproximativa de "<<vitezaVint + (ValoareaDeSchimbare() * start) <<" m\\s\n"; } elseif (tipSchimb == 1) { cout<<"A sasea zi vintul va avea viteza aproximativa de "<<vitezaVint (ValoareaDeSchimbare() * start) <<" m\\s\n"; } tipSchimb = CresteDescreste(); if (tipSchimb == 0) { cout<<"A saptea zi vintul va avea viteza aproximativa de "<<vitezaVint + (ValoareaDeSchimbare() * start) <<" m\\s\n"; } elseif (tipSchimb == 1) { cout<<"A saptea zi vintul va avea viteza aproximativa de "<<vitezaVint (ValoareaDeSchimbare() * start) <<" m\\s\n"; } } void ScurtaDurata(doublevitezaVint)

15

{ double start = vitezaVint / 10; int tipSchimb; cout<<"Prima zi vintul va avea viteza cuprinsa intre "<<vitezaVint - start <<" si "<<vitezaVint + start <<" m\\s\n"; tipSchimb = CresteDescreste(); if (tipSchimb == 0) { cout<<"A doua zi vintul va avea viteza aproximativa de "<<vitezaVint + (ValoareaDeSchimbare() * start) <<" m\\s\n"; } elseif (tipSchimb == 1) { cout<<"A doua zi vintul va avea viteza aproximativa de "<<vitezaVint (ValoareaDeSchimbare() * start) <<" m\\s\n"; } } void DeterminareaDupaPerioade(doublevitezaVint) { int optiune; cout<<"\nAlegeti durata de prognozare.\n"; cout<<"1. Imediata.\n"; cout<<"2. Scurta durata.\n"; cout<<"3. Lunga durata.\n"; cout<<"optiune: "; cin>> optiune; switch(optiune) { case 1: { cout<<"Viteza vintului in urmatoarele citeva ore va fi de "<<vitezaVint<<" m\\s\n"; }break; case 2: { cout<<"Viteza vintului pentru urmatoarele 2 zile va fi:\n"; ScurtaDurata(vitezaVint); }break; case 3: { cout<<"Viteza vintului pentru urmatoarele 7 zile va fi:\n"; LungaDurata(vitezaVint); cin.get(); }break; default: { cout<<"Nu exista asa optiune.\n"; } } } double CitesteDateleTastatura() { double vitezaInaltime, vitezaSol, tipulTeren = 0.15; int inaltime, constantaDeInaltime = 10; cout<<"Introduceti viteza vintului la sol (m/s): ";

16

cin>> vitezaSol; cout<<"Introduceti altitudinea la care se va calcula viteza vintului (m): "; cin>> inaltime; double raportul = inaltime / constantaDeInaltime; vitezaInaltime = vitezaSol * pow(raportul, tipulTeren); cout<<"Viteza vintului la momentul dat este: "<< vitezaInaltime <<" m\\s\n"; return vitezaInaltime; } double CitesteDateleFisier() { double vitezaInaltime, vitezaSol, tipulTeren = 0.15; int inaltime, constantaDeInaltime = 10, len; FILE * fFisier = NULL; char drumFisier[256]; cout<<"Introduceti drumul spre fisierul cu date initiale.\n"; cin.get(); cin.getline(drumFisier, 256); fFisier = fopen(drumFisier, "r"); if (fFisier == NULL) { return -1; } fgets(drumFisier, 256, fFisier); len = strlen(drumFisier); drumFisier[len - 1] = '\0'; vitezaSol = atof(drumFisier); fgets(drumFisier, 256, fFisier); len = strlen(drumFisier); drumFisier[len - 1] = '\0'; inaltime = atof(drumFisier); double raportul = inaltime / constantaDeInaltime; vitezaInaltime = vitezaSol * pow(raportul, tipulTeren); cout<<"Viteza vintului la momentul dat este: "<< vitezaInaltime <<" m\\s\n"; fclose(fFisier); return vitezaInaltime;

int main() { int optiune; double vitezaVint; srand(time(0)); cout<<"Alegeti modul de introducere a datelor:\n"; cout<<"1. De la tastatura.\n"; cout<<"2. Din fisierul cu date.\n"; cout<<"optiune: "; cin>> optiune; if (optiune == 1) { vitezaVint = CitesteDateleTastatura(); DeterminareaDupaPerioade(vitezaVint); } elseif (optiune == 2) { vitezaVint = CitesteDateleFisier(); if (vitezaVint == -1) {

17

cout<<"Fisierul introdus nu exista.\n"; cin.get(); exit(1); } DeterminareaDupaPerioade(vitezaVint); } else {

cout<<"Nu exista asa optiune.\n"; cin.get(); exit(1);

} cin.get(); return 0; }

Figura 1. Fereastra principala a programului.

18

Scheme logice

Figura 2. Schema bloc a functiei CitesteDateleFisier.

19

Figura 3. Schema bloc a functiei main

Figura 4. Schema bloc a functiei DeterminaDupaPerioada.

20

Concluzie
Executinproiectuldat, noiurmareamscopulsaincadram in cadruluneiaplicatiemajoritateacunostintele, tehnicile de programare, instrumentele, sicapacitatileobtinutepeparcursulacestui curs, astfelcontrolindnivelulnostru de intelegeresiaplicare a cunostintelor. Am creataplicatia care lucreaza cu bibliotecastdlib, care ne ajutasageneramnumerealeatorii care ne ajutasaprezicem cu o anumitaprobabilitatevitezavintuluipe o anumitaperioada de timp. Pentruscriereasifunctionareafunctiilormaisusdescrise au fostutilizatemajoritateainstrumentele, tehnicile de programareinsusite de catrenoi la cursul de programare.Astfel am obtinut un produsfinalizat, capabilsa execute celemaiimportantesimai des utilizatefunctii cu fisierele/directoarele, sitoateacesteadoar cu ajutorullimbajului de programare C/C++, care si-a dovediteficacitateasaincaodata.Creind un cod elegant, lizibil, si un produs bine optimiza.

Bibliografia
1. / Bjarne Stroustrup, . C++, Editura , 2011. 2. , ++. , Editura , 2007. 3. ,C++ from the ground up, Editura , 2008. 4. ., C/++, Editura .: -, 2008. 5. , C++ , Editura -, 2005. 6. .., ++, Editura , 2010. 7. ., - ++, Editura , 2004. 8. .., C++: , Editura , 2010. 9. .., .., C C++, Editura -, 2001. 10. .. , C++ 3- , Editura - , 2001.
11. http://msdn.microsoft.com/en-us/library/ms123401.aspx 12. http://en.wikipedia.org/wiki/Algorithm 21

13. http://www.cyberforum.ru/cpp-builder/ 14. http://www.cplusplus.com/doc/tutorial/ 15. http://www.cprogramming.com 16. http://digilander.libero.it/vvillas/Tabelle/principali_formule.htm 17. http://meteoinfo.by/rules/?page=73

22

Evaluare