Documente Academic
Documente Profesional
Documente Cultură
Etapa 1. Identificarea datelor de intrare i a celor de ieire. Etapa 2. Elaborarea algoritmului de rezolvare a problemei - ce trebuie s
facem pentru ca, pornind de la datele de intrare s le obinem pe cele de ieire.
1
www.ls-infomat.ro | www.manuale-de-informatica.ro
ncercai s privii problema pe care o avei de rezolvat n mod abstract, adic lipsit de amnuntele nesemnificative. n acest fel datele de intrare/ieire, nu mai sunt, de exemplu: vrstele unor persoane, ci numere naturale de la 1 la 100; numele persoanelor, ci iruri de caractere; ... Pornind de la problema abstractizat, ncercai s vedei dac nu exist un algoritm consacrat care o rezolv. Aici au mare importan cunotinele privitoare la teoria algoritmilor. n ipoteza existenei unui astfel de algoritm este foarte greu, dac nu imposibil, s gsii un alt algoritm, mai performant. n cazul n care nu cunoatei un algoritm consacrat care o rezolv, suntei nevoii s elaborai dvs. unul. Pentru nceput, inventariai mai muli algoritmi care rezolv problema i selectai unul, pe care-l considerai eficient. Criteriile de eficien, adic cele dup care alegei algoritmul dintre toi cei pe care i-ai elaborat, sunt tratate separat. Dac v ajut, redactai algoritmul sub form de pseudocod sau schem logic. n etapa de iniiere, este bine s facei acest lucru. Asigurai-v c algoritmul elaborat de dvs. este corect. n primul rnd, simulai "funcionarea" sa pe cteva seturi de date de intrare, seturi gererate "manual", cu puine date, dar variate. Apoi, ncercai s demonstrai faptul c algoritmul gsit este corect. Aici vei folosi cunotine pe care le vei aprofunda n anii urmtori sau n facultate. Ca o curiozitate, n marile universiti ale lumii sunt muli informaticieni de elit care n-au nici cea mai mic curiozitate sau plcere s scrie programul dup ce au elaborat un algoritm. Dar acolo, nimeni nu "te bag n seam" dac ai elaborat un algoritm la care n-ai demonstraie, dar ai un program care "merge".
3
www.ls-infomat.ro | www.manuale-de-informatica.ro
Observaii ! 1. S-a vzut c liniile necesare unui program pentru realizarea interfeei reprezint aproximativ 80% din totalitatea liniilor. Cu alte cuvinte, este mai greu s scrii interfaa dect algoritmul propriu-zis. Dumneavoastr credei c fiecare care are de scris un program cu interfa prietenoas pierde acest timp? Nici vorb. Acesta preia subprograme gata scrise i le folosete. 2. La ora actual este de mare importan programarea vizual. Mediile serioase de programare, pun la dispoziia programatorilor aplicaii specializate, prin care acetia aleg ferestrele, butoanele etc. Alegerea se face prin selecia cu mouse-ul, dintr-o list. Interfeele astfel construite poat denumirea de "resurse". Codul necesar pentru ca resursele s fie prezente n programe este generat automat. Programatorul va trebui s scrie secvena de instruciuni care se execut atunci cnd "apsm" un anumit buton. Filosofia modern de a programa este urmtoarea: programul "ateapt" ca un anumit eveniment (de exemplu, o "apsare" de buton) s aib loc. Atunci execut operaia corespunztoare. Programul i termin execuia atunci cnd un anumit buton este "apsat". 3. Mecanismul care face acest lucru posibil se numete programare orientat pe obiecte i va fi studiat n anii urmtori.
4
www.ls-infomat.ro | www.manuale-de-informatica.ro
O alt situaie nefericit este cea n care se ncearc crearea unui fiier care are acelai nume fizic cu un altul, deja existent. n acest caz, acesta din urm se terge. V dai seama de consecinele acestui fapt n cazul n care fiierul care se terge are foarte multe informaii i nu este salvat? Alt exemplu: tentativa de consultare a unui fiier inexistent. Revedei modul de lucru cu fiiere, pentru a v reaminti cum s prentmpinai toate acestea. n realitate, n exploatare apar foarte multe cazuri n care datele incorecte conduc la rezultate nedorite. Natura lor este determinat de aplicaia propriu-zis. O parte dintre acestea pot fi intuite nainte de scrierea programului, n funcie de experiena pe care o avei. Cealalt parte se corecteaz n perioada de test a programului respectiv.
S ne amintim faptul c un algoritm efectueaz trei operaii de baz: intrare / ieire, atribuire, decizie. n general, operaiile de intrare / ieire sunt o constant pentru algoritmii care rezolv o anumit problem. De exemplu, dac citim n valori numerice i o afim pe cea maxim, orice algoritm am folosi tot se execut n operaii de intrare i una de ieire. Din acest motiv renunm la analiza acestor operaii. Pentru a simplifica calculul celorlalte operaii (de atribuire i de decizie), vom considera c una dintre ele este cea de baz i vom estima de cte ori se execut aceasta. O vom alege pe cea a crui numr de execuii poate fi mai uor estimat, sau cea care necesit mai mult timp de execuie. De cele mai multe ori se alege operaia de decizie. Exemplul 1. Calculul maximului dintr-un ir de n numere reale. Reamintim, pe scurt, algoritmul: unei variabile - numit max - i se atribuie valoarea primei valori. fiecare din cele n-1 valori rmase, se compar, pe rnd, cu valoarea variabilei max, iar n cazul n care coninutul este mai mare dect al variabilei max, acesteia i se atribuie valoarea acelei componente.
5
www.ls-infomat.ro | www.manuale-de-informatica.ro
Cte operaii de decizie efectueaz algoritmul? n mod evident, n-1 operaii. Cte operaii de atribuire efectueaz algoritmul? Acest numr depinde de datele de intrare. S-ar putea ca prima dat introdus s fie cea maxim. n acest caz algoritmul efectueaz o singur atribuire. S-ar putea ca datele de intrare s fie n ordine strict cresctoare. n acest caz se efectueaz n atribuiri. Din acest motiv, pentru a estima eficiena algoritmului vom alege operaia de decizie. n concluzie, vom spune c algoritmul efectueaz n-1 operaii elementare. Exemplul 2. Se consider un vector cu n numere naturale. Se cere s se listeze cteva dintre acestea, a cror sum se divide cu n O analiz superficial a problemei va conduce la acest algoritm: considerm toate submulimile mulimii celor n numere naturale; pentru fiecare dintre ele testm dac suma elementelor se divide la n, iar cnd am gsit o astfel de submulime, algoritmul se oprete. Categoric, aceasta este o rezolvare corect. Dac analizm timpul de rezolvare a problemei vom observa c avem 2n submulimi ale unei mulimi cu n elemente. Chiar dac ar fi posibil s generm o submulime printr-o singur operaie elementar, tot sunt necesare 2n operaii elementare. Altfel: Vom ncepe prin a forma, pe rnd, sumele: S1=x1; S2=x1+x2; ... Sn=x1+x2+...+xn. Dac exist un i ntre 1 i n pentru care suma Si se mparte la n, atunci numerele cutate sunt x1, x2, ..., xi. Dac nici una nu se mparte la n, innd cont de faptul c restul acestor sume prin mprirea la n aparine mulimii {1,2...,n-1} (avem n-1 posibiliti de rest i n sume), rezult c exist cel puin dou sume care dau acelai rest prin mprirea la n. Atunci, diferena acestor dou sume se divide cu n. Fie Si i Sj aceste sume. Si=x1+x2+...+xi; Sj=x1+x2+...+xj; ... Sj-Si=xi+1+...+xj.
6
www.ls-infomat.ro | www.manuale-de-informatica.ro
Cum estimm timpul de calcul? Vom considera ca operaie de baz decizia. Dispunem de n resturi. Cutm un rest nul. Pentru aceasta se fac cel mult n operaii de decizie. Presupunem c nici un rest nu este nul. Urmeaz s identificm dou resturi egale. Se compar primul rest cu resturile 2, ..., n, ceea ce necesit (n-1) comparaii, al doilea cu resturile 3, ..., n (n-2 comparaii), ... penultimul rest cu ultimul (o singur comparaie). n concluzie, se efectueaz cel mult n(n-1)/2 comparaii. n total se efectueaz n+n(n+1)/2 comparaii (operaii de decizie).
Cu excepia cazului n=1, acest numr este cu mult mai mic dect 2n. n concluzie, se alege a doua variant. Exerciiu. Generai un fiier text cu n>100 astfel de numere. Scriei programele care rezolv aceast problem n cele dou variante. Vei vedea "pe viu" diferena la timpul de execuie. Nici nu cred c vei avea rbdare s ateptai rezultatul pentru programul obinut n prima variant de rezolvare a acestei probleme. Observaie. Un alt criteriu de selecie, secundar, al unui algoritm este acela al memoriei interne necesare. Evident, c este de preferat un algoritm care necesit mai puin memorie intern. ntruct organizarea memoriei interne nu a fost studiat n acest an, acest criteriu nu va fi prezentat.
7
www.ls-infomat.ro | www.manuale-de-informatica.ro