Sunteți pe pagina 1din 9

MODULUL 1

Introducere in programare
Acest modul ofera o fundatie generala a programarii. Pe parcursul unei lectii sunt prezentate o privire de ansamblu a partilor componente ale unui calculator, punanduse accent pe modul de organizare al memoriei; notiunile de program, programare si limbaje de programare; notiunile de limbaj cod masina si limbaje de programare de nivel inalt;modalitatile de compilare, link-are si executie a unui program; o scurta istorie a celor mai importante si mai cunoscute limbaje de programare. Se introduc de asemenea notiunile de algoritm si top-down design; La sfarsitul parcurgerii acestui modul studentul va trebui sa cunoasca modul de organizare a memoriei calculatorului sa inteleaga notiunile de program, programare si limbaje de programare; sa invete despre translatarea unui program in limbaj cod masina sa-si insuseasca notiunea de algoritm sa stie sa scrie algoritmi in formatul top-down Organizarea materialului este urmtoarea: prezentarea notiunilor teoretice de mai sus si a unui numar de exemple de algoritmi o lista de exercitii si probleme care testeaza insusirea notiunii de algoritm si a principalelor structuri algoritmice. Mentionam ca aceste probleme nu sunt ordonate dupa gradul lor de dificultate. bibliografie recomandata. Recomandam parcurgerea materialului in ordinea sa fireasca. Pentru o mai buna intelegere a notiunii de algoritm si a structurilor algoritmice se recomanda scrierea algoritmilor ceruti in lista de probleme folosind toate cele trei metode (limbaj natural, pseudocod si scheme logice). Timpul mediu necesar parcurgerii i nsuirii noiunilor teoretice, formrii deprinderilor practice de rezolvare i dobndirii competenelor anunate este de aproximativ 4-6 ore de studiu pentru acesta lecie.

Lectia 1
Cursul prezentat in acest material este despre programare, mai precis despre scrierea programelor in limbajul C. In acest capitol vom discuta despre programarea calculatoarelor in general. Calculatorul poate fi privit ca o "masina" care primeste date de intrare, proceseaza aceste date si produce date de iesire. De altfel primele calculatoare se chemau data processing machines. Datele de intrare si iesire pot fi reprezentate sub forma de text, imagin sau sunete. Ceea ce face ca un calculator sa fie diferit de orice alta masina este faptul ca un calculator este controlat de catre un program stocat in interiorul calculatorului. Modificand programul putem determina calculatorul sa execute comenzi diferite.

1.1 Componentele unui calculator


Principalele componente ale unui calculator sunt: procesorul, memoria si dispozitivele de intrare/iesire. Procesor Memorie Principala

ALU Dispozitive intrare Unitate de control Dispozitive iesire

Fig. 1 Componentele unui calculator

Procesorul (CPU - central processing unit) este creierul calculatorului. Acesta contine o unitate de control care controleaza toate activitatile calculatorului si trimite semnale celorlalte parti ale calculatorului si o unitate logic aritmetica ( ALU) care efectueaza operatii asupra datelor numerice ca de exemplu adunarea, scaderea, inmultirea, impartirea. Memoria principala este numita si memoria RAM - random acces memory. Inainte ca un program sa fie executat el este stocat in aceasta memorie principala. Tot aici se gasesc datele necesare executarii programului. Aceasta memorie este privita ca fiind un sir lung de locatii de memorie, fiecare locatie avand asociata o adresa (un numar) care da pozitia locatiei in memorie. Adresele locatiilor consecutive de memorie sunt numere consecutive. Numarul de locatii de memorie depinde de capacitatea memoriei RAM dar de obicei este de ordinul milioanelor. Fiecare locatie de memorie este alcatuita din 8 biti. Fiecare bit este o cifra binara: 0 sau 1. Un grup de 8 biti este un octet

(byte). Memoria se masoara in Kb(kilobytes), Mb(megabytes) si Gb(gigabytes). 1Kb = 210 b = 1024 b ~ 103 bytes 1Mb = 210 Kb = 1024 Kb ~ 106 bytes 1Gb = 210 Mb = 1024Mb ~ 109 bytes Memoria RAM a calculatorului este o memorie volatila, adica orice informatie aflata in memorie se va pierde in momentul inchiderii calculatorului. Pentru ca programele si rezultatul prelucrarii efectuate de ele sa poata fi stocate pe o perioada lunga de timp se folosesc unitati de memorie numite secundare: hard discuri, dischete, CD-ROM-uri. In aceste unitati de memorie datele se reprezinta sub forma de fisiere. Un fisier este o colectie de date care poate contine un program, date de intrare, text etc. Dispozitivele de intrare( tastatura, mouse) sunt dispozitivele cu ajutorul carora se introduc datele in calculator, iar cele de iesire ( monitor, imprimanta) care afiseaza pe ecran sau pe hartie rezultatele procesarii datelor.

1.2 Programe
Un program este alcatuit dintr-un set de instructiuni. Cand este executat, unitatea de control citeste instructiunile din memoria RAM, una cate una si le executa in ordinea citirii. Deci putem spune ca o instructiune este de fapt o combinatie de 0 si 1. Spunem despre program ca este reprezentat in cod masina. Acesta este limbajul pe care il vorbeste calculatorul. La inceputurile calculatoarelor se programa direct in acest cod masina, o munca destul de anevoioasa dupa cum va imaginati. Din fericire astazi, de regula nici macar nu ne intereseaza care este codul masina al unui calculator iar programele sunt scrise, dupa cum veti vedea, in limbaje de nivel inalt care sunt apropiate de limbajul natural. Un program scris intr-un limbaj de programare contine de fapt un set de instructiuni scrise dupa anumite reguli foarte precise, reguli ce alcatuiesc sintaxa limbajului. Programul poate fi scris cu ajutorul oricarui editor de texte si salvat cu terminatia specifica limbajului de programare. Pentru programele scrise in C aceasta extensie este .C. Programul este salvat ca fisier de obicei pe hardisk. Inainte de a fi executat un program trebuie translatat( tradus) in cod masina, limbajul pe care calculatorul il intelege. Aceasta se face prin intermediul compilatorului, care nu este altceva decat tot un program. compilator Limbaj de Cod masina programare Orice limbaj de programare are asociat un compilator, specific acelui limbaj de programare. Fara acesta programele nu pot fi executate. Compilatorul, cand este apelat, verifica intai daca regulile de sintaxa ale limbajului sunt respectate. Daca nu atunci erorile sunt semnalate (numim aceste erori, erori de compilare sau erori de sintaza) si programul va trebui corectat. In momentul in care nu mai este nici o eroare de sintaxa compilatorul translateaza programul in cod masina si creeaza un fisier cu extensia .o ce se numeste fisier obiect si care contine traducerea programului in cod masina. De obicei un program mare contine mai multe fisiere care evident vor genera mai multe fisiere obiect. De asemenea in programe se pot folosi pachete de programe, fisiere obiect create inainte. Pentru a pune toate fisierele obiect impreuna se apeleaza

un alt program numit linker. Acest program produce un fisier executabil (de obicei cu extensia .exe). Ultimul stadiu este transferarea programului executabil in memoria RAM pentru a fi executat. Aceasta se face de catre un alt program, program stocat in memoria RAM la fiecare pornire a calculatorului si numit sistem de operare. Utilizatorul poate comunica cu sistemul de operare via tastatura sau mouse si ii poate comunica ce fisier trebuie executat. Atunci sistemul de operare va cauta fisierul in memoria secundara, il va incarca in memoria RAM dupa care programul este executat.

1.3 Editarea, compilarea si rularea unui program C in mediul de programare Visual C++
Compilatorul poate fi apelat de la linia de comanda sau prin intermediul unui mediu de programare. Prezentam in cele ce urmeaza cum se poate edita, compila si executa un program scris in C in mediul de programare Visual C++. 1. Lanseaza mediul de programare (facand click pe icoana sa sau din meniul de start - Start up meniu). Veti obtine o fereastra divizata in mai multe zone. 2. Alege New din meniul File si fa click pe Files. Din fereastra care se deschide alege optiunea C++ source file. O zona de editare se deschide si poti sa-ti scrii programul acolo. 3. Salveaza fisierul cu numele dorit si extensia .C (compilatorul va sti ca este un fisier C - nu C++ - si va aplica regulile de sintaxa din C). 4. Compileaza programul alegand Build din meniul Build 5. Orice program trebuie sa fie inclus intr-un project (workspace). Un project contine informatii despre program. Cel mai usor este sa lasi Visual C++ sa creeze un workspace pentru tine. Acest lucru se intampla in momentul in momentul in care incerci sa compilezi un program. Visual C++ te va intreba daca doresti sa creeze un project pentru tine. Raspunde Yes. 6. Daca sunt gasite erori de sintaxa mesajele de eroare se vor afisa in partea de jos a ferestrei. Daca nu sunt erori atunci este apelat linker-ul. 7. Programul este rulat prin apasarea butonului ! sau prin alegerea alternativei Execute in meniul Build. 8. O alta fereastra in MSDOS se deschide pentru afisarea rezultatelor programului.

1.4 Limbaje de programare - scurt istoric


La inceputurile calculatoarelor se programa in cod masina, apoi au aparut limbajele de asamblare (assembler) in care o instructiune de tipul c = a + b poate fi scrisa LOAD A ADD B STORE C In limbajele de asamblare orice linie era o instructiune in cod masina. Translatarea limbajelor de asamblare in cod masina se face printr-un assembler. Limbajele de nivel inalt au fost create in anii '50. Programele scrise in aceste limbaje sunt mult mai apropiate de modul in care ne exprimam decat cele scrise in

limbajele de asamblare. Pentru exemplificare puteti urmari programul hello.C din capitolul 2 scris in limbajul C. Primul limbaj de nivel inalt a fost FORTRAN( FORmuleTRANslator). Au aparut apoi versiuni noi FORTRAN 77 si FORTRAN 90. In 1959 a aparut COBOL introdus pentru programarea in domeniul finantelor. COBOL ramane unul din cele mai folosite limbaje de acest tip. In 1960 a aparut ALGOL, un limbaj cu o structura buna. Ca o extensie a lui ALGOL a fost introdus in 1967 SIMULA care permite scrierea de programe orientate pe obiecte. In 1971 a fost introdus PASCAL, un limbaj simplu, usor de invatat care este folosit pe scara larga. Cel mai mare dezavantaj al sau este acela ca nu permitere scrierea programelor mari in module si este limitat in manipularea textelor. Limbajul C a fost creat in 1972 ca un limbaj de nivel inalt dar avand caracteristicile unui limbaj de nivel scazut. Astazi multe sisteme de operare si programe de sistem sunt scrise in C. Ideea de programare orientata pe obiecte introdusa de SIMULA a fost preluata de un alt limbaj de programare, Smalltalk creat in 1980. In 1983 apare Ada, un limbaj de programare care ofera programarea pe module. Ada poate fi folosit si pentru programare paralela (parti de program sunt executate in acelasi timp). Versiunea noua Ada95 permite si programarea orientata pe obiecte. Cel mai popular limbaj de programare orientata pe obiecte este C++, o extensie a limbajului C. C++ a fost creat in 1985 dar a devenit standard numai in 1998. Un alt limbaj de programare orientata pe obiecte este Java ce a fost creat in 1995 si care este bine cunoscut pentru scrierea unor apleti (applets) care, integrate in pagini web, produc efecte deosebite( sunete, imagini in miscare).

1.5 Algoritmi
Programele sunt scrise pentru rezolvarea a multiple probleme, efectuarea unor calcule, afisarea unor date, prelucrarea unor imagini, prelucrarea sunetelor, etc. Pentru a scrie un program trebuie sa stim precis care este problema ce trebuie rezolvata si cum trebuie rezolvata pentru obtinerea rezultatului dorit. Descrierea metodei de rezolvare se numeste algoritm. Un algoritm este un set de instructiuni clare, precise, neambigue, instructiuni ce duc la obtinerea rezultatului dorit. Un algoritm trebuie sa se termine dupa un numar finit de pasi. Un algoritm este ca o reteta pe care trebuie sa o urmarim pas cu pas ca sa obtinem solutia. Algoritmi se pot reprezenta prin mai multe modalitati. O modalitate este aceea de a scrie in limbaj natural, o alta este reprezentarea prin scheme logice, alta reprezentare este in pseudocod, reprezentare foarte apropiata de scrierea in limbajul de programare. Un exemplu de algoritm este urmatorul set de instructiuni pentru a face o cafea: Pas 1. Scoate din dulap cutia de cafea, cutia de zahar, o lingurita si o ceasca. Pas 2. Daca doresti sa faci cafeaua pe aragaz atunci mergi la Pasul 4. Pas 3. Daca doresti sa faci cafeau la filtru atunci mergi la Pasul 15. Pas 4. Scoate din dulap un ibric. Pas 5. Umple ceasca cu apa. Pas 6. Toarna continutul cestii in ibric. Pas 7. Adauga o lingurita cu varf de cafea in ibric. Pas 8. Adauga o lingurita rasa de zahar in ibric. Pas 9. Pune ibricul pe aragaz. Pas 10. Aprinde chibritul.

Pas 11. Porneste aragazul. Pas 12. Asteapta sa fiarba cafeaua. Pas 13. Toarna cafeaua in ceasca. Pas 14. STOP Pas 15. Pune apa in filtru pana la semnul care indica o cana. Pas 16. Pune o lingurita cu varf de cafea in filtrul special. Pas 17. Baga filtrul in priza. Pas 18. Apasa pe butonul ON al filtrului pentru a-l porni. Pas 19. Asteapta sa se scurga toata apa din filtru. Pas 20. Inchide filtrul de cafea apasand pe butonul OFF. Pas 21. Toarna cafeaua din vasul de sticla in ceasca. Pas 22. Adauga o lingurita rasa de zahar in ceasca. Pas 23. STOP Un alt exemplu: Consideram urmatoarea problema: avem un cont in banca in care am depus suma de 10 milioane de lei vechi (1000 lei noi). Banca ofera o dobanda de 2% pe an pentru acest tip de cont. Vrem sa aflam care va fi suma din acest cont peste trei ani daca se presupune ca nici o extragere din sau depunere in cont nu vor fi efectuate. Algoritmul este urmatorul: 1. Calculeaza dobanda acumulata in primul an dobanda = 1000 * 2 / 100 = 20lei noi 2. Calculeaza suma de bani din cont dupa primul an suma = 1000 + dobanda = 1000 + 20 = 1020 3. Calculeza dobanda acumulata in al doilea an dobanda = 1020 * 2 / 100 = 20,4 4. Calculeaza suma de bani din cont dupa al doilea an suma = 1020 + dobanda = 1020 + 20,4 = 1040,4 5. Calculeza dobanda acumulata in al treilea an dobanda = 1040,4 * 2 / 100 = 20,808 6. Calculeaza suma de bani din cont dupa al treilea an suma = 1040,4 + dobanda = 1040,4 + 20,808 = 1061,208 sau scris intr-o forma mai compacta: balanta = 1000 an = 1 dobanda = balanta * 2 / 100( = 20) balanta = balanta + dobanda( = 1020) an = 2 dobanda = balanta * 2 / 100( = 20,4) balanta = balanta + dobanda( = 1040,4) an = 3 dobanda = balanta * 2 / 100( = 20,808) balanta = balanta + dobanda( = 1061,208) sau si mai compacta: 1. balanta = 1000 2. Repeta pasii 3-4 de trei ori 3. dobanda = balanta * 2 / 100 4. balanta = balanta + dobanda 5. Afiseaza balanta 6. STOP

Acest algoritm scris cu scheme logice este: balanta = 1000

an = 1 NU an > 3 dobanda = balanta *2/100 DA

Scrie balanta

STOP

balanta = dobanda+balanta *2/100

an =an + 1

Orice algoritm este o combinatie de trei structuri algoritmice: secventa: o serie de pasi ce se executa in ordinea aparitiei. De exemplu, pasii 3 si 4 din algoritmul de mai sus. selectie: se alege una dn doua sau mai multe alternative posibile. De exemplu, pasul 2 din algoritmul cafea sau urmatorul algoritm pentru calculul valorii absolute a unei variabile reale x: daca x>0 atunci valoarea absoluta = x altfel valoarea absoluta = - x repetitie: una sau mai multe instructiuni sunt repetate. De exemplu intreaga secventa de pasi 2- 4 din algoritmul de mai sus.

Alt exemplu de algoritm: calculam suma 1 + 2 + ... + n, n > 0. Acest algoritm scris in pseudocod este: read n suma = 0 i=1 while i <= n suma = suma + i i=i+1 endwhile write suma

1.6 Algoritmi scrisi in formatul de sus in jos( top- down design)


Pentru rezolvarea unor probleme mai complexe este folositor sa impartim problema in mai multe subprobleme pe care apoi sa le rezolvam separat. Aceste subprobleme pot fi la randul impartite in subprobleme pana cand se ajunge la probleme simple ce pot fi rezolvate intr-un singur pas. Aceasta tehnica de scriere a unui algoritm se numeste scriere in formatul de sus in jos. Consideram urmatoarea situatie: avem un suport de CD-uri orizontal cu sloturi pentru fiecare CD. CD-urile sunt asezate in ordine alfabetica, dupa numele interpretului de la stanga la dreapta fara spatii goale intre ele. Presupunem ca mai sunt cel putin 5 sloturi neocupate in partea dreapta. Presupunem ca am cumparat 5 CD-uri noi pe care vrem sa le punem in suport pastrand in permanenta ordinea alfabetica. CD-urile sunt pe masa si le vom lua unul cate unul si le vom pune in suport la locul lor. Algoritmul de rezolvare este urmatorul: Problema: Pune cele 5 CD-uri noi in suport pastrand in permanenta ordinea alfabetica. Subprobleme: 1. Pentru fiecare CD nou executa: 1.1 Ia CD-ul de pe masa. 1.2 Pozitioneaza CD-ul in suport in ordine alfabetica. 1.1 este o problema simpla deci nu va mai fi impartita in subprobleme. 1.2 se imparte in subproblemele: 1.2.1 Gaseste pozitia slotului in care trebuie introdus CD-ul. Numim aceasta pozitieCD. 1.2.2 Daca slotul din pozitia pozitieCD este gol executa pasul 1.2.4, altfel executa 1.2.3 . 1.2.3 Muta toate CD-urile de la dreapta pozitiei pozitieCD si pe cel din pozitia pozitieCD un slot spre dreapta. 1.2.4 Introduceti CD-ul in pozitia sa( pozitieCD). 1.2.1 se imparte la randul ei in subproblemele: 1.2.1.1 Numeste slot curent primul slot din stanga suportului. 1.2.1.2 Daca slot curent este gol atunci pozitieCD = slot curent, altfel executa 1.2.1.2.1 1.2.1.2.1 Daca interpretul CD-ului nou este in ordine alfabetica dupa interpretul CD-ului slotului curent atunci slot curent = slotul din dreapta slotului curent Daca slot curent este gol atunci pozitieCD = slot curent altfel repeta pasul 1.2.1.2.1 altfel pozitieCD=slot curent 1.2.3 se imparte la randul ei in subproblemele: 1.2.3.1 slot curent = pozitia ultimului slot care contine un CD, de la stanga la dreapta. 1.2.3.2 Repeta pasii de mai jos pana cand slot curent este la stanga slotului pozitieCD

Muta CD-ul din slotul curent un slot spre dreapta slot curent = slotul din stanga slotului curent

Exercitii si probleme propuse


1. Scrieti un algoritm pentru calculul lui n! = 1 * 2 * ... * n, n > 0. 2. Scrieti un algoritm pentru calculul sumei 12 + 22 + ... + n2, n > 0. 3. Intr-un cont in banca am depus o suma de bani initiala S. Banca ofera o dobanda de 2% pe an pentru tipul de cont. Vrem sa aflam peste cati ani suma initiala se va dubla (adica balanta contului va fi mai mare sau egala cu 2S) daca nu se efectueaza nici o extragere din sau depunere in cont. 4. Valoarea lui se poate calcula dupa formula:

1 1 1 = 1 + + ... 3 5 7
Scrieti un algoritm care calculeaza numarul . Deoarece formula este o serie Infinita, iar un algoritm trebuie sa se opreasca dupa un numar finit de pasi, determinati algoritmul sa se termine in momentul in care ati obtinut valoarea lui cu 6 zecimale exacte. 5. Scrieti un algoritm in format top- down design pentru rezolvarea urmatoarei probleme: Avem un suport de 50 de CD-uri plin in totalitate. CD-urile sunt sunt asezate in ordine aleatoare. Ordonati CD-urile in ordinea alfabetica a interpretului. Se presupune ca nu puteti lua din suport mai mult de 2 CD-uri odata (cate unul in fiecare mana).

Bibliografie recomandata:
1. Clint Hicks, "Utilizare C", Editura TEORA

S-ar putea să vă placă și