BLOGGER TEMPLATES AND TWITTER BACKGROUNDS »
Bine ati venit in universul binar criptic si mistic al informaticii si problemelor ei. Pasiti cu incredere!

Problema 7 rec

.Să se calculeze n! pentru un nr n citit de la tastatură.

Problema 6 rec

Se citește un număr natural de la tastatură.
Să se calculeze suma cifrelor numărului citit.

Problema 5 rec

Recursivitate min-max
Să se afișeze maximul și minimul dintre cifrele unui număr.

Problema 4 rec

Cmmdc dintre două numere prin recursivitate.

Problema 3 rec

Recursivitate sumă pară
Se dă un vector cu n elemente.
Să se afișeze elementele a căror sumă a cifrelor este un număr par.

Problema 2 rec

Problema 1 rec

Problema struct 4

Problema struct 3

Pentru un nr de filme se citesc denumirea si incasarile.
Sa se ordoneze descrescator filmele dupa incasari si sa se afiseze filmul/filmele su cele mai mari incasari respectiv cele mai mici incasari.




Problema struct 2

Se citesc de la tastatura nr elevi cu media lor.
Sa se numere cati elevi au media mai mica decat un elev citit.

Problema struct 1

Pentru elevii unei clase se cunosc numele, prenumele si media.
a) afisati elevul cu media cea mai mare/mica.
b)afisati elevii in ordine descrescatoare a mediilor.


Teorie Siruri

Siruri de caractere

Cele mai des întâlnite utilizari ale tablorilor unidimensionale în limbajul C sunt sirurile de caractere, din cauza ca în C nu exista prevazut tipul de date sir de caractere. Pentru memorarea sirurilor se utilizeaza tablouri cu tipul de baza char, care au pe ultima pozitie, ca marca de sfârsit a sirului, caracterul ''0''.

Pe lânga necesitatea de a defini un sir de caractere ca si tablou de caractere, în prelucrarea sirurilor se utilizeaza deseori tipul pointer la caracter. De exemplu:


char sir[30]; /* tablou de 30 de caractere */
char *psir; /* pointer la caracter */
Astfel, sir este o variabila de tipul tablou de caractere pentru care se rezerva un spatiu de memorie de 30 de octeti, în timp ce psir este un pointer la caracter care poate primi ca valoare adresa unui caracter (în particular, adresa primului element dintr-un sir de caractere). Trebuie retinut ca ori de câte ori se lucreaza cu variabile siruri de caractere într-un program, trebuie sa existe fie o definitie de forma celei prezentate pentru variabila sir, prin care se rezerva static (în timpul compilarii), spatiul de memorie necesar variabilei, fie sa se aloce dinamic memoria necesara.
Neexistând tipul sir de caractere, în C nu sunt prezenti nici operatorii pentru siruri. În schimb, biblioteca standard contine numeroase functii pentru prelucrarea sirurilor de caractere. O parte a functiilor pentru citirea/scrierea sirurilor, declarate în fisierul antet stdio.h, le-am prezentat în Capitolul 2. În continuare, trecem în revista functiile pentru compararea, copierea, concatenarea sirurilor, s.a.m.d. Acestea sunt declarate în fisierul string.h. Ele primesc adresele sirurilor prelucrate, prin intermediul parametrilor de tipul pointer la caracter.



int strcmp(char *s1, char *s2);

Efect: compara sirurile s1 si s2 si returneaza , daca sirul s1 sirul s2, 0 daca s1 egal s2, si daca s1 s2.



int strncmp(char *s1, char *s2, int n);

Efect: identica cu strcmp, dar se compara sirurile s1 si s2 pentru cel mult n caractere.



char *strcpy(char *d, char *s);

Efect: copiaza sirul sursa s în sirul destinatie d si returneaza adresa sirului destinatie.



char *strncpy(char *d, char *s, int n);

Efect: copiaza maxim n caractere de la sursa s la destinatia d si returneaza adresa sirului destinatie.



int strlen(char *s);

Efect: returneaza lungimea sirului fara a numara caracterul terminator (''0'').



char *strcat(char *d, char *s);

Efect: concateneaza cele doua siruri si returneaza adresa sirului rezultat.

În paragraful urmator vor fi prezentate particularitati ale operatiilor cu siruri de caractere, cât si dificultati si erori tipice rezultate din manipularea sirurilor de caractere.

Teorie Recursivitate

Definitie
Spunem ca o notiune este definita recursiv daca in definitia ei apare insa si notiunea care se defineste.
In informatica numim recursivitatea directa, proprietatea functiilor de a se autoopera.

Observatii
1) Orice f recursiva trebuie sa contina o conditie de oprire,respectiv de continuare.
2)la fiecare apel al f. se executa aceasi secventa de instructiuni.
3)tinand seama de observatia anterioara pentru a scrie un program recursiv problema trebuie sa contina o functie care sa contina relatia de recurenta
4)la fiecare apel in zona de stiva a memoriei se creeaza un nivel sau pe stiva se memoreaza val parametrilor formali transmisi prin valoare, adresa param. formali transmisi prin referinta, adresa de revenire, variabilele locale cu val din mom respectiv.
5)toate instructiunile din subprogram se executa pentru fiecare reapel.

Când folosim recursivitatea
-Ce-a de-a doua definitie a lui n! este exprimata printr-o formula de recurenta: n!=n*(n-1)!. În ciuda numelui sau, o relatie de recurenta poate fi implementata recursiv sau iterativ. Desi solutiile iterative se executa mult mai eficient decât unele recursive, ele sunt adesea prea dificil de codificat. Eficienta unei rutine recursive este în mare masura dependenta de faptul ca ea repeta o parte din munca depusa pentru a obtine raspunsul final. La nici unul din exemplele anterioare nu am înâlnit acest lucru. Functia factoriala recursiva de exemplu, are nevoie de 4! pentru a calcula 5!, dar 4! se calculeaza numai o singura data. Dar, cu siguranta alte rutine, daca sunt scrise recursiv ar repeta o parte din... truda lor de mai multe ori!
-Consideram în cele ce urmeaza celebrul sir al lui Fibonacci (matematician italian, secolul XIII), în care fiecare termen dupa 0 si 1 este obtinut din suma celor doi termeni precedenti.
F(0)=0, F(1)=1, … , F(n)=F(n-1)+F(n-2)
F(0) F(1) F(2) F(3) F(4) F(5) F(6) F(7)…
0 1 1 2 3 5 8 13…
Asa cum l-am scris noi, ca o secventa de-a lungul paginii, procedam iterativ; fiecare numar este calculat o singura data.

În informatică, recursivitatea sau recursia este un mod de a defini unele funcţii. Funcţia este recursivă, dacă definiţia ei foloseşte o referire la ea însăşi, creând la prima vedere un cerc vicios, care însă este numai aparent, nu şi real.
Recursivitatea funcţionează prin definirea unuia sau a mai multe cazuri de bază, foarte simple, şi apoi prin definirea unor reguli prin care cazurile mai complexe se reduc la cazuri mai simple.
Un exemplu de recursivitate este în definirea formală a numerelor naturale din cadrul teoriei mulţimilor:
* baza recursiei este faptul că 1 este număr natural;
* în plus, orice număr natural are un succesor, care este de asemenea un număr natural.
Un alt exemplu ar fi definirea conceptului de strămoş al unei persoane:
* Un părinte este strămoşul copilului. ("Baza"')
* Părinţii unui strămoş sunt şi ei strămoşi ("Pasul de recursie").

Teorie Structuri

Evolutia tehnicilor de programare determina realizarea unor produse program caracterizate prin complexitate ridicata si prin consumuri de resurse reduse.

Activitatea programului devine odata cu eliminarile restrictiilor impuse de sistemele de calcul o activitate de alocare si nivelare a resurselor software.

Dintr-o multitudine de limbaje, medii de programare si biblioteci de programe trebuie alese si asamblate acele componente care conduc la produse program performante. Pentru efectuarea unei alegeri corespunzatoare, resursele trebuie cunoscute în cele mai mici detalii.

Într-un context mai larg, structurile de date se constituie ca resurse la dispozitia programatorilor, care prin diversitate influenteaza hotarâtor calitatea programelor. Diferenta dintr-o aplicatie care este conceputa pentru a nu utiliza fisiere si aceeasi aplicatie care utilizeaza fisiere se reflecta la nivelul costurilor prin câstig sau pierdere, dupa cum solutia aleasa este sau nu adecvata.

Rezolvarea unei probleme începe cu definirea structurilor de date, continua cu utilizarea acestora si se încheie cu stocarea rezultatelor prelucrarii, tot sub forma unor structuri de date.

Studierea structurilor de date revine la clasificarea datelor, a operatiilor posibile cu fiecare tip de date, în asa fel încât realizarea si dezvoltarea programelor sa devina avantajoasa atât pentru programator cât si pentru utilizator.

Fiecarui tip de date si mod de structura îi corespund anumite situatii în care utilizarea conduce la timp de acces la informatie si la necesar de memorie, reduse.

Astfel, apar operatii de prelucrare suplimentare precum conversii, citiri si scrieri care micsoreaza viteza de obtinere a rezultatelor, conducând la cresterea costului prelucrarii.

Limbajele de programare în marea lor diversitate, se aseamana prin tipurile de date pe care programatorii le utilizeaza. Trecerea de la un limbaj la altul în conditiile cunoasterii caracteristicilor generale ale structurilor de date devine posibile, iar efortul cerut este minim.

Teorie Liste

-Permite alocarea spaţiului de memorie şi eliberarea acestuia la cererea explicită a programatorului eliminând inconvenientul ( la tablouri ) de a aloca prea mult spaţiu care nu este folosit sau de a aloca spaţiu insuficient.


Liste liniare pot fi de 2 feluri :



-Liste generale : nu au restrictii la operatiile de inserare si stergere
-Liste restrictive : au restrictii pentru inserare si stergere

La randul lor acestea se impart in :

Liste generale :

-Lista simplu inlantuita : fiecare element pastreaza legatura cu un singur vecin
-Lista dublu inlantuita : fiecare element pastreaza legatura cu ambii vecini
-Lista circulara : elementul ultim se leaga de elementul prim

Liste restrictive :

-Stiva : operatiile de introducere si extragere a elementelor se pot face numai printr-una dintre extremitati
-Coada : operatia de introducere se face pe la o extremitate in timp ce extragerea la cealalta


Nodurile reprezinta elementele unei liste

Curiozitati in Informatica

C++ (pronunţat în română “C plus plus” şi în engleză “si plas plas”) este un limbaj de programare general, compilat. Este un limbaj multi-paradigmă, cu verificarea statică a tipului variabilelor ce suportă programare procedurală, abstractizare a datelor, programare orientată pe obiecte. În anii 1990, C++ a devenit unul din cele mai populare limbaje de programare comerciale, rămânând astfel până azi.
În 1982 numele limbajului a fost schimbat de la C cu clase la C++. Au fost adaugate noi facilităţi, inclusiv funcţii virtuale, supraîncărcarea operatorilor şi a functiilor, referinţe, constante, alocare dinamică, un control al tipului mai puternic şi noua variantă de comentariu pe un singur rând (liniile care încep cu caracterele ‘//’).
În 1985 a fost lansată prima ediţie a cărţii “The C++ Programming Language” (Limbajul de programare C++), oferind informaţii importante despre limbaj, care încă nu era un standard oficial. În 1989 a fost lansată versiunea 2.0 a C++. Au apărut acum moştenirea multiplă, clase abstracte, funcţii statice, funcţii constante şi membri protected. În 1990 o altă carte a fost lansată, oferind suport pentru standarde viitoare. Ultimele adăugări includeau template-uri, excepţii, spaţii de nume (namespace-uri) şi tipul Boolean.
O dată cu evoluţia limbajului C++, a evoluat şi o bibliotecă standard. Prima adăugire a fost biblioteca de intrări/ieşiri (I/O stream), care oferea facilităţi pentru a înlocui funcţiile tradiţionale C cum ar fi printf şi scanf. Mai târziu, printre cele mai semnificative adăugari 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).

Si pentru un mic efect de show cu scop relativ educativ prezentam mai jos codul C++ in MinGW pentru codul filmului Matrix care este si tema blogului simbolizand absolutul in informatica.


Problema 1 siruri



Problema 2 siruri



Problema 3 siruri



Problema 4 siruri



Problema 5 siruri