Primii pași: PROBLEME pentru începătoriSă nu credeți că o problemă de informatică se poate rezolva doar implementând efectiv, într-un limbaj de programare, un algoritm. Puneți creierul "în priză" și rezolvați următoarele probleme de gândire! P01: Intersecție de mulțimiAlgoritmul de mai jos determină intersecția a două mulțimi. Acestea sunt memorate în tablourile A având N elemente și B având M elemente.
Intersecție: K:=0 Pentru I=1,N execută J:=1 Cât timp J Ł M și A(I)B(J) execută J:=J+1 (*) Sfârșit Cât timp Dacă J Ł M atunci K:=K+1: C(K):=A(I) Sfârșit Pentru Sfârșit Intersecție.
A. Cunoscând valorile N și M (N Ł M) determinați care sunt datele pentru care algoritmul este cel mai rapid, adică ce proprietăți trebuie să aibă tablourile A și B pentru ca linia notată cu (*) să se execute de număr minim de ori? Care este valoarea acestui minim? B. Cunoscând valorile N și M (N Ł M) determinați care sunt datele pentru care algoritmul este cel mai lent, adică ce proprietăți trebuie să aibă tablouri A și B pentru ca linia notată cu (*) să se execute de număr maxim de ori? Care este valoarea acestui maxim? P02: ColorăriAlgoritmul de mai jos colorează punctele ecranului pornind din punctul (I,J), în funcție de conținutul tabloului DB.
Colorează(I,J): K:=1: L:=1 Cât timp Pe_ecran(I,J) execută Desenare_punct(I,J) I:=I+T(L,1): J:=J+T(L,2): DB(K):=DB(K)-1 Dacă DB(K)=0 atunci K:=K+1: L:=L mod 4 + 1 Sfârșit Cât timp Sfârșit Colorează.
Subprogramul Pe_ecran(I,J) returnează valoarea true dacă punctul (I,J) este pe ecran (în interiorul lui). Subprogramul Desenare_punct(I,J) luminează punctul (I,J). Conținutul tabloului T este: T(1,1)=0, T(1,2)=1, T(2,1)=-1, T(2,2)=0, T(3,1)=0, T(3,2)=-1, T(4,1)=1, T(4,2)=0.
În ce ordine colorează algoritmul punctele aparținând suprafeței de pe figură, dacă tabloul DB are conținutul de mai jos? Copiați figura de 3 ori și completați-o cu următoarele numere de ordine: A. DB=1,1,2,2,3,3,4,4,5,5,6,... B. DB=1,2,3,4,5,6,... C. DB=1,2,2,3,4,4,5,6,... P03: ReuniuneAlgoritmul de mai jos construiește din elementele a două șiruri ordonate (A,B) un nou șir ordonat care cuprinde acele elemente care aparțin cel puțin unuia din cele două șiruri. Elementele șirului rezultat trebuie să fie distincte.
Interclasare(A,N,B,M,C,K): I:=1: J:=1: K:=0 Cât timp IN și JM execută K:=K+1 Dacă A(I)<B(J) atunci C(K):=A(I): I:=I+1 altfel Dacă A(I)=B(J) atunci C(K):=A(I): I:=I+1: J:=J+1 altfel C(K):=B(J): J:=J+1 Sfârșit Cât timp Sfârșit Interclasare.
A. Ce proprietate trebuie să îndeplinească șirurile A și B pentru ca algoritmul să funcționeze corect? B. Ce eroare se produce în cazul în care aceste proprietăți (condiții) nu sunt îndeplinite? P04: Coadă specialăCoada specială este o structură de date, pe care se pot executa trei tipuri de operații: ÎN_COADĂ - pune caracterul sosit de la intrare la sfârșitul cozii; DIN_COADĂ - scoate caracterul curent din fața cozii și îl pune la ieșire; TRECE - permite trecerea caracterului sosit la intrare direct la ieșire. (Vezi figura!) Presupunem că la intrare sosesc caracterele: 1,2,3,4,5. Exemplu: Șirul 5,1,2,3,4 se poate obține efectuând operațiile: ÎN_COADĂ, ÎN_COADĂ, ÎN_COADĂ, ÎN_COADĂ, TRECE, DIN_COADĂ, DIN_COADĂ, DIN_COADĂ, DIN_COADĂ.
A. Se pune întrebarea dacă șirurile de mai jos se pot sau nu obține cu operațiile date. Pentru șirurile care nu se pot obține, determinați punctul până la care se poate! Pentru șirurile posibile de obținut, determinați modalitatea de a realiza cerința cu numărul minim de operații necesare! A1. 3,1,4,2,5 A2. 2,4,3,1,5 A3. 5,1,2,4,3 A4. 2,3,1,5,4 B. Exprimați în cuvinte ordinea posibilă a elementelor din șirurile rezultat! P05: ActualAlgoritmul de mai jos construiește din elementele a două fișiere sortate (A și B), un fișier nou sortat (C). Articolele fișierului B sunt comenzi care trebuie efectuate asupra fișierului A. Comenzile pot fi de trei tipuri: ștergere - articolul din A, având cheia dată, nu se pune în fișierul C! corecție - nu se va pune în C articolul din A, având cheia dată, ci articolul corespunzător din B! inserare - se pune în C articolul din B, precizat în comandă! Structura articolelor din cele două fișiere este:
A=Record(cheie: Textul, altceva: Textul) B=Record(felul: (inserare,ștergere,corecție), cheie: Textul, altceva: Textul)
Comenzile din B vor fi efectuate de subprogramul Actualizare:
Actualizare(A,B,C): Citește(A,X): Citește(B,Y) Cât timp not Eof(A) și not Eof(B) execută Dacă X.cheie < Y.cheie atunci Scrie(C,X): Citește(A,X) altfel dacă X.cheie = Y.cheie atunci Ceva1 altfel Ceva2 Sfârșit Cât timp Sfârșit Actualizare.
Ceva1: Dacă Y.felul = corecție atunci X.altceva:=Y.altceva: Scrie(C,X) Citește(A,X): Citește(B,Y) Sfârșit dacă Sfârșit Ceva1.
Ceva2: Scrie(C,(Y.cheie,Y.altceva)): Citește(B,Y) Sfârșit_Ceva2.
Presupunem că fișierele A și B sunt valide întotdeauna (au conținuturi care respectă specificațiile problemei): sunt sortate și nu conțin de două ori aceeași cheie. Articolele din fișierul C trebuie de asemenea să conțină chei diferite. A. Într-un anumit caz acest algoritm funcționează greșit, chiar dacă fișierul B conține doar comenzi corecte. A1. Care este acest caz? A2. Ce va fi greșit în rezultat? A3. Cum se poate corecta greșeala? Argumentați! B. Ce comenzi greșite (care nu corespund definiției) pot exista în fișierul B?
[cuprins] |