Previzualizare curs:

Cuprins curs:

CUPRINS 1
INTRODUCERE 2
CE SANSE AM SA DEVIN UN BUN PROGRAMATOR ? 3
LEGILE SUCCESULUI DURABIL (GHIDUL STUDENTULUI INDARATNIC) 6
PROBLEME DE JUDECATA 8
PROBLEME DE PERSPICACITATE 8
PROBLEME CU CHIBRITURI 9
PROBLEME DE LOGICA SI JUDECATA 10
PROBLEME DE LOGICA SI JUDECATA CU "TENTA INFORMATICA" 12
NOTIUNI FUNDAMENTALE DE PROGRAMARE 15
1.CELE TREI ETAPE ALE REZOLVARII UNEI PROBLEME CU AJUTORUL CALCULATORULUI 15
2.CUM SE STABILESTE CORECTITUDINEA SI EFICIENTA SOLUTIONARII ? 15
3. NOTIUNILE FUNDAMENTALE ALE PROGRAMARII: ALGORITM, LIMBAJE DE DESCRIERE A ALGORITMILOR, PROGRAM,
LIMBAJE DE PROGRAMARE 16
3.1. Algoritmul 16
3.2. Descrierea algoritmilor 17
3.3 Programul 18
4. SECRETUL INVATARII RAPIDE A PROGRAMARII 19
NOTIUNI PRIMARE DE PROGRAMARE IN PASCAL SI C 20
EXEMPLE DE PROBLEME REZOLVATE 21
METODA PRACTICA DE INVATARE CE GARANTEAZA REZULTATE IMEDIATE 26
PROBLEME SELECTIONATE - ENUNTURI 26
PROBLEME PROPUSE SPRE REZOLVARE (PROBLEME DE ANTRENAMENT) 26
PROBLEME DE EXAMEN 28
PROBLEME DIFICILE 30
PROBLEME NESOLUTIONATE INCA 32
PROBLEME INSOLVABILE ALGORITMIC 35
NOTIUNI APROFUNDATE DE PROGRAMARE 37
METODE SI STRATEGII DE PROIECTARE A ALGORITMILOR (ALIAS TEHNICI DE PROGRAMARE) 37
BACKTRACKING. 39
GREEDY 42
PROGRAMAREA DINAMICA. 42
BRANCH & BOUND 43
RECURSIVITATEA 44
PROBLEME REZOLVATE SI EXERCITII DE PROGRAMARE 49
PROBLEME ELEMENTARE. EXERCITII DE PROGRAMARE 49
PROBLEME CE NECESITA BACK-TRACKING 66
PROBLEME CU SOLUTIE SURPRINZATOARE 70
ELEMENTE DE PROGRAMARE A PC - URILOR 75
CURIOZITATI SI TRUCURI DE PROGRAMARE 91
CONFRUNTARE DE OPINII: INFORMATICA VERSUS MATEMATICA 93
BIBLIOGRAFIE, ADRESE SI LOCATII DE INTERES PE INTERNET 95

Extras din curs:

Exista multe culegeri de probleme de informatica ce permit invatarea si perfectionarea in

programare. Prin aceasta culegere am incercat nu doar sa sporim aceasta multime cu inca una ci sa

oferim un punct de vedere nou, original si incitant. Originalitatea nu este data de enunturile

problemelor sau de rezolvarile oferite, ci de ideile si sfaturile cu caracter mobilizator pe care le oferim,

precum si de faptul ca am introdus citeva capitole cu continut mai putin obisnuit intr-o culegere de

probleme de programare.

Ni s-a parut mai important ca in aceste vremuri, caracterizate prin cuvintele "ma simt intr-o

permanenta criza de timp", sa oferim cit mai mult din experienta noastra directa, atit cea de

programator cit si cea de profesor de programare. Desi nu credem ca exista metode perfecte de predare

sau de invatare a programarii, totusi speram ca prin asimilarea informatiilor originale oferite eficienta

procesului de invatare a programarii in limbajele C si Pascal va creste. Este important ca informatiile

suplimentare sa fie asimilate gradat si numai in limita "suportabilitatii" fiecaruia. De aceea, in paginile

ce urmeaza veti gasi si o serie de informatii si sfaturi ce sintetizeaza experienta didactica acumulata ca

profesor de informatica si urmindu-le va asiguram ca veti obtine succesul in programare.

In primele capitole a fost pus un accent important pe motivarea initiala a celor ce doresc sa

invete programare. In capitolul "Ce sanse am sa devin un bun programator" sint chiar prezentate cu

sinceritate inzestrarile necesare unui bun programator.

Tot astfel se explica motivul introducerii unui capitol ce contine probleme de judecata.

Rezolvarea acestora pot fi considerate nu doar ca un excelent antrenament al mintii ci si ca o buna

ocazie de a aprinde pasiunea pentru informatica si de a intari motivatia programatorilor incepatori.

Asta nu inseamna ca aceasta culegere nu le este utila si celor care au dobindit deja suficiente

cunostinte de programare. Am introdus in ea citeva capitole ce contin informatii mai putin cunoscute.

Unul cuprinde o lista de probleme deosebite, unele foarte dificile, altele carora nu li se cunoaste inca o

solutie si altele pentru care exista demonstratie riguroasa ca nu pot fi rezolvate cu ajutorul

calculatorului. Alt capitol cuprinde exemple de programare a PC-urilor: lucrul cu tastatura, mouse-ul,

accesul direct la memoria ecran, etc. Iar unele capitole ca Notiuni aprofundate de programare,

Probleme cu solutie surprinzatoare sau Curiozitati si trucuri de programare le sint in intregime

destinate celor care au depasit stadiul de incepator. Probabil ca aceste informatii constituie o provocare

destul de substantiala chiar si pentru cei avansati in ale programarii.

In concluzie, scopul acestei culegeri nu este doar de a contribui la formarea si specializarea

programatorilor sau pentru aprofundarea tehnicilor de programare, cit mai ales de a le oferi o baza, o

motivatie si o initiere celor care doresc sa faca primii pasi in domeniul programarii. Iar acelor

impatimiti ai programarii care se simt deja plictisiti, satui sau plafonati le promitem ca parcurgind

aceasta culegere vor aprofunda cunostintele pe care si le-au insusit deja si, daca vor avea curajul de "a

se lua de piept" cu unele din problemele nesolutionate inca, li se va reaprinde cu siguranta focul

pasiunii pentru programare.

Incepatorilor le uram Bun venit in programare si tuturor Mult succes !

2

Ce sanse am sa devin un bun programator ?

Aceasta intrebare apare deseori in discutiile sincere dintre profesori si studentii lor descurajati

de intirzierea aparitiei unor rezultate care sa certifice buna lor calitate ca programatori. Vom incerca in

rindurile ce urmeaza sa raspundem cit mai clar la aceasta intrebare oferind, in plus, o perspectiva

prospatata asupra acestui subiect, prin luarea in considerare a unei serii de factori mai putin utilizati in

procesul didactic contemporan.

Mai intii sa vedem ce s-ar putea intelege prin sigtagma "bun programator", insisitind in

continuare doar pe aprofundarea adjectivului bun, fara a mai defini sau detalia ce se intelege printr-un

programator. Vom cita cuvintele recente ale lui Timoty Budd ( profesor la Oregon State University )

care da urmatoarea definitie: "Un bun programator trebuie sa fie inzestrat cu tehnica, experienta,

capacitate de abstractizare, logica, inteligenta, creativitate si talent". Intru-totul de acord cu aceasta

definitie vom trece in cele ce urmeaza la explicitarea fiecarei calitati.

Inainte vom deduce urmatoarea consecinta imediata - deosebit de importanta - ce rezulta din

definitia de mai sus: cele sapte calitati trebuie sa fie prezente toate pentru a se obtine calificativul de

bun programator. Deci, prin lipsa sau prin prezenta "atrofiata" a uneia , sau a mai multe din

"ingredientele retetei" de mai sus, acest calificativ nu mai poate fi atins.

1. Tehnica - este desigur o calitate ce poate fi, si este, dobindita doar prin aplicarea asidua (conform

proverbului: "exercitiul il face pe maestru") in activitatea concreta de programare a tehnicilor de

programare invatate si asimilate de catre programator in timpul formarii sale profesionale. Nu este

exclusa aici posibilitatea obtinerii tehnicii de programare inafara unui cadru specializat (intr-o

facultate de profil ), ci chiar exista posibilitatea obtinerii ei prin studiu individual si formatie

proprie (autodidact ).

2. Experienta - este perechea geamana a calitatii de mai inainte, fara insa a se exclude una pe

cealalta. Nu vom mai repeta cum si in ce conditii poate fi ea obtinuta ci vom deduce urmatoarea

consecinta imediata : nici un programator incepator nu poate fi numit bun programator intrucit

el nu a avut cind (adica timpul necesar ) sa dobindeasca ambele calitati. Este binecunoscut faptul

ca o rubrica importanta ce se cere completata la angajare sau la schimbarea locului de munca este

experienta de programare in ani. Se considera in general ca experienta apare abia dupa minimum

doi ani de programare. Acest fapt nu trebuie privit ca o descurajare pentru cei mai tineri

programatori ci mai degraba ca pe un motiv de ambitionare si ca o invitatie la rapida

autoperfectionare.

3. Abstractizarea - este o trasatura a intelectului uman si constituie un dat al oricarui om normal, dar

din pacate(!) este o insusire prea putin dezvoltata si prea putin folosita de oamenii obisnuiti. Ea

consta din capacitatea de a extrage din context, de a vedea dincolo de suprafata imediata si de a

putea sesiza structura - scheletul ce sustine intreaga retea de detalii ale unei probleme generale.

Pentru a fi un bun programator acesta calitate trebuie sa fie net amplificata fata de "normal"

intrucit sta la baza oricarui proces de analiza si modelare a problemelor, cit si la baza procesului de

proiectare a solutiilor generale. Absenta sau mai exact atrofierea acestei capacitati se constata

practic la studenti prin incapacitatea de a intelege sau de a asimila explicatii, demonstratii sau

modele abstracte ( simplu spus, o acuta si permanenta "lipsa de chef" atunci cind sint atinse

anumite subiecte ce nu mai au contact direct cu realitatea concreta, imediata - adica subiecte

abstracte ). Metoda pentru a recapata sau a amplifica aceasta capacitate este de a face cit mai des

uz de ea, adica de a o exersa mereu (conform zicalei "functia creeaza organul") intr-un domeniu

particular, sustinut de o motivatie personala puternica. Altfel spus, capacitatea noastra de

abstractizare se va amplifica daca vom incerca gasirea de solutii la problemele dintr-unul din

domeniile noastre preferate, pentru ca rezolvarea acestora va fi automotivata, facuta "cu chef" si

va prezenta o doza sporita de atractivitate.

4. Logica - este o alta calitate intrinseca a oricarui intelect sanatos. Ea este absolut necesara atit

pentru a putea folosi mecanismele mentale de deductie si inductie logica, cit si pentru a putea

intelege usor, dar in acelasi timp corect, cursul - firul rosu al unei demonstratii sau al unui

rationament intins pe mai multe pagini. Asemenea tuturor calitatilor intrinseci existente in stare

potentiala, antrenarea si amplificarea acesteia se face prin exercitiu repetat, prin folosirea ei in mod

curent.Din pacate, doar prin rezolvarea de integrame nu se ajunge la amplificarea logicii...

5. Inteligenta - este una din cele mai de pret calitati intrinseci ale intelectului uman. In citeva cuvinte,

fara a avea pretentia de a da prin acestea o definitie, prin inteligenta intelegem capacitatea de a

face (de a stabili) conexiuni sau legaturi noi si folositoare (din latinescul inter-legere) intre idei,

3

cunostinte sau informatii "aparent fara legatura". Fata de logica, pe care o consideram ca fiind o

calitate bazala, inteligenta este o calitate ce se "intinde pe verticala" intelectului si are in plus

Bibliografie:

www-groups.dcs.st-and.ac.uk/~history/ - contine multe pagini interesante despre istoria

descoperirilor in matematica, utile celor care doresc sa afle cum se face cu adevarat descoperiri in

matematica si cum s-a ajuns la necesitatea aparitiei calculatoarelor

- www.mathpages.com/KsBrown/ - contine o colectie impresionanta de informatii, idei si

descoperiri de ultima ora din matematica si informatica

- www.mathsoft.com/asolve/ - contine o lista substantiala de probleme de matematica (si nu numai)

care isi asteapta inca rezolvarea, multe dintre ele putind fi abordate cu ajutorul calculatorului

- www.ee.Surrey.ac.uk/Personal/R.Knott/Fibonacci/fib.html - este o "portita" de intrare in domeniul

fascinant al numerelor lui Fibonacci, cu multiple corelatii matematice si informatice

- mans.cee.hw.ac.uk/ctl.html Computer Teaching and Learning Resources - numele site-ului spune

totul

- www.k12tlc.net/Penrose/ K-12 Teaching & Learning Center - noi am ales pagina care prezinta

biografia lui Sir Roger Penrose, dar aveti inca multe altele la dispozitie

- www.ioccc.org The International Obfuscated C Code Contest (IOCCC) - Concursul international

de programare C ofuscata (incilcita si intentionat confuza)

Suplimentar, tot pentru cei foarte pasionati de matematica, informatica, de legatura dintre ele

si nu numai, oferim o selectie minimala de carti si articole care au constituit, direct sau indirect, o sursa

de inspiratie in scrierea acestei culegeri:

- Turbo Pascal 6.0. Ghid de utilizare, Microinformatica, Cluj-Napoca, 1992

- Balanescu T. ..., Limbajul Turbo Pascal, Editura tehnica, Bucuresti, 1992

- Grigore Albeanu, Programarea in Pascal si Turbo Pascal. Culegere de probleme, Editura tehnica,

Bucuresti, 1994

- Tudor Sorin, Tehnici de programare, Editura L&S Infomat, Bucuresti, 1998

- Manual de programare C, (dupa Kernigham si Ritchie) Microinformatica, Cluj-Napoca, 1986

- Muslea I., Programarea in C, Microinformatica, Cluj-Napoca, 1992

- Roger Penrose, Mintea noastra...cea de toate zilele, (titlul original: Emperor's mind), Editura

tehnica, Bucuresti, 2001

- Roger Penrose, Incertitudinile ratiunii. Umbrele mintii, (titlul original: Shadows of the mind),

Editura tehnica, Bucuresti, 2000

- Keith Devlin, Virsta de aur a matematicii, (titlul original: Matemathics: The New Golden Age),

Editura Thetha, Bucuresti, 2000

- Solomon Marcus, Gindirea algoritmica, Editura tehnica, Bucuresti, 1982

- L. Livovschi, H. Georgescu, Bazele informaticii, Editura didactica si pedagogica, Bucuresti, 1981

95

Download gratuit

Documentul este oferit gratuit,
trebuie doar să te autentifici in contul tău.

Structură de fișiere:
  • Pascal.pdf
Alte informații:
Tipuri fișiere:
pdf
Diacritice:
Da
Nota:
10/10 (4 voturi)
Nr fișiere:
1 fisier
Pagini (total):
95 pagini
Imagini extrase:
95 imagini
Nr cuvinte:
40 503 cuvinte
Nr caractere:
208 466 caractere
Marime:
596.10KB (arhivat)
Publicat de:
Anonymous A.
Nivel studiu:
Facultate
Tip document:
Curs
Domeniu:
Limbaje de Programare
Tag-uri:
agoritmi, programare, limbaj, functii
Predat:
la facultate
Materie:
Limbaje de Programare
Sus!