ASOCIAIA PROFESORILOR DE INFORMATIC TUDOR SORIN DIN GALAI REVISTA DE INFORMATIC (iM)PULS ++ 4
(Re)Descoperim. (Re)Inventm.
La ONI 2009 s-a creat (IM)PULS++. A prins PULS-ul olimpiadei: ateptri, impresii, rezultate, premii, proiecte de viitor.
Ucenicii jurnaliti au pornit cu emoie pe teren. S-au narmat cu tehnica necesar i au ateptat ieirea de la proba scris a gimnazitilor i a liceenilor pasionai de informatic i foarte bine pregtii n domeniu. Cu primul interviu, greul a trecut. La primul articol, cuvintele nu se lasau nduplecate prea uor s puncteze esenialul, s surprind emoia concurenilor, satisfacia reuitei, motivaia pentru viitor. Redacia a lucrat aproape nonstop la procesarea informaiilor, la aranjarea n pagin, la echilibrul dintre imagine i cuvnt. S-a lucrat n plin atmosfer de concurs, simeam i noi tensiunea de a face alegerea cea mai bun. De aici i farmecul activitii. I-am observat pe tinerii reporteri cum devin din ce n ce mai pasionai de ceea ce fac, cum i perfecioneaz stilul de lucru, cum caut scnteia care s in treaz atenia cititorilor revistei. Cu toii ateptam lansarea fiecrui numr n format electronic. Serile s-au ncheiat foarte trziu, abia dup ce am rsfoit noul numr la cald. Unii i-au descoperit pasiuni, aptitudini n domeniu, alii au hotrt deja c jurnalismul este o opiune pentru carier; sigur s-au consolidat prietenii i experiena a devenit o amintire plcut.
La un an de la aceast ucenicie, suntem gata de a continua.
Din (IM)PULS-ul de la ONI, vrem s devin (IM)PULS-ul pentru performan.
Ne dorim s fie o revist de opinie i de informaie interdisciplinar. De la informatic s ajungem la ... infopoezie. De la informaie la infodivertisment. De la infoconcursuri la infointerviuri cu specialiti.
Pe scurt, inforevista noastr, a celor interesai de rolul INFO (informaticii / informaiei / infoeducaiei) n devenirea tinerei (info)generaii.
Punem un + pentru latura informativ i un alt + pentru cea infocreativ.
Aadar, dorim (info)succes noii serii a revistei (IM)PULS++!!! Ateptm colaboratori la fel de motivai ca ucenicii jurnaliti de la ONI!
Cu (IM)PULSUL INFO eti la curent cu ... Informaia. Noutile. Formulele. Oportunitile. prof. Ctlina Burlacu prof. Daniela Nistor, CNVA
5
PROBLEME REZOLVATE, CLASA A X-A
1. ASD(sfat: numele problemei nu are legtura cu textul sau rezolvarea acesteia ) Se spune c demult, n regiunea geto-dacilor, exista un biat numit Deceneu. ntre timp, acesta fiind foarte iste a fost numit de Burebista neleptul dacilor. Cu timpul, acesta a rezolvat diferitele probleme de care s-a lovit Burebista. Astfel Burebista a gsit o metoda prin care s-l elimine dintr-o singur suli aruncat pe conductorul inamicilor. Pentru asta, el trebuia s afle doar poziia acestuia. Burebista a aflat de la Deceneu c fiecare inamic are asociat cte o cifr i un numr de ordine, iar pentru a-l gsi pe lider trebuie parcurs irul inamicilor i eliminat unul cate unul mergnd de la stnga la dreapta din p n p lupttori pn rmane unul. n cazul n care se ajunge n captul din dreapta al irului de lupttori se continu numrtoarea mergnd n sens invers de la dreapta la stanga etc. Cerin S se determine cifra asociat liderului inamic i numrul su de ordine n irul iniial Date de intrare n fiierul asd.in se gsesc: - pe prima linie se afl pasul p cu semnficaiile din problem; - n cifre reprezentnd numrul inamicilor. ntre cifre nu exist spaii. Date de iesire Pe prima linie a fiierului asd.out se vor gsi cifra corespunztoare efului din tribul inamic i numrul su de ordine. Restricii i precizri - 1 < p < 1000; - Pentru 30% din teste numrul cifrelor este <10 - Pentru 40% din teste numrul cifrelor este >10 si <15000 - Pentru 30% din teste numrul cifrelor este >15 000 si <25000 Exemplul 1 asd.in asd.out 3 82345 8 1
Explicaie: 82345 pornind de la 8 spre dreapta se elimin a 3-a cifr. Se obine: 8245. 8245 se continu de la 4 spre dreapta se ajunge la ultima cifr (5) i se schimb sensul, a 3-a cifr fiind 4 care se elimin. Se obine: 825 825 pornind de la 2 spre stnga se ajunge la prima cifra (8) i se schimb sensul, a 3-a cifr fiind 2. Se obine: 85 85 se continu de la 5 i relund spre stnga (fiind ultima cifr se schimb sensul) se ajunge la prima cifr(8) . Se schimb sensul, urmnd ca a 3 a cifr s fie 5 care se elimin. Va ramane cifra 8. Aceasta are numrul de ordine 1 n irul iniial. Exemplul 2 asd.in asd.out 4 17438 7 2 Observaie: prima cifr din stnga are numrul de ordine 1, a doua cifr din stnga are numrul de ordine 2 etc. Problem propus de Vlad Radu- clasa a XI-a B CNMK Profesor coordonator: Neagu Violeta CNMK REZOLVRI PROBLEME 6
2. CHEIA Pentru a sparge sistemul de securitate al unui calculator, un hacker trebuie s-i construiasc un program care va trebui s sparg un numr n de nivele de securitate. Printr-un nivel de securitate se nelege o secven de numere indexate ce conine cheia ctre nivelul urmtor. Numrul de valori dintr-un nivel de securitate este egal cu valoarea cheii gsit pe nivelul anterior. Ca programul hackerului s gseasc cheia pentru nivelul de securitate urmtor, el trebuie s parcurg toat secvena de numere de pe nivelul curent ncepnd cu valoare de indice unu. n continuare se avanseaz n cadrul aceluiai nivel de securitate la elementul al crui indice se obine adunnd de fiecare data valoarea elementului curent la indicele pe care l deine aceast valoare. Ultima valoare parcurs din nivelul curent de securitate este cheia pentru a accesa nivelul urmtor. Cunoscnd aceste lucruri, hackerul tie c nu poate ajunge la cheia final, necesar pentru a sparge sistemul de securitate, fr a cunoate cheia iniial i numrul de nivele de securitate, aa c el a investigat n continuare i a reuit sa gseasc cele 2 valori. Pentru fiecare test, se asigura o soluie valid. Cerin: S se scrie un program C++ ce parcurge cele n nivele de securitate si obine cheia final.
Date de intrare: Pe prima linie din fiierul CHEIE.IN se vor gsi 2 numere naturale: n (reprezentant numrul de nivele de securitate) 1<=n<=40 si k (reprezentnd cheia iniial a primului nivel de securitate) 2<=k<=40. Pe a doua linie din fiier se vor gsi numerele naturale din cele n nivele de securitate (numerele vor fi cuprinse in intervalul [-40,40] / {0}.
Date de iesire: Pe prima linie a fiierului se va afia un singur numr k, ce va reprezenta cheia ultimului nivel de securitate. "Pentru a reui in via e foarte simplu. Lucrai tot timpul. S nu dai niciodat atenie orei. S nu avei pendul n biroul sau laboratorul dvs. S nu prsii o lucrare pe care nu ai terminat-o. Nu munca omoar ci sngele ru." ( T.A. Edison ) 7
Exemple: CHEIE.IN CHEIE.OUT EXPLICATII OBSERVATII 3 5 2 2 2 4 -3 3 1 4 -2 1 2 10 -1 10 Numrul de nivele este 3. Cheia iniial este 5, deci primul nivel de securitate va fi: 2 2 2 4 -3,
Aadar, cheia nivelului 2 este 4. Nivelul 2 de securitate: 3 1 4 -2. Cheia este 4, deci nivelul 3 va fi 1 2 10 -1. Prin parcurgerea ultimului nivel se va obine cheia final, i anume: 10. Datele de intrare se consider valide astfel nct prin parcurgerea unui nivel de securitate nu se poate trece la nivelul urmtor fr determinarea valorii cheii!
4 4 3 2 -1 -1 1 2 1 3 2 100 -1 100 Cheia iniial este 4, deci primul nivel de securitate va fi: 3 2 -1 -1. Cheia ctre nivelul 2 este 2, deci nivelul 2 este: 1 2. Cheia ctre nivelul 3 este 2, deci nivelul 3 este: 13. Cheia ctre nivelul 4 este 3, deci nivelul 4 este: 2 100 -1, deci cheia finala este 100.
Problema propusa de Jipa Radu- clasa a XI-a B, CNMK Profesor coordonator: Neagu Violeta
Rezolvare #include<iostream.h> #include<fstream.h> int v[450],n,k; fstream f("cheia.in",ios::in); fstream g("cheia.out",ios::out); int main() {int x,i,j; f>>n>>k; for (i=1;i<=n;i++) {for (j=1;j<=k;j++) f>>v[j]; x=1; for (j=1;j<=k-1;j++) x=x+v[x]; k=v[x];} cout<<k; f.close(); g.close(); getch(); return 0;}
"O calitate a omului, care nu mi se pare foarte important este aceea de a persevera. Adesea, n activitatea omeneasc esenial este inteligena. Posibilitile nelimitate ale inteligenei umane se pot ns dezvolta numai printr-o continu perseveren. Niciodat s nu uitai c a ncerca nu este totul. Nu trebuie s lsai nicicnd la jumtatea drumului ceea ce ai nceput ci trebuie s mergei ntotdeauna nainte, pn la capt" ( H. Coand )
Pentru a putea ntrebuinta calculatorul la studiul problemelor concrete, omul e obligat s invete sa gandeasca exact i abstract. Grigore Moisil 8
PROBLEME PROPUSE
1. (*)Pentru orice numr natural nenul n, definim n! . Prin convenie, 0!=1. Scriei un program eficient care citete de la tastatur un numr natural nenul n de cel mult 9 cifre i afieaz pe ecran ultimele dou cifre nenule de la sfritul numrului n!. 2. (*)Scriei un program eficient din punct de vedere al timpului de execuie i al spaiului de memorie, care citete de la tastatur un numr natural nenul n, cu cel mult 9 cifre i care afieaz pe ecran cel de al n+lea termen din irul : 0, 0,1, 0,1,2,2, 0,1,2,3,3,3, 0,1,2,3,4,4,4, 0,1,2,3,4,5,5,5,5,5,... 3. (*)Se citesc de la tastatur numere naturale cu cel mult 9 cifre, pn la citirea numrului 0. S se afieye pe ecran cel mai mare numr citit, care are cifrele ordonate (cresctor sau descresctor). Dac nu exist un astfel de numr, se va afia mesajul :Nu exista!. 4. (**)Scriei un program care citete din fiierul text Numr.in o fracie zecimal i o scrie n fiierul Numr.out sub forma unei fracii ordinare. Exemplu1: Exemplu2: Numar.in Numr.out Numar.in Numr.out 2,(5) 23/9 5 5/1 5. (**)Spunem c un numr b poate nghii un numr a dac numrul a se regsete n numrul b. Se citesc din fiierul text Numere.in , n aceast ordine b,n i apoi n numere naturale nenule, cu cel mult 9 cifre. S se afieze pe ecran, cte numere naturale dintre cele n numere citite, pot fi nghiite de numrul b. Numerele n i b sunt numere natural nenule, cu cel mult 9 cifre fiecare. 6. (**)Fiind dat un ir x1x2 . . . xm, o subsecven a este un ir z1z2 . . . zk pentru care exist irul de indici i1 < . . . < ik astfel nct . Gsii cea mai lung subsecven comun a irurilor x1x2 . . . xm i y1y2 . . . yn. 7. (***)Se dau dou iruri de lungimi m si n. S se determine costul minim al operaiilor de editare necesare pentru a transforma un ir n cellalt, prin adugarea / tergerea / schimbarea unui caracter. (Obs: schimbarea are sens dac costul < adugare + tergere). Datele de intrare se citesc din fiierul Cost.in iar rezultatul se va afia pe ecran. De pe primele dou linii ale fiierului de intrare se citesc cele dou iruri: S 1 i S 2 (S 1 de lungime m i S 2 de lungime n). De pe a treia line a fiierului de intrare se citesc trei numere naturale nenule cu cel mult 3 cifre fiecare, reprezentnd respectiv : costul operaiei de adugare a unui caracter, costul operaiei de tergere a unui caracter i costul operaiei de schimbare a unui caracter. 8. (***)Se consider un triunghi de numere naturale format din n linii. Prima linie conine un numr, a doua, dou numere,, ultima n numere. Cu ajutorul acestui triunghi se pot forma sume de numere n felul urmtor: - se pornete cu numrul din linia 1; - Succesorul unui numr se afl pe linia urmatoare plasat sub el (aceeai coloan) sau pe diagonal la dreapta (coloana crete cu 1). Care este cea mai mare sum care se poate forma astfel i care sunt numerele care o alctuiesc? Exemplu: n=4 2 3 5 6 3 4 5 6 1 4
Se pot forma mai multe sume: s1=2+3+6+5=16 s2=2+5+4+1=12 s3=2+3+6+6=17 suma maxim
Cum a iesit Bill Gates din Romania ? Cu Ctrl + Alt + Del 9
9. (***)Avnd n vedere dezvoltarea masiv a agriculturii preconizat pentru anul 2010, miliardarul iepura Petit Dodo Lapin a cumprat n Insula Mare a Brilei un imens teren agricol de form ptrat, cu aria egal cu 100000000 pogoane, pe care va planta morcovi. Pentru demararea lucrrilor agricole, Lapin a fcut un mprumut (rambursabil n 20 ani iepureti) la Bank Of Ceylon (singura banc la care dobnda este mai mic de 50% pe an!) Datorit mprumutului primit n trane, iepuraul va plantat morcovii pe rnd, pe parcele ptrate, avnd laturile paralele cu axele de coordonate. Interioarele ptratelor plantate sunt disjuncte! Datorit disponibilizrilor masive, numrul delicvenilor a crescut exponenial n ultimul an iar Petit Dodo Lapin se ateapt ca terenul cultivat de el s fie n atenia prdtorilor! Prin urmare, iepuraul i-a propus s instaleze un sistem ultramodern de supraveghere cu care s poat urmri zi i noapte, parcelele cultivate de el. n urma proiectului efectuat de Institutul de Proiectri , s-a hotrt ca sistemul de supraveghere s fie instalat n originea sistemului de coordonate (n punctul O(0,0)). Din punctul de control se poate vedea o parcel dac exist cel puin dou puncte distincte de coordonate ntregi, situate pe o latur a ptratului corespunztor parcelei, astfel nct triunghiul determinat de originea sistemului de coordonate i acele dou puncte s aib interiorul disjunct cu toate celelalte parcele cultivate cu morcovi. Se cunosc numrul n a parcelelor (ptrate) cultivate de Petit Dodo Lapin, precum i coordonatele colului stnga sus i a colului dreapta jos ale fiecrui ptrat, Coordonatele sunt raportate la un sistem ortogonal cu originea n punctul O(0,0). Cerin Scriei un program care s determine numrul parcelelor pe care miliardarul iepura le poate urmri cu sistemul de suraveghere precum i aria suprafeei totale ocupate de parcelele vizibile din punctul de amplasare al sistemului de supravehere ( originea sistemului de coodonate). Date de intrare Fiierul de intrare Lapin.in conine pe prima linie un numr natural n, reprezentnd numrul de parcele ptrate plantate de bogatul iepura. De pe fiecare din urmtoarele n lini ale fiierului de intrare se citesc cte 4 numere naturale, reprezentnd coordonatele colului stnga sus i a colului dreapta jos a unui ptrat pe care vor fi plantai morcovi. Date de ieire Fiierul de ieire Lapin.out va conine dou numere naturale reprezentnd numrul parcelelor vizible din punctul de amplasare al sistemului de supraveghere i aria suprafeei ocupate de acestea, scrise pe linii diferite. Restricii i precizri: 0<=n<=1000; Coordonatele colurilor ptratelor sunt numere naturale nenule, mai mici sau egale cu 10000.
Un program pentru calculator face ceea ce ii spui tu sa faca, nu ceea ce vrei tu sa faca. La originea oricarei erori care este atribuita computerului vei gasi cel putin doua greseli umane, incluzand- o pe aceea de a da vina pe computer. Daca constructorii ar face constructiile in felul in care programatorii concep programe, atunci prima ciocanitoare care ar veni, ar distruge civilizatia. Erorile nedetectabile sunt infinite in varietate, spre deosebire de erorile detectabile care sunt limitate prin definitie. Un afisaj digital furnizeaza informatii gresite cu o precizie mai mare decat a fost posibil anterior. 10
O Prima parcel are coordonatele colului stnga sus (3,8) i coordonatele colului dreapta jos (4,7); A doua parcel are coordonatele colului stnga sus (5,7) i coordonatele colului dreapta jos (7,5); A treia parcel are coordonatele colului stnga sus (8,6) i coordonatele colului dreapta jos (9,5); A patra parcel are coordonatele colului stnga sus (10,5) i coordonatele colului dreapta jos (12,3); A cincea parcel are coordonatele colului stnga sus (9,11) i coordonatele colului dreapta jos (12,8); Sunt vizibile primele 4 parcele. Suma ariilor parcelelor vizibile este : 4+9+4+9=26 12 11 10 9 8 7 6 5 4 3 2 1 0 1 2 3 4 5 6 7 8 9 10 11 12 Probleme propuse de profesor Balacea Georgeta-Iulia, Colegiul Naional Al.I.Cuza Galai
"tiina puin i face pe oameni pretenioi, n timp ce tiina mult i face modeti, aa dup cum spicele goale i nal spre cer capetele lor trufae, n timp ce spicele pline se apleac spre pmnt sub greutatea lor" ( Leonardo da Vinci )
11
PROBLEME REZOLVATE, CLASELE XI-XII
1. Reele de calculatoare O companie deine mai multe reele formate din n calculatoare. Intre calculatoarele reelei exist un numr total de m legturi directe, astfel nct n cadrul aceleiai reele este posibil comunicarea direct sau indirect ntre oricare dou calculatoare. Se preconizeaz atacul iminent al unui hacker care va ntrerupe una dintre legaturile directe dintre dou calculatoare dintr-o reea astfel existnd posibilitatea ca reeaua vizat s nu mai funcioneze la parametrii optimi. O reea este vulnerabil dac exist cel puin o pereche critic de calculatoare care nu vor mai putea comunica direct sau indirect. Numrul de perechi critice dintr-o reea se numete Cnumber. Rolul administratorului reelelor este s determine cte astfel de reele vulnerabile deine compania i care este valoarea maxim pe care o poate avea Cnumber. Date de intrare Prima linie a fiierului de intrare retele.in contine numrul n al calculatoarelor din reele (fiecare calculator se identific printr-un numr natural din intervalul [1,n]) i numrul m al legturilor directe dintre calculatoare. Fiecare dintre urmtoarele m linii va conine cte dou numere ntregi x i y cu semnificaia: exist o legatur direct ntre calculatoarele identificate prin x i y. Date de ieire Fiierul de ieire retele.out va conine dou numere naturale reprezentnd numrul de reele vulnerabile i valoarea maxim pentru CNumber Restricii i precizri: 1 s n s 100 retele.in retele.out 16 14 1 2 1 4 2 4 4 5 5 6 5 7 6 7 6 15 8 9 8 10 9 10 11 12 12 13 3 14 3 2 Rezolvare #include<fstream.h> #include<conio.h> int a[100][100],n,m,viz[100],gasit; int wiz[100]; int nrc; //pastreaza numarul componentei conexe void df(int nod) { wiz[nod]=1; for(int k=1;k<=n;k++) if(a[nod][k]==1&&wiz[k]==0) df(k);} void linie(int l, int &d) //determina daca nodul l este extremitatea unei muchii care nu apartine unui ciclu {for(int i=1;i<=n;i++) if(a[l][i]==1) {for(int j=1;j<=n;j++) wiz[j]=0; a[l][i]=a[i][l]=0; df(l); Nu exista limbaj in care sa fie cat de cat dificil sa se scrie un program prost.
2. STAII Infamul Overmind al zergilor a fost distrus i locul de origine al protossilor din Shakuras st acum n ruine i fumegnd. Ca Executor i comandant al forelor Protoss rmase tu trebuie acum s reuneti populaia neputincios de protossi i s i salvezi de zergii care nc ocup cu nepsare pmnturile din Shakuras. Obiectivul tu este de a prelua controlul unei baze principale a civilizaiei Tassadariana i va trebui s te foloseti de staiile de emisie recepie pentru c doar acestea ii pot indica baza principal. Exist perechi de staii de emisie-receptie care emit i receptioneaz n mod direct semnale. Intre doua perechi de staii x i y care comunic direct timpul de emisie este t . Semnalele la doua staii pot ajunge fie direct fie indirect prin intermediul altor staii. Evident, pot exista staii situate n baze diferite care nu vor putea comunica semnale. Staiile care nu emit i nu primesc semnale sunt lipsite de importan strategic. Vei putea determina o baz principal tiind c n Ziua Q toate staiile vor ncepe s emit astfel nct fiecare staie va transmite un mesaj tuturor celorlalte staii din interiorul bazei n care se afl (dou staii se gsesc n interiorul aceleiai baze dac sunt capabile sa-i transmit informaii direct sau indirect). Semnalele ntre dou staii vor fi transmise pe traseele de comunicaie care necesit cel mai puin timp i se vor transmite n ambele sensuri. Datorit bruiajului nu se vor emite concomitent mai multe semnale n interiorul aceleiai baze ci n mod succesiv astfel nct pentru a-i comunica informaii oricare doua staii dintr-o baza se va consuma o perioada de timp T. O baz principal va fi indicat de o valoare minim a lui T. Va trebui sa gaseti aceast valoare. Date de intrare Fiierul statii.in conine un numr natural n reprezentnd numrul de staii de emisie-recepie. In continuare, pe linii diferite se vor gsi triplete de numere naturale reprezentnd perechile de staii x i y i timpul t de emisie de la x la y sau de la y la x Date de ieire In fiierul statii.out se va scrie numrul cerut reprezentnd valoarea minima a lui T. Daca nu exist un astfel de numr se va scrie 0. Restricii i precizri 1<=n<=100 numr natural 1<=t<=3000 numr natural Numrul de baze poate fi cel puin 1 i cel mult n.
Este mai usor sa adaptezi specificatia la program decat viceversa.
if((a[nod][k]!=pinf)&&(k!=nod)&&(viz[k]==0 )) dfmr(k); } void genarare_matrice_drumuri_optime() {for(int k=1;k<=n;k++) for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) if(a[i][j]>a[i][k]+a[k][j]) a[i][j]=a[i][k]+a[k][j]; } void main() {int x,y; citire_cost(); genarare_matrice_drumuri_optime(); for(int nod=1;nod<=n;nod++) if(viz[nod]==0) //se incearca parcurgerea numai daca un nod nu a fost deja parcurs {nrc++; dfmr(nod);} long s, min=pinf;; int k,l, temp[101]; for(int i=1;i<=nrc;i++) {s=0;k=0; for(int j=1;j<=n;j++) if(viz[j]==i) temp[++k]=j; for(j=1;j<=k;j++) for(l=1;l<=k;l++) s=s+a[temp[j]][temp[l]]; if(s<min&&s!=0) min=s; } fstream g; g.open("statii.out",ios::out); g<<min; g.close(); }
Probleme propuse de prof. Muunoiu-Novetschi Mona, Colegiul Naional M.Koglniceanu Galai
"Un bun profesor cnd i nva pe alii, nva i el." ( P.L. Kapia )
14
PROBLEME PROPUSE CLASELE XI-XII
1. (*)De ziua ndrgostiilor elevii clasei a 11-a se hotarasc ca la bal s formeze la primul dans ct mai multe perechi. Pentru aceasta nu vor ine cont de simpatiile existente, ci vor forma perechile n modul urmtor: toi elevii se vor aeza pe o singur linie. Prima fat din stnga i primul biat din dreapta formeaz prima pereche apoi urmatoarea pereche va fi format dintr-un baiat din stnga i o fat din dreapta i aa mai departe pn nu se mai pot forma perechi. S se afieze perechile formate i elevii rmai. Datele se citesc din fiierul text Valy.in : De pe prima linie a fiierului se citete numrul n de elevi iar de pe urmtoarele n linii, numele i sexul. Datele de ieire se vor scrie n fiierul Valy.out. Exemplu : Valy.in Valy.out 10 anca f lili f adi b dana f oana f vali b cristi b gina f mimi f gigi b anca gigi adi mimi lili cristi vali gina raman perechile: dana f oana
2. (*)Se citete de la tastatur un numr natural n i apoi n numere naturale. a) S se formeze cu numerele citite o list liniar simplu nlnuit. b) S se partiioneze irul de numere citite ntr-un numar minim de subiruri strict crescatoare. Exemplu : Pentru n=9 , i numerele 9 4 5 2 10 6 3 8 6 Se obtin trei subiruri: 9 10 4 5 6 8 2 3 6 3. (*)Se citesc din fiierul text Liste.in numere ntregi . a. S se creeze o list liniar dublu nlnuit cu numerele citite. b. S se insereze ntre oricare dou elemente ale listei create la punctul (a) media artitmetic a acestora. S se afieze pe ecran elementele listei astfel modificate. Exemplu: Liste.in 2,9,12,6,1 se va afia : 2,5.5,9,10.5,12,9,6,3.5,1 4. (**) Fie n un numr natural nenul i k un numr natural, mai mic sau egal dect 20.. S se calculeze lg(n) cu k zecimale exacte. 5. (**) Bisericue In clasa a XI-a A sunt n elevi ( emineni), identificai prin numere de la 1 la n (n45). Fiecare elev are printer ceilali elevi ai clasei, prieteni cu care comunic mai bine. Acestora le transmite o brf imediat dup ce l afl. Dac elevul i transmite o brf elevului j, nu este obligatoriu ca elevul j s comunice la fel cu elevul i! (Relaia Transmite brf nu este reflexiv i nici simetric. Ajutai dirigintele clasei s determine numrul minim de bisericue de elevi care se pot forma cu elevii "Timpul de care dispunem din abunden odat pierdut, nu mai este niciodat regsit."( B. Franklin )
15
clasei a XI-a A, astfel nct o brf transmis unui elev al bisericuei s poat fi transmis apoi tuturor elevilor grupului. Datele de intrare se citesc din fiierul Barfa.in . Acesta conine pe prima linie un numr natural n, reprezentnd numrul de elevi ai clasei. De pe urmtoarele n linii se vor citi date referitoare la elevii clasei: Astfel, de pe fiecare linie i, 1in se vor citi: Numrul r al relaiilor de forma : elevul i transmite brfa elevului j , urmat de r numere natural cuprinse ntre 1 i n, reprezentnd numrul de ordine al elevilor din clas crora i le transmite o brf. Numerele de pe o linie sunt separate printr-un spaiu. Datele de ieire se scriu n fiierul Barfa.out. Acesta conine o singur linie pe care este scris numrul grupurilor ce pot fi formate. Exemplu: Barfa.in Barfa.out 5 3 1 2 1 3 2 1 5 0 1 4 Explicaii : Sunt 5 elevi n clas; elevul 1 transmite o brf elevului 2; elevul 2 transmite o brf elevului 3; elevul 3 transmite dou brfe: elevilor 1 i 5; elevul 4 nu transmite brfe; elevul 5 transmite o brf elevului 4; Se pot forma 3 bisericue.
6. (**)Se citete din fiierul text Cuvinte.txt format din mai multe linii, un text alctuit din cuvinte formate din literele mici ale alfabetului englez, separate prin unul sau mai multe caractere albe. S se creeze un arbore binar de cutare care s cuprind numai cuvintele distincte din text. S se scrie n fiierul de ieire .Distincte.txt cuvintele din arbore, parcurs n preordine. Probleme propuse de prof. Georgeta Balacea, Colegiul Naional Al.I.Cuza 7. (***)Bond-James Bond. Agentul 007 se afla ntr-o misiune foarte dificil. Trebuie s se strecoare n baza teroritilor, repectiv s elibereze din nchisoare ct mai muli ostatici. Se tie ca inchisoarea are forma unui triunghi echilateral care are toate ncperile triunghiuri echilaterale de latur 1, ca n figur. Pe fiecare latur a cldirii exist exact n ncperi. Fiecare perete al ncperilor unei astfel de cldiri are o u, iniial deschis. n fiecare ncpere exist un numar de ostatici. Agentul 007 tie c poate ptrunde n temni prin unul din colurile nchisorii, oricare ar fi acesta ns se poate deplasa n nchisoare de la vrful de intrare spre baza triunghiului, eventual lateral, indiferent din ce vrf pleac. Dup prsirea unei ncperi din care au fost luai banii, toate cele 3 ui ale acesteia se nchid automat i nu mai pot fi deschise. Cerin: S se determine numrul maxim de ostatici pe care i poate elibera Agentul 007 i numrul de celule explorate. s1 s2 s3 s5 s4 s7 s9 s6 s8 16
Intrare: Fiier de intrare BOND.IN N numr natural nenul, reprezentnd dimensiunea cldirii; s 1 numr natural, reprezentnd numarul de detinuti din ncperea de pe primul rnd al cldirii; s 2 s 3 s 4 3 numere naturale, reprezentnd numarul de detinuti din ncperile de pe cel de- al doilea rnd al cldirii; s 5 s 6 s 7 s 8 s 9 5 numere naturale, reprezentnd numarul de detinuti din ncperile de pe cel de- al treilea rnd al cldirii; ... s N(N-2)+2 ... s N*N 2*N-1 numere naturale, reprezentnd numarul de detinuti din ncperile de pe cel de-al N-lea rnd al cldirii. Ieire: Fiier de ieire: BOND.OUT numar_detinuti_eliberati suma maxim colectat. nr numrul de ncperi vizitate. Restricii - 1 s n s 50 - s i sunt numere naturale, 0 s s i s 250 i=1,2,,N; Exemplu BOND.IN BOND.OUT 3 102 1 7 8 10 40 5 11 13 19 9 Explicaie Problem propus de prof. Lucian Dimitrievici, Colegiul Naional M.Koglniceanu 8. (***)Latime S presupunem c dorim s desenam un arbore binar pe o foaie de matematic (n care am numerotat liniile de sus n jos i coloanele de la stnga la dreapta). Desenul trebuie s respecte urmatoarele reguli: 1. Nodurile situate pe acelai nivel trebuie s fie desenate pe aceeai linie. Nivelul rdacinii arborelui este 1 i rdcina va fi desenat pe linia 1. Fii rdcinii constituie nivelul 2 i vor fi desenai pe linia 2. Fiii fiilor rdcinii constituie nivelul 3 i vor fi desenai pe linia 3 etc. 2. Pe fiecare coloan poate fi desenat un singur nod. 3. Nodurile din subarborele stng al unui nod trebuie s fie desenate n coloanele din stnga coloanei n care este desenat nodul respectiv, iar nodurile din subarborele drept trebuie s fie desenate n coloanele din dreapta coloanei n care este desenat nodul respectiv. 4.Orice coloan cuprins ntre coloana cea mai din stnga n care este desenat un nod i coloana cea mai din dreapta n care este desenat un nod trebuie s conin un nod. S notam cu L cea mai din stnga coloan n care este desenat un nod i cu R cea mai din dreapta coloana n care este desenat un nod. Limea arborelui binar este R-L+1. Exemplu:
1
8 10
5
40
13
9 11 19
17
Observati c limea acestui arbore binar este 19. Putem calcula limea pe fiecare nivel ca fiind diferena dintre numarul celei mai din dreapta coloanei care conine un nod de pe nivelul respectiv i numrul celei mai din stnga coloanei care conine un nod de pe nivelul respectiv +1. Arborele din exemplu are 6 niveluri, limile nivelurilor fiind 1, 13, 18, 18, 13, 12. Cnd desenam un arbore binar dup aceste reguli ne intereseaz i limea nivelului cu lime maxim i care este acest nivel. Daca exista mai multe niveluri cu latimea maxima, ne intereseaz cel cu numarul cel mai mic. In exemplul de mai sus limea maxim a unui nivel este 18 i ea este atins pe nivelurile 3 si 4, deci nivelul care ne intereseaz este 3. Cerin Dat fiind un arbore binar, scriei un program care s determine limea maxim a unui nivel n arborele desenat dup regulile de mai sus i nivelul cu numrul cel mai mic care are aceast lime. Date de intrare Fiierul de intrare latime.in conine pe prima linie un numr natural N reprezentnd numrul de noduri din arbore. Nodurile sunt numerotate de la 1 la N. Fiecare dintre urmatoarele N linii conine cte 3 numere ntregi separate prin cte un spaiu x s d cu semnificatia "fiul stng al nodului x este s, iar fiul drept al nodului x este d". Dac un nod nu are fiu stang sau fiu dreptatunci s, respectiv d, pentru nodul respectiv va avea valoarea -1. Rdcina arborelui este nodul 1. Date de ieire Fiierul de ieire latime.out va conine o singur linie pe care se afl dou numere naturale separate printr-un singur spaiu niv lat cu semnificaia "cel mai mic nivel de lime maxim este niv, iar limea lui este lat". Restricii 1<=N<=1000 Exemplu latime.in latime.out 19 1 2 3 3 18 2 4 5 3 6 7 4 8 -1 5 9 10 6 11 12 7 13 -1 8 -1 -1 9 14 15 10 -1 -1 11 16 -1 12 -1 -1 13 17 -1 14 -1 -1 15 18 -1 16 -1 -1 17 -1 19 18 -1 -1 19 -1 -1 Problem propus de prof. Lucian Dimitrievici, Colegiul Naional M.Koglniceanu
18
9. (***) NU TE SUPRA FRATE! Andrei i Dorian sunt doi frai gemeni. Astzi este ziua lor de natere. Cnd s-au trezit, fraii au intrat ntr-o mare dilem: cum i vor mpri ei cadourile astfel nct s fie mulumii. tiind c fiecare cadou are o valoare (cuprins ntre 1 i 100 inclusiv) i c pot fi maxim 100 de cadouri, fiind i foarte buni la informatic, s-au hotrt s scrie un program care s-i ajute s-i mpart cadourile frete (sumele s fie cele mai apropiate posibil). Au reuit! Date de intrare: n fiierul cadou.in se gsesc informaiile referitoare la cadouri: pe prima linie numrul total de cadouri, pe urmtoarea linie calorile lor. Date de ieire: n fiierul cadou.out trebuie scrise dou sume care sunt cele mai apropiate, corespunztoare unei mpriri a cadourilor, pe a doua linie valorile corespunztoare cadourilor care nsumeaz prima sum gasit, pe a treia linie, valorile corespunztoare cadourilor care nsumeaz a doua sum gsit. Exemplu: Cadou.in Cadou.out 7 28 7 11 8 9 7 27 48 49 28 11 9 7 8 7 27 Problem propus de profesor Popescu Mdlina, Colegiul Naional Mihail Koglniceanu Galai, OLI-2008
PROBLEME REZOLVATE, CLASA A IX-A 1. NUMERE Ioana este elev n clasa a IX-a. Ei ii plac proprietile mai neobinuite ale numerelor. De exemplu, ea consider c 945 este un numr interesant deoarece este primul numar impar pentru care suma divizorilor este mai mare decat numrul nsui. Haidei s o ajutm pe Ioana s gseasc numere interesante, scriind un program care determin numrul care are cei mai muli divizori dintr-un interval dat . Atenie! Dimensiunea numerelor i marimea intervalului dat ne vor obliga s folosim un algoritm ct mai eficient! Date de intrare Din fiierul text Numere.in se citete un numr natural n (1n100). De pe urmatoarele n linii ale fiierului se citesc extremitile celor n intervale pentru care se dorete determinarea numrului cu cei mai muli divizori. Dac Li i Ls reprezint limita inferioar respectiv limita superioar a unui interval atunci 1LiLs1.000.000.000 i 0Ls-Li10.000. Date de ieire Pentru fiecare pereche de numere de pe liniile 2n+1 din fiierul intrare se vor scrie n fiierul de ieire Numere.out dou valori : NMAX NUMAR_DIVIZORI , reprezentnd numrul cu cei mai muli divizori (NMAX) i numrul lui de divizori (NUMAR_DIVIZORI). Dac ntr-un interval exist mai multe soluii, se va afia numrul cel mai mic( primul numr din interval, cu proprietatea dat) Exemplu: Numar.in Numr.out 5 1 10 1000 1000 2000 10000 100 590 999999900 1000000000
6 4 1000 16 75 60 64 360 24 999999900 192 Problem propus de prof. Ionela Fotache, Liceul Teoretic Dunrea, OLI-2009 19
Rezolvare /*se calculeaza numarul de divizori ai numarului natural n astfel: calculeaza toate puterile numerelor prime din descompunerea lui n si inmulteste de fiecare data la variabila p puterea respectiva plus 1 se parcurg toate numerele intre cele doua capete si vom retine de fiecare data numarul cu numar maxim de divizori pana in acel moment programul devine foarte rapid daca parcurgem numerele prime pana la sqrt(n) deoarece intre sqrt(n)=1 si n poate fi maxim un divizor prim al lui n la puterea 1 -daca ar fi 2 atunci produsul acestora l-ar depasi pe n*/ #include<fstream.h> #include<stdio.h> #include<math.h> #define integer long int integer numardivizori(integer n) {integer p=1, j,alfa=0; while (n%2==0) {n/=2;alfa++;} p*=(alfa+1); for(j=3;j<=sqrt(n)&& n!=1;j+=2) {alfa=0; while(n%j==0) { n/=j; alfa++;} p*=(alfa+1); if (n==1)break;} if (n>1) p*=2; return p;} void main() {integer m1,m2, i,j,n,nbun,ndivizori,aux,k=0; FILE *fin, *fout; fin=fopen("divizori16.cpp","r"); fout=fopen("divizori26.cpp","w"); fscanf(fin,"%ld\n",&n); fin>>n; for(i=0;i<n;i++) {fscanf(fin,"%ld %ld\n",&m1,&m2); nbun=m1; ndivizori=numardivizori(nbun); for(j=m1+1;j<=m2;j++) {aux=numardivizori(j); if(aux>ndivizori) {nbun=j;ndivizori=aux;} } fprintf(fout,"%ld %ld\n",nbun,ndivizori);} fclose(fin); fclose(fout);}
2. COMOARA Profesorul Plesneal, de la coala de Farmece i Vrjitorii de la Hogwards, a ascuns ( pentru zile negre, de recesiune economic) n Pdurea Interzis o comoar ce depea cu mult averea oricrui alt vrjitor ! La sfritul anului colar ( vrjitoresc ) s-a gndit s ofere ca premiu o parte din monedele din comoar, acelui elev din anul IV (ultimul an de studiu de la Hogwards) care va putea s o ctige. Harry Potter s-a hotrt s participe i el la concurs! Comoara lui Plesneal era format din n grmezi de monede ( fiecare grmad i era format din m[i] monede). Elevul care dorea s ctige premiul, trebuia s respecte regulile impuse de profesor : 1) Monedele trebuiau crate de exact n spiridui ; 2) Elevul care dorea s ctige premiul trebuia s aleag (una sau mai multe grmezi) din cele n grmezi din comoar astfel nct: a. Dac a ales o grmad, trebuie s ia toate monedele din acea grmad; b. Numrul totasl de monede rezultat din toate grmezile alese trebuie s se mpart exact la n; 3) Numrul total de monede din grmezile alese trebuie s se fie cel mai mare posibil. Dac se dau numrul n de grmezi de monede, numrul m[i] de monede din fiecare grmad (1 i n s s ), ajutai-l pe Harry Potter s determine mulimea grmezilor care trebuie alese astfel nct s poat ctiga premiul oferit cu mrinimie de Plesneal ! Datele de intrare se citesc din fiierul Comoara.in De pe prima linie a fiierului Comoara.inse citete numrul natural nenul n. tiai c ... primul program scris de Bill Gates a fost X i 0? 20
De pe urmtoarele n linii ale fiierului de intrare se citesc numere naturale nenule ( de pe linia i+1 se citete numrul m[i], reprezentnd numrul de monede din grmada i). Date de iesire se vor scrie n fiierul Comoara.out In fiierul de ieire Comoara.out se vor scrie grmezile alese, n ordinea cresctoare a numrului lor de ordine, cte una pe o linie. Restricii 1sns60 Exemple Comoara.in Comoara.out Explicaii 4 5 7 19 20 1 3 4
Sunt 4 grmezi de monede ( n=4) Grmada 1 are 5 monede, grmada 2 are 7 monede, grmada 3 are 19 monede, grmada 4 are 20 monede. Harry Potter va selecta grmezile : 1,3,4 ( va ctiga n total 44 monede) Problem propus de prof. Balacea Georgeta, Colegiul Naional Al.I.Cuza Galai OLI 2009 Rezolvare #include <fstream.h> int n,m[80],lj[80][80],a[80][80],st[80]; void main() { fstream f("comoara.in",ios::in); fstream g("comoara.out",ios::out); f>>n; long int i,j,h,k,max,n1; for (i=1;i<=n;i++) f>>m[i]; f.close(); for(j=1;j<=n;j++) for(i=0;i<n;i++) {a[i][j]=-1; if (m[j]%n==i) a[i][j]=m[j]; h=i-(m[j]%n); if(h<0) h+=n; for(k=1;k<=j-1;k++) if(a[h][k]>0 && a[i][j]<a[h][k]+m[j]) { a[i][j]=a[h][k]+m[j]; lj[i][j]=k;}} max=-1;h=0; for(i=1;i<=n;i++) if(a[0][i]>max) {max=a[0][i];h=i;} j=h;i=0;n1=0; do {n1++; st[n1]=j; h=i; i=i-m[j]%n; if(i<0) i+=n; j=lj[h][j];} while (j!=0); for(i=n1;i>=1;i--) g<<st[i]<<endl; g.close();}
21
PROBLEME PROPUSE
1. (*)Mdlina ndrgete mult matematica. De aceea, ea vine mai rar la ore. Cnd, ntr-o zi, s-a intamplat s fie prezent, Zna Cea Buna a Matematicii i-a oferit n dar un numr natural nenul. Zna are o baghet fermecat : cnd atinge o dat un numr, acesta se transforma n alt numr natural, obinut prin nsumarea ptratelor cifrelor numrului iniial. Astfel, dac Madalina a primit n dar numrul 314, acesta devine 9+1+16=26 dup o atingetre de bagheta. La o noua atingere, numrul obinut se transform, noul numr fiind suma cuburilor numrului anterior. Deci, la o noua atingere, 26 devine 4+36=40, apoi 16. Zna atinge numerele pn cand se obine un ptrat perfect. Scriei un algoritm care s citeasc numrul pe care l primete Mdlina n dar i care s afieze , pe rnd, numerele obinute la fiecare atingere a baghetei fermecate. 2. (*)Se citesc de la tastatur n-1 numere naturale distincte, cuprinse intre 1 si n, n 10000000 s . S se determine care numr natural (mai mare sau egal cu 1 i mai mic sau egal cu n) nu a fost citit. 3. (*)Se citesc de la tastatur n numere naturale , 1n10000000. S se scrie un program care se determine ultima cifra a sumei factorialelor numerelor citite. 4. (**)Andrei dorete s gseasc parola pe care profa de info a instalat-o pe serverul liceului. Aceasta era cel mai mare numr format din cifrele de control ale tuturor numerelor naturale mai mici sau egale dect un numr natural n, stabilit la nceputul anului de Consiliul Profesoral. Scriei un algoritm care s citeasc numrul n i care s afieze parola corect. 5. (**)Ionu, elev in clasa a 9-a A, realizeaza un program pentru urmatorul joc: se gndete la un numr natural cuprins intre 1 si 2000000000. Calculatorul trebuie s ghiceasc numrul cu un numr ct mai mic de ntrebari. Calculatorul continu pe baza rspunsurilor date de elevul Ionu: mai mic, mai mare. 6. (**)S se scrie un program care s afieze toate numerele perfecte , mai mici sau egale decat un numr natural n, unde n are cel mult 9 cifre. Un numr natural este perfect dac este egal cu suma divizorilor si proprii plus 1. Exemplu: 6=1+2+3 este numr perfect. Probleme propuse de prof. Balacea Georgeta, Colegiul Naional Al.I.Cuza 7. (***)Joc circular La ora de sport doamna nvtoare a mbrcat elevii clasei sale cu tricouri numerotate de la 1 la 2*n, i-a aezat n cerc i a nceput un joc n care i numr din p n p i i elimin pe rnd cte unul . Elevii sunt eliminai pe rnd astfel : mai nti elevii cu tricouri cu numere pare n ordine crescatoare, iar apoi elevii cu tricouri impare n ordine descresctoare. Precizai cum ordinea n care doamna nvtoare a eliminat elevii clasei sale. Restricii 2 s ns15; 1sps15; Exemplu : n=4, p=3 2 3 8 4 1 5 6 7 Problem propus de prof. Magdalena Grigore Colegiul Naional Al.I.Cuza Galai 8. (***)Iepura De PATE, elevii claselor a IX-a din judeul Galai, au hotrt s duc n dar btrnilor de la Cminul de btrni dulciuri i portocale. Fiecare elev i dintre cei n elevi care au participat la aceast aciune, a adus la centrul de colectare cte o saco, care conine un numr de p i portocale i pentru a fi luat n eviden, primete numrul de ordine i. Portocalele trebuie ns s fie redistribuite, astfel nct n fiecare dintre cele n pungi ce vor fi druite btrnilor s se gseasc Daca computerele devin prea puternice, le putem organiza intr-un comitet asta o sa le termine.
22
exact acelai numr de portocale (pentru ca btrneii s nu se certe ntre ei)!. In concluzie, s-a hotrt ca s se selecteze doar acele sacoe cu proprietatea c suma numrului de portocale pe care le conin se poate mpri exact la cele n pungi cu daruri care se vor duce btrnilor. Sacoele selectate vor trebui s fie aduse la centrul de colectare a darurilor de ctre elevi cu numere de ordine consecutive. Determinai grupul de sacoe care vor fi selectate. Dac problema are mai multe soluii, alegei o soluie pentru care numrul de portocale din fiecare pung cu daruri este maxim. Portocalele care rmn nedistribuite, vor fi druite profesorilor de informatic (drept pag, s se mai ndulceasc). Determinai cte portocale vor primi profesorii corupi! Numrul n precum i numrul de portocale din fiecare saco adus de elevi se citesc din fiierul text Iepuras.txt 9. (***) Campanie electoral In campania electoral pentru alegerile prezideniale din anul 30004 din MORANIA, o mic rioar din insula SPERANA, Gyany Cabeli, candidat independent, se hotrte sa-i focalizeze oferta pe populaia care are venituri relativ mici. Astfel, el promite celor care l vor vota c le va mri salariul, ntr-un mod spectaculos. Dup statisticile realizate, s-a observat c N persoane nclin s voteze cu candidatul CABELI. Astfel, dac persoana i (dintre cele N persoane ) are salariul Si(calculat n EURO), dup mrire, va avea salariul Si N ( Si la puterea N). Totui, dup consultarea experilor financiari, candidatul a realizat c nu va putea s-i in promisiunea, avnd n vedere c MORANIA nu este o ar foarte bogat. Pentru a rezolva aceast problem, fr a mini (n mod evident) electoratul, a adugat la oferta sa, faptul c va mri salariul doar acelora care, dup mrirea salarial, vor putea sa-i mpart venitul , n mod exact, tuturor celor P pensionari din ar. Avnd informaii exacte, din sondajele efectuate, relativ la numrul N de susintori ai lui Gyany Cabeli , salariul acestora i numrul P de pensionari, determinai care va fi numrul de votani ce vor beneficia de mrirea salarial. Exemplu: Pentru N=4( patru alegtori), P=25 (25 pensionari) i salariile : 15 12 5 10 se va obine rezultatul 3 . Restricii i precizri: - 2000000 1 s s N , N numr natural. - 100000 10 s s Si ,Si numr natural , N i s s 1 - P este numr natural , P 1000000 s Datele de intrare se citesc din fiierul text CAMPANIA.IN, n urmtorul format: De pe prima linie a fiierului de intrare se citesc, n ordine, numerele N i P De pe urmtoarele N linii se citesc salariile Si ale susintorilor lui Gyany Cabeli. Datele de ieire se vor scrie n fiierul text SPERANTA.OUT. Se va scrie n fiier numrul determinat( numrul de votani care vor beneficia de mrirea salarial) Problem propus de prof. Balacea Georgeta, Colegiul Naional Al.I.Cuza- OLI 2007 Galai
"Fr o mare perseveren nu exist nici talente, nici genii" ( D. Mendeleev )
23
PROBLEME REZOLVATE, CLASA A V-A
1. Se citte de la tastatur un numr natural n, n1000. Se citesc apoi pe rnd n numere naturale nenule, cu cel mult 9 cifre . S se afiezea perechile de numere prietene (citite consecutive). Dac nu exist nicio pereche de numere prietene, se va afia mesajul Fara prieteni !. Dou numere se numesc prietene dac suma divizorilor primului este egal cu celalalt i viceversa. Problem propus de elev Alexandru Mocanu, clasa a V-a, Colegiul Naional Al.I.Cuza Galai Profesor coordonator Balacea Georgeta #include<iostream.h> void main() {long a[1000],j,i,pa[1000],s,n,ok=0; cin>>n; for(i=1;i<=n;i++) cin<<a[i]; for(i=1;i<=n;i++) {s=0; for(j=1;j<=a[i]/2;j++) {if(a[i]%j==0) s=s+j;} pa[i]=s; s=0; for(j=1;j<=pa[i]/2;j++) {if(pa[i]%j==0) s=s+j;} if(s!=a[i]) pa[i]=0;} for(i=1;i<=n;i++) {if (pa[i]!=0) {cout<<'('<<a[i]<<';'<<pa[i]<<')'<<endl;ok=1 } if(!ok) cout<<Fara prieteni!<<endl;} 1. Melc Un melc parcurge o distan de l cm n fiecare secund. Dupa fiecare n secunde, melcul devine mai obosit, iar distana parcurs pe secund se njumtete. Scriei un program care citete numerele naturale l, n i t (t= durata total a deplasrii melcului exprimat n secunde) i care afieaz distana total pe care a parcurs-o melcul. Date de intrare Se citesc de la tastatur numerele naturale l ( distana pe care o parcurge melcul ntr-o secund la nceputul deplasrii sale) , n ( numrul de secunde dup care melcul obosete iar distana parcurs ntr-o secund se njumtete) i t ( durata total a deplasrii). Date de ieire Se va afia pe ecranul monitorului distana total parcurs de melc, cu dou zecimale exacte. Restricii 0< l, n, t <30000 Exemple Date de intrare Date de ieire Explicaii 7 3 8 35.00 Se citesc de la tastatur valorile : - l=7 ( la nceputul deplasrii melcul parcurge 4 cm pe secund) - n=3 ( dup fiecare 3 secunde melcul obosete iar distana parcurs de el ntr-o secund se njumtete) - t=8 ( melcul se deplaseaz timp de 8 secunde) - Distana total parcurs de melc n cele 8 secunde este de 35 cm. Problem propus de prof. Joc Genia, Colegiul Naional Al. I. Cuza - OLI 2009, clasa a V-a Rezolvare program melc; var n, t:integer; d,l:real; begin readln(l,n,t); 24
d:=0; while n<=t do begin d:=d+n*l; l:=l*0.5; t:=t-n; end; d:=d+t*l; writeln(d:10:2); end.
Probleme propuse 1. (*)Fiind dat un numr natural n cu cel mult 9 cifre, aflai cifra de pe pozitia k ( numaratoarea incepe de la dreapta spre stnga) Exemplu: pentru n=1256634 si k=3, se va afisa cifra 6 2. (*) Screi un program care determin numrul de zerouri cu care se termin se termina n!. Numrul n! este egal cu produsul tuturor numerelor naturale nenule mai mici sau egale cu n. 4!=1*2*3*4=24. Exemplu: n=15, n! se termin n 3 zerouri 3. (*) Fiind dat un numr natural cu cel puin 3 cifre i cel mult 9 cifre, afiai numrul format prin eliminarea primei i a ultimei sale cifre. Exemplu: Pentru n=786543 se va afia 8654 4. (**) Scriei un program care determin prima cifr nenul cu care se termin se termina n!. Numrul n! este egal cu produsul tuturor numerelor naturale nenule mai mici sau egale cu n. 4!=1*2*3*4=24. 5. (**) S se descompun un numr natural nenul cu cel mult 9 cifre n factori primi. S se afieze factorul prim care apare la puterea cea mai mic i factorul prim care apare la puterea cea mai mare. Exemplu : pentru n=4428 se va afia : 4428=2^2 * 3^3 * 41 41 3 6. (**) Se citesc de la tastatur numere naturale pna la citirea numrului 0. S se calculeze suma dintre primul numr citit, al treilea numr citit,.. i produsul dintre al doilea numr citit, al patrulea numr citit ... Nu se va ine cont de numrul 0 nici la sum nici la produs. Probleme propuse de prof. Balacea Georgeta, Colegiul Naional Al.I.Cuza 7. (***) Dolars Ptrel are n contul su N dolari. El afl de urmtoarea posibilitate de a-i mri veniturile: primete o cifr nenul c i trebuie s insereze cifra c oriunde n numrul N, astfel nct numrul rezultat s fie maxim posibil (contul lui mrindu-se considerabil ). Ajutai-l s-i dea seama n ce poziie trebuie s insereze cifra C, astfel nct s aib o sum ct mai mare n cont. Date de intrare De la tastatur se citesc N i c, cu semnificaia din enun. Date de ieire Pe ecran se va afia numrul maxim obinut prin inserarea cifrei c n numrul N. Restricii, precizri - N are cel mult 8 cifre - Cifra c este nenul 25
Exemplu: N = 472 c = 3 Se va afia: 4732 Explicaie: Numerele care se pot obine sunt 4723, 4732, 4372, 3472, maximul dintre acestea fiind 4732. Problem propus de Filip Cristian Buruian, student, la concursul INFO-CNVA, 2006 8. (***) Ctig Doi frai, Gigel i Bogdnel, au reuit s-i pun de-o parte ceva bnui din alocaie i au acum, Gigel o sum A iar Bogdnel o suma B (sumele sunt date n euro). Tatl lor, un bancher vestit, le propune urmatoarea afacere : dac vor lua nota 10 la tez la matematic, el le va da la fiecare o sum egal cu suma divizorilor comuni ai ptratelor valorilor A i B. Cei doi frai sunt mai degrab pasionai de fotbal dect de matematic, dar ideea unui ctig le surde. Ins, nainte de a se apuca de nvat pentru tez, ei vor s tie ce sum ar avea de primit, pentru a hotr daca se merit sau nu efortul. Cerin : Scriei un program care citete sumele A i B de la tastatur i afieaz suma pe care o va primi fiecare dintre frai, n cazul n care ar lua un mult-visat 10 la teza la matematic. Restricii i precizri 1sA,Bs200 Exemplu Date de intrare Date de iesire Explicatie A=5 B=10 31 Divizorii comuni ai lui 5 2 si 10 2 sunt : 1, 5, 25, iar suma lor este egala cu 31 A=14 B=21 57 Divizorii comuni ai lui 14 2 si 21 2 sunt : 1, 7, 49, iar suma lor este egala cu 57 A=5 B=8 1 Singurul divizor comun al lui 5 2 si 8 2 este 1 Problem propus de prof. Mirela Voinea la concursul INFO-CNVA, 2005
9. (***) Elevul Gygabyte LowSoft , din clasa a V-a , de ziua ndrgostiilor de informatic ( 17 februarie) , mparte daruri prietenilor si. LowSoft are foarte muli prieteni! S-a gndit s cumpere bomboane de ciocolat i s le mpart n mod egal prietenilor si. S-a gndit ca are numai 17 prieteni i cumpr 11 bomboane. Apoi, numrndu-i prietenii, i-a dat seama c erau de fapt 1717 copii, drept urmare mai cumpr nc 1111 bomboane. Numrnd din nou, vede c are 171717 prieteni deci cumpr 111111 bomboane, i tot aa, de n ori, pn cnd numr 17 ... 171717 copii i cumpr 11 ... 111111 bomboane. 2*n cifre 2*n cifre
Gygabyte Lowsoft se gndete s mpart bomboanele n felul urmtor : fiecare dintre cei 17 ... 171717 prieteni va primi un numr de bomboane egal cu suma urmtoarelor fracii: 2*n cifre 17 ... 1717 11 ... 1111 ... 171717 111111 1717 1111 17 11 + + + + . 2*n cifre Dac suma are n termeni, n citit de la tastatur , ajutai-l pe sracul Lowsoft s rspund la urmtoarele ntrebri: 1) Primete fiecare copil un numr ntreg de bomboane? 26
2) Cte bomboane primete fiecare copil? ( rspunsul va fi scris pe ecran, sub forma unei fracii ireductibile) Exemplu: Pentru n=2 : 1) Nu 2) 17 22
Restricii i precizri: Date de intrare: n- numar natural nenul, cu cel mult opt cifre. Problem propus de prof. Balacea Georgeta, Colegiul Naional Al.I.Cuza- OLI 2006 Galai
Clasa a VI-a, Probleme rezolvate
1. Seif Hacker-ul Bombonel a fost prins de serviciile de securitate i pentru a i se ierta faptele din trecut a fost obligat s nceap s lucreze pentru ei. Prima lui misiune este de a sparge o parol a unui seif ce deine informaii vitale cu privire la securitatea naional. Fiind un profesionist, acesta a aflat cteva informaii despre parol i anume c sunt doi pai ce trebuie urmai pentru a o afla. Primul este adunarea binar a n numere, iar al doilea este de a afla suma tuturor numerelor naturale de la 1 la rezultatul obinut n primul pas. Parola va fi reprezentat de suma obinut. Bombonel ns, a fost trimis ntre timp n alt misiune i te-a rugat pe tine, ca prieten al lui, s l ajui. Date de intrare: n fiierul hack.in se afl pe prima linie numrul n i pe urmtoarea linie cele n numere i desprite prin spaiu. Date de ieire: Pe prima linie a fiierului hack.out se va afla parola obinut dup parcurgerea celor 2 pai. Restricii: 1sn<2 31 1s i <2 15 hack.in Hack.out 3 45 52 3 351 hack.in Hack.out 4 110 5898 4438 902 1066530 Problem propus de catedra de informatic, CNVA- OLI 2007 Galai Rezolvare #include<fstream.h> int x, n, i; long s, c; void main() {fstream f("hack12.in", ios::in), g("hack12.out", ios::out); f>>n; for(i=1; i<=n; i++) {f>>x;s=s^x;} c=s*(s+1)/2; g<<c;f.close();g.close();} 27
2. Comoara Ascuns Pufosu, iepuraul temerar, dorete s-i ascund comoara (cei 100 morcovi gustoi) n seif. Pufosu ns nu poate s rein codul (format din caractere imprimabile) cu care deschide seiful! De aceea, s-a hotrt sa-l scrie n fiierul text Pufosu.txt astfel: In fiier sunt scrise mai multe numere ntregi, cuprinse ntre 20 i 200. Dintre acestea, selecteaz doar numerele supraperfecte, care reprezint codurile ASCII ale caracterelor din care este compus parola de deschidere a seifului. Afiai pe ecran parola cu care Pufosu i poate deschide seiful! Un numr N este SUPRAPERFECT dac suma S a divizorilor si (exceptand numarul insui) este mai mare dect N. Exemple de numere supraperfecte: 12<1+2+3+4+6; Date de intrare: n fiierul Pufosu.txt se afl pe prima linie numerele naturale cuprinse ntre 20 i 200. Date de ieire: Se afieaz pe ecran parola compus din caracterele ale cror coduri ASCII sunt numerele supraperfecte, dintre cele citite din fiierul de intrare, n ordinea n care au fost citite. Problem propus de profesor Georgeta-Iulia Balacea, Colegiul Naional Al.I.Cuza OLI 207 Galai Rezolvare #include <fstream.h> int suma_div(int nr) {int S=0; for (int i=1;i<=nr/2;i++) if(nr%i==0) S+=i; return S;} void main() {int n; fstream f("pufosu.txt",ios::in); f>>n; do { if(suma_div(n)>n) cout<<(char)n; f>>n; } while(!f.eof()); f.close();}
Probleme propuse
1. (*)Fie numerele naturale nenule, mai mari sau egale dect 2, a i b. Numrul a este un numr natural scris n baza 10, cu cel mult 9 cifre. Numrul b este un numr natural mai mic sau egal dect 16 i reprezint o baz de numeraie. Scriei numrul a n baza b. Exemplu: a= 123 ; b=2; 123 10 =1111011 2
2. (*) Daca p este un numr prim mai mare decat 5, orice numar cu p-1 cifre identice se imparte exact la p. Exemplu : numarul 333333 se imparte exact la 7 ; numrul 222222222 se mparte exact la 13 ; Verificai aceast proprietate pentru toate numerele naturale prime p, mai mici sau egale dect n, unde n este un numr natural mai mare sau egal dect 5 i mai mic sau egal dect 100. 3. (*) Problema maimuei Pe o insul pustie au naufragiat 3 marinari i o maimu. (Pe insul nu mai triete nici un alt animal i niciun alt om!). Imediat dup naufragiu, marinarii au cules n nuci de cocos. Noaptea, primul marinar se trezete, mparte nucile de cocos n trei grmezi egale ( cu acelai numr de nuci de cocos) dar, ramne o nuc pe care o d maimuei. Dup o lung dezbatere cu sine-nsui, ia o grmad pe care o ascunde bine i pune nucile din celelalte dou grmezi la loc. Apoi se culc mulumit! Se scoal al doilea marinar i mparte nucile de cocos rmase n trei grmezi egale ( cu acelai numr de nuci de cocos) dar, i ramne o nuc pe care o d maimuei. Dup o lung dezbatere cu sine-nsui, ia o grmad pe care o ascunde bine i pune nucile din celelalte dou grmezi la loc. Apoi se culc mulumit! Al treilea marinar procedeaz la fel. Dimineaa marinarii se trezesc, mpart nucile de cocos n trei grmezi egale, le rmne o nuc pe care o dau maimuei i apoi ia fiecare, frete, cte o grmad. Dndu-se un numr natural n, cu cel mult nou cifre, determinai: 28
a) Cel mai mic numr natural cu maxim 9 cifre, mai mare sau egal dect n, care ar putea fi numrul de nuci de cocos culese de cei trei marinari . b) Pentru numrul determinat la punctul (a) afiai cte nuci de cocos are fiecare marinar n total. Exemplu: Pentru n=239 se va afia : 241 ( numrul de nuci de cocos culese este 241) Primul marinar are 103 nuci de cocos Al doilea marinar are 76 nuci de cocos Al treilea marinar are 58 nuci de cocos. Probleme propuse de profesor Georgeta-Iulia Balacea, Colegiul Naional Al.I.Cuza 4. (**)Stoluri De ndat ce frigul a trecut, psrile migratoare care au supravieuit gripei aviare se pregtesc s se ntoarc acas. eful lor, un btlan btrn i nelept, ncearc s le organizeze. mparte psrile n stoluri, astfel nct fiecare stol s aib exact x psri. Observ ns c din ultimul stol lipsete o pasre. Nemulumit, mai face o ncercare: le mparte n stoluri de cte y. Observ ns cu stupoare c din ultimul stol, tot lipsete o pasre. Nervos de-a dreptul, ncepe s le mpart cte z n fiecare stol. Incredibil ns, din ultimul stol tot lipsete o pasre. Disperat, o roag pe barz, care e mai priceput la matematic, s rezolve problema, s gseasc ea o soluie de mprire n stoluri egale. Dar grijile btrnului btlan nu s-au terminat, pentru ca el mai trebuie s raporteze la Asociaia Psrilor Migratoare care e numrul de psri care s-au ntors n ar. Fie-v mil de bietul btlan i ajutai-l s afle cte psri are n subordine, tiind c numrul acestora e cel mai mic cu aceast proprietate. Determinai i cte psri va pune barza n fiecare stol, tiind c ncearc s le mpart n ct mai puine stoluri. Date de intrare Se citesc de la tastatur cele 3 numere, x, y i z Date de ieire Se afieaz pe un rnd numrul de psri migratoare care se ntorc acas i pe cellalt rnd, numrul de psri din fiecare stol (dac se poate face o mprire n mai multe stoluri), sau mesajul IMPOSIBIL, n caz contrar. Restricii, precizri - x, y, z e (1,1000] - x,y i z sunt diferite ntre ele, dou cte dou Exemple 1) Date de intrare : Date de ieire x=6 Sunt 119 psri y=8 z=5 Problem propus de profesor Mirela Voinea, Colegiul Naional V.Alecsandri 5. (**)Numr ciudat Ionic, elev n clasa a VI-a, este pasionat de matematic ! Cel mai mult i plac numerele prime ! In pauza mare, s-a gndit s genereze cel mai mic numr natural format din toate cifrele numerelor prime mai mici sau egale dect n, unde n este un numr natural, 31 2 n s . Ajutai-l pe Ionic s rezolve problema ntr-un timp foarte scurt : cel mult 1 scund . Problem propus de profesor Adriana Brotiuc, c. gimnazial nr. 29, Galai 6. (**)S.O.S. La ora de educaie fizic domnul profesor dorete s aranjeze cei n elevi ai claselor a VI-a pe un singur rnd. Are ns o problem foarte mare: doi biei aezai unul lng cellalt ar vorbi 29
toat ora despre box i ar deranja pe toi ceilali copii! Ajutai-l pe bietul profesor s afle n cte moduri poate aranja cei n elevi ai claselor a VI-a astfel nct niciun biat s nu aib vecin un alt biat. Se citesc de la tastatur numerele naturale n(numrul total de elevi) i b(numrul total de biei din clasele a VI-a). 7. (***)Piramida lui Keops Gigel, elev n clasa a VI-a, era pasionat de studiul istoriei antice. A gsit la biblioteca colii, o carte de istorie, scris de HERODOT n anul 450 I.C., cnd a vizitat Egiptul. A descoperit acolo o hart a piramidei. Camera mortuar a faraonului se afl chiar in mijloc, n inima piramidei i este accesibila numai din Marea Galerie. Pn acum, nici comoara, nici mumia lui Keops, nu au fost gsite. Gigel a studiat mai multe documente i a descoperit un coridor secret spre Camera comorii. Era totui o problem: pentru a putea intra n camera comorii, trebuia descifrat un cifru. Pe pereii coridorului erau nscrise n numere naturale. Cifrul era cel mai mic numr natural format din 5 cifre, compus din cifrele zecilor celor n numere naturale. Ajutai-l pe Gigel s descopere cifrul pentru a intra n camera comorii! Dac problema nu are soluie, afiai mesajul Cifru eronat. In caz contrar, afiai cifrul gsit. Exemplu: Pentru n=5 i numerele 10, 21, 35, 49, 86 se va afia cifrul 12348. Restricii i precizri: + 5<=n<=100000 ( n este numrul de numere naturale nscrise pe pereii coridorului) + Cele n numere naturale sunt mai mici sau egale cu 2 31 -1 Date de intrare: + De la tastatur se citete n, numrul de numere naturale. + De la tastatur se citesc cele n numere naturale. Date de ieire: Cifrul determinat. Probleme propuse de profesor Georgeta-Iulia Balacea, Colegiul Naional Al.I.Cuza-OLI-2007 8. (***)Pinochio Pinochio, elev n clasa a VI-a, nu are rezultate foarte bune la nvtur. La sfritul semestrului I, el a rmas corigent la 6 obiecte. Bineneles, l-a minit pe GEPETTO, spunndu-i c a obinut la toate disciplinele media m , 6sms9, numr natural . Zna cea bun, ocrotitoarea lui Pinochio, a hotrt sa-l pedepseasc: Timp de z zile, z numr natural, 2sz s365, nasul lui Pinochio va crete astfel: n prima zi, nasul se lungete cu m milimetri. n a doua zi, nasul lui Pinochio se mrete cu o lungime de zece ori mai mare dect a crescut n prima zi i cu nc m milimetri. n a treia zi, bietului Pinochio i crete nasul cu o lungime de zece ori mai mare dect cea din a doua zi plus nc m milimetri. i tot aa mai departe. n ultima zi ( ziua z) nasul lui Pinochio crete de 10 ori mai mult dect a crescut n ziua anterioar i cu nc m milimetri. Copil sensibil, Pinochio sufer cumplit i plnge. Pentru a-i terge lacrimile, copilul folosete n fiecare zi o batist de hrtie care are lungimea ( n milimetri) egal cu lungimea cu care i crete nasul n ziua respectiv. Calculai ci metri de hrtie a folosit Pinochio pentru a-i terge lacrimile n cele z zile. Exemplu: Pentru m=6 i z=3 se va afia 0,738 m . Restricii i precizri: + 2<=m<=9 , m numr natural + 2sz s365 , z numr natural Date de intrare: + De la tastatur se citesc m, i z . Date de ieire: Lungimea n metri a hrtiei folosite de Pinochio. 9. (***)Tema de vacan La ncheierea primului semestru, profesorul de informatic propune elevilor clasei a IX-a , ca tem de vacan, rezolvarea a N probleme. Se tie c un elev poate rezolva ntr-o or una sau dou 30
probleme i c fiecare elev lucreaz exact o or pe zi. Determinai n cte moduri poate un elev i poate rezolva integral tema de vacan. Exemplu: Dac N =4 ( patru probleme propuse pentru tema de vacan), un elev le poate rezolva n 5 moduri. Restricii i precizri: - 50 1 s s N , N este numr natural. Date de intrare: N se citete de la tastatur Date de ieire: Numrul de moduri n care un elev poate rezolva tema de vacan, afiat pe ecran. Probleme propuse de profesor Georgeta-Iulia Balacea, Colegiul Naional Al.I.Cuza-OLI-2007
PROBLEME REZOLVATE CLASELE VII-VIII
1.Echilibrarea balanei
Caracatia Cauchemar a sehestrat pe toi cei x petiori din familia lui Farnabulle : Acesta, disperat, ar fi fcut orice ca s poat nmuia inima lui Cauchemar i s-i elibereze familia. Cauchemar i-a propus lui Farnabulle s rezolve urmtoarea problem : Se dau m 1 greuti de k 1
kg fiecare i m 2 greuti de k 2 kg fiecare. Caracatia dorete s afle toate modalitile n care poate s echilibreze o balan care are pe platanul din stnga o greutate egal cu x Kg (cte un kilogram pentru fiecare petior captiv). Greutile pot fi puse pe ambele platane. Dac balana nu poate fi echilibrat, Cauchemar va gti o ciorb excelent din toi membrii familiei lui Farnabulle ! Rezultatele se vor scrie n fierul text Balanta.txt sub forma unui tabel cu dou coloane , cu linii de forma :
Stnga = Dreapta a*k i = b*k j unde am1,bm2, i,j=1,2, ij. Dac balana nu poate fi echilibrat, se va scrie mesajul :Pofta buna, Cauchemar! De exemplu: Pentru m1 =5 i m2=5 , k1=2 i k2= 1, x=4. Se va obine : Balana.txt Sanga= Dreapta 4=4*1 4=1*2+2*1 4=2*2 4+2*1=3*2 4+4*1=4*2 Timp maxim de execuie : 0,5 s/test
Problem propus de profesor Ionela Fotache, Liceul Teoretic Dunrea Galai Inteligenta artificiala nu se poate compara cu prostia naturala.
31
//echilibrarea balanei #include<iostream.h> #include<math.h> void main() {float k1,k2,m1,m2;//informatii despre greuti int x;//greutatea de pe platanul din stanga float n1,n2;//numar de greuti utilizate pentru echilibrare unsigned int nrsol;//numar solutii float c; cout<<"echilibrare balanta cu 2 tipuri de greuti" <<endl; cout<<" nr de greuti din fiecare tip: m1 m2 =";cin>>m1;cin>>m2; cout<<"greutatea pentru fiecare tip :k1 k2 = "; cin>>k1;cin>>k2; do {cout<<endl; cout<<"Greutatea x (<0 pentru oprire) : ";cin>>x; if (x>=0) {nrsol=0;cout<<endl; for (n1=-m1;n1<=m1;n1++) {c=(x-n1*k1)/k2; cout<<"rez="<<c; if ((c-int(c))==0 && (int(abs(c)))<=m2) {n2=int(c);nrsol++; if(nrsol==1) cout<<endl<<"stanga-dreapta"; if (n1*n2<0) if(n1<0) cout<<endl<<x<< "+"<<-n1<<"*"<<k1<<"="<<n2<<"*"<<k2; else cout<<" "<<x<<-n2<<"*"<<k2<<"="<<n1<<"*"<<k1; else {cout<<x<<" "; if (n1>0) cout<<n1<<"*"<<k1; if (n1*n2>0) cout<<"+"; //ambele tipuri if (n2>0) cout<<n2<<"*"<<k2; } cout<<endl; } } if (nrsol==0) cout<<endl<<"Balanta nu poate fi echilibrata"; } } while (x>=0); }
2. MATRIX Vasilic este pasionat de filme SF i programare. Filmul lui preferat este MATRIX. Are chiar i programe de prelucrare a fiierelor video cu ajutorul calculatorului. A realizat capturi i a inceput s studieze amanunit imaginile de pe ecran. Secvenele lui favorite sunt cele care descriu matricea reprezentat ca secvene de bii din celebrul film. Vasilic a observat chiar anumite similitudini ntre liniile care ncarc un ecran. 32
Doua linii se numesc similaredac sunt scrise cu aceleai cifre binare, eventual in alta ordine. Incantat de descoperirea sa Vasilic a mprit matricea n grupuri de linii similare, ba mai mult, i-a propus s determine grupul dominant. Un grup se numete dominant daca va conine un numr maxim de linii similare. Inainte de a ncepe s elaboreze un program care s determine cte linii similareare grupul dominant dintr-o matrice Vasilic a realizat c poate interveni i o astfel de problem: matricea poate avea mai multe grupuri dominante. Ajutai-l pe Vasilic s determine cte grupuri dominante are o matrice i cte linii are fiecare grup dominant. Date de intrare Pe prima linie a fiierului matrix.in se afl doua numere naturale M, N ( 2<=M<=3000 si 2<=N<=1000 ). Pe urmatoarele M linii se afla cte N numere naturale avnd valorile 0 sau 1, reprezentnd matricea. Observaie: cifrele binare nu sunt separate prin spaiu. Date de ieire Pe prima linie a fiierului matrix.out se vor afla doua numere naturale reprezentand numrul de grupuri dominante i numrul de linii similare dintr-un astfel de grup. Exemplul 1 matrix.in 7 5 11000 00110 11110 10011 11011 01111 00110 matrix.out 2 3 1 3 Problema propus de prof. Neagu Violeta, Colegiul National Mihail Koglniceanu Galai-OLI 2008 Rezolvare #include<fstream.h> int v[4000]; void main() {fstream f;f.open("matrix5.in", ios::in); int m,n; f>>m>>n; char x; int max=0,fv; for(int i=1;i<=m;i++) {int k=0; for(int j=1;j<=n;j++) {f>>x; k+=x-'0'; } v[k]++; if(v[k]>max) {max=v[k]; fv=1;} else if(max==v[k]) fv++; } f.close(); f.open("matrix5.out",ios::out); f<<fv<<' '<<max;}
Explicaie: matricea contine un grup dominant care contine 3 linii similare. Cele 3 linii similare contin aceleasi cifre binare: doua cifre 1 si trei cifre 0 fiecare.
33
Probleme propuse
1. (*)Se citete de la tastatur o fraz de maxim 70 de caractere. S se afieze, cu spaii intre ele, toate perechile de vocale consecutive din fraz, precum i numrul lor. 2. (*)Dndu-se un tabel unidimensional, care conine maxim 100 numere ntregi, s se afieze diferena maxim gsit ntre dou elemente consecutive. 3. (*)Se consider o matrice cu n linii i m coloane, cu componente numere ntregi. S se afieze elementele de pe conturul matricei, ncepnd cu elementul de pe prima linie i prima coloan, n ambele sensuri de parcurgere. Probleme propuse de prof. Negu Veronica, Liceul Teoretic Dunrea 4. (**)S se determine suma elementelor de sub diagonala principal a unei matrici patratice de ntregi,inclusiv elementele de pe diagonala principal. Problem propus de prof. Novetschi Monica, Colegiul Naional M.Koglniceanu 5. (**)Se d un tablou unidimensional V cu n elemente de tip ntreg. S se determine vectorii v1 i v2 astfel nct v1[i] s fie numrul minim format din cifrele lui v[i] i v2[i], s fie numrul maxim format din cifrele lui v[i]. Problem propus de prof. Stan Maria, Grupul colar Radu Negru 6. (**)Se dau 2 numere naturale a i b, avnd acelai numr de cifre, n (9<n<=4000000000). Cerine: a)Calculai s=a+b b)Calculai ultima cifr a sumei 1 s +2 s +3 s ++2008 s +2009 s . c)Calculai n cte zerouri se termin numrul t!, unde t are primele 4 cifre semnificative date de primele 4 cifre ale lui | | s i ultimele 5 cifre date de ultimele 5 cifre ale produsului a*b. Date de intrare: Cifrele lui a si b citesc din dou fiiere text cifrea.in, respectiv cifreb.in, cte una pe linie, incepand cu cifra cea mai semnificativ pna la cifra unitilor pe ultima linie(a n-a). Date de ieire In fiierul s1.out se vor tipri cifrele sumei s, n fiierul t1.out se vor tipri cifrele lui t! ,iar pe monitor rezultatul de la punctul b) Restricii: - 9<n<=4000000000 - Citirea lui a i b se va face n program sincron , succesiv citind din cele 2 fiiere cifrea.in, cifreb.in cte o preche de cifre (ai,bi), i=1,n , de pe linia i din fiecare fiier.
7. (***)Se dau 3 balane notate A,B,C, aezate alturat, avnd n fa cte n greuti, de un singur tip de greuti standard, n a , respectiv n b , n c . Pentru verificarea etalonarii corecte a dispozitivelor se incearc cntarirea a 3 greuti, G a , G b , G c aezate pe talerul din dreapta a fiecrei balane (G a pe balana A, G b pe balana B, G c pe balana C). Din pcate operatorul observ c [ = 3 1 i (G i mod n i )<>0, ns tot el observ c mutnd greuti de tipuri diferite (conservnd ins numarul total de greutti de fiecare tip) intre balane i punnd greuti pe talerele din stanga i eventual i pe cele din dreapta, el poate s echilibreze simultan cele 3 balane. Se cere sa se afiseze Indiferent ce cauti pe internet, cel putin un site cu probleme se va potrivi cu criteriile tale de cautare. 34
printr-un program in cate moduri se pot echilibra simultan cele 3 balane si care este varianta in care nr de greuti mutate in total de la o balan la alta este minim. Date de intrare: - n<150 - n a , n b , n c , G a , G b , G c <100000 miligrame Probleme propuse de profesor oldan Florin, Colegiul Naional V.Alecsandri
8. (***)Pofticiosul La cofetria Pofticiosul, patronul a adus n tipuri de prjituri, cte m prjituri din fiecare sortiment. O prjitur de tipul i (1si sn) cost C[i] RON. Patronul aeaz prjiturile n vitrin, pe m rnduri, astfel nct pe o coloan sunt numai prajituri din acelai sortiment. In fiecare sear, dup nchiderea magazinului, vnztorul Mickey, foarte pofticios din fire, fur toate prjiturile care se afl n vitrin, ntr-o zon dreptunghiular, avnd colul din stnga sus pe linia XSTG i pe coloana YSTG, iar colul opus pe linia XDR i pe coloana YDR. Ca patronul s nu observe paguba, Petric acoper furtul: pe fiecare linie pe care exist spaii libere, deplaseaz spre stnga toate prjiturile care se afl n dreapta locului liber rmas. Dar, lui Mickey nc i mai este foame! Astfel nct el repet metoda, i fur iar din prjituri, n acelai mod! Pofticiosul continu s fure i s acopere paguba de K ori. (Pn se satur!). Numrul n de sortimente, numrul m de prajituri din fiecare tip, costul fiecrei prjituri n parte , numrul K de furturi precum i coordonatele zonelor din care Petric fur prjiturile, se citesc din fiierul text Mickey.in. 1) Scriei n fiierul text Paguba.out costul prjiturilor furate de Mickey. 2) Scriei n fiierul text Paguba.out configuraia final a vitrinei. De exemplu, pentru n=6 ( 6 tipuri de prjituri) i m=4 (cte 4 prjituri din fiecare sortiment), costurile prjiturilor: 1 (o prjitur din sortimentul 1 cost 1 RON); 2(o prjitur din sortimentul 2 cost 2 RON); 3(o prjitur din sortimentul 3 cost 3 RON); 4 ; 5; 6(o prjitur din sortimentul 6 cost 6 RON) i K=2, iniial vitrina cofetriei arta astfel: 1 2 3 4 5 6 1 2 3 4 5 6 1 2 3 4 5 6 1 2 3 4 5 6 Dac Petric fur prima dat prjiturile din zona (2,2) (colul stnga sus) i (3,3) (colul dreapta jos), iar a doua oara din zona (3,3) (colul stnga sus) i (4,4) (colul dreapta jos), dup acoperirea pagubei, vitrina va arta astfel : 1 2 3 4 5 6 1 4 5 6 0 0 1 4 0 0 0 0 1 2 5 6 0 0
Iar costul prjiturilor furate este de 28 RON.
Restricii i precizri: - 1sns300 - 1sms300 - 1sKs100 - Costul fiecrei prjituri este un numr natural nenul, mai mic dect 20. 35
Date de intrare: Fiierul de intrare Mickey.in, conine pe prima linie 3 numere naturale: n, m i K, reprezentnd numrul de sortimente de prjituri(n) , numrul de prjituri din fiecare sortiment(m) i numrul de furturi(K). Pe a doua linie a fiierului de intrare, se afl n numere naturale reprezentnd costurile prjiturilor, separate prin cte un spaiu. Pe urmtoarele K linii se afl cte 4 numere naturale nenule, reprezentnd linia i coloana colului stnga sus (XSTG ; YSTG) , respectiv linia i coloana colului dreapta jos (XDR ; YDR) al dreptunghiului de unde Petric fur prjiturile. Nu este obligatoriu ca dreptunghiul din care Mickey va fura s conin prjituri n fiecare loc. Numerele sunt separate prin cte un spaiu. Pentru exemplul dat, fiierul de intrare va arta astfel : MICKEY.IN 6 4 2 1 2 3 4 5 6 2 2 3 3 3 3 4 4 Date de ieire: Fiierul de ieire Paguba.Out va conine pe prima linie un numr natural, reprezentnd costul prjiturilor furate. Pe urmtoarele m linii, se fa afia configuraia final a vitrinei cu prjituri. Dac pe linia i, coloana j, nu se mai gsete nici o prjitur, se va afia 0. Pe fiecare linie, numerele vor fi separate prin cte un spaiu. Pentru exemplul dat, fiierul de ieire va arta astfel: 28 1 2 3 4 5 6 1 4 5 6 0 0 1 4 0 0 0 0 1 2 5 6 0 0 Problem propus de profesor Georgeta-Iulia Balacea, Colegiul Naional Al.I.Cuza-OLI-2007
9. (***)Scufia Roie In vacana de var, Scufia Roie s-a hotrt s-i duc bunicuei bolnave, n fiecare zi, gogoi. Fetia poate s-i duc bunicuei n prima zi o gogoa, n a doua zi tot o singur gogoa, n a treia zi dou gogoi, n a patra zi trei gogoi, n a cincea zi cinci gogoi, n a asea zi opt gogoi, i aa mai departe. Drumul spre bunicua trecea ns prin pdure, iar LUPUL sttea la pnd! Era extrem de periculos, deoarece i LUPULUI i plceau tare mult gogoile, iar fetia risca s-i duc bunicuei couleul gol, dac se ntlnea cu Lupul. a) tiind c vacana de var are 50 de zile, determinai cte gogoi ar trebui s duc Scufia Roie bunicuei bolnave n ziua Z (1sZs50). b) Dac se tie c Scufia Roie are de dus bunicuei un numr G de gogoi, determinai care sunt zilele n care fetia ar trebui s mearg la bunicua, astfel nct s fac un numr minim de drumuri. Exemplu: a) Dac Z=7, Scufia Roie ar trebui s duc bunicuei 13 gogoi. b) Dac numrul de gogoi pe care Scufia Roie trebuie s-l duc bunicuei este 20 de gogoi, fetia merge la bunicua n urmtoarele zile: 2 ; 5 ; 7. Restricii i precizri: Z i G sunt numere naturale, 1sGs2 31 -1 i 1sZs50 36
Date de intrare Datele de intrare Z i G, se citesc din fiierul text Gogoasa.in . De pe prima linie a fiierului de intrare se citete numrul natural Z, iar de pe a doua linie se citete numrul natural G Date de ieire Datele de ieire se scriu n fiierul text Gogoasa.out, cu urmtorul format: + Pe prima linie a fierului se va scrie numrul de gogoi pe care trebuie sa-l duc Scufia Roie bunicuei n ziua Z. + Pe urmtoarea linie se scriu, n ordine cresctoare, separate prin cte un spaiu, zilele n care Scufia Roie va merge la bunica. Pentru exemplul dat: Fiierul de intrare Gogoasa.in este : 7 20 Fiierul de ieire Gogoasa.out este: 13 2 5 7 Problem propus de profesor Georgeta-Iulia Balacea, Colegiul Naional Al.I.Cuza-OLI-2007
Legile lui Murphy despre informatica Hardware: Acele parti ale sistemului pe care le poti lovi cu piciorul. Software: Acele parti ale sistemului care nu functioneaza. Hard disk: Acea componenta a sistemului care intepeneste in momentul cel mai nepotrivit cu putinta. Periferica: Acele componente care sunt incompatibile cu sistemul tau. Imprimanta: Acea componenta a sistemului care se blocheaza cand nu te uiti la ea. Cablu: Acea parte a sistemului care e prea scurta. Backup: O operatie care niciodata nu este efectuata la timp. Restaurare: O precedura care functioneaza perfect pana cand e nevoie de ea. Memorie: Acea parte a sistemului computerizat care este insuficienta. Mesaj de eroare: O solicitare de aprobare a distrugerii propriilor tale date. Fisier: Acea parte a sistemului care nu poate fi gasita. Procesor: Acea componenta a sistemului computerizat care este depasita tehnologic.
37
VI SUAL WEB DEVELOPER - I ASP.NET este o tehnologie Microsoft pentru crearea de aplicaii web i servicii web. ASP.NET este succesorul lui ASP (Active Server Pages) i beneficiaz de puterea platformei de dezvoltare .NET, i de setul de instrumente oferite de mediul de dezvoltarea al aplicaiei Visual Studio .NET. Model abstract pentru programarea Web pe partea de server, bazat pe Web Forms interactiuneWeb condusa de evenimente (event driven programming) componenteWeb executate la nivel de server (proprietati i evenimente) suport pentru procesari stateful cu stare (ViewState) Se stie c .NET Framework este un mediu de programare obiectual, la nivel local/distan dar i mediu de execuie minimiznd efortul de exploatare (deployment). De semenea ofer suport pentru dezvoltare la nivel de client (aplicaii Windows desktop ori mobile) sau server aplicaii/servicii Web ajungnd la versiunea 4.0. Locul aplicaiilor ASP sub platforma .NET este reprezentat mai jos
Cteva dintre avantajele ASP .NET sunt: 1. ASP .NET are un set larg de componente, bazate pe XML, oferind astfel un model de programare orientat obiect (OOP). 2. ASP .NET ruleaz cod compilat, ceea ce crete performanele aplictiei web. Codul surs poate fi separat n dou fiiere, unul pentru codul executabil, iar un altul pentru continutul paginii (codul HTML i textul din pagin) . 3. .NET este compatibil cu peste 20 de limbaje diferite, cele mai utilizate fiind Visual Basic i C#. Pe lng un sistem de operare Windows XP sau Vista, pentru a putea creea un site ASP .NET este nevoie de: Visual Web Developer 2008 reprezint unealta celor de la Microsoft cu ajutorul cruia putem creea pagini web simplu i fr s scriem prea mult cod. Printre facilitile oferite de Web Developer amintim urmtoarele: 1. Obiectele se pot aduga cu uurin. Tot ce trebuie s facem pentru adugarea unui buton pe pagin este s tragem obiectul buton din toolbox (bara de unelte). Acesta are o colecie de obiecte (imagini, tabele, butoane) ce se pot trage din panoul cu obiecte direct pe pagina ce urmeaz a fi publicat.. 2. Server integrat. Web Developer are integrat un server web pentru a putea rula paginile create. Programarea n ASP .NET este server side, ceea ce nseamn c codul trebuie executat pe server iar apoi trebuie retrimis browserului clientului sub form HTML. De aceast procedur se ocup serverul integrat. 3. Verificarea erorilor. Web Developer v avertizeaz cnd ai scris o linie de cod eronat i v ofer o posibil soluie pentru a remedia eroarea. Aceasta ajut n corectarea i scrierea eficient a codului. 4. Intellisense - se refer la afiarea tuturor metodelor i evenimentelor unui obiect plus o scurt descriere. n acest mod vom putea vedea ce tie fiecare obiect. 5. Debugging. Web Developer v ofer posibilitatea de a verifica valorile 38
variabilelor, de a urmri codul pas cu pas, sau de a opri execuia ntr-un punct anume. Pentru a folosi baze de date, se poate descrca SQL Server 2005 Express impreun cu programul de management al bazei de date SQL Server Management Studio Express. Acesta v ofer posibilitatea de a creea, terge i modifica baze de date i tabele cu uurin precum i rularea de interogri. Pachetul conine i .NET FRAMEWORK 3.5, ultima versiune a coleciei de clase necesare pentru a putea creea paginile web folosind funcii foarte folositoare i gata implementate. Pentru a crea un site nou n Web Developer procedm astfel. Click pe File -> New WebSite
n fereastra ce apare putem alege directorul unde vor fi stocate fiierele ASP .NET i limbajul de programare: C# sau Visual Basic. n acest tutorial vom lucra cu VB. Dup alegerea directorului site-ului i a limbajului de programare, va apare codul surs pentru prima pagina a site-ului default.aspx:
- n partea de sus-stnga putem vedea default.aspx. Acesta e fiierul implicit al site- ului( echivalent n HTML este index.html ) iar dac intrm pe site este primul ce se va executa. - tot n stnga sus este toolbox-ul. Dac trecem cu mouse-ul deasupra se va afia. Lng butonul X de nchidere al toolbox-ului este autohide. La un click pe autohide toolbox-ul va rmne fix. - jos-stnga vom vedea 3 butoane: Design, Split i Source. Dac intrm n partea de Design vom vedea ceea ce se vede efectiv pe site (butoane, tabele, etc), n partea de Source vom vedea codul HTML iar Split va mpri fereastra Web Developer-ului n dou (pentru Design i Source). - n partea de jos la Output vom avea evetualele mesaje de eroare sau alte mesaje. - n dreapta-sus se afl solution explorer: lista cu fiierele site-ului. Fiierul web.config se creaz automat, dar despre el se va discuta separat. Putem observa un semn + n dreptul default.aspx. Fiecare fiier aspx are separat un fiier cu extensia vb pentru codul server side ce va fi scris n VB. - partea din dreapta-jos i anume properties va fi discutat in unul din numerele viitoare. n continuare selectm partea de Design, i mergem cu mouse-ul deasupra toolbox-ului. Alegem obiectul Button (de exemplu) i l tragem pe spaiul liber pe pagin.
Apsm F5 i serverul integrat va porni. XXXX Web Developer v va ntreba dac dorii debug (click pe OK n fereastra ce apare). Este bine s folosim debug pentru c 39
dac apare o eroare, Web Developer ne va semnala eroarea din linia de cod printr-un mesaj. n partea de design, facem un click pe butonul recent adugat i vom avea posibilitatea de a modifica/adauga Proprieti i evenimente (Properties, Events). n seciunea Properties vom vedea i vom putea modifica o multitudine de proprieti ce aparin butonului nostru, cum ar fi culoare, font, buton vizibil sau invizibil, textul butonului, i altele. Aceste modificri in de partea interfeei butonului. Vrem ca butonul nostru s execute ceva. Pentru aceasta, facem dublu click pe buton i Web Developer va crea pentru noi funcia ataat butonului. Functia se salveaya implicit in fisierul default.aspx.vb. Codul acestei funcii se va executa cnd vom face click pe buton(cand aplicaia ruleaz) Evenimentele reprezint aciunile ce le execut un obiect. De exemplu, butonul nostru poate executa un cod la click pe acesta. Click pe buton reprezint un eveniment. Evenimentele le putem vedea n fereastra Properties printr-un click pe iconia fulger (iconia de lng fulger reprezint proprietile)
Bibliografie: Burada Sorin, 2008 introducere in asp.net, Polirom, Iai Ttran Mihai, Dumitriu-Lupan Nua Introducere in .NET Framework, 2008, suport de curs pentru elevi http://www.aspxcode.net/visual-web- developer-2008-express-tutorial.aspx http://asp.net ing. Tabacaru Gigi, Col. Th. Paul Dimo
Abu Abdullah Muhammad bin Musa al-Khwarizmi (sau Muhammed ibn Musa Horezmi ) (n farsi tatrucserp) ,(Al-Horezmi) a fost un savant, astronom/astrolog, matematician i scriitor persan. S-a nscut probabil n 780, i a murit ctre anul 845 d.Hr. Este adesea citat ca "printele algebrei", numele acestei discipline matematice avnd la origine titlul crii sale Hisab o jabr o muqabele. Tot de la el se trage i cuvntul algoritm - procedeu sau sistem de calcul. Un algoritm nseamn n matematic i informatic o metod sau o procedur de calcul, alctuit dintr-o succesiune de operaii elementare necesare pentru rezolvarea unei probleme sau categorii de probleme. De obicei algoritmii se implementeaz n mod concret prin programarea adecvat a unui calculator, sau a mai multora. Din diverse motive exist i algoritmi nc neimplementai, teoretici. Algoritmul este noiunea fundamental a informaticii. Totul este construit n jurul algoritmilor (i al structurilor de date, cum ar fi tablourile, listelesau grafurile). Cteva exemple de algoritmi: - algoritmul de construcie a unui automobil (urmrind procedeele i schiele de fabricaie); - algoritmul de folosire a unei maini-unelte (citind manualul de folosire); - algoritmul de explorare a unui labirint n vederea gsirii unei ieiri (una din soluii: se ine o mn pe perete i se merge fr a o dezlipi de acesta). - algoritmul (ordinea operaiilor, sau "check list ") la decolarea unui turbojet. Acest algoritm desigur nu ine n mod direct de domeniul matematicii sau informaticii. - algoritm pentru Semnturi Digitale 40
Proprietile algoritmului Cele mai importante proprieti ale unui algoritm sunt urmtoarele: - Corectitudinea - este proprietatea algoritmului de a furniza o soluie corect a problemei date. n acest sens este de dorit ca algoritmii s se bazeze pe fapte i relaii matematice demonstrabile. - Caracterul univoc sau deterministic - plecnd de la un set de date iniial anume, rezultatul este unic, sau altfel spus, repetarea execuiei algoritmului duce ntotdeauna la aceleai rezultate. - Generalitatea - este proprietatea unui algoritm de a rezolva o clas sau categorie de probleme, i nu doar o singur problem particular. Spre exemplu, un algoritm care rezolv doar ecuaia 2x-6=0 este mai puin general dect unul care rezolv ecuaia ax + b = 0, oricare ar fi valorile lui a i b. - Claritatea - proprietatea algoritmului de a descrie cu exactitate i fr ambiguiti paii care trebuiesc parcuri n rezolvarea problemei. - Verificabilitatea - acea proprietate a algoritmelor care permite ca fiecare pas s poat fi verificat ntr-un timp rezonabil de ctre om, folosind mijloace de validare de ncredere. - Optimalitatea - proprietatea unui algoritm de a se termina dup un numr minim de pai. Spre exemplu, dac se cere s se calculeze suma primelor n numere naturale, putem aplica formula de calcul, i astfel algoritmul se termin ntr-un singur pas, pe cnd dac am aduna toate numerele de la 1 la n, el s-ar termina abia n n pai, i deci nu ar fi optim. - Finitudinea - este proprietatea algoritmului de a se termina ntr-un numr finit de pai. Exist i algoritmi care nu se termin ntr-un numr mrginit de pai, dar acetia se numesc "metode algoritmice". - Eficiena - este proprietatea unui algoritm de a se termina nu numai ntr-un numr finit, ci i "rezonabil" de pai, chiar dac acesta nu este cel mai mic posibil (nu este optim). Algorimul este ineficient i dac rezultatul se obine ntr-un timp mai lung dect cel dorit sau permis. - Existena unei intrri (datele de prelucrat). ntruct operatorii se aplic unui operand (sau i mai multor operanzi deodat), este de neconceput un algoritm fr niciun operand. Intrrile permise formeaz mpreun un set (mulime) specific de obiecte sau valori, care se numete "domeniul" algoritmului. - Existena unei ieiri (rezultatele). Este de neconceput un algoritm care nu are nicio ieire, deoarece n acest caz intr n discuie nsi utilitatea sa! Clasificarea algoritmilor n funcie de modul de implementare, un algoritm poate fi: - recursiv - face uz de sine nsui, n mod repetat - iterativ (repetitiv) - serial sau paralel - deterministic sau aleatoriu (probabilistic) - exact sau aproximativ n funcie de metoda utilizat, un algoritm poate fi: - algoritm backtracking - algoritm divide et impera - algoritm de programare dinamic - algoritm de tip greedy - algoritmi probabilistici, genetici, euristici .a.
41
Etapele rezolvrii unei probleme Reprezentarea unei probleme constituie un proces complex, care comport mai multe etape. 1. Analiza problemei n scopul stabilirii datelor de intrare, precum i a rezultatelor pe care trebuie s le obinem prin rezolvarea problemei. 2. Elaborarea unui algoritm de rezolvare a problemei. 3. Implementarea algoritmului ntr-un limbaj de programare. 4. Verificarea corectitudinii algoritmului propus. Un prim pas const n testarea programului pe diverse seturi de date de test. Seturile de date de test trebuie elaborate cu atenie, astfel nct s se acopere, pe ct posibil, toate variantele de execuie a algoritmului, inclusiv situaii de excepie, i s verifice dac fiecare subproblem a problemei date este rezolvat corect (dac este posibil, se va testa separat fiecare modul de program). Testarea poate pune n eviden, eventual, omisiuni sau erori de concepie a algoritmilor, dar nu garanteaz corectitudinea algoritmului. Pentru aceasta ar trebui s testm algoritmul pe toate seturile posibile de date de intrare, ceea ce este practic imposibil. Din acest motiv, se impune utilizarea unor metode formale de demonstrare a corectitudinii algoritmului, etap de obicei deosebit de laborioas, necesit un aparat matematic complex. Analiza complexitii algoritmului. n general, exist mai muli algoritmi de rezolvare a unei probleme date. Pentru a alege cel mai bun algoritm, trebuie s analizm aceti algoritmi n scopul determinrii efecienei lor i, pe ct posibil, a optimalitii lor. Eficiena unui algoritm se evalueaz din dou puncte de vedere : - din punctul de vedere al spaiului de memorie necesar pentru memorarea valorilor variabilelor care intervin n algoritm (complexitate spaiu); - din punctul de vedere al timpului de execuie (complexitate timp). Observaie: Elaborarea algoritmilor nu este un proces liniar, adeseori este necesar s revenim la o anumit etap i s o repetm. De exemplu, dup ce am demostrat corectitudinea algoritmului i am analizat eficiena sa, ne putem pune problema de a optimiza algoritmul sau numai implementarea sa, caz n care trebuie s revenim la cea de a doua etap, de proiectare a algoritmilor i de scriere a codului, etap urmat n mod necesar de teste de corectitudine, eleminare a erorilor , demonstraii de corectitudine, teste de determinare a complexitii, analiza teoretic a complexitii etc. Date Orice algoritm lucreaz cu date: date de intrare (datele pe care trebuie s le primeasc din exterior), date de ieire (datele pe care trebuie s le furnizeze algoritmul n exterior), precum i date de manevr (date temporare, necesare algoritmului pentru a obine datele de ieire pe baza datelor de intrare) Datele cu care lucreaz algoritmii pot fi clasificate din mai multe puncte de vedere. O prim clasificare a datelor, n funcie de posbibilitatea de a-i modifica valoarea este : - Constante date care nu i modific valoarea; de exemplu : 10, 3.14, ir de caractere, A, fals. 42
- Variabile dare care i modific valoarea.
O variabil poate fi referit pritr-un nume(identificator)(o succesiune de litere, caracterul _ i cifre, primul caracter fiind obligatoriu liter) i are asociat o valoare.Numele unei variablie nu se schimb pe parcursul algoritmului, dar valoarea acesteia se poate modifica. De exemplu, pentru rezolvarea ecuaiei de forma ax + b = 0, am utilizat dou variabile a i b. Prin operaia Citete datele de intrare a i b, acestora li se asociaz cte o valoare real, introdus de la tastatur. Utilizarea acestor dou variabile era strict necesar, pentru a respecta generalitatea algoritmului. Dac am fi utilizat dou valori constante (de exemplu, 2 i 8), secvena de operaii ar fi rezolvat numai ecuaia 2x + 8 = 0 , deci nu ar fi avut utilitate. Observai c la nceputul algoritmului am specificat (am declarat) faptul c a i b sunt numere reale. Aceast declaraie este necesar, pentru a cunoate natura valorilor care pot fi asociate celor dou variabile i, ca urmare, operaiile permise cu acestea. Spunem c am declarat tipul variabile respective . O variabil poate reine numai valori de tipul declarat. n funcie de valoarea lor, datele pt fi clasificate astfel : Date numerice au ca valori numere (naturale, ntregi sau reale); Date alfanumerice au ca valori caractere sau iruri de caractere ; Date logice au valoarea adevrat sau fals. Expresii O expresie este constituit dintr-o succesiune de operanzi, conectai prin operatori. Un operand poate fi o constant, o variabil, sau o expresie ncadrat ntre paranteze rotunde. Operatorii desemneaz operaiile care se execut asupra operanzilor. Operatorii care pot fi utilizai ntr-o expresie depind de tipul operanzilor (numerici ntregi, numerici reali, caractere, iruri de caractere sau logici). O expresie este constituit dintr-o succesiune de operanzi, conectai prin operatori. Un operand poate fi o constant, o variabil, sau o expresie ncadrat ntre paranteze rotunde. Operatorii desemneaz operaiile care se execut asupra operanzilor. Operatorii care pot fi utilizai ntr-o expresie depind de tipul operanzilor (numerici ntregi, numerici reali, caractere, iruri de caractere sau logici). Evaluarea unei expresii presupune calculul valorii expresiei, prin nlocuirea valorilor variabilelor care intervin ca operanzi n expresie i efectuarea operaiilor specificate de operatori. Principiile programrii structurate Creterea complexitii aplicaiilor a impus la nceputul anilor `70 apariia unei noi paradigme n programare : programarea structurat. Scopul era de a dezvolta noi tehnici de programare, care s permit dezvoltarea unor programe fiabile, uor de elaborat n echip, uor de depanat, de ntreinut i de reutilizat. Un prim principiu al programrii strcturare este modulizarea. Pentru proiectarea unor aplicaii complexe, este necesar descompunerea problemei care trebuie rezolvat n subprobleme relativ independente, pentru fiecare dintre aceste subprobleme scriindu-se module de program mai simple. Fiecare modul efectueaz un set de prelucrri specifice i este relativ independent de celelalte module, cu care comunic prin intermediul unui set de parametri, care constituie interfaa. Avantajele sunt multiple. Cum la orice firm se lucreaz n echip, modulele de program pot fi implementate de mai muli programatori. Modificarea unui modul nu afecteaz celelalte module. Fiecare modul poate fi implementat, testat, depanat, modificat, independent de celelalte. 43
Un alt principiu fundamental este structurarea datelor i a prelucrrilor. Programatorul are posibilitatea de a-i grupa datele n coleci, organizarea dup anumite reguli, denumite structuri de date. Prelucrrile asupra datelor sunt structurare separat. Confotm teoremei de structur Bm- Jacoppini, orice prelucrare poate fi descris prin compunerea a trei structuri fundamentale : structura liniar (secvenial), structura alternativ i structura repetitiv.
Reprezentarea algoritmilor Pentru ca o secven de operaii s constituie un algoritm, ea trebuie s fie clar, adic la orice moment operaia care urmeaz a fi executat trebuie s fie unic determinat, definit i realizabil (s poat fi efectuat la momentul repesctiv, cu mijloacele disponibile). De-a lungul timpului s-au impus dou modaliti de reprezentare a algoritmilor : scheme logice, limbajele de tip pseudocod i limbajele de programare. Schemele logice constituie o metod de reprezentare grafic, foarte sugestiv, dar cu o serie de dezavantaje : se d o egal importan componentelor principale ca i detaliului, prin urmare schemele logice devin deosebit de stufoase i greu de urmrit; pentru aplicaiile mai complexe, cnd este necesar modularizarea, este practic imposibil de pus n eviden legturile dintre module n cadrul schemei logice. Din acest motiv, treptat s-a impus o alt metod de reprezentere a algoritmilor: pseudocodul. Un limbaj de tip pseudocod este un ansamblu de convenii, respectate n mod sistematic, care definesc operaiile permise (denumite i instruciuni) pentru reprezentarea algoritmilor.
Reprezentarea algoritmilor prin scheme logice
Blocul START Blocul STOP Blocul de CITIRE Blocul de SCRIERE
Blocul de atribuire
Blocul de ramificare
Pentru cazul n =2
c 1 v c 2 v v c n = 1 (v = sau logic) c i . c j = 0, i = j; i,j = 1,n (. = i logic) START STOP v e c 1 c 2 c n
c c Citete date_de_intrare Scrie date_de_ieire c NU DA 44
S St tr ru uc ct tu ur ri il le e f fu un nd da am me en nt ta al le e d di in n p pr ro og gr ra am ma ar re ea a s st tr ru uc ct tu ur ra at t
- STRUCTURA SECVENIAL (LINIAR)
Schem logic Pseudocod
S1; S2; . . . Sn.
1) Declararea datelor | variabila tip; La nceputul oricrui algoritm, vom preciza datele de intrare, datele de ieire, eventualele date de manevr, precum i tipul acestora. nainte de a utiliza orice variabil, o vom declara, preciznd numele i tipul ei. O variabil nu poate fi declarat de mai multe ori n acelai algoritm. Exemple : | x real; | c caracter; | i ntrg ; 2) Operaia de citire | Citete variabila1, variabila 2,........, variabila n; Efect : Prin operaia de citire (denumit i operaia de intrare) se preiau succesiv valori de la tastatur i se asociaz, n ordine, variabilelor specificate. 3) Operaia de scriere | Scrie expresie 1,expresie 2,.,expresie n; Efect: Operaia de scriere (denumit i operaia de ieire) presupune evaluarea n ordine a expresiilor specificate i afiarea pe ecran a valorilor lor pe aceeai linie. 4) Operaia de atribuire | variabila expresie ; Efect : se evalueaz expresia, apoi se atribuie valoarea expresiei variabilei din membrul stng Instruciunea compus
Limbajul Pascal Limbajul C/C++
Begin Instruciune 1 ; Instruciune 2 ; ... Instruciune n ; End { Declaraii; Instruciune 1 ; Instruciune 2 ; ... Instruciune n ;}
s1 s2 sn 45
- STRUCTURA ALTERNATIVA Schem logic Pseudocod
Efect : Se evalueaz condiia C Dac valoarea expresiei este adevrat, atunci se execut instruciunea_1. Dac valoarea expresiei este fals, se execut instruciunea_2.
] Case expresie_ordinal of Valori 1 : S 1 ; Valori 2 : S 2 ;
Valori n : S n ; [else S;] End switch (expresie) { case expreresie 1 : s 1 ; [break;] case expreresie 2 : s 2 ; [break;]
case expreresie n : s n ; [break;] [default :S] } Structura repetitiv condiional anterior (structura ct timp ) Schem logic Pseudocod
Ct-timp condiie_C execut Secven_de_instuciuni
ect: Pas 1 : se evalueaz expresia ; Pas 2 : dac valoarea expresiei este fals, se iese din instruciunea Ct-timp; dac valoarea expresiei este adevrat, se execut instruciunea, apoi se revine la Pas 1. c NU DA A I1 I2 Dac condiie_c atunci instruciune_1 altfel instruciune_2
Efect: Pas 1 : se execut instruciune; Pas 2 : se evalueaz expresie ; Pas 3 : dac valoarea expresiei este fals se iese din instruciunea repetitiv; dac valoarea expresiei este adevrat, se revine la Pas 1;
Limbajul Pascal Limbajul C/C++ Repeat Instriciune; Until expresie_logic ; do { Instriciune; } while (expresie_logic
Structura repetitiv cu contor ( structura pentru, sau cu numr cunoscut de pai ) Schem logic Pseudocod pentru v de la e 1 la e 2 cu pasul p execut instruciune
v:=e1 v<=e2 instr v:=succ(v) DA NU c s Da Nu 47
Este structura cu numr finit de pai (ciclri). Contorul este o variabil care pleac de la o anumit valoare i parcurge un interval pn la o valoare final. Parcurgerea se face n sens cresctor sau descresctor, cu pasul 1 sau nu. Uneori, parcurgerea se poate face n salturi, adic nu neaparat din element n element (pasul 1), ci din dou n dou elemente, sau din trei n trei etc. Evident, contorul, pasul i cele dou expresii vor fi neaparat valori din mulimi care pot fi parcurse , de exemplu numere ntregi, litere, nu i cuvinte sau numere reale.
Limbajul Pascal Limbajul C/C++
for v:=e1 to e2 do instruciune; for (expresie init ; expresie test ; expresie modif ; ) instruciune; for v:=e1 downto e2 do instruciune;
Principiul: v primete valoarea expresiei e1. Apoi, se verific dac s-a depit valoarea e2. Dac da, ciclul se ncheie, iar dac nu, atunci se execut instruciunea instr, apoi v crete la succesorul su (n cazul numerelor ntregi, de exemplu, crete cu o unitate), apoi se reia verificarea condiiei de continuare a ciclului. n forma cu downto, avem un test invers de continuare, iar n loc de succ, apare pred. n primul caz, dac e2<e1, atunci nu se execut nimic, trecndu-se imediat dup ansamblul instruciunii for, iar n al doilea caz, nu se execut nimic atunci cnd e2>e1.
n limbajul C++ for (expresie_initializare; expresie_test; expresie_incrementare) instructiune; unde: expresie_initializare = iniializarea variabilei de ciclare. Se poate i declara (cu valoare iniial) expresie_test = pentru a testa dac se execut instruciunea subordonat (dac expresia produce o valoare diferit de 0 subordonata se execut) expresie_modif = pentru incrementarea variabilei de ciclare Principiul: pas1: se evalueaz expresie_initializare; pas2: se evalueaz expresie_test. Daca produce o valoare diferit de 0 se execut instruciunea subordonat i se trece la pas3. Dac produce o valoare=0 nu se mai execut instruciunea for; pas3: se evalueaz expresie_incrementare i se revine la pas2. Dac, din greeal, lipsete expresie_test programul va cicla la nesfrit. Se va opri cu CTRL+PAUSE sau CTRL+ALT+DEL.
Prof. Georgeta Balacea Prof. Luminia Cobzaru
Pentru a putea ntrebuinta calculatorul la studiul problemelor concrete, omul e obligat s invete sa gandeasca exact i abstract. Grigore Moisil 48
COMPETENA DIGITLA O NECESITATE PERMANENT A SOCIETII Profesor Maria Stan Grupul colar Radu Negru Galai
Ritmul de ascensiune al tehnologiei informaionale a schimbat radical modul de viat, de comunicare, de recepionare a informaiilor. n secolul acesta i mai ales n cel urmtor este de ateptat ca rolul calculatorului n viaa noastr sa fie esenial ; oricine va trebui s stpneasc acest domeniu pentru a obine cu uurin ceea ce i dorete: o carier, un loc de munc, succes. Folosirea calculatorului poate fi i o lecie de logic; cine nelege regulile dup care funcioneaz computerul i lucrurile din viaa sa se vor desfura sub semnul ordinii . Pentru a-i croi drum n viitor, este necesar dotarea colilor cu calculatoare pentru ca nc din perioada de formare elevul, s beneficieze de competene digitale, de arta comunicrii cu ajutorul calculatorului. Ce nelegem prin termenul competen digital? S ne gndim n primul rnd, ce nelegem atunci cnd spunem c o persoan tie s utilizeze calculatorul? Fiecare intervievat va rspunde n mod diferit ntrebrilor de mai sus, vom obine n mod sigur argumente total diferite, cu puncte de vedere diferite. n primul rnd, sintagmaa utiliza calculatorul evoc o imagine care cuprinde cunotinele i deprinderile tehnice de baz necesare oricrui utilizator al zilelor noastre. n ierarhia competenelor pe care le achiziionm pe parcursul vieii, acest tip de cunotine i deprinderi tind s coboare spre nivelul bazal, al deprinderilor de tipul scris- cititului, deprinderi care ne ofer n primul rnd posibilitatea accesului la informaie. Se poate spune c ne aflm n plin proces de realizare a unui nou tip de alfabetizare. Chiar i numai la nivel implicit, fiecare dintre noi acceptm ideea c acest tip de competen funcional, se implic la nivel de funcionare cognitiv: persoana care utilizeaz tehnologia informatic n activitatea sa trebuie s nvee s s scrie i s citeasc dar, n acelai timp, s analizeze critic, s interpreteze i s contextualizeze informaia la care are acces n site-uri web, forumuri de discuie, chat , blog-uri ialtele. O abordare foarte larg a cunotinelor de utilizarea a calculatorului (computer literacy) a fost propus de Shapiro i Hughes (1996), care descriu un curriculum pentru nvarea utilizrii calculatorului bazat pe apte dimensiuni, fiecare dimensiune fiind la rndul su o alt competen: Utilizarea instrumentelor informatice (tools literacy) a nelege i utilize instrumente IT, inclusiv elementele hardware, software i multimedia. Utilizarea resurselor (resource literacy) a nelege formele i metodele de acces la sursele de informaie, n special cele afate n reea. Competena social-structural (social- structural literacy) a nelege situaia social i producerea de informaie. Cutarea informaiei (research literacy) utilizarea instrumentelor TIC pentru cercetare i educaie. Publicarea informaiei (publishing literacy) abilitatea de a comunica i publica o informaie. Dezvoltarea noilor tehnologii (emerging technology literacy) capacitatea de a nelege inovaiile n domeniul TIC i de a lua decizii inteligente cu privire la implementarea noilor tehnologii. Atitudine critic (critical literacy) abilitatea de a evalua n mod critic beneficiile i costurile tehnologiilor informaiei (de notat c aceasta nu este similar gndirii critice despre care vom vorbi n continuare). Dac elevii sunt orientai cu ncredere spre schimbare, ei vor simi nevoia de a fi instruii ct mai bine pentru a face faa noilor tipuri de profesii. Eecul n dezvoltarea capacitii de a reaciona la schimbare poate atrage dupa sine pasivitatea i incapacitatea de a se acomoda la lumea IT. 49
Tehnologiile digitale nu trebuie s reprezinte o simpl adugare n planul de nvmnt, ele trebuie sa fie integrate deplin n serviciul educaiei la toate nivelurile sistemului colar. Actorii educaionali trebuie s fie formai pentru a face fa schimbrii, incertitudinii i inovrii. Complexitatea crescut a colilor i mediilor de nvaare de astzi sugereaz nevoia realizrii ntr-o nou manier a activitilor educaionale. Astfel actul nvrii nu mai este considerat a fi efectul demersurilor i muncii profesorului, ci rodul interaciunii elevilor cu calculatorul i al colaborrii cu profesorul. Aceast schimbare n sistemul de nvmnt, competenele digitale vizeaz urmtoarele obiective : 1. Creterea eficienei activitilor de nvare; 2. Dezvoltarea competenelor de comunicare i studiu individual. Atingerea acestor obiective depinde de gradul de pregtire a profesorului n utilizarea calculatorului, de stilul profesorului, de numrul de elevi, de interesul, cunotinele i abilitile acestora, de atmosfera din clasa i tipul programelor folosite, de timpul ct se integreaz softul n lecie, de sincronizarea explicaiilor cu secvenele utilizate, de metodele de evaluare, de fiele de lucru elaborate. De asemenea calculatorul este extrem de util deoarece stimuleaz procese i fenomene complexe pe care nici un alt mijloc didactic nu le poate pune att de bine n eviden. Astfel, prin intermediul lui se ofer elevilor, modelri, justificri i ilustrri ale conceptelor abstracte, ilustrri ale proceselor i fenomenelor neobservabile sau greu observabile din diferite motive. Calculatorul este folosit pentru dezvoltarea capacitilor de comunicare, pentru colectarea, selectarea, sintetizarea si prezentarea informaiilor, pentru tehnoredactarea unor referate. Astfel elevii i dezvolt capacitatea de a aprecia critic acurateea i corectitudinea informaiilor dobndite din diverse surse. Tehnica modern i nvmntul centrat pe nevoile, dorinele si posibilitile elevului impune desfurarea de activiti difereniate pe grupe de nivel. Dei avantajele utilizrii TIC n educaie sunt numeroase, elevul nu trebuie transformat ntr-un robot care s tie doar s foloseasc calculatorul. El trebuie s realizeze atunci cnd este posibil experimentele reale, deoarece i dezvolt spiritul de observaie, capacitatea de concentrare, rbdarea, atenia, abilitile practice. Se poate spune ca integrarea resurselor TIC n educaie este benefic i duce la o cretere a performanelor colare, cu condiia ca elevii s posede cunotine de utilizare a calculatorului. Aceasta implic introducerea orelor de informatica i TIC la toate profilurile i la toate treptele de nvmnt. TIC nu trebuie s fie doar un instrument pentru a prezenta coninuturile existente ntr-o alt manier, trebuie s duc la modificarea modului de gndire i stilului de lucru la clas al profesorilor, cristalizate n secole de nvmnt tradiional, prea puin preocupat de personalitatea i de posibilitile elevului. n concluzie putem spune c se remarc faptul c tendinele dominante ale ariei Informrii & Comunicrii sunt orientate spre dezvoltarea inteligenei economice, spre dezvoltarea traseelor informaionale caracteristice noii Societi Informaionale a secolului 21, n care reprezentm starea de fapt a prezentului i viitorului Bibliografie: 1. http://marinvlada.googlepages.com 2. COMPETENA DIGITAL - ANA- MARIA MARHAN - publicaii WEB - 2009 3. Vlada, Marin (2009) Utilizarea Tehnologiilor eLearning: cele mai importante 10 initiative si proiecte din Romania. Ed: Elearning.Roman, 2009. 4.. Dertouzos, M., Ce va fi. Cum vom tri n noua lume a informaiei, Bucureti: Ed.Tehnic, 2000. 5. Lynch, C, Information literacy and information technology literacy: new components in the curriculum for a digital culture, 2004, http://staff.cni.org/~clifford/papers/cni-info-it- lit.html. 6. Brouwer, P.S., Critical thinking in the information age, Journal of Educational Technology Systems, 25(2), 2008 . 50
Elaborat de Maria si Corneliu Hahui Matematicianul german Peter Gustav Dirichlet (1805-1859) a elaborat un principiu extrem de simplu cu aplicatii neasteptate in variate domenii, principiu care-i poarta numele si pe care-l enuntam mai jos, fiind o demonstratie de tipul urmator : ,,daca repartizam n+1 obiecte in n cutii atunci cel putin doua obiecte vor fi in aceeasi cutie.Justificare :consideram cazul cel mai nefavorabil asezand in fiecare cutie cate un obiect. Deci am folosit ,, n cutii si ,, n obiecte. Obiectul cu numarul n+1 trebuie pus si el intr-o cutie oarecare dar in acea cutie exista deja un obiect. Asadar avem o cutie cu doua obiecte. Nu este important care cutie contine cel putin doua obiecte, nici cate obiecte sunt in acea cutie si nici cate astfel de cutii exista. Important este ca exista cel putin o cutie cu cel putin doua obiecte. In literatura matematica principiul lui Dirichlet este intalnit si sub denumirea de ,,principiul cutiei, cu precizarea ca denumirea de ,,cutie desemneaza ,,grupe de obiecte, stabilite dupa anumite, iar ,,obiectele desemneaza lucruri, numere, figure geometrice, etc. La rezolvarea unor probleme este util de aplicat principiul Dirichlet generalizat. Daca plasam pn + 1 obiecte in n cutii, atunci cel putin o cutie va contine cel putin "p+1"obiecte. Unele probleme (in special ce tin de geometrie) se rezolva, utilizand principiul Dirichlet in urmatoarele enunturi: a) Daca pe un segment de lungime l sunt situate cateva segmente cu suma lungimilor mai mare ca l, atunci cel putin doua segmente au un punct comun; b) Daca in interiorul unei figuri de arie S sunt plasate figuri cu suma ariilor mai mare decat S, atunci exista cel putin doua dintre aceste figuri cu un punct comun; c) Daca figurile F1; F2; . . .; Fn cu ariile S1; S2; . . . ; Sn respectiv sunt incluse in figura F cu arie S si S1 + S2 + . . . + Sn > kS, atunci k + 1 din figurile F1; F2; ... ; Fn au un punct comun. Ceea ce caracterizeaza problemele in care se foloseste acest principiu, este dificultatea de a le aborda pe cai cunoscute. In general principiul cutiei este un principiu de numarare care in ultimul timp a capatat o mare popularitate fiind pus la baza unui numar mare de probleme, unele chiar dificile. Voi prezenta in continuare cateva probleme ale caror solutii se bazeaza pe principiul de mai sus. 6.APLICATII LA PRINCIPIUL LUI DIRICHLET 1) Se considera 7 numere naturale. Demonstrati ca printre numerele date, cel putin doua dau acelasi rest la impartirea cu 6. Solutie. La impartirea cu 6 a unui numar natural se poate obtine unul din resturile:0, 1, 2, 3, 4,sau 5. Consideram cutia ,,i formata din numerele care dau restul ,,i la impartirea cu 6.Rezulta astfel 6 cutii in care trebuie plasate 7 numere. Va exista cel putin o cutie care contine doua sau mai multe numere care dau acelasi rest la impartirea cu 6. Generalizare. Fie n+1 numere. Sa se arate ca exista cel putin doua numere care dau acelasi rest prin impartirea la n. 2) Sa se demonstreze ca printre orice sase numere intregi exista doua numere a caror diferenta este divizibila prin 5. Solutie. Conform exercitiului anterior, exista cel putin doua numere care dau acelasi rest prin impartire cu 5, deci diferenta lor este divizibila cu 5. 3) Sa se arate ca oricum am alege 7 numere patrate perfecte (distincte), exista cel putin doua a caror diferenta se divide cu 10. Solutie.Daca a N, a impartit la 10 va da unul din resturile: 0, 1, 4, 5, 6, 9. Deoarece avem 7 patrate perfecte si numai 6 resturi, atunci exista cel putin doua patrate perfecte care dau acelasi rest la impartirea cu 10, deci diferenta lor se divide cu 10. 4) Sa se arate ca oricum am alege cinci numere intregi, exista doua dintre acestea, care au suma sau diferenta divizibile cu 7. Solutie. La impartirea cu 7 a unui numar rezulta resturile 0,1,2,3,4,5,6. Patratul sau va da la impartirea cu 7 unul din resturile 01,2,4. Avem cinci numere si patru resturi, rezulta conform principiului cutiei ca cel putin doua din cele cinci patrate dau acelasi rest la impartirea cu 7 ; 51
x -y se divide cu 7, deci 7 |(x-y)(x+y). cum 7 este numar prim ,avem ca 7|x-y sau 7|x+y. 5) La un turneu de sah au participat n>2 sahisti. Sa se demonstreze ca in orice moment al turneului dinaintea ultimei runde, cel putin doi sahisti au acelasi numar de victorii. Solutie. In orice moment al turneului dinaintea ultimei runde, fiecare sahist a jucat maximum n-2 partide si a putut obtine 0, 1, 2, ..n-2 victorii, deci in total n-1 posibilitati(cutii). Deoarece la turneu au participat n sahisti, rezulta ca cel putin doi sahisti au acelasi numar de victorii inaintea ultimei runde. 6) Consideram multimea A= {a 1 ,a 2, a n }cu elemente numere intregi. Sa se demonstreze ca A are cel putin o parte nevida cu proprietatea ca suma elementelor sale se divide cu n. Solutie.Daca a este numar intreg si n numar natural, exista q si r unice astfel incat a=nq+r cu qZ si r {0,1,n-1}.Consideram urmatoarele n submultimi ale luiA: A 1 ={a 1 }, A 2 ={ a 1 ,a 2
},..A n = {a 1 ,a 2 ,.a n }. Notam cu S i
=a 1 +a 2 +.+.a i ,cu i=1,n ( suma elementelor fiecarei multimi). Daca unul din numerele S i cu i=1,n se divide cu n, problema este rezolvata. Daca nu, cele n resturi obtinute prin impartirea cu n a numerelor S i , apartin
multimii
{1, 2, .n-1 }cu n-1 elemente diferite. Deci exista cu siguranta doua numere S i si S j care dau acelasi rest la impartirea cu n. Fie S i = a 1 +a 2 +.a i si S j =a 1 +a 2 +.a j cele doua numere. Fie i<j ;cum n| S i S j , rezulta ca submultimea este B={a i+1 , a i+2 ,..a j }. 7) Consideram noua puncte intr-un patrat cu latura de lungime 1. Sa se demonstreze ca exista un triunghi cu varfurile in trei din cele noua puncte a carui arie sa fie cel mult 1/8. Solutie. Unind doua cate doua mijloacele laturilor opuse in patratul dat, obtinem o impartire a acestuia in patrate de arie 1/4.Oricum am plasa cele noua puncte, intotdeauna trei se vor afla in interiorul sau pe laturile aceluiasi patrat. Fie A, B, C cele trei puncte situate in patratul EFGH. Sa aratam ca aria (ABC ) <1/8.
Ducem prin A paralela la EH. Fie AQ || EH, Q BC, BN AQ si CPAQ, (N, P AQ). Atunci avem : S ABC =S ABQ +S ACQ = (AQ BN)/2 + ( AQ CP)/2= AQ( BN+CP )/2 < EH HG/2 =S EHGF /2 =1/8 .Egalitatea se obtine cand o latura a triunghiului coincide cu o latura a patratului si celalalt varf al triunghiului se gaseste se afla pe latura opusa. 8) Sa se arate ca oricum am aseza 37 puncte in interiorul unui triunghi echilateral cu latura de lungime 1, exista cel putin doua puncte a.i. distanta dintre ele sa nu depaseasca 0,1(6). Solutie. Impartim fiecare latura a triunghiului in 6 segmente cu lungimea 1/6. Prin punctele de diviziune ducem paralele la laturile triunghiului si obtinem 1+3+5+7+9+11=36=6 triunghiuri echilaterale cu latura de 1/6. Consideram 37 de puncte in triunghiul initial, cel putin doua dintre acestea se vor afla in interiorul sau pe laturile unui triunghi(conform principiul cutiei) cu latura de 1/6=0,1(6), deci distanta dintre acestea va fi cel mult 1/6.
Generalizare. Sa se arate ca oricum am aseza n 2 +1 puncte in interiorul unui triunghi echilateral cu latura de lungime 1, exista cel putin doua puncte a.i. distanta dintre ele sa nu depaseasca 1/n. 52
9) Punctele planului sunt colorate in doua culori. Sa se arate ca exista doua puncte de aceeasi culoare situate la distanta 1m. Solutie. Consideram un triunghi echilateral cu lungimea laturii de 1m. Varfurile triunghiului vor desemna "obiectele" si culorile vor fi "cutiile". Cum "obiecte" sunt mai multe decat "cutii" rezulta, ca exista doua varfuri de aceeasi culoare. Cum triunghiul este echilateral,distanta dintre varfuri este 1m. Tinem sa mentionam ca aceasta problema poate fi rezolvata si prin alta metoda. Fie A un punct in plan si presupunem, ca toate punctele din plan situate la distantade 1m de A sunt de culoare diferita de culoarea punctului A. Atunci avem o circumferinta de raza 1 din puncte de aceeasi culoare. Evident exista o coarda a acestei circumferinte de lungime1m. Prin urmare, extremitatile coardei sunt puncte de aceeasi culoare situate la distanta de 1m. 10) Se considera in plan n puncte distincte. Cate doua puncte determina un segment. Sa se demonstreze ca exista doua puncte din care pleaca acelasi numar de segmente. Solutie. Dintr-un punct pleaca maximum n-1 segmente si minim 1. Cum avem n puncte, vor exista doua din care pleaca acelasi numar de segmente.
11) In interiorul patratului de latura 1 sunt asezate cateva cercuri, avand suma lungimilor egala cu 10. Sa se arate ca exista o dreapta, care sa intersecteze cel putin patru din aceste cercuri. Solutie. Se proiecteaza cercurile pe una din laturile patratului. Proiectia fiecarui cerc este un segment cu lungimea egala cu lungimea diametrului cercului respectiv. Suma tuturor acestor segmente este 3,1. Conform principiului Dirichlet, exista cel putin patru segmente ce au in comun un punct. Perpendiculara ridicata in acest punct, pe latura patratului, va intersecta cel putin patru cercuri. 12) In plan sunt date 25 puncte, astfel incat dintre orice trei puncte doua puncte sunt situate la distanta mai mica ca 1. Sa se demonstreze ca exista un cerc de raza 1 ce contine nu mai putin de 13 din aceste puncte. Solutie. Fie A unul din punctele date. Daca celelalte puncte sunt in interiorul cercului S1de raza 1 si centrul in A, atunci problema este solutionata. Fie B unul dintre punctele situate in exteriorul cercului S1. Examinam cercul S2 de raza 1 si centrul B. Printre punctele A; B; C,unde C un punct arbitrar dintre cele date, exista doua cu distanta intre ele mai mica decat 1.Mai mult aceste puncte nu pot fi A si B. Astfel cercurile S1 si S2 contin toate punctele initiale.Deci, unul dintre aceste cercuri contine cel putin 13 puncte. Observatie. In general, cand intr-o problema se cere sa se arate ca exista cel putin n elemente cu o anumita proprietate, este bine sa consideram ca exista cel mult n-1 elemente cu acea proprietate si din analiza cazului ,, exact n-1 , se ajunge la solutia problemei. Exemple. 1)Intr-o scoala sunt 731 elevi. Aratati ca exista cel putin 3 elevi care isi serbeaza ziua de nastere in aceeasi zi a anului. Solutie. Presupunem ca nu exista 3 astfel de elevi. Deci in fiecare zi a anului isi serbeaza ziua de nastere cel mult 2 elevi.Daca in fiecare zi a anului isi vor serba ziua de nastere doi elevi atunci, intr-un an, vor avea aniversarea 365 2 = 730 elevi. In scoala sunt 731 elevi, deci al 731-lea isi va serba ziua impreuna alti doi. 2) Suma a 63 numere naturale nenule este 2000. Sa se arate ca cel putin doua dintre acestea sunt egale.Care este cel mai mare numar de numere egale cu proprietatea ceruta? Solutie.Daca toate numerele sunt distincte si cele mai mici posibile obtinem: 1+2+3+63=2016>2000 ,deci cel putin doua numere sunt egale. De exemplu 2+3+4++62+48=2000. Daca toate numerele sunt egale, atunci: x+x+..+x=2000; 63x=2000 de unde x nu este natural.Pot fi cel mult 62 numere egale, cu proprietatea ceruta ,de exemplu 1+1++1+1938=2000. Bibliografie. 1. Mircea Ganga, Teme si probleme de matematica, Ed. Tehnica, Bucuresti, 1991. V.A.Ufnarovski, Acvariu Matematic, "Stiinta", Chisinau, 1988. 3. V.V.Prasolov, Zadaci po planimetrii, c.2, Moskva, Nauka, 1991 53
Examenul de ATESTAT la informatic, certific noiunile teoretice i practice abordate la clas pe parcursul celor 4 ani de studiu. Pe acestea le putem grupa n trei mai categorii : - Noiuni legate de Tehnologia informaiei i comunicaiei - Noiuni de programare - Notiuni de baze de date REZOLVRI-PROGRAMARE Subiectul 1 S se descompun un numr natural n (n1.000.000) n factori primi . S se determine numrul divizorilor numrului n. Exemplu: Date de intrare Date de ieire Explicaie n=3060 2^2 3^2 5^1 17^1 36 Descompunerea este 2 2 *3 2 *5*17 Numrul 3060 are (2+1)(2+1)(1+1)(1+1)=36 divizori n=19 19 ^1 2 19 este numr prim. Are doar 2 divizori. C++ #include<iostream.h> #include<conio.h> void main() {int n,fp,p,nrdiv=1,aux; cout<<n=;cin>>n;aux=n ; fp=3; while(n%2==0) { p++;n=n/fp;} if(p) cout<<2^<<p<< ; nrdiv=nrdiv*(p+1); while(n!=1) { p=0; while(n%fp==0) { p++;n=n/fp;} if(p){cout<<fp <<^<<p<<. ; nrdiv=nrdiv*(p+1) ; } fp+=2; } cout<< Numarul <<aux<< are "<<nrdiv<< divizori "<< <<endl; } Pascal Program unu; var n,x,i,d:longint; nr,cont:byte; begin write('n='); readln(n); d:=2; x:=n; while x>1 do begin nr:=0; while x mod d=0 do begin x:=x div d; inc(nr); end; if nr>0 then write(d,'^',nr,' '); inc(d); end; cont:=2; for i:=2 to n div 2 do if n mod i =0 then inc (cont); writeln(cont, ' divizori '); end. Subiectul 2 Se citete de la tastatur un numr n100 ir de n numere naturale mai mici dect 1000, x=(x 1 , x 2 , x 3 ,.., x n ). Scriei un program care afieaz mesajul da, daca suma numerelor din ir este un numr prim i nu n caz contrar. 54
Exemplu: Date de intrare Date de ieire Explicaie n=5 x=(4,3,19,1,2) da 29 este numr prim n=5 x=(3,3,19,1,2) nu 28 nu este numr prim
C++ #include<iostream.h> #include<math.h> int main() {int x[100],n,i,S=0,g; cin>>n; for(i=1; i<=n; i++) {cin>>x[i]; S+=x[i];} if(S<=1) g=0; else if(S==2) g=1; else if(S%2==0) g=0; else {g=1; for(i=3; i<=sqrt(S); i=i+2) if (S%i==0) g=0; } if (g) cout<<"da"; else cout<<"nu"; } Pascal program doi; var n,sw:byte;x:word;s,i:longint; begin write('n=');readln(n); for i:=1 to n do begin write('x='); readln(x); inc(s,x); end; i:=2; sw:=0; while (i<=trunc(sqrt(s))) and (sw=0) do if s mod i=0 then sw:=1 else inc(i); if sw=0 then write('da') else write('nu'); end.
Subiectul 3 Se citete de la tastatur un numr natural n (n500). Se cere s se afieze toate numerele naturale mai mici sau egale cu n, care au exact 3 divizori. Exemplu: Date de intrare Date de ieire Explicaie n=80 4 9 25 49 Sunt ptratele perfecte ale numerelor prime
C++ #include<iostream.h> void main() {int n; cout<<"n=";cin>>n; for (int x=4;x<=n;x++) {int nr=2;//orice nr admite ca divizori pe 1 si el insusi for(int d=2;d<=x/2;d++) if (x%d==0) nr++; if (nr==3) cout<<x<<' '; }}
Pascal program trei; var n,i,j,sw:word; begin write('n=');readln(n);write('4 '); i:=3; while i*i<=n do begin sw:=0; for j:=2 to trunc(sqrt(i)) do if i mod j=0 then sw:=1; if sw=0 then write(i*i,' '); inc(i,2); end; end. 55
Subiectul 4 Scriei un program care afieaz toate numerele naturale prime de trei cifre, ale cror oglindite sunt tot numere prime (ex: 183 este numr prim i 381 este tot numr prim). C++ #include<iostream.h> #include<math.h> void main() {int i,j,k,x,X,prim,d; for(i=1;i<=9;i=i+2) for(j=0;j<=9;j++) for(k=i;k<=9;k=k+2) {x=i*100+j*10+k; X=k*100+j*10+i; prim=1;d=3; while (prim && d<=sqrt(x)) if (x%d==0) prim=0; else d+=2; if (prim) {d=3; while(prim && d<=sqrt(X)) if(X%d==0) prim=0; else d+=2;} if(prim) cout<<x<<' '<<X<<endl;}} Pascal program patru; var n:word; function prim(x:word):boolean; var i:word; begin prim:=true; i:=2; while(x mod i<>0) and(i<=sqrt(x)) do inc(i); if i<=sqrt(x) then prim:=false; end; begin n:=101; while n<999 do begin if (prim(n)) and (prim(n mod 10*100+ (n div 10 mod 10) + (n div 100))) then writeln(n); inc(n,2); end; end. Subiectul 5 S se afieze numrul format prin eliminarea cifrelor pare ale unui numr n dat (n<1.000.000.000). Exemplu: Date de intrare Date de ieire Explicaie n=1234567 1357 Am eliminat cifrele pare 2, 4, 6 n=3746801 371 Am eliminat cifrele 4, 6, 8, 0 C++ #include<iostream.h> #include<math.h> long n,p,k=1; void main() {cin>>n; //vom forma numarul obtinut din cifrele impare while(n>0) {if(n%10%2==1) //daca ultima cifra e impara {p=n%10*k+p; k=k*10;} n=n/10;} //elimin cifra oricum cout<<p; }
Pascal program cinci; var p,n,x:longint; h:byte; begin write('n='); readln(N); x:=0;p:=1; repeat h:=n mod 10;n:=n div 10; if h mod 2=1 then begin x:=h*p+x; p:=p*10; end; until n=0; writeln(x); end 56
Subiectul 6 Se citete de la tastatur un numr ns100 i apoi n numere naturale s10.000. S se afieze acele numere dintre cele n care au suma divizorilor un numr prim. Dac niciunul dintre cele n numere nu are proprietatea dat , se va afia mesajul Niciun numr Exemplu: Date de intrare Date de ieire Explicaie n=7 123 289 100 54 729 10 999 289 729 Divizorii lui 123 sunt 1, 3, 41, 123. Suma 1+3+41+123=168 nu e prim Divizorii lui 289 sunt 1, 17, 289. Suma 1+17+289=307 este numr prim Divizorii lui 729: 1+3+9+27+81+243+729=1093 prim C++ #include<iostream.h> #include<math.h> int a[101],n,ok; int suma_diviz(int a)//returneaza suma divizorilor lui a {int s=a; //nr insusi e divizor al sau for(int i=1;i<=a/2;i++) if(a%i==0) s=s+i; return s;} int prim(int a) {if(a==0 || a==1) return 0; for(long i=2;i<=sqrt(a);i++) if(a%i==0) return 0; //am gasit un divizor, nr nu e prim return 1;}//daca n-am gasit niciun divizor, nr e prim void main() {cin>>n; for(int i=1;i<=n;i++) cin>>a[i]; for(i=1;i<=n;i++) if(prim(suma_diviz(a[i]))==1) {cout<<a[i]<<' ';ok=1;} if(!ok) cout<<Niciun numar<<endl;}
Pascal program sase; var t,i,sw,n,s,x,y:word; function prim(x:word):boolean; var i:word; begin prim:=true; i:=2; while(x mod i<>0) and(i<=sqrt(x)) do inc(i); if i<=sqrt(x) then prim:=false; end; function Sdiv(x:word):word; var i:word; begin S:=1+x; for i:=2 to x div 2 do if x mod i=0 then S:=S+i; Sdiv:=S; end; begin write('n=');readln(n);sw:=0; for i:=1 to n do begin readln(y); t:=Sdiv(y); if prim(t) then begin writeln(y,'are proprietatea ceruta'); sw:=1; end; end; if sw=0 then write('nu am nr cu propr'); end.
57
Subiectul 7 Se d un vector v cu n elemente de tip intreg, n 20. S se determine vectorii v1 i v2 ai cror componente ndeplinesc urmtoarele condiii : - v1[i] este format din suma cifrelor lui v[i] - v2[i] este format din produsul cifrelor lui v[i]. Exemplu: Date de intrare Date de ieire Explicaie n=5 v=(2,4,21,34,56) v1 = (2,4,3,7,11) v2 = (2,4,2,12,30)
Pascal program sub7; var n,i,h:byte; v,v1,v2 :array[1..20] of word; begin write('n='); readln(n); for i:=1 to n do begin write('v[',i,']='); readln(v[i]); end; for i:=1 to n do begin v1[i]:=0; v2[i]:=1; repeat h:=v[i] mod 10; v1[i]:=v1[i] +h; v2[i]:=v2[i]*h; v[i]:=v[i] div 10; until v[i]=0; end; for i:=1 to n do write(v1[i],' '); writeln; for i:=1 to n do write(v2[i],' '); end.
Subiectul 8 Se consider un vector cu n (n100) componente ntregi x=(x 1 , x 2 , x 3 ,.., x n ). S se afieze cte elemente din vector au valoarea mai mare dect media aritmetic a componentelor vectorului. Exemplu: Date de intrare Date de ieire Explicaie n=5 x=(4,9,12,5,10) 3
Media aritmetic este 8. Elementele mai mari ca 8 sunt 9, 12, 10 C++ #include<iostream.h> void main() Pascal program sub8; var n,i,cont :byte; 58
{ int n,x[100],i,S=0,nr=0; float media; cin>>n; for(i=1; i<=n; i++) {cin>>x[i];S+=x[i];} media=(float)S/n; for(i=1; i<=n; i++) if(x[i]>=media) nr++; cout<<"Numarul elementelor cu valoare mai mare sau egala cu media artimetica este"<<nr; }
s:integer; ma:real; v:array[1..100]of integer; begin write('n='); readln(n); for i := 1 to n do begin write ('v[',i,']='); readln(v[i]); end; s:=0; for i:=1 to n do s:=s+v[i]; ma:=s/n; cont:=0; for i := 1 to n do if v[i] > ma then inc (cont); writeln(cont); end.
Subiectul 9 Fie v un vector cu format din n numere ntregi, n100. S se afieze suma maxim ce se poate obine cu elemente din vectorul v. Numrul de elemente din sum trebuie s fie de cel puin 1.
Exemplu: Date de intrare Date de ieire Explicaie n=5 v=(-4,9,-12,5,10) 24 Suma maxima este s=9+5+10=24 n=5 v=(-4, -9,-12, -5, -10) -4 Suma maxim este S=-4
C++ #include<iostream.h> void main() {int n,v[100],i,S=0,max,poz=0; cin>>n>>v[1]; max=v[1]; if(v[1]>=0) {S=v[1];poz=1;} for(i=2; i<=n; i++) {cin>>v[i]; if (v[i]>=0) {S+=v[i];poz=1;} else if(v[i]>max) max=v[i]; if(poz==1) cout<<"suma maxima este"<<S; else cout<<"suma maxima este "<<max;}
Pascal program sub9; var i:byte; v:array[1..100] of integer; s,max,n: integer; begin write('n='); readln(n); for i:=1 to n do begin write('v[',i,']='); readln (v[i]); end; s:=0; max:=-maxint; for i:=1 to n do begin if v[i]>0 then s:=s+ v[i] else if max<v[i] then max:=v[i]; end; if s=0 then write (max) else write (s);end.
59
Subiectul 10 Se citete un vector A cu n componente numere ntregi i un vector B cu m componente numere ntregi (1 n,m 100). S se afieze cte din componentele vectorului A sunt strict mai mici dect orice component a lui B. Exemplu: Date de intrare Date de ieire Explicaie n =10 m= 8 A= ( 4, 8, 1, 9, 5, 11, 3, 43, 6, 20) B= ( 9, 9 , 6, 9, 9, 8, 6, 9) 4 Valorile 4, 1, 5 i 3 din A sunt mai mici dect orice element al lui B. C++ #include<iostream.h> void main() { int a[100],b[100],n,m; cout<<"n="; cin>>n; for (int i=0;i<n;i++) {cout<<"a["<<i+1<<"]=";cin>>a[i];} cout<<"m="; cin>>m;cout<<"b[0]=";cin>>b[0]; int min=b[0]; for (i=1;i<m;i++) {cout<<"b["<<i+1<<"]=";cin>>b[i]; if (min>b[i]) min=b[i]; } int nr=0; for (i=0;i<n;i++) if (a[i]<min) nr++; cout<<"nr="<<nr<<endl; }
Pascal program sub10; var a,b:array[1..100] of integer; m,n,cont,i:byte; min:integer; begin write ('n='); readln (n); write ('m='); readln(m); for i:=1 to n do begin write ('a[',i,']='); readln (a[i]); end; for i:=1 to m do begin write ('b[',i,']='); readln (b[i]);end; min:=maxint; for i :=1 to m do if b[i] < min then min:=b[i]; for i:=1 to n do if a[i] < min then inc(cont);write (cont);end
Subiectul 11 Se d un vector v cu n elemente numere naturale (1 n 100). Se cere s se afieze numrul cel mai mare format cu prima cifr a fiecrei componente din v. Exemplu: Date de intrare Date de ieire Explicaie n =4 v= ( 2341, 789, 1998, 2000) 7221 Primele cifre sunt 2, 7, 1, 2. Cel mai mare numr ce se poate obine cu aceste cifre este 7221 C++ #include<iostream.h> unsigned v[100],n; unsigned primacifra(unsigned x) {while (x>10) x=x/10; return x; } void ordonez() { int sort=1; Pascal program sub11; var v,v1: array [1..100] of integer; n,i,h,sw,aux:byte; l: integer; begin write('n='); readln(n); for i:=1 to n do 60
while (sort) {sort=0; for (int i=0;i<n-1;i++) if (v[i]<v[i+1]) {unsigned aux=v[i]; v[i]=v[i+1]; v[i+1]=aux;sort=1; } } } void main() {long nr=0; cout<<"n=";cin>>n; for (int i=0;i<n;i++) {cout<<"v["<<i+1<<"]=";cin>>v[i];} for (i=0;i<n;i++) v[i]=primacifra(v[i]); ordonez(); for (i=0;i<n;i++) cout<<v[i]; }
begin write ('v[',i,']='); readln (v[i]); end; h:=0; for i:=1 to n do begin while v[i]>0 do begin h:=v[i] mod 10; v[i]:= v[i] div 10; end; v1[i]:=h; end; repeat sw:=0; for i:=1 to n-1 do if v1[i]<v1[i+1] then begin aux:= v1[i];v1[i] := v1[i+1]; v1[i+1]:= aux; sw:=1; end; until sw=0; l:=0; for i:= 1 to n do l:=l*10+ v1[i]; write(l); end.
Subiectul 12 S se inverseze cele dou jumti ale unui numr natural n. Dac numrul are un numr impar de cifre, cifra din mijloc rmne pe loc. (n1.000.000.000)
Exemplu:
Date de intrare Date de ieire Explicaie 123456 456123 n=123456 => n=456123 1234567 5674123 n=1234567 => n=5674123 C++ #include<iostream.h> #include<math.h> long n;int a,b,c,k; int nr_cifre(long n) {int k=0; while(n) {k++; n=n/10;} return k; } void main() {cin>>n; k=nr_cifre(n); b=n%(int)pow10(k/2); /*a doua jumatate are k/2 cifre; pow10 returneaza un rezultat de tip float*/ n=n/pow10(k/2); //elimin k/2 cifre
Pascal program sub12; var x:longint; t:byte; c,s:string; q:char; begin write ('x=');readln(x); str (x,s); t:=length(s);c:=copy (s,1,t div 2); if t mod 2 =0 then delete (s,1,length(s)-(t div 2)) else begin 61
if(k%2==1) //daca nr de cifre e impar {c=n%10; //retin cifra din mijloc n=n/10;} //si o elimin a=n; //a este ce a mai ramas din n if(k%2==0) n=b*pow10(k/2)+a; else n=b*pow10(k/2+1)+c*pow10(k/2)+a; cout<<n;} q:=s[(t div 2)+1];delete (s,1,length(s)-(t div 2)); end; if t mod 2 =0 then c:=s+c else c:=s+q+c; writeln(c); readln; end.
Subiectul 13 Se citete de la tastatur un numr natural n i un tablou unidimensional cu n numere ntregi (n100). S se ordoneze cresctor elementele de pe poziiile pare ale tabloului i descresctor elementele de pe poziiile impare. Exemplu : Date de intrare Date de ieire Explicaie n=11 a={1, 5, 7, 3, 9, 1, 8, 7, 3, 1, 9} 9 1 9 1 8 3 7 5 3 7 1 a={1, 5, 7, 3, 9, 1, 8, 7, 3, 1, 9} irul a devine: a={9, 1, 9, 1, 8, 3, 7, 5, 3, 7, 1} C++ #include<iostream.h> int a[101],n; void main() {int i,j,ok,aux; cin>>n; for(i=1;i<=n;i++) cin>>a[i]; //sortam prin metoda selectiei elementele de pe pozitii impare for(i=1;i<=n-2;i=i+2) for(j=i+2;j<=n;j=j+2) if(a[i]<a[j]) {aux=a[i]; a[i]=a[j]; a[j]=aux; } //sortam prin metoda bulelor elementele de pe pozitii pare do {ok=1; for(i=2;i<=n-2;i=i+2) if(a[i]>a[i+2]) {aux=a[i]; a[i]=a[i+2]; a[i+2]=aux; ok=0;} }while (ok==0); for(i=1;i<=n;i++) cout<<a[i]<<' '; } Pascal program sub13; var a:array[1..100] of word; n,aux:word; i,j,sw:byte; begin write('n='); readln(n); for i:=1 to n do begin write('a[',i,']='); readln(a[i]); end; repeat i:=2; sw:=0; while i<=n-1 do begin if (a[i]>a[i+2]) and (i+2<=n) then begin aux:=a[i]; a[i]:=a[i+2]; a[i+2]:=aux; sw:=1; end; if (a[i-1]<a[i+1]) and (i+1<=n) then begin aux:=a[i-1]; a[i-1]:=a[i+1]; a[i+1]:=aux; sw:=1; end; inc(i,2); end; until sw=0; for i:=1 to n do write ('a[',i,']=',a[i],' ');end. 62
Subiectul 14 Se citete de la tastatur un numr n<50. S se formeze fiierul piramida.txt care s conin numerele naturale de la 1 la n, n ordine cresctoare, dispuse astfel: pe primul rnd un numr, pe al doilea rnd 2 numere, pe al treilea rnd 3 numere etc. Ultimul rnd poate s rmn incomplet. Numerele vor fi separate printr-un singur spaiu. Exemplu :Date de intrare piramida.txt Explicaie n=19
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 Ultimul rnd e incomplet, doar de 4 numere, pn s-a ajuns la 19 C++ #include<fstream.h> int n,k=1,p,i; void main(){ cin>>n; ofstream f("piramida.txt"); p=1; while(p*(p+1)/2<=n) //linii intregi {for(i=1;i<=p;i++) {f<<k<<' '; k++;} f<<endl; p++;} for(i=1;k<=n;i++) //linia incompleta {f<<k<<' '; k++;} f.close();}
Pascal program sub14; var i,j,n,nr:byte; f:text; begin assign(f,'d:\bp\bin\piramida.txt'); write('n=');readln(n); rewrite(f); j:=1; while j<=n do begin nr:=0; while (j<=n) and (i>nr) do begin write (f,j,' '); inc(nr); inc(j); end; writeln(f); inc(i); end; close(f); end.
Subiectul 15 S se determine suma elementelor de sub diagonal principal a unei matrici ptratice de ntregi, inclusiv elementele de pe diagonala principal. Matricea are n linii i coloane, n20. Exemplu : Date de intrare Date de ieire Explicaie n=4 3 7 8 10 1 5 2 20 7 2 9 13 8 9 1 11 56 3 7 8 10 1 5 2 20 7 2 9 13 8 9 1 11 3+1+5+7+2+9+8+9+1+11=56
63
C++ #include<iostream.h> int i,n,j,a[20][20],s; void suma(int x) {for(i=1;i<=x;i++) for(j=1;j<=i;j++) s=s+a[i][j]; cout<<s;} void main() {cout<<"n=";cin>>n; for(i=1;i<=n;i++) for(j=1;j<=n;j++) {cout<<"a["<<i<<"]["<<j<<"]="; cin>>a[i][j];} suma(n);}
Pascal program sub15; var a: array [1..30, 1..30] of integer; m,n,i,j: integer; s: longint; begin write ('n='); readln (n); for i:= 1 to n do for j:=1 to n do begin write ('a[', i, ',', j, ']='); readln (a[i,j]); end; S:=0; for i:= 1 to n do for j:=1 to i do s:=s+ a[i,j]; writeln ('s=', s); end.
Subiectul 16 S se verifice dac elementele unui vector pot forma o mulime. Se va afia DA sau NU. Vectorul are n elemente numere naturale, n100. Exemplu : Date de intrare Date de ieire Explicaie n=7 a=(1, 5, 7, 3, 9, 10, 8) DA Elementele sunt distincte n=7 a=(1, 5, 7, 3, 9, 1, 9) NU Sunt elemente care se repet.
C++ #include<stdio.h> void main() {int v[20],n,i,j,test; printf("n=");scanf("%d",&n); for(i=1;i<=n;i++) { printf("v[%d]= ",i); scanf("%d",&v[i]); } test=0; for(i=1;i<=n-1;i++) for(j=i+1;j<=n;j++) if(v[i]==v[j]) {test=1; break;} if(n==0) test=0; if(test==0) printf("elementele pot forma o multime"); else printf(" elementele nu pot forma o multime Pascal program sub16; var v:array[1..100]of integer; n,i,j:byte; sw:boolean; begin write('n=');readln(n); for i:=1 to n do begin write('v[',i,']=');readln(v[i]); end; sw:=true;x:=1; for i := 1 to n-1 do for j:=i+1 to n do if v[i]=v[j] then sw:=false ; if sw=true then writeln('Elementele vectorului SUNT distincte') 64
"); }
else writeln('Elementele vectorului NU SUNT distincte'); readln; END
Subiectul 17 Scriei un program C/C++ care citete de la tastatur dou valori naturale nenule m i n (m10, n10) i apoi m*n numere naturale nenule cu cel mult 4 cifre fiecare, reprezentnd elementele unei matrice cu m linii i n coloane. Programul determin apoi valorile minime de pe fiecare linie a matricei i le afieaz pe o linie a ecranului separate prin cte un spaiu, iar la sfrit valoarea maxim din irul valorilor minime determinate anterior. Exemplu : Date de intrare Date de ieire Explicaie m=3 n=5 5 13 7 7 3 9 6 12 9 10 3 2 5 4 7
3 6 2 6
Cea mai mic valoare de pe prima linie a matricei este 3, cea mai mic valoare de pe linia a doua este 6, cea mai mic valoare de pe linia a treia este 2 iar cea mai mare valoare dintre ele este 6
Pascal program sub17; var v:array [1..10,1..10] of byte; n,m:byte; i,j:integer; max,min:integer; begin write('m='); readln(m); write('n='); readln(n); for i:=1 to m do for j:=1 to n do begin write('v[',i,j,']='); readln(v[i,j]); end; max:=0; for i:=1 to m do begin min:=maxint; for j:=1 to n do if min>v[i,j] then min:=v[i,j]; if max<min then max:=min; write(min,' '); end; write(max); end. 65
Subiectul 18 Scriei un program C/C++ care citete de la tastatur un numr natural cu n cifre (cel mult 9 cifre) i construiete n memorie o matrice cu n linii i n coloane, numerotate de la 1 la n, format astfel: - elementele de pe linia 1, au toate valoarea egal cu cifra unitilor numrului citit; - elementele de pe linia 2, au toate valoarea egal cu cifra zecilor numrului citit; - elementele de pe linia 3, au toate valoarea egal cu cifra sutelor; etc. Programul afieaz pe ecran matricea astfel construit, cte o linie a matricei pe cte o linie a ecranului, elementele de pe aceeai linie fiind separate prin cte un spaiu.
Exemplu : Date de intrare Date de ieire Explicaie 28731 1 1 1 1 1 3 3 3 3 3 7 7 7 7 7 8 8 8 8 8 2 2 2 2 2 Cifra unitilor e 1, cifra zecilor e 3 etc.
Pascal program sub18; var n:longint; i,j:byte h,t,x:longint; a: array[1..10,1..10] of longint; begin write ('x='); readln (x); t:=x; while t<>0 do begin t:=t div 10; inc (n); end; for i:=1 to n do begin h:=x mod 10; x:=x div 10; for j:=1 to n do a[i,j]:=h; end; for i:=1 to n do begin for j:=1 to n do write (a[i,j],' ');writeln; end;end.
Subiectul 19 Se consider o matrice ptratic cu n linii i n coloane (1<n30), ce memoreaz numere ntregi nenule de cel mult dou cifre fiecare. Scriei un program C/C++ care citete de la tastatur valoarea n i elementele matricei i care afieaz pe ecran produsul acelor elemente de pe diagonala secundar care au proprietatea c sunt valori minime pe coloanele lor. Dac nu exist astfel de elemente n matrice, se va afia mesajul NU EXISTA.
66
Exemplu : Date de intrare Date de ieire Explicaie n=4 3 7 8 10 1 5 2 20 7 2 9 13 8 9 1 11 20
C++ #include<iostream.h> int minim_coloana(int a[31][31],int C,int n) {int min=a[1][C]; for(int i=2;i<=n;i++) if(a[i][C]<min) min=a[i][C]; return min; } void main() {int a[31][31],n,i,j,min; long p=1; cin>>n; for(i=1;i<=n;i++) for(j=1;j<=n;j++) cin>>a[i][j]; int g=0; for(i=1;i<=n;i++) if(a[i][n-i+1]==minim_coloana(a,n- i+1,n)) {p=p*a[i][n-i+1]; g=1; } if(g==0) cout<<"NU EXISTA"; else cout<<p; }
Pascal program sub19; var a: array[1..30,1..30] of shortint; n,i,j,sw:byte; p: integer; function minim (c:byte):shortint; var t:byte; min:shortint; begin min:=a [1,c]; for t:=2 to n do if a[t,c] < min then min:=a[t,c]; minim:=min; end; begin write ('n=');readln (n); for i:=1 to n do for j:=1 to n do begin write ('a[',i,',',j,']='); readln (a[i,j]);end; p:=1; sw:=0; for i:=1 to n do if a [i,n-i+1] = minim(n-i+1) then begin sw:=1; p:=p*a[i,n-i+1]; end; if sw=0 then writeln ('NU') else writeln (p); end.
Subiectul 20 Scriei un program C/C++ care citete de la tastatur dou numere naturale n i m (m10, n10), apoi elementele unui tablou bidimensional cu m linii i n coloane, numere ntregi distincte, de maximum 4 cifre fiecare, i care determin cel mai mic i cel mai mare numr din tablou i le interschimb. Matricea modificat va fi afiat pe ecran, cte o linie a matricei pe o linie a ecranului, elementele fiecrei linii fiind separate prin cte un spaiu. Exemplu : 67
Date de intrare Date de ieire Explicaie m=5 n=4 2 24 -5 8 3 25 17 9 4 -2 13 10 5 14 12 70 6 57 36 43 2 24 70 8 3 25 17 9 4 -2 13 10 5 14 12 -5 6 57 36 43 Cel mai mic element este -5 iar cel mai mare, 70
Pascal program sub20; var a: array [1..10,1..10] of integer; m,n,i,j, maxx, maxy, minx, miny, min , max,x: integer; begin write ('m='); readln (m);write ('n='); readln (n); for i:=1 to m do for j:=1 to n do begin write ('a[',i,',',j,']='); readln (a[i,j]); end; minx:=0;miny:=0;maxx:=0;maxy:=0; min:=maxint;max:= - maxint; for i:=1 to m do for j:=1 to n do begin if min> a[i,j] then begin minx:=i; miny:=j; min:=a[i,j]; end; if max<a[i,j] then begin maxx:=i; maxy:=j; max:=a[i,j]; end; end; x:=a[minx,miny];a[minx, miny]:= a[maxx, maxy]; a [maxx, maxy]:=x; for i:=1 to m do begin for j:=1 to n do write (a[i,j],' '); writeln; end; end.
Subiectul 21 S se scrie un program care s sorteze cresctor liniile unei matrice cu m linii i n coloane (m20, n20) folosind metoda BUBBLESORT. Valorile lui m i n i elementele ei vor fi citite de la tastatur. Dup sortare matricea se va afia n fiierul f.out. Exemplu :
Pascal program sub21; var a:array [1..20,1..20] of integer; m,n,i,j,sw,aux:byte; begin write('m='); readln(m); write ('n='); readln(n); for i:=1 to m do for j:=1 to n do begin write('a[i,j]='); readln(a[i,j]); end; for i:=1 to m do begin repeat sw:=0; for j :=1 to n-1 do if a[i,j]>a[i,j+1] then begin aux:=a[i,j]; a[i,j]:=a[i,j+1]; a[i,j+1]:= aux; sw:=1 ; end; until sw=0; end; if sw=0 then for i:=1 to m do begin for j:=1 to n do write(a[i,j],' '); writeln; end; end.
Subiectul 22
Din fiierul f.in se citete de pe prima linie un numr natural n (n<=20) reprezentnd numrul de linii respectiv de coloane ale unei matrice ptratice, iar de pe urmtoarele n linii se citesc elementele matricei. S se afieze matricea, s se precizeze cte numere prime se afl sub diagonala principal i cate numere ptrate perfecte sunt deasupra diagonalei principale.
69
Exemplu : Date de intrare Date de ieire Explicaie 5 3 15 12 3 9 6 21 18 4 7 12 9 17 5 10 42 23 3 15 8 22 8 31 7 12
3 15 12 3 9 6 21 18 4 7 12 9 17 5 10 42 23 3 15 8 22 8 31 7 12 4 2 Sub diagonala principala sunt patru numere prime: 23, 3,31,7
Deasupra diagonalei principale sunt dou ptrate perfecte:9, 4
Pascal program sub22; var f:text; a:array[1..10,1..10] of word; n,i,j:byte; function prim (x:integer):boolean; var sw:boolean; i:integer; begin sw:=true; for i:=2 to x div 2 do if x mod i=0 then sw:=false; prim:=sw; end; begin assign (f,'d:\BP\BIN\f.in');reset(f); readln (f,n); for i:=1 to n do begin for j:=1 to n do read (f, a[i,j]); readln (f); end; close (f); for i:=1 to n do begin for j:=1 to n do write (a[i,j], ' '); writeln; end; writeln('numere prime sub diagonala principala'); for i:= 2 to n do for j:=1 to i-1 do if prim (a[i,j]) then write (a[i,j], ' '); writeln('numere patrate perfecte deasupra diagonalei principale'); for i:= 1 to n-1 do for j:=i+1 to n do if sqrt (a[i,j])= trunc(sqrt(a[i,j])) then write (a[i,j], ' '); end.
70
Subiectul 23 Scriei un program care construiete n memorie o matrice ptratic cu n linii i n coloane (n<=20) format numai din valori 0,1 i 2 astfel nct elementele de pe diagonala secundar i cea principal s fie egale cu 0, elementele din Nord si Sud egale cu 1, iar restul elementelor din matrice s fie egale cu 2. Matricea va fi afiat n fiierul f.out. Exemplu: Date de intrare Date de ieire n=5 0 1 1 1 0 2 0 1 0 2 2 2 0 2 2 2 0 1 0 2 0 1 1 1 0 C++ #include<iostream.h> #include<fstream.h> ofstream g("f.out"); void main() {int n,a[21][21],i,j; cin>>n; for(i=1;i<=n;i++) for(j=1;j<=n;j++) a[i][j]=0; for(i=1;i<=n;i++) for(j=1;j<=n;j++) { if((i>j)&&(i+j<n+1)) a[i][j]=2; if((i>j)&&(i+j>n+1)) a[i][j]=1; if((i<j)&&(i+j<n+1)) a[i][j]=1; if((i<j)&&(i+j>n+1)) a[i][j]=2; } for(i=1;i<=n;i++) {for(j=1;j<=n;j++) g<<a[i][j]<<" "; g<<endl; }}
Pascal program sub23; var a:array [1..30, 1..30] of byte; f:text; n,i,j:byte; t,l1,l2,c1,c2,l:byte; begin write('n=');readln(n); for i:=1 to n do begin a[i,i]:=0; a[i,n-i+1]:=0; end; l1:=1; l2:=n; c1:=1; c2:=n; for t:=1 to n div 2 do begin for j:=c1+1 to c2-1 do begin a[l1,j]:=1; a[l2,j]:=1; end; for i:=l1+1 to l2-1 do begin a[i,c1]:=2; a[i,c2]:=2; end; inc(l1); inc(c1); dec(l2); dec(c2); end; assign(f,'d:\BP\BIN\f.art'); rewrite(f); for i:=1 to n do begin for j:=1 to n do write(f,a[i,j],' '); writeln(f); end; close(f); end.
Subiectul 24 Se consider fiierul f.in ce conine pe prima linie un numr natural n (n<=20) ce semnific numrul de linii ale unei matrice ptratice de numere ntregi iar pe urmtoarea linie elementele matricei n ordinea parcurgerii acesteia pe linii. Afiai pe ecran suma elementelor de pe cele dou diagonale ale matricei. Exemplu : Date de intrare Date de ieire 4 1 2 3 4 5 9 7 3 2 1 0 9 6 0 4 4
Pascal program sub24; var f: text; n,sp,ss,x,i:byte; begin assign (f,'d:\bp\bin\f.in'); reset (f); readln (f,n); sp:=0; ss:=0; for i:=1 to n*n do begin read (f,x); if (i-1) mod (n+1)=0 then inc (sp,x) else if (i-1) mod (n-1)=0 then inc(ss,x); end; write (ss,' ',sp); close (f); end.
Subiectul 25 Fie o matrice A cu n linii i m (n<=20, m<=20) coloane cu elemente numere ntregi (n, m i elementele matricei se citesc de la tastatur). Se cere s se determine cel mai mare numr de pe marginea tabloului, precum i de cte ori apare. Exemplu : Date de intrare Date de ieire Explicaie n= 5, m= 4 1 2 3 4 1 5 1 1 3 7 8 5 5 3 8 3 3 2 2 5 5 3 Elementele de pe contur sunt: 1 2 3 4 1 5 3 5 2 2 3 5 3 1 Cel mai mare numr este 5 i apare de 3 ori
C++ #include<iostream.h> #include<values.h> void main() {int a[21][21],i,j,n,m; cout<<"n=";cin>>n; cout<<"m=";cin>>m; for (i=0;i<n;i++) for (j=0;j<m;j++) {cout<<"a["<<i+1<<"]["<<j+1<<"]="; cin>>a[i][j]; } int max=-MAXINT,nr=1; for(j=0;j<m-1;j++) if (max==a[0][j]) nr++; else if (max<a[0][j]) {max=a[0][j]; nr=1;} for (i=0;i<n-1;i++) if (max==a[i][m-1]) nr++; else Pascal program sub25; var a : array [1..30, 1..30] of integer; n, m, i, j, y, max, maxint, cont : byte; begin write ('n=');readln (n);write ('m=');readln (m); for i:=1 to n do for j:=1 to m do begin write ('a[',i,',',j,']=');readln (a[i,j]); end; max:= -maxint;cont:=0; for j:=1 to m do if a[1,j]>max then begin cont:= 1; max:=a[1,j]; end else if a[1,j]=max then inc (cont); for i:=2 to n do if a[i,m]> max then begin cont:= 1; max := a [i,m]; end else 72
if (max<a[i][m-1]) {max=a[i][m-1];nr=1;} for (j=m-1;j>=1;j--) if (max==a[n-1][j]) nr++; else if (max<a[n-1][j]) {max=a[n-1][j];nr=1;} for (i=n-1;i>=1;i--) if (max==a[i][0]) nr++; else if (max<a[i][0]) {max=a[i][0]; nr=1; } cout<<max<<' '<<nr; }
if a [ i, m] = max then inc (cont); for i := 2 to n -1 do if a [ i, 1 ] > max then begin cont:= 1 ; max := a[i,1]; end else if a [ i, 1 ] = max then inc (cont); for j:=m-1 downto 1 do if a [ n, j] > max then begin cont:= 1 ; max := a[n,j]; end else if a [ n, j] = max then inc (cont); write ( max,',','de',cont,'ori'); end.
Subiectul 26 Se citete de la tastatur un numr natural n (n50). Se cere s se formeze i s se afieze matricea ptratica nxn astfel: prima linie conine numerele de la 1 la n, de la dreapta la stanga; a doua linie conine urmtoarele n numere naturale, de la stnga la dreapta; a treia linie conine urmtoarele n numere naturale, de la dreapta la stanga etc. Exemplu : Date de intrare Date de ieire Explicaie n=5
C++ #include<iostream.h> int a[51][51],n; void main() {int i,j,k=0; cin>>n; for(i=1;i<=n;i++) if(i%2==1) //parcurgem de la dreapta la stanga for(j=n;j>=1;j--) a[i][j]=++k; else //parcurgem de la stanga la dreapta for(j=1;j<=n;j++) a[i][j]=++k; for(i=1;i<=n;i++) {for(j=1;j<=n;j++) Pascal program sub26; var a:array [1..50, 1..50] of word; n,i,j:byte; nr:word; begin write('n='); readln(n); nr:=0; for i:=1 to n do if i mod 2 =1 then for j:=n downto 1 do begin inc(nr); a[i,j]:=nr;end else for j:=1 to n do begin inc(nr); a[i,j]:=nr; end; for i:=1 to n do 73
cout<<a[i][j]<<' ';cout<<endl;}}
begin for j:=1 to n do write (a[i,j], ' '); writeln; end; end.
Subiectul 27 Sa se ordoneze alfabetic numele a n copii, (n <=100). Datele de intrare se vor citi de la tastatura. Exemplu : Date de intrare Date de ieire n= 4 IoAn VasiLE Gigel Alecu Alecu Gigel IoAn VasiLE
C++ #include<iostream.h> #include<string.h> typedef struct copil {char nume[30]; char prenume[30]; }; struct copil a[101]; int i,j,n; char man[30]; void main() {cout<<"n=";cin>>n; for(i=1;i<=n;i++) {cout<<"numele este"; cin>>a[i].nume; cout<<"prenumele este";cin>>a[i].prenume;} for(i=1;i<=n-1;i++) for(j=1+i;j<=n;j++) if(strcmp(a[i].nume,a[j].nume)>0) {strcpy(man,a[i].nume); strcpy(a[i].nume,a[j].nume); strcpy(a[j].nume,man); strcpy(man,a[i].prenume); strcpy(a[i].prenume,a[j].prenume); strcpy(a[j].prenume,man); } cout<<"copiii ordonati dupa nume sunt"; for(i=1;i<=n;i++) cout<<"\n"<<a[i].nume<<" "<<a[i].prenume;} Pascal program sub27; type st=string[20]; var v:array[1..100] of string; x:string; i,sw:byte; n:word; begin write('n=');readln(n); for i:=1 to n do readln(v[i]); repeat sw:=0; for i:=1 to n-1 do if v[i]>v[i+1] then begin x:=v[i]; v[i]:=v[i+1];v[i+1]:=x;sw:=1; end; until sw=0; for i:=1 to n do writeln(v[i]); end.
Subiectul 28 Sa se verifice dac doua cuvinte citite de la tastatur sunt anagrame. Se va afia Da sau NU Cuvintele pot conine maximum 20 de caractere reprezentnd litere mari sau mici ale alfabetului englez. 74
Exemplu : Date de intrare Date de ieire Explicaie ATLASE TESALA DA Dou cuvinte sunt anagrame dac au aceleai litere dar sunt scrise n alt ordine ATLASE TESELA NU
C++ #include<stdio.h> #include<string.h> void main() {int n,m,i,j; char s1[20],s2[20],man; printf("Primul cuvant este :");gets(s1); printf("Al doilea cuvant este:");gets(s2); n=strlen(s1);m=strlen(s2); for(i=0;i<n-1;i++) for(j=i+1;j<n;j++) if(s1[i]>s1[j]) {man=s1[i]; s1[i]=s1[j]; s1[j]=man; } for(i=0;i<m-1;i++) for(j=i+1;j<m;j++) if(s2[i]>s2[j]) {man=s2[i]; s2[i]=s2[j]; s2[j]=man; } if(n!=m) printf("cuvintele nu sunt doua anagrame"); else {int test=1; for(i=0;i<n;i++) if(s1[i]!=s2[i]) {test=0; break;} if(test==1) printf("\n cuvintele reprezinta doua anagrame"); else printf("\n cuvintele nu sunt anagrame "); } } Pascal program sub28; var x,y:string[20]; h,i:integer; begin readln(x);readln(y); for i:=1 to length(x) do
begin h:=pos(x[i],y); if h<>0 then delete(y,h,1); end; if y='' then writeln('da') else writeln('nu'); end.
Subiectul 29 Fiierul text numere.txt conine pe prima linie un numr natural n (0<n<100000), iar pe a doua linie n cifre, separate prin cte un spaiu.Scriei un program C/C++ care determin cea mai mare cifr dintre cele situate pe a doua linie a fiierului numere.txt i numrul de apariii ale acesteia. Valorile determinate se vor afia pe ecran, separate printr-un spaiu.
75
Exemplu : Date de intrare Date de ieire 12 2 5 3 1 9 5 8 9 2 7 3 4 9 2
C++ #include<fstream.h> void main() { int i,n,v[10]; int x; for(i=0;i<=9;i++) v[i]=0; fstream f; f.open("numere.txt",ios::in); f>>n; for(i=1;i<=n;i++) {f>>x; v[x]++; } int cif=0, fv; for(i=0;i<=9;i++) if(v[i]!=0) {cif=i;fv=v[i];} cout<<cif<<" "<<fv;
}
Pascal program sub29; var v:array[1..500] of byte; f:text; n,i,cont,max:byte; begin assign(f,'d:\BP\BIN\numere.txt'); reset(f); readln(f,n); for i := 1 to n do read(f,v[i]); cont:=0; max:=0; for i:=1 to n do begin if v[i]>max then begin max:=v[i]; cont:=1; end else if v[i]=max then inc(cont); end; writeln(max,' ',cont); close(f); end.
Subiectul 30 Fiierul numere.txt conine pe prima linie un numr natural n (n100), iar pe a doua linie, separate prin cte un spaiu, n numere naturale nenule, cu cel mult 4 cifre fiecare. Scriei programul care citete de la tastatur un numr natural k (k25), construiete n memorie i afieaz pe ecran un tablou unidimensional ce conine, n ordinea n care au fost citite, numerele de pe a doua linie a fiierului numere.txt care au cel puin k divizori.Dac niciunul dintre cele n numere citite nu are cel puin k divizori, n fiier se va scrie 0. Exemplu : Date de intrare Date de ieire n=6 100 9 400 56 7 10 k=5 100 400 56 n=3 3 5 11 0 C++ #include<fstream.h> int nr_div(int x) {int nd=1; for(int i=1;i<=x/2;i++) if(x%i==0) nd++; return nd; } Pascal program sub30; var f:text; i,n,k,m:byte; x:word; v:array [1..100] of word; function nrdiv(y:word): byte; var i:word; nr:byte; 76
begin nr:=2; for i:=2 to y div 2 do if y mod i=0 then inc (nr); nrdiv:=nr; end; begin assign (f,'d:\BP\BIN\numere.txt'); reset (f); readln (f,n); write ('k='); readln (k); m:=0; for i:=1 to n do begin read (f,x); if nrdiv (x)>= k then begin inc (m); v[m]:= x; end; end; close (f); if m=0 then rite (m) else for i:=1 to m do write( v[i], ' '); end.
Subiectul 31 Scriei un program care citete de la tastatur un cuvnt format din cel mult 20 de caractere, doar litere ale alfabetului englez (cel puin o majuscul i cel puin o liter mic). Programul determin transformarea cuvntului citit prin eliminarea fiecrei litere mici a cuvntului, restul literelor nemodificndu-se, ca n exemplu. Programul afieaz pe ecran cuvntul obinut. Exemplu : Date de intrare Date de ieire baCALaUreaT CALUT
Pascal program sub31; var i:byte; x:string[20]; begin write('x='); readln(x); i:=1; while i<=length(x) do if x[i] >'Z' then delete (x,i,1) else inc(i); write(x); end.
Subiectul 32 Scriei un program C/C++ care citete de la tastatur un ir de cel mult 500 de caractere (litere mici i mari ale alfabetului englez, cifre, puncte, virgule i spaii) i afieaz pe ecran cifra care apare de cele mai multe ori n irul citit. Dac irul conine mai multe cifre cu numr maxim de apariii, atunci se va afia cea mai mic dintre acestea. Dac irul nu conine cifre, se va afia pe ecran mesajul NU. 77
Exemplu : Date de intrare Date de ieire Explicaie Va lua 9,5 la matematica 10 la informatica si 10 la romana 0 0 i 1 apar de cele mai multe ori n ir i 0 este cea mai mic dintre ele
C++ #include<iostream.h> #include<string.h> void main() {int n,i,v[10];//vector de frecvente char s[501]; for(i=0;i<=9;i++) v[i]=0; int max=0,g=0; cin.get(s,501); n=strlen(s); for(i=0;i<n;i++) if(s[i]>='0' && s[i]<='9') {v[s[i]-'0']++; if(v[s[i]-'0']>max) max=v[s[i]-'0']; g=1; } if(g==0) cout<<"Nu"; else {int k=0; for(i=0;i<=9&&k==0;i++) if(v[i]==max) {cout<<i; k=1;}}} Pascal program sub32; var s:string ; v:array [1..10] of byte; max, x, i:byte; err:integer; begin write('s='); readln(s); for i:=0 to 9 do v[i]:=0; for i:=1 to length(s) do if (s[i]>='0') and (s[i]<='9') then begin val(s[i],x,err); inc(v[x]); end; max:=0; for i:=0 to 9 do if v[i]>max then max := v[i]; i:=0; while v[i]<>max do inc(i); write(i);readln;end.
Subiectul 33 S se afieze toate prefixele unui cuvnt citit de la tastatur format din cel mult 20 de caractere, doar litere ale alfabetului englez. Exemplu : Date de intrare Date de ieire Informatica Informatic Informati Informat Informa Inform Infor Info Inf In I
C++ #include<iostream.h> #include<string.h> void main() {char s[30]; cin>>s;int n=strlen(s); Pascal program sub33; var x,y:string [20]; i:byte; begin write ('x=');readln (x); 78
for i:=1 to length(x)-1 do begin y:=copy(x,1,length (x)-i); writeln (y); end; end.
Subiectul 34 Se citesc de la tastatura n cuvinte (n10), fiecare cuvnt avnd lungimea de cel mult 25 caractere. Sa se afieze cuvintele care ndeplinesc condiia de palindrom (un cuvnt se numete palindrom dac prin parcurgere de la stnga la dreapta i prin parcurgere de la dreapta la stnga genereaz aceeai valoare). Exemplu : Date de intrare Date de ieire n=4 sas cana bob daca sas bob
C++ #include<iostream.h> #include<string.h> void main() {int n,i; char a[10][26],c[26]; cout<<"n=";cin>>n; for (i=0;i<n;i++) {cout<<"cuvantul "<<i+1<<":"; cin>>a[i]; } cout<<"cuvintele palindrom sunt:"; for (i=0;i<n;i++) {strcpy(c,a[i]); strrev(c); if (strcmp(a[i],c)= =0) cout<<a[i]<<" ";}} Pascal program sub34; type sir=string[25]; var n:integer; i:byte;y:sir; function pal(x:sir):boolean; var j:byte; begin pal:=true; for j:=1 to length(x) div 2 do if x[j]<>x[length(x)-j+1]then pal:=false; end; begin write('n=');readln(n); for i:=1 to n do begin write('y='); readln(y); if pal(y) then writeln(y,' este palindrom'); end; end.
Subiectul 35 Se consider fiierul text UNU.txt care conine informaii scrise pe mai multe linii. Copiai n fiierul DOI.txt coninutul liniilor cu numr de ordine impar. Exemplu : Date de intrare Date de ieire Explicaie Aceasta este prima linie 23 67 informatica #1234 ABCD 1 2 3 4 5 6 7 linia cinci ultima linie Aceasta este prima linie #1234 ABCD linia cinci
S-au copiat prima linie, a III-a i a V-a linie
79
C++ #include <fstream.h> #include<iomanip.h> void main() {int nrlinie=0; char linie[200]; fstream f("UNU.txt",ios::in); fstream g("DOI.txt",ios::out); while(!f.eof()) while(f.get(linie,200)) {nrlinie++; if(nrlinie%2) g<<linie<<endl; f.get(); } f.close(); g.close();} Pascal program sub35; var x:char; f,j:text; begin assign (f,'d:\bp\bin\unu.txt'); assign j,'d:\bp\bin\doi.txt'); reset (f); rewrite (j); while not (eof(f))do begin while not (eoln (f)) do begin read (f,x); write (j,x); end; readln (f); readln(f); writeln (j); end; close (f); close(j); end.
Subiectul 36 Elaborai un program care scrie n fiierul text LITERE.txt toate irurile formate din trei caractere distincte, litere mici ale alfabetului englez. irurile vor fi separate prin caracterul spaiu. C++ #include<fstream.h> void main() {int i,j,k; fstream f("LITERE.txt",ios::out); for(i=(int)'a';i<=(int)'x';i++) for(j=i+1;j<=(int)'y';j++) for(k=j+1;k<=(int)'z';k++) {f<<(char)i<<(char)j<<(char)k<<endl; f<<(char)i<<(char)k<<(char)j<< ; Pascal program sub36; var i,k,j:char; f:text; begin assign(f,'litere.txt'); rewrite(f); for i :='a' to 'z' do for j:='a' to 'z' do for k:='a' to 'z' do if (i<>j) and (j<>k) and (k<>i) then writeln (f,i,j,k,' '); close(f); end.
Subiectul 37 Fiierul ATESTAT.txt conine n numere naturale(2n 2 30 )(cel puin dou numere pare) cu cel mult 9 cifre fiecare. Scriei un program care afieaz pe ecran penultimul numr par citit din fiier, precum i numrul de ordine al acestuia. Utilizai un algoritm eficient din punct de vedere al memoriei utilizate precum i al timpului de execuie. De pe prima linie a fiierului ATESTAT.txt se citete numrul natural n. De pe urmtoarele n linii se vor citi cele n numere naturale. Exemplu: Date de intrare Explicaii Date de ieire ATESTAT.txt 5 10 11 12 13 14 15
Primul numr citit este 10, al doilea 11,..., al cincilea numr este 15.
Ultimul numr par citit este 14, iar penultimul este 12. Se va afia numrul 12. Acesta este al treilea numr citit din fiierul de intrare.
12 3
n=5 ( se citesc 5 numere naturale de pe de pe urmtoarele 5 linii ale fiie- rului de intrare) 81
C++ #include<fstream.h> void main() {long n1,n2,nrordine1,nrordine2,n,i,nr; fstream f("ATESTAT.txt",ios::in); n1=-2;f>>n; for(i=1;i<=n;i++) {f>>nr; if(nr%2==0) if(n1==-2) {n1=nr;nrordine1=i;n2=-1;} else if(n2==-1) {n2=nr;nrordine2=i;} else {n1=n2;nrordine1=nrordine2; nrordine2=i; } } cout<<n1<<' '<<nrordine1; f.close(); Pascal program sub37; var x,n : longint; poz1,poz2,i,x1,x2:byte; f:text; begin assign(f,'atestat.txt');reset(f);readln(f,n); poz1:=0;poz2:=0; for i:=1 to n do begin readln(f,x); if x mod 2 =0 then begin x1:=x2; x2:=x; poz1:= poz2; poz2:=i; end; end; write (x1,' ',poz1); close(f); end.
Subiectul 38 Se citete de la tastatur o fraz cu maxim 250 de caractere. Se cere s se afieze cte semne de punctuaie sunt. Semne de punctuaie se consider . , : ; - ? ! Exemplu: Date de intrare Date de ieire Explicaie Nu-i rau, mai Stefane, sa stie si baiatul tau oleaca de carte. Cartea iti aduce si oarecare mangaiere. Eu, sa nu fi stiut a citi, de mult as fi nnebunit, cate am avut pe capul meu. Ei, mai Stefane si Smaranduca, mai ramaneti cu sanatate, ca eu m-am dusu-m-am. Hai, nepoate, gata esti? 19 Cele 19 semne de punctuaie sunt: - , , . . , , , . , , , - - - . , , ? 82
C++ #include<iostream.h> #include<string.h> char f[101],punct[]=",.:;?!-",*p; //punct este un sir constant format din toate semnele de punctuatie int k; void main() {cin.get(f,101); p=strtok(f,punct);//separa fraza in entitati delimitate de semne de punctuatie while(p) {k++; //numara semnele de punctuatie p=strtok(NULL,punct);} cout<<k;}
Pascal program sub38; var t: set of char; cont, k, i: byte; x: string; v: array [1..250] of char; begin read (x);t:= ['!', '.', ',', '?', ';', '-', ':'];k:=0;cont:=0; for i:=1 to length (x) do if ( x[i] IN t) then begin inc (cont); inc (k); v[k]:=x[i]; end; writeln (cont); for i:=1 to k do write ( v[i]); end.
Subiectul 39 n fiierul poezie.in este scris o poezie. Se cere s se afieze pe ecran cel mai lung vers. Dac sunt mai multe versuri de lungime maxim, se va afia doar primul dintre ele. Se numr toate caracterele, inclusiv spaiile i semnele de punctuaie (un vers nu poate depi 200 de caractere).
Exemplu: poezie.in Date de ieire Explicaie Vine melcul suparat O furnica l-a piscat Si cum vine, pas-pas-pas Se-ntalni cu-n carabus Striga melcu-n gura mare: - Nu te mai praji la soare, Date-ncolo, nu-mi sta-n drum Ca te iau in coarne-acum. Date-ncolo, nu-mi sta-n drum Cel mai lung vers are 28 de caractere
C++ #include<fstream.h> #include<string.h> char a[256],amax[256];int lmax,l; void main(){ ifstream f("poezie.in"); while(f.getline(a,256)) //cat timp mai putem citi versuri {l=strlen(a); if (l>lmax)//am gasit un vers mai lung Pascal program sub39; var f: text; x,s:string; max:byte; begin assign (f,'Poezie.in'); reset (f); max:=0; while not eof(f) do begin readln (f,s); 83
{lmax=l; strcpy(amax,a);}//retin in amax versul mai lung } cout<<amax; }
if length (s) >max then begin max:= length (s); x:=s; end; end; close (f); writeln (x); end.
Subiectul 40 Se citete de la tastatur un text cu maxim 250 de caractere. S se afieze pe ecran textul obinut prin nlocuirea tuturor vocalelor cu litera a sau A, dup cum vocala respectiv este liter mic sau liter mare. Exemplu: Date de intrare Date de ieire Explicaie Stiam sa recunosc si sa deosebesc, de la prima vedere, China de Arizona. O astfel de abilitate e folositoare daca te ratacesti noaptea. Staam sa racanasc sa sa daasabasc, da la prama vadara, Chana da Arazana. A astfal da abalatata a falasataare daca ta ratacasta naaptaa. Vocala O a fost nlocuit cu A, restul vocalelor cu a.
C++ #include<fstream.h> #include<ctype.h> #include<string.h> char a[251],voc[]="aeiouAEIOU";//un sir initializat cu vocale void main() {cin.get(a,251); for(int i=0;i<strlen(a);i++) if(strchr(voc,a[i])) //daca e vocala if(islower(a[i])) //daca e litera mica a[i]='a'; else a[i]='A'; cout<<a; }
Pascal program sub40; var i:byte; st:string; begin writeln('Introduce-ti text:');readln(st); for i:= 1 to length(st) do begin if (st[i]='i') or (st[i]='o') or (st[i]='e') or (st[i]='u') then st[i]:='a'; if (st[i]='I') or (st[i]='O') or (st[i]='E') or (st[i]='U') then st[i]:='A'; end; write(st); end.
Soluiile problemelor au fost propuse de: Prof. Neagu Violeta, Colegiul Naional Mihail Koglniceanu Prof. Voinea Mirela, Colegiul Naional Vasile Alecsandri Prof. Georgeta Balacea, Colegiul Naional Alexandru Ioan Cuza Prof. Ilie Daniela, Colegiul Naional Alexandru Ioan Cuza Prof. Grigore Magdalena, Colegiul Naional Alexandru Ioan Cuza
84
REZOLVRI-BAZE DE DATE
Limbajul SQL (Structured Query Language) este limbajul utilizat de majoritatea sistemelor de baze de date relaionale (SGBDR) pentru definirea i manipularea datelor. Din punct de vedere istoric ar trebui menionat faptul c limbajul SQL a fost dezvoltat ntr-un prototip de sistem de gestiune a bazelor de date relaionale la IBM, n 1970. n 1979 corporaia Oracle a introdus prima implementare a limbajului SQL n varianta comercial. Termenii utilizai de limbajul SQL sunt - tabel (Table) utilizat pentru a desemna o relaie; - linie (row) utilizat pentru a desemna un tuplu; - coloan (column) utilizat pentru a desemna un atribut. Componentele pe care le cuprinde limbajul SQL sunt urmtoarele: 1. componenta de descriere a datelor relaionale (limbajul de descriere a datelor - LDD), 2. componenta de manipulare a datelor relaionale (limbajul de manipulare a datelor - LMD), ambele fiind absolut necesare n gestiunea BD. Pe lng aceste componente principale, standardul SQL2 mai prevede i alte componente ale limbajului: 3. controlul tranzaciilor; 4. controlul securitii i refacerea datelor. Controlul tranzaciilor conine comenzi pentru specificarea tranzaciilor. Unele implementri adaug comenzilor prevzute n standard i alte comenzi suplimentare de control al concurenei i refacerea datelor. Controlul securitii i refacerea datelor conine comenzi de administrare a bazei de date pentru definirea utilizatorilor i a drepturilor acestora de acces la tabele. Aceast component este dependent de SGBD, iar pentru sisteme performante, administratorul BD este obiectul activitii unei categorii speciale de utilizatori ai BD administratori ai BD.
Structura lexical a limbajului SQL Elementele unei instruciuni (statement) sunt: - cuvintele cheie (key words), dintre care fac parte comenzile (SELECT, UPDATE, INSERT etc), operatorii (AND, OR, NOT, LIKE), clauzele (WHERE, SET, VALUES etc); - identificatorii (identifier) sunt elementele care denumesc tabela, coloana sau alt obiect BD; SQL face diferena ntre literele mari i mici, deci este case-sensitive; identificatorul care conine ghilimele se numete identificator delimitat; - constantele (literal) reprezint iruri de caractere ( ), numere ntregi, numere reale (ex. 3.5; 4. ; .001; 5e2), constanta NULL care simbolizeaz lipsa de informare, constante de tip logic (1 pentru TRUE i 0 pentru FALSE); - caracterele speciale, cum ar fi ; care semnific terminarea comenzilor, . care semnific virgula zecimal, sau * care simbolizeaz operatorul de nmulire.
Operatori SQL operatori aritmetici binari: + - * % modulo ^ ridicarea la putere & AND orientat pe bii | OR orientat pe bii # XOR orientat pe bii 85
<< deplasare la stnga >> deplasare la dreapta operatori binari de comparaie < > <= >= = <> sau != diferit operatori aritmetici mari @ valoarea absolut ! factorial !! factorial, operator postfix ~ NOT orientat pe bii operatori de comparaie A BETWEEN min AND max (compar A cu dou valori: min i max) A IN (v 1 ,...,v n ) compar A cu o list de valori A IS NULL A IS NOT NULL A LIKE model_ir operatori logici Operatorii logici sunt legai prin cuvintele cheie AND, OR, NOT i returneaz o valoare logic TRUE, FALSE sau NULL. operatori relaionali UNION (reuniune) INTERSECT (intersecie) MINUS (diferena).
Funcii definite n SQL
Funcii agregat
Funciile agregat calculeaz un rezultat din mai multe linii ale unui tabel (funcii de totalizare): COUNT (furnizeaz numrul de linii ale unui rezultat); SUM (execut suma tuturor valorilor dintr-o coloan); MAX (returneaz valoarea cea mai mare dintr-o coloan); MIN (returneaz valoarea cea mai mic dintr-o coloan); AVG (calculeaz media valorilor dintr-o coloan). Aceste funcii vor fi folosite n instruciunea SELECT.
Funcii scalare
Funciile scalare primesc unul sau mai multe argumente i returneaz valoarea calculat sau NULL n caz de eroare. Argumentele funciilor pot fi constante sau valori ale atributelor specificate prin numele coloanelor corespunztoare. Dintre funciile scalare amintim: - funcii numerice - de calcul trigonometric: sin, cos, tg, ctg etc. - de calcul al logaritmului: ln, log, lg - de calcul al puterilor: pow - de rotunjire: floor, ceil etc. 86
- funcii pentru manipularea irurilor de caractere - funcii pentru data calendaristic - funcii de conversie
Tipuri de date
n limbajul SQL sunt definite mai multe tipuri de date: numeric, ir de caractere, ir de bii, data (calendaristic), timp. Denumirile tipurilor de date precum i limitele acestora difer de la un SGBD la altul, dar n general, sunt destul de asemntoare.
Tipul numeric include
- numere ntregi: INTEGER sau INT reprezentat pe 4 octei; SMALLINT reprezentat pe 2 octei; - numere reale reprezentate n virgul flotant, cu diferite precizii: FLOAT reprezentat pe 4 octei; REAL reprezentat pe 8 octei; DOUBLE [PRECISION] reprezentat pe 8 octei; - numere zecimale reprezentate cu precizia dorit: tipul NUMERIC sau DECIMAL, cu forma numeric[(p,s)], unde p este numrul total de cifre afiate, iar s este numrul de cifre dup punctul zecimal.
Tipul ir de caractere
CHARACTER (n) sau CHAR (n) definesc iruri de caractere cu lungimea fix. CHARACTER VARYING sau VARCHAR (n) definete irul de caractere cu lungimea variabil. Asemnarea dintre cele dou tipuri prezentate mai sus este aceea c ambele reprezint iruri de maxim n caractere, iar deosebirea este aceea c pentru iruri cu numr de caractere mai mic ca n, CHAR (n) completeaz irul cu spaii albe pn la n caractere, iar VARCHAR (n) memoreaz numai attea caractere cte are irul dat.
Tipul iruri de bii
BIT (n) definete secvene de cifre binare (care pot lua valoarea 0 sau 1) de lungime finit n; BIT VARYING (n) definete secvene de lungime variabil, cu limita maxim n.
Tipuri pentru data calendaristic i timp
DATE permite memorarea datelor calendaristice n formatul yyyy-mm-dd; TIME permite memorarea timpului, folosind trei cmpuri hh:mm:ss; TIMESTAMP(p) permite memorarea combinat a datei calendaristice i a timpului, cu precizia p pentru cmpul SECOND (al secundelor); valoarea implicit a lui p este 6; INTERVAL este utilizat pentru memorarea intervalelor de timp. Tipurile de date sunt case-insensitive, deci nu in cont de caracterele mari sau mici. Bazele de date sunt colecii de date grupate n mai multe tabele cu legturi ntre ele. Operaiile ce se efectueaz asupra bazelor de date sunt : - Crearea tabelelor bazei de date - Popularea cu nregistrri - Interogarea tabelelor 87
- Realizarea unor formulare i rapoarte Crearea tabelelor create table produse(codp INT,denumire VARCHAR2(20),codm INT, pret FLOAT); Popularea tabelelor cu nregistrri insert into produse values(1,'suruburi1',1,5.3) Interogarea bazei de date reprezint principala funcie a unui limbaj relaional de manipulare a datelor. Comanda fundamental a standardului SQL este SELECT, aceasta permind interogarea unei baze de date. Interogarea reprezint o ntrebare care i extrage rspunsul din baza de date. Componentele interogrii se numesc clause. Sintaxa general a comenzii SELECT este urmtoarea: SELECT [ALL/DISTINCT/UNIQUE] list de selecie FROM list de relaii (tabele) WHERE condiie de cutare asupra liniilor GROUP BY list de atribute care permit partiionarea HAVING condiie asupra partiiilor ORDER BY list de atribute;
Clauzele SELECT i FROM sunt obligatorii. SELECT specific datele care se selecteaz, iar clauza FROM specific relaiile din care se selecteaz. Restul clauzelor sunt opionale. Exemplu select denumire from produse order by denumire select nume, nr_tel from abonati where restanta =(select max(restanta) from abonati) select count(distinct cod_pers) from automobile,proprietari where automobile.cod_auto=proprietari.cod_auto tergerea datelor delete from produse where pret>(select avg(pret) from produse) Modificarea datelor Update produse set denumire=lapte1 where denumire=lapte
SUBIECTUL REZOLVARE Subiectul 1
La o societate de productie, evidenta produselor finite se tine ntr-o tabela produse cu structura: codp, denumire - numele produsului, codm - codul materialului din componena produsului pret - pretul unitar al produsului Se cere: a) Sa se afiseze toate produsele n ordine alfabetica. b) Sa se stearga toate produsele cu pret unitar mai mare dect valoarea mediei aritmetice a preturilor tuturor produselor din tabela. create table produse(codp INT,denumire VARCHAR2(20),codm INT, pret FLOAT);
a) select denumire from produse order by denumire
b) delete from produse where pret>(select avg(pret) from produse)
88
SUBIECTUL REZOLVARE Subiectul 2
Pentru situatia pe luna curenta a impulsurilor posturilor telefonice dintr-un oras se folosete baza de date abonati , cu structura: nr_tel, nume, adresa , restanta, impulsuri Se cere : a) Sa se afiseze pentru fiecare abonat telefonic numele, adresa si restantele. b) Sa se afiseze numele si numarul de telefon pentru abonatul sau abonatii a caror restanta are valoare maxima. create table abonati(nr_tel VARCHAR2(20),nume VARCHAR2(30),adresa VARCHAR2(50),restanta FLOAT, impulsuri INT)
a) select nume,adresa,restanta from abonati
b) select nume,nr_tel from abonati where restanta =(select max(restanta) from abonati)
Subiectul 3
Creati fisierul contracte care retine date despre contractele ncheiate de un oficiu bancar si care are urmatoarea structura: nr_contract , nume_client , tip_operatie, termen_achitare Se cere: a) Sa se afiseze numarul contractului, tipul operatiei si termenul de achitare pentru clientul Popescu Ion. b) Sa se afiseze numarul clientilor care au termen de achitare astazi. create table contracte(nr_contract INT,nume_client VARCHAR2(50),tip_operatie VARCHAR2(30),termen_achitare DATE)
a) select nr_contract,tip_operatie,termen_achitare from contracte where nume_client='Popescu Ion'
b) select count(nume_client) as "Clienti astazi" from contracte where termen_achitare=SYSDATE
Subiectul 4
Pe un platou de filmare se tine evidenta actorilor si a filmelor n care sunt distribuiti acestia folosind doua tabele: actori id_actor ,nume , prenume , varsta , cod_film filme cod_film , titlu, gen_film Se cere: a) Sa se afiseze toti actorii (distincti) care au vrsta <50 ani b) Sa se afiseze titlul si genul filmului n care joaca fiecare actor. create table actori(id_actor INT,nume VARCHAR2(50),prenume VARCHAR2(50),varsta INT, cod_film INT)
a) select distinct nume, prenume from actori where varsta<50
b) select titlu,gen_film,nume,prenume from actori,filme where actori.cod_film=filme.cod_film Subiectul 5
O firma are ca obiect de activitate comercializarea obiectelor de papetarie. Pentru gestionarea activitatii firmei se utilizeaza un tabel cu structura :materiale, cod_material , denumire , cantitate, pret_unitar, valoare Se cere: a) Sa se afiseze nregistrarile din tabela ordonate descrescator dupa cantitate. create table materiale(cod_material INT, denumire VARCHAR2(50),cantitate INT,pret_unitar FLOAT,valoare FLOAT)
a) select * from materiale order by cantitate desc
b) select denumire from materiale where valoare=(select max(valoare) from materiale) 89
SUBIECTUL REZOLVARE b) Sa se afiseze denumirea materialului cu valoarea maxima .
Subiectul 6
Un service auto tine evidenta activitatii n doua tabele: automobile cod_auto, marca , data_in, data_out, cost, nr_inmatr proprietari cod_pers , cod_auto, nume Se cere: a)Pentru marca DACIA afisati numarul de autoturisme ai caror proprietari au solicitat serviciile firmei de reparatii b)Afisati datele persoanelor proprietare de autoturisme care au parasit service-ul astazi. create table automobile (cod_auto INT,marca VARCHAR2(50),data_in DATE, data_out DATE, cost FLOAT,nr_inmatr VARCHAR2(30)) create table proprietari (cod_pers INT,cod_auto INT,nume VARCHAR2(50))
a) select count(cod_auto) as "nr_cerut" from automobile where marca='DACIA'
b) select nume,marca,data_out from proprietari p, automobile a where data_out<=sysdate and a.cod_auto=p.cod_auto Subiectul 7
n baza de date a unei firme care nchiriaza autoturisme se gasesc doua tabele: automobile cod_auto , marca, data_i, cost, nr_inmatr persoane id_pers , nume, cod_auto, adresa Se cere: a)Afisati persoanele cu domiciliul n Galati care au nchiriat masini . b)Sa se afiseze pentru fiecare marca numarul de automobile care au la nchiriere costuri cuprinse ntre 100 si 500 lei.
a)select nume,adresa,marca,nr_inmatr,data_i,cost from automobile,persoane where adresa like '%Galati%' and persoane.cod_auto=automobile.cod_auto
b)select marca,count(marca)as "nr_cerut" from automobile1 where cost>=100 and cost<=500 group by marca Subiectul 8
O firma de asigurari are o baza de date care contine tabelele: asigurare cod_asigurare, tip_asigurare, data, cost persoane id_pers , cod_asigurare , nume, adresa Cerinte: a)Sa se afiseze persoanele asigurate, ordonate alfabetic b)Sa se afiseze date despre persoanele care au asigurari de viata si locuiesc n orasul Tecuci. create table asigurare(cod_asigurare INT,tip_asigurare VARCHAR2(30),data DATE,cost FLOAT)
a) select * from persoane order by nume
b) select nume,adresa,tip_asigurare,data,cost from persoane3 p,asigurare a where p.adresa like '%Tecuci%' and p.cod_asigurare=a.cod_asigurare
Subiectul 9
Fie tabelul PRODUSE cu urmatoarele campuri: codp - codul produsului, denp - denumirea produsului, um unitatea de masura, pret create table produse(codp VARCHAR2(2),denp VARCHAR2(50),um VARCHAR2(2),pret FLOAT,stoc INT,termen DATE)
a)select avg(pret) as "pret mediu" from produse4 90
SUBIECTUL REZOLVARE pretul produsului, stoc - stoc produs , termen data expirarii, pentru a putea pastra datele referitoare la produsele dintr-un magazin alimentar. Se cere: a. Determinati pretul mediu pentru fiecare produs n afara de produsul lapte b. Afisati produsele care au pretul mai mare dect produsul ce are codul P4. where denp<>'lapte'
b) select denp,pret from produse where pret>(select pret from produse4 where codp=P4)
Subiectul 10
Fie tabelul PRODUSE cu urmatoarele campuri: codp - codul produsului, denp - denumirea produsului, um unitatea de masura, pret pretul produsului, stoc - stoc produs , termen data expirarii, pentru a putea pastra datele referitoare la produsele dintr-un magazin alimentar. Se cere: a. Afisati pretul minim pe produs. b. Sa se afiseze ultima zi a lunii (char) n care expira produsul cu codul P4 create table produse(codp VARCHAR2(2),denp VARCHAR2(50),um VARCHAR2(2),pret FLOAT,stoc INT,termen DATE)
a) select min(pret) as "pret minim" from produse
b) select last_day(termen) as "ultima zi" from produse where codp='p4'
Subiectul 11 O firma ce se ocupa cu vanzarea materialelor de constructii dispune de mai multe depozite D1, D2, D3,. Gestiunea firmei se pastreaza in tabelul STOCURI cu urmatoarea structura: Denumire, Cantitate, Pret_unitar, Depozit. Se cere: a. Care sunt materialele existente in depozitul D1? b. Sa se afiseze materialele in ordinea descrescatoare a valorii lor totale (valoare totala=cantitate*pret unitar). a) select * from stocuri wherw depozit=D1; b) select denumire,cantitate*pret_unitar as valoare_totala from stocuri order by valoare_totala desc;
Subiectul 12 O firma ce se ocupa cu vanzarea materialelor de constructii dispune de mai multe depozite D1, D2, D3,. Gestiunea firmei se pastreaza intabelul STOCURI cu urmatoarea structura: Denumire, Cantitate, Pret_unitar, Depozit. Se cere: a. Care este valoarea totala a materialelor? b. Sa se ieftineasca cimentul cu 10%. a) select sum(cantitate*pret_unitar) as valoare totala from stocuri ; b) select denumire,cantitate,pret_unitar,(pret_unitar -0.1*pret_unitar) as pret_ieftinit from stocuri;
Subiectul 13 Fie tabelul SALARIATI cu campurile Id_angajat, Nume, Prenume, E_mail, Telefon, Data_angajarii, Id_functie, Salariu, Comision, a) select nume, prenume, id_departament from salariat where id_angajat='176'; 91
SUBIECTUL REZOLVARE Id_manager, Id_departament. Se cere: a. Pentru salariatul cu id-ul 176 sa se afiseze numele, prenumele si departamentul la care lucreaza. b. Sa se afiseze numele salariatilor(numai prima litera), lungimea numelui, pentru salariatii ale caror nume ncep cu J, M, A, ordonat dupa nume. b) select nume, length (nume) from salariat where upper(nume) like'J%' or upper(nume) like 'M%' or upper(nume) like 'A%' order by nume;
Subiectul 14 Fie tabelul SALARIATI cu campurile Id_angajat, Nume, Prenume, E_mail, Telefon, Data_angajarii, Id_fuctie, Salariu, Comision, Id_manager, Id_departament. Se cere: a. Afiseaza salariatii cu salariul ntre 5000 si 12000 din departamentele 20 si 50. b. Sa se afiseze toti salariatii (codul, nume, salariul) care au salariul mai mare ca media salariilor, n ordinea crescatoare a salariilor.
a) select * from salariat where salariu>='5000' and salariu<='12000' and id_departament='20' or id_departament='50'; b) select * from salariat where salariu>(select avg (salariu) from salariat);
Subiectul 15 O firma are urmatoarea baza de date compusa din tabelele: Angajati ce contine urmatoarele cmpuri: id_angajat id-ul angajatului, nume numele angajatului, prenume prenumele angajatului, salariu salariul angajatului, id_departament id-ul departamentului, data_ang data angajarii Departament cu urmatoarele cmpuri: id_departament id-ul departamentului, denumire denumire departament Se cere: a) Sa se afiseze toti angajatii grupati pe departamente. b) Sa se afiseze persoanele angajate n anul 2008. a)select id_angajat,nume,prenume,salariu,data_ang from angajati group by id_departament; b) select * from angajati where to_char(data_angaj,'yyyy')='2008'
Subiectul 16 La un magazin de calculatoare se tine evidenta produselor vndute prin tabelele: Produse ce are urmatoarele cmpuri: nrp numar produs, denp denumire produs, pret pret produs, stoc stocul produsului Facturi cu urmatoarele cmpuri: nrf numarul facurii, cantv cantitate vnduta, dataf data facturii, nrp numar produs Se cere: a) Sa se afiseze codul produsului, pretul initial a) select p.pret,(p.cod_p,p.pret*0.1p.pret) as pret_majorat from produse p,facturi f where p.cod_p=f.cod_p and upper(denp)=monitor and upper(denp)=mouse; b) select nrf,denp,cant from produse3 p,facturi3 f where dataf=to_date('27-10- 2010','dd-mm-yyyy') and f.nrp=p.nrp 92
SUBIECTUL REZOLVARE si pretului marit cu 10% pentru toate produsele de tip Monitor si Mouse b) Sa se afiseze numarul facturilor, denumire produsului si cantitatea vnduta la data de 27.10.2008
Subiectul 17 O baza de date contine 2 tabele: Persoane cu urmatoarele cmpuri: codp codul persoanei, nume numele persoanei, prenume prenumele persoanei, localitate numele localitatii Automobile cu cmpurile: numar numarul masinii, marca marca masinii, codp codul persoanei Se cere: a) Sa se afiseze numele, prenumele, numarul si marca tuturor masinilor b) Sa se afiseze prenumele persoanelor care au automobile de tip SKODA nmatriculate n Bucuresti a)select p.nume,p.prenume,a.numar,a.marca from personae p,automobile a where p.codp=a.codp; b)select p.prenume from personae p,automobile a where p.codp=a.codp and upper(marca)=SKODA and p.localitate=BUCURESTI;
Subiectul 18 O scoala are o baza de date cu urmatoarele tabele: Elevi cu cmpurile: mat numar matricol, clasa clasa elevului, nume numele elevului, prenume prenumele elevului, medie_gen media generala a elevului Informatii cu urmatoarele cmpuri: mat numar matricol, lac localitate, data_n data nasterii Se cere: a) Sa se afiseze pentru fiecare elev numele, prenumele, localitatea si data nasterii n ordine alfabetica b) Sa se afiseze elevii promovati n ordine alfabetica a) select e.nume,e.prenume,i.loc,i.data_n from elevi e,informatii i where e.mat=i.mat order by e.nume b) select nume,prenume,medie_gen from elevi where medie_gen >=5;
Subiectul 19 Un magazin are baza de date formata din tabelele: Produse (codp codul produsului , nume denumire produs, culoare , cant_stoc - cantitatea aflata n stoc, pret pretul produsului) Clienti (codcli - cod client , nume nume client, loc - localitate client) Se cere: a) Sa se afiseze lista produselor cu pretul ntre 20 si 25 lei. b) Sa se afiseze numarul produselor de culoare alba, cumparate de clientul Vasilescu. a)select * from produse where prt between 20 and 25; b)select count(p.cod_p) from produse p,client c where p.cod_p=c.cod_p andculoare=alba and upper(nume)=VASILESCU;
93
SUBIECTUL REZOLVARE Subiectul 20 Un magazin are baza de date formata din tabelele: Produse (codp codul produsului , nume denumire produs, culoare , cant_stoc - cantitatea aflata n stoc, pret pretul produsului) Vanzare (codp, cant cantitatea vanduta, datav - data vanzarii) Se cere: a) Sa se ordoneze dupa cod produsele vndute ieri. b) Sa se calculeze cantitatea totala cumparata , la produsele de culoare verde.
a) select max(cant) from vanzare where to_char(datav,DD)=to_char(sysdate,D D)-1 b) select sum(cant_stoc) from vanzare v,produse p where v.codp=p.codp group by p.culoare having p.culoare=verde;
Subiectul 21 O biblioteca tine evidenta activitatii zilnice n baza de date BIBLIOTECA. Baza de date contine urmatoarele tabele: CARTI(cod_carte,titlu,autor,editura ) NR_CARTI(cod_carte ,nr exemplare ) CITITORI(CNP,nume,localitate,nr_telefon) MPRUMUT(cod_carte,CNP,data_mprumut). Se cere: a) Sa se afiseze titlul cu cele mai multe exemplare? b) Sa se afiseze numele cartii cel mai putin solicitata?
a) select c.titlu,max(nr_carti.nr_exemplare) from cart c,nr_carti nr where c.cod_carte=nr-carti.cod_carte; select titlu from carti where cod_carte=(select cod_carte from imprumuturi group by cod_carte having count(*)=(select max(count(*)) from imprumuturi group by cod_carte)) Subiectul 22 O societate care detine mai multe firme n diverse orase ale tarii , tine evidenta angajatilor utiliznd o baza de date numita EVIDENTA. Baza de date contine urmatoarele tabele: ANGAJATI(cod, nume, prenume, data_nasterii, data_angajarii, localitate, id_firma, id_functie, salariu) FIRME(id_firma, nume_firma, localitate) FUNCTII(id_functie, nume_functie) Se cere: a) Sa se afiseze datele angajatilor care ocupa functia de administrator. b) Sa se afiseze numele , prenumele , localitatea cu majuscule, pentru angajatii care locuiesc n Iasi,Sibiu sau Galati a)select a.nume,a.prenume,f.id_functie from angajati a,functii fu where upper(nume_functie)=ADMINISTRATOR; b)select a.nume,a.prenume,upper(localitate) from angajati a.firme fi where localitate=IASI or localitate=SIBIU or localitate=GALATi;
Subiectul 23 Un magazin are baza de date formata din tabelele:
a) select * from produse order by nume; 94
SUBIECTUL REZOLVARE Produse (codp codul produsului , nume denumire produs, culoare , cant_stoc - cantitatea aflata n stoc, pret pretul produsului) Clienti (codcli - cod client , nume nume client, loc - localitate client) Se cere: a) Sa se afiseze produsele din magazin ordonate alfabetic dupa nume. b) Sa se afiseze produsele cumparate de clientii din Braila
b) select p.nume,p.culoare,p.pret from produse p,client c where upper(c.loc)=BRAILA;
Subiectul 24 O companie opereaza cu urmatoarea baza de date : Persoane (id, id_firma, nume, localitate , data_n data nasterii) Firme (id_firma, denumire, localitate) Se cere : a) Sa se afiseze numele firmelor din localitatea Galati; b) Sa se afiseze numele tuturor persoanelor care lucreaza la aceeasi firma la care lucreaza Popescu.
a)select denumire from firme where upper(localitate)=GALATI; b) select nume from personae where id_firma=(select id_firma from persoane where nume=Popescu)
Subiectul 25 O companie opereaza cu urmatoarea baza de date : Persoane (id, id_firma, nume, localitate , data_n data nasterii) Firme (id_firma, denumire, localitate) Se cere : a) Numarul firmelor din Galati; b) Numele firmei care are un numar maxim de angajati.
a) select count(id_firma) from firme where lower(localitate)=galati; b) select nume from firme where id=(select id_firma from persoane group by id_firma having count(*)=(select max(count(*)) from persoane group by id_firma))
Subiect 26 Se da baza de date : Produse (codp codul produsului, den denumire produs, culoare, stoc- cantitatea aflata in stoc, pret pretul produsului) Client (codcli cod client, nume, loc- localitatea clientului) Vanzare (codp, codcli, cant cantitatea vanduta, datav - data vanzarii) Se cere: a) Lista tuturor produselor . b) Clientii din Galati si zilele cnd acestia au facut cumparaturi. a)select den from produse; b)select c.nume,v.datav from client c,vanzare v where c.codcli=v.codcli and lower(c.loc)=galati;
95
SUBIECTUL REZOLVARE
Subiect 27 Se da baza de date : Produse (codp codul produsului, den denumire produs, culoare, stoc- cantitatea aflata in stoc, pret pretul produsului) Client (codcli cod client, nume, loc- localitatea clientului) Vanzare (codp, codcli, cant cantitatea vanduta, datav - data vanzarii) Se cere: a) Denumirea produselor care se vnd cu preturi ntre 100 si 200 lei b) Culorile de pnza cumparate astazi de Marin din Galati?
a) select denumire from produse where prt between 100 and 200; b) select culoare from produse p, client c, vanzare v where v.datav=to_date(sysdate,dd-mm-yyyy) and v.codcli=c.codcli and v.codp=p.codp and c.nume=Marin
Subiect 28 Se da baza de date : Produse (codp codul produsului, den denumire produs, culoare, stoc- cantitatea aflata in stoc, pret pretul produsului) Client (codcli cod client, nume, loc- localitatea clientului) Vanzare (codp, codcli, cant cantitatea vanduta, datav - data vanzarii) Se cere: a) Sa se ordoneze produsele de tip vopsea descrescator dupa pret. b) Sa se afiseze produsele vndute n ziua cnd Marin a cumparat vopseaua ?
a) select den,pret from produse order by pret desc; b) select den from produse p, vanzare v where v.datav=(select to_date(datav,dd- mm-yyyy) from vanzare v,client c,produse p where c.nume=Marin and c.codcli=v.codcli and v.codp=p.codp and p.den=vopsea) and v.codp=p.codp
Subiect 29 Se da baza de date : Produse (codp codul produsului, den denumire produs, culoare, stoc- cantitatea aflata in stoc, pret pretul produsului) Client (codcli cod client, nume, loc- localitatea clientului) Vanzare (codp, codcli, cant cantitatea vanduta, datav - data vanzarii) Se cere: a) Care este lista tuturor produselor cu stoc 0 ? b) Care este cantitatea maxima de vopsea cumparata de fiecare client ?
a) select * from produse where stoc=0; b) select max(v.cant),p.den from produse p,vanzare v where p.codp=v.codp having p.den=vopsea;
Subiect 30 Se da baza de date : Elevi (nume, prenume, clasa, absn numarul
a)select nume,prenume,clasa from elevi where absm>60; 96
SUBIECTUL REZOLVARE absentelor nemotivate, absm numarul absentelor motivate) Sali (clasa, sala) Se cere: a) Sa se afiseze elevii (nume, prenume, clasa) cu peste 60 de absente nemotivate. b) Sa se afiseze sala unde nvata Ionescu.
b)select s.sala from elevi e,Sali s where e.clasa=s.clasa and upper(nume)=IONESCU;
Subiect 31 O societate comerciala are n baza de date urmatoarele tabele : ANGAJATI (cod_angajat, nume ,data_nasterii ,adresa ,telefon ) SALARII(cod_angajat,salariu, numar_ore_suplimentare, cost_ora_suplimentare, venit_din_ore_suplimentare, retineri, rest_plata) Se cere: a)Afisati pentru toti angajatii nascuti n perioada [d1,d2]: (nume,adresa,salariu,rest_plata) b)Care este venitul total numai din ore suplimentare pentru angajatii firmei ? a)select * from angajati where data_nasterii between to_date(15-02-2010,dd-mm-yyyy) and to_date(20-04-2010,dd-mm-yyyy) b) select a.nume,a.cod_angajat,sum(s.venit_din_ore_supli mentare) as venit_suplimentar from angajati a,salarii s where a.cod_angajat=s.cod_angajat;
Subiect 32 Fie baza de date IT_STORE cu urmatoarele tabele : Magazine(nr_mag, adresa, telefon) Componente(nr_comp, nume, descriere, pret, nr_mag, vandut) Clienti(id_cli, nume, adresa, telefon) Comenzi(nr_com, nr_comp, data, id_cli) a) Sa se afiseze numerele de telefon ale magazinelor din Galati. b) Care sunt clientii care au efectuat comenzi astazi ?
a)select telefon from magazine where upper(adresa)=GALATI; b) select c.nume from client c,comenzi co where c,id_cli=co.id_cli and data=sysdate;
Subiect 33 Informatiile despre personalul unei societati comerciale sunt trecute in urmatoarele tabele persoane(id_persoana, nume, prenume, adresa, data_nasterii) copii(id_persoana, prenume_copil, data_nasterii) Se cere: a) Sa se afiseze numele si prenumele persoanelor in ordinea descrescatoare a varstei b) Sa se afiseze numele complet al fiecarui copil si data nasterii a) select nume,prenume from personae order by data_nasterii desc; b) select p.nume,c.prenume_copil,c.data_nasterii from personae p,copii c where p.id_persoana=c.id_persoana;
Subiect 34 a) select nume,prenume,adresa from persoane 97
SUBIECTUL REZOLVARE Informatiile despre personalul unei societati comerciale sunt trecute in urmatoarele tabele: persoane(id_persoana, nume, prenume, adresa, data_nasterii) copii(id_persoana, prenume_copil, data_nasterii) Se cere: a) Sa se afiseze numele, prenumele si adresa pentru cele mai tinere trei persoane din societate b) Sa se afiseze prenumele copiilor angajatului Ionescu Marian where data_nasterii=(select min(data_nasterii) from persoane) b)select c.prenume_copil from copii c,personae p where p.id_persoana=c.id_persoana and upper(p.nume)=IONESCU and upper(p.prenume)=MARIAN;
Subiect 35 Se considera o tabela care contine informatii referitoare la sportivii participanti la un campionat de gimastica si o tabela ce contine antrenorii echipelor tarilor participante(se considera ca din partea fiecarei tari participa exact un antrenor) sportivi(tara, nume_sportiv, nota1, nota2, nota3) antrenori(tara, nume_antrenor) Se cere: a) Sa se adauge campul medie in tabela sportivi care sa contina media notelor la cele trei probe b) Sa se determine numarul antrenorilor a) alter table sportivi add (med float);
b)select count(nume_antrenor) as numar_antrenori from antrenori;
Subiect 36 Se considera o tabela care contine informatii referitoare la sportivii participanti la un campionat de gimastica si o tabela ce contine antrenorii echipelor tarilor participante(se considera ca din partea fiecarei tari participa exact un antrenor) sportivi(tara, nume_sportiv, nota1, nota2, nota3) antrenori(tara, nume_antrenor) Se cere: a) Sa se afiseze numarul de sportivi participanti din fiecare tara b) Sa se afiseze pentru fiecare tara participanta numele antrenorului si numele sportivului SUBIECTUL 36 a)select count(nume_sportiv) from sportive group by tara; b) select s.nume_sportiv,a.nume_antrenor from sportive s,antrenori a where s.tara=a.tara group by tara;
Subiect 37 Se considera o tabela care contine informatii referitoare la sportivii participanti la un campionat de gimastica. sportivi(tara, nume_sportiv, nota1, nota2, a)select tara from sportivi order by tara; b)delete from sportivi where ((nota1+nota2+nota3)/3)<5;
98
SUBIECTUL REZOLVARE nota3) Se cere: c) Sa se afiseze tarile participante in ordine alfabetica d) Sa se stearga toti sportivii care au media notelor la cele trei probe mai mica decat 5 Subiect 38 Fie urmatoarea tabela: elevi (nr_matricol, nume, clasa, adresa, media, absente, absente_motivate) Se cere : c) Sa se afiseze pentru fiecare elev numele, clasa si media d) Sa se afiseze numele sefului de promotie a)select nume,clasa,media from elevi; b)select max(medie),nume from elevi;
Subiect 39 O baza de date contine 2 tabele: PERSOANE(cod_persoana, nume,prenume ,localitate ). AUTOMOBILE (numar ,marca ,cod_persoana). Observatie:numarul masinii poate fi de forma BR-10-XXY. Se cere: a)Afisati numele,prenumele,numarul si marca masinii tuturor persoanelor. b)Afisati persoanele care au automobile SKODA nmatriculate in Bucuresti. a) select p.nume,p.prenume,a.numar,a.marca from automobile a,persoane p where p.cod_persoana=a.cod_persoana; b) select p.nume,p.prenume from automobile a,persoane p where p.cod_persoana=a.cod_persoana and upper(a.marca)=SKODA and to_char(a.numar) like %B%;
Subiect 40 n baza de date a unei scoli se gasesc urmatoarele tabele: PROFESORI(clasa,p_mate,p_info, p_romana, p_chimie) ELEVI(clasa,nume_elev,med_mate,med_roma na,med_info, med_chimie). Se cere: a)Care este media rezultatelor obtinute de profesorii de info la toate clasele? b)Care este clasa cu cei mai multi promovati la chimie? a) select avg(e.med_info) as media_rez_p_info,e.clasa from elevi e,profesori p where e.clasa=p.clasa group by e.clasa; b) select clasa from elevi having count(med_chimie)=(select max(count(med_chimie)) from elevi where med_chimie.=5 group by clasa) group by clasa;
Soluiile au fost propuse de profesorii: Bibicu Dorin, Prof. Zeld Jenica, Burlacu Ctlina Liceul Teoretic Dunarea
99
Profir Tudor, CNVA Galai, Prof. Iordachi Lizeta
Reporter: Cum a inceput pasiunea ta pentru informatic? Tudor Profir: Tatl meu mi-a explicat ct de ct prin clasa a 4-a n ce const informatica.Mi s-a prut foarte interesant i de aceea m-am hotrt s m nscriu la profilul de mate-info. Reporter: Spuneai c tatl tu i-a insuflat oarecum pasiunea pentru informatic.n ce a constat pregtirea ta n timp, i n special acum,n anul acesta colar,nainte de olimpiad? Tudor Profir: Mai nti am lucrat la clas dintr-o culegere de probleme.Am prins "gustul" i am cutat cte ceva pe internet (cteva probleme) i am gsit siteul infoarena.ro - un site cu o arhiv foarte vast de probleme, la care pot vedea pe loc rezultatul programului. Pe parcurs, am nvat de acolo cteva tehnici noi, civa algoritmi. Reporter: Profesorul de la clas a avut un cuvnt important de spus n pregtirea ta? M refer la pregtirea din anul acesta n special. Tudor Profir: La clas am nvat toate lucrurile fundamentale ale programrii,dar am lucrat mult i singur. Reporter: Deci s neleg c,ntr-un fel,cheia succesului a constituit-o pentru tine munca independent, dorina ta de a nva mai mult i de a aprofunda ntr-un domeniu care i place? Tudor Profir: Da,dar nu numai asta. n tot acest timp am fost ndrumat i de un alt profesor, de la care am avut foarte multe de nvat. Reporter: Ce ateptri ai de la aceast participare? Tudor Profir: Fiind primul an de participare, m voi acomoda i sper totui s obin cel puin una dintre meniuni. n orice caz, voi ctiga ceva experien. Reporter: n cazul unui insucces,ce atitudine vei adopta? Te vei lsa descurajat sau vei ncerca i anul viitor? Tudor Profir: Voi ncerca cu siguran i anul urmtor. Reporter: Consideri c este un avantaj faptul c ONI se ine n Galai? Tudor Profir: Da, pentru c astfel nu va mai trebui s plec cu cteva zile nainte, s merg cu trenul. Nu a fi fost prea odihnit n ziua concursului i ar fi contat (am experien de la alte olimpiade). Reporter: n final, ce ai sftui un tnr de vrsta ta, care i dorete s ajung unde eti i tu acum? Ce ar trebui s fac? Cu ce atitudine ar trebui s nceap drumul? Tudor Profir: n primul rnd, s munceasc dac i place ceea ce face.i apoi s nu se descurajeze orice s-ar ntmpla. n domeniul acesta sunt anse mult mai mari dect n altele s ai un eec. Mi s-a ntmplat i mie i multora care au ajuns departe. La urma urmei, oricui i se poate ntmpla.
Era odat un tnar care cand era mic vroia s se fac un "mare" scriitor. Cnd i s-a cerut s defineasc "mare" a spus "Vreau s scriu chestii pe care s le citeasc toat lumea, chestii la care lumea s reactioneze emoional, lucruri care s-i fac s strige, s plng, s urle, s se zbat de durere, disperare i mnie!" Acum lucreaz pentru Microsoft i scrie mesaje de eroare....
100
Colectivul de redacie: - Redactor ef: CTLINA BURLACU Liceul Teoretic Dunrea - Redactor ef adjunct GEORGETA-IULIA BALACEA, Colegiul Naional Al.I.Cuza - Redactori principali: o Insp. Prof. Negoi Camelia-ISJ Galai o Stan Maria, Grupul colar Radu Negru - Redactori, profesorii: 1. Mirela Voinea, Colegiul Naional Vasile Alecsandri 2. Daniela Nistor, Colegiul Naional Vasile Alecsandri 3. oldan Florin, Colegiul Naional Vasile Alecsandri 4. Neagu Violeta, Colegiul Naional Mihail Koglniceanu 5. Lucian Dimitrievici, Colegiul Naional Mihail Koglniceanu 6. Novetschi Monica, Colegiul Naional Mihail Koglniceanu 7. Popescu Mdlina, Colegiul Naional Mihail Koglniceanu 8. Bibicu Dorin, Liceul Teoretic Dunarea 9. Zeld Jenica, Liceul Teoretic Dunarea 10. Joc Genia, Colegiul Naional Al. I. Cuza 11. Magdalena Grigore, Colegiul Naional Al.I.Cuza 12. Ilie Daniela, Colegiul Naional Al.I.Cuza 13. Gheorghiu Bogdan Tecuci 14. Gheorghiu Carmen Tecuci 15. Filip Cristian Buruian, student - Responsabili numr : CTLINA BURLACU, GEORGETA-IULIA BALACEA
COPI LRI E Stimai colegi i elevi, v invitm s colaborai la revista noastr. Taloanele de participare la concurs vor fi colectate de profesorul coordonator i apoi trimise colectivului de redacie, iar problemele rezolvate vor fi trimise pe mailul redaciei. Responsabilitatea in legatura cu originalitatea si continutul stiintific al articolelor, problemelor apartine in exclusivitate autorilor. Ateptm opiniile i propunerile voastre pe adresa revistei noastre: revistainformaticagalati@yahoo.com REDACTIA
Talon participare concurs
Nume i prenume... Clasa Unitatea de nvmnt. Profesor coordonator Numr probleme rezolvate.. Numr probleme propuse ..