www.agora.ro

Primii pași!

Ghiocelul, mărțișorul și ALGORITMII

Sorin Groza

Încet, încet căldura de la gura sobei este înlocuită de căldura soarelui de primăvară. Acum când zăpada începe să se topească, ghioceii și mărțișoarele sunt un simbol al unui nou început. Am vrea ca și algoritmii prezentați să vă folosească în această nouă perioadă de studiu și să contribuie la îmbogățirea cunoștințelor în ale informaticii. Și nu în ultimul rând, rezolvându-le, vă dovediți dragostea pentru informatică.

Ghiocei

De îndată ce zăpada a început să se topească și primii ghiocei să mijească de sub plapuma albă, baieții clasei a V-a B au hotărât să pornească la cules de ghiocei. Ei sunt foarte hotărâți să ofere colegelor de clasă cât mai mulți ghiocei. După ce fiecare a oferit un anumit număr de ghiocei, fetele au vrut să afle care este cea mai lungă secvență de băieți cu proprietatea că fiecare a oferit un număr de ghiocei mai mic decât următorul. Prompter, informaticianul clasei a fost rugat să scrie programul care să rezolve problema. Scrieți și voi acest program și comparați-l cu cel scris de Prompter.

Exemplu

 

Intrare

n = 6

15, 7, 10, 15, 8, 12

Ieșire

7 10 15

Această problemă reprezintă de fapt găsirea "celei (celor) mai lungi secvențe de elemente consecutive ordonate strict crescător". Deoarece pot să existe mai multe astfel de secvențe, pentru început vom afla lungimea acestor secvențe în variabila max. Pentru aceasta vom incrementa contorul f cât timp x[i]<x[i+1]. Când nu mai este îndeplinită această condiție înseamnă că s-a terminat o astfel de secvență. Dacă lungimea ei este mai mare decât max atunci vom păstra în max lungimea ei. Printr-o nouă parcurgere a șirului, vom afișa fiecare secvență a cărei lungime este egală cu max. Astfel, vor fi afișate toate secvențele ce îndeplinesc condiția cerută.

Listing GHIOCEI.PAS

Mărțișoare

La talcioc e agitație mare deoarece odată cu venirea primăverii au apărut mărțișoarele. Anul acesta sunt la mare modă mărțișoarele care au gravate pe ele diverse cuvinte. Vânzătorul a aflat că un grup de mai mulți prieteni doresc să aibă mărțișoare ale căror cuvinte să fie anagrame între ele, adică să fie formate din aceleași litere dar dispuse în altă ordine (de exemplu, roma - amor - ramo).

Deoarece sunt mulți cumpărători și cu toții se grăbesc, vânzătorul dorește să împartă mărțișoarele în grupe, astfel încât fiecare cuvânt de pe mărțișor să reprezinte o anagramă a celorlalte cuvinte din grup. Un grup trebuie să conțină cel puțin două cuvinte. Pentru că are foarte multe mărțișoare și timpul este scurt, vânzătorul vă roagă să-i scrieți un program care face acest lucru - evident, în schimbul unui mărțișor.

Exemplu

 

Intrare

n=10

aiud, xxl, dor, duia, xlx, sos, udai, lxx, bona, daiu

Ieșire

aiud duia udai daiu

xxl xlx lxx

După citirea celor n cuvinte (șirul x) se face o "dublură" a acestuia pentru a nu pierde cuvintele originale (șirul y), deoarece fiecare cuvânt se ordonează astfel încât să conțină caracterele ordonate alfabetic. Astfel pentru a verifica dacă două sau mai multe cuvinte sunt anagrame ale unui același cuvânt, acestea se ordonează alfabetic și se verifică dacă sunt egale între ele.

Se vor ordona alfabetic, în paralel, șirul ce conține cuvintele în care caracterele sunt ordonate alfabetic și șirul cuvintelor inițiale.

După această operație cuvintele egale între ele vor ocupa poziții consecutive. Printr-o parcurgere a șirului cuvintelor ordonate alfabetic (șirul x) se observă dacă există mai multe cuvinte consecutive egale.

Dacă sunt mai mult de două, se va face tipărirea cuvintelor de pe pozițiile corespunzătoare, dar din șirul cu cuvintele inițiale (șirul y). În caz că nu există astfel de grupuri se va afișa un mesaj.

Listing MARTISOR.PAS

La discotecă

La marea discotecă a primăverii și-au anunțat participarea foarte multe persoane. Organizatorii împreună cu D.J.-ul doresc ca totul să fie perfect. În vederea realizării unei petreceri de neuitat D.J.-ul dorește să cunoască unele detalii despre melodiile pe care le va prezenta. Astfel, el confruntă topul muzical de săptămâna aceasta cu topul muzical de săptămâna trecută. Neavând foarte mult timp la dispoziție, el îi cere unui programator (în schimbul intrării gratuite la discotecă) să scrie un program care, plecând de la cele două topuri, să stabilească următoarele:

  • - care sunt noile formații intrate în top;
  • - care sunt formațiile care au staționat, adică ocupă exact același loc ca și săptămâna trecută;
  • - care formație a urcat cele mai multe poziții în top și care este acest număr de poziții.

Exemplu

Intrare

n=6

abba, boyz, hanson, colio, sandra, queen

(topul săptămânii trecute)

sandra, boyz, queen, colio, hanson,

vanghelis (topul acestei săptămâni)

Ieșire

noi intrari: vanghelis

stationari: boyz colio

urcare maxima: sandra cu 4 pozitii

Se citesc componentele topurilor celor două săptămâni în șirurile x și y. Pentru a găsi noile intrări în top se caută fiecare element al șirului y în șirul x. Dacă nu există, înseamnă că este o nouă intrare și se va afișa pe ecran. Dacă elementele de pe poziții identice din cele două șiruri sunt egale atunci aceasta reprezintă o staționare, situație în care se va afișa această valoare. În ceea ce privește determinarea formației cu cea mai mare urcare în top, vom calcula elementul cu diferența cea mai mare dintre poziții în cele două șiruri. În variabila poz vom avea în final poziția în șirul y a formației cu cea mai mare urcare, iar în max vom avea această urcare.

Pentru consolidarea cunoștințelor în informatică și pentru pregătirea așa cum se cuvine a concursurilor care vă așteaptă, vă propunem spre rezolvare următoarele probleme:

Listing DISCOTECA.PAS

Despărțirea în silabe

Prichindel este foarte bucuros deoarece a învățat despărțirea cuvintelor în silabe. Pentru a se verifica asupra temelor pe care le are de făcut, el îl roagă pe fratele lui mai mare să-i facă următorul program: se introduc n cuvinte despărțite în silabe, ce formează un dicționar și un text ce conține mai multe fraze. Prichindel va descompune în silabe cuvintele acestui text și va face confruntarea cu soluția dată de program. Acesta va descompune cuvintele conform dicționarului. Dacă un cuvânt nu apare în dicționar se va da mesajul Dictionar incomplet.

Exemplu

Intrare

n=7

ma-ma, din, fa-vo-rit, ca-ba-na, mun-te, eu, pe-ru-ca - dicționarul

cabana din munte. - textul

Ieșire

ca-ba-na din mun-te.

Intervale

La matematică, elevii au învățat despre intervale. Fiecare elev a trebuit să indice câte un interval de forma [x,y]. Ei au învățat la școală că un interval poate fi inclus într-un alt interval (de exemplu, intervalul [5,8] este inclus în intervalul [2,10]). Scrieți un program care citește cele n intervale și determină acel interval care este inclus în cele mai multe intervale. Programul va afișa acest interval și numărul de intervale în care este inclus.

Exemplu

Intrare

n=5

[8,40], [10,20], [1,99], [6,25], [15,20]

Ieșire

[10,20] - 3

Excursia

Venirea primăverii coincide și cu plecarea în excursii. Pentru a pleca într-o excursie, la cules de ghiocei, elevii unei clase și-au scos alocația, fiecare având o sumă de bani . Scrieți un program care determină cel mai mare grup de copii ale căror sume de bani se divid fiecare cu un același număr. Se vor afișa pe ecran sumele de bani ale copiilor care formează acest grup.

Exemplu

Intrare

n=9

7, 15, 20, 6, 105, 18, 40, 111, 35

Ieșire

15 20 105 40 35

Domnul Sorin Groza este profesor la Clubul Copiilor din Aiud și poate fi contactat prin intermediul redacției.

[cuprins]