Sunteți pe pagina 1din 343

SUBIECTELE PROBEI PRACTICE PENTRU EXAMENUL DE ATESTAT PROFESIONAL LA INFORMATIC, 2006 WORD i WINDOWS Subiectul nr.

1
S se creeze un document atestat.doc n folderul cu numele vostru de familie, creat n folderul Atestat. Apoi s se introduc paragrafele din caseta alturat: tergerea coloanelor se face cu ajutorul comenzii Delete din meniul Table. Aceast comand depinde mult de de locul unde este poziionat cursorul. Uneori este nevoie i de alte elemente pe care s se introduc n document, ca de exemplu: foi de calcul, imagini, alte documente. Pentru aceasta se utilizeaz meniul Insert. S se centreze paragraful trei S se sublinieze cu o linie dubl primele trei cuvinte din paragraful doi S se caute cuvntul Table i s se nlocuiasc cu table S se selecteze cuvntul Delete i apoi s se introduc ntr-un chenat rou de dimensiune 3 i umbr S se introduc un titlu adecvat, de dimensiune 20, culorat n verde care s fie aliniat la stnga Dup paragraful 2 s se introduc o ntrerupere de pagin La sfritul documentului s se creeze un grafic pe baza urmtoarelor date:

Universitate ASE UPB UBMatematic

Studeni an I 1200 1400 600

Studeni an II 1150 1300 589

Studeni an III 1125 1200 575

9. S se salveze documentul i apoi s se nchid aplicaia de procesare text.

Rezolvare
1. Se face dublu clic cu mouse-ul pe pictograma directorului Atestat.In acest director se face clic dreapta si se alege optiunea New Folder ce va crea un director pe care il veti denumi cu numele vostru. In acest nou folder se face clic dreapta cu mouse-ul si se selecteaza optiunea New apoi optiunea New Microsoft Word Se redenumeste acest fisier atestat .doc (prin clic dreapta cu mouse-ul si alegerea optiunii Rename) Fisierul atestat .doc se deschide prin dublu clic cu mouse-ul pe el Se apeleaza functia Text Box din meniul Insert si se tasteaza in textbox-ul creat cele trei paragrafe. 2. Se selecteaza textul corespunzator paragrafului trei tinand apasat butonul din stanga al mouse-ului si deplasand cursorul mouse-ului peste acest text. Pentru centrarea paragrafului se foloseste optiunea de centrare din bara de unelte de formatare. 3. Se selecteaza cu mouse-ul cele trei cuvinte.

Se apeleaza meniul Format-Font de unde se selecteaza, din optiunea Underline style tipul de subliniere dorit. Se selecteaza optiunea Edit din meniul superior si apoi functia Replace ce va deschide fereastra Find and Replace. Cuvantul Table se introduce in caseta Find what iar cuvantul table in caseta Replace with.Se actioneaza butonul Replace all. Din bara de instrumente de desenare se selecteaza AutoShapes, Basic Shapes si un chenar cu colturile rotunjite ce se insereaza in document si se aseaza deasupra cuvantului Delete.Se face clic dreapta cu mouse-ul pe chenar si se selecteaza optiunea de formatare a figurii alegandu-se culoarea rosie si grosimea de 3pct.Se face iar clic dreapta si pentru optiunea Order se face trimiterea figurii in spatele textului. Din bara de desenare se selecteaza Se selecteaza textul corespunzator titlului tinand apasat butonul din stanga al mouse-ului si deplasand cursorul mouse-ului peste acest text. Din meniul Format se apeleaza optiunea Font si se modifica dimensiunea fontului la 20 si in Font color se selecteaza culoarea verde si din bara de instrumente se selecteaza optiunea Align Left Se deplaseaza cursorul dupa paragraful 2 si se selteaza din meniul Insert optiunea break si se apasa butonul OK

4.

5.

Shadow 6.

7.

8.

Din meniul superior Insert cu optiunea Picture se seleacteaza optiunea Chart ce va deschide fereastra pentru introducerea datelor si realizarea graficului dorit(studenti an I, an II, an III pe orizontala si pe verticala : ASE, UPB, UB-mate iar apoi in celulele corespunzatoare valorile cerute) Pentru a iesi din aceasta fereastra se face clic stanga in orice parte a documentului Salvarea documentului se face prin File Save sau direct prin selectarea pictogramei cu discheta din bara de instrumente si se inchide folosind butonul de inchidere al ferestrei din coltul dreapta sus.

9.

Exemplificare :

1400 1200 1000 800 600 400 200 0 studenti an studenti an studenti an I II III

ASE UPB UB-m ate

Subiectul nr.2
S se creeze un document atestat.doc n folderul cu numele vostru de familie, creat n folderul Atestat. S se introduc paragrafele din caseta de mai jos: Instruciuni Dac avei un text sau o imagine care dorii s apar pe fiecare pagin a documentului nu trebuie s repetai redactarea acestuia manual. Putei apela funcia Header and Footer din meniul View. Dup alegerea acestei opiuni va aprea bara de intrumente de lucru pentru antete i subsoluri. n aceste zone vei scrie informaiile necesare o singur dat.

Folosind instrumentele de mrire i micorare s se stabileasc dimensiunea paginii la 75% S se se mute primul paragraf dup al treilea n dreptul fiecrui paragraf s se adauge diveri marcatori S se adauge un chenar ntregii pagini S se insereze la sfritul documentului o imagine ntr-un chenar cu colurile rotunjite i umbrit n zona de antet a paginii s se scrie numele liceului, adresa si telefonul n stnga, iar n dreapta s se insereze data curent Cu ajutorul editorului de ecuaii s se scrie urmtoarea relaie:
3 ( x 2 x + 4)dx k 2 k =1 5 n

S se salveze documentul i apoi s se nchid aplicaia de procesare text

Rezolvare
1.

Se face dublu clic cu mouse-ul pe pictograma directorului Atestat.In acest director se face clic dreapta si se alege optiunea New Folder ce va crea un director pe care il veti denumi cu numele vostru. In acest nou folder se face clic dreapta cu mouse-ul si se selecteaza optiunea New apoi optiunea New Microsoft Word Se redenumeste acest fisier atestat .doc (prin clic dreapta cu mouse-ul si alegerea optiunii Rename) Fisierul atestat .doc se deschide prin dublu clic cu mouse-ul pe el

2.

Se apeleaza functia Text Box din meniul Insert si se tasteaza in textbox-ul creat cele trei paragrafe. Din bara de instrumente se selecteaza Zoom-ul pentru pagina de 75% Se selecteaza textul corespunzator tinand apasat butonul din stanga al mouse-ului si deplasand cursorul mouse-ului peste acest text. Mutarea se realizeaza prin tastare simultana Ctrl +X si apoi Ctrl+V in fisierul atestat .doc in pozitia specificata Din meniul Insert Symbol se selecteaza un simbol si prin dublu clic pe casuta corespunzatoare a acestuia se insereaza automat in document in pozitia cursorului Din meniul Format-Page Border se selecteaza box si se apasa butonul OK pentru confirmare Din meniul superior se selecteaza Insert-Picture Din bara de instrumente de desenare se selecteaza AutoShapes, Basic Shapes si un chenar cu colturile rotunjite Din bara de desenare se selecteaza Din meniul superior se selecteaza View, apoi Header and Footer, dupa care se insereaza in dreapta paginii numele liceului, adresa, telefonul, se apasa tab iar in stanga paginii data curenta (Header and Footer) Pentru a scrie ecuatia in document se alege InsertObject-Microsoft Equation 3.0 (Facem click

3.

4.

5.

6.

7.

Shadow 8.

9.

dreapta pe Integral templates si selectam integrala simpla cu doua extremitati. Extremitatea superioara o completam cu 5, facand click stanga in celula de desupra integralei introducem cifra 5 de la tastatura, iar cea inferioara o completam cu 2. Pentru a-l ridica pe x la puterea a 3-a selectam optiunea Subscript and superscript templates, vom completa baza cu x si puterea cu 3. Astfel completam celula din dreapta integralei cu
( x 3 2 x + 4) dx , dupa aceea inseram semnul mai

mic sau egal de la Relational symbols. In final vom insera simbolul suma cu ambele extremitati de la Summation Templates. Completam extremitatea superioara cu n, si pe cea inferioara cu k=1; scriem in celula din dreapta simbolului suma litera k. ) Pentru a iesi din aceasta zona se face clic stanga in document in afara acestei zone Salvarea documentului se face prin File Save sau direct prin selectarea pictogramei cu discheta din bara de instrumente si se inchide folosind butonul de inchidere al ferestrei din coltul dreapta sus(sau Ctrl+S.si Alt+F4 )

10.

Subiectul nr.3
S se creeze un document atestat.doc n folderul cu numele vostru de familie, creat n folderul Atestat S se introduc paragrafele din caseta de mai jos

Pentru a scrie aceast ecuaie va trebui s lucrai cu bara de instrumente. Pentru a introduce semnul sum dai un clic stnga n bara de instrumente pe semnul corespunztor i alegei simbolul dorit. Procedai n mod asemntor pentru toate semnele pe care dorii s le introducei n document cu ajutorul Editorului de ecuaii oferit de Microsoft Word. S se nlocuiasc cuvntul instrumente cu cuvntul unelte, iar la sfrsitul documentului s se scrie numrul de nlocuiri. S se introduc n document un simbol din lista de simboluri S se introduc un titlu adecvat de dimensiune 22, culorat n albastru care s fie centrat n dreptul fiecrui paragraf s se adauge diferii marcatori S se insereze la sfritul documentului o imagine ntr-un chenar cu colurile drepte i umbrit n zona de subsol a paginii s se scrie data curent - centrat La sfritul documentului s se creeze un grafic pe baza urmtoarelor date: Produse Pre Buci P1 1300 3000 P2 2500 1200 P3 4500 5000 S se salveze documentul i apoi s se nchid aplicaia de procesare text.

Rezolvare
1.

Se face dublu clic cu mouse-ul pe pictograma directorului Atestat.In acest director se face clic dreapta si se alege optiunea New Folder ce va crea un director pe care il veti denumi cu numele vostru.

In acest nou folder se face clic dreapta cu mouse-ul si se selecteaza optiunea New apoi optiunea New Microsoft Word Se redenumeste acest fisier atestat .doc (prin clic dreapta cu mouse-ul si alegerea optiunii Rename) Fisierul atestat .doc se deschide prin dublu clic cu mouse-ul pe el Se apeleaza functia Text Box din meniul Insert si se tasteaza in textbox-ul creat cele trei paragrafe. Se selecteaza optiunea Edit din meniul superior si apoi functia Replace ce va deschide fereastra Find and Replace. Cuvantul print se introduce in caseta Find what iar cuvantul tipar in caseta Replace with.Se face clic pe butonul Find next si apoi pe butonul Replace, in mod repetitiv pana la aparitia mesajului de terminare a textului.Din fereastra de informare ce apare imediat se retine numarul de modificari realizate si se tasteaza in fisierul de lucru. Din meniul Insert Symbol se selecteaza un simbol si prin dublu clic pe casuta corespunzatoare a acestuia se insereaza automat in document in pozitia cursorului Se selecteaza textul corespunzator titlului tinand apasat butonul din stanga al mouse-ului si deplasand cursorul mouse-ului peste acest text. Din meniul Format-Font se apeleaza optiunea Font color si se selecteaza culoarea albastra Pentru a introduce intr-un paragraf marcatori se selecteaza optiunea Bullets and Numbering din

2.

3.

4.

5.

6.

meniul Format de unde se pot alege diferiti marcatori. 7.

Din meniul superior se selecteaza Insert

Picture Din bara de instrumente de desenare se selecteaza AutoShapes, Basic Shapes si un chenar cu colturile drepte Din bara de desenare se selecteaza Shadow Se acceseaza meniul View-Header and Footer iar in partea de antet se insereaza, folosind bara de unelte Header and Footer, data curenta. Se selecteaza data introdusa si se face clic stanga pe optiunea Center din toolbarul formatting. Din meniul superior Insert cu optiunea Picture se selecteaza optiunea Chart ce va deschide fereastra pentru introducerea datelor si realizarea graficului dorit. Se selecteaza celula in care scrie East si vom introduce de la tastatura textul Bucati , in cea cu 1st Qtr scriem P1 1300 , in cea cu 2nd Qtr scriem P2 2500 , in cea cu 3rd Qtr scriem P3 4500 in celula A1 introducem numarul 3000, in A2, 1200, si in A3, 5000. Pentru a iesi din aceasta fereastra se face clic stanga in orice parte a documentului. Salvarea documentului se face prin File Save sau direct prin selectarea pictogramei cu discheta din bara de instrumente si se inchide folosind butonul de inchidere al ferestrei din coltul dreapta sus(sau Ctrl+S.si Alt+F4 ).

8.

9.

10.

Exemplificare

2 inlocuiri

5000 4000 3000 2000 1000 0 P1 1300 P2 2500 P3 4500 Bucati

Subiectul nr.4
S se creeze un document atestat.doc n folderul cu numele vostru de familie, creat n folderul Atestat. Apoi scriei trei paragrafe despre Internet S se ascund bara standard de meniu S se seteze paragraful doi astfel nct acesta s nceap de la 2.5cm S se seteze pagina n formatul A4, poziionat pe lat

S se introduc o ntrerupere de pagin dup paragraful al doilea S se numeroteze paginile ncepnd cu cifra 8 S se insereze o stelu albastr, la sfritul documentului. S se scrie n interiorul ei prenumele vostru n zona de Footer a paginii s se scrie data curent n dreapta Cu ajutorul editorului de ecuaii s se scrie urmtoarea relaie:

a
k =1

3 k

S se salveze documentul i apoi s se nchid aplicaia de procesare text.

Rezolvare
1.

Se face dublu clic cu mouse-ul pe pictograma directorului Atestat.In acest director se face clic dreapta si se alege optiunea New Folder ce va crea un director pe care il veti denumi cu numele vostru. In acest nou folder se face clic dreapta cu mouse-ul si se selecteaza optiunea New apoi optiunea New Microsoft Word Se redenumeste acest fisier atestat .doc (prin clic dreapta cu mouse-ul si alegerea optiunii Rename) Fisierul atestat .doc se deschide prin dublu clic cu mouse-ul pe el In fisier se tasteaza trei paragrafe cu informatii referitoare la Internet. Pentru a ascunde bara standard de meniu se face clic dreapta in zona acesteia si daca aceasta e bifata se face clic stanga pe numele ei.

2.

3.

Se selecteaza textul corespunzator paragrafului doi tinand apasat butonul din stanga al mouse-ului si deplasand cursorul mouse-ului peste acest text. Din meniul Format-Paragraph, in campul Indentation, in dreptul specificatiei Left se tasteaza valoarea 2.5 cm. Se selecteaza meniul File-Page Setup iar pentru Paper size se alege tipul A4 si pentru Orientation se alege optiunea Landscape .Pentru a face modificarile definitive se apasa butonul OK.

4.

5. Se pozitioneaza cursorul dupa cel de-al doilea paragraf . Se selecteaza meniul Insert-Break si de la break options se alege Page break. 6. Se selecteaza meniul Insert-Page numbers.Se apasa butonul Format iar in fereastra deschisa pentru Page numbering se alege optiunea start with si in casuta corespunzatoare se tasteaza 8. 7. Din bara de desenare se selecteaza AutoShapesStars and Banners si se alege un tip de steluta.Se face clic dreapta pe forma si se alege opiunea de introducere a textului(prenumele) si apoi optiunea de colorare(fill). 8. Se acceseaza meniul View-Header and Footer iar in partea de antet se insereaza, folosind bara de unelte Header and Footer,data curenta. Se selecteaza data introdusa si se face clic stanga pe optiunea Right din toolbarul formatting. 9.

Pentru a scrie ecuatia in document se alege InsertObject-Microsoft Equation 3.0 (se selecteaza radicalul simplu-de la fraction and radical templets, se deplaseaza cursorul in radical, apoi se selecteaza suma -din summation templets, se introduc n respectiv k=3 si a; apoi se selecteaza subscript and superscript templates cu care se completeaza indicele si puterea lui a;se iese din radical si se selecteaza relational symbols semnul , iar de la greek characters Pentru a iesi din aceasta zona se face clic stanga in document in afara acestei zone

10.

Salvarea documentului se face prin File Save sau direct prin selectarea pictogramei cu discheta din bara de instrumente si se inchide folosind butonul de inchidere al ferestrei din coltul dreapta sus. Subiectul nr.5

S se creeze un document atestat.doc n folderul cu numele vostru de familie, creat n folderul Atestat. Apoi s se introduc paragrafele din caseta de mai jos Pentru a scrie aceast ecuaie va trebui s lucrai cu bara de intrumente. Pentru a introduce semnul sum dai un clic stnga n bara de instrumente pe semnul corespunztor i alegei simbolul dorit. Procedai n mod asemntor pentru toate semnele pe care dorii s le introducei n document cu ajutorul Editorului de ecuaii oferit de Microsoft Word. S se selecteze primul paragraph i apoi s se modifice caracterele n Arial de 16 S se alinieze la stnga paragraful al doillea S se sublinieze cu dou linii primele dou cuvinte ale ultimului paragraf

Pentru tot textul s se stabileasc o distan de dou rnduri S se caute cuvntul semnul i s se nlocuiasc cu simbolul pentru S se introduc n zona antetului data i ora S se selecteze cuvntul Word, ncadrndu-l ntr-un chenar cu colurile rotunjite, de culoare roie i umbrit La sfritul documentului s se introduc un tabel centrat n pagin, cu trei linii i patru coloane, cu un stil la alegere S se salveze documentul i apoi s se nchid aplicaia de procesare text.

Rezolvare
1.

Se face dublu clic cu mouse-ul pe pictograma directorului Atestat.In acest director se face clic dreapta si se alege optiunea New Folder ce va crea un director pe care il veti denumi cu numele vostru. In acest nou folder se face clic dreapta cu mouse-ul si se selecteaza optiunea New apoi optiunea New Microsoft Word Se redenumeste acest fisier atestat .doc (prin clic dreapta cu mouse-ul si alegerea optiunii Rename) Fisierul atestat .doc se deschide prin dublu clic cu mouse-ul pe el Se apeleaza functia Text Box din meniul Insert si se tasteaza in textbox-ul creat cele trei paragrafe.

2. Se selecteaza textul corespunzator primului paragraf tinand apasat butonul din stanga al mouse-ului si deplasand cursorul mouse-ului peste acest text. Din meniul Format-Font se apeleaza optiunea Font si se selecteaza tipul Arial iar pentru Size se stabileste dimensiunea 16. 3.

Se selecteaza paragraful doi ,se face clic dreapta, se alege optiunea paragraph iar in fereastra deschisa se alege alinierea paragrafului la stanga Se selecteaza cu mouse-ul cele doua cuvinte. Se apeleaza meniul Format-Font de unde se selecteaza din optiunea Underline style tipul de subliniere dorit. Se selecteaza tot textul. Se apeleaza meniul Format-Paragraph de unde se alege , din fereastra deschisa optiunea double a tipului line spacing Se selecteaza optiunea Edit din meniul superior si apoi functia Replace ce va deschide fereastra Find and Replace. Cuvantul semnul se introduce in caseta Find what iar cuvantul simbol pentru in caseta Replace with.Se actioneaza butonul Replace all. Se acceseaza meniul View-Header and Footer iar in partea de antet se insereaza, folosind bara de unelte Header and Footer,data si ora curenta. Din bara de instrumente de desenare se selecteaza AutoShapes, Basic Shapes si un chenar cu colturile rotunjite ce se insereaza in document si se aseaza deasupra cuvantului Word.Se face clic dreapta cu mouse-ul pe chenar si se selecteaza optiunea de formatare a figurii alegandu-se culoarea rosie.Se face iar clic dreapta si pentru optiunea Order se face trimiterea figurii in spatele textului. Din bara de desenare se selecteaza

4.

5.

6.

7.

8.

Shadow

9.

Din meniul Table-Insert-Table se stabileste dimensiunea tabelului( trei linii si patru coloane) Se face clic cu mouse-ul pe pictograma din stanga sus tabelului pentru selectarea integrala a tabelului. Se face clic dreapta cu mouse-ul si se alege optiunea Table Properties de unde se bifeaza amplasarea centrat in pagina si se alege un stil pentru tabelul selectat. Salvarea documentului se face prin File Save sau direct prin selectarea pictogramei cu discheta din bara de instrumente si se inchide folosind butonul de inchidere al ferestrei din coltul dreapta sus(sau Ctrl+S.si Alt+F4 ).

10.

Subiectul nr.6 1.
S se creeze un document atestat.doc n folderul cu numele vostru de familie, creat n folderul Atestat. S se scrie urmtorul titlu artistic, centrat n pagin, cu majuscule: REZULTATE FINALE 2. S se editeze urmtorul tabel, centrat n pagin:

Nume Concurent Anton Marina Soare Lucian Zamfir Alexandru Petcu Matei Marin Alina

PROBA 1 20pct. 25pct . 15 10 20 5 15 10 20 20 25 20

PROBA 2 20pct 25pct. . 10 10 20 20 20 10 25 25 25 10

OFICIU 10 pct. 10 10 10 10 10

Total

Premiul acordat Premiul I

3. S se completeze coloana total cu ajutorul unei formule. 4. S se ordoneze descresctor dup punctaj, cu ajutorul unei formule 5. S completeze coloana Premiul acordat: Premiul I , Premiul II, Premiul III ngroat, centrat, colorat n rou, iar fondul celulelor s fie albastru deschis; pentru ceilali s se completeze cu participant, colorat n viiniu, fondul gri. 6. S se adauge n stnga primei coloane, o alt coloan, cu numele Nr.crt. centrat, ngroat, cu acelai font i mrire ca i a celorlalte nume de coloane 7. Modificai chenarul tabelului cu linii duble, de 3pt. grosime. S se salveze documentul i apoi s se nchid aplicaia de procesare text.

Rezolvare
1.

Se face dublu clic cu mouse-ul pe pictograma directorului Atestat.In acest director se face clic dreapta si se alege optiunea New Folder ce va crea un director pe care il veti denumi cu numele vostru.

In acest nou folder se face clic dreapta cu mouse-ul si se selecteaza optiunea New apoi optiunea New Microsoft Word Se redenumeste acest fisier atestat .doc (prin clic dreapta cu mouse-ul si alegerea optiunii Rename) Fisierul atestat .doc se deschide prin dublu clic cu mouse-ul pe el Din galeria Word Art selectata din bara de desenare se alege un stil artistic pentru titlu.In fereastra deschisa pentru introducerea textului, se tasteaza titlul dorit cu majuscule.Centratrea titlului se realizeaza cu instrumentul de centrare din bara de formatare. Tabelul se realizeaza cu ajutorul meniului TableInsert-Table unde se specifica numarul de linii 6 si numarul de coloane 8. Se tasteaza datele in tabelul creat fara punctajele partiale pentru proba 1,proba 2,proba 3(fara scindarea liniilor-coloanelor din tabel). Se face clic cu mouse-ul pe pictograma din stanga sus a tabelului pentru selectarea integrala a tabelului. Se face clic dreapta si din optiunea de borduri si umbrire se selecteaza tipul de bordura caseta si stilul specificat(2 linii), modificandu-se si grosimea acestora. Pentru a completa coloana Total se selecteza meniul Table-Formula, iar in prima casuta se scrie ; =sum(left). Se repeta aceasta operatiune pentru restul de 4 celule. Se face clic cu mouse-ul pe pictograma din stanga sus a tabelului pentru selectarea integrala a tabelului.

2.

3.

4.

Din meniul Table-Sort se opteaza pentru sortarea tabelului conform coloanei 8. Se selecteaza celula din linia 1 coloana 2.Se face clic dreapta si se alege scindarea acesteia in 2 linii si 2 coloane.Se selecteaza cele doua coloane de sus ,se face clic dreapta si se alege optiunea de imbinare.La fel se procedeaza si cu celula din linia 1 coloana 3( din tabelul initial). Se completeaza coloana Premiul acordat in functie de rezultatul din coloana Total.Formatarea pentru fontul textului se realizeaza cu ajutorul instrumentelor din bara de formatare.Centrarea textului in celula se realizeaza prin selectarea celulei, clic dreapta cu mouse-ul si alegerea optiunii centrate pentru alinierea textului in celula.Fondul celulei se coloreaza cu instrumentul de culoare umbrire din bara cu instrumente de formatare. Se selecteaza coloana 1 din table, se face clic dreapta si se alege optiunea de adaugare de coloana. Se tasteaza denumirea coloanei in prima linie a acesteia stabilindu-se initial parametri de ingrosare, font si marime . Centrarea textului in celula se realizeaza prin selectarea celulei, clic dreapta cu mouse-ul si alegerea optiunii centrate pentru alinierea textului in celula. Se face clic cu mouse-ul pe pictograma din stanga sus a tabelului pentru selectarea integrala a tabelului. Se face clic dreapta si din optiunea de borduri si umbrire se selecteaza tipul de bordura caseta si stilul specificat(linii duble), modificandu-se si grosimea acestora la 3pt.

5.

6.

7.

8.

Salvarea documentului se face prin File Save sau direct prin selectarea pictogramei cu discheta din bara de instrumente si se inchide folosind butonul de inchidere al ferestrei din coltul dreapta sus(sau Ctrl+S.si Alt+F4 ).

Subiectul nr.7
S se creeze un document atestat.doc n folderul cu numele vostru de familie, creat n folderul Atestat. Apoi s se introduc paragrafele din cutia alturat: Auto Shapes Din opiunea AutoShapes putei alege diferite forme. Selecia se face printr-un clic stnga pe forma dorit. Desenul va aprea ntrun ptrat ncadrat de 8 puncte. n document i stabilii o dimensiune corespunztoare. Apoi se poate insera un text adecvat. S se transforme literele cuvntului Auto Shapes n majuscule S se seteze paragraful doi astfel nct acesta s nceap de la 2 cm S se introduc marcatori naintea de paragrafele: Selecia se face n document S se compun un mesaj potal (mail merge) tip Adeverin. S se creeze o list nou de date, n care s se scrie informaii legate de angajaii unei firme (nume, prenume, adres minimum patru nregistrri), care s fie salvat n folderul de lucru cu numele date

S se introduc n mesajul potal urmtoarele cmpuri: <<nume>> <<prenume>> <<adres>> S se imbine cele dou documente i apoi s se salveze noul document cu denumirea de mbinare.doc S se vizualizeze documentul naintea imprimrii S se salveze documentul i apoi s se nchid aplicaia de procesare text.

Rezolvare
1.

Se face dublu clic cu mouse-ul pe pictograma directorului Atestat.In acest director se face clic dreapta si se alege optiunea New Folder ce va crea un director pe care il veti denumi cu numele vostru. In acest nou folder se face clic dreapta cu mouse-ul si se selecteaza optiunea New apoi optiunea New Microsoft Word Se redenumeste acest fisier atestat .doc (prin clic dreapta cu mouse-ul si alegerea optiunii Rename) Fisierul atestat .doc se deschide prin dublu clic cu mouse-ul pe el Se apeleaza functia Text Box din meniul Insert si se tasteaza in textbox-ul creat cele trei paragrafe. Se selecteaza textul corespunzator titlului tinand apasat butonul din stanga al mouse-ului si deplasand cursorul mouse-ului peste acest text. In meniul Format se alege optiunea modificare dupa caz si in fereastra aparuta se bifeaza trecerea la majuscule a textului selectat. Se selecteaza textul corespunzator paragrafului doi tinand apasat butonul din stanga al mouse-ului si deplasand cursorul mouse-ului peste acest text.

2.

3.

Din meniul Format-Paragraph, in campul Indentation, in dreptul specificatiei Left se tasteaza valoarea 2 cm. Pentru a introduce intr-un paragraf marcatori se selecteaza optiunea Bullets and Numbering din meniul Format de unde se pot alege diferiti marcatori. Se selecteaza meniul Tools - Mail Merge.In fereastra Mail Merge Helper se apasa butonul Create pentru Main document si se selecteaza optiunea Form Letters.In urmatoarea fereastra se apasa butonul New Main Document.Acum se trece la a doua etapa si anume la cea in care se precizeaza de unde se iau datele.In campul Data Source se alege Get Data -Create Data SourceData Source-Edit-Ok, se selecteaza drept fisier de unde sa se iau datele fisierul date.doc, se adauga numele, prenumele si adresa a minim 4 persoane. Cu ajutorul campului Insert Merge Field de pe bara de instrumente se pot introduce in document campurile dorite : <<nume>> <<prenume>> <<adresa>> Dupa realizarea scrisorii se trece la etapa a treia in care se imbina datele create cu textul scrisorii.Pentru aceasta se apasa butonul Merge. Se va deschide o fereastra de dialog din care se alege locul unde se va imbina documentul(optiunea New Document), document ce va fi salvat sub denumirea de Imbinare.doc

4.

5.

6.

7.

8.

Se selecteaza si se deschide documentul Imbinare.doc.Vizualizarea inainte de tiparire se realizeaza cu ajutorul meniului File-Print Preview

9.

Salvarea documentului se face prin File Save sau direct prin selectarea pictogramei cu discheta din bara de instrumente si se inchide folosind butonul de inchidere al ferestrei din coltul dreapta sus(sau Ctrl+S.si Alt+F4 ).

Subiectul nr.9 1. S se creeze un document atestat.doc n folderul cu


numele vostru de familie, creat n folderul Atestat

2. S se realizeze o invitaie la banchetul de absolvire


care s conin: un titlu artistic, imagine sugestiv, textul invitaiei, s fie colorat corespunztor, s poat fi mpturit n trei (informaiile s fie plasate corespunztor). un tabel cu numele a minimum cinci elevi din clas un chenar al paginii s se aleag o pagin A4, pe orizontal, cu marginile la 1cm (sus, jos, dreapta, stnga) S se vizualizeze documentul naintea imprimrii S se scrie i plicul n care se va pune felicitarea (fa-verso) S se vizualizeze documentul naintea imprimrii

S se salveze documentul i apoi s se nchid aplicaia de procesare text.

Rezolvare
1. Se face dublu clic cu mouse-ul pe pictograma directorului Atestat.In acest director se face clic dreapta si se alege optiunea New Folder ce va crea un director pe care il veti denumi cu numele vostru. In acest nou folder se face clic dreapta cu mouse-ul si se selecteaza optiunea New apoi optiunea New Microsoft Word Se redenumeste acest fisier atestat .doc (prin clic dreapta cu mouse-ul si alegerea optiunii Rename) Fisierul atestat .doc se deschide prin dublu clic cu mouseul pe el 2.

Pentru fundalul invitatiei se acceseaza meniul Format-Background-Fill Effects Pentru realizarea invitatiei la banchetul de absolvire, se alege din bara de instrumente elementul Columns si din acesta se selecteaza 3 coloane, unde vor fi depuse informatiile invitatiei In prima coloana va fi desenat tabelul. Tabelul se realizeaza cu ajutorul meniului TableInsert-Table unde se tasteaza numarul de linii 7 si numarul de coloane 2.Se completeaza cu datele specificate. In coloana centrala, va fi pozitionata imaginea sugestiva(din meniul superior se selecteaza InsertPicture) Dupa titlul artistic, in coloana a treia va fi tastat textul invitatiei.( Din galeria Word Art selectata din bara de desenare se alege un stil artistic pentru

titlu.In fereastra deschisa pentru introducerea textului, se tasteaza titlul dorit cu majuscule). Pentru realizarea chenarului paginii, se apeleaza meniul Format-Borders and Shading Pentru asezarea pe orizontala a paginii si realizarea marginii de 1 cm, se apeleaza meniul File-Page Setup Pentru vizualizarea documentului inaintea tiparirii se acceseaza meniul File-Print Preview Se creaza un nou document Word care va fi suportul pentru plic. Pentru specificarea destinatarului si a expeditorului, se selecteaza meniul Tools-Envelopes and Labels Pentru vizualizarea documentului inaintea tiparirii se acceseaza meniul File-Print Preview Salvarea documentului se face prin File Save sau direct prin selectarea pictogramei cu discheta din bara de instrumente si se inchide folosind butonul de inchidere al ferestrei din coltul dreapta sus(sau Ctrl+S.si Alt+F4 ).

3.

4.

5.

6.

Subiectul nr.10 1. S se creeze un document atestat.doc n folderul cu


numele vostru de familie, creat n folderul Atestat 2. S se creeze un grafic pe baza urmtoarelor date: Clasa 12A Clasa 12B Clasa 12C 176 234 342 56 66 58

3. S se mpart celula care conine numrul 234 n 3 linii i 2 coloane. S se coloreze n culori diferite 4. S se taie cu o linie textul Clasa 12A

5. S se adauge o linie nou ntre prima i a doua linie. Completai fiecare celul corespunztor. 6. Folosind funcia de desprire n cuvinte, s se separe ultimul cuvnt de pe rndul al doilea 7. Ultima coloan s aib un chenar cu margini duble 8. S se adauge un antet n care s se introduc numele, data examinrii i ora 9. S se introduc numere de pagin ncepnd de la 7, n partea de jos a paginii, centrat S se salveze documentul i apoi s se nchid aplicaia de procesare text.

Rezolvare
1.

Se face dublu clic cu mouse-ul pe pictograma directorului Atestat.In acest director se face clic dreapta si se alege optiunea New Folder ce va crea un director pe care il veti denumi cu numele vostru. In acest nou folder se face clic dreapta cu mouse-ul si se selecteaza optiunea New apoi optiunea New Microsoft Word Se redenumeste acest fisier atestat .doc (prin clic dreapta cu mouse-ul si alegerea optiunii Rename) Fisierul atestat .doc se deschide prin dublu clic cu mouse-ul pe el Tabelul se realizeaza cu ajutorul meniului TableInsert-Table unde se tasteaza numarul de linii 3 si numarul de coloane 3.Se completeaza cu datele specificate. Din meniul superior Insert cu optiunea Picture se selecteaza optiunea Chart ce va crea graficul solicitat.

2.

Pentru a iesi din aceasta fereastra se face clic stanga in orice parte a documentului Se selecteaza celula de la intersectia liniei 2 cu coloana 2. Se face clic dreapta si se selecteaza optiunea split cell cu valorile 3 coloane si 2 randuri. Pentru a colora diferit celulele noi formate se selecteaza fiecare celula in parte,se face clic dreapta, se alege Borders and shading si o culoare din optiunea Shading Se selecteaza Clasa 12A si se utilizeaza meniul Format- Font-Strikethrough. Se selecteaza randul cu Clasa 12B, se face clic dreapta si se alege optiunea Insert row. Se selecteaza cuvantul specificat(se alege un cuvant din enunt) si se utilizeaza functia Hyphenation din meniul Tools-Language pentru despartirea in silabe. Se selecteaza coloana trei a tabelului si se foloseste meniul Format- Borders and shading. Din fereastra care se deschide se alege chenarul cu margini duble. Se acceseaza meniul View-Header and Footer iar in partea de antet se insereaza, folosind bara de unelte Header and Footer, numele, data curenta si ora exacta. Se selecteaza meniul Insert-Page numbers.Se apasa butonul Format iar in fereastra deschisa

3.

4.

5.

6.

7.

8.

9.

pentru Page numbering se alege optiunea start with si in casuta corespunzatoare se tasteaza 7. 10.

Salvarea documentului se face prin File Save sau direct prin selectarea pictogramei cu discheta din bara de instrumente si se inchide folosind butonul de inchidere al ferestrei din coltul dreapta sus(sau Ctrl+S.si Alt+F4 ).

Exemplificare Clasa 12A Clasa 12B Clasa 12C 176 234 342 56 66 58

Graficul:
350 300 250 200 150 100 50 0 Clasa 12A Clasa 12B Clasa 12C

Tabelul modificat: Clasa 12A 176 56

Clasa 12X Clasa 12B Clasa 12C Subiectul nr.10

456 23 4 342

66 66 58

1. S se creeze un document atestat.doc n folderul cu


2. numele vostru de familie, creat n folderul Atestat S se creeze un antet de document introducnd numele vostru, adresa i telefonul; sub ele inserai o linie orizontal dubl S se configureze pagina astfel nct acest antet s apar numai pe paginile impare ale documentului. S se redacteze un paragraf cu tema Ce vreau s devin n via i s se introduc paragraful ntr-un chenar colorat cu umbr S se sublinieze un cuvnt cu dou linii S se stabileasc spaierea ntre rnduri la 1.5 cm Dup paragraf s se introduc o ntrerupere de pagin S se creeze o list cu toi prietenii pe care i avei (minimum trei); n stnga fiecruia inserai o imagine sugestiv iar n dreapta, data naterii lor; pe coloan aceste date s fie aliniate.

3.

4.
5. 6. 7. 8.

9. Exemplu: Ioana Maria __________2.12.1964 S se salveze documentul i apoi s se nchid aplicaia de procesare text. Rezolvare
1.

Se face dublu clic cu mouse-ul pe pictograma directorului Atestat.In acest director se face clic

dreapta si se alege optiunea New Folder ce va crea un director pe care il veti denumi cu numele vostru. In acest nou folder se face clic dreapta cu mouse-ul si se selecteaza optiunea New apoi optiunea New Microsoft Word Se redenumeste acest fisier atestat .doc (prin clic dreapta cu mouse-ul si alegerea optiunii Rename) Fisierul atestat .doc se deschide prin dublu clic cu mouse-ul pe el Se acceseaza meniul View-Header and Footer iar in partea de antet se insereaza, folosind bara de unelte Header and Footer, datele cerute.Din bara cu unelte de desenare se alege Linie cu care se traseaza o linie.Se selecteaza aceasta linie prin clic cu mouse-ul si se alege optiunea Line Style unde se opteaza pentru linia dubla. Se utilizeaza meniul File-Page Setup si in caseta de dialog ce apare, la pagina Layout se va selecta Different Odds and Evens. Se va actiona butonul OK pentru confirmare. Se redacteaza paragraful cu tema solicitata. Se selecteaza paragraful si se alege Text Box din bara de unelte grafice. Cu caseta de text selectata, se va alege o culoare de fundal din meniul Fill Color de pe bara de unelte grafice, o umbra actionand butonul Shadow si alegand dintre stilurile de umbre predefinite. Se selecteaza un cuvant si se utilizeaza meniul Format- Font de unde se alege stilul de subliniere. Se va actiona butonul OK pentru confirmare.

2.

3.

4.

5.

6.

Cu paragraful selectat, se va face clic dreapta si se va alege din meniul contextual optiunea Paragraph... Se va seta Line Spacing in dialogul ce apare la valoarea de 1,5. Se va actiona butonul OK pentru confirmare. Avand cursorul de text la sfarsitul paragrafului se va alege Break... din meniul Insert. Din dialogul ce apare se va alege Page Break si se va actiona butonul OK. Se tasteaza numele

7.

8.

prietenilor.

Pentru fiecare nume din lista, plasam cursorul la stanga sa si din meniul Insert-Pictures se va alege Clip Art. Din libraria pusa la dispozitie de Office se vor alege simbolurile necesare. Salvarea documentului se face prin File Save sau direct prin selectarea pictogramei cu discheta din bara de instrumente si se inchide folosind butonul de inchidere al ferestrei din coltul dreapta sus(sau Ctrl+S.si Alt+F4 ).

9.

Subiectul nr.12 1. S se creeze un document atestat.doc n folderul cu


numele vostru de familie, creat n folder-ul Atestat 2. S se introduc n document trei paragrafe cu tema Informatica i societatea modern, utiliznd fontul i mrimea implicit. In antet s se treac numele vostru, iar n subsol data curent 3. Antetul s fie vizibil dac documentul este vizualizat sub aspectul Page Layout, n celelalte vizualizri antetul i subsolul s nu fie vizibile 4. S se selecteze primul paragraf i s se modifice caracterele n Comic Sans MS de dimensiune 10.

5. S se centreze paragraful 2 i s se scrie ultimile dou cuvinte din acest paragraf ngroat 6. S se introduc ultimul paragraf ntr-un chenar colorat cu umbr 7. S se selecteze tot textul i s se stabileasc distana ntre rnduri la 2 puncte 8. Inaintea celui de-al doilea paragraf s se insereze o pagin nou 9. In aceast pagin nou s se introduc central un tabel cu trei linii i patru coloane, care s se formateze cu un stil ales 10. S se salveze documentul i apoi s se nchid aplicaia de procesare text.

Rezolvare
1.

Se face dublu clic cu mouse-ul pe pictograma directorului Atestat.In acest director se face clic dreapta si se alege optiunea New Folder ce va crea un director pe care il veti denumi cu numele vostru. In acest nou folder se face clic dreapta cu mouse-ul si se selecteaza optiunea New apoi optiunea New Microsoft Word Se redenumeste acest fisier atestat .doc (prin clic dreapta cu mouse-ul si alegerea optiunii Rename) Fisierul atestat .doc se deschide prin dublu clic cu mouse-ul pe el Se tasteaza in document cele trei paragrafe. Se utilizeaza meniul View-Header and Footer si Insert-Data end Time pentru inserarea datei in subsol. Se acceseaza meniul View-Header and Footer iar in partea de antet se insereaza, folosind bara de unelte Header and Footer, datele cerute.

2.

3.

4.

Se selecteaza textul corespunzator primului paragraf tinand apasat butonul din stanga al mouse-ului si deplasand cursorul mouse-ului peste acest text. Din meniul Format-Font se apeleaza optiunea Font si se selecteaza tipul Comic Sans MS iar pentru Size se stabileste dimensiunea 10. Se selecteaza textul corespunzator paragrafului doi tinand apasat butonul din stanga al mouse-ului si deplasand cursorul mouse-ului peste acest text. Din bara de formatare se selecteaza alinierea centrata. Se selecteaza cu mouse-ul ultimele doua cuvinte din paragraf si se alege din bara de instrumente de fomatare setarea de ingrosare a textului(aldin). Din bara de instrumente de desenare se selecteaza AutoShapes, Basic Shapes si un chenar cu colturile rotunjite ce se insereaza in document si se aseaza deasupra cuvantului Word.Se face clic dreapta cu mouse-ul pe chenar si se selecteaza optiunea de formatare a figurii alegandu-se culoarea rosie.Se face iar clic dreapta si pentru optiunea Order se face trimiterea figurii in spatele textului. Din bara de desenare se selecteaza Shadow Pentru selectarea integrala a textului se foloseste meniul Editare-Select ALL. Din meniul Format-Pharagraph se stabileste Spacing la 2pct.

5.

6.

7.

8.

Se pozitioneaza cursorul inaintea celui de-al doilea paragraf si se selecteaza din meniul Insert optiunea Break Din meniul Table-Insert-Table se stabileste dimensiunea tabelului( trei linii si patru coloane) Se face clic cu mouse-ul pe pictograma din stanga sus a tabelului pentru selectarea integrala a tabelului. Se face clic dreapta cu mouse-ul si se alege optiunea Table Properties de unde se bifeaza amplasarea centrat in pagina si se alege un stil pentru tabelul selectat.

9.

10.

Salvarea documentului se face prin File Save sau direct prin selectarea pictogramei cu discheta din bara de instrumente si se inchide folosind butonul de inchidere al ferestrei din coltul dreapta sus(sau Ctrl+S.si Alt+F4 ) Subiectul nr.12

S se creeze un document atestat.doc n folderul cu numele vostru de familie, n folderul Atestat. S se introduc paragrafele din caseta alturat:

Instruciuni Dac avei un text sau o imagine care dorii s apar pe fiecare pagin a documentului nu trebuie s repetai redactarea acestuia manual. Putei apela funcia Header and Footer din meniul View. Dup alegerea acestei opiuni va aprea bara de intrumente de lucru pentru antete i subsoluri. n aceste zone vei scrie informaiile necesare o singur dat. Folosind instrumentele de mrire i micorare s se stabileasc dimensiunea paginii la 50% S se mute al treilea paragraf dup primul paragraf S se insereze, ntr-un chenar cu margini rotunjite, o imagine, creia s i se modifice contrastul i luminozitatea S se adauge un chenar ntregii pagini Cu ajutorul editorului de ecuaii s se scrie urmtoarea relaie:

n i E= ( x + 5) 1
S se salveze documentul i apoi s se nchid aplicaia de procesare text.

Rezolvare
1.

Se face dublu clic cu mouse-ul pe pictograma directorului Atestat.In acest director se face clic dreapta si se alege optiunea New Folder ce va crea un director pe care il veti denumi cu numele vostru.

In acest nou folder se face clic dreapta cu mouse-ul si se selecteaza optiunea New apoi optiunea New Microsoft Word Se redenumeste acest fisier atestat .doc (prin clic dreapta cu mouse-ul si alegerea optiunii Rename) Fisierul atestat .doc se deschide prin dublu clic cu mouse-ul pe el Se apeleaza functia Text Box din meniul Insert si se tasteaza in textbox-ul creat cele trei paragrafe.

2.

3.

Din bara de instrumente se selecteaza Zoom-ul pentru pagina de 50% Se selecteaza textul corespunzator paragrafului trei tinand apasat butonul din stanga al mouse-ului si deplasand cursorul mouse-ului peste acest text. Mutarea se realizeaza prin tastare simultana Ctrl +X si apoi Ctrl+V in fisierul atestat .doc inainte primulului paragraf. Din meniul superior se selecteaza Insert-Picture Din bara de instrumente de desenare se selecteaza AutoShapes, Basic Shapes si un chenar cu colturile rotunjite Se selecteaza imaginea si din fereastra aparuta se selecteaza pagina de ajustare a luminozitatii si a contrastului(se fixeaza butoanele More contrast, Less contrast, More brightness, Less brightness) Se selecteaza meniul Format- Borders and Shading-Page border, se aleg caracteristicile

4.

5.

6.

chenarului, aspectul, forma, grosimea si se va actiona butonul OK pentru confirmare. 7.

Se selecteaza meniul Insert - Object.... Din lista de obiecte de la Create new, se face clic pe Microsoft Equation 3.0. Apoi cu ajutorul butoanelor de pe toolbarul nou aparut, se editeaza expresia. Salvarea documentului se face prin File Save sau direct prin selectarea pictogramei cu discheta din bara de instrumente si se inchide folosind butonul de inchidere al ferestrei din coltul dreapta sus(sau Ctrl+S.si Alt+F4 )

8.

Subiectul nr.13 1. S se creeze un document atestat.doc n folderul cu


numele vostru de familie, n folderul Atestat 2. S se construiasc urmtorul tabel, astfel nct denumirea coloanelor s fie centrat i ngroat: Produs Coca-Cola Pepsi-Cola Sprite Buci 23 45 45 Pre unitar (RON) 3 2,8 3,2

3. S se adauge o coloan, dup coloana Pre unitar cu


4. denumirea Total. Coloana Total s fie actualizat cu ajutorul formulei Word S se coloreze coloanele n culori diferite S se creeeze un grafic pe baza datelor din tabelul actualizat S se adauge o linie la sfritul tabelului. Pe aceast linie, n celula din coloana Produs se va scrie Statistici, n celula din coloana Buci se va scrie - cu ajutorul formulei Word - numrul total de buci, n celula din coloana Pre unitar se va scrie - cu ajutorul formulei Word - preul unitar minim, iar n celula din coloana Total se va scrie - cu ajutorul formulei Word suma total. Ultima coloan s aib un chenar cu margini duble S se adauge un antet n care s se introduc numele, data examinrii i ora S se salveze documentul i apoi s se nchid aplicaia de procesare text. Se face dublu clic cu mouse-ul pe pictograma directorului Atestat.In acest director se face clic dreapta si se alege optiunea New Folder ce va crea un director pe care il veti denumi cu numele vostru. In acest nou folder se face clic dreapta cu mouse-ul si se selecteaza optiunea New apoi optiunea New Microsoft Word Se redenumeste acest fisier atestat .doc (prin clic dreapta cu mouse-ul si alegerea optiunii Rename) Fisierul atestat .doc se deschide prin dublu clic cu mouse-ul pe el

5. 6.

7.

8.
9. 1.

Rezolvare

2.

Din meniul Table-Insert-Table se stabileste dimensiunea tabelului( 4 linii si 3 coloane) Se selecteaza prima linie a tabelului si se alege din bara de unelte optiunea de aliniere centrata a textului in cadrul celulei si optiunea de ingrosare. Se selecteaza ultima coloana a tabelului. Se selecteaza meniul Table - Insert- Columns to the Right pentru adaugarea unei noi coloane in tabel. Se face clic cu mouse-ul in celula ce urmeaza sa fie completata.Din meniul Table-Formula se alege pentru prima celula ce trebuie completata(linia 2, coloana 4 din tabel) formula =product(B2,C2).Pentru celelalte celule se va introduce formula =product(B3,C3) , respectiv =product(B4,C4) Se selecteaza fiecare coloana si se alege din bara de instrumente o optiune de colorare a fundalului cu ajutorul uneltei de colorare a suprafetelor inchise. Din meniul superior Insert cu optiunea Picture se selecteaza optiunea Chart ce va crea graficul solicitat. Pentru a iesi din aceasta fereastra se face clic stanga in orice parte a documentului Se selecteaza ultima linie si cu ajutorul meniului Table-Insert si a optiunii randuri dedesubt, se adauga o ultima linie tabelului.Se tasteaza in prima linie, ultima coloana cuvantul Statistici, in ultima linie coloana 2 se solicita meniul Table-Formula (=sum(above) ), in coloana 3 se solicita meniul Table-Formula(=min(c2:c4) , se are in vedere

3.

4.

5.

6.

faptul ca factorii din min sa fie numere reale cu despartitorul pentru zecimale caracterul .`), iar in ultima coloana se solicita meniul Table-Formula (=sum(above) ). 7.

Se selecteaza coloana patru a tabelului si se foloseste meniul Format- Borders and shading. Din fereastra care se deschide se alege chenarul cu margini duble. Se acceseaza meniul View-Header and Footer iar in partea de antet se insereaza, folosind bara de unelte Header and Footer, numele, data curenta si ora exacta. Salvarea documentului se face prin File Save sau direct prin selectarea pictogramei cu discheta din bara de instrumente si se inchide folosind butonul de inchidere al ferestrei din coltul dreapta sus(sau Ctrl+S.si Alt+F4 )

8.

9.

Exemplificare

Produs
Coca-Cola Pepsi-Cola Sprite Statistici

Bucati
23 45 45 113

Pret unitar Total


(RON) 3 2.8 3.2 2.80 69 126 144 316.4

350 300 250 200 150 100 50 0 Bucati Pret unitar (RON) Total Coca-Cola Pepsi-Cola Sprite Statistici

Subiectul nr.14 1.
S se creeze un document atestat.doc n folderul cu numele vostru de familie, n folderul Atestat. S se scrie titlul artistic Examene, centrat n pagin, cu majuscule 2. S se editeze tabelul de mai jos, centrat n pagin
Nume elev Anton Marina Soare Lucian Zamfir Alexandru Petcu Matei Marin Alina Examen 1 10pct. 9 6 4 7 9 10pct . 9 7 5 7 6 Examen 2 10pct . 10 8 6 8 10 10pct . 10 9 7 9 8 Medie Observaii

3.

S se completeze coloana Medie cu ajutorul formulei Word 4. S se ordoneze descresctor dup Medie 5. S se completeze coloana Observaii astfel: dac are o not sub 5 este Respins - ngroat, centrat, colorat n rou, iar fondul celulelor s fie albastru deschis, altfel s se completeze cu Admis - ngroat, centrat, colorat n rou, fondul galben deschis 6. S se adauge n stnga primei coloane, o alt coloan, cu numele Nr.crt. centrat, ngroat, cu acelai font i mrime ca i ale celorlalte nume de coloane, n care numerotarea se va face automat 7. S se tipreasc documentul pe o pagin A4, vertical, n trei exemplare. (Dac nu este instalat imprimanta se vor scrie etapele care sunt urmate, la sfritul documentului) 8. S se salveze documentul i apoi s se nchid aplicaia de procesare text.

Rezolvare
1.

Se face dublu clic cu mouse-ul pe pictograma directorului Atestat.In acest director se face clic dreapta si se alege optiunea New Folder ce va crea un director pe care il veti denumi cu numele vostru. In acest nou folder se face clic dreapta cu mouse-ul si se selecteaza optiunea New apoi optiunea New Microsoft Word Se redenumeste acest fisier atestat .doc (prin clic dreapta cu mouse-ul si alegerea optiunii Rename) Fisierul atestat .doc se deschide prin dublu clic cu mouse-ul pe el

Din galeria Word Art selectata din bara de desenare se alege un stil artistic pentru titlu.In fereastra deschisa pentru introducerea textului, se tasteaza titlul dorit cu majuscule.Centratrea titlului se realizeaza cu instrumentul de centrare din bara de formatare. Tabelul se realizeaza cu ajutorul meniului TableInsert-Table unde se specifica numarul de linii 6 si numarul de coloane 7. Se tasteaza datele in tabelul creat fara punctajele maxime pentru cele 2 examene(fara scindarea liniilor-coloanelor din tabel). Se face clic cu mouse-ul pe pictograma din stanga sus tabelului pentru selectarea integrala a tabelului. Se face clic dreapta si din optiunea de borduri si umbrire se selecteaza tipul de bordura caseta si stilul specificat(2 linii) modificandu-se si grosimea acestora. Se face clic in celula ce urmeaza sa fie completata. Se selecteaza meniul Table-Formula si se scrie =average(left). La fel se completeaza si celelalte celule. Se selecteaza coloana Media.Se utilizeaza meniul Table-Sort si se alege sortarea descrescatoare.Acum se poate realiza scindarea celulelor din linia 1 coloana 2 si 3.Se selecteaza celula.Se face clic dreapta si se alege optiunea de scindare. Formatarea pentru fontul textului se realizeaza cu ajutorul instrumentelor din bara de formatare.Centrarea textului in celula se realizeaza prin selectarea celulei, clic dreapta cu mouse-ul si

2.

3.

4.

5.

alegerea optiunii centrate pentru alinierea textului in celula.Fondul celulei se coloreaza cu instrumentul de culoare umbrire din bara cu instrumente de formatare. 6.

Se selecteaza coloana 1 din tabel, se face clic dreapta si se alege optiunea de adaugare de coloana. Se tasteaza denumirea coloanei in prima linie a acesteia, stabilindu-se initial parametri de ingrosare, font si marime . Centrarea textului in celula se realizeaza prin selectarea celulei,clic dreapta cu mouse-ul si alegerea optiunii centrate pentru alinierea textului in celula. Se utilizeaza meniul File-Print si in fereastra deschisa se stabileste numarul de copii la 3 si se apasa butonul de Properties , la pagina Papers se stabileste formatul A4 iar la pagina BasicsOrientation se stabileste optiunea Portrait. Salvarea documentului se face prin File Save sau direct prin selectarea pictogramei cu discheta din bara de instrumente si se inchide folosind butonul de inchidere al ferestrei din coltul dreapta sus(sau Ctrl+S.si Alt+F4 )

7.

8.

Subiectul nr.15 1.
S se creeze un document atestat.doc n folderul cu numele vostru de familie, n folderul Atestat. 2. S se realizeze tabelul de mai jos:
Nume elev Medii Observaii

Andrei Nicolae Zamfirescu Alexandru Pascal Savu tefnescu Mariana

3. Denumirile colonelor s se scrie ngroat, centrat n celul (vertical i orizontal) 4. Numele elevilor s se scrie cu majuscule, centrat n celul (vertical i orizontal) 5. Dup completarea valorilor celulelor coloanelor Medii, s se completeze coloana Medie general cu ajutorul formulei Word 6. Coloana Observaii s se coloreze n albastru i s se completeze cu observaii adecvate 7. S se scrie un titlu corespunztor, centrat, colorat (la alegere) 8. S se insereze o coloan dup Nume elev cu numele de Simbol. In fiecare celul inserai un simbol sugestiv 9. S se salveze documentul i apoi s se nchid aplicaia de procesare text.

Rezolvare
1.

Se face dublu clic cu mouse-ul pe pictograma directorului Atestat.In acest director se face clic dreapta si se alege optiunea New Folder ce va crea un director pe care il veti denumi cu numele vostru.

Medie general

Romn

Matematic

Informatic

Optional

Fizic

In acest nou folder se face clic dreapta cu mouse-ul si se selecteaza optiunea New apoi optiunea New Microsoft Word Se redenumeste acest fisier atestat .doc (prin clic dreapta cu mouse-ul si alegerea optiunii Rename) Fisierul atestat .doc se deschide prin dublu clic cu mouse-ul pe el Tabelul se realizeaza cu ajutorul meniului TableInsert-Table unde se specifica numarul de linii 5 si numarul de coloane 8. Se selecteaza coloanele 2,3,4,5,6,7 din prima linie .Se face clic dreapta cu mouse-ul si se alege optiunea de imbinare a celulelor selectate.Astfel se obtine o singura celula ce va fi selectata, se face clic dreapta pe ea si se alege optiunea de scindare a ei in 2 linii si 6 coloane. Din bara de instrumente se alege maniera de scriere ingrosata a textului in celule. Pentru scrierea pe verticala a textului in cadrul celulei, se selecteaza celula respectiva, se face clic dreapta si alege orientarea verticala a textului. Centrarea in celula a textului se realizeaza prin selectarea celulei(a celulelor), clic dreapta si selectarea optiunii de centrare. Se face clic in celula ce trebuie completata pe baza formulei. Se apeleaza meniul Tabel-Formula si se tasteaza in fereasta aparuta =average(left).Se procedeaza similar pentru toate celulele din coloana Medie generala.

2.

3.

4.

5.

6.

Fondul celulelor din coloana Observatii se coloreaza cu instrumentul de culoare umbrire din bara cu instrumente de formatare. Din galeria Word Art selectata din bara de desenare se alege un stil artistic pentru titlu.In fereastra deschisa pentru introducerea textului, se tasteaza titlul dorit cu majuscule.Centratrea titlului se realizeaza cu instrumentul de centrare din bara de formatare. Se selecteaza prima coloana si se utilizeaza optiunea de inserare de coloana la dreapta din Table-Insert.Se completeaza numele acestei noi coloane.Pentru inserarea unei imagini intr-o celula, se face clic in celula respectiva si se utilizeaza meniul Insert-Picture(miniatura sau din fisier).Se adapteaza dimensiunea imaginii la celula. Salvarea documentului se face prin File Save sau direct prin selectarea pictogramei cu discheta din bara de instrumente si se inchide folosind butonul de inchidere al ferestrei din coltul dreapta sus(sau Ctrl+S.si Alt+F4 )

7.

8.

9.

Subiectul nr.16 1. S se creeze un document atestat.doc n folderul cu


numele vostru de familie, n folderul Atestat. 2. S se construiasc tabelul de mai jos:
Nume elev Medii generalMedie Matematic Istorie Fizic Informatic Chimie Adresa e-mail

Popescu Alexandra Pescaru Andrei David Elena Stamate tefan

3. Denumirile colonelor s se scrie ngroat, centrat n celul (vertical i orizontal) 4. Numele elevilor s se scrie cu majuscule, centrat n celul (vertical i orizontal) 5. Dup completarea valorilor celulelor coloanelor Medii, s se completeze coloana Medie general cu ajutorul formulei Word 6. Coloana Adresa e-mail s se coloreze n verde i s se completeze cu adrese de e-mail 7. S se scrie un titlu corespunztor, centrat, colorat (la alegere) 8. S se insereze un grafic pentru tabelul de mai sus (nume elevi i medii) 9. S se copieze tabelul i apoi s se dezactiveze adresele de e-mail 10. S se salveze documentul i apoi s se nchid aplicaia de procesare text.

Rezolvare
1.

Se face dublu clic cu mouse-ul pe pictograma directorului Atestat.In acest director se face clic dreapta si se alege optiunea New Folder ce va crea un director pe care il veti denumi cu numele vostru. In acest nou folder se face clic dreapta cu mouse-ul si se selecteaza optiunea New apoi optiunea New Microsoft Word

Se redenumeste acest fisier atestat .doc (prin clic dreapta cu mouse-ul si alegerea optiunii Rename) Fisierul atestat .doc se deschide prin dublu clic cu mouse-ul pe el Tabelul se realizeaza cu ajutorul meniului TableInsert-Table unde se specifica numarul de linii 5 si numarul de coloane 8. Se selecteaza coloanele 2,3,4,5,6,7 din prima linie .Se face clic dreapta cu mouse-ul si se alege optiunea de imbinare a celulelor selectate.Astfel se obtine o singura celula ce va fi selectata, se face clic dreapta pe ea si se alege optiunea de scindare a ei in 2 linii si 6 coloane. Din bara de instrumente se alege maniera de scriere ingrosata a textului in celule. Pentru scrierea pe verticala a textului in cadrul celulei, se selecteaza celula respectiva, se face clic dreapta si alege orientarea textului. Centrarea in celula a textului se realizeaza prin selectarea celulei(a celulelor), clic dreapta si selectarea optiunii de centrare. Se face clic in celula ce trebuie completata pe baza formulei. Se apeleaza meniul Tabel-Formula si se tasteaza in fereasta aparuta =average(left).Se procedeaza similar pentru toate celulele din coloana Medie generala. Fondul celulelor din coloana Adresa e-mail se coloreaza cu instrumentul de culoare umbrire din bara cu instrumente de formatare.

2.

3.

4.

5.

6.

7.

Din galeria Word Art selectata din bara de desenare se alege un stil artistic pentru titlu.In fereastra deschisa pentru introducerea textului, se tasteaza titlul dorit cu majuscule.Centratrea titlului se realizeaza cu instrumentul de centrare din bara de formatare. Pentru inserarea diagramei se foloseste meniul Insert-Picture-Chart si se completeaza in tabelul aparut prima coloana cu numele copiilor,prima linie cu materiile. Pentru a iesi din aceasta fereastra se face clic stanga in orice parte a documentului. Se selecteaza tabelul prin clic pe pictograma din coltul stanga sus al tabelului. Pentru copiere se foloseste CTRL+C si apoi CTRL+V Se selecteaza in copia tabelului ultima coloana si se sterge prin actionarea tastei Delete Salvarea documentului se face prin File Save sau direct prin selectarea pictogramei cu discheta din bara de instrumente si se inchide folosind butonul de inchidere al ferestrei din coltul dreapta sus(sau Ctrl+S.si Alt+F4 )

8.

9.

10.

Subiectul nr.17 1. S se creeze un folder n [path:\]Atestat\ Test. S se


aleag un fiier i s se copieze n folderul Test 2. S se creeze un fiier atestat.txt n Test 3. S se creeze un shortcut ctre un program la alegere. Shortcut-ul se va gsi pe Desktop

4. Pornind de la un shortcut ctre un folder, s se vizualizeze calea folderului 5. S se lanseze n execuie programul Winword.exe, folosind opiunea Run a meniului Start 6. n fiierul atestat.txt s se scrie cte fiiere de tip .gif exist n directorul Windows 7. S se schimbe drepturile asupra fiierului copiat n folderol Test astfel nct utilizatorul s aib doar drept de citire 8. Folosind funcia Help s se caute informaii despre Procesor, care s se scrie n fiierul atestat.txt. 9. S se descrie tot n fiierul atestat.txt, modul n care se modific rezoluia ecranului.

Rezolvare
1.

Se face dublu clic pe folderul Test pentru deschidere.Se face clic dreapta in acest folder si se alege New-Folder.Pentru copierea unui fisier in folderul Test se face selectarea acestuia si se tasteaza succesiv CTRL+C si apoi CTRL+V. In acest folder Test se face clic dreapta cu mouseul si se selecteaza optiunea New apoi optiunea Text document Se redenumeste acest fisier atestat .txt (prin clic dreapta cu mouse-ul si alegerea optiunii Rename) Fisierul atestat .txt se deschide prin dublu clic cu mouse-ul pe el. Se selecteaza fisierul .Se face clic dreapta si se alege Sent to-Desktop(Create Shortcut) Se face clic dreapta pe Shortcut si se vizualizeaza calea catre folder din fereastra Properties

2.

3.

4.

5.

Se tasteaza Winword.exe fereastra aparuta din meniul Start-Run Din meniul Start-Search se alege optiunea For Files or Folders In campul Search for files or folders named: se tasteaza *.gif iar in campul Look in se selecteaza directorul Windows. Se actioneaza butonul Search now.In coltul din stanga jos este precizat numarul de fisiere gasite. Se face clic dreapta pe fisier si se alege Properties.In pagina General se bifeaza atributul Read-Only Se selecteaza, din meniul superior optiunea Help si din acesta optiunea Microsoft Work Help Se face o cautare dupa cuvantul procesor prin actionarea butonului de Search Se selecteaza textul corespunzator raspunsului tinand apasat butonul din stanga al mouse-ului si deplasand cursorul mouse-ului peste acest text.. Copierea se realizeaza prin tastare simultana Ctrl +C si apoi Ctrl+V in fisierul atestat .txt Se face clic dreapta in orice loc pe ecran si din optiunea Properties se alege pagina Settings de unde se poate modifica rezolutia ecranului.

6.

7.

8.

9.

Subiectul nr.18
1. S se creeze un shortcut ctre Paint, Shortcutul care se afl pe Taskbar 2. S se creeze n folderul Atestat un folder cu numele vostru de familie. Aici creai un fiier note.txt n

care s se descrie urmtoarele cerine (pe linii distincte): a) S se seteze Windows-ul astfel nct fiierele cu extensia .txt s fie deschise cu WordPad-ul b) S se seteze Windows-ul astfel nct fiecare fereastr s afieze toate fiierele (i pe cele ascunse i pe cele de system) c) S se determine cte fiiere de tip .rtf exist n directorul Windows d) Folosind instrumentul de cutare, localizai cte fiiere au fost modificate n ultimele 3 luni e) Descriei cum se instaleaz o imagine ca wallpaper f) S se introduc un program la alegere n meniul Start, Programs, Accessories 3. S se seteze Windows-ul n aa fel ca dup 5 minute de inactivitate, pe monitor, s apar cuvtul Atestat. Refacei starea iniial 4. S se modifice starea Taskbar-ului astfel nct s apar numai atunci cnd cursorul grafic staioneaz n partea de jos a ecranului. Refacei starea iniial.

Rezolvare
1.

Se selecteaza Start-Programs-Accessories.Se face clic dreapta pe programul Paint si se alege optiunea de copiere. Pe Desktop se face clic dreapta si se alege optiunea de Paste Shortcut. Se face clic pe Shortcut-ul obtinut si se trage in Taskbar. Se face dublu clic cu mouse-ul pe pictograma directorului Atestat.In acest director se face clic dreapta si se alege optiunea New Folder ce va

2.

crea un director pe care il veti denumi cu numele vostru. In acest nou folder se face clic dreapta cu mouse-ul si se selecteaza optiunea New apoi optiunea Text Document Se redenumeste acest fisier note .txt (prin clic dreapta cu mouse-ul si alegerea optiunii Rename) Fisierul note .txt se deschide prin dublu clic cu mouse-ul pe el Se face clic dreapta pe orice fisier cu extensia .txt si se selecteaza optiunea Open With-Choose Program,se alege programul WordPad si se bifeaza optiunea Always use the selected program to open this kind of file. Se face clic dreapta pe Start si se alege optiunea Explore-Tools-Folder Options-View si se selecteaza Show hidden files and folders. Din meniul Start-Search se alege optiunea For Files or Folders-In campul Serch for files or folders named: se tasteaza *.rtf iar in campul Look in se selecteaza directorul Windows.Se actioneaza butonul Search now.In coltul din stanga jos este precizat numarul de fisiere gasite. Din meniul Start-Search se alege optiunea For Files or Folders- All Files and Folders , "When was it modified ?", "Specify dates" Se face clic dreapta cu mouse-ul pe Desktop.Se alege Properties si din fereastra nou aparuta se selecteaza pagina Background, de unde se precizeaza imaginea Se selecteaza un fisier de pe Desktop.Se face clic pe acest fisier si se trage peste Start-ProgramsAccessories

3.

4.

Se face clic dreapta pe Desktop, se alege Properties- Screen Saver, optiunea Wait ,3D Text,Settings iar pentru Custom text se tasteaza cuvantul Atestat.Refacerea urmeaza aceiasi pasi. Se face clic dreapta pe Taskbar si se alege optiunea Properties- Auto-hide the taskbar.

5.

Subiectul nr.19
S se creeze n folderul Atestat un folder cu numele vostru de familie. Aici s se creeze un fiier note.txt n care vei descrie urmtoarele cerine (pe linii distincte): a.) Ce este placa de baz i ce se amplaseaz pe ea b.) Care sunt parametrii microprocesorului calculatorului la care lucrai c.) Ce capacitate are drive-ul C al calculatorului pe care lucrai i ct spaiu liber mai este pe el d.) Modificarea rezoluiei ecranului e.) Capacitatea memoriei RAM, tipul monitorului, tipul de tastatur f.) S se creeze un shortcut ctre un program la alegere. Shortcut-ul se va gsi pe Desktop 2. S se lanseze n execuie aplicaiile Paint, Notepad i Calculator 3. S se comute controlul ntre aplicaii 4. S se nchid aplicaiile deschise anterior.

1.

Rezolvare
1.

Se face dublu clic cu mouse-ul pe pictograma directorului Atestat.In acest director se face clic dreapta si se alege optiunea New Folder ce va crea un director pe care il veti denumi cu numele vostru. In acest nou folder se face clic dreapta cu mouse-ul si se selecteaza optiunea New apoi optiunea Text Document Se redenumeste acest fisier note .txt (prin clic dreapta cu mouse-ul si alegerea optiunii Rename) Fisierul note .txt se deschide prin dublu clic cu mouse-ul pe el Raspuns posibil la intrebarea a) Placa de baza, motherboard in limba engleza, este punctul de plecare in achizitionarea unui calculator deoarece ea are un rol forte important si anume, interconecteaza toate componentele, atat interne cat si externe ale calculatorului b) Din Control Panel-System se afla parametrii microprocesorului. c)Din My Computer si clic dreapta pe drive-ul C de deschide o fereastra ce ne furnizeaza informatii despre acest drive d) Se face clic dreapta in orice loc pe ecran si din optiunea Properties se alege pagina Settings de unde se poate modifica rezolutia ecranului. e)Control Panel-System, Control Panel-si monitor, Control Panel-si tastatura Se selecteaza fisierul .Se face clic dreapta si se alege Sent to-Desktop(Create Shortcut) Pentru a lansa in executie aceste programe (Paint, Notepad si Calculator) se executa clic pe butonul Start din taskbar, apoi pe Programs, apoi Accessories

2.

3.

4.

Alt+Tab 5.

Inchiderea se realizeaza folosindu-se butonul de close.

Subiectul nr.20 1.
S se creeze n folderul Atestat un folder cu numele vostru de familie. Aici s se salveze fiierul desen.bmp realizat conform punctului 2

2.
Folosind programul Paint al sistemului Windows s se realizeze un desen care: a) s conin 2 figuri geometrice la alegere i o figur format dintr-o linie curb nchis, folosind grosimi i culori diferite pentru contururi (minimum 3) b) fondul paginii s se coloreze cu o alt culoare folosind spray-ul c) una dintre figurile geometrice s se decupeze i s se copieze de 2 ori n cadrul desenului 3. S se salveze fiierul cu numele desen.bmp 4. S se asocieze fiierului desen.bmp un shortcut n folder-ul cu numele vostru 5. S se realizeze urmtoarele cerine: 6. s se vizualizeze capacitatea discului C:\ , spaiul liber i spaiul ocupat s se inspecteze configuraia hard a calculatorului pe care lucrai s se realizeze un fiier document fisahard.txt care s conin datele de la punctele a) i b) i s fie salvat n folderul cu numele vostru

a) b)

Rezolvare
1.

Se face dublu clic cu mouse-ul pe pictograma directorului Atestat.In acest director se face clic dreapta si se alege optiunea New Folder ce va crea un director pe care il veti denumi cu numele vostru. Se face clic dreapta cu mouse-ul si se selecteaza optiunea New pentru creare de nou fisier bmp.Se face clic dreapta pe fisierul nou creat si se redenumeste cu imagine.bmp ; Se face clic pe butonul de Start, se selecteaza Programs-Accessories si se alege programul Paint ; Din bara de instrumente se selecteaza unealta Line pentru care se alege optiunea de grosime si culoarea (din paleta de culori). Din bara de instrumente se face clic pe butonul Rectangle si apoi se deseneaza in foaia de lucru un dreptunghi.Se repeta procedeul pentru realizarea unui patrat. Pentru realizarea unei figuri formata dintr-o linie curba se selecteaza din bara de instrumente unealta Rounded Rectangle si se aplica pe foaia de lucru. Se selecteaza din bara de instrumente unealta Airbrush care se aplica pe pagina. Din bara de instrumente se selecteaza unealta de decupare (Select) si cu ajutorul ei se selecteaza figura ce va fi selectata.Se face clic dreapta si se alege optiunea Cut ce realizeaza decuparea.Se face clic dreapta pe foaia de lucru si se alege optiunea Copy pentru copierea figurii taiate in alta pozitie.Se repeta procedeul care va conduce la copierea figurii taiate in aceeasi locatie ca si prima data .Se selecteteaza una din figuri si se deplaseaza in alta pozitie.

2.

3.

In fereastra ce apare in urma accesarii meniului File-Save as se tasteaza numele desen.bmp Se face clic dreapta pe fiserul desen.bmp si se alege optiunea Copy. Se face clic dreapta in directorul specificat si se alege optiunea Paste Shortcut Se face dublu clic pe My Computer apoi clic dreapta pe discul C si se selecteaza optiunea Properties . Se face clic dreapta pe My Computer si se alege optiunea Properties ce va deschide fereastra System Properties. In folder-ul de lucru se face clic dreapta cu mouseul si se selecteaza optiunea New apoi optiunea Text Document Se redenumeste acest fisier fishahard .txt (prin clic dreapta cu mouse-ul si alegerea optiunii Rename) . Fisierul fishahard .txt se deschide prin dublu clic cu mouse-ul pe el si se tasteaza in el informatiile gasite.

4.

5.

Subiectul nr.21
1. S se creeze n folderul Atestat un folder cu numele vostru de familie. Aici s se salveze fiierul figura.bmp realizat conform punctului 2 2. Folosind programul Paint al sistemului Windows s se realizeze un desen i anume: 3. s conin figurile geometrice: dreptunghi, ptrat, elips, un cerc i o figur format dintr-o linie frnt nchis folosind grosimi diferite pentru contururi (minimum 3)

a) s se coloreze fiecare figur geometric cu o alt culoare folosind pensula pentru contururi i instrumentul de umplere spray-ul b) s se introduc un text Desen geometric folosind majuscule, ngroate i subliniate c) s se decupeze ptratul i apoi s se copieze de 3 ori n cadrul desenului, apoi s se modifice dimensiunile ptratelor astfel nc s fie diferite d) s se redenumeasc fiierul cu numele figuri.bmp 3. Pentru personalizarea sistemului de operare Windows, prin intermediul aplicaiei Display s se fac configurarea diferitelor elemente: a.) s se aleag un model decorativ b.) s se afieze pe ntreaga suprafa de lucru noul model ales c.) s se aleag un interval de 2 minute de inactivitate nainte ca monitorul s treac n regimul cu consum redus de energie (low - power standby).

Rezolvare
1.

Se face dublu clic cu mouse-ul pe pictograma directorului Atestat.In acest director se face clic dreapta si se alege optiunea New Folder ce va crea un director pe care il veti denumi cu numele vostru. Se face clic dreapta cu mouse-ul si se selecteaza optiunea New pentru creare de nou fisier bmp.Se face clic dreapta pe fisierul nou creat si se redenumeste cu imagine.bmp ; Se face clic pe butonul de Start,se selecteaza Programs-Accessories si se alege programul Paint ;

2.

Din bara de instrumente se selecteaza unealta Line pentru care se alege optiunea de grosime si culoare (din paleta de culori). Din bara de instrumente se face clic pe butonul Rectangle si apoi se deseneaza in foaia de lucru un dreptunghi.Se repeta procedeul pentru realizarea unui patrat. Din bara de instrumente se face clic pe butonul Ellipse si apoi se deseneaza in foaia de lucru o elipsa.Se repeta procedeul pentru realizarea unui cerc. Pentru realizarea unei figuri formata dintr-o linie curba se selecteaza din bara de instrumente unealta Polygon, si se aplica pe foaia de lucru. Culorile pot fi selectate din cutia de culori.(ViewColor Box) Colorarea figurilor se face prin selectarea culorii si alegerea instrumentului de colorare. Pentru introducerea textului se foloseste unealta denumita Text ce se selecteaza din bara de instrumente.Din fereastra aparuta in urma selectarii meniului View Toolbar se aleg caracteristicile font-ului. Din bara de instrumente se selecteaza unealta de decupare(Select) si cu ajutorul ei se selecteaza figura ce va fi selectata.Se face clic dreapta si se alege optiunea Cut ce realizeaza decuparea.Se face clic dreapta pe foaia de lucru si se alege optiunea Copy pentru copierea figurii taiate in alta pozitie.Se repeta procedeul care va conduce la copierea figurii taiate in aceeasi locatie ca si prima data .Se selecteteaza una din figuri si se deplaseaza in alta pozitie.Pentru modificarea dimensiunii se face clic pe conturul desenului si se trage de el pana la atingerea dimensiunii dorite.

In fereastra Save as ce apare in urma selectarii meniului File Save as se precizeaza locatia unde se face salvarea fisierului si numele acestuia(figuri.bmp). Se face clic dreapta in orice pozitie a Desktop-ului si se alege optiunea Properties. Din pagina Background se alege modelul dorit si se apasa butonul de Apply. Modificarea culorilor se realizeaza in fereastra Dislpay Properties, pagina Appearance aparuta in urma executarii clic drepta pe ecranul Desktopului si alegerea optiunii Properties. Alegerea celor 2 minute de inactivitate inainte ca monitorul sa treaca in regimul cu consum redus de energie se realizeaza in fereastra Display Properties, pagina Screen Saver(Power) , aparuta in urma executarii clic drepta pe ecranul Desktop-ului si alegerea optiunii Properties.

3.

Subiectul nr.22 1.
S se creeze n folderul Atestat un folder cu numele vostru de familie 2. S se editeze un document, folosind programul WordPad, salvat n folderul cu numele vostru de familie cu numele de convorbire. Acest document s reprezinte o comunicare telefonic scurt n care: a) s se insereze data i ora la care a fost fcut comunicarea prin care se anun data la care se va susine proba practic la examenul de atestat b) s se foloseasc un font la alegere, dimensiune 16 pt 3. S se caute pe hard toate fiierele care au extensia .txt

4. S se copieze primele trei dintre ele n folder-ul candidatului 5. Folosind instrumentul de cutare s se localizeze fiierele mai mari de 1Mb 6. S se arhiveze (cu autoextragere) folderul atestat. Numele arhivei va fi atestat.exe. S se refac coninutul iniial 7. S se tearg arhiva cu trimitere n Recycle Bin.

Rezolvare
1.

Se face dublu clic cu mouse-ul pe pictograma directorului Atestat.In acest director se face clic dreapta si se alege optiunea New Folder ce va crea un director pe care il veti denumi cu numele vostru. Se face clic pe butonul de Start, se selecteaza Programs-Accessories si se alege programul WordPad ; Se selecteaza meniul File-Save as si in fereastra aparuta se alege locatia pentru salvare (folderul cu numele de familie) si se tasteaza numele fieierului Convorbire. Data si ora se insereaza in document prin selectarea de doua ori a meniului Insert-Date and Time Selectarea dimensiuniipentru font se realizeaza prin prin precizarea unei optiuni de font din bara de instrumente sau din meniul Format-Font. Se selecteaza meniul File-Save as si in fereastra aparuta se alege locatia pentru salvare (folderul cu numele de familie) si se tasteaza numele fieierului atestat.

2.

3.

Din meniul Start-Search se alege optiunea For Files or Folders-In campul Serch for files or folders named: se tasteaza *.txt .Se actioneaza butonul Search now. Se selecteaza din fereastra cu fisierele rezultate din cautare primele 3 prin clic cu mouse-ul si apasarea simultana a tastei Schift.Se face clic dreapta si se alege optiunea Copy.In directorul in care se vor copia aceste fisiere se va face clic dreapta cu mouse-ul si se va alege optiunea Paste. Din meniul Start-Search se alege optiunea For Files or Folders.Din fereastra Search Options se alege si se completeaza caracteristica Size. Se face clic dreapta pe folderul Atestat si se alege optiunea Add to archive si numele fisierului arhivat atestat.exe.Se selecteaza butonul OK.Refacerea arhivei se face prin dublu clic pe arhiva. Arhiva este trecuta in Recycle Bin prin clic pe arhiva, apasarea tastei Delete si confirmarea stergerii prin apasarea butonului OK.

4.

5.

6.

7.

Subiectul nr.23
S se creeze n folderul Atestat un folder cu numele vostru de familie Pentru instalarea i configurarea unei noi imprimante prin Gestionarul de tiprire (Printer): a) s se aleag driverul de imprimant dorit (altul dect cel existent) din lista imprimantelor disponibile b) s se descrie instalarea imprimantei alese c) s se seteze imprimarea textului pe un format A4 cu foaia orizontal, n alb negru

d) s se seteze imprimarea textului numai pentru paginile pare ale documentului e) s se configureze tastatura ca tastatur romneasc S se mute pictograma My Computer n partea dreapt a ecranului S se sorteze alfabetic (dup nume) fiierele din folderul My Documents S se creeze n folderul cu numele vostru un fiier cu numele test.txt n care s se rspund la punctele 2.a) si 2.b) i apoi s se modifice drepturile asupra fiierului astfel nct utilizatorul s aib drepturi doar de vizualizare (citire).

Rezolvare
1.

Se face dublu clic cu mouse-ul pe pictograma directorului Atestat.In acest director se face clic dreapta si se alege optiunea New Folder ce va crea un director pe care il veti denumi cu numele vostru. Se face clic pe butonul de Start, se alege optiunea Settings-Printers si se face dublu clic pe pictograma Add Printer ce va deschide un Wizard de instalare. Cu ajutorul meniului File-Print se deschide ferestra Print .Se face clic cu mouse-ul pe butonul Properties si din pagina Paper se selecteaza size A4 iar din pagina Basics se selecteaza orientarea Landscape a paginii. Cu ajutorul meniului File-Print se deschide ferestra Print si in partea dreapta jos a acestei ferestre se alge optiunea de imprimare doar a paginilor pare ale documentului.

2.

Pentru configurarea tastaturii ca tastatura romaneasca se face clic pe butonul de start si din meniul Settings-Control Panel se face clic pe pictograma Regional Options. Se face clic dreapta pe Desktop si se verifica sa nu fie bifata nici o optiune de aranjare a pictogramelor pe el.Se face clic cu mouse-ul pe pictograma My Computer si se deplaseaza in partea dreapta a ecranului prin tragere cu mouse-ul. In folderul My Computer se face clic dreapta si se selecteaza optiunea Arrange Icons-by Name In folder-ul de lucru se face clic dreapta cu mouseul si se selecteaza optiunea New apoi optiunea Text Document Se redenumeste acest fisier test .txt (prin clic dreapta cu mouse-ul si alegerea optiunii Rename) . Dupa tastarea in acest fisier a raspunsurilor cerute se face salvarea acestuia folosind meniul File Save si se inchide . Pe pictograma corespunzatoare fisierului test.txt se face clic dreapta si se alege optiunea Properties si se bifeaza atributul Read-only.

3.

4.

5.

Subiectul nr.24
S se creeze n folderul Atestat un folder cu numele vostru de familie S se deschid aplicaia de editare Notepad i s se scrie ntr-un document opiunile din bara de meniu. S se salveze acest fiier, n folderul de lucru, cu numele de atest.txt S se copieze, n folderul cu numele vostru, fiierul atest.txt cu numele atestat.txt. S se insereze n fiierul copiat data i ora curent

Pe ultima linie a fiierului atestat.txt s se scrie numrul de fiiere cu extensia .xls gsite n sistemul de calcul la care se lucreaz S se schimbe drepturile fiierului atestat.txt astfel nct utilizatorul s aib drepturi complete Pentru instalarea i configurarea unei noi imprimante prin Gestionarul de tiprire (Printer): f) s se aleag driverul de imprimant dorit (altul dect cel existent) din lista imprimantelor disponibile g) s se descrie instalarea imprimantei alese n fiierul atestat.txt h) s se seteze imprimarea textului pe un format A4 cu foaia vertical i) s se seteze imprimarea textului ncepnd cu ultima pagin j) s se configureze tastatura ca tastatur romneasc

Rezolvare
1.

Se face dublu clic cu mouse-ul pe pictograma directorului Atestat.In acest director se face clic dreapta si se alege optiunea New Folder ce va crea un director pe care il veti denumi cu numele vostru. In acest nou folder se face clic dreapta cu mouse-ul si se selecteaza optiunea New, apoi optiunea Text Document. Se tasteaza in fisier optiunile din bara de meniu (File,Edit) si se salveaza fisierul cu ajutorul meniului File-Save.In fereastra aparuta se precizeaza numele fisierului atest.txt.Se inchide fisierul. Se redenumeste acest fisier atestat.txt (prin clic dreapta cu mouse-ul si alegerea optiunii Rename).Se deschide fisierul si se selecteaza

meniul Edit-Date/Time ce va insera data si ora curenta in fisierul atestat.txt. Din meniul Start-Search se alege optiunea For Files or Folders-In campul Serch for files or folders named: se tasteaza *.xls.Se actioneaza butonul Search now.In coltul din stanga jos este precizat numarul de fisiere gasite.Acesta va fi trecut in fisierul atestat.txt. Pe pictograma corespunzatoare fisierului test.txt se face clic dreapta si se alege optiunea Properties si se verifica sa nu fie bifat nici un atribut. Se face clic pe butonul de Start , se alege optiunea Settings-Printers si se face dublu clic pe pictograma Add Printer ce va deschide un Wizard de instalare. Cu ajutorul meniului File-Print se deschide ferestra Print .Se face clic cu mouse-ul pe butonul Properties si din pagina Paper se selecteaza size A4 iar din pagina Basics se selecteaza orientarea Portrait a paginii. Cu ajutorul meniului File-Print se deschide ferestra Print si in partea dreapta jos a acestei ferestre se alege optiunea de imprimare doar a paginilor impare ale documentului. Pentru configurarea tastaturii ca tastatura romaneasca se face clic pe butonul de start si din meniul Settings-Control Panel se face clic pe pictograma Regional Options.

5.

6.

Subiectul nr.25
S se creeze n folderul Atestat un folder cu numele vostru de familie

S se creeze un fiier date.doc n folderul cu numele vostru. S se copieze n acest document coninutul ecranului sub forma unei imagini grafice, ntr-un chenar cu margini rotunjite S se scrie un titlu artistic S se descrie n fiier, etapele de activare/dezactivare a unei bare de instrumente n aplicaia Microsoft-Word S se salveze fiierul creat cu numele date1.doc n care s se scrie capacitatea fiierului date.doc, pe ultima linie a fiierului, cu litere mari, ngroate, albastre, pe un fond galben S se creeze un shortcut al fiierului date1.doc pe Desktop Folosind instrumentul de cutare s se localizeze fiierele modificate n ultima lun Pe ultima linie a fiierului date1.doc s se scrie numrul de fiiere de tip .gif existente n directorul Windows

Rezolvare
1.

Se face dublu clic cu mouse-ul pe pictograma directorului Atestat.In acest director se face clic dreapta si se alege optiunea New Folder ce va crea un director pe care il veti denumi cu numele vostru. In acest nou folder-ul se face clic dreapta cu mouse-ul si se selecteaza optiunea New apoi optiunea New Microsoft Word Se redenumeste acest fisier date.doc (prin clic dreapta cu mouse-ul si alegerea optiunii Rename) Fisierul date.doc se deschide prin dublu clic cu mouse-ul pe el. Se retine imaginea ecranului calculatorului prin apasarea tastei Print Screen.

2.

Din bara de instrumente de desenare se selecteaza AutoShapes, Basic Shapes si un chenar cu colturile rotunjite unde va fi depusa imaginea ecranului prin CTRL+C. Din galeria Word Art selectata din bara de desenare se alege un stil artistic pentru titlu.In fereastra deschisa pentru introducerea textului, se tasteaza titlul dorit cu majuscule.Centratrea titlului se realizeaza cu instrumentul de centrare din bara de formatare. Activarea/dezactivarea a unei bare de instrumente se realizeaza cu ajutorul meniului View-Toolbars. Salvarea se realizeaza cu ajutorul meniului File Save as iar in fereastra aparuta se precizeaza numele fisierului date1.doc. Se face clic dreapta pe pictograma fisierului date.doc si se alege optiunea Properties. Din fereastra aparuta este precizata, in dreptul campului size, dimensiunea fisierului date.doc.Acesta se tasteaza in fisierul date1.doc. (se tasteaza Ctrl+B pentru ingrosarea textului,se acceseaza meniul Format-Font pentru alegerea culorii de scriere si Format-Background pentru colorarea fundalului). Se face clic dreapta pe pictograma cu shotcut si se selecteaza optiunea Properies.Din campul target al paginii Shortcut , se determina calea aplicatiei si se va copia cu CTRL+V CTRL+C in ultima linie a date1.doc. Se selecteaza fisierul .Se face clic dreapta si se alege optiunea Sent to-Desktop(Create Shortcut)

3.

4.

5.

6.

7.

8.

Din meniul Start-Search se alege optiunea For Files or Folders- All Files and Folders , "When was it modified ?", "Specify dates" Din meniul Start-Search se alege optiunea For Files or Folders-In campul Serch for files or folders named: se tasteaza *.rtf iar in campul Look in se selecteaza directorul Windows.Se actioneaza butonul Search now.In coltul din stanga jos este precizat numarul de fisiere gasite.Acesta se tasteaza in ultima linie a fisierului date1.doc.

9.

SUBIECTELE PROBEI PRACTICE PENTRU EXAMENUL DE ATESTAT PROFESIONAL LA INFORMATIC PROGRAMARE


In problemele acestui capitol datele folosite s-au considerat cele uzuale si nu s-a analizat limita posibilitatilor mediului de programare. Solutiile prezentate au un caracter didactic si de aceea s-au utilizat subprograme. Acest mod de abordare determina o urmarire mai usoara a algoritmului folosit in rezolvarea problemei. Rezolvarile s-au facut de cele mai multe ori in paralel pentru cele doua limbaje de programare ( Pascal/C++) chiar daca se puteau gasi variante mai bune pentru fiecare mediu de programere. In multe cazuri au fost calculate anumite valori intermediare. Pentru o mai buna urmarire a modului de executie a programului am ales afisarea acestora pe monitor.

Chiar daca unele cerinte se puteau rezolva in paralel, s-a optat pentru o redactare cat mai clara, care sa puna in evidenta fiecare etapa. De cele mai multe ori am depus datele din fisier intr-un tablou pe care apoi l-am utilizat in rezolvarea cerintelor ulterioare. Am folosit in general variabile globale pentru a avea programe cat mai simple, desi experienta in programare ne-ar fi determinat sa utilizam variabile locale in anumite situatii.

CLASELE DE MATEMATICA-INFORMATIC NEINTENSIV Subiectul nr.1


Se citete de la tastatur un ir de 10 numere ntregi mai mici dect 100. a. S se creeze fiierul text date.in care s conin pe o linie cele 10 valori, separate prin spaiu. b. S se scrie un subprogram care s returneze elementul minim din fiierul date.in; c. S se scrie un subprogram care s creeze un tablou unidimensional cu elementele fiierului date.in i s se insereze ntre ultimul i penultimul element al tabloului media lor aritmetic; d. Scriei n fiierul text date.out irul nou obinut, ordonat cresctor.

Exemplu:
Date de intrare: 17 23 45 67 12 34 5 90 8 9 Date de ieire: a) Fiierul text date.in conine pe o linie: 17 23 45 67 12 34 5 90 8 9 b) Elementul minim este: 5

c) Tabloul unidimensional: 17 23 45 67 12 34 5 90 8 8.5 9 d) Fiierul text date.out conine pe o linie: 5 8.5 8 9 12 17 23 34 45 67 90 Rezolvare: in procedura minelem se determina minimul din vectorul a format cu cele 10 elemente citite de la tastatura; aceste elemente se depun in fisierul date.in; in procedura marit se determina elementul care se insereaza intre penultimul si ultimul element al vectorului a; in acest mod se creaza un nou vector b care se listeaza pe monitor; vectorul b este apoi sortat si se creaza cu noul vector sortat fisierul date.out.

Varianta PASCAL var g,f:text; i,ok:integer; a:array[1..10] of integer; b:array[1..11] of real;aux:real; function minelem:integer; var j,min:integer; begin min:=1000; for j:=1 to 10 do if a[j] < min then min:=a[j]; minelem:=min; end; procedure marit; var m,j:integer; begin m:=a[9]+a[10]; b[10]:=m/2.; for j:=1 to 9 do b[j]:=a[j]; b[11]:=a[10]; end; begin assign (f,'date.in ');rewrite(f); assign(g,'date.out');rewrite(g); { a) } for i:=1 to 10 do begin read(a[i]); write(f,a[i],' '); end; { b) } writeln(minelem);

Varianta C #include <fstream.h> #include <stdlib.h> int a[10]; float b[11]; int minelem() { int j,min; min=1000; for(j=1;j<=10;j++) if(a[j]<min) min=a[j]; return min; } void marit() { int m,j; m=a[9]+a[10]; b[10]=m/2.; for(j=1;j<=9;j++) b[j]=a[j]; b[11]=a[10]; } void main() { fstream f("date.in",ios::out); fstream g("date.out",ios::out); int i; // a) cout<<endl; for(i=1;i<=10;i++) cin>>a[i]; for(i=1;i<=10;i++) f<<a[i]<<" "; // b) cout<<minelem()<<endl;

ok:=1; { c) } marit; for i:=1 to 11 do write(b[i]:3:2,' '); { d) } while ok=1 do begin ok:=0; for i:=1 to 10 do if b[i]>b[i+1] then begin ok:=1;aux:=b[i]; b[i]:=b[i+1];b[i+1]:=aux; end; end; for i:=1 to 11 do write(g,b[i]:3:2,' '); close(f); close(g); end.

int ok=1,aux; // c) cout<<endl; marit(); for(i=1;i<=11;i++) cout<<b[i]<<" "; // d) while(ok==1) { ok=0; for(i=1;i<=10;i++) if(b[i]>b[i+1]) {ok=1; aux=b[i]; b[i]=b[i+1]; b[i+1]=aux;} } for(i=1;i<=11;i++) g<<b[i]<<" "; g.close(); f.close(); }

Subiectul nr.2
Se citete de la tastatur un ir de 10 numere ntregi mai mici dect 100. a. S se creeze fiierul text date.in care s conin pe o linie cele 10 valori, separate prin spaiu. b. S se scrie un subprogram care s returneze elementul maxim din fiierul date.in; c. S se scrie un subprogram care s determine numrul elementelor prime coninute de fiierul date.in;

d. Scriei n fiierul text date.out irul dat, ordonat


cresctor.

Exemplu:
Date de intrare: 7 23 4 17 12 34 5 90 8 9 Date de ieire: a) Fiierul text date.in conine pe o linie: 7 23 4 17 12 34 5 90 8 9 b) Elementul maxim este: 90 c) n fiier sunt 4 numere prime d) Fiierul text date.out conine pe o linie: 4 5 7 8 9 12 17 23 34 90

Rezolvare : subprogramul scrie creaza fisierul date.in in care sunt depuse cele 10 numere intregi citite de la tastatura ; se citesc elementele din fisierul date.in si se cauta elementul maxim in subprogramul maxim ; valoarea este returnata programului principal si afisata pe monitor ; se citesc numerele din fisierul date.in si se determina cate numere sunt prime ; acest lucru se realizeaza in subprogarmul nrprime ; numarul de numere prime este returnat programului principal si afisat pe monitor ; in programul principal se sorteaza cele 10 numere citite si se scriu in fisierul date.out.
Varianta PASCAL var a,ok,i,j,aux:integer; b:array[1..10] of integer; h:text; procedure scrie; var f:text; i:integer; Varianta C #include <fstream.h> #include <stdlib.h> int a,b[10]; void scrie() { ofstream f("date.in");

begin assign(f,'date.in'); rewrite(f); for i:=1 to 10 do begin read(a); write(f,a,' '); end; close(f); end; function maxim:integer; var g:text; max,i,a:integer; begin assign(g,'date.in'); reset(g); read(g,max);b[1]:=max; for i:=2 to 10 do begin read(g,a);b[i]:=a; if a>=max then max:=a; end; close(g); maxim:=max; end; function nrprime:integer; var k,i,j,nrdiv,nr:integer; ok,aux:integer;g:text; begin assign(g,'date.in');reset(g); nr:=0; for i:=1 to 10 do begin read(g,k); nrdiv:=0;

int i; for(i=1;i<=10;i++) { cin>>a; f<<a<<" "; } f.close(); } int maxim() { int max,i,a; ifstream g("date.in"); g>>max;b[1]=max; for(i=2;i<=10;i++) { g>>a; b[i]=a; if (a>max) max=a; } g.close(); return max; } int nrprime() {int k,i,j,nrdv,nr; ifstream g("date.in"); nr=0; for(i=1;i<=10;i++) {g>>k; nrdv=0; for(j=1;j<=k;j++) if (k%j==0)

for j:=1 to k do if k mod j = 0 then nrdiv:=nrdiv+1; if nrdiv=2 then nr:=nr+1; end; close(g); nrprime:=nr; end; begin assign(h,'date.out');rewrite(h); { a) } scrie; { b) } writeln('elementul maxim este ',maxim); { c) } writeln('in fisier sunt ', nrprime,' numere prime '); { d) } ok:=1; while ok=1 do begin ok:=0; for i:=1 to 10 do if b[i]>b[i+1] then begin ok:=1; aux:=b[i]; b[i]:=b[i+1]; b[i+1]:=aux; end; end; for i:=1 to 10 do write(h,b[i],' '); close(h); end.

nrdv=nrdv+1; if (nrdv==2) nr=nr+1; } g.close(); return nr; } void main() {ofstream h("date.out"); // a) scrie(); // b) cout<<endl<<maxim(); // c) cout<<endl<<nrprime(); // d) int ok=1,i,aux; while(ok==1) { ok=0; for(i=1;i<10;i++) if(b[i]>b[i+1]) { ok=1; aux=b[i]; b[i]=b[i+1]; b[i+1]=aux; } } for(i=1;i<=10;i++) h<<b[i]<<" "; h.close(); }

Subiectul nr.3
Se citete de la tastatur un ir de 10 numere ntregi mai mici dect 100. a) S se creeze fiierul text date.in care s conin pe o linie cele 10 valori, separate prin spaiu; b) S se scrie un subprogram care s returneze suma cifrelor elementelor pare din fiierul date.in; c) S se scrie un subprogram care s determine numrul elementelor ptrate perfecte din fiierul date.in; d) Scriei n fiierul text date.out irul dat, ordonat decresctor.

Exemplu:
Date de intrare : 37 23 4 77 12 34 5 90 18 19 Date de ieire : a) Fiierul text date.in conine pe o linie: 37 23 4 77 12 34 5 90 18 19 b) Suma cifrelor elementelor pare din fiierul date.in este: 32 c) ntre elementele din fiierul date.in este un ptrat perfect d) Fiierul text date.out conine pe o linie: 90 77 37 34 23 19 18 12 5 4

Rezolvare : cele 10 numere se citesc in programul principal si se depun in fisierul date.in ; in acelasi timp sunt depuse in vectorul a ; suma cifrelor elementelor pare din vectorul a se calculeaza in subprogramul maxim ,care returneaza rezultatul in programul principal unde se afiseaza pe monitor ; in subprogramul pp se calculeaza cate elemente din vectorul a sunt patrate perfecte, iar rezultatul se

returneaza programului principal unde se afiseza pe monitor ; in programul principal se ordoneaza vectorul a si se depune sortat in fisierul date.out.
Varianta C #include <fstream.h> #include <stdlib.h> int a[10]; int maxim() { int i,k,sum=0; for (i=1;i<=10;i++) if (a[i]%2==0) { k=a[i]; while (k!=0) { sum+=k%10; k/=10; } } return sum; } int pp() { int k,i,b,nr=0; for (i=1;i<=10;i++) { b=a[i]; for (k=1;k<b-1;k++)

Varianta PASCAL var f,g:text; a:array[1..10] of integer; i,ok,aux:integer; function maxim:integer; var i,k,sum:integer; begin sum:=0; for i:=1 to 10 do if a[i] mod 2 =0 then begin k:=a[i]; while k<>0 do begin sum:=sum+k mod 10; k:=k div 10; end; end; maxim:=sum; end; function pp:integer; var k,i,b,nr:integer; begin nr:=0; for i:=1 to 10 do begin b:=a[i]; for k:=1 to b-1 do

if k*k=b then inc(nr); end; pp:=nr; end; begin assign (f,'date.in');rewrite(f); assign (g,'date.out');rewrite(g); { a) } for i:=1 to 10 do read(a[i]); for i:=1 to 10 do write(f,a[i],' '); close(f); writeln; { b) } writeln(' suma cifrelor ', maxim); { c) } writeln(' numarul de patrate perfecte ',pp); { d) } ok:=1; while ok=1 do begin ok:=0; for i:=1 to 9 do if a[i]<a[i+1] then begin ok:=1;aux:=a[i]; a[i]:=a[i+1]; a[i+1]:=aux; end; end; for i:=1 to 10 do write(g,a[i],' '); close(g); end.

if ( k*k==b ) nr+=1; } return nr; } void main() { fstream f("date.in",ios::out); fstream g("date.out",ios::out); int i,ok=1,aux; // a) for(i=1;i<=10;i++) cin>>a[i]; for(i=1;i<=10;i++) f<<a[i]<<" "; // b) cout<<endl<<" suma cifrelor "<<maxim(); // c) cout<<endl<<" numarul de patrate perfecte "<<pp(); // d) while(ok==1) { ok=0; for(i=1;i<10;i++) if(a[i]<a[i+1]) {ok=1; aux=a[i]; a[i]=a[i+1]; a[i+1]=aux;} } for(i=1;i<=10;i++) g<<a[i]<<" "; f.close(); g.close(); }

Subiectul nr.4
Se citete de la tastatur un ir de 10 numere ntregi mai mici dect 100. a) S se creeze fiierul text date.in care s conin pe o linie cele 10 valori, separate prin spaiu; b) S se scrie un subprogram care s determine suma elementelor impare coninute de fiierul date.in; c) S se scrie un subprogram care s returneze cte elemente din fiierul date.in sunt numere de tip palindrom cu cel putin dou cifre (palindrom este un numr de cel puin dou cifre care citit de la dreapta la stnga este identic cu numrul citit de la stnga la dreapta); d) Scriei n fiierul text date.out irul dat, ordonat descresctor.

Exemplu:
Date de intrare: 37 23 4 77 12 34 5 90 18 19 Date de ieire: a) Fiierul text date.in conine pe o linie: 37 23 4 77 12 34 5 90 18 19 b) Suma elementelor impare coninute de fiierul date.in este:161 c) n fiier este un numar de tip palindrom cu cel putin dou cifre d) Fiierul text date.out conine pe o linie: 90 77 37 34 23 19 18 12 5 4

Rezolvare: in programul principal se citesc datele de la tastatura si se depun in fisierul date.in ; datele din fisierul date.in se citesc in programul principal si se depun in vectorul v ;

se calculeaza suma elementelor impare din vectorul v in subprogramul suma si se returneaza programului principal unde se afiseaza pe monitor ; in subprogramul palindrom se determina numarul de elemente palindrom existente in vectorul v si rezultatul se returneaza programului principal unde se afieaza pe monitor ; se sorteaza elementele vectorului v in programul principal si se memoreaza in fisierul date.out.
Varianta C #include <fstream.h> #include <stdlib.h> int i,n,v[10],l=10,r,a; fstream f("date.in",ios::out); fstream g("date.in",ios::in); fstream h("date.out",ios::out); int suma(int a[100],int k) { int j,s=0; for (j=1;j<=k;j++) if ((a[j]%2)!=0) s=s+a[j]; return s; } int palindrome (int a[100],int k) { int j,nr,c=0,p; for (j=1;j<=k;j++) { nr=0;p=0;

Varianta PASCAL type vect=array[1..10] of integer; var i,n,l,r,a:integer; v:vect; f,g:text; function suma (a:vect;k:integer):integer; var j,s:integer; begin s:=0; for j:=1 to k do if a[j] mod 2<>0 then s:=s+a[j]; suma:=s; end; function palindrom (a:vect;k:integer):integer; var j,nr,c,p:integer; begin c:=0; for j:=1 to k do begin nr:=0; p:=0;

if a[j]>9 then begin nr:=a[j]; while nr<>0 do begin p:=p*10 + nr mod 10; nr:=nr div 10; end; end; if p=a[j] then inc(c); end; palindrom:=c; end;

begin { a) } assign (f,'date.in');rewrite(f); for (i=1;i<=10;i++) for i:=1 to 10 do { begin cin>>a; read(a); f<<a<<" "; write(f,a,' '); } end; close(f); f.close(); reset(f); // b) { b) } for (i=1;i<=10;i++) for i:=1 to 10 do g>>v[i]; read(g,v[i]); g.close(); close(g); writeln; writeln(' suma este cout<<endl<<" "<<suma(v,l); ',suma(v,10)); { c) } // c) writeln(' numere palindrom in cout<<endl<<" fisier ',palindrom(v,10)); "<<palindrom(v,l); {d} // d)

if (a[j]>9) { nr=a[j]; while (nr!=0) { p=p*10+nr%10; nr=nr/10;} } if (p==a[j]) c++; } return c; } void main() { // a)

for i:=1 to 9 do for r:=i+1 to 10 do if v[i]<v[r] then begin l:=v[i]; v[i]:=v[r]; v[r]:=l; end; assign (g,'date.out');rewrite(g); for i:=1 to 10 do write(g,v[i],' '); close(g); end.

for (i=1;i<=9;i++) for (r=i+1;r<=10;r++) if (v[i]<v[r]) { l=v[i]; v[i]=v[r]; v[r]=l; } for (i=1;i<=10;i++) h<<v[i]<<' '; h.close(); }

Subiectul nr.5
Se citete de la tastatur un ir de 10 numere ntregi mai mici dect 100. a. S se creeze fiierul text date.in care s conin pe o linie cele 10 valori, separate prin spaiu; b. S se scrie un subprogram care s returneze suma elementelor pare de pe pozitiile impare din fiierul date.in; c. S se scrie un subprogram care s determine numrul elementelor prime coninute de fiierul date.in; d. Scriei n fiierul text date.out irul dat, ordonat cresctor.

Exemplu:
Date de intrare : 7 23 4 17 12 34 5 90 8 9 Date de ieire: a) Fiierul text date.in conine pe o linie: 7 23 4 17 12 34 5 90 8 9 b) Suma elementelor pare de pe pozitiile impare din fiierul date.in este: 24 c) n fiier sunt 4 numere prime

d) Fiierul text date.out conine pe o linie: 4 5 7 8 9 12 17 23 34 90

Rezolvare : in programul principal se citesc datele de la tastatura si se depun in fisierul date.in si in vectorul v ; suma elementelor pare de pe pozitii impare se calculeaza in subprogramul b si se afiseaza in programul principal pe monitor ; in subprogramul c se determina numarul de elemente prime si in programul principal se afieaza pe monitor ; in programul principal se sorteaza vectorul v si elementele sortate se depun in fisierul date.out.
Varianta PASCAL var v:array[1..12] of integer; f,g:text; i,j,aux:integer; function b:integer; var s,i:integer; j,aux:integer; begin s:=0;i:=1; while i<=10 do begin if v[i] mod 2 =0 then begin s:=s+v[i]; i:=i+2; end; b:=s; end; function c:integer; var i,j,ok,p:integer; begin p:=0; for i:=1 to 10 do Varianta C #include<fstream.h> #include <math.h> fstream f("date.in",ios::out); fstream g("date.out",ios::out); int v[12]; int b () { int s=0, i; for (i = 1;i<= 10;i+=2) if (v[i] % 2 == 0) s = s + v[i]; return s; } int c () { int i, j, ok = 1, p = 0; for (i = 1; i <= 10; i++)

begin ok:=1; for j:=2 to trunc(sqrt(v[i])) do if v[i] mod j =0 then ok:=0; if ok<>0 then inc(p); end; c:=p; end; begin assign (f,'date.in'); rewrite(f); { a) } for i:=1 to 10 do begin read(v[i]);write(f,v[i],' '); end; close(f); { b) } writeln; writeln(' suma este ',b); { c) } writeln(' numere prime in fisier ',c); { d) } assign (g,'date.out');rewrite(g); for i:=1 to 9 do for j:=i+1 to 10 do if v[i]>v[j] then begin aux:=v[i]; v[i]:=v[j]; v[j]:=aux; end; for i:=1 to 10 do write(g,v[i],' '); close(g); end.

{ ok = 1; for(j=2;j<=sqrt(v[i]); j++) if (v[i] % j == 0) ok = 0; if (ok) p++; } return p; } void main() { int i, j, aux; // a) for (i=1;i<=10;i++) {cin>>v[i]; f<<v[i]<<" ";} f.close(); cout<<endl<<b(); cout<<endl<<c();

// d) for (i = 1; i < 10; i++) for (j = i + 1; j <=10; j++) if (v[i] > v[j]) { aux = v[i]; v[i] = v[j]; v[j] = aux; } for (i=1;i<=10;i++) g<<v[i]<<' '; }

Subiectul nr.6
Se citete de la tastatur un ir de 10 numere ntregi mai mici dect 100. a. S se creeze fiierul text date.in care s conin pe o linie cele 10 valori, separate prin spaiu; b. S se scrie un subprogram care s determine suma elementelor impare aflate pe poziiile pare coninute de fiierul date.in; c. S se scrie un subprogram care s returneze un mesaj prin care s se comunice dac un element x citit de la tastatur exist sau nu n irul din fiierul date.in;

d. Scriei n fiierul text date.out irul dat, ordonat cresctor. Exemplu:


Date de intrare: 17 23 45 67 12 34 5 90 8 9 Date de ieire : a) Fiierul text date.in conine pe o linie: 17 23 45 67 12 34 5 90 8 b) Suma elementelor impare aflate pe poziiile pare coninute de fiierul date.in este: 99 c) Pentru x = 99 se va afia: elementul nu este n fiier d) Fiierul text date.out conine pe o linie: 5 8 9 12 17 23 34 45 67 90

Rezolvare : in programul principal se citesc datele de la tastatura si se depun in fisierul date.in ; se citeste fisierul date.in si se depun elementele sale in vectorul v ;suma elementelor impare de pe pozitii pare se calculeaza in subprogramul b si se afiseaza in programul principal pe monitor ;

se citeste elementul x in programul principal si in subprogramul c se verifica daca acest element este in vector sau nu si se afiseaza in programul principal un mesaj corespunzator ; in programul principal se sorteaza vectorul v si elementele sortate se depun in fisierul date.out.
Varianta C #include <fstream.h> #include <stdlib.h> fstream f("date.in",ios::out); fstream g("date.in",ios::in); fstream h("date.out",ios::out); int v[12],r,x,i,l,a; int b () { int s=0, i; for (i = 2;i<= 10;i+=2) if (v[i] % 2 != 0) s = s + v[i]; return s; } int c (int &x) { int i, p=0; for(i=1;i<=10;i++) if (v[i]==x) p=1; return p;

Varianta PASCAL var v:array[1..10] of integer; r,x,i,l,a:integer; f,g,h:text; function b:integer; var s,i:integer; begin s:=0;i:=2; while i<=10 do begin if v[i] mod 2 <> 0 then s:=s+v[i]; i:=i+2; end; b:=s; end; function c (var x:integer):boolean; var i:integer;p:boolean; begin p:=false; for i:=1 to 10 do if v[i]=x then p:=true; c:=p;

end; begin { a) } assign (f,'date.in');rewrite(f); for i:=1 to 10 do begin read(a); write(f,a,' '); end; close(f); { b) } assign (g,'date.out');reset(g); for i:=1 to 10 do read(g,v[i]); close(g); writeln; writeln(' suma elementelor ',b); { c) } writeln(' elementul cautat '); readln(x); if c(x) then writeln(' elementul este in sir ') else writeln(' elementul nu este in sir '); {d)} for i:=1 to 9 do for r:=i+1 to 10 do if v[i]>v[r] then begin l:=v[i]; v[i]:=v[r]; v[r]:=l; end; assign (h,'date.out');rewrite(h); for i:=1 to 10 do write(h,v[i],' ');

} void main() // a) { for (i=1;i<=10;i++) { cin>>a; f<<a<<" "; } f.close(); // b) for (i=1;i<=10;i++) g>>v[i]; g.close(); cout<<endl<<"suma elementelor "<<b(); // c) cout<<endl<<"dati elementul cautat "; cin>>x; if(c(x) == 1) cout<<endl<<" elementul este in sir "; else cout<<endl<<" elementul nu este in sir "; // d) for (i=1;i<=9;i++) for (r=i+1;r<=10;r++) if (v[i]>v[r]) { l=v[i]; v[i]=v[r]; v[r]=l;}; for (i=1;i<=10;i++) h<<v[i]<<' ';

close(h); end.

h.close(); }

Subiectul nr.7
Se citete de la tastatur un ir de 10 numere ntregi mai mici dect 100. a. S se creeze fiierul text date.in care s conin patru linii. Fiecare linie afiat conine elementele unei linii din matrice, separate prin spaii; b. S se scrie un subprogram care s returneze elementul maxim de pe diagonala principal a matricei din fiierul date.in; c. S se scrie un subprogram care s determine numarul elementelor de tip palindrom coninute de fiierul date.in (palindrom este un numr de cel puin dou cifre care citit de la dreapta la stnga este identic cu numrul citit de la stnga la dreapta); d. Scriei n fiierul text date.out elementele de pe linia a doua din matricea de mai sus, ordonate cresctor.

Exemplu:
Date de intrare: 13 2 3 66 55 4 3 22 2 3 4 5 1 2 1 17 Date de ieire : a) Fiierul text date.in conine matricea: 13 2 3 66 55 4 3 22 2 3 4 5 1 2 1 17

b) Elementul maxim de pe diagonala principal a matricei din fiierul date.in este:17 c) Exist 3 elemente de tip palindrom. d) Fiierul date.out conine pe o linie: 3 4 22 55

Rezolvare: in programul principal se citesc datele de la tastatura si se depun in fisierul date.in, sub forma unui tablou bidimensional ; in subprogramul palindrom se verifica daca exista elemente palindrom in matrice si in caz afirmativ cate sunt ; numarul elementelor palindrom se transmite programului principal si se afiseaza ; in subprogramul maxim se cauta elementul maxim al tabloului situat ,pe diagonala principala ,si se transmite programului principal unde se afiseaza ; in programul principal se ordoneaza elementele de pe linia a doua a tabloului si noul tablou se depune in fisierul date.out.
Varianta PASCAL type matr=array[1..50,1..50] of integer; var a:matr; i,j,k,elem:integer; f,h:text; function palindrom(a:matr; k:integer):integer; var i,j,nr,c,p:integer; begin c:=0; for i:=1 to k do for j:=1 to k do begin nr:=0; p:=0; Varianta C #include <fstream.h> #include <stdlib.h> fstream f("date.in",ios::out); fstream h("date.out",ios::out); int a[50][50],i,j,k,elem; int palindrom(int a[50][50],int k) { int i,j,nr,c=0,p; for(i=1;i<=k;i++) for (j=1;j<=k;j++) { nr=0;p=0;

if a[i][j]>9 then begin nr:=a[i][j]; while nr<>0 do begin p:=p*10 + nr mod 10; nr:=nr div 10; end; end; if p=a[i][j] then inc(c); end; palindrom:=c; end; function maxim (a:matr; k:integer):integer; var max:integer; begin max:=a[1][1]; for i:=1 to k do if a[i][i]>max then max:=a[i][i]; maxim:=max; end; begin write('dati dimensiunile matricii '); readln(k); { a) } assign (f,'date.in');rewrite(f); for i:=1 to k do begin for j:=1 to k do begin read(a[i][j]); write(f,a[i][j],' ');

if (a[i][j]>9) { nr=a[i][j]; while (nr!=0) { p=p*10+nr%10; nr=nr/10;} } if (p==a[i][j]) c++; } return c; } int maxim(int a[50][50],int k) { int max=a[1][1],i; for(i=1;i<=k;i++) if(a[i][i]>max) max=a[i][i]; return max; } void main() {cout<<" dati dimensiunile matricii ";cin >>k; // a) for (i=1;i<=k;i++) { for(j=1;j<=k;j++) { cin>>a[i][j];

end; writeln(f,' '); end; close(f); { b) } writeln; writeln('elementul maxim de pe diagonala principala ',maxim(a,k)); { c) } writeln(' exista ',palindrom(a,k),' elemente de tip palindrom '); { d) } for i:=1 to k do for j:=i+1 to k do if a[2][i]>a[2][j] then begin elem:=a[2][i]; a[2][i]:=a[2][j]; a[2][j]:=elem; end; assign (h,'date.out');rewrite(h); for i:=1 to k do write(h,a[2][i],' '); close(h); end.

f<<a[i][j]<<" "; } f<<" "; } cout<<endl; // b) cout<<" Elementul maxim pe diagonala principala "<<maxim(a,k); // c) cout<<endl<<"Exista "<<palindrom(a,k)<<" elemente de tip palindrom"; // d) for(i=1;i<=k;i++) for (j=i+1;j<=k;j++) if (a[2][i]>a[2][j]) { elem=a[2][i]; a[2][i]=a[2][j]; a[2][j]=elem; } for (i=1;i<=k;i++) h<<a[2][i]<<" "; h<<endl; }

Subiectul nr.8
Se citete de la tastatur un ir de 16 numere ntregi mai mici dect 100. a) S se creeze fiierul text date.in care s conin patru linii. Fiecare linie afiat conine elementele unei linii dintr-o matrice 4x4, separate prin spaii;

b)

S se scrie un subprogram care s returneze elementul maxim de pe diagonala secundar a matricei din fiierul date.in; c) S se scrie un subprogram care s determine numrul elementelor super prime coninute de fiierul date.in (un numr este superprim dac este prim att el ct i rsturnatul lui); d) Scriei n fiierul text date.out elementele de pe linia a treia din matricea de mai sus, ordonate cresctor.

Exemplu:
Date de intrare: 13 2 3 66 55 4 3 22 2 3 4 5 1 2 1 17 Date de ieire : a) Fiierul text date.in conine matricea: 13 2 3 66 55 4 3 22 2 3 4 5 1 2 1 17 b) Elementul maxim de pe diagonala secundar a matricei din fiierul date.in este: 66 c) Exist 2 numere superprime. d) Fiierul date.out conine pe o linie: 2 3 4 5

Rezolvare: in programul principal se citesc datele de la tastatura si se depun in fisierul date.in, sub forma unui tablou bidimensional ; se citeste fisierul date.in si se depun elementele tabloului in variabila a de tip tablou bidimensional ; in subprogramul maxim se cauta elementul maxim al tabloului situat ,pe diagonala secundara ,si se transmite programului principal , unde se afiseaza ; in subprogramul superprime se verifica daca exista elemente super prime in matrice si in caz afirmativ cate

sunt ; numarul elementelor superprime se transmite programului principal si se afiseaza ; in programul principal se ordoneaza elementele de pe linia a treia a tabloului si se depun in fisierul date.out.
Varianta C #include <fstream.h> #include <stdlib.h> fstream f("date.in",ios::out); fstream g("date.in",ios::in); fstream h("date.out",ios::out); int a[50][50],i,j,k,elem; int maxim(int a[50][50],int k) { int max=a[1][k],i; for(i=1;i<=k;i++) if(a[i][k-i+1]>max) max=a[i][k-i+1]; return max; } int superprim (int a[50][50],int k) { int i,j,nr,c=0,p,inv,m; for(i=1;i<=k;i++) for (j=1;j<=k;j++) { if (a[i][j] > 9) { p=0; for(nr=2;nr<(a[i][j]/2);nr++) if (a[i][j]%nr==0) p++; if (p==0)

Varianta PASCAL type matr=array[1..50,1..10] of integer; var a:matr; i,j,k,elem:integer; f,g,h:text; function maxim (a:matr;k:integer):integer; var max,i:integer; begin max:=a[1][k]; for i:=1 to k do if a[i][k-i+1]>max then max:=a[i][k-i+1]; maxim:=max; end; function superprim (a:matr;k:integer):integer; var i,j,nr,c,p,inv,m:integer; begin c:=0; for i:=1 to k do for j:=1 to k do if a[i][j]>9 then begin p:=0; for nr:=2 to a[i][j] div 2 do if a[i][j] mod nr =0 then

inc(p); if p=0 then begin inv:=1; m:=a[i][j]; while m<>0 do begin inv:=inv*10 + m mod 10; m:=m div 10; end; p:=0; for nr:=2 to inv div 2 do if inv mod nr =0 then inc(p); if p=0 then inc(c); end; end; superprim:=c; end; begin { a) } assign (f,'date.in');rewrite(f); for i:=1 to 4 do begin for j:=1 to 4 do begin read(elem); write(f,elem,' '); end; writeln(f,' '); end; close(f); { b) } assign (g,'date.in'); reset(g); for i:=1 to 4 do for j:=1 to 4 do read(g,a[i][j]);

{ inv=1; m=a[i][j]; while(m!=0){ inv=inv*10+m%10; m/=10; } p=0; for(nr=2;nr<inv/2;nr++) if (inv%nr==0) p++; if (p==0) {cout<<a[i][j];c++;} } } } return c; } void main() // a) {for (i=1;i<=4;i++) { for (j=1;j<=4;j++) { cin>>elem; f<<elem<<" "; } f<<endl;} f.close(); // b) for (i=1;i<=4;i++) for (j=1;j<=4;j++) g>>a[i][j]; g.close();

close(g); writeln; writeln(' elementul maxim ',maxim(a,4)); { c) } writeln(' numarul de elemente superprime ',superprim(a,4)); { d) } for i:=1 to 3 do for j:=i+1 to 4 do if a[3][i]>a[3][j] then begin elem:=a[3][i]; a[3][i]:=a[3][j]; a[3][j]:=elem; end; assign (h,'date.out');rewrite(h); for j:=1 to 4 do write(h,a[3][j],' '); close(h); end.

cout<<" Elementul "<<maxim(a,4);

maxim

// c) cout<<" Numarul de elem superprime "<<superprim(a,4); // d) for (i=1;i<=3;i++) for (j=i+1;j<=4;j++) if (a[3][i]>a[3][j]) {elem=a[3][i]; a[3][i]=a[3][j]; a[3][j]=elem;} for(j=1;j<=4;j++) h<<a[3][j]<<" "; h<<endl; h.close(); }

Subiectul nr.9
Se citete de la tastatur un ir de 10 numere ntregi mai mici dect 100. a) S se creeze fiierul text date.in care s conin pe o linie cele 10 valori, separate prin spaiu; b) S se scrie un subprogram care s returneze suma cifrelor elementului maxim din fiierul date.in; c) S se scrie un subprogram care s determine numrul elementelor prime coninute de fiierul date.in; d) Scriei n fiierul text date.out irul dat, ordonat cresctor.

Exemplu:

Date de intrare : 37 23 4 77 12 34 5 90 18 19 Date de ieire: a) Fiierul text date.in conine pe o linie: 37 23 4 77 12 34 5 90 18 19 b) Suma cifrelor elementului maxim din fiierul date.in este: 9 c) Numrul elementelor prime coninute de fiierul date.in : 4 d) Fiierul text date.out conine pe o linie: 4 5 12 18 19 23 34 37 77 90

Rezolvare : in programul principal se citesc datele de la tastatura si se depun in fisierul date.in ; se citeste fisierul date.in si se depun elementele intr-un vector ; in subprogramul maxim se cauta elementul maxim din vector si se determina suma cifrelor sale ; in subprogramul prime se determina numarul elementelor prime din fisier si rezultatul este returnat programului principal ; in programul principal se ordoneaza elementele si se depun in fisierul date.out.
Varianta PASCAL type vect=array[1..10]of integer; var a:vect; f,g:text; b,i,ok,aux:integer; function maxim (a:vect;k:integer):integer; var i,max,s:integer; begin max:=a[1]; s:=0; for i:=2 to k do if max<a[i] then max:=a[i]; Varianta C #include <fstream.h> #include <stdlib.h> int a[10],b; int maxim(int a[50],int k) { int i,max=a[1],s=0; for (i=2;i<=k;i++) if (max<a[i]) max=a[i];

i:=max; while i<>0 do begin s:=s+i mod 10; i:=i div 10; end; maxim:=s; end; function prime (a:vect;k:integer):integer; var i,p,l,j:integer; begin p:=0; for i:=1 to k do begin l:=1; for j:=2 to a[i] div 2 do if a[i] mod j =0 then l:=0; if l=1 then inc(p); end; prime:=p; end; begin assign (f,'date.in'); rewrite(f); { a) } for i:=1 to 10 do begin read(b); write(f,b,' '); end; close(f); { b) } reset(f); for i:=1 to 10 do read(f,a[i]); writeln;

i=max; while (i!=0){ s+=i%10; i/=10; } return s; } int prime(int a[50],int k) {int i,p=0,l,j; for (i=1;i<=k;i++) { l=1; for(j=2;j<=(a[i]/2);j++) if(a[i]%j==0) l=0; if (l==1) p++; } return p; } void main() { fstream f("date.in",ios::out); fstream g("date.in",ios::in); fstream h("date.out",ios::out); int i,ok=1,aux; // a) for(i=1;i<=10;i++) { cin>>b; f<<b<<" "; } f.close(); // b) for(i=1;i<=10;i++) g>>a[i];

writeln(' suma cifrelor ',maxim(a,10)); { c) } writeln(' numarul elementelor prime ',prime(a,10)); { d) } ok:=1; while ok=1 do begin ok:=0; for i:=1 to 10 do if a[i]>a[i+1] then begin ok:=1; aux:=a[i]; a[i]:=a[i+1]; a[i+1]:=aux; end; end; assign (g,'date.out'); rewrite(g); for i:=1 to 10 do write(g,a[i],' '); close(g); end.

cout<<endl<<" suma cifrelor "<<maxim(a,10); // c) cout<<endl<<"numarul elementelor prime "<<prime(a,10); // d) while(ok==1) { ok=0; for(i=1;i<10;i++) if(a[i]>a[i+1]) { ok=1;aux=a[i]; a[i]=a[i+1]; a[i+1]=aux;} } for(i=1;i<=10;i++) h<<a[i]<<" "; f.close(); g.close(); h.close(); }

Subiectul nr.10
Se citete de la tastatur un ir de 10 numere ntregi mai mici dect 100. a) S se creeze fiierul text date.in care s conin pe o linie cele 10 valori, separate prin spaiu; b) S se scrie un subprogram care s returneze numrul de elemente din fiierul date.in care au ultima cifr egal cu 3;

c)

S se scrie un subprogram care s determine numrul elementelor coninute de fiierul date.in care au suma cifrelor numr par; d) Scriei n fiierul text date.out irul dat, ordonat descresctor.

Exemplu:
Date de intrare : 17 23 45 67 12 34 3 90 8 9 Date de ieire: a) Fiierul text date.in conine pe o linie: 17 23 45 67 12 34 3 90 8 9 b) Numrul de elemente din fiierul date.in care au ultima cifr egal cu 3: 2 c) Numrul elementelor coninute de fiierul date.in care au suma cifrelor numr par: 2 d) Fiierul text date.out conine pe o linie: 90 77 37 34 23 19 18 12 5 4

Rezolvare: in programul principal se citesc datele de la tastatura si se depun in fisierul date.in ; se citeste fisierul date.in si se depun elementele intr-un vector ; in subprogramul nrtrei se calculeaza cate elemente din fisier au ultima cifra trei ; rezultatul este transmis in programul principal si afisat ; in subprogramul cifre se calculeaza suma cifrelor elementelor din fisier si daca aceasta suma este para se incrementeaza variabila nr ; in programul principal se transmite acest numar si se afiseaza pe monitor ; tot in programul principal se ordoneaza elementele sirului dat si se scriu in fisierul date.out.
Varianta PASCAL type Varianta C #include <fstream.h>

vect=array[1..10] of integer; var a:vect; f,g:text; b,i,ok,aux:integer; function nrtrei (a:vect; k:integer):integer; var i,trei:integer; begin trei:=0; for i:=1 to k do if a[i] mod 10 = 3 then inc(trei); nrtrei:=trei; end; function cifre (a:vect; k:integer):integer; var i,s,nr,p:integer; begin nr:=0; for i:=1 to k do begin s:=0; p:=a[i]; while p<>0 do begin s:=s+p mod 10; p:=p div 10; end; if s mod 2 =0 then inc(nr); end; cifre:=nr; end; begin assign (f,'date.in'); rewrite(f); { a) } for i:=1 to 10 do begin

#include <stdlib.h> int a[10],b; int nrtrei(int a[50],int k) { int i,trei=0; for (i=1;i<=k;i++) if (a[i]%10==3) trei++; return trei; } int cifre(int a[50], int k) { int i,s,nr=0,p; for (i=1;i<=k; i++) { s=0;p=a[i]; while(p!=0) {s+=p%10; p/=10; } if(s%2==0) nr++; } return nr; } void main() { fstream f("date.in",ios::out); fstream g("date.in",ios::in); fstream h("date.out",ios::out); int i,ok=1,aux; // a) for(i=1;i<=10;i++) {cin>>b;

read(b); write(f,b,' '); end; close(f); { b) } reset(f); for i:=1 to 10 do read(f,a[i]); close(f); writeln; writeln(' numarul de elemente care se termina cu trei ',nrtrei(a,10)); { c) } writeln; writeln(' numarul de elemente cu suma cifrelor para ',cifre(a,10)); { d) } assign (g,'date.out'); rewrite(g); ok:=1; while ok=1 do begin ok:=0; for i:=1 to 10 do if a[i]<a[i+1] then begin ok:=1; aux:=a[i]; a[i]:=a[i+1]; a[i+1]:=aux; end; end; for i:=1 to 10 do write(g,a[i],' '); close(g); end.

f<<b<<" ";} f.close(); // b) for(i=1;i<=10;i++) g>>a[i]; cout<<endl; cout<< "numarul de elemente care se termina cu trei "; cout<<nrtrei(a,10); // c) cout<<endl; cout<<" numarul de elemente care au suma cifrelor para "; cout<<cifre(a,10); // d) while(ok==1) { ok=0; for(i=1;i<10;i++) if(a[i]<a[i+1]) { ok=1;aux=a[i]; a[i]=a[i+1]; a[i+1]=aux;} } for(i=1;i<=10;i++) h<<a[i]<<" "; f.close(); g.close(); h.close(); }

Subiectul nr.11
Se citete de la tastatur un ir de 10 numere ntregi mai mici dect 100. a) S se creeze fiierul text date.in care s conin pe o linie cele 10 valori, separate prin spaiu; b) S se scrie un subprogram care s returneze suma cifrelor pare ale numerelor din fiierul date.in; c) S se scrie un subprogram care s determine numrul elementelor prime de dou cifre coninute de fiierul date.in; d) Scriei n fiierul text date.out irul dat, ordonat cresctor.

Exemplu:
Date de intrare : 7 23 4 17 12 34 5 90 8 9 Date de ieire : a) Fiierul text date.in conine pe o linie: 7 23 4 17 12 34 5 90 8 9 b) Suma cifrelor pare ale numerelor din fiierul date.in este: 20 c) n fiier sunt 2 numere prime de dou cifre d) Fiierul text date.out conine pe o linie: 4 5 7 8 9 12 17 23 34 90

Rezolvare : in programul principal se citesc datele de la tastatura si se depun in fisierul date.in ; se citeste fisierul date.in si se memoreaza elementele sale intr-un vector a ; in subprogramul suma se calculeaza suma cifrelor pare ale elementelor pare din vectorul a ; rezultatul se transmite programului principal si se afiseaza ;

in subprogramul nrprime se determina numarul elementelor prime de doua cifre din fisier ; sirul de numere date in fisierul date.in se ordoneaza si se depune in fisierul date.out.
Varianta C #include <fstream.h> #include <stdlib.h> int a[50],b; int suma(int a[50],int k) { int i,s=0,nr; for (i=1;i<=k;i++) { nr=a[i]; while (nr!=0) { if ((nr%10)%2==0) s+=nr%10; nr/=10; } return s; } int nrprime(int a[50],int k) { int i,j,nr=0,p; for (i=1;i<=k;i++) if((a[i]>9)&&(a[i]<1000)) {

Varianta PASCAL type vect=array[1..10] of integer; var a:vect; b,i,ok,aux:integer; f,g:text; function suma (a:vect; k:integer):integer; var i,s,m,nr:integer; begin s:=0; for i:=1 to k do begin nr:=a[i]; while nr<>0 do begin m:=nr mod 10; if m mod 2 = 0 then s:=s+m; nr:=nr div 10; end; end; suma:=s; end; function nrprime (a:vect; k:integer):integer; var i,j,nr,p:integer; begin nr:=0; for i:=1 to k do

if ((a[i]>9) and (a[i] < 1000)) then begin p:=1; for j:=2 to a[i] div 2 do if a[i] mod j = 0 then p:=0; if p=1 then inc(nr); end; nrprime:=nr; end; begin assign (f,'date.in'); rewrite(f); { a) } for i:=1 to 10 do begin read(b);write(f,b,' '); end; close(f); { b) } reset(f); for i:=1 to 10 do read(f,a[i]); close(f); writeln; writeln(' suma cifrelor pare ',suma(a,10)); { c) } writeln(' numarul de elemente prime ',nrprime(a,10)); { d) } assign (g,'date.out');rewrite(g); ok:=1; while ok=1 do begin

p=1; for(j=2;j<=a[i]/2;j++) if (a[i]%j==0) p=0; if (p==1) nr++; } return nr; } void main() { fstream f("date.in",ios::out); fstream g("date.in",ios::in); fstream h("date.out",ios::out); int i,ok=1,aux; // a) for(i=1;i<=10;i++){cin>>b; f<<b<<" ";} f.close(); // b) cout<<endl; cout<<" suma cifrelor pare "; cout<<suma(a,10); cout<<endl; // c) cout<<" numarul de elemente prime "; cout<<nrprime(a,10); // d) while(ok==1) { ok=0; for(i=1;i<10;i++)

ok:=0; for i:=1 to 9 do if a[i]>a[i+1] then begin ok:=1; aux:=a[i]; a[i]:=a[i+1]; a[i+1]:=aux; end; end; for i:=1 to 10 do write(g,a[i],' '); close(g); end.

if(a[i]>a[i+1]) { ok=1;aux=a[i]; a[i]=a[i+1]; a[i+1]=aux;} } for(i=1;i<=10;i++) h<<a[i]<<" "; f.close(); g.close(); h.close(); }

Subiectul nr.12
Se citete de la tastatur un ir de 10 numere ntregi mai mici dect 100. a) S se creeze fiierul text date.in care s conin pe o linie cele 10 valori, separate prin spaiu; b) S se scrie un subprogram care s returneze elementele din fiierul date.in care aparin intervalului [a,b] unde a i b sunt numere ntregi mai mici dect 100 citite de la tastatur; c) S se scrie un subprogram care s determine cel mai mare numr prim din fiierul date.in; d) Scriei n fiierul text date.out irul dat, ordonat descresctor.

Exemplu:
Date de intrare : 37 23 4 77 12 34 5 90 18 19 Date de ieire :

a) Fiierul text date.in conine pe o linie: 37 23 4 77 12 34 5 90 18 19 b) Pentru intervalul [36, 80] elementele din fiierul date.in care aparin intervalului sunt: 37 77 c) Cel mai mare numr prim din fiierul date.in este: 37 d) Fiierul text date.out conine pe o linie: 90 77 37 34 23 19 18 12 5 4

Rezolvare : se citesc datele de la tastatura si se depun in fisierul date.in ; in subprogramul apartine se verifica elementele care apartin intervalului [a,b] si se afiseaza cele aflate in interiorul intervalului ; datele din fisierul date.in se memoreaza in vectorul v care se utilizeaza apoi in rezolvarea cerintelor problemei ; subprogramul maxprim determina cel mai mare numar prim si il returneaza programului principal ; in programul principal se sorteaza elementele vectorului v si se depun in fisierul de iesire date.out.
Varianta PASCAL var f,g:text; p:boolean; i,nr,a,b,contor:integer; v:array[1..10] of integer; procedure creare; var i,nr:integer; begin assign(f,'date.in'); rewrite(f); for i:=1 to 10 do begin read(nr); write(f,nr,' ');end; close(f);end; procedure apartine; begin Varianta C #include <fstream.h> #include <stdlib.h> int i,a,b,v[10],p,j,contor=0; fstream f("date.in",ios::out); fstream h("date.out",ios::out); void apartine(int a,int b) {

write('a= '); readln(a); write('b= '); readln(b);contor:=0; assign(f,'date.in');reset(f); read(f,nr); while not eof(f) do begin if(nr>=a)and (nr<=b) then begin inc(contor);v[contor]:=nr; end; read(f,nr);end; end; function maxprim:integer; var nrdiv,maxp,j:integer; begin assign(f,'date.in'); reset(f); maxp:=0;read(f,nr); v[1]:=nr;j:=1; while not eof(f) do begin nrdiv:=0; for i:=1 to nr do if nr mod i=0 then inc(nrdiv); if nrdiv = 2 then if maxp<nr then maxp:=nr; read(f,nr);inc(j);v[j]:=nr; end; maxprim:=maxp; end; begin {a} creare;

for (i=1;i<=10;i++) { if((v[i]>=a)&&(v[i]<=b)) cout<<v[i]<<" "; } } int maxprim(int v[10]){ int i,j,maxp=0,nrdiv,nr; for(i=1;i<=10;i++) { nr=v[i];nrdiv=0; for (j=1;j<=nr;j++) if(nr%j==0) nrdiv+=1; if((nrdiv==2)&&(maxp<nr)) maxp=nr; } return maxp; } void main() { // a) for(i=1;i<=10;i++){cin>>v[i]; f<<v[i]<<" ";} f.close(); // b)

{b}

apartine;

cout<<endl<<"a= ";cin>>a; cout<<endl<<"b= ";cin>>b; for i:=1 to contor do write(' ',v[i]); apartine(a,b);cout<<endl; {c} // c) writeln; writeln(' ',maxprim); cout<<endl<<" "<<maxprim(v); {d} // d) assign (g,'date.out');rewrite(g); for (i=1;i<=9;i++) p:=true; for (j=i+1;j<=10;j++) if (v[i]<v[j]) { while p do begin a=v[i]; p:=false; v[i]=v[j]; for i:=1 to 9 do v[j]=a; if v[i]<v[i+1] then begin }; p:=true;a:=v[i]; v[i]:=v[i+1]; v[i+1]:=a;end; for (i=1;i<=10;i++) h<<v[i]<<' '; end; h.close(); for i:=1 to 10 do write(g,v[i],' '); } close(g); end.

Subiectul nr.13
Se citete de la tastatur un ir de 10 numere ntregi mai mici dect 100. a) S se creeze fiierul text date.in care s conin pe o linie cele 10 valori, separate prin spaiu; b) S se scrie un subprogram care s returneze suma cifrelor impare ale numerelor din fiierul date.in; c) S se scrie un subprogram care s determine cel mai mare numr palindrom din fiierul date.in (numr palindrom este un ir de cel puin dou cifre care citit de la dreapta la stnga este identic cu numrul citit de la stnga la dreapta); d) Scriei n fiierul text date.out irul dat, ordonat cresctor.

Exemplu:

Date de intrare: 7 23 4 17 12 33 5 99 8 9 Date de ieire: a) Fiierul text date.in conine pe o linie: 7 23 4 17 12 33 5 99 8 9 b) Suma cifrelor impare ale numerelor din fiierul date.in: 57 c) Cel mai mare numr palindrom din fiierul date.in este: 99 d) Fiierul text date.out conine pe o linie: 4 5 7 8 9 12 17 33 34 99

Rezolvare: datele se citesc in programul principal si se depun in fisierul date.in ; din fisierul date.in se preiau si se depun in vectorul v ; suma cifrelor impare ale numerelor din fisier se calculeaza in subprogramul suma care intoarce in programul principal rezultatul ;acesta se afiseaza pe monitor ; calculul celui mai mare palindrom se face in subprogramul maxpalin si rezultatul este transmis programului principal unde se afiseaza pe monitor ; tot in programul principal se face si sortarea vectorului v, crescator, si apoi se memoreaza in fisierul date.out.
Varianta PASCAL type vect=array[1..10] of integer; var f,g:text;v:vect;i,l,r,a:integer; function suma (a:vect;k:integer):integer; var j,s,nr:integer; begin s:=0; Varianta C #include <fstream.h> #include <stdlib.h> int i,v[10],l,r,a; fstream f("date.in",ios::out); fstream g("date.in",ios::in); fstream h("date.out",ios::out); int suma(int a[10],int k) { nt j,s=0,nr;

for j:=1 to k do begin nr:=a[j]; while nr<>0 do

begin if (nr mod 10) mod 2<>0 then s:=s+nr mod 10; nr:=nr div 10; end; end; suma:=s; } end; return s;} function maxpalin int maxpalin(int a[10],int k) (a:vect;k:integer):integer; { var j,nr,maxp,p:integer; int j,nr,maxp=0,p; begin for (j=1;j<=k;j++) maxp:=0; { for j:=1 to k do p=0; begin if (a[j]>9){ p:=0; nr=a[j]; if a[j]>9 then begin while (nr!=0) nr:=a[j]; { while nr<>0 do p=p*10+nr%10; begin p:=p*10 + nr mod 10; nr=nr/10; nr:=nr div 10; } end; if ((p==a[j])&& (maxp<a[j])) if(p=a[j])and(maxp<a[j]) then maxp=a[j]; maxp:=a[j]; } end; } end; return maxp; maxpalin:=maxp; } end; void main()

for (j=1;j<=k;j++) { nr=a[j]; while (nr!=0) { if ((nr%10)%2!=0) s+=nr%10; nr/=10; }

begin { a) } assign (f,'date.in');rewrite(f); for i:=1 to 10 do begin read(a);write(f,a,' '); end; close(f);reset(f); { b) } for i:=1 to 10 do read(f,v[i]); close(f);writeln; writeln(' suma este ',suma(v,10)); { c) } writeln(' maxim palindrom in fisier ',maxpalin(v,10)); {d} for i:=1 to 9 do for r:=i+1 to 10 do if v[i]>v[r] then begin l:=v[i];v[i]:=v[r]; v[r]:=l;end; assign (g,'date.out');rewrite(g); for i:=1 to 10 do write(g,v[i],' '); close(g); end.

{ // a) for (i=1;i<=10;i++) {cin>>a; f<<a<<" ";} f.close(); // b) for (i=1;i<=10;i++) g>>v[i]; g.close(); cout<<endl<<" "<<suma(v,10); // c) cout<<endl<<" "<<maxpalin(v,10); // d) cout<<endl; for(i=1;i<=9;i++) { for (r=i+1;r<=10;r++) if (v[i]>v[r]){ l=v[i];v[i]=v[r]; v[r]=l;} } for (i=1;i<=10;i++) h<<v[i]<<" "; h.close();}

Subiectul Nr.16 S se realizeze un program care s raspund urmtoarelor solicitri. S se creeze fiierul text date.in care s conin un ir de 10 numere ntregi aleatoare mai mici dect 100. Cerine :

a) S returneze cte trei divizori; b) S determine cel date.in;

se scrie un subprogram care s dintre elementele din fiierul date.in au se scrie un subprogram care s mai mare numr neprim din fiierul

c) Scriei n fiierul text date.out irul de mai sus ordonat descresctor.


Am folosit subprogramele: - CREARE: creaz un fiier cu structura cerut de date - AFIARE: citete datele din fiierul de intrare i afieaz pe ecran datele citite din fiier - NR_A: citete datele din fiierul de intrare i calculeaz numrul de elemente din fiierul de intrare care au exact 3 divizori, numr pe care l scrie pe ecran; - MAXIM: citete datele din fiierul de intrare, afl cel mai mare numr neprim dintre datele citite i il returneaz pentru programul principal; dac nu exist numere neprime, atunci se returneaz o valoare negativ; - SORTARE: citete datele din fiierul de intrare i le sorteaz, dup care le scrie n fiierul de ieire. Varianta PASCAL Varianta C/C++ uses crt; #include <iostream.h> var a:array[1..20] of integer; #include <conio.h> f,g:text; #include <math.h> #include <stdlib.h> procedure creare; #include <fstream.h> var i:integer; int a[20]; begin assign(f,'date.in'); void creare() rewrite(f); randomize; { for i:=1 to 10 do int i; write(f,random(100),' '); ofstream f("date.in"); close(f); randomize(); end; for (i=1; i<=10; i++) f<<random(100)<<" ";

procedure afisare; var i:integer; begin reset(f); for i:=1 to 10 do begin read(f,a[i]); write(a[i],' '); end; writeln; end;

f.close(); } void afisare() { int i; ifstream f("date.in"); for (i=1; i<=10; i++) { f>>a[i]; cout<<a[i]<<" "; } cout<<endl; f.close(); } function nr_a:integer; int nr_a() var nr,d,i,x:integer; { prim:boolean; int nr,d,i,x,prim; begin ifstream f("date.in"); reset(f); for (i=1; i<=10; i++) for i:=1 to 10 do read(f,a[i]); f>>a[i]; close(f); f.close(); nr:=0; nr=0; for i:=1 to 10 do for (i=1; i<=10; i++) begin { x:=trunc(sqrt(a[i])); x=floor(sqrt(a[i])); if x*x=a[i] { daca a[i] este if (x*x==a[i]) un patrat prefect } { then prim=1; begin { vad daca a[i] este for (d=2; d<=floor patratul unui numar (sqrt(x)); d++) prim } if (x % d == 0) prim:=true; { prim=0; break; } for d:=2 to trunc(sqrt(x)) if (x==0 || x==1) prim=0; do if (prim) if x mod d = 0 nr++; then begin prim:=false; } break; end; } if (x=0) or (x=1) f.close(); then prim:=false; return nr;

if prim then nr:=nr+1; end; end; nr_a:=nr; end; function maxim:integer; var max,i,d,x:integer; prim:boolean; begin reset(f); for i:=1 to 10 do read(f,a[i]); close(f); max:=-maxint; for i:=1 to 10 do begin prim:=true; for d:=2 to trunc(sqrt(a[i])) do if a[i] mod d = 0 then begin prim:=false; break; end; if (a[i]=0) or (a[i]=1) then prim:=false; if not prim then if a[i]>max then max:=a[i]; end; maxim:=max; end; procedure sortare; var i,j,x:integer; begin assign(g,'date.out'); rewrite(g); reset(f);

} int maxim() { int max,i,d,x,prim; ifstream f("date.in"); for (i=1; i<=10; i++) f>>a[i]; f.close(); max=-32768; for (i=1; i<=10; i++) { prim=1; for (d=2; d<=floor(sqrt(a[i])); d++) if (a[i] % 2 == 0) { prim=0; break; } if (a[i]==0 || a[i]==1) prim=0; if (!prim) if (a[i]>max) max=a[i]; } f.close(); return max; } void sortare() { int i,j,x; ofstream g("date.out"); ifstream f("date.in"); for (i=1; i<=10; i++) f>>a[i]; for (i=1; i<=9; i++) for (j=i+1; j<=10; j++) if (a[i]>a[j])

for i:=1 to 10 do read(f,a[i]); close(f); for i:=1 to 9 do for j:=i+1 to 10 do if a[i]>a[j] then begin x:=a[i]; a[i]:=a[j]; a[j]:=x; end; for i:=1 to 10 do write(g,a[i],''); close(g); end; begin clrscr; creare; write('Sirul generat: ');afisare; writeln('a) Sirul are ',nr_a,' elemente cu exact 3 div.); if maxim>=0 then writeln(b),maxim) else writeln('b) Nu sunt numere neprime in sirul generat'); sortare; end.

{ x=a[i]; a[i]=a[j]; a[j]=x; } for (i=1; i<=10; i++) g<<a[i]<< "; f.close(); g.close(); } void main() { clrscr(); creare(); cout<<"Sirul generat: "; afisare(); cout<<"a) Sirul are "<<nr_a() <<" elemente cu exact 3 divizori"<<endl; if (maxim()>=0) cout<<"b) <<maxim()<<endl; else cout<<"b) Nu sunt numere neprime in sirul generat"<<endl; sortare(); }

Subiectul Nr.17 S se realizeze un program care s raspund urmtoarelor solicitri. S se creeze fiierul text date.in care s conina un ir de 10 numere ntregi aleatoare mai mici dect 100. Cerine :

a) S se scrie un subprogram care s returneze elementele din fiierul date.in care sunt divizibile cu o valoare x citit de la tastatur; b) S se scrie un subprogram care s insereze ntre ultimul i penultimul element al irului din fiierul date.in media aritmetic a lor; c) Scriei in fiierul text date.out irul de mai sus ordonat descresctor. Observaii - datele cerute la cerina a) au fost afiate pe ecran; - la punctul b), media aritmetic poate iei din Z i de aceea, am lucrat cu un vector de numere reale Am folosit subprogramele: - CREARE: creaz structura cerut de date - AFIARE: citete datele din fiierul de intrare i le afieaz pe ecran - DIVIZ: citete datele din fiierul de intrare, apoi citete o valoare x i calculeaz numrul de elemente din irul de intrare care se divid cu x - INSERARE: citete datele din fiierul de intrare i realizeaz inserarea cerut - SORTARE: citete datele din fiierul de intrare i le sorteaz, dup care le scrie n fiierul de ieire uses crt; var a:array[1..20] of integer; f,g:text; procedure creare; var i:integer; begin assign(f,'date.in'); rewrite(f); randomize; for i:=1 to 10 do #include <iostream.h> #include <conio.h> #include <math.h> #include <stdlib.h> #include <fstream.h> int a[20]; void creare() { int i;

write(f,random(100),' '); close(f); end; procedure afisare; var i:integer; begin reset(f); for i:=1 to 10 do begin read(f,a[i]); write(a[i],' '); end; writeln; end; procedure inserare; var b:array[1..11] of real; i:integer; begin reset(f); for i:=1 to 10 do read(f,a[i]); for i:=1 to 9 do b[i]:=a[i]; b[11]:=a[10]; b[10]:=(a[9]+a[10])/2; for i:=1 to 11 do write(b[i]:0:1,' '); writeln; end; procedure diviz; var i,k,x:integer; begin reset(f); k:=0; for i:=1 to 10 do

ofstream f("date.in"); randomize(); for (i=1; i<=10; i++) f<<random(100)<<" "; f.close(); } void afisare() { int i; ifstream f("date.in"); for (i=1; i<=10; i++) { f>>a[i]; cout<<a[i]<<" "; } cout<<endl; f.close(); } void inserare() { int i; float b[12]; ifstream f("date.in"); for (i=1; i<=10; i++) f>>a[i]; f.close(); for (i=1; i<=9; i++) b[i]=a[i]; b[10]=(a[9]+a[10])/2.0; b[11]=a[10]; cout<<"b) "; for(i=1; i<=11; i++) cout<<b[i]<<" "; cout<<endl; } void diviz() { int i,k=0,x; ifstream f("date.in"); for (i=1; i<=10; i++) f>>a[i]; f.close();

read(f,a[i]); close(f); write(a) x: ); readln(x); for i:=1 to 10 do if a[i] mod x = 0 then begin k:=k+1; write(a[i],' '); end; if k=0 then write('Nu sunt asemenea numere in sir'); writeln; end; procedure sortare; var i,j,x:integer; begin assign(g,'date.out'); rewrite(g); reset(f); for i:=1 to 10 do read(f,a[i]); for i:=1 to 9 do for j:=i+1 to 10 do if a[i]<a[j] then begin x:=a[i]; a[i]:=a[j]; a[j]:=x; end; for i:=1 to 10 do write(g,a[i],' '); end; begin clrscr; creare; assign(f,'date.in'); write('Sirul generat: ');

cout<<"a) x: "; cin>>x; for (i=1; i<=10; i++) if (a[i] % x == 0) { k++; cout<<a[i]<<" "; } if (k==0) cout<<"Nu sunt asemenea numere in sir"; cout<<endl; } void sortare() { int i,j,x; ofstream g("date.out"); ifstream f("date.in"); for (i=1; i<=10; i++) f>>a[i]; for (i=1; i<=9; i++) for (j=i+1; j<=10; j++) if (a[i]<a[j]) { x=a[i]; a[i]=a[j]; a[j]=x; } for (i=1; i<=10; i++) g<<a[i]<<" "; f.close(); g.close(); } void main() { clrscr(); creare(); cout<<"Sirul generat: "; afisare(); diviz(); inserare(); sortare(); }

afisare; diviz; inserare; sortare; close(f); close(g); end.

Subiectul Nr.18 S se realizeze un program care s raspund urmtoarelor solicitri. S se creeze fiierul text date.in care s conin un ir de 10 numere ntregi aleatoare mai mici dect 100. Cerine: a) S se scrie un subprogram care s returneze cel mai mare divizor comun al elementelor din fiierul date.in; b) S se scrie un subprogram care s insereze ntre primul i al doilea element al irului din fiierul date.in o valoare x citit de la tastatur; c) Scriei n fiierul text date.out irul de mai sus ordonat descresctor. Am folosit subprogramele: - CREARE: creaz structura cerut de date - AFIARE: citete datele de intrare din fiierul de intrare i le afieaz pe ecran - CMMDC: citete datele din fiierul de intrare i calculeaz cmmdc-ul elementelor din fiier (folosind algoritmul lui Euclid) - INSERARE: citete datele din fiierul de intrare i realizeaz inserarea cerut; - SORTARE: citete datele din fiierul de intrare i le sorteaz, dup care le scrie n fisierul de ieire uses crt; #include <iostream.h>

var a:array[1..20] of integer; f,g:text; procedure creare; var i:integer; begin assign(f,'date.in'); rewrite(f); randomize; for i:=1 to 10 do write(f,random(100),' '); close(f); end; procedure afisare; var i:integer; begin reset(f); for i:=1 to 10 do begin read(f,a[i]); write(a[i],' '); end; writeln; end; function cmmdc:integer; var dc,i,x,y,r:integer; begin reset(f); for i:=1 to 10 do read(f,a[i]); dc:=a[1]; for i:=2 to 10 do begin x:=a[i]; y:=dc; while x mod y <> 0 do begin r:=x mod y; x:=y; y:=r; end;

#include <conio.h> #include <stdlib.h> #include <fstream.h> int a[20]; void creare() { int i; ofstream f("date.in"); randomize(); for (i=1; i<=10; i++) f<<random(100)<<" "; f.close(); } void afisare() { int i; ifstream f("date.in"); for (i=1; i<=10; i++) { f>>a[i]; cout<<a[i]<<" "; } cout<<endl; f.close(); } int cmmdc() { int dc,i,x,y,r; ifstream f("date.in"); for (i=1; i<=10; i++) f>>a[i]; f.close(); dc=a[1]; for (i=2; i<=10; i++) { x=a[i]; y=dc; while (x % y ) { r=x %y;

dc:=y; end; cmmdc:=dc; end; procedure inserare; var x,i:integer; b:array[1..11] of integer; begin reset(f); for i:=1 to 10 do read(f,b[i]); write('x: '); readln(x); for i:=10 downto 2 do b[i+1]:=b[i]; b[2]:=x; write('b) '); for i:=1 to 11 do write(b[i],' '); writeln; end; procedure sortare; var i,j,x:integer; begin assign(g,'date.out'); rewrite(g); reset(f); for i:=1 to 10 do read(f,a[i]); close(f); for i:=1 to 9 do for j:=i+1 to 10 do if a[i]<a[j] then begin x:=a[i]; a[i]:=a[j]; a[j]:=x;

x=y; =r; } dc=y; } return dc; } void inserare() { int i; float b[12]; ifstream f("date.in"); for (i=1; i<=10; i++) f>>a[i]; f.close(); b[1]=a[1]; b[2]=(a[1]+a[2])/2.0; for (i=2; i<=10; i++) b[i+1]=a[i]; cout<<"b) "; for(i=1; i<=11; i++) cout<<b[i]<<" "; cout<<endl; } void sortare() { int i,j,x; ofstream g("date.out"); ifstream f("date.in"); for (i=1; i<=10; i++) f>>a[i]; f.close(); for (i=1; i<=9; i++) for (j=i+1; j<=10; j++) if (a[i]<a[j]) { x=a[i]; a[i]=a[j]; a[j]=x; }

end; for i:=1 to 10 do write(g,a[i],' '); close(g); end; begin clrscr; creare; assign(f,'date.in'); write('Sirul generat: '); afisare; writeln('a) Cmmdc: ',cmmdc); inserare; sortare; close(f); close(g); end.

for (i=1; i<=10; i++) g<<a[i]<<" "; g.close(); } void main() { clrscr(); creare(); cout<<"Sirul generat: "; afisare(); cout<<"a) Cmmdc: "<<cmmdc()<<endl; inserare(); sortare(); }

Subiectul Nr.19 S se realizeze un program care s raspund urmtoarelor solicitri. S se creeze fiierul text date.in care s conina un ir de 10 numere ntregi aleatoare mai mici dect 100. Cerine a) S se scrie un subprogram care s returneze cte dintre elementele din fiierul date.in sunt prime cu o valoare x citit de la tastatur; b) S se scrie un subprogram care s calculeze media aritmetic a numerelor din ir i s o insereze la jumtatea irului; d) Scriei n fiierul text date.out irul de mai sus ordonat descresctor.

Observaii - pentru cerinta a) se lucreaza cu un vector de numere reale; Am folosit subprogramele: - CREARE: creaz structura cerut de date - AFIARE: citete datele de intrare din fiierul de intrare i afieaz pe ecran datele citite din fiier - PRIME: citete datele din fiierul de intrare i returneaz numrul de elemente din irul de intrare i care sunt prime cu valoarea x citit de la tastatur, adic (a[i],x)=1; - INSERARE: citete datele din fiierul de intrare i realizeaz inserarea dorit (pe poziia 6) ntr-un vector de numere reale; - SORTARE: citete datele din fiierul de intrare i le sorteaz, dup care le scrie n fiierul de ieire uses crt; var a:array[1..20] of integer; f,g:text; x,nr:integer; procedure creare; var i:integer; begin assign(f,'date.in'); rewrite(f); randomize; for i:=1 to 10 do write(f,random(100),' '); close(f); end; procedure afisare; var i:integer; begin reset(f); #include <iostream.h> #include <conio.h> #include <stdlib.h> #include <fstream.h> int a[200],x,nr=0; void creare() { int i; ofstream f("date.in"); randomize(); for (i=1; i<=10; i++) f<<random(100)<<" "; f.close(); } void afisare() { int i; ifstream f("date.in"); for (i=1; i<=10; i++)

for i:=1 to 10 do begin read(f,a[i]); write(a[i],' '); end; writeln; end; procedure prime; var i,p,q,r:integer; begin nr:=0; reset(f); for i:=1 to 10 do read(f,a[i]); close(f); write('x: '); readln(x); for i:=1 to 10 do begin p:=a[i]; q:=x; while p mod q <> 0 do begin r:=p mod q; p:=q; q:=r; end; if q=1 then nr:=nr+1; end; end; procedure inserare; var x,i:integer; b:array[1..11] of real; s:real; begin reset(f); s:=0; for i:=1 to 10 do begin }

{ f>>a[i]; cout<<a[i]<<" "; } cout<<endl; f.close(); void prime() { int i,p,q,r; ifstream f("date.in"); for (i=1; i<=10; i++) f>>a[i]; f.close(); cout<<"Valoarea x: "; cin>>x; for (i=1; i<=10; i++) { p=x; q=a[i]; while (p%q) { r=p%q; p=q; q=r; } if (q==1) nr++; } } void inserare() { int i,s=0; float b[12]; ifstream f("date.in"); for (i=1; i<=10; i++) { f>>b[i]; s=s+b[i]; } f.close();

read(f,b[i]); s:=s+b[i]; end; close(f); for i:=10 downto 6 do b[i+1]:=b[i]; b[6]:=s/10; write('b) '); for i:=1 to 11 do write(b[i]:0:2,' '); writeln; end; procedure sortare; var i,j:integer; begin assign(g,'date.out'); rewrite(g); reset(f); for i:=1 to 10 do read(f,a[i]); close(f); for i:=1 to 9 do for j:=i+1 to 10 do if a[i]<a[j] then begin x:=a[i]; a[i]:=a[j]; a[j]:=x; end; for i:=1 to 10 do write(g,a[i],' '); close(g); end; begin clrscr; creare; assign(f,'date.in'); write('Sirul generat: '); afisare; prime;

for (i=10; i>=6; i--) b[i+1]=b[i]; b[6]=s/10.0; cout<<"b) "; for(i=1; i<=11; i++) cout<<b[i]<<" "; cout<<endl; } void sortare() { int i,j; ofstream g("date.out"); ifstream f("date.in"); for (i=1; i<=10; i++) f>>a[i]; f.close(); for (i=1; i<=9; i++) for (j=i+1; j<=10; j++) if (a[i]<a[j]) { x=a[i]; a[i]=a[j]; a[j]=x; } for (i=1; i<=10; i++) g<<a[i]<<" "; g.close(); } void main() { clrscr(); creare(); cout<<"Sirul generat: "; afisare(); prime(); cout<<"a) Nr elem prime cu "<<x<<": "<<nr<<endl; inserare();

writeln('a) Nr de elemente prime cu ',x,': ',nr); inserare; sortare; end.

sortare(); }

Subiectul Nr.20 S se realizeze un program care s raspund urmtoarelor solicitri. S se creeze fiierul text date.in care s conin un ir de 10 numere ntregi aleatoare mai mici dect 100. Cerine a) S se scrie un subprogram care s determine elementul minim i maxim din fiierul date.in i poziiile pe care le ocup n irul numerelor date; b) S se scrie un subprogram care s determine cte dintre elementele irului cuprinse ntrun interval citit de la tastatur sunt numere pare; c) Scriei n fiierul text date.out irul de mai sus ordonat cresctor. Am folosit subprogramele: - CREARE: creaz structura cerut de date - AFIARE: citete datele din fiierul de intrare i le afieaz pe ecran - MIN_MAX: citete datele din fiierul de intrare i afieaz rezultatele de la cerina a) - INTERVAL: citete datele din fiierul de intrare i (de la tastatur) limitele unui interval; apoi va calcula i va afia cte dintre elementele din fiierul de intrare sunt pare i n intervalul citit; - SORTARE: citete datele din fiierul de intrare i le sorteaz, dup care le scrie n fiierul de ieire.

uses crt; var a:array[1..20] of integer; f,g:text; procedure creare; var i:integer; begin assign(f,'date.in'); rewrite(f); randomize; for i:=1 to 10 do write(f,random(100),' '); close(f); end; procedure afisare; var i:integer; begin reset(f); for i:=1 to 10 do begin read(f,a[i]); write(a[i],' '); end; writeln; end; procedure min_max; var min,max,i:integer; begin reset(f); for i:=1 to 10 do read(f,a[i]); min:=a[1]; max:=a[1]; for i:=2 to 10 do if a[i]<min

#include <iostream.h> #include <conio.h> #include <stdlib.h> #include <fstream.h> int a[200]; void creare() { int i; ofstream f("date.in"); randomize(); for (i=1; i<=10; i++) f<<random(100)<<" "; f.close(); } void afisare() { int i; ifstream f("date.in"); for (i=1; i<=10; i++) { f>>a[i]; cout<<a[i]<<" "; } cout<<endl; f.close(); } void min_max() { int min,max,i; ifstream f("date.in"); for (i=1; i<=10; i++) f>>a[i]; f.close(); min=a[1]; max=a[1]; for (i=2; i<=10; i++) if (a[i]<min) min=a[i]; else if (a[i]>max)

then min:=a[i] else if a[i]>max then max:=a[i]; write('a) Maximul din sir:',max ,'; el se afla pe pozitiile: '); for i:=1 to 10 do if a[i]=max then write(i,' '); writeln; write('a) Minimul din sir: ',min ,'; el se afla pe pozitiile: '); for i:=1 to 10 do if a[i]=min then write(i,' '); writeln; end;

max=a[i]; cout<<"a) Maximul din sir: "<< max<<"; el se afla pe pozitiile: "; for (i=1; i<=10; i++) if (a[i]==max) cout<<i<<" "; cout<<endl; cout<<" Minimul din sir:"<<min <<"; el se afla pe pozitiile: "; for (i=1; i<=10; i++) if (a[i]==min) cout<<i<<" ";; cout<<endl; }

void interval() { procedure interval; int i,x,y,n=0; var i,x,y,n:integer; ifstream f("date.in"); begin for (i=1; i<=10; i++) f>>a[i]; reset(f); f.close(); for i:=1 to 10 do read(f,a[i]); cout<<"b) Lim stanga: "; close(f); cin>>x; n:=0; cout<<" Lim dreapta: "; write('Lim stanga: '); cin>>y; readln(x); for (i=1; i<=10; i++) write('Lim dreapta: '); if (a[i]>=x && a[i]<=y && readln(y); a[i] % 2 == 0) for i:=1 to 10 do n++; if (a[i]>=x) and (a[i]<=y) cout<<"Nr de elem pare din [ and (a[i] mod 2 = 0) <<x<<","<<y<<"]: <<n<<endl; then n:=n+1; } writeln('b) Nr de elem pare din [',x,',',y,']: ',n); void sortare() end; { procedure sortare; int i,j;

var i,j,x:integer; begin assign(g,'date.out'); rewrite(g); reset(f); for i:=1 to 10 do read(f,a[i]); close(f); for i:=1 to 9 do for j:=i+1 to 10 do if a[i]>a[j] then begin x:=a[i]; a[i]:=a[j]; a[j]:=x; end; for i:=1 to 10 do write(g,a[i],' '); close(g); end; begin clrscr; creare; assign(f,'date.in'); write('Sirul generat: '); afisare; min_max; interval; sortare; end.

ofstream g("date.out"); ifstream f("date.in"); for (i=1; i<=10; i++) f>>a[i]; f.close(); for (i=1; i<=9; i++) for (j=i+1; j<=10; j++) if (a[i]>a[j]) { x=a[i]; a[i]=a[j]; a[j]=x; } for (i=1; i<=10; i++) g<<a[i]<<" "; g.close(); } void main() { clrscr(); creare(); cout<<"Sirul generat: "; afisare(); min_max(); interval(); sortare(); }

Subiectul Nr.21

S se realizeze un program care s raspund urmtoarelor solicitri. Sa se creeze fiierul text date.in care s conin un ir de 10 numere ntregi aleatoare mai mici dect 100. Cerine a) S se scrie un subprogram care s returneze cel mai mic multiplu comun dintre elementele din fiierul date.in; b) S se scrie un subprogram care s insereze ntre ultimul i penultimul element al irului din fiierul date.in media aritmetic a lor; c) Scriei n fiierul text date.out irul de mai sus ordonat descresctor. Observaii - n fiierul de intrare am generat valori nenule i mici deoarece la cerina a) avem de calculat cmmmc - pentru cerina b) se lucreaz cu un vector de numere reale Am folosit subprogramele: - CREARE: acesta creaz structura cerut de date - AFIARE: citete datele din fiierul de intrare i le afieaz pe ecran - CMMMC: citete datele din fiierul de intrare i afieaz cmmmc al elementelor citite din fiier, dupa formula: [x; y]=a*b / (a; b), iar (x; y) se afl cu algoritmul lui Euclid; - INSERARE: citete datele din fiierul de intrare i realizeaz inserarea cerut - SORTARE: citete datele din fiierul de intrare i le sorteaz, dup care le scrie n fiierul de ieire uses crt; var a:array[1..20] of integer; f,g:text; procedure creare; var i:integer; begin assign(f,'date.in'); #include <iostream.h> #include <conio.h> #include <stdlib.h> #include <fstream.h> int a[200]; void creare() {

rewrite(f); randomize; for i:=1 to 10 do write(f,1+random(10),' '); close(f); end; } procedure afisare; var i:integer; begin reset(f); for i:=1 to 10 do begin read(f,a[i]); write(a[i],' '); end; writeln; clodse(f); end; procedure cmmmc:longint; var mc,i,x,y,r:integer; begin reset(f); for i:=1 to 10 do read(f,a[i]); close(f); mc:=a[1]; for i:=2 to 10 do begin x:=a[i]; y:=mc; while x mod y <> 0 do begin r:=x mod y; x:=y; y:=r;

int i; ofstream f("date.in"); randomize(); for (i=1; i<=10; i++) f<<1+random(10)<<" "; f.close(); void afisare() { int i; ifstream f("date.in"); for (i=1; i<=10; i++) { f>>a[i]; cout<<a[i]<<" "; } cout<<endl; f.close(); } void cmmmc() { long mc,i,x,y,r; ifstream f("date.in"); for (i=1; i<=10; i++) f>>a[i]; f.close(); mc=a[1]; for (i=2; i<=10; i++) { x=a[i]; y=mc; while (x % y) { r=x % y; x=y; y=r; } mc=a[i] / y * mc;

end; mc:=a[i] div y * mc; end; writeln(a) Cmmmc=,mc); end; procedure inserare; var b:array[1..11] of real; i:integer; begin reset(f); for i:=1 to 10 do read(f,a[i]); close(f); for i:=1 to 9 do b[i]:=a[i]; b[11]:=a[10]; b[10]:=(a[9]+a[10])/2; write('b) sirul dupa inserare: '); for i:=1 to 11 do write(b[i]:0:1,' '); writeln; end; procedure sortare; var i,j,x:integer; begin assign(g,'date.out'); rewrite(g); reset(f); for i:=1 to 10 do read(f,a[i]); close(f); for i:=1 to 9 do for j:=i+1 to 10 do if a[i]<a[j] then begin x:=a[i]; a[i]:=a[j]; a[j]:=x;

} cout<<a) Cmmmc=<<mc <<endl; } void inserare() { float b[12]; int i; ifstream f("date.in"); for(i=1; i<=10; i++) f>>a[i]; f.close(); for (i=1; i<=9; i++) b[i]=a[i]; b[11]=a[10]; b[10]=(a[9]+a[10])/2.0; cout<<"b) sirul dupa inserare: "; for (i=1; i<=11; i++) cout<<b[i]<<" "; cout<<endl; } void sortare() { int i,j,x; ofstream g("date.out"); ifstream f("date.in"); for (i=1; i<=10; i++) f>>a[i]; f.close(); for (i=1; i<=9; i++) for (j=i+1; j<=10; j++) if (a[i]<a[j]) { x=a[i]; a[i]=a[j]; a[j]=x; } for (i=1; i<=10; i++) g<<a[i]<<" "; g.close();

end; for i:=1 to 10 do write(g,a[i],' '); close(g); end; begin clrscr; creare; assign(f,'date.in'); write('Sirul generat: '); afisare; cmmmc; inserare; sortare; end.

} void main() { clrscr(); creare(); cout<<"Sirul generat: "; afisare(); cmmmc(); inserare(); sortare(); }

Subiectul Nr.22 S se realizeze un program care s raspund urmtoarelor solicitri. S se creeze fiierul text date.in care s conina o matrice cu numere ntregi cu 4 linii i 4 coloane. Cerine a) S se scrie un subprogram care s returneze elementul minim al matricei i numrul lui de apariii; b) S se scrie un subprogram care s determine numrul elementelor de tip palindrom de sub diagonala principal a matricei (numr palindrom este un ir de cel puin dou cifre care citit de la dreapta la stnga este identic cu numrul citit de la stnga la dreapta); c) Scriei n fiierul text date.out elementele de pe prima linie a matricei de mai sus ordonate cresctor.

Am folosit subprogramele: - CREARE: creaz structura cerut de date - AFIARE: citete datele din fiierul de intrare i le afiseaza pe ecran - MINIM: citete datele din fiierul de intrare, afl i afieaz minimul i poziiiile n care acesta apare n matrice; - PALINDROM: primete ca parametru numrul natural x; dac x este palindrom, atunci returneaz valoarea logic ADEVARAT, iar n caz contrar, valoarea logic FALS - NR_PALINDROM: citete datele din fiierul de intrare, calculeaz i returneaz n programul principal numrul de palindroame de sub diagonala principal; - SORTARE: citete datele din fiierul de intrare, depune prima linie a matricei ntr-un vector, pe care l sorteaz i l scrie n fiierul de ieire uses crt; var a:array[1..10,1..10] of integer; f,g:text; procedure creare; var i,j:integer; begin assign(f,'date.in'); rewrite(f); randomize; for i:=1 to 4 do for j:=1 to 4 do write(f,random(100),' '); close(f); end; procedure afisare; var i,j:integer; #include <iostream.h> #include <conio.h> #include <stdlib.h> #include <fstream.h> int a[10][10]; void creare() { int i,j; ofstream f("date.in"); randomize(); for (i=1; i<=4; i++) { for(j=1; j<=4; j++) f<<random(100)<<" "; f<<endl; } f.close();

begin reset(f); for i:=1 to 4 do begin for j:=1 to 4 do begin read(f,a[i,j]); write(a[i,j],' '); end; writeln; end; writeln; close(f); end; procedure minim; var m,i,j:integer; begin reset(f); for i:=1 to 4 do for j:=1 to 4 do read(f,a[i,j]); close(f); m:=a[1,1]; for i:=1 to 4 do for j:=1 to 4 do if a[i,j]<m then m:=a[i,j]; writeln('a) Minimul: ',m,'. Pozitiile in care apare el: '); for i:=1 to 4 do for j:=1 to 4 do if a[i,j]=m then write('(',i,',',j,') '); writeln; end; function

} void afisare() { int i,j; ifstream f("date.in"); for (i=1; i<=4; i++) { for (j=1; j<=4; j++) { f>>a[i][j]; cout<<a[i][j]<<" "; } cout<<endl; } cout<<endl; f.close(); } void minim() { int i,j,m; ifstream f("date.in"); for(i=1; i<=4; i++) for (j=1; j<=4; j++) f>>a[i][j]; f.close(); m=a[1][1]; for(i=1; i<=4; i++) for (j=1; j<=4; j++) if (a[i][j]<m) m=a[i][j]; cout<<a) Minimul: <<m<< . Poz in care apare el: <<endl; for(i=1; i<=4; i++) for (j=1; j<=4; j++) if(a[i][j]==m) cout<<(<<i<<,<<j<<) ; cout<<endl;

palindrom(x:integer):boolean ; var xr,z:integer; begin xr:=0; z:=x; while z<>0 do begin xr:=xr*10 + z mod 10; z:=z div 10; end; if x=xr then palindrom:=true else palindrom:=false; end; function nr_palind:integer; var i,j,nr:integer; begin reset(f); nr:=0; for i:=1 to 4 do for j:=1 to 4 do read(f,a[i,j]); close(f); for i:=1 to 4 do for j:=1 to 4 do if (i>j) and palindrom(a[i,j]) then nr:=nr+1; nr_palind:=nr; end; procedure sortare; var i,j,x:integer; v:array[1..4] of integer; begin assign(g,'date.out');

} int palindrom(int x) { int xr,z; xr=0; z=x; while (z) { xr=xr*10 + z % 10; z=z / 10; } if (x==xr) return 1; else return 0; } int nr_palind() { int i,j; ifstream f("date.in"); nr=0; for (i=1; i<=4; i++) for (j=1; j<=4; j++) f>>a[i][j]; f.close(); for (i=1; i<=4; i++) for (j=1; j<=4; j++) if (i>j && palindrom(a[i] [j]) && a[i][j]>9) nr++; return nr; } void sortare() {

rewrite(g); reset(f); for j:=1 to 4 do read(f,v[j]); close(f); for i:=1 to 3 do for j:=i+1 to 4 do if v[i]>v[j] then begin x:=v[i]; v[i]:=v[j]; v[j]:=x; end; for i:=1 to 4 do write(g,v[i],' '); close(g); end; begin clrscr; creare; assign(f,'date.in'); writeln('Matricea generata: '); afisare; minim; write('b) Nr de palindroame de sub diag princ: ',nr_palind); sortare; end.

int i,j,x,v[5]; ofstream g("date.out"); ifstream f("date.in"); for (j=1; j<=4; j++) f>>v[i]; f.close(); for (i=1; i<=3; i++) for (j=i+1; j<=4; j++) if (v[i]>v[j]) { x=v[i]; v[i]=v[j]; v[j]=x; } for (i=1; i<=4; i++) g<<v[i]<<" "; g.close(); } void main() {clrscr(); creare(); cout<<"Matricea generata:"<<endl; afisare(); minim(); cout<<"b) Nr de palindroame de sub diag princ: "<< nr_palind() <<endl; sortare(); }

Subiectul Nr.23 S se realizeze un program care s raspund urmtoarelor solicitri. S se creeze fiierul text date.in care s conina o matrice cu numere ntregi cu 4 linii i 4 coloane. Cerine

a)

S se scrie un subprogram care s returneze elementul maxim de sub diagonala secundar a matricei din fiierul date.in; b) S se scrie un subprogram care s determine cte dintre elementele matricei sunt numere perfecte; c) Scriei n fiierul text date.out elementele de pe coloana a doua ale matricei de mai sus ordonate cresctor. Am folosit subprogramele: - CREARE: creaz structura cerut de date - AFIARE: citete datele din fiierul de intrare i le afieaz pe ecran - MAXIM: citete datele din fiierul de intrare i afieaz maximul de sub diagonala secundar a matricei - NR_PERF: citete datele din fiierul de intrare i numr cte numere perfecte sunt n matrice; utilizeaz subprogramul: - PERFECT, care primete un parametru natural x i returneaz valoarea logic ADEVARAT sau FALS, dup cum x este sau nu un numr perfect; - SORTARE: citete datele din fiierul de intrare, selecteaz ntr-un vector coloana a doua din matrice, sorteaza vectorul i l scrie n fiierul de ieire uses crt; var a:array[1..10,1..10] of integer; f,g:text; procedure creare; var i,j:integer; begin assign(f,'date.in'); rewrite(f); randomize; #include <iostream.h> #include <conio.h> #include <stdlib.h> #include <fstream.h> int a[10][10]; void creare() { int i,j; ofstream f("date.in"); randomize();

for i:=1 to 4 do for j:=1 to 4 do write(f,1+random(10),' '); close(f); end; procedure afisare; var i,j:integer; begin reset(f); for i:=1 to 4 do for j:=1 to 4 do read(f,a[i,j]); close(f); for i:=1 to 4 do begin for j:=1 to 4 do write(a[i,j]:5); writeln; end; writeln; end; procedure maxim; var i,j.m:integer; begin reset(f); for i:=1 to 4 do for j:=1 to 4 do read(f,a[i,j]); close(f); m:=a[4,4]; for i:=1 to 4 do for j:=1 to 4 do if (a[i,j]>m) and (i+j >4+1) then m:=a[i,j];

for (i=1; i<=4; i++) { for(j=1; j<=4; j++) f<<1+random(10)<<" "; cout<<endl; } f.close(); } void afisare() { int i,j; ifstream f("date.in"); for (i=1; i<=4; i++) for (j=1; j<=4; j++) f>>a[i][j]; f.close(); for (i=1; i<=4; i++) { for (j=1; j<=4; j++) cout<<a[i][j]<<" "; cout<<endl; } cout<<endl; } void maxim() { int i,j,m; ifstream f("date.in"); for(i=1; i<=4; i++) for (j=1; j<=4; j++) f>>a[i][j]; f.close(); m=a[4][4]; for(i=1; i<=4; i++) for (j=1; j<=4; j++) if (a[i][j]>m && i+j>4+1)

writeln('a) Maximul de sub diag sec: ',m); end; function perfect(x:integer):boolean; var d,nd,s: integer; begin s:=0; for d:=1 to x div 2 do if x mod d = 0 then s:=s+d; if (s=x) and (x<>0) then perfect:=true else perfect:=false; end; function nr_perf:integer; var i,j:integer; begin reset(f); for i:=1 to 4 do for j:=1 to 4 do read(f,a[i,j]); close(f); nr:=0; for i:=1 to 4 do for j:=1 to 4 do if perfect(a[i,j]) then nr:=nr+1; nr_perf:=nr; end; procedure sortare; var i,j,x:integer; v:array[1..4] of integer;

m=a[i][j]; cout<<"a) Maximul de sub diag sec: "<<m<<endl; } int perfect(int x) { int d,nd,s=0; for (d=1; d<=x/2; d++) if (x % d == 0) s=s+d; if (s==x && x!=0) return 1; else return 0; } int nr_perf() { int i,j,nr; ifstream f("date.in"); nr=0; for (i=1; i<=4; i++) for (j=1; j<=4; j++) f>>a[i][j]; f.close(); for (i=1; i<=4; i++) for (j=1; j<=4; j++) if (perfect(a[i][j])) nr++; return nr; } void sortare() { int i,j,x,v[5]; ofstream g("date.out");

begin ifstream f("date.in"); assign(g,'date.out'); for (i=1; i<=4; i++) rewrite(g); reset(f); for(j=1; j<=4; j++) for i:=1 to 4 do f>>x; for j:=1 to 4 do f.close(); read(f,a[i,j]); for (i=1; i<=4; i++) close(f); v[i]=a[i][2]; for i:=1 to 4 do f.close(); v[i]:=a[i,2]; for (i=1; i<=3; i++) for i:=1 to 3 do for (j=i+1; j<=4; j++) for j:=i+1 to 4 do if (v[i]>v[j]) if v[i]>v[j] { x=v[i]; v[i]=v[j]; v[j]=x; } then begin for (i=1; i<=4; i++) g<<v[i]<<" x:=v[i]; v[i]:=v[j]; v[j]:=x; "; end; g.close(); for i:=1 to 4 do write(g,v[i],' '); } close(g); end; void main() { begin clrscr(); creare(); clrscr; creare; cout<<"Matricea generata: assign(f,'date.in'); "<<endl; writeln('Matricea generata: afisare(); '); maxim(); afisare; cout<<"b) Nr de numere maxim; perfecte din matrice: writeln('b) Nr de elem "<<nr_perf()<<endl; perfecte din sortare(); matrice:,nr_perf); } sortare; end. Subiectul Nr.24

S se realizeze un program care s raspund urmtoarelor solicitri. S se creeze fiierul text date.in care s conin o matrice cu numere ntregi cu 4 linii i 4 coloane. Cerine a) S se scrie un subprogram care s returneze suma elementelor pare de pe marginea exterioar a matricei; b) S se scrie un subprogram care s determine numrul elementelor matricei egale cu o valoare x dat de la tastatur; c) Scriei in fiierul text date.out elementele de pe linia a doua ale matricei de mai sus ordonate cresctor. Am folosit subprogramele: - CREARE: creaz structura cerut de date - AFIARE: citete datele de intrare din fiierul de intrare i afieaz pe ecran datele citite din fiier - SUMA: citete datele din fiierul de intrare, calculeaz i returneaz suma elementelor de pe marginile matricei; - NX: citete datele din fiierul de intrare i apoi o valoare x, dup care numr cte elemente egale cu x se gsesc n matrice, numr pe care l returneaz - SORTARE: citete datele din fiierul de intrare, depune elementele din linia a doua a matricei ntr-un vector pe care l sorteaz i l afieaz n fiierul de ieire. uses crt; var a:array[1..20,1..20] of integer; f,g:text; procedure creare; var i,j:integer; begin assign(f,'date.in'); rewrite(f); randomize; #include <iostream.h> #include <conio.h> #include <stdlib.h> #include <fstream.h> int a[10][10]; void creare() { int i,j; ofstream f("date.in");

for i:=1 to 4 do begin for j:=1 to 4 do write(f,random(100),' '); writelnf); end close(f); end; procedure afisare; var i,j:integer; begin reset(f); for i:=1 to 4 do for j:=1 to 4 do read(f,a[i,j]); closef); for i:=1 to 4 do begin for j:=1 to 4 do write(a[i,j]:5); writeln; end; writeln; end; function suma:integer; var s,i,j:integer; begin s:=0; reset(f); for i=1 to 4 do for j=1 to 4 do readf,a[i,j]); close(f); for i:=1 to 4 do if a[i,1] mod 2 = 0

randomize(); for (i=1; i<=4; i++) { for(j=1; j<=4; j++) f<<random(100)<<" "; f<<endl; } f.close(); } void afisare() { int i,j; ifstream f("date.in"); for (i=1; i<=4; i++) for (j=1; j<=4; j++) f>>a[i][j]; for i=1; i<=4; i++) { for j=1; j<=4; j++) cout<<a[i][j]<< ; cout<<endl; } cout<<endl; f.close(); } int suma() { int s=0,i,j; for(i=1; i<=4; i++) for(j=1; i<=4; j++) f>>a[i][j]; f.close(); for (i=1; i<=4; i++)

then s:=s+a[i,1]; for i:=1 to 4 do if a[i,4] mod 2 = 0 then s:=s+a[i,4]; for j:=2 to 3 do if a[1,j] mod 2 = 0 then s:=s+a[1,j]; for j:=2 to 3 do if a[4,j] mod 2 = 0 then s:=s+a[4,j]; suma:=s; end; } function nx:integer; var i,j,n,x:integer; begin reset(f); for i:=1 to 4 do for j:=1 to 4 do read(f,a[i,j]); close(f); write('Valoarea x: ');readln(x); n:=0; for i:=1 to 4 do for j:=1 to 4 do if a[i,j]=x then n:=n+1; nx:=n; end; procedure sortare; var i,j,x:integer; v:array[1..4] of integer; begin assign(g,'date.out'); rewrite(g); reset(f);

if (a[i][1] % 2 == 0) s=s+a[i][1]; for (i=1; i<=4; i++) if (a[i][4] % 2 == 0) s=s+a[i][4]; for (j=2; j<=3; j++) if (a[1][j] % 2 == 0) s=s+a[1][j]; for (j=2; j<=3; j++) if (a[4][j] % 2 == 0) s=s+a[4][j]; return s; int nx() { int i,j,n,x; ifstream f("date.in"); for (i=1; i<=4; i++) for (j=1; j<=4; j++) f>>a[i][j]; cout<<"Valoarea x: "; cin>>x; n=0; for (i=1; i<=4; i++) for (j=1; j<=4; j++) if (a[i][j]==x) n++; return n; } void sortare() { int i,j,x,v[5]; ofstream g("date.out"); ifstream f("date.in"); for (i=1; i<=4; i++)

for i:=1 to 4 do for j:=1 to 4 do read(f,a[i,j]); close(f); for j:=1 to 4 do v[j]:=a[2,j]; for i:=1 to 3 do for j:=i+1 to 4 do if v[i]>v[j] then begin x:=v[i]; v[i]:=v[j]; v[j]:=x; end; for i:=1 to 4 do write(g,v[i],' '); close(g); end; begin clrscr; creare; assign(f,'date.in'); writeln('Matricea generata: '); afisare; writeln('a) ',suma); writeln('b) ,nx); sortare; end.

for(j=1; j<=4; j++) f>>a[i][j]; f.close(); for (j=1; j<=4; j++) v[j]=a[2][j]; for (i=1; i<=3; i++) for (j=i+1; j<=4; j++) if (v[i]>v[j]) { x=v[i]; v[i]=v[j]; v[j]=x; } for (i=1; i<=4; i++) g<<v[i]<<" "; g.close(); } void main() { clrscr(); creare(); cout<<"Matricea generata: "<<endl; afisare(); cout<<"a) "<<suma()<<endl; cout<<"b) "<<nx()<<endl; sortare(); }

Subiectul Nr.25 S se realizeze un program care s raspund urmtoarelor solicitri. S se creeze fiierul text date.in care s conin o matrice cu numere ntregi cu 4 linii i 4 coloane. Cerine

a) S se scrie un subprogram care s returneze elementul maxim de pe diagonala principal a matricei din fiierul date.in; b) S se scrie un subprogram care s determine cte dintre elementele matricei sunt numere perfecte; c) Scriei n fiierul text date.out elementele de pe linia a doua ale matricei de mai sus ordonate cresctor. Am folosit subprogramele: - CREARE: creaz structura cerut de date - AFIARE: citete datele din fiierul de intrare i le afieaz pe ecran - MAXIM: citete datele din fiierul de intrare, afl maximul din diagonala principal a matricei, maxim pe care l returneaz; - NR_PERF: citete datele din fisierul de intrare i returneaz numrul de numere perfecte din matrice; pentru aceasta, el se folosete de subprogramul: - PERFECT, care primete parametrul natural x i returneaz ADEVARAT sau FALS, dup cum x este perfect sau nu - SORTARE: citete datele din fiierul de intrare, depune linia a doua a matricei ntr-un vector pe care l sorteaz, dupa care l scrie n fiierul de ieire. uses crt; var a:array[1..20,1..20] of integer; f,g:text; procedure creare; var i,j:integer; begin assign(f,'date.in'); rewrite(f); randomize; #include <iostream.h> #include <conio.h> #include <stdlib.h> #include <fstream.h> int a[10][10]; void creare() { int i,j; ofstream f("date.in"); randomize();

for i:=1 to 4 do begin for j:=1 to 4 do write(f,random(100),' '); writeln(f); end; close(f); end; procedure afisare; var i,j:integer; begin reset(f); for i:=1 to 4 do for j:=1 to 4 do read(f,a[i,j]); close(f); for i:=1 to 4 do begin for j:=1 to 4 do write(a[i,j]:5); writeln; end; writeln; end; function maxim:integer; var m,i,j:integer; begin reset(f); for i:=1 to 4 do for j:=1 to 4 do readf,a[i,j]); close(f); m:=a[1,1]; for i:=2 to 4 do

for (i=1; i<=4; i++) { for(j=1; j<=4; j++) f<<random(100)<<" "; f<<endl; } f.close(); } void afisare() { int i,j; ifstream f("date.in"); for (i=1; i<=4; i++) for (j=1; j<=4; j++) f>>a[i][j]; f.close(); for (i=1; i<=4; i++) { for j=1; j<=4; j++) cout<<a[i][j]<<" "; } cout<<endl; } cout<<endl; } int maxim() { int i,j,m; ifstream f("date.in"); for (i=1; i<=4; i++) for(j=1; j<=4; j++) f>>a[i][j]; f.close(); m=a[1][1]; for(i=2; i<=4; i++)

if a[i,i] > m then m:=a[i,i]; maxim:=m; end; function perfect(x:integer):boolean; var d,nd,s: integer; begin s:=0; for d:=1 to x div 2 do if x mod d = 0 then s:=s+d; if s=x then perfect:=true else perfect:=false; end; function nr_perf:integer; var nr,i,j:integer; begin reset(f); for i:=1 to 4 do for j:=1 to 4 do read(f,a[i,j]); close(f); nr:=0; for i:=1 to 4 do for j:=1 to 4 do if perfect(a[i,j]) then nr:=nr+1; nr_perf:=nr; end; procedure sortare; var i,j,x:integer; v:array[1..4] of integer;

if (a[i][i]>m) m=a[i][i]; return m; } int perfect(int x) { int d,nd,s=0; for (d=1; d<=x/2; d++) if (x % d == 0) s=s+d; if (s==x && x!=0) return 1; else return 0; } int nr_perf() { int i,j,nr; ifstream f("date.in"); nr=0; for (i=1; i<=4; i++) for (j=1; j<=4; j++) f>>a[i][j]; f.close(); for (i=1; i<=4; i++) for (j=1; j<=4; j++) if (perfect(a[i][j])) nr++; return nr; } void sortare() { int i,j,x,v[5]; ofstream g("date.out"); ifstream f("date.in");

begin assign(g,'date.out'); rewrite(g); reset(f); for i:=1 to 4 do for j:=1 to 4 do read(f,a[i,j]); close(f); for j:=1 to 4 do v[j]:=a[2,j]; for i:=1 to 3 do for j:=i+1 to 4 do if v[i]>v[j] then begin x:=v[i]; v[i]:=v[j]; v[j]:=x; end; for i:=1 to 4 do write(g,v[i],' '); end; begin clrscr; creare; assign(f,'date.in'); writeln('Matricea generata: '); afisare; writeln('a) ',maxim); writeln('b) ',nr_perf); sortare; end.

for (i=1; i<=4; i++) for(j=1; j<=4; j++) f>>a[i][j]; f.close(); for (j=1; j<=4; j++) v[j]=a[2][j]; for (i=1; i<=3; i++) for (j=i+1; j<=4; j++) if (v[i]>v[j]) { x=v[i]; v[i]=v[j]; v[j]=x; } for (i=1; i<=4; i++) g<<v[i]<<" "; g.close(); } void main() { clrscr(); creare(); cout<<"Matricea generata: "<<endl; afisare(); cout<<"a) "<<maxim()<<endl; cout<<"b) "<<nr_perf()<<endl; sortare(); }

CLASELE DE MATEMATICA-INFORMATIC NEINTENSIV Subiectul nr.1

Se citete de la tastatur un ir de 10 numere ntregi mai mici dect 100. e. S se creeze fiierul text date.in care s conin pe o linie cele 10 valori, separate prin spaiu. f. S se scrie un subprogram care s returneze elementul minim din fiierul date.in; g. S se scrie un subprogram care s creeze un tablou unidimensional cu elementele fiierului date.in i s se insereze ntre ultimul i penultimul element al tabloului media lor aritmetic; h. Scriei n fiierul text date.out irul nou obinut, ordonat cresctor.

Exemplu:
Date de intrare: 17 23 45 67 12 34 5 90 8 9 Date de ieire: a) Fiierul text date.in conine pe o linie: 17 23 45 67 12 34 5 90 8 9 b) Elementul minim este: 5 c) Tabloul unidimensional: 17 23 45 67 12 34 5 90 8 8.5 9 d) Fiierul text date.out conine pe o linie: 5 8.5 8 9 12 17 23 34 45 67 90 Rezolvare: in procedura minelem se determina minimul din vectorul a format cu cele 10 elemente citite de la tastatura; aceste elemente se depun in fisierul date.in; in procedura marit se determina elementul care se insereaza intre penultimul si ultimul element al vectorului a; in acest mod se creaza un nou vector b care se listeaza pe monitor; vectorul b este apoi sortat si se creaza cu noul vector sortat fisierul date.out.

Varianta PASCAL var g,f:text; i,ok:integer; a:array[1..10] of integer; b:array[1..11] of real;aux:real; function minelem:integer; var j,min:integer; begin min:=1000; for j:=1 to 10 do if a[j] < min then min:=a[j]; minelem:=min; end; procedure marit; var m,j:integer; begin m:=a[9]+a[10]; b[10]:=m/2.; for j:=1 to 9 do b[j]:=a[j]; b[11]:=a[10]; end; begin assign (f,'date.in ');rewrite(f); assign(g,'date.out');rewrite(g); { a) } for i:=1 to 10 do begin read(a[i]); write(f,a[i],' '); end; { b) } writeln(minelem);

Varianta C #include <fstream.h> #include <stdlib.h> int a[10]; float b[11]; int minelem() { int j,min; min=1000; for(j=1;j<=10;j++) if(a[j]<min) min=a[j]; return min; } void marit() { int m,j; m=a[9]+a[10]; b[10]=m/2.; for(j=1;j<=9;j++) b[j]=a[j]; b[11]=a[10]; } void main() { fstream f("date.in",ios::out); fstream g("date.out",ios::out); int i; // a) cout<<endl; for(i=1;i<=10;i++) cin>>a[i]; for(i=1;i<=10;i++) f<<a[i]<<" "; // b) cout<<minelem()<<endl;

ok:=1; { c) } marit; for i:=1 to 11 do write(b[i]:3:2,' '); { d) } while ok=1 do begin ok:=0; for i:=1 to 10 do if b[i]>b[i+1] then begin ok:=1;aux:=b[i]; b[i]:=b[i+1];b[i+1]:=aux; end; end; for i:=1 to 11 do write(g,b[i]:3:2,' '); close(f); close(g); end.

int ok=1,aux; // c) cout<<endl; marit(); for(i=1;i<=11;i++) cout<<b[i]<<" "; // d) while(ok==1) { ok=0; for(i=1;i<=10;i++) if(b[i]>b[i+1]) {ok=1; aux=b[i]; b[i]=b[i+1]; b[i+1]=aux;} } for(i=1;i<=11;i++) g<<b[i]<<" "; g.close(); f.close(); }

Subiectul nr.2
Se citete de la tastatur un ir de 10 numere ntregi mai mici dect 100. e. S se creeze fiierul text date.in care s conin pe o linie cele 10 valori, separate prin spaiu. f. S se scrie un subprogram care s returneze elementul maxim din fiierul date.in; g. S se scrie un subprogram care s determine numrul elementelor prime coninute de fiierul date.in;

h. Scriei n fiierul text date.out irul dat, ordonat


cresctor.

Exemplu:
Date de intrare: 7 23 4 17 12 34 5 90 8 9 Date de ieire: a) Fiierul text date.in conine pe o linie: 7 23 4 17 12 34 5 90 8 9 b) Elementul maxim este: 90 c) n fiier sunt 4 numere prime d) Fiierul text date.out conine pe o linie: 4 5 7 8 9 12 17 23 34 90

Rezolvare : subprogramul scrie creaza fisierul date.in in care sunt depuse cele 10 numere intregi citite de la tastatura ; se citesc elementele din fisierul date.in si se cauta elementul maxim in subprogramul maxim ; valoarea este returnata programului principal si afisata pe monitor ; se citesc numerele din fisierul date.in si se determina cate numere sunt prime ; acest lucru se realizeaza in subprogarmul nrprime ; numarul de numere prime este returnat programului principal si afisat pe monitor ; in programul principal se sorteaza cele 10 numere citite si se scriu in fisierul date.out.
Varianta PASCAL var a,ok,i,j,aux:integer; b:array[1..10] of integer; h:text; procedure scrie; var f:text; i:integer; Varianta C #include <fstream.h> #include <stdlib.h> int a,b[10]; void scrie() { ofstream f("date.in");

begin assign(f,'date.in'); rewrite(f); for i:=1 to 10 do begin read(a); write(f,a,' '); end; close(f); end; function maxim:integer; var g:text; max,i,a:integer; begin assign(g,'date.in'); reset(g); read(g,max);b[1]:=max; for i:=2 to 10 do begin read(g,a);b[i]:=a; if a>=max then max:=a; end; close(g); maxim:=max; end; function nrprime:integer; var k,i,j,nrdiv,nr:integer; ok,aux:integer;g:text; begin assign(g,'date.in');reset(g); nr:=0; for i:=1 to 10 do begin read(g,k); nrdiv:=0;

int i; for(i=1;i<=10;i++) { cin>>a; f<<a<<" "; } f.close(); } int maxim() { int max,i,a; ifstream g("date.in"); g>>max;b[1]=max; for(i=2;i<=10;i++) { g>>a; b[i]=a; if (a>max) max=a; } g.close(); return max; } int nrprime() {int k,i,j,nrdv,nr; ifstream g("date.in"); nr=0; for(i=1;i<=10;i++) {g>>k; nrdv=0; for(j=1;j<=k;j++) if (k%j==0)

for j:=1 to k do if k mod j = 0 then nrdiv:=nrdiv+1; if nrdiv=2 then nr:=nr+1; end; close(g); nrprime:=nr; end; begin assign(h,'date.out');rewrite(h); { a) } scrie; { b) } writeln('elementul maxim este ',maxim); { c) } writeln('in fisier sunt ', nrprime,' numere prime '); { d) } ok:=1; while ok=1 do begin ok:=0; for i:=1 to 10 do if b[i]>b[i+1] then begin ok:=1; aux:=b[i]; b[i]:=b[i+1]; b[i+1]:=aux; end; end; for i:=1 to 10 do write(h,b[i],' '); close(h); end.

nrdv=nrdv+1; if (nrdv==2) nr=nr+1; } g.close(); return nr; } void main() {ofstream h("date.out"); // a) scrie(); // b) cout<<endl<<maxim(); // c) cout<<endl<<nrprime(); // d) int ok=1,i,aux; while(ok==1) { ok=0; for(i=1;i<10;i++) if(b[i]>b[i+1]) { ok=1; aux=b[i]; b[i]=b[i+1]; b[i+1]=aux; } } for(i=1;i<=10;i++) h<<b[i]<<" "; h.close(); }

Subiectul nr.3
Se citete de la tastatur un ir de 10 numere ntregi mai mici dect 100. e) S se creeze fiierul text date.in care s conin pe o linie cele 10 valori, separate prin spaiu; f) S se scrie un subprogram care s returneze suma cifrelor elementelor pare din fiierul date.in; g) S se scrie un subprogram care s determine numrul elementelor ptrate perfecte din fiierul date.in; h) Scriei n fiierul text date.out irul dat, ordonat decresctor.

Exemplu:
Date de intrare : 37 23 4 77 12 34 5 90 18 19 Date de ieire : a) Fiierul text date.in conine pe o linie: 37 23 4 77 12 34 5 90 18 19 b) Suma cifrelor elementelor pare din fiierul date.in este: 32 c) ntre elementele din fiierul date.in este un ptrat perfect d) Fiierul text date.out conine pe o linie: 90 77 37 34 23 19 18 12 5 4

Rezolvare : cele 10 numere se citesc in programul principal si se depun in fisierul date.in ; in acelasi timp sunt depuse in vectorul a ; suma cifrelor elementelor pare din vectorul a se calculeaza in subprogramul maxim ,care returneaza rezultatul in programul principal unde se afiseaza pe monitor ; in subprogramul pp se calculeaza cate elemente din vectorul a sunt patrate perfecte, iar rezultatul se

returneaza programului principal unde se afiseza pe monitor ; in programul principal se ordoneaza vectorul a si se depune sortat in fisierul date.out.
Varianta C #include <fstream.h> #include <stdlib.h> int a[10]; int maxim() { int i,k,sum=0; for (i=1;i<=10;i++) if (a[i]%2==0) { k=a[i]; while (k!=0) { sum+=k%10; k/=10; } } return sum; } int pp() { int k,i,b,nr=0; for (i=1;i<=10;i++) { b=a[i]; for (k=1;k<b-1;k++)

Varianta PASCAL var f,g:text; a:array[1..10] of integer; i,ok,aux:integer; function maxim:integer; var i,k,sum:integer; begin sum:=0; for i:=1 to 10 do if a[i] mod 2 =0 then begin k:=a[i]; while k<>0 do begin sum:=sum+k mod 10; k:=k div 10; end; end; maxim:=sum; end; function pp:integer; var k,i,b,nr:integer; begin nr:=0; for i:=1 to 10 do begin b:=a[i]; for k:=1 to b-1 do

if k*k=b then inc(nr); end; pp:=nr; end; begin assign (f,'date.in');rewrite(f); assign (g,'date.out');rewrite(g); { a) } for i:=1 to 10 do read(a[i]); for i:=1 to 10 do write(f,a[i],' '); close(f); writeln; { b) } writeln(' suma cifrelor ', maxim); { c) } writeln(' numarul de patrate perfecte ',pp); { d) } ok:=1; while ok=1 do begin ok:=0; for i:=1 to 9 do if a[i]<a[i+1] then begin ok:=1;aux:=a[i]; a[i]:=a[i+1]; a[i+1]:=aux; end; end; for i:=1 to 10 do write(g,a[i],' '); close(g); end.

if ( k*k==b ) nr+=1; } return nr; } void main() { fstream f("date.in",ios::out); fstream g("date.out",ios::out); int i,ok=1,aux; // a) for(i=1;i<=10;i++) cin>>a[i]; for(i=1;i<=10;i++) f<<a[i]<<" "; // b) cout<<endl<<" suma cifrelor "<<maxim(); // c) cout<<endl<<" numarul de patrate perfecte "<<pp(); // d) while(ok==1) { ok=0; for(i=1;i<10;i++) if(a[i]<a[i+1]) {ok=1; aux=a[i]; a[i]=a[i+1]; a[i+1]=aux;} } for(i=1;i<=10;i++) g<<a[i]<<" "; f.close(); g.close(); }

Subiectul nr.4
Se citete de la tastatur un ir de 10 numere ntregi mai mici dect 100. e) S se creeze fiierul text date.in care s conin pe o linie cele 10 valori, separate prin spaiu; f) S se scrie un subprogram care s determine suma elementelor impare coninute de fiierul date.in; g) S se scrie un subprogram care s returneze cte elemente din fiierul date.in sunt numere de tip palindrom cu cel putin dou cifre (palindrom este un numr de cel puin dou cifre care citit de la dreapta la stnga este identic cu numrul citit de la stnga la dreapta); h) Scriei n fiierul text date.out irul dat, ordonat descresctor.

Exemplu:
Date de intrare: 37 23 4 77 12 34 5 90 18 19 Date de ieire: a) Fiierul text date.in conine pe o linie: 37 23 4 77 12 34 5 90 18 19 b) Suma elementelor impare coninute de fiierul date.in este:161 c) n fiier este un numar de tip palindrom cu cel putin dou cifre d) Fiierul text date.out conine pe o linie: 90 77 37 34 23 19 18 12 5 4

Rezolvare: in programul principal se citesc datele de la tastatura si se depun in fisierul date.in ; datele din fisierul date.in se citesc in programul principal si se depun in vectorul v ;

se calculeaza suma elementelor impare din vectorul v in subprogramul suma si se returneaza programului principal unde se afiseaza pe monitor ; in subprogramul palindrom se determina numarul de elemente palindrom existente in vectorul v si rezultatul se returneaza programului principal unde se afieaza pe monitor ; se sorteaza elementele vectorului v in programul principal si se memoreaza in fisierul date.out.
Varianta C #include <fstream.h> #include <stdlib.h> int i,n,v[10],l=10,r,a; fstream f("date.in",ios::out); fstream g("date.in",ios::in); fstream h("date.out",ios::out); int suma(int a[100],int k) { int j,s=0; for (j=1;j<=k;j++) if ((a[j]%2)!=0) s=s+a[j]; return s; } int palindrome (int a[100],int k) { int j,nr,c=0,p; for (j=1;j<=k;j++) { nr=0;p=0;

Varianta PASCAL type vect=array[1..10] of integer; var i,n,l,r,a:integer; v:vect; f,g:text; function suma (a:vect;k:integer):integer; var j,s:integer; begin s:=0; for j:=1 to k do if a[j] mod 2<>0 then s:=s+a[j]; suma:=s; end; function palindrom (a:vect;k:integer):integer; var j,nr,c,p:integer; begin c:=0; for j:=1 to k do begin nr:=0; p:=0;

if a[j]>9 then begin nr:=a[j]; while nr<>0 do begin p:=p*10 + nr mod 10; nr:=nr div 10; end; end; if p=a[j] then inc(c); end; palindrom:=c; end;

begin { a) } assign (f,'date.in');rewrite(f); for (i=1;i<=10;i++) for i:=1 to 10 do { begin cin>>a; read(a); f<<a<<" "; write(f,a,' '); } end; close(f); f.close(); reset(f); // b) { b) } for (i=1;i<=10;i++) for i:=1 to 10 do g>>v[i]; read(g,v[i]); g.close(); close(g); writeln; writeln(' suma este cout<<endl<<" "<<suma(v,l); ',suma(v,10)); { c) } // c) writeln(' numere palindrom in cout<<endl<<" fisier ',palindrom(v,10)); "<<palindrom(v,l); {d} // d)

if (a[j]>9) { nr=a[j]; while (nr!=0) { p=p*10+nr%10; nr=nr/10;} } if (p==a[j]) c++; } return c; } void main() { // a)

for i:=1 to 9 do for r:=i+1 to 10 do if v[i]<v[r] then begin l:=v[i]; v[i]:=v[r]; v[r]:=l; end; assign (g,'date.out');rewrite(g); for i:=1 to 10 do write(g,v[i],' '); close(g); end.

for (i=1;i<=9;i++) for (r=i+1;r<=10;r++) if (v[i]<v[r]) { l=v[i]; v[i]=v[r]; v[r]=l; } for (i=1;i<=10;i++) h<<v[i]<<' '; h.close(); }

Subiectul nr.5
Se citete de la tastatur un ir de 10 numere ntregi mai mici dect 100. e. S se creeze fiierul text date.in care s conin pe o linie cele 10 valori, separate prin spaiu; f. S se scrie un subprogram care s returneze suma elementelor pare de pe pozitiile impare din fiierul date.in; g. S se scrie un subprogram care s determine numrul elementelor prime coninute de fiierul date.in; h. Scriei n fiierul text date.out irul dat, ordonat cresctor.

Exemplu:
Date de intrare : 7 23 4 17 12 34 5 90 8 9 Date de ieire: a) Fiierul text date.in conine pe o linie: 7 23 4 17 12 34 5 90 8 9 b) Suma elementelor pare de pe pozitiile impare din fiierul date.in este: 24 c) n fiier sunt 4 numere prime

d) Fiierul text date.out conine pe o linie: 4 5 7 8 9 12 17 23 34 90

Rezolvare : in programul principal se citesc datele de la tastatura si se depun in fisierul date.in si in vectorul v ; suma elementelor pare de pe pozitii impare se calculeaza in subprogramul b si se afiseaza in programul principal pe monitor ; in subprogramul c se determina numarul de elemente prime si in programul principal se afieaza pe monitor ; in programul principal se sorteaza vectorul v si elementele sortate se depun in fisierul date.out.
Varianta PASCAL var v:array[1..12] of integer; f,g:text; i,j,aux:integer; function b:integer; var s,i:integer; j,aux:integer; begin s:=0;i:=1; while i<=10 do begin if v[i] mod 2 =0 then begin s:=s+v[i]; i:=i+2; end; b:=s; end; function c:integer; var i,j,ok,p:integer; begin p:=0; for i:=1 to 10 do Varianta C #include<fstream.h> #include <math.h> fstream f("date.in",ios::out); fstream g("date.out",ios::out); int v[12]; int b () { int s=0, i; for (i = 1;i<= 10;i+=2) if (v[i] % 2 == 0) s = s + v[i]; return s; } int c () { int i, j, ok = 1, p = 0; for (i = 1; i <= 10; i++)

begin ok:=1; for j:=2 to trunc(sqrt(v[i])) do if v[i] mod j =0 then ok:=0; if ok<>0 then inc(p); end; c:=p; end; begin assign (f,'date.in'); rewrite(f); { a) } for i:=1 to 10 do begin read(v[i]);write(f,v[i],' '); end; close(f); { b) } writeln; writeln(' suma este ',b); { c) } writeln(' numere prime in fisier ',c); { d) } assign (g,'date.out');rewrite(g); for i:=1 to 9 do for j:=i+1 to 10 do if v[i]>v[j] then begin aux:=v[i]; v[i]:=v[j]; v[j]:=aux; end; for i:=1 to 10 do write(g,v[i],' '); close(g); end.

{ ok = 1; for(j=2;j<=sqrt(v[i]); j++) if (v[i] % j == 0) ok = 0; if (ok) p++; } return p; } void main() { int i, j, aux; // a) for (i=1;i<=10;i++) {cin>>v[i]; f<<v[i]<<" ";} f.close(); cout<<endl<<b(); cout<<endl<<c();

// d) for (i = 1; i < 10; i++) for (j = i + 1; j <=10; j++) if (v[i] > v[j]) { aux = v[i]; v[i] = v[j]; v[j] = aux; } for (i=1;i<=10;i++) g<<v[i]<<' '; }

Subiectul nr.6
Se citete de la tastatur un ir de 10 numere ntregi mai mici dect 100. e. S se creeze fiierul text date.in care s conin pe o linie cele 10 valori, separate prin spaiu; f. S se scrie un subprogram care s determine suma elementelor impare aflate pe poziiile pare coninute de fiierul date.in; g. S se scrie un subprogram care s returneze un mesaj prin care s se comunice dac un element x citit de la tastatur exist sau nu n irul din fiierul date.in;

h. Scriei n fiierul text date.out irul dat, ordonat cresctor. Exemplu:


Date de intrare: 17 23 45 67 12 34 5 90 8 9 Date de ieire : a) Fiierul text date.in conine pe o linie: 17 23 45 67 12 34 5 90 8 b) Suma elementelor impare aflate pe poziiile pare coninute de fiierul date.in este: 99 c) Pentru x = 99 se va afia: elementul nu este n fiier d) Fiierul text date.out conine pe o linie: 5 8 9 12 17 23 34 45 67 90

Rezolvare : in programul principal se citesc datele de la tastatura si se depun in fisierul date.in ; se citeste fisierul date.in si se depun elementele sale in vectorul v ;suma elementelor impare de pe pozitii pare se calculeaza in subprogramul b si se afiseaza in programul principal pe monitor ;

se citeste elementul x in programul principal si in subprogramul c se verifica daca acest element este in vector sau nu si se afiseaza in programul principal un mesaj corespunzator ; in programul principal se sorteaza vectorul v si elementele sortate se depun in fisierul date.out.
Varianta C #include <fstream.h> #include <stdlib.h> fstream f("date.in",ios::out); fstream g("date.in",ios::in); fstream h("date.out",ios::out); int v[12],r,x,i,l,a; int b () { int s=0, i; for (i = 2;i<= 10;i+=2) if (v[i] % 2 != 0) s = s + v[i]; return s; } int c (int &x) { int i, p=0; for(i=1;i<=10;i++) if (v[i]==x) p=1; return p;

Varianta PASCAL var v:array[1..10] of integer; r,x,i,l,a:integer; f,g,h:text; function b:integer; var s,i:integer; begin s:=0;i:=2; while i<=10 do begin if v[i] mod 2 <> 0 then s:=s+v[i]; i:=i+2; end; b:=s; end; function c (var x:integer):boolean; var i:integer;p:boolean; begin p:=false; for i:=1 to 10 do if v[i]=x then p:=true; c:=p;

end; begin { a) } assign (f,'date.in');rewrite(f); for i:=1 to 10 do begin read(a); write(f,a,' '); end; close(f); { b) } assign (g,'date.out');reset(g); for i:=1 to 10 do read(g,v[i]); close(g); writeln; writeln(' suma elementelor ',b); { c) } writeln(' elementul cautat '); readln(x); if c(x) then writeln(' elementul este in sir ') else writeln(' elementul nu este in sir '); {d)} for i:=1 to 9 do for r:=i+1 to 10 do if v[i]>v[r] then begin l:=v[i]; v[i]:=v[r]; v[r]:=l; end; assign (h,'date.out');rewrite(h); for i:=1 to 10 do write(h,v[i],' ');

} void main() // a) { for (i=1;i<=10;i++) { cin>>a; f<<a<<" "; } f.close(); // b) for (i=1;i<=10;i++) g>>v[i]; g.close(); cout<<endl<<"suma elementelor "<<b(); // c) cout<<endl<<"dati elementul cautat "; cin>>x; if(c(x) == 1) cout<<endl<<" elementul este in sir "; else cout<<endl<<" elementul nu este in sir "; // d) for (i=1;i<=9;i++) for (r=i+1;r<=10;r++) if (v[i]>v[r]) { l=v[i]; v[i]=v[r]; v[r]=l;}; for (i=1;i<=10;i++) h<<v[i]<<' ';

close(h); end.

h.close(); }

Subiectul nr.7
Se citete de la tastatur un ir de 10 numere ntregi mai mici dect 100. e. S se creeze fiierul text date.in care s conin patru linii. Fiecare linie afiat conine elementele unei linii din matrice, separate prin spaii; f. S se scrie un subprogram care s returneze elementul maxim de pe diagonala principal a matricei din fiierul date.in; g. S se scrie un subprogram care s determine numarul elementelor de tip palindrom coninute de fiierul date.in (palindrom este un numr de cel puin dou cifre care citit de la dreapta la stnga este identic cu numrul citit de la stnga la dreapta); h. Scriei n fiierul text date.out elementele de pe linia a doua din matricea de mai sus, ordonate cresctor.

Exemplu:
Date de intrare: 13 2 3 66 55 4 3 22 2 3 4 5 1 2 1 17 Date de ieire : a) Fiierul text date.in conine matricea: 13 2 3 66 55 4 3 22 2 3 4 5 1 2 1 17

b) Elementul maxim de pe diagonala principal a matricei din fiierul date.in este:17 c) Exist 3 elemente de tip palindrom. d) Fiierul date.out conine pe o linie: 3 4 22 55

Rezolvare: in programul principal se citesc datele de la tastatura si se depun in fisierul date.in, sub forma unui tablou bidimensional ; in subprogramul palindrom se verifica daca exista elemente palindrom in matrice si in caz afirmativ cate sunt ; numarul elementelor palindrom se transmite programului principal si se afiseaza ; in subprogramul maxim se cauta elementul maxim al tabloului situat ,pe diagonala principala ,si se transmite programului principal unde se afiseaza ; in programul principal se ordoneaza elementele de pe linia a doua a tabloului si noul tablou se depune in fisierul date.out.
Varianta PASCAL type matr=array[1..50,1..50] of integer; var a:matr; i,j,k,elem:integer; f,h:text; function palindrom(a:matr; k:integer):integer; var i,j,nr,c,p:integer; begin c:=0; for i:=1 to k do for j:=1 to k do begin nr:=0; p:=0; Varianta C #include <fstream.h> #include <stdlib.h> fstream f("date.in",ios::out); fstream h("date.out",ios::out); int a[50][50],i,j,k,elem; int palindrom(int a[50][50],int k) { int i,j,nr,c=0,p; for(i=1;i<=k;i++) for (j=1;j<=k;j++) { nr=0;p=0;

if a[i][j]>9 then begin nr:=a[i][j]; while nr<>0 do begin p:=p*10 + nr mod 10; nr:=nr div 10; end; end; if p=a[i][j] then inc(c); end; palindrom:=c; end; function maxim (a:matr; k:integer):integer; var max:integer; begin max:=a[1][1]; for i:=1 to k do if a[i][i]>max then max:=a[i][i]; maxim:=max; end; begin write('dati dimensiunile matricii '); readln(k); { a) } assign (f,'date.in');rewrite(f); for i:=1 to k do begin for j:=1 to k do begin read(a[i][j]); write(f,a[i][j],' ');

if (a[i][j]>9) { nr=a[i][j]; while (nr!=0) { p=p*10+nr%10; nr=nr/10;} } if (p==a[i][j]) c++; } return c; } int maxim(int a[50][50],int k) { int max=a[1][1],i; for(i=1;i<=k;i++) if(a[i][i]>max) max=a[i][i]; return max; } void main() {cout<<" dati dimensiunile matricii ";cin >>k; // a) for (i=1;i<=k;i++) { for(j=1;j<=k;j++) { cin>>a[i][j];

end; writeln(f,' '); end; close(f); { b) } writeln; writeln('elementul maxim de pe diagonala principala ',maxim(a,k)); { c) } writeln(' exista ',palindrom(a,k),' elemente de tip palindrom '); { d) } for i:=1 to k do for j:=i+1 to k do if a[2][i]>a[2][j] then begin elem:=a[2][i]; a[2][i]:=a[2][j]; a[2][j]:=elem; end; assign (h,'date.out');rewrite(h); for i:=1 to k do write(h,a[2][i],' '); close(h); end.

f<<a[i][j]<<" "; } f<<" "; } cout<<endl; // b) cout<<" Elementul maxim pe diagonala principala "<<maxim(a,k); // c) cout<<endl<<"Exista "<<palindrom(a,k)<<" elemente de tip palindrom"; // d) for(i=1;i<=k;i++) for (j=i+1;j<=k;j++) if (a[2][i]>a[2][j]) { elem=a[2][i]; a[2][i]=a[2][j]; a[2][j]=elem; } for (i=1;i<=k;i++) h<<a[2][i]<<" "; h<<endl; }

Subiectul nr.8
Se citete de la tastatur un ir de 16 numere ntregi mai mici dect 100. e) S se creeze fiierul text date.in care s conin patru linii. Fiecare linie afiat conine elementele unei linii dintr-o matrice 4x4, separate prin spaii;

f)

S se scrie un subprogram care s returneze elementul maxim de pe diagonala secundar a matricei din fiierul date.in; g) S se scrie un subprogram care s determine numrul elementelor super prime coninute de fiierul date.in (un numr este superprim dac este prim att el ct i rsturnatul lui); h) Scriei n fiierul text date.out elementele de pe linia a treia din matricea de mai sus, ordonate cresctor.

Exemplu:
Date de intrare: 13 2 3 66 55 4 3 22 2 3 4 5 1 2 1 17 Date de ieire : a) Fiierul text date.in conine matricea: 13 2 3 66 55 4 3 22 2 3 4 5 1 2 1 17 b) Elementul maxim de pe diagonala secundar a matricei din fiierul date.in este: 66 c) Exist 2 numere superprime. d) Fiierul date.out conine pe o linie: 2 3 4 5

Rezolvare: in programul principal se citesc datele de la tastatura si se depun in fisierul date.in, sub forma unui tablou bidimensional ; se citeste fisierul date.in si se depun elementele tabloului in variabila a de tip tablou bidimensional ; in subprogramul maxim se cauta elementul maxim al tabloului situat ,pe diagonala secundara ,si se transmite programului principal , unde se afiseaza ; in subprogramul superprime se verifica daca exista elemente super prime in matrice si in caz afirmativ cate

sunt ; numarul elementelor superprime se transmite programului principal si se afiseaza ; in programul principal se ordoneaza elementele de pe linia a treia a tabloului si se depun in fisierul date.out.
Varianta C #include <fstream.h> #include <stdlib.h> fstream f("date.in",ios::out); fstream g("date.in",ios::in); fstream h("date.out",ios::out); int a[50][50],i,j,k,elem; int maxim(int a[50][50],int k) { int max=a[1][k],i; for(i=1;i<=k;i++) if(a[i][k-i+1]>max) max=a[i][k-i+1]; return max; } int superprim (int a[50][50],int k) { int i,j,nr,c=0,p,inv,m; for(i=1;i<=k;i++) for (j=1;j<=k;j++) { if (a[i][j] > 9) { p=0; for(nr=2;nr<(a[i][j]/2);nr++) if (a[i][j]%nr==0) p++; if (p==0)

Varianta PASCAL type matr=array[1..50,1..10] of integer; var a:matr; i,j,k,elem:integer; f,g,h:text; function maxim (a:matr;k:integer):integer; var max,i:integer; begin max:=a[1][k]; for i:=1 to k do if a[i][k-i+1]>max then max:=a[i][k-i+1]; maxim:=max; end; function superprim (a:matr;k:integer):integer; var i,j,nr,c,p,inv,m:integer; begin c:=0; for i:=1 to k do for j:=1 to k do if a[i][j]>9 then begin p:=0; for nr:=2 to a[i][j] div 2 do if a[i][j] mod nr =0 then

inc(p); if p=0 then begin inv:=1; m:=a[i][j]; while m<>0 do begin inv:=inv*10 + m mod 10; m:=m div 10; end; p:=0; for nr:=2 to inv div 2 do if inv mod nr =0 then inc(p); if p=0 then inc(c); end; end; superprim:=c; end; begin { a) } assign (f,'date.in');rewrite(f); for i:=1 to 4 do begin for j:=1 to 4 do begin read(elem); write(f,elem,' '); end; writeln(f,' '); end; close(f); { b) } assign (g,'date.in'); reset(g); for i:=1 to 4 do for j:=1 to 4 do read(g,a[i][j]);

{ inv=1; m=a[i][j]; while(m!=0){ inv=inv*10+m%10; m/=10; } p=0; for(nr=2;nr<inv/2;nr++) if (inv%nr==0) p++; if (p==0) {cout<<a[i][j];c++;} } } } return c; } void main() // a) {for (i=1;i<=4;i++) { for (j=1;j<=4;j++) { cin>>elem; f<<elem<<" "; } f<<endl;} f.close(); // b) for (i=1;i<=4;i++) for (j=1;j<=4;j++) g>>a[i][j]; g.close();

close(g); writeln; writeln(' elementul maxim ',maxim(a,4)); { c) } writeln(' numarul de elemente superprime ',superprim(a,4)); { d) } for i:=1 to 3 do for j:=i+1 to 4 do if a[3][i]>a[3][j] then begin elem:=a[3][i]; a[3][i]:=a[3][j]; a[3][j]:=elem; end; assign (h,'date.out');rewrite(h); for j:=1 to 4 do write(h,a[3][j],' '); close(h); end.

cout<<" Elementul "<<maxim(a,4);

maxim

// c) cout<<" Numarul de elem superprime "<<superprim(a,4); // d) for (i=1;i<=3;i++) for (j=i+1;j<=4;j++) if (a[3][i]>a[3][j]) {elem=a[3][i]; a[3][i]=a[3][j]; a[3][j]=elem;} for(j=1;j<=4;j++) h<<a[3][j]<<" "; h<<endl; h.close(); }

Subiectul nr.9
Se citete de la tastatur un ir de 10 numere ntregi mai mici dect 100. e) S se creeze fiierul text date.in care s conin pe o linie cele 10 valori, separate prin spaiu; f) S se scrie un subprogram care s returneze suma cifrelor elementului maxim din fiierul date.in; g) S se scrie un subprogram care s determine numrul elementelor prime coninute de fiierul date.in; h) Scriei n fiierul text date.out irul dat, ordonat cresctor.

Exemplu:

Date de intrare : 37 23 4 77 12 34 5 90 18 19 Date de ieire: a) Fiierul text date.in conine pe o linie: 37 23 4 77 12 34 5 90 18 19 b) Suma cifrelor elementului maxim din fiierul date.in este: 9 c) Numrul elementelor prime coninute de fiierul date.in : 4 d) Fiierul text date.out conine pe o linie: 4 5 12 18 19 23 34 37 77 90

Rezolvare : in programul principal se citesc datele de la tastatura si se depun in fisierul date.in ; se citeste fisierul date.in si se depun elementele intr-un vector ; in subprogramul maxim se cauta elementul maxim din vector si se determina suma cifrelor sale ; in subprogramul prime se determina numarul elementelor prime din fisier si rezultatul este returnat programului principal ; in programul principal se ordoneaza elementele si se depun in fisierul date.out.
Varianta PASCAL type vect=array[1..10]of integer; var a:vect; f,g:text; b,i,ok,aux:integer; function maxim (a:vect;k:integer):integer; var i,max,s:integer; begin max:=a[1]; s:=0; for i:=2 to k do if max<a[i] then max:=a[i]; Varianta C #include <fstream.h> #include <stdlib.h> int a[10],b; int maxim(int a[50],int k) { int i,max=a[1],s=0; for (i=2;i<=k;i++) if (max<a[i]) max=a[i];

i:=max; while i<>0 do begin s:=s+i mod 10; i:=i div 10; end; maxim:=s; end; function prime (a:vect;k:integer):integer; var i,p,l,j:integer; begin p:=0; for i:=1 to k do begin l:=1; for j:=2 to a[i] div 2 do if a[i] mod j =0 then l:=0; if l=1 then inc(p); end; prime:=p; end; begin assign (f,'date.in'); rewrite(f); { a) } for i:=1 to 10 do begin read(b); write(f,b,' '); end; close(f); { b) } reset(f); for i:=1 to 10 do read(f,a[i]); writeln;

i=max; while (i!=0){ s+=i%10; i/=10; } return s; } int prime(int a[50],int k) {int i,p=0,l,j; for (i=1;i<=k;i++) { l=1; for(j=2;j<=(a[i]/2);j++) if(a[i]%j==0) l=0; if (l==1) p++; } return p; } void main() { fstream f("date.in",ios::out); fstream g("date.in",ios::in); fstream h("date.out",ios::out); int i,ok=1,aux; // a) for(i=1;i<=10;i++) { cin>>b; f<<b<<" "; } f.close(); // b) for(i=1;i<=10;i++) g>>a[i];

writeln(' suma cifrelor ',maxim(a,10)); { c) } writeln(' numarul elementelor prime ',prime(a,10)); { d) } ok:=1; while ok=1 do begin ok:=0; for i:=1 to 10 do if a[i]>a[i+1] then begin ok:=1; aux:=a[i]; a[i]:=a[i+1]; a[i+1]:=aux; end; end; assign (g,'date.out'); rewrite(g); for i:=1 to 10 do write(g,a[i],' '); close(g); end.

cout<<endl<<" suma cifrelor "<<maxim(a,10); // c) cout<<endl<<"numarul elementelor prime "<<prime(a,10); // d) while(ok==1) { ok=0; for(i=1;i<10;i++) if(a[i]>a[i+1]) { ok=1;aux=a[i]; a[i]=a[i+1]; a[i+1]=aux;} } for(i=1;i<=10;i++) h<<a[i]<<" "; f.close(); g.close(); h.close(); }

Subiectul nr.10
Se citete de la tastatur un ir de 10 numere ntregi mai mici dect 100. e) S se creeze fiierul text date.in care s conin pe o linie cele 10 valori, separate prin spaiu; f) S se scrie un subprogram care s returneze numrul de elemente din fiierul date.in care au ultima cifr egal cu 3;

g)

S se scrie un subprogram care s determine numrul elementelor coninute de fiierul date.in care au suma cifrelor numr par; h) Scriei n fiierul text date.out irul dat, ordonat descresctor.

Exemplu:
Date de intrare : 17 23 45 67 12 34 3 90 8 9 Date de ieire: a) Fiierul text date.in conine pe o linie: 17 23 45 67 12 34 3 90 8 9 b) Numrul de elemente din fiierul date.in care au ultima cifr egal cu 3: 2 c) Numrul elementelor coninute de fiierul date.in care au suma cifrelor numr par: 2 d) Fiierul text date.out conine pe o linie: 90 77 37 34 23 19 18 12 5 4

Rezolvare: in programul principal se citesc datele de la tastatura si se depun in fisierul date.in ; se citeste fisierul date.in si se depun elementele intr-un vector ; in subprogramul nrtrei se calculeaza cate elemente din fisier au ultima cifra trei ; rezultatul este transmis in programul principal si afisat ; in subprogramul cifre se calculeaza suma cifrelor elementelor din fisier si daca aceasta suma este para se incrementeaza variabila nr ; in programul principal se transmite acest numar si se afiseaza pe monitor ; tot in programul principal se ordoneaza elementele sirului dat si se scriu in fisierul date.out.
Varianta PASCAL type Varianta C #include <fstream.h>

vect=array[1..10] of integer; var a:vect; f,g:text; b,i,ok,aux:integer; function nrtrei (a:vect; k:integer):integer; var i,trei:integer; begin trei:=0; for i:=1 to k do if a[i] mod 10 = 3 then inc(trei); nrtrei:=trei; end; function cifre (a:vect; k:integer):integer; var i,s,nr,p:integer; begin nr:=0; for i:=1 to k do begin s:=0; p:=a[i]; while p<>0 do begin s:=s+p mod 10; p:=p div 10; end; if s mod 2 =0 then inc(nr); end; cifre:=nr; end; begin assign (f,'date.in'); rewrite(f); { a) } for i:=1 to 10 do begin

#include <stdlib.h> int a[10],b; int nrtrei(int a[50],int k) { int i,trei=0; for (i=1;i<=k;i++) if (a[i]%10==3) trei++; return trei; } int cifre(int a[50], int k) { int i,s,nr=0,p; for (i=1;i<=k; i++) { s=0;p=a[i]; while(p!=0) {s+=p%10; p/=10; } if(s%2==0) nr++; } return nr; } void main() { fstream f("date.in",ios::out); fstream g("date.in",ios::in); fstream h("date.out",ios::out); int i,ok=1,aux; // a) for(i=1;i<=10;i++) {cin>>b;

read(b); write(f,b,' '); end; close(f); { b) } reset(f); for i:=1 to 10 do read(f,a[i]); close(f); writeln; writeln(' numarul de elemente care se termina cu trei ',nrtrei(a,10)); { c) } writeln; writeln(' numarul de elemente cu suma cifrelor para ',cifre(a,10)); { d) } assign (g,'date.out'); rewrite(g); ok:=1; while ok=1 do begin ok:=0; for i:=1 to 10 do if a[i]<a[i+1] then begin ok:=1; aux:=a[i]; a[i]:=a[i+1]; a[i+1]:=aux; end; end; for i:=1 to 10 do write(g,a[i],' '); close(g); end.

f<<b<<" ";} f.close(); // b) for(i=1;i<=10;i++) g>>a[i]; cout<<endl; cout<< "numarul de elemente care se termina cu trei "; cout<<nrtrei(a,10); // c) cout<<endl; cout<<" numarul de elemente care au suma cifrelor para "; cout<<cifre(a,10); // d) while(ok==1) { ok=0; for(i=1;i<10;i++) if(a[i]<a[i+1]) { ok=1;aux=a[i]; a[i]=a[i+1]; a[i+1]=aux;} } for(i=1;i<=10;i++) h<<a[i]<<" "; f.close(); g.close(); h.close(); }

Subiectul nr.11
Se citete de la tastatur un ir de 10 numere ntregi mai mici dect 100. e) S se creeze fiierul text date.in care s conin pe o linie cele 10 valori, separate prin spaiu; f) S se scrie un subprogram care s returneze suma cifrelor pare ale numerelor din fiierul date.in; g) S se scrie un subprogram care s determine numrul elementelor prime de dou cifre coninute de fiierul date.in; h) Scriei n fiierul text date.out irul dat, ordonat cresctor.

Exemplu:
Date de intrare : 7 23 4 17 12 34 5 90 8 9 Date de ieire : a) Fiierul text date.in conine pe o linie: 7 23 4 17 12 34 5 90 8 9 b) Suma cifrelor pare ale numerelor din fiierul date.in este: 20 c) n fiier sunt 2 numere prime de dou cifre d) Fiierul text date.out conine pe o linie: 4 5 7 8 9 12 17 23 34 90

Rezolvare : in programul principal se citesc datele de la tastatura si se depun in fisierul date.in ; se citeste fisierul date.in si se memoreaza elementele sale intr-un vector a ; in subprogramul suma se calculeaza suma cifrelor pare ale elementelor pare din vectorul a ; rezultatul se transmite programului principal si se afiseaza ;

in subprogramul nrprime se determina numarul elementelor prime de doua cifre din fisier ; sirul de numere date in fisierul date.in se ordoneaza si se depune in fisierul date.out.
Varianta C #include <fstream.h> #include <stdlib.h> int a[50],b; int suma(int a[50],int k) { int i,s=0,nr; for (i=1;i<=k;i++) { nr=a[i]; while (nr!=0) { if ((nr%10)%2==0) s+=nr%10; nr/=10; } return s; } int nrprime(int a[50],int k) { int i,j,nr=0,p; for (i=1;i<=k;i++) if((a[i]>9)&&(a[i]<1000)) {

Varianta PASCAL type vect=array[1..10] of integer; var a:vect; b,i,ok,aux:integer; f,g:text; function suma (a:vect; k:integer):integer; var i,s,m,nr:integer; begin s:=0; for i:=1 to k do begin nr:=a[i]; while nr<>0 do begin m:=nr mod 10; if m mod 2 = 0 then s:=s+m; nr:=nr div 10; end; end; suma:=s; end; function nrprime (a:vect; k:integer):integer; var i,j,nr,p:integer; begin nr:=0; for i:=1 to k do

if ((a[i]>9) and (a[i] < 1000)) then begin p:=1; for j:=2 to a[i] div 2 do if a[i] mod j = 0 then p:=0; if p=1 then inc(nr); end; nrprime:=nr; end; begin assign (f,'date.in'); rewrite(f); { a) } for i:=1 to 10 do begin read(b);write(f,b,' '); end; close(f); { b) } reset(f); for i:=1 to 10 do read(f,a[i]); close(f); writeln; writeln(' suma cifrelor pare ',suma(a,10)); { c) } writeln(' numarul de elemente prime ',nrprime(a,10)); { d) } assign (g,'date.out');rewrite(g); ok:=1; while ok=1 do begin

p=1; for(j=2;j<=a[i]/2;j++) if (a[i]%j==0) p=0; if (p==1) nr++; } return nr; } void main() { fstream f("date.in",ios::out); fstream g("date.in",ios::in); fstream h("date.out",ios::out); int i,ok=1,aux; // a) for(i=1;i<=10;i++){cin>>b; f<<b<<" ";} f.close(); // b) cout<<endl; cout<<" suma cifrelor pare "; cout<<suma(a,10); cout<<endl; // c) cout<<" numarul de elemente prime "; cout<<nrprime(a,10); // d) while(ok==1) { ok=0; for(i=1;i<10;i++)

ok:=0; for i:=1 to 9 do if a[i]>a[i+1] then begin ok:=1; aux:=a[i]; a[i]:=a[i+1]; a[i+1]:=aux; end; end; for i:=1 to 10 do write(g,a[i],' '); close(g); end.

if(a[i]>a[i+1]) { ok=1;aux=a[i]; a[i]=a[i+1]; a[i+1]=aux;} } for(i=1;i<=10;i++) h<<a[i]<<" "; f.close(); g.close(); h.close(); }

Subiectul Nr.16 S se realizeze un program care s raspund urmtoarelor solicitri. S se creeze fiierul text date.in care s conin un ir de 10 numere ntregi aleatoare mai mici dect 100. Cerine : d) S se scrie un subprogram care s returneze cte dintre elementele din fiierul date.in au trei divizori; e) S se scrie un subprogram care s determine cel mai mare numr neprim din fiierul date.in; f) Scriei n fiierul text date.out irul de mai sus ordonat descresctor. Am folosit subprogramele: - CREARE: creaz un fiier cu structura cerut de date

- AFIARE: citete datele din fiierul de intrare i afieaz pe ecran datele citite din fiier - NR_A: citete datele din fiierul de intrare i calculeaz numrul de elemente din fiierul de intrare care au exact 3 divizori, numr pe care l scrie pe ecran; - MAXIM: citete datele din fiierul de intrare, afl cel mai mare numr neprim dintre datele citite i il returneaz pentru programul principal; dac nu exist numere neprime, atunci se returneaz o valoare negativ; - SORTARE: citete datele din fiierul de intrare i le sorteaz, dup care le scrie n fiierul de ieire. Varianta PASCAL uses crt; var a:array[1..20] of integer; f,g:text; procedure creare; var i:integer; begin assign(f,'date.in'); rewrite(f); randomize; for i:=1 to 10 do write(f,random(100),' '); close(f); end; procedure afisare; var i:integer; begin reset(f); for i:=1 to 10 do begin read(f,a[i]); write(a[i],' '); end; writeln; Varianta C/C++ #include <iostream.h> #include <conio.h> #include <math.h> #include <stdlib.h> #include <fstream.h> int a[20]; void creare() { int i; ofstream f("date.in"); randomize(); for (i=1; i<=10; i++) f<<random(100)<<" "; f.close(); } void afisare() { int i; ifstream f("date.in"); for (i=1; i<=10; i++) { f>>a[i]; cout<<a[i]<<" "; } cout<<endl;

end;

f.close(); } function nr_a:integer; int nr_a() var nr,d,i,x:integer; { prim:boolean; int nr,d,i,x,prim; begin ifstream f("date.in"); reset(f); for (i=1; i<=10; i++) for i:=1 to 10 do read(f,a[i]); f>>a[i]; close(f); f.close(); nr:=0; nr=0; for i:=1 to 10 do for (i=1; i<=10; i++) begin { x:=trunc(sqrt(a[i])); x=floor(sqrt(a[i])); if x*x=a[i] { daca a[i] este if (x*x==a[i]) un patrat prefect } { then prim=1; begin { vad daca a[i] este for (d=2; d<=floor patratul unui numar (sqrt(x)); d++) prim } if (x % d == 0) prim:=true; { prim=0; break; } for d:=2 to trunc(sqrt(x)) if (x==0 || x==1) prim=0; do if (prim) if x mod d = 0 nr++; then begin prim:=false; } break; end; } if (x=0) or (x=1) f.close(); then prim:=false; return nr; if prim } then nr:=nr+1; end; int maxim() end; { nr_a:=nr; int max,i,d,x,prim; end; ifstream f("date.in"); function maxim:integer; for (i=1; i<=10; i++) var max,i,d,x:integer; f>>a[i]; prim:boolean; f.close();

begin reset(f); for i:=1 to 10 do read(f,a[i]); close(f); max:=-maxint; for i:=1 to 10 do begin prim:=true; for d:=2 to trunc(sqrt(a[i])) do if a[i] mod d = 0 then begin prim:=false; break; end; if (a[i]=0) or (a[i]=1) then prim:=false; if not prim then if a[i]>max then max:=a[i]; end; maxim:=max; end; procedure sortare; var i,j,x:integer; begin assign(g,'date.out'); rewrite(g); reset(f); for i:=1 to 10 do read(f,a[i]); close(f); for i:=1 to 9 do for j:=i+1 to 10 do if a[i]>a[j] then begin x:=a[i]; a[i]:=a[j]; a[j]:=x; end; for i:=1 to 10 do write(g,a[i],'');

max=-32768; for (i=1; i<=10; i++) { prim=1; for (d=2; d<=floor(sqrt(a[i])); d++) if (a[i] % 2 == 0) { prim=0; break; } if (a[i]==0 || a[i]==1) prim=0; if (!prim) if (a[i]>max) max=a[i]; } f.close(); return max; } void sortare() { int i,j,x; ofstream g("date.out"); ifstream f("date.in"); for (i=1; i<=10; i++) f>>a[i]; for (i=1; i<=9; i++) for (j=i+1; j<=10; j++) if (a[i]>a[j]) { x=a[i]; a[i]=a[j]; a[j]=x; } for (i=1; i<=10; i++) g<<a[i]<< "; f.close(); g.close(); } void main() { clrscr(); creare();

close(g); end; begin clrscr; creare; write('Sirul generat: ');afisare; writeln('a) Sirul are ',nr_a,' elemente cu exact 3 div.); if maxim>=0 then writeln(b),maxim) else writeln('b) Nu sunt numere neprime in sirul generat'); sortare; end.

cout<<"Sirul generat: "; afisare(); cout<<"a) Sirul are "<<nr_a() <<" elemente cu exact 3 divizori"<<endl; if (maxim()>=0) cout<<"b) <<maxim()<<endl; else cout<<"b) Nu sunt numere neprime in sirul generat"<<endl; sortare(); }

Subiectul Nr.17 S se realizeze un program care s raspund urmtoarelor solicitri. S se creeze fiierul text date.in care s conina un ir de 10 numere ntregi aleatoare mai mici dect 100. Cerine : d) S se scrie un subprogram care s returneze elementele din fiierul date.in care sunt divizibile cu o valoare x citit de la tastatur; e) S se scrie un subprogram care s insereze ntre ultimul i penultimul element al irului din fiierul date.in media aritmetic a lor; f) Scriei in fiierul text date.out irul de mai sus ordonat descresctor. Observaii

- datele cerute la cerina a) au fost afiate pe ecran; - la punctul b), media aritmetic poate iei din Z i de aceea, am lucrat cu un vector de numere reale Am folosit subprogramele: - CREARE: creaz structura cerut de date - AFIARE: citete datele din fiierul de intrare i le afieaz pe ecran - DIVIZ: citete datele din fiierul de intrare, apoi citete o valoare x i calculeaz numrul de elemente din irul de intrare care se divid cu x - INSERARE: citete datele din fiierul de intrare i realizeaz inserarea cerut - SORTARE: citete datele din fiierul de intrare i le sorteaz, dup care le scrie n fiierul de ieire uses crt; var a:array[1..20] of integer; f,g:text; procedure creare; var i:integer; begin assign(f,'date.in'); rewrite(f); randomize; for i:=1 to 10 do write(f,random(100),' '); close(f); end; procedure afisare; var i:integer; begin reset(f); for i:=1 to 10 do begin #include <iostream.h> #include <conio.h> #include <math.h> #include <stdlib.h> #include <fstream.h> int a[20]; void creare() { int i; ofstream f("date.in"); randomize(); for (i=1; i<=10; i++) f<<random(100)<<" "; f.close(); } void afisare() { int i;

read(f,a[i]); write(a[i],' '); end; writeln; end; procedure inserare; var b:array[1..11] of real; i:integer; begin reset(f); for i:=1 to 10 do read(f,a[i]); for i:=1 to 9 do b[i]:=a[i]; b[11]:=a[10]; b[10]:=(a[9]+a[10])/2; for i:=1 to 11 do write(b[i]:0:1,' '); writeln; end; procedure diviz; var i,k,x:integer; begin reset(f); k:=0; for i:=1 to 10 do read(f,a[i]); close(f); write(a) x: ); readln(x); for i:=1 to 10 do if a[i] mod x = 0 then begin k:=k+1; write(a[i],' '); end;

ifstream f("date.in"); for (i=1; i<=10; i++) { f>>a[i]; cout<<a[i]<<" "; } cout<<endl; f.close(); } void inserare() { int i; float b[12]; ifstream f("date.in"); for (i=1; i<=10; i++) f>>a[i]; f.close(); for (i=1; i<=9; i++) b[i]=a[i]; b[10]=(a[9]+a[10])/2.0; b[11]=a[10]; cout<<"b) "; for(i=1; i<=11; i++) cout<<b[i]<<" "; cout<<endl; } void diviz() { int i,k=0,x; ifstream f("date.in"); for (i=1; i<=10; i++) f>>a[i]; f.close(); cout<<"a) x: "; cin>>x; for (i=1; i<=10; i++) if (a[i] % x == 0) { k++; cout<<a[i]<<" "; } if (k==0) cout<<"Nu sunt asemenea numere in sir"; cout<<endl; }

if k=0 then write('Nu sunt asemenea numere in sir'); writeln; end; procedure sortare; var i,j,x:integer; begin assign(g,'date.out'); rewrite(g); reset(f); for i:=1 to 10 do read(f,a[i]); for i:=1 to 9 do for j:=i+1 to 10 do if a[i]<a[j] then begin x:=a[i]; a[i]:=a[j]; a[j]:=x; end; for i:=1 to 10 do write(g,a[i],' '); end; begin clrscr; creare; assign(f,'date.in'); write('Sirul generat: '); afisare; diviz; inserare; sortare; close(f); close(g); end.

void sortare() { int i,j,x; ofstream g("date.out"); ifstream f("date.in"); for (i=1; i<=10; i++) f>>a[i]; for (i=1; i<=9; i++) for (j=i+1; j<=10; j++) if (a[i]<a[j]) { x=a[i]; a[i]=a[j]; a[j]=x; } for (i=1; i<=10; i++) g<<a[i]<<" "; f.close(); g.close(); } void main() { clrscr(); creare(); cout<<"Sirul generat: "; afisare(); diviz(); inserare(); sortare(); }

Subiectul Nr.18

S se realizeze un program care s raspund urmtoarelor solicitri. S se creeze fiierul text date.in care s conin un ir de 10 numere ntregi aleatoare mai mici dect 100. Cerine: d) S se scrie un subprogram care s returneze cel mai mare divizor comun al elementelor din fiierul date.in; e) S se scrie un subprogram care s insereze ntre primul i al doilea element al irului din fiierul date.in o valoare x citit de la tastatur; f) Scriei n fiierul text date.out irul de mai sus ordonat descresctor. Am folosit subprogramele: - CREARE: creaz structura cerut de date - AFIARE: citete datele de intrare din fiierul de intrare i le afieaz pe ecran - CMMDC: citete datele din fiierul de intrare i calculeaz cmmdc-ul elementelor din fiier (folosind algoritmul lui Euclid) - INSERARE: citete datele din fiierul de intrare i realizeaz inserarea cerut; - SORTARE: citete datele din fiierul de intrare i le sorteaz, dup care le scrie n fisierul de ieire uses crt; var a:array[1..20] of integer; f,g:text; procedure creare; var i:integer; begin assign(f,'date.in'); rewrite(f); randomize; for i:=1 to 10 do write(f,random(100),' '); #include <iostream.h> #include <conio.h> #include <stdlib.h> #include <fstream.h> int a[20]; void creare() { int i; ofstream f("date.in"); randomize();

close(f); end; procedure afisare; var i:integer; begin reset(f); for i:=1 to 10 do begin read(f,a[i]); write(a[i],' '); end; writeln; end; function cmmdc:integer; var dc,i,x,y,r:integer; begin reset(f); for i:=1 to 10 do read(f,a[i]); dc:=a[1]; for i:=2 to 10 do begin x:=a[i]; y:=dc; while x mod y <> 0 do begin r:=x mod y; x:=y; y:=r; end; dc:=y; end; cmmdc:=dc; end; procedure inserare; var x,i:integer; b:array[1..11] of integer; begin reset(f); for i:=1 to 10 do

for (i=1; i<=10; i++) f<<random(100)<<" "; f.close(); } void afisare() { int i; ifstream f("date.in"); for (i=1; i<=10; i++) { f>>a[i]; cout<<a[i]<<" "; } cout<<endl; f.close(); } int cmmdc() { int dc,i,x,y,r; ifstream f("date.in"); for (i=1; i<=10; i++) f>>a[i]; f.close(); dc=a[1]; for (i=2; i<=10; i++) { x=a[i]; y=dc; while (x % y ) { r=x %y; x=y; =r; } dc=y; } return dc; } void inserare() { int i; float b[12];

read(f,b[i]); write('x: '); readln(x); for i:=10 downto 2 do b[i+1]:=b[i]; b[2]:=x; write('b) '); for i:=1 to 11 do write(b[i],' '); writeln; end; procedure sortare; var i,j,x:integer; begin assign(g,'date.out'); rewrite(g); reset(f); for i:=1 to 10 do read(f,a[i]); close(f); for i:=1 to 9 do for j:=i+1 to 10 do if a[i]<a[j] then begin x:=a[i]; a[i]:=a[j]; a[j]:=x; end; for i:=1 to 10 do write(g,a[i],' '); close(g); end; begin clrscr; creare; assign(f,'date.in'); write('Sirul generat: ');

ifstream f("date.in"); for (i=1; i<=10; i++) f>>a[i]; f.close(); b[1]=a[1]; b[2]=(a[1]+a[2])/2.0; for (i=2; i<=10; i++) b[i+1]=a[i]; cout<<"b) "; for(i=1; i<=11; i++) cout<<b[i]<<" "; cout<<endl; } void sortare() { int i,j,x; ofstream g("date.out"); ifstream f("date.in"); for (i=1; i<=10; i++) f>>a[i]; f.close(); for (i=1; i<=9; i++) for (j=i+1; j<=10; j++) if (a[i]<a[j]) { x=a[i]; a[i]=a[j]; a[j]=x; } for (i=1; i<=10; i++) g<<a[i]<<" "; g.close(); } void main() { clrscr(); creare(); cout<<"Sirul generat: "; afisare();

afisare; writeln('a) Cmmdc: ',cmmdc); inserare; sortare; close(f); close(g); end.

cout<<"a) Cmmdc: "<<cmmdc()<<endl; inserare(); sortare(); }

Subiectul Nr.19 S se realizeze un program care s raspund urmtoarelor solicitri. S se creeze fiierul text date.in care s conina un ir de 10 numere ntregi aleatoare mai mici dect 100. Cerine c) S se scrie un subprogram care s returneze cte dintre elementele din fiierul date.in sunt prime cu o valoare x citit de la tastatur; d) S se scrie un subprogram care s calculeze media aritmetic a numerelor din ir i s o insereze la jumtatea irului; d) Scriei n fiierul text date.out irul de mai sus ordonat descresctor. Observaii - pentru cerinta a) se lucreaza cu un vector de numere reale; Am folosit subprogramele: - CREARE: creaz structura cerut de date - AFIARE: citete datele de intrare din fiierul de intrare i afieaz pe ecran datele citite din fiier

- PRIME: citete datele din fiierul de intrare i returneaz numrul de elemente din irul de intrare i care sunt prime cu valoarea x citit de la tastatur, adic (a[i],x)=1; - INSERARE: citete datele din fiierul de intrare i realizeaz inserarea dorit (pe poziia 6) ntr-un vector de numere reale; - SORTARE: citete datele din fiierul de intrare i le sorteaz, dup care le scrie n fiierul de ieire uses crt; var a:array[1..20] of integer; f,g:text; x,nr:integer; procedure creare; var i:integer; begin assign(f,'date.in'); rewrite(f); randomize; for i:=1 to 10 do write(f,random(100),' '); close(f); end; procedure afisare; var i:integer; begin reset(f); for i:=1 to 10 do begin read(f,a[i]); write(a[i],' '); end; writeln; end; procedure prime; #include <iostream.h> #include <conio.h> #include <stdlib.h> #include <fstream.h> int a[200],x,nr=0; void creare() { int i; ofstream f("date.in"); randomize(); for (i=1; i<=10; i++) f<<random(100)<<" "; f.close(); } void afisare() { int i; ifstream f("date.in"); for (i=1; i<=10; i++) { f>>a[i]; cout<<a[i]<<" "; } cout<<endl; f.close(); } void prime() { int i,p,q,r;

var i,p,q,r:integer; ifstream f("date.in"); begin for (i=1; i<=10; i++) f>>a[i]; nr:=0; reset(f); f.close(); for i:=1 to 10 do read(f,a[i]); cout<<"Valoarea x: "; cin>>x; close(f); for (i=1; i<=10; i++) write('x: '); readln(x); { for i:=1 to 10 do p=x; q=a[i]; begin while (p%q) p:=a[i]; q:=x; { while p mod q <> 0 do r=p%q; begin p=q; r:=p mod q; q=r; p:=q; } q:=r; if (q==1) end; nr++; if q=1 } then nr:=nr+1; } end; end; void inserare() { procedure inserare; int i,s=0; var x,i:integer; float b[12]; b:array[1..11] of real; ifstream f("date.in"); s:real; for (i=1; i<=10; i++) begin { reset(f); s:=0; f>>b[i]; s=s+b[i]; for i:=1 to 10 do } begin f.close(); read(f,b[i]); s:=s+b[i]; for (i=10; i>=6; i--) end; b[i+1]=b[i]; close(f); b[6]=s/10.0; for i:=10 downto 6 do cout<<"b) "; b[i+1]:=b[i]; for(i=1; i<=11; i++) b[6]:=s/10; cout<<b[i]<<" "; write('b) '); cout<<endl; for i:=1 to 11 do }

write(b[i]:0:2,' '); writeln; end; procedure sortare; var i,j:integer; begin assign(g,'date.out'); rewrite(g); reset(f); for i:=1 to 10 do read(f,a[i]); close(f); for i:=1 to 9 do for j:=i+1 to 10 do if a[i]<a[j] then begin x:=a[i]; a[i]:=a[j]; a[j]:=x; end; for i:=1 to 10 do write(g,a[i],' '); close(g); end; begin clrscr; creare; assign(f,'date.in'); write('Sirul generat: '); afisare; prime; writeln('a) Nr de elemente prime cu ',x,': ',nr); inserare; sortare; end.

void sortare() { int i,j; ofstream g("date.out"); ifstream f("date.in"); for (i=1; i<=10; i++) f>>a[i]; f.close(); for (i=1; i<=9; i++) for (j=i+1; j<=10; j++) if (a[i]<a[j]) { x=a[i]; a[i]=a[j]; a[j]=x; } for (i=1; i<=10; i++) g<<a[i]<<" "; g.close(); } void main() { clrscr(); creare(); cout<<"Sirul generat: "; afisare(); prime(); cout<<"a) Nr elem prime cu "<<x<<": "<<nr<<endl; inserare(); sortare(); }

Subiectul Nr.20 S se realizeze un program care s raspund urmtoarelor solicitri. S se creeze fiierul text date.in care s conin un ir de 10 numere ntregi aleatoare mai mici dect 100. Cerine d) S se scrie un subprogram care s determine elementul minim i maxim din fiierul date.in i poziiile pe care le ocup n irul numerelor date; e) S se scrie un subprogram care s determine cte dintre elementele irului cuprinse ntrun interval citit de la tastatur sunt numere pare; f) Scriei n fiierul text date.out irul de mai sus ordonat cresctor. Am folosit subprogramele: - CREARE: creaz structura cerut de date - AFIARE: citete datele din fiierul de intrare i le afieaz pe ecran - MIN_MAX: citete datele din fiierul de intrare i afieaz rezultatele de la cerina a) - INTERVAL: citete datele din fiierul de intrare i (de la tastatur) limitele unui interval; apoi va calcula i va afia cte dintre elementele din fiierul de intrare sunt pare i n intervalul citit; - SORTARE: citete datele din fiierul de intrare i le sorteaz, dup care le scrie n fiierul de ieire. uses crt; var a:array[1..20] of integer; f,g:text; procedure creare; var i:integer; begin assign(f,'date.in'); #include <iostream.h> #include <conio.h> #include <stdlib.h> #include <fstream.h> int a[200]; void creare() {

rewrite(f); randomize; for i:=1 to 10 do write(f,random(100),' '); close(f); end; } procedure afisare; var i:integer; begin reset(f); for i:=1 to 10 do begin read(f,a[i]); write(a[i],' '); end; writeln; end; procedure min_max; var min,max,i:integer; begin reset(f); for i:=1 to 10 do read(f,a[i]); min:=a[1]; max:=a[1]; for i:=2 to 10 do if a[i]<min then min:=a[i] else if a[i]>max then max:=a[i]; write('a) Maximul din sir:',max ,'; el se afla pe pozitiile: '); for i:=1 to 10 do if a[i]=max then write(i,' ');

int i; ofstream f("date.in"); randomize(); for (i=1; i<=10; i++) f<<random(100)<<" "; f.close(); void afisare() { int i; ifstream f("date.in"); for (i=1; i<=10; i++) { f>>a[i]; cout<<a[i]<<" "; } cout<<endl; f.close(); } void min_max() { int min,max,i; ifstream f("date.in"); for (i=1; i<=10; i++) f>>a[i]; f.close(); min=a[1]; max=a[1]; for (i=2; i<=10; i++) if (a[i]<min) min=a[i]; else if (a[i]>max) max=a[i]; cout<<"a) Maximul din sir: "<< max<<"; el se afla pe pozitiile: "; for (i=1; i<=10; i++) if (a[i]==max) cout<<i<<" "; cout<<endl; cout<<" Minimul din

writeln; write('a) Minimul din sir: ',min ,'; el se afla pe pozitiile: '); for i:=1 to 10 do if a[i]=min then write(i,' '); writeln; end;

sir:"<<min <<"; el se afla pe pozitiile: "; for (i=1; i<=10; i++) if (a[i]==min) cout<<i<<" ";; cout<<endl; }

void interval() { procedure interval; int i,x,y,n=0; var i,x,y,n:integer; ifstream f("date.in"); begin for (i=1; i<=10; i++) f>>a[i]; reset(f); f.close(); for i:=1 to 10 do read(f,a[i]); cout<<"b) Lim stanga: "; close(f); cin>>x; n:=0; cout<<" Lim dreapta: "; write('Lim stanga: '); cin>>y; readln(x); for (i=1; i<=10; i++) write('Lim dreapta: '); if (a[i]>=x && a[i]<=y && readln(y); a[i] % 2 == 0) for i:=1 to 10 do n++; if (a[i]>=x) and (a[i]<=y) cout<<"Nr de elem pare din [ and (a[i] mod 2 = 0) <<x<<","<<y<<"]: <<n<<endl; then n:=n+1; } writeln('b) Nr de elem pare din [',x,',',y,']: ',n); void sortare() end; { procedure sortare; int i,j; var i,j,x:integer; ofstream g("date.out"); begin ifstream f("date.in"); assign(g,'date.out'); for (i=1; i<=10; i++) rewrite(g); reset(f); f>>a[i]; for i:=1 to 10 do read(f,a[i]); f.close(); close(f); for (i=1; i<=9; i++) for i:=1 to 9 do for (j=i+1; j<=10; j++) for j:=i+1 to 10 do if (a[i]>a[j])

if a[i]>a[j] then begin x:=a[i]; a[i]:=a[j]; a[j]:=x; end; for i:=1 to 10 do write(g,a[i],' '); close(g); end; begin clrscr; creare; assign(f,'date.in'); write('Sirul generat: '); afisare; min_max; interval; sortare; end.

{ x=a[i]; a[i]=a[j]; a[j]=x; } for (i=1; i<=10; i++) g<<a[i]<<" "; g.close(); } void main() { clrscr(); creare(); cout<<"Sirul generat: "; afisare(); min_max(); interval(); sortare(); }

Subiectul Nr.21 S se realizeze un program care s raspund urmtoarelor solicitri. Sa se creeze fiierul text date.in care s conin un ir de 10 numere ntregi aleatoare mai mici dect 100. Cerine d) S se scrie un subprogram care s returneze cel mai mic multiplu comun dintre elementele din fiierul date.in;

e) S se scrie un subprogram care s insereze ntre ultimul i penultimul element al irului din fiierul date.in media aritmetic a lor; f) Scriei n fiierul text date.out irul de mai sus ordonat descresctor. Observaii - n fiierul de intrare am generat valori nenule i mici deoarece la cerina a) avem de calculat cmmmc - pentru cerina b) se lucreaz cu un vector de numere reale Am folosit subprogramele: - CREARE: acesta creaz structura cerut de date - AFIARE: citete datele din fiierul de intrare i le afieaz pe ecran - CMMMC: citete datele din fiierul de intrare i afieaz cmmmc al elementelor citite din fiier, dupa formula: [x; y]=a*b / (a; b), iar (x; y) se afl cu algoritmul lui Euclid; - INSERARE: citete datele din fiierul de intrare i realizeaz inserarea cerut - SORTARE: citete datele din fiierul de intrare i le sorteaz, dup care le scrie n fiierul de ieire uses crt; var a:array[1..20] of integer; f,g:text; procedure creare; var i:integer; begin assign(f,'date.in'); rewrite(f); randomize; for i:=1 to 10 do write(f,1+random(10),' '); close(f); end; #include <iostream.h> #include <conio.h> #include <stdlib.h> #include <fstream.h> int a[200]; void creare() { int i; ofstream f("date.in"); randomize(); for (i=1; i<=10; i++) f<<1+random(10)<<" "; f.close();

} procedure afisare; var i:integer; begin reset(f); for i:=1 to 10 do begin read(f,a[i]); write(a[i],' '); end; writeln; clodse(f); end; procedure cmmmc:longint; var mc,i,x,y,r:integer; begin reset(f); for i:=1 to 10 do read(f,a[i]); close(f); mc:=a[1]; for i:=2 to 10 do begin x:=a[i]; y:=mc; while x mod y <> 0 do begin r:=x mod y; x:=y; y:=r; end; mc:=a[i] div y * mc; end; writeln(a) Cmmmc=,mc); end; void afisare() { int i; ifstream f("date.in"); for (i=1; i<=10; i++) { f>>a[i]; cout<<a[i]<<" "; } cout<<endl; f.close(); } void cmmmc() { long mc,i,x,y,r; ifstream f("date.in"); for (i=1; i<=10; i++) f>>a[i]; f.close(); mc=a[1]; for (i=2; i<=10; i++) { x=a[i]; y=mc; while (x % y) { r=x % y; x=y; y=r; } mc=a[i] / y * mc; } cout<<a) Cmmmc=<<mc <<endl; } void inserare()

procedure inserare; var b:array[1..11] of real; i:integer; begin reset(f); for i:=1 to 10 do read(f,a[i]); close(f); for i:=1 to 9 do b[i]:=a[i]; b[11]:=a[10]; b[10]:=(a[9]+a[10])/2; write('b) sirul dupa inserare: '); for i:=1 to 11 do write(b[i]:0:1,' '); writeln; end; procedure sortare; var i,j,x:integer; begin assign(g,'date.out'); rewrite(g); reset(f); for i:=1 to 10 do read(f,a[i]); close(f); for i:=1 to 9 do for j:=i+1 to 10 do if a[i]<a[j] then begin x:=a[i]; a[i]:=a[j]; a[j]:=x; end; for i:=1 to 10 do write(g,a[i],' '); close(g); end;

{ float b[12]; int i; ifstream f("date.in"); for(i=1; i<=10; i++) f>>a[i]; f.close(); for (i=1; i<=9; i++) b[i]=a[i]; b[11]=a[10]; b[10]=(a[9]+a[10])/2.0; cout<<"b) sirul dupa inserare: "; for (i=1; i<=11; i++) cout<<b[i]<<" "; cout<<endl; } void sortare() { int i,j,x; ofstream g("date.out"); ifstream f("date.in"); for (i=1; i<=10; i++) f>>a[i]; f.close(); for (i=1; i<=9; i++) for (j=i+1; j<=10; j++) if (a[i]<a[j]) { x=a[i]; a[i]=a[j]; a[j]=x; } for (i=1; i<=10; i++) g<<a[i]<<" "; g.close(); } void main() { clrscr(); creare(); cout<<"Sirul generat: ";

begin clrscr; creare; assign(f,'date.in'); write('Sirul generat: '); afisare; cmmmc; inserare; sortare; end.

afisare(); cmmmc(); inserare(); sortare(); }

Subiectul Nr.22 S se realizeze un program care s raspund urmtoarelor solicitri. S se creeze fiierul text date.in care s conina o matrice cu numere ntregi cu 4 linii i 4 coloane. Cerine d) S se scrie un subprogram care s returneze elementul minim al matricei i numrul lui de apariii; e) S se scrie un subprogram care s determine numrul elementelor de tip palindrom de sub diagonala principal a matricei (numr palindrom este un ir de cel puin dou cifre care citit de la dreapta la stnga este identic cu numrul citit de la stnga la dreapta); f) Scriei n fiierul text date.out elementele de pe prima linie a matricei de mai sus ordonate cresctor. Am folosit subprogramele: - CREARE: creaz structura cerut de date - AFIARE: citete datele din fiierul de intrare i le afiseaza pe ecran

- MINIM: citete datele din fiierul de intrare, afl i afieaz minimul i poziiiile n care acesta apare n matrice; - PALINDROM: primete ca parametru numrul natural x; dac x este palindrom, atunci returneaz valoarea logic ADEVARAT, iar n caz contrar, valoarea logic FALS - NR_PALINDROM: citete datele din fiierul de intrare, calculeaz i returneaz n programul principal numrul de palindroame de sub diagonala principal; - SORTARE: citete datele din fiierul de intrare, depune prima linie a matricei ntr-un vector, pe care l sorteaz i l scrie n fiierul de ieire uses crt; var a:array[1..10,1..10] of integer; f,g:text; procedure creare; var i,j:integer; begin assign(f,'date.in'); rewrite(f); randomize; for i:=1 to 4 do for j:=1 to 4 do write(f,random(100),' '); close(f); end; procedure afisare; var i,j:integer; begin reset(f); for i:=1 to 4 do begin for j:=1 to 4 do #include <iostream.h> #include <conio.h> #include <stdlib.h> #include <fstream.h> int a[10][10]; void creare() { int i,j; ofstream f("date.in"); randomize(); for (i=1; i<=4; i++) { for(j=1; j<=4; j++) f<<random(100)<<" "; f<<endl; } f.close(); } void afisare() { int i,j; ifstream f("date.in");

begin read(f,a[i,j]); write(a[i,j],' '); end; writeln; end; writeln; close(f); end; procedure minim; var m,i,j:integer; begin reset(f); for i:=1 to 4 do for j:=1 to 4 do read(f,a[i,j]); close(f); m:=a[1,1]; for i:=1 to 4 do for j:=1 to 4 do if a[i,j]<m then m:=a[i,j]; writeln('a) Minimul: ',m,'. Pozitiile in care apare el: '); for i:=1 to 4 do for j:=1 to 4 do if a[i,j]=m then write('(',i,',',j,') '); writeln; end; function palindrom(x:integer):boolean ; var xr,z:integer; begin xr:=0; z:=x;

for (i=1; i<=4; i++) { for (j=1; j<=4; j++) { f>>a[i][j]; cout<<a[i][j]<<" "; } cout<<endl; } cout<<endl; f.close(); } void minim() { int i,j,m; ifstream f("date.in"); for(i=1; i<=4; i++) for (j=1; j<=4; j++) f>>a[i][j]; f.close(); m=a[1][1]; for(i=1; i<=4; i++) for (j=1; j<=4; j++) if (a[i][j]<m) m=a[i][j]; cout<<a) Minimul: <<m<< . Poz in care apare el: <<endl; for(i=1; i<=4; i++) for (j=1; j<=4; j++) if(a[i][j]==m) cout<<(<<i<<,<<j<<) ; cout<<endl; } int palindrom(int x) { int xr,z;

while z<>0 do begin xr:=xr*10 + z mod 10; z:=z div 10; end; if x=xr then palindrom:=true else palindrom:=false; end; } function nr_palind:integer; var i,j,nr:integer; begin reset(f); nr:=0; for i:=1 to 4 do for j:=1 to 4 do read(f,a[i,j]); close(f); for i:=1 to 4 do for j:=1 to 4 do if (i>j) and palindrom(a[i,j]) then nr:=nr+1; nr_palind:=nr; end; procedure sortare; var i,j,x:integer; v:array[1..4] of integer; begin assign(g,'date.out'); rewrite(g); reset(f); for j:=1 to 4 do read(f,v[j]); close(f); for i:=1 to 3 do for j:=i+1 to 4 do

xr=0; z=x; while (z) { xr=xr*10 + z % 10; z=z / 10; } if (x==xr) return 1; else return 0; int nr_palind() { int i,j; ifstream f("date.in"); nr=0; for (i=1; i<=4; i++) for (j=1; j<=4; j++) f>>a[i][j]; f.close(); for (i=1; i<=4; i++) for (j=1; j<=4; j++) if (i>j && palindrom(a[i] [j]) && a[i][j]>9) nr++; return nr; } void sortare() { int i,j,x,v[5]; ofstream g("date.out"); ifstream f("date.in"); for (j=1; j<=4; j++) f>>v[i];

if v[i]>v[j] then begin x:=v[i]; v[i]:=v[j]; v[j]:=x; end; for i:=1 to 4 do write(g,v[i],' '); close(g); end; begin clrscr; creare; assign(f,'date.in'); writeln('Matricea generata: '); afisare; minim; write('b) Nr de palindroame de sub diag princ: ',nr_palind); sortare; end.

f.close(); for (i=1; i<=3; i++) for (j=i+1; j<=4; j++) if (v[i]>v[j]) { x=v[i]; v[i]=v[j]; v[j]=x; } for (i=1; i<=4; i++) g<<v[i]<<" "; g.close(); } void main() {clrscr(); creare(); cout<<"Matricea generata:"<<endl; afisare(); minim(); cout<<"b) Nr de palindroame de sub diag princ: "<< nr_palind() <<endl; sortare(); }

Subiectul Nr.23 S se realizeze un program care s raspund urmtoarelor solicitri. S se creeze fiierul text date.in care s conina o matrice cu numere ntregi cu 4 linii i 4 coloane. Cerine d) S se scrie un subprogram care s returneze elementul maxim de sub diagonala secundar a matricei din fiierul date.in; e) S se scrie un subprogram care s determine cte dintre elementele matricei sunt numere perfecte;

f) Scriei n fiierul text date.out elementele de pe coloana a doua ale matricei de mai sus ordonate cresctor. Am folosit subprogramele: - CREARE: creaz structura cerut de date - AFIARE: citete datele din fiierul de intrare i le afieaz pe ecran - MAXIM: citete datele din fiierul de intrare i afieaz maximul de sub diagonala secundar a matricei - NR_PERF: citete datele din fiierul de intrare i numr cte numere perfecte sunt n matrice; utilizeaz subprogramul: - PERFECT, care primete un parametru natural x i returneaz valoarea logic ADEVARAT sau FALS, dup cum x este sau nu un numr perfect; - SORTARE: citete datele din fiierul de intrare, selecteaz ntr-un vector coloana a doua din matrice, sorteaza vectorul i l scrie n fiierul de ieire uses crt; var a:array[1..10,1..10] of integer; f,g:text; procedure creare; var i,j:integer; begin assign(f,'date.in'); rewrite(f); randomize; for i:=1 to 4 do for j:=1 to 4 do write(f,1+random(10),' '); close(f); end; #include <iostream.h> #include <conio.h> #include <stdlib.h> #include <fstream.h> int a[10][10]; void creare() { int i,j; ofstream f("date.in"); randomize(); for (i=1; i<=4; i++) { for(j=1; j<=4; j++) f<<1+random(10)<<" "; cout<<endl; }

procedure afisare; var i,j:integer; begin reset(f); for i:=1 to 4 do for j:=1 to 4 do read(f,a[i,j]); close(f); for i:=1 to 4 do begin for j:=1 to 4 do write(a[i,j]:5); writeln; end; writeln; end; procedure maxim; var i,j.m:integer; begin reset(f); for i:=1 to 4 do for j:=1 to 4 do read(f,a[i,j]); close(f); m:=a[4,4]; for i:=1 to 4 do for j:=1 to 4 do if (a[i,j]>m) and (i+j >4+1) then m:=a[i,j]; writeln('a) Maximul de sub diag sec: ',m); end; function perfect(x:integer):boolean;

f.close(); } void afisare() { int i,j; ifstream f("date.in"); for (i=1; i<=4; i++) for (j=1; j<=4; j++) f>>a[i][j]; f.close(); for (i=1; i<=4; i++) { for (j=1; j<=4; j++) cout<<a[i][j]<<" "; cout<<endl; } cout<<endl; } void maxim() { int i,j,m; ifstream f("date.in"); for(i=1; i<=4; i++) for (j=1; j<=4; j++) f>>a[i][j]; f.close(); m=a[4][4]; for(i=1; i<=4; i++) for (j=1; j<=4; j++) if (a[i][j]>m && i+j>4+1) m=a[i][j]; cout<<"a) Maximul de sub diag sec: "<<m<<endl; } int perfect(int x)

var d,nd,s: integer; begin s:=0; for d:=1 to x div 2 do if x mod d = 0 then s:=s+d; if (s=x) and (x<>0) then perfect:=true else perfect:=false; end; function nr_perf:integer; var i,j:integer; begin reset(f); for i:=1 to 4 do for j:=1 to 4 do read(f,a[i,j]); close(f); nr:=0; for i:=1 to 4 do for j:=1 to 4 do if perfect(a[i,j]) then nr:=nr+1; nr_perf:=nr; end; procedure sortare; var i,j,x:integer; v:array[1..4] of integer; begin assign(g,'date.out'); rewrite(g); reset(f); for i:=1 to 4 do for j:=1 to 4 do read(f,a[i,j]);

{ int d,nd,s=0; for (d=1; d<=x/2; d++) if (x % d == 0) s=s+d; if (s==x && x!=0) return 1; else return 0; } int nr_perf() { int i,j,nr; ifstream f("date.in"); nr=0; for (i=1; i<=4; i++) for (j=1; j<=4; j++) f>>a[i][j]; f.close(); for (i=1; i<=4; i++) for (j=1; j<=4; j++) if (perfect(a[i][j])) nr++; return nr; } void sortare() { int i,j,x,v[5]; ofstream g("date.out"); ifstream f("date.in"); for (i=1; i<=4; i++) for(j=1; j<=4; j++) f>>x; f.close(); for (i=1; i<=4; i++)

close(f); v[i]=a[i][2]; for i:=1 to 4 do f.close(); v[i]:=a[i,2]; for (i=1; i<=3; i++) for i:=1 to 3 do for (j=i+1; j<=4; j++) for j:=i+1 to 4 do if (v[i]>v[j]) if v[i]>v[j] { x=v[i]; v[i]=v[j]; v[j]=x; } then begin for (i=1; i<=4; i++) g<<v[i]<<" x:=v[i]; v[i]:=v[j]; v[j]:=x; "; end; g.close(); for i:=1 to 4 do write(g,v[i],' '); } close(g); end; void main() { begin clrscr(); creare(); clrscr; creare; cout<<"Matricea generata: assign(f,'date.in'); "<<endl; writeln('Matricea generata: afisare(); '); maxim(); afisare; cout<<"b) Nr de numere maxim; perfecte din matrice: writeln('b) Nr de elem "<<nr_perf()<<endl; perfecte din sortare(); matrice:,nr_perf); } sortare; end. Subiectul Nr.24 S se realizeze un program care s raspund urmtoarelor solicitri. S se creeze fiierul text date.in care s conin o matrice cu numere ntregi cu 4 linii i 4 coloane. Cerine d) S se scrie un subprogram care s returneze suma elementelor pare de pe marginea exterioar a matricei;

e)

S se scrie un subprogram care s determine numrul elementelor matricei egale cu o valoare x dat de la tastatur; f) Scriei in fiierul text date.out elementele de pe linia a doua ale matricei de mai sus ordonate cresctor. Am folosit subprogramele: - CREARE: creaz structura cerut de date - AFIARE: citete datele de intrare din fiierul de intrare i afieaz pe ecran datele citite din fiier - SUMA: citete datele din fiierul de intrare, calculeaz i returneaz suma elementelor de pe marginile matricei; - NX: citete datele din fiierul de intrare i apoi o valoare x, dup care numr cte elemente egale cu x se gsesc n matrice, numr pe care l returneaz - SORTARE: citete datele din fiierul de intrare, depune elementele din linia a doua a matricei ntr-un vector pe care l sorteaz i l afieaz n fiierul de ieire. uses crt; var a:array[1..20,1..20] of integer; f,g:text; procedure creare; var i,j:integer; begin assign(f,'date.in'); rewrite(f); randomize; for i:=1 to 4 do begin for j:=1 to 4 do write(f,random(100),' '); writelnf); end #include <iostream.h> #include <conio.h> #include <stdlib.h> #include <fstream.h> int a[10][10]; void creare() { int i,j; ofstream f("date.in"); randomize(); for (i=1; i<=4; i++) { for(j=1; j<=4; j++) f<<random(100)<<" ";

close(f); end; procedure afisare; var i,j:integer; begin reset(f); for i:=1 to 4 do for j:=1 to 4 do read(f,a[i,j]); closef); for i:=1 to 4 do begin for j:=1 to 4 do write(a[i,j]:5); writeln; end; writeln; end; function suma:integer; var s,i,j:integer; begin s:=0; reset(f); for i=1 to 4 do for j=1 to 4 do readf,a[i,j]); close(f); for i:=1 to 4 do if a[i,1] mod 2 = 0 then s:=s+a[i,1]; for i:=1 to 4 do if a[i,4] mod 2 = 0 then s:=s+a[i,4]; for j:=2 to 3 do if a[1,j] mod 2 = 0 }

f<<endl; } f.close(); void afisare() { int i,j; ifstream f("date.in"); for (i=1; i<=4; i++) for (j=1; j<=4; j++) f>>a[i][j]; for i=1; i<=4; i++) { for j=1; j<=4; j++) cout<<a[i][j]<< ; cout<<endl; } cout<<endl; f.close(); } int suma() { int s=0,i,j; for(i=1; i<=4; i++) for(j=1; i<=4; j++) f>>a[i][j]; f.close(); for (i=1; i<=4; i++) if (a[i][1] % 2 == 0) s=s+a[i][1]; for (i=1; i<=4; i++) if (a[i][4] % 2 == 0) s=s+a[i][4]; for (j=2; j<=3; j++)

then s:=s+a[1,j]; for j:=2 to 3 do if a[4,j] mod 2 = 0 then s:=s+a[4,j]; suma:=s; end; } function nx:integer; var i,j,n,x:integer; begin reset(f); for i:=1 to 4 do for j:=1 to 4 do read(f,a[i,j]); close(f); write('Valoarea x: ');readln(x); n:=0; for i:=1 to 4 do for j:=1 to 4 do if a[i,j]=x then n:=n+1; nx:=n; end; procedure sortare; var i,j,x:integer; v:array[1..4] of integer; begin assign(g,'date.out'); rewrite(g); reset(f); for i:=1 to 4 do for j:=1 to 4 do read(f,a[i,j]); close(f); for j:=1 to 4 do v[j]:=a[2,j];

if (a[1][j] % 2 == 0) s=s+a[1][j]; for (j=2; j<=3; j++) if (a[4][j] % 2 == 0) s=s+a[4][j]; return s; int nx() { int i,j,n,x; ifstream f("date.in"); for (i=1; i<=4; i++) for (j=1; j<=4; j++) f>>a[i][j]; cout<<"Valoarea x: "; cin>>x; n=0; for (i=1; i<=4; i++) for (j=1; j<=4; j++) if (a[i][j]==x) n++; return n; } void sortare() { int i,j,x,v[5]; ofstream g("date.out"); ifstream f("date.in"); for (i=1; i<=4; i++) for(j=1; j<=4; j++) f>>a[i][j]; f.close(); for (j=1; j<=4; j++) v[j]=a[2][j]; for (i=1; i<=3; i++)

for i:=1 to 3 do for j:=i+1 to 4 do if v[i]>v[j] then begin x:=v[i]; v[i]:=v[j]; v[j]:=x; end; for i:=1 to 4 do write(g,v[i],' '); close(g); end; begin clrscr; creare; assign(f,'date.in'); writeln('Matricea generata: '); afisare; writeln('a) ',suma); writeln('b) ,nx); sortare; end.

for (j=i+1; j<=4; j++) if (v[i]>v[j]) { x=v[i]; v[i]=v[j]; v[j]=x; } for (i=1; i<=4; i++) g<<v[i]<<" "; g.close(); } void main() { clrscr(); creare(); cout<<"Matricea generata: "<<endl; afisare(); cout<<"a) "<<suma()<<endl; cout<<"b) "<<nx()<<endl; sortare(); }

Subiectul Nr.25 S se realizeze un program care s raspund urmtoarelor solicitri. S se creeze fiierul text date.in care s conin o matrice cu numere ntregi cu 4 linii i 4 coloane. Cerine d) S se scrie un subprogram care s returneze elementul maxim de pe diagonala principal a matricei din fiierul date.in; e) S se scrie un subprogram care s determine cte dintre elementele matricei sunt numere perfecte;

f) Scriei n fiierul text date.out elementele de pe linia a doua ale matricei de mai sus ordonate cresctor. Am folosit subprogramele: - CREARE: creaz structura cerut de date - AFIARE: citete datele din fiierul de intrare i le afieaz pe ecran - MAXIM: citete datele din fiierul de intrare, afl maximul din diagonala principal a matricei, maxim pe care l returneaz; - NR_PERF: citete datele din fisierul de intrare i returneaz numrul de numere perfecte din matrice; pentru aceasta, el se folosete de subprogramul: - PERFECT, care primete parametrul natural x i returneaz ADEVARAT sau FALS, dup cum x este perfect sau nu - SORTARE: citete datele din fiierul de intrare, depune linia a doua a matricei ntr-un vector pe care l sorteaz, dupa care l scrie n fiierul de ieire. uses crt; var a:array[1..20,1..20] of integer; f,g:text; procedure creare; var i,j:integer; begin assign(f,'date.in'); rewrite(f); randomize; for i:=1 to 4 do begin for j:=1 to 4 do write(f,random(100),' '); writeln(f); end; #include <iostream.h> #include <conio.h> #include <stdlib.h> #include <fstream.h> int a[10][10]; void creare() { int i,j; ofstream f("date.in"); randomize(); for (i=1; i<=4; i++) { for(j=1; j<=4; j++) f<<random(100)<<" "; f<<endl; }

close(f); end; procedure afisare; var i,j:integer; begin reset(f); for i:=1 to 4 do for j:=1 to 4 do read(f,a[i,j]); close(f); for i:=1 to 4 do begin for j:=1 to 4 do write(a[i,j]:5); writeln; end; writeln; end; function maxim:integer; var m,i,j:integer; begin reset(f); for i:=1 to 4 do for j:=1 to 4 do readf,a[i,j]); close(f); m:=a[1,1]; for i:=2 to 4 do if a[i,i] > m then m:=a[i,i]; maxim:=m; end; function

f.close(); } void afisare() { int i,j; ifstream f("date.in"); for (i=1; i<=4; i++) for (j=1; j<=4; j++) f>>a[i][j]; f.close(); for (i=1; i<=4; i++) { for j=1; j<=4; j++) cout<<a[i][j]<<" "; } cout<<endl; } cout<<endl; } int maxim() { int i,j,m; ifstream f("date.in"); for (i=1; i<=4; i++) for(j=1; j<=4; j++) f>>a[i][j]; f.close(); m=a[1][1]; for(i=2; i<=4; i++) if (a[i][i]>m) m=a[i][i]; return m; } int perfect(int x)

perfect(x:integer):boolean; var d,nd,s: integer; begin s:=0; for d:=1 to x div 2 do if x mod d = 0 then s:=s+d; if s=x then perfect:=true else perfect:=false; end; function nr_perf:integer; var nr,i,j:integer; begin reset(f); for i:=1 to 4 do for j:=1 to 4 do read(f,a[i,j]); close(f); nr:=0; for i:=1 to 4 do for j:=1 to 4 do if perfect(a[i,j]) then nr:=nr+1; nr_perf:=nr; end; procedure sortare; var i,j,x:integer; v:array[1..4] of integer; begin assign(g,'date.out'); rewrite(g); reset(f); for i:=1 to 4 do for j:=1 to 4 do read(f,a[i,j]);

{ int d,nd,s=0; for (d=1; d<=x/2; d++) if (x % d == 0) s=s+d; if (s==x && x!=0) return 1; else return 0; } int nr_perf() { int i,j,nr; ifstream f("date.in"); nr=0; for (i=1; i<=4; i++) for (j=1; j<=4; j++) f>>a[i][j]; f.close(); for (i=1; i<=4; i++) for (j=1; j<=4; j++) if (perfect(a[i][j])) nr++; return nr; } void sortare() { int i,j,x,v[5]; ofstream g("date.out"); ifstream f("date.in"); for (i=1; i<=4; i++) for(j=1; j<=4; j++) f>>a[i][j]; f.close(); for (j=1; j<=4; j++)

close(f); for j:=1 to 4 do v[j]:=a[2,j]; for i:=1 to 3 do for j:=i+1 to 4 do if v[i]>v[j] then begin x:=v[i]; v[i]:=v[j]; v[j]:=x; end; for i:=1 to 4 do write(g,v[i],' '); end; begin clrscr; creare; assign(f,'date.in'); writeln('Matricea generata: '); afisare; writeln('a) ',maxim); writeln('b) ',nr_perf); sortare; end.

v[j]=a[2][j]; for (i=1; i<=3; i++) for (j=i+1; j<=4; j++) if (v[i]>v[j]) { x=v[i]; v[i]=v[j]; v[j]=x; } for (i=1; i<=4; i++) g<<v[i]<<" "; g.close(); } void main() { clrscr(); creare(); cout<<"Matricea generata: "<<endl; afisare(); cout<<"a) "<<maxim()<<endl; cout<<"b) "<<nr_perf()<<endl; sortare(); }

CLASELE DE MATEMATICA-INFORMATIC INTENSIV INFORMATIC Subiectul nr.1


Se citete de la tastatur un numr natural n (1 n 1000). Se cere: i. S se creeze o list simplu nlnuit care s conin primele n numere prime; elementele listei astfel obinute se vor afia pe ecran. j. S se elimine din list numerele din intervalul format de numerele naturale a, b citite de la tastatur; elementele

listei obinute dup eliminare se vor scrie pe prima linie a fiierului date.out. Exemplu: a) Pentru n=7, se va afia pe ecran lista: 2 3 5 7 11 13 17 b) Pentru a=15, b=4 introduse de la tastatur, fiierul date.out va conine: 2 3 17

functia prim primele n numere prime care se depun in lista simplu inlantuita , folosind subprogramul adaug/creare; se parcurge lista creata si se afiseaza pe ecran, utilizand subprogramul afisare; se selecteaza numerele prime din intervalul [a,b], aflate in lista si se elimina utilizand subprogramul sterge; se parcurge lista actualizata si se terc elementele ei in fisierul date.out, folosind subprogramul scriefis. Varianta C Varianta PASCAL #include <fstream.h> type struct=^nod; typedef struct nod nod=record { inf:integer;next:struct; int nr; nod *next; end; }; var fstream f("date.out",ios::out); p,s:struct;f:text;i,n,a,b:integer; function typedef nod* pnod; nrdiv(nr:integer):integer; var d,nrd:integer; pnod s; begin int n,a,b,k; nrd:=0; int prim(int i) for d:=1 to nr do {int k1; if nr mod d=0 then for (k1=2;k1<=i/2;k1++) nrd:=nrd+1; if (i%k1==0) return 0; nrdiv:=nrd;

Rezolvare: se citeste de la tastatura numarul n si se genereaza cu

end; function prim(nr:integer):boolean; begin if nrdiv(nr)=2 then prim:=true else prim:=false; end; procedure adaug(var p:struct;nr:integer); var q:struct; begin new(q); q^.inf:=nr; q^.next:=p; p:=q; end; procedure sterge(p:struct;a,b:integer); var sterg:integer;q:struct; begin sterg:=1; while p<>nil do begin if(p^.next^.inf>a)and (p^.next^.inf<b) then begin q:=p^.next;p^.next:=q^.next; dispose(q);sterg:=0; end; if sterg=1 then p:=p^.next; sterg:=1; end; end; procedure afis(p:struct); begin

return 1;} void creare(pnod &s) {pnod p;int i,k; s=new nod; s->nr=2; p=s; k=1; i=2; while (k<=n){ p->next=new nod; p=p->next; while(!prim(i)) i++; p->nr=i; i++; k++; } p->next=NULL; } void sterge(pnod s) { pnod q,p=s; while ( p->next) if (p->next->nr>a)&& (p->next->nr<b)) { q=p->next; p->next=q->next; delete q; } else p=p->next; } void afisare(pnod s){ pnod p=s->next;

while p<>nil do begin write(p^.inf:4); p:=p^.next; end; end; procedure scriefis(p:struct); begin while p<>nil do begin write(f,p^.inf,' '); p:=p^.next; end; end; begin assign(f,'date.out'); rewrite(f); write('n= ');readln(n); i:=2; while n>0 do begin if prim(i) then begin adaug(p,i); n:=n-1; end; i:=i+1; end; adaug(p,333);afis(p^.next); readln(a,b); if a>b then begin i:=a;a:=b; b:=i; end; sterge(p,a,b);scriefis(p^.next); close(f); end.

cout<<" lista contine: "; while (p){ cout<<p->nr<<" "; p=p->next;} cout<<" .\n"; } void scriefis(pnod s){ pnod p=s->next; while (p) { f<<p->nr<<" "; p=p->next; } } void main() { cout<<endl<<" n= ";cin>>n; creare(s); afisare(s); cout<<endl<<" a= ";cin>>a; cout<<endl<<" b= ";cin>>b; if (a>b) { k=a; a=b;b=k; } sterge(s); scriefis(s); f.close(); }

Subiectul nr.2
Se d un tablou unidimensional cu n (1 componente numere naturale. n 100)

i.

S se afieze cifrele numrului celui mai mare care se poate obine din cifrele elementului minim i ale celui maxim din vector. j. S se afieze cte numere din tablou sunt ptrate perfecte. Datele de intrare se vor citi din fiierul date.in astfel: - pe prima linie se gsete n - pe linia a doua se gsesc elementele tabloului. Datele de ieire se vor scrie pe ecran, astfel: - pe prima linie, numrul obinut la punctul a - pe linia a doua, un mesaj n care s fie inclus numrul cerut la punctul b. Exemplu: Fiierul de intrare date.in: 6 271 109 28 713 14 36 Se afieaz: 74311 Tabloul are 1 patrat perfect Rezolvare: datele se citesc din fisierul date.in : pe prima linie se afla numarul de elemente n, iar pe linia urmatoare elementele tabloului, memorate in vectorul v[i],i=1n; se cauta elementul maxim si respectiv minim din vectorul v si se depun in max, respectiv min;pentru fiecare din aceste numere se gasesc cifrele care le compun si se depun in vectorul cif, prin intermediul subprogramului add. se sorteaza elementele vectorului cif descrescator si se afiseaza, obtinandu-se astfel cel mai mare numar cerut de problema; se verifica daca elementele vectorului v sunt patrate perfecte prin intermediul functiei patp

s-au folosit doua modalitati de rezolvare a acestei probleme:


v[i ] este egaka cu se verifica daca partea intreaga a lui v[i ] (PASCAL) sau daca v[i ] * v[i ] =v[i]( C++). Varianta PASCAL Varianta C #include <fstream.h> var #include <stdlib.h> aux,nn,max,min:integer; #include <math.h> i,n,ordonat:integer; #define nmax 111 fstream f("date.in",ios::in); v,cif:array[1..20] of integer; int n,v[nmax],min,max,cif[nmax]; f:text; int i,j=1; procedure patp; int patp(int x) begin aux:=0; { for i:= 1 to nn do int rad=int(sqrt(x)); if int(sqrt(v[i]))=sqrt(v[i]) then aux:=aux+1; return(rad*rad==x); end; } procedure add; void Add(int x) begin i:=0; { int aux; while max>0 do begin aux=x; i:=i+1; while (aux!=0){ cif[i]:=max mod 10; cif[j]=aux%10; max:=max div 10; aux/=10; end; j++;} while min>0 do begin } i:=i+1; cif[i]:=min mod 10; void main() min:=min div 10; { end; int ok=1,aux; n:=i; end; f>>n; begin for(i=1;i<=n;i++) f>>v[i]; assign(f,'date.in'); reset(f); f.close(); readln(f,n); nn:=n; for(min=max=v[1],i=2;i<=n;i++) for i:=1 to n do { read(f,v[i]); if(v[i]>max) max=v[i];

max:=v[1];min:=v[1]; for i:=2 to n do begin if v[i]>max then max:=v[i]; if v[i]<min then min:=v[i]; end; add; ordonat:=0; while ordonat=0 do begin ordonat:=1; for i:=1 to n-1 do if cif[i]<cif[i+1] then begin ordonat:=0;aux:=cif[i; cif[i]:=cif[i+1]; cif[i+1]:=aux; end; end; for i:=1 to n do write(cif[i]); writeln; patp; writeln(' Tabloul are,aux, patrate perfecte ); end.

if(v[i]<min) } Add(min); Add(max); j=j-1; cout<<endl; while(ok==1) { ok=0;

min=v[i];

for(i=1;i<=j-1;i++) if(cif[i]<cif[i+1]) { ok=1; aux=cif[i];cif[i]=cif[i+1]; cif[i+1]=aux; } } for(i=1;i<=j;i++) cout<<cif[i]; for(j=0,i=1;i<=n;i++) j+=patp(v[i]); cout<<endl<<" Tabkoul are "<<j<<" patrate perfecte"; }

Subiectul nr. 3
Fie citete de la tastatur un numr n (0<n<100) i apoi un ir de n numere ntregi. a. S se construiasc o list simplu nlnuit care s conin doar numerele naturale ale irului, n ordinea n care au fost introduse. b. S se insereze n faa fiecrui numr de tip palindrom succesorul su. Un numr este palindrom dac citit de la

stnga la dreapta este egal cu numrul citit de la dreapta la stnga. Datele de ieire se vor scrie n fiierul date.out, astfel: - pe prima linie, elementele listei obinute la punctul a) - pe linia a doua, elementele listei obinute dup inserare. Exemplu: Pentru n=7 i elementele 343 -73 12 34 767 454 -101 introduse de la tastatur, fiierul date.out va conine: 343 12 34 767 454 344 343 12 34 768 767 455 454 Rezolvare: in subprogramul palin se verifica daca un numar este palindrom, folosind doua metode diferite. In PASCAL am calculat inversul numarului si am verificat daca numarul este egal cu inversul sau. In C am cautat cifrele numarului si am verificat daca cifrele egal departate de cifra din mijloc sunt egale; lista simplu inlantuita se creaza in subprogramul creare care verifica daca numarul este natural si il adauga in lista pe masura ce este citit, apeland subprogramul adaugsf; se parcurge lista si se depun elementele ei in fisierul date.out, prin intermediul subprogramului parcurgl1; in subprogramul schimbl2 modificam lista, adaugand in fata fiecarui numar palindrom succesorul lui; subprogramul apeleaza adauginc, care are rolul de a insera in fata elementului palindrom, noul element; in final se apeleaza din nou subprogramul parcurgl1 care pune in fisierul date.out lista actualizata.

Varianta PASCAL type nod=^elem; elem=record inf:integer; next:nod; end; var x:array[1..10] of integer; nr:longint; i,n:integer; f:text; s:nod; function palin(j:integer):boolean; var st,aux:integer; begin st:=0; aux:=j; while aux<>0 do begin st:=st*10+(aux mod 10); aux:=aux div 10; end; if j=st then palin:=true else palin:=false; end; procedure adaugsf(var p,u:nod; nr:integer); var q:nod; begin new(q);q^.inf:=nr; q^.next:=nil; if p<>nil then begin u^.next:=q;u:=q; end else begin p:=q; u:=q; end end; procedure creare( var p:nod); var u:nod;i:integer;

Varianta C #include<fstream.h> #include<stdlib.h> #include<math.h> typedef struct elem{ int inf; elem *next; }; long nr;long x[10]; int n,i; fstream f("date.out",ios::out); typedef elem* nod; nod s; int palin(long x) { int num=0,c[11],i; while (x) {c[++num]=x%10; x/=10;} for (i=1;i<=num/2;i++) if (c[i]!=c[num-i+1]) return 0; return 1; } void adaugsf(nod &p, nod &u, int nr){ nod q; q=new elem; q->inf=nr; q->next=NULL; if (!p) p=u=q; else{ u->next=q; u=q; } } void creare(nod &p){ int i; nod u;

begin p:=nil; u:=nil; write('n= ');readln(n);writeln; for i:=1 to n do begin read(x[i]); if x[i]>0 then adaugsf(p,u,x[i]); end; end; procedure adauginc (varant,p:nod;nr:integer); var q:nod; begin new(q); q^.inf:=nr; if ant=nil then begin q^.next:=p;s:=q; end else begin q^.next:=ant^.next; ant^.next:=q; end; end; procedure parcurgl1(p:nod); var ant,q:nod;nr:integer; begin ant:=nil; q:=p; while q<>nil do begin write(f,q^.inf,''); write(' ',q^.inf); q:=q^.next; end; if p=nil then write(f,'lista este vida'); writeln(f,' '); end; procedure schimbl2( p:nod); var ant,q:nod; nr:integer; begin ant:=nil; q:=p; while q<>nil do begin

p=u=NULL; cout<<"n= "; cin>>n; cout<<endl; for (i=1;i<=n;i++) {cin>>x[i]; if (x[i]>0) adaugsf(p,u,i);} } void adauginc(nod &p, int nr) { nod q; q=new elem; q->inf=nr; q->next=p; p=q; } void parcurgl1(nod p) { for ( nod q=p;q; q=q->next) f<<q->inf<<" "; if(!p) f<<"\n Lista este vida "; f<<endl; } void schimbl2(nod p) { int nr; for ( nod q=p;q; q=q->next)

if palin(q^.inf) then begin if(palin(q->inf)) nr:=q^.inf+1;adauginc(ant,q,nr); { end; nr=q->inf+1; ant:=q; q:=q^.next; adauginc(p,nr); end; } end; begin } assign(f,'date.out'); int main(){ rewrite(f); creare(s); creare(s); parcurgl1(s); parcurgl1(s); schimbl2(s); schimbl2(s); parcurgl1(s); parcurgl1(s); return 0; close(f); end.

Subiectul nr. 4
Se consider un ir de n numere ntregi distincte (1 20) i dou numere intregi a i b. n

a. S se afieze pe ecran toate elementele irului care nu sunt


n intervalul nchis ce se poate forma cu numerele a i b; b. S se ordoneze cresctor numai elementele situate ntre elementul minim i elementul maxim din irul dat i s se afieze pe ecran irul obinut dup ordonare. Datele de intrare se vor citi din fiierul date.in astfel: - pe prima linie se gsete n - pe linia a doua se gsesc cele n elemente ale irului - pe linia a treia se gsesc valorile lui a, respctiv b. Exemplu: Pentru fiierul date.in: 6 3 1 8 7 2 5 3

-1

Se vor afia pe ecran irurile 1 8 7 2 -1 3 1 8 2 4 7 -1 Rezolvare: se verifica daca a este mai mic decat b si in caz contrar se interschimba intre ele valorile;elementele din sir care nu apartin intervalului [a;b] se vor scrie pe ecran; datele se citesc din fisierul date.in si se depun intr-un vector; sortarea elementelor situate intre elementul minim si maxim din fisier se face in doua moduri: in programul PASCAL se foloseste sortarea prin interschimbare, in subprogramul sortare iar in programul C se foloseste quick-sort, in subprogramul quick; Varianta PASCAL Varianta C type vector=array[1..20] of #include <fstream.h> integer; #include <values.h> var v,aux:vector; a,b,de,i,n,max,min:integer; int n, v[21], a, b, aux[21]; f:text;pozmax,pozmin:byte; fstream f("date.in",ios::in); procedure minmax; int par(int p, int r) var i:integer; { begin int x = aux[r], i = p - 1, j, aux2; max:=v[1];min:=v[1]; for (j = p; j < r; j ++) pozmax:=1;pozmi ;n:=1; if (aux[j] <= x) for i:=2 to n do {i ++; begin aux2 = aux[i]; if v[i]<min then begin aux[i] = aux[j]; min:=v[i];pozmin:=i; aux[j] = aux2; } end; i ++; if v[i]>max then begin aux2 = aux[i]; max:=v[i];pozmax:=i; aux[i] = aux[r]; end; aux[r] = aux2; end; return i; end; } procedure sortare; void quick(int p, int r) var j,i:integer; gasit:boolean; {

begin gasit:=true; while gasit do begin gasit:=false; for i:=pozmin+1 to pozmax-2do if v[i]>v[i+1] then begin j:=v[i]; v[i]:=v[i+1]; v[i+1]:=j; gasit:=true end end; end; begin assign(f,'date.in'); reset(f); readln(f,n); for i:=1 to n do read(f,v[i] ); read(f,a);read(f,b); if a>b then begin de:=a; a:=b; b:=de end; writeln; for i:=1 to n do if (v[i]<a)or(v[i]>b) then write(v[i],' '); close(f); minmax; if pozmin>pozmax then begin de:=pozmin; pozmin:=pozmax; pozmax:=de; end; sortare;

if (p < r) { int q = par(p, r); quick(p, q - 1); quick(q + 1, r); } } int main() { int i;f>>n; for (i = 1; i <= n; i ++) f>>v[i]; f>>a;f>>b; if (a > b) {int aux = a; a = b; b = aux;} int min = MAXINT, pozmin, max = 0, pozmax, h = 0; cout<<endl; for (i = 1; i <= n; i ++) {if (v[i] < a || v[i] > b) cout<< v[i]<<" "; aux[++ h] = v[i]; if (v[i] > max) {max = v[i]; pozmax = h;} if (v[i] < min) {min = v[i]; pozmin = h;}} cout<<endl; if (h != 1) if (pozmax <= pozmin) quick(pozmax + 1, pozmin - 1);

writeln; for i:=1 to n do write(v[i],' '); readln; end.

else quick(pozmin + 1, pozmax - 1); for(i=1;i<=h;i++) cout<<aux[i]<<" "; f.close(); return 0; }

Subiectul nr. 5
Fie un ir de n (0<n<1000) numere ntregi. Se cere: i. S se verifice dac numerele din irul dat pot forma o mulime; j. S se scrie n ordine cresctoare factorii primi.din descompunerea elementului maxim din irul dat Datele de intrare se vor citi din fiierul date.in astfel: - pe prima linie se gsete n - pe linia a doua se gsesc elementele irului Datele de ieire se vor scrie pe ecran astfel: pe primul rnd un mesaj pe rndul urmtor factorii primi separai prin spaii Exemplu: Fisierul de intrare date.in: 5 80 64 50 96 45 Se afieaz pe ecran: Elementele din fiier pot forma o multime 2 3 Rezolvare: se verifica daca elementele din sir pot forma o multime, testand daca numerele sunt distincte, in subprogramul multime / mult.

factor/ factprim se vor determina factorii primi ai elementului maxim, care se scriu pe ecran. Varianta PASCAL Varianta C type vector=array[1..100] of #include <fstream.h> integer; long v[1000],n; var n,i,j,k,max:integer; v:vector;mult:boolean;f:text; fstream f("date.in",ios::in); procedure factor; void factprimi(long a) var fm,i:integer; { begin int x=2,fm; i:=2; do { repeat fm=0; fm:=0; while (a%x==0) while (max mod i =0) do { begin inc(fm); fm++; max:= max div i; a/=x; end; } if (fm <> 0) then write(i,' '); if (fm) cout<<x<<" "; inc(i); x++; until max=1;writeln; } while (a!=1); end; } procedure multime; int mult() var i,j:integer; { int i,j; begin for (i=1; i<=n; i++) mult:=true; {for (j=i+1; j<=n; j++) for i:=1 to n do if (v[i]==v[j]) return 0;} for j:=i+1 to n do return 1; if v[i]=v[j] then mult:=false; } if mult then writeln(' void main() elementele pot constitui {long max; int a,b; multime') f>>n; else for(a=1;a<=n;a++) { writeln(' elementele nu f>>v[a];

datele se citesc din fisierul date.in, iar in subprogramul

pot constitui o multime'); end; begin assign(f,'date.in'); reset(f); readln(f,n); for i:=1 to n do read(f,v[i]); max:=v[1]; for i:=2 to n do if v[i]>max then max:=v[i]; multime; factor; close(f); end.

if(a==1) max=v[1]; else if(max<v[a]) max=v[a];} if(mult()==1) cout<<endl<<"<<Elementele din fisier pot forma o multime>>"; else cout<<endl<<"<<Elementele din fisier nu pot forma o multime>>"; cout<<endl; factprimi(max); f.close();

Subiectul nr. 6
Se citete de la tastatur un numr natural n (0<n<1000). Se cere: i. S se verifice daca n este numr perfect. Un numr este perfect dac este egal cu suma tuturor divizorilor lui, afar de numrul nsui. j. S se creeze o list simplu nlnuit care s conin n numere naturale mai mici dect 1000, numere generate aleatoriu. Datele de ieire se vor scrie n fiierul date.out astfel: pe prima linie, un mesaj: n este/nu este numar perfect pe linia a doua elementele listei. Exemplu: Pentru n=6 Fiierul date.out poate s conin: 6 este numar perfect 3 86 6 12 3 9

Rezolvare: de la tastatura se citeste un numar natural n si se verifica daca acesta este perfect cu ajutorul functiei perfect . Factorii primi se memoreaza in fisierul date.out; in subprogramul adaug se insereaza noi elemente in lista, in ordinea in care apar numerele generate aleator. De aceea lista se va defini prin primul p element in lista si ultimul u element, adaugarea facandu-se la sfarsit; procedura parcurg parcurge lista creata si depune elementele listei in fisierul date.out. Varianta PASCAL Varianta C type lista=^nod; #include <fstream.h> nod=record #include <stdlib.h> nr:integer; next:lista; struct lista end; {int nr; lista *next;}; var g:text; n,k,b,i:integer; fstream g("date.out",ios::out); p,u:lista; int n,a,b,k=0,i; function lista *p,*u; perfect(a:integer):boolean; int perfect(int &i) var i,s:integer; { begin int k1,s=1; s:=1; for (k1=2;k1<=i/2;k1++) for i:=2 to a div 2 do if (i%k1==0) s+=k1; if a mod i=0 then s:=s+i; if s=a then perfect:=true if (s==i) return 1; else perfect:=false; else return 0; end; } procedure void adaug(lista *&p,lista adaug(var p,u:lista;x:integer); *&u,int &x) var q:lista; { begin lista *q; new(q);q^.nr:=x; q=new lista; q^.next:=nil; q->nr=x;

if p=nil then begin p:=q;u:=q ;end else begin u^.next:=q; u:=q; end; end; procedure parcurg(p:lista); var q:lista; begin q:=p; while q<>nil do begin write(g,q^.nr,' '); q:=q^.next; end; writeln; end; begin assign(g,'date.out');rewrite(g); write(' n= '); readln(n); if perfect(n) then write(g,n ,' este numar perfect ') else write(g,n,' nu este numar perfect '); p:=nil;u:=nil;randomize; for i:=1 to n do begin b:=random(100); adaug(p,u,b); end; writeln(g,' '); parcurg(p); close(g); end.

q->next=NULL; if (!p) p=u=q; else {u->next=q; u=q;} } void parcurg(lista *p){ lista*q; q=p; while (!q==NULL) { g<<q->nr<<" "; q=q->next;} } void creare(lista *&p) {int i,np; lista *u; p=u=NULL; randomize(); for(i=1;i<=n;i++) {np=rand()%100; adaug(p,u,np);} } void main() { lista *elem; cout<<" n= ";cin>>n; if(perfect(n)) g<<endl<< n<<" este numar perfect "; else g<<endl<<n<<" nu este numar perfect "; creare(elem); g<<endl; parcurg(elem); g.close(); }

Subiectul nr. 7
Se d un tablou bidimensional cu n linii i m coloane ce conine numere naturale nenule distincte. i. S se determine, dac exist, un numr superprim n matrice i s se afieze linia pe care se gsete acesta. Un numr este superprim dac att el, ct i rsturnatul lui sunt numere prime. Dac exist mai multe astfel de numere, se va afia unul singur, oricare dintre ele. j. S se determine i s se afieze toate elementele vecine elementului maxim din matrice. Datele de intrare se vor citi din fiierul date.in astfel: - pe prima linie se gsesc n i m - pe urmtoarele n linii se gsesc cte m numere ce reprezint elementele matricei. Datele de ieire se vor scrie pe ecran astfel: - pe prima linie, numrul superprim i indicele de linie sau un mesaj corespunztor, n cazul n care nu exist nici un numr superprim - pe linia a doua elementele cerute la punctul b separate printr-un spaiu. Exemplu: Fiierul date.in: 4 3 33 65 105 44 32 22 62 76 41 31 1 12 Se afieaz pe ecran: 31 4 65 32 Rezolvare:

22

se verifica daca un numar este prim in subprogramul prim;


pentru diversitate am construit aceasta procedura recursiv;

in subprpgramul superprim se verifica daca numarul este

prim si se calculeaza inversul lui; prin apelarea functiei prim verific daca si inversul este prim; pentru gasirea elementelor vecine elementului maxim am bordat matricea cu -1 ; in acest mod nu depasim dimensiunile tabloului si scrierea programului este mai simpla; datele de intrare se citesc din fisierul date.in, iar datele de iesire se scriu pe ecran ; Varianta PASCAL type matrice=array[0..101,0..101] of integer; var n,m,i,j,lin,col,k:integer; mat:matrice; g:text; function prim (nr:integer;d:integer):boolean begin if nr mod d= 0 then prim:=false else if d>trunc(sqrt(nr)) then prim:=true else prim:=prim(nr,d+1); end; procedure superprim(varlinie,k:integer); var inv,aux:integer; begin for i:=1 to n do for j:=1 to m do if prim(mat[i.j],2) Varianta C #include <fstream.h> int inv,a[50][50],i,j,n,m,k,l,linie; ifstream f("date.in"); int prim(int n,int i) { if (i>n/2) return 1; else if (n%i==0) return 0; else return prim(n,i+1); } void superprim(int &linie,int &k) { int inv,aux; for (i=1;i<=n;i++) for (j=1;j<=m;j++) if(prim(a[i][j],2)&&(a[i][j]!=1))

and (mat[i,j]<>1) then begin inv:=0; aux:=mat[i,j]; while aux<>0 do begin inv:=inv*10 + aux mod 10; aux:=aux div 10; end; if prim(inv,2) then begin linie:=i; k:=mat[i,j]; end; end; end; procedure maxim(var mat:matrice;var l,c:integer); var i,j,max:integer; begin max:=mat[1,1];l:=1;c:=1; for i:=1 to n do for j:=1 to m do if mat[i,j]>max then begin max:=mat[i,j]; l:=i; c:=j; end; end; procedure citire(var mat:matrice); var i,j:integer;f:text; begin assign(f,'date.in');reset(f); read(f,n,m); readln(f); for i:=0 to n+1 do for j:=0 to m+1 do mat[i,j]:=-1;

{ inv=0;aux=a[i][j]; while (aux!=0) { inv=inv*10+aux%10; aux/=10; } if (prim(inv,2)) { linie=i; k=a[i][j];} } } void maxim(int &i,int &j) { int k,l,max; i=1; j=1; max=a[1][1]; for(k=1;k<=n;k++) for(l=1;l<=m;l++) if(a[k][l]>max) { max=a[k][l];i=k;j=l; } } void main() { f>>n; f>>m; for(i=0;i<=n+1;i++) for(j=0;j<=m+1;j++) a[i][j]=-1;

for i:=1 to n do begin for j:=1 to m do read(f,a[i][j]); readln(f); end; close(f);end; begin citire(mat);lin:=0; superprim(lin,k); if lin= 0 then writeln(' nu avem numere superprime') else write(' ',k,' ',lin); writeln; maxim(mat,lin,col); for i:=-1 to 1 do for j:=-1 to 1 do if (mat[i+lin,j+col]<>-1) and (i+j+i*j<>0) then write(mat[i+lin,j+col],' '); end.

for (i=1;i<=n;i++) for (j=1;j<=m;j++) f>>a[i][j]; superprim(linie,k); if (linie!=0) cout<<" "<<k<<" "<<linie; else cout<<" nu exista numere superprime"; maxim(i,j); cout<<endl; for(k=-1;k<=1;k++) for(l=-1;l<=1;l++) if((a[i+k][j+l]! =1)&&(k+l+k*l!=0)) cout<<a[i+k][j+l]<<" "; f.close(); }

Subiectul nr. 8
Pe prima linie a fiierului date.in se gsesc numere naturale nenule. Se cere: a. pentru fiecare numr impar din fiier s se afieze cel mai mare numr care se poate forma din cifrele lui. b. s se verifice dac numerele din fiierul de intrare reprezint o progresie aritmetic; n caz afirmativ s se afieze primul element i raia, altfel s se afieze un mesaj corespunztor. Datele de ieire se vor scrie pe ecran, astfel: - pe prima linie, elementele determinate la punctul a - pe a doua linie, raspunsul cerintei b.

Exemplu: Fiierul date.in: 31 38 45 52 59 66 Se afieaz pe ecran: 31 38 54 52 95 66 primul termen este: 31 si raia: 7 Rezolvare:

numerele naturale nenule se citesc din fisierul date.in ; fiecare numar se verifica daca este impar, si in caz afirmativ se depun cifrele lui intr-un vector; in subprogramul reordonare se sorteaza
cifrele numarului impar si apoi se calculeaza numarul cel mai mare care se poate construi cu cifrele sale;

se verifica daca numerele aflate in fisierul de intrare sunt in progresie aritmetica, adica fiecare element din sir se obtine din precedentul adunat cu o valoare constanta numita ratie. Primul element si ratia se afiseaza pe monitor, daca elementele sunt in progresie aritmetica.; in caz contrar se afiseaza un mesaj corespunzator.
Varianta PASCAL type vec=array[1..30] of integer; var v,v1,aux:vec; n,a,r,i:integer; f:text; procedure citire (var v:vec; var n:integer); var i:integer; begin assign (f,'date.in');reset (f);i:=1; Varianta C #include <fstream.h> #include <conio.h> #include <io.h> #include <stdio.h> fstream f("date.in", ios::in);

while not (eof(f)) do begin read (f,v[i]);inc (i); end; n:=i-1;close(f); end; procedure reordonare(var v:vec; var n:integer); var i,aux:integer; b:boolean; begin repeat b:=true; for i:=1 to n-1 do if v[i]>v[i+1] then begin aux:=v[i];v[i]:=v[i+1]; v[i+1]:=aux; b:=false;end; until b=true; end; procedure nr (var x:integer); var i,m:integer; begin i:=0; while x<>0 do begin inc(i); v1[i]:=x mod 10; x:=x div 10; end; m:=i; reordonare(v1,m);x:=0; for i:=m downto 1 do x:=x*10+v1[i]; end; function progresie (var a,r:integer):boolean; var i,x:integer; b:boolean;

long i,j,k,l,a,b,c,n,m ; long v[100],v1[100],aux[100] ; l ong dif; long reordonare(long z) { j=0; while(z!=0) { j++; v1[j]=z%10; z=z/10;} for(k=1;k<=j;k++) { for(l=1;l<j;l++){ if(v1[l]<v1[l+1]) {b=v1[l]; v1[l]=v1[l+1]; v1[l+1]=b;} } } b=0; for(k=1;k<=j;k++) { b=b*10+v1[k]; } return b } void main() {i=0; while(! f.eof()){ i++; f>>v[i];}

begin b:=true; if n=1 then begin progresie:=b;a:=v[1]; r:=0;end else begin x:=v[2]-v[1]; for i:=1 to n-1 do if x<>(v[i+1]-v[i]) then b:=false; if b=true then begin a:=v[1]; r:=x; end;end; progresie:=b; end; begin citire (v,n); for i:=1 to n do begin aux[i]:=v[i]; if (v[i] mod 2=1) and (v[i]>9) then nr (aux[i]); end;writeln; for i:=1 to n do write(aux[i],' '); writeln; a:=0; if progresie (a,r) then writeln ('primul termen este: ',a,' si ratia: ',r) else writeln ('nu este progresie '); end.

n=i-1; for(i=1;i<=n;i++){ if(v[i]%2==1) aux[i]=reordonare(v[i]); else aux[i]=v[i]; } cout<<endl; for(i=1;i<=n;i++) cout<<aux[i]<<" "; dif=v[2]-v[1]; a=1; for(i=2;i<=n;i++) if(v[i]-v[i-1]!=dif) a=0; if (n>1) { if(a) { cout<<endl<<"primul termen e "; cout<<v[1]<<" si ratia "<<dif; } else {cout<<endl<<"nu este progresie";} } else cout<<endl<<"primul termen e "<<aux[1]<<" si ratia 0"; f.close(); }

Subiectul nr. 9

Fie un tablou bidimensional (matrice) cu n linii i n coloane. Se cere: a. s se afieze transpusa matricei; b. s se afieze cte perechi de numere prime ntre ele sunt pe diagonala secundar a matricei iniiale. Datele de intrare se vor citi din fiierul date.in astfel: - pe prima linie se gsete n - pe urmtoarele n linii se gsesc cte n numere ce reprezint elementele matricei. Exemplu: Fiierul de intrare: 4 1 2 5 6 9 10 13 14

3 7 11 15

4 8 12 16

Se afieaz: a) 1 5 9 13 2 6 10 14 3 7 11 15 4 8 12 16 b) 5 Rezolvare: datele se citesc din fisierul date.in, in subprogramul citeste; functia cmmdc datermina cel mai mare divizor comun dintre doua numare narurale si este implementata recursuv. Daca valoarea functiei este 1 , atunci cele doua numere sunt prime intre ele. in subprogramul perechi se determina perechile de numere prime situate pe diagonala secundara a matricei; Varianta PASCAL Varianta C const nmax=100 ; #include<iostream.h> type mat= array[1..nmax, #include<fstream.h>

1..nmax] of integer; var f:text; a,a2:mat; n,i,j,k:integer; function cmmdc (n1,n2:integer):integer; begin if n1>n2 then if n2<>0 then cmmdc:=cmmdc(n2,n1 mod n2) else cmmdc:= n1 else if n1<>0 then cmmdc:=cmmdc(n1,n2 mod n1) else cmmdc:= n2; end; procedure citire; begin assign(f,'date.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); end; procedure transpusa; var i,j:integer; begin for i:=1 to n do begin for j:=1 to n do write(a[j,i],' ');

#define nmax 100 int n,i,j,k; int mat[nmax][nmax]; int mat2[nmax][nmax]; int cmmdc(int x, int y) { if (x==y) return x; else if (x>y) return cmmdc(x-y,y); else return cmmdc(x,y-x); } void citire() { fstream f("date.in",ios::in); f>>n; for (i=0;i<n;i++) for (j=0;j<n;j++) f>>mat[i][j]; f.close(); } void transpusa() { for (i=0;i<n;i++) for (j=0;j<n;j++) mat2[j][i]=mat[i][j];

writeln; end; end; procedure perechi; begin k:=0; for i:=1 to n-1 do for j:=i+1 to n do if cmmdc(a[i,n-i+1], a[j,n-j+1])=1 then inc(k); writeln; write(' ',k); end; begin citire; transpusa; perechi; end.

} int perechi() {int k=0; for (i=0;i<n-1;i++) for (j=i+1;j<n;j++) if(cmmdc(mat[i][n-i1],mat[j][n-j-1])==1) k++; return k;} void write() {for (i=0;i<n;i++) {for (j=0;j<n;j++) cout<<mat2[i][j]<<" "; cout<<"\n";} cout<<perechi()<<"\n";} void main() {citire(); transpusa(); write();}

Subiectul nr. 10
Fie un tablou bidimensional cu n linii i m coloane. Se cere: a. s se elimine elementele de pe coloana x, cu x citit de la tastatur; b. s se determine elementul maxim din matricea modificat i s se afieze cte cifre distincte are acesta. Datele de intrare se vor citi din fiierul date.in astfel: - pe prima linie se gsesc n i m separate printr-un spaiu; - pe urmtoarele n linii se gsesc cte m numere ce reprezint elementele matricei. Datele de ieire se vor scrie pe ecran astfel:

pe n linii, matricea transformat pe linia urmtoare, elementul maxim i numrul de cifre distincte ale lui.

Exemplu: Fiierul date.in: 3 5 1 2 32 61 14 282 11 12 13 Dac se citete de la afieaz Se afieaz pe ecran: a) 1 32 4 61 282 9 11 13 14 b) 282 2

4 9 14

5 10 15

tastatur x=2, atunci pe ecran se 5 10 15

Rezolvare: se citesc datele din fisierul date.in si se elimina din matrice coloana x; se determina in variabila max cel mai mare element din matrice si se memoreaza intr-un vector cu 10 elemente existenta cifrelor in numarul max; se parcurge vectorul de mai sus, se numara cate elemente diferite de zero exista si aceasta valoare va reprezenta numarul de cifre distincte ale elementului max. Varianta PASCAL Varianta C type mat=array[1..30,1..30]of #include<fstream.h> integer; void main() vec=array[0..9]of word; { var a:mat; f1:text; n,m:integer; int m[100][100],i,j; nr,max,x,i,j:integer;v:vec; int max=0,x,n,m2;

begin assign(f1,'date.in');reset(f1); read(f1,n,m); write(' x= '); readln(x); for i:=1 to n do begin for j:=1 to m do read(f1,a[i][j]); readln(f1); end; close(f1); if x<m then for i:=1 to n do begin for j:=x to m-1 do a[i][j]:=a[i][j+1]; end; m:=m-1; for i:=1 to n do begin for j:=1 to m-1 do write(a[i][j]:4,' '); writeln; end; max:=0; for i:=1 to n do for j:=1 to m do if a[i][j]>max then max:=a[i][j]; write(' ',max); for i:=0 to 9 do v[i]:=0; nr:=0; while max<>0 do begin i:=max mod 10;v[i]:=1; max:=max div 10; end;

int v[10]={0},nr=0,k; ifstream f1("date.in"); f1>>n; f1>>m2; cout<<" x= ";cin>>x; for (i=1;i<=n;i++) for(j=1;j<=m2;j++) f1>>m[i][j]; f1.close(); if (x<m2) { for(i=1;i<=n;i++) for(j=x;j<=m2-1;j++) m[i][j]=m[i][j+1]; } m2--; for(i=1;i<=n;i++) { for(j=1;j<=m2;j++) cout<<m[i][j]<<" "; cout<<endl; } for (i=1;i<=n;i++) for (j=1;j<=m2;j++) if(m[i][j]>=max) max=m[i][j]; cout<<endl<<max<<" "; while(max) {k=max%10; v[k]=1; max/=10; } for (i=0;i<=9;i++)

for i:=0 to 9 do if v[i]<>0 then inc(nr); write(' ',nr) end.

if (v[i]==1) nr+=1; cout<<" "<<nr; }

Subiectul nr. 11
n fiierul date.in se gsesc, pe o singur linie, prenumele unor elevi separate prin cte un spaiu. a. S se ordoneze alfabetic (fr s se fac distincie ntre litere mari i mici) i s se afieze irul de nume astfel obinut. b. S se afieze numarul de fete din fiier, tiind c numai prenumele fetelor se termin cu litera a. Datele de ieire se vor scrie pe ecran, astfel: - pe prima linie, prenumele ordonate - pe a doua linie, numrul de fete. Exemplu: Fiierul date.in: IOANA Marius Ciprian Gabriel Vlad Se afieaz pe ecran: Ciprian Gabriel IOANA Silvia Vlad 3 Rezolvare:

maria maria

Silvia Marius

datele se citesc din fisierul date.in. Se considera ca toate numele sunt separate printr-un singur spatiu. Ele sunt scrise cu litere mari sau mici, sau si mari si mici. sortarea numelor se face prin buble sort si numele sortate se afiseaza pe ecran ; solutia in varianta C apartine elevului Adrian Diaconu, clasa a 12-a. Va rog sa remarcati eleganta rezolvarii si performanta limbajului.

Varianta PASCAL const finame='date.in'; var fi:text; nu,li:array[1..100] of string; n,i:longint;c:char;s:string; procedure readdata; begin assign(fi,finame); reset(fi); n:=0; while not(eoln(fi)) do begin read(fi,c); if c=' ' then begin inc(n);nu[n]:=s; s:=''; end else s:=s+c; end; inc(n); nu[n]:=s; close(fi); end; procedure solve; var gasit:boolean; i,j:longint; aux:string; begin gasit:=true; for i:=1 to n do begin s:=''; for j:=1 to length(nu[i]) do s:=s+chr(ord(upcase(nu[i][j]))+o rd('a')-ord('A')); li[i]:=s;end; while gasit do begin gasit:=false; for i:=1 to n-1 do

Varianta C #include <stdio.h> #include <iostream.h> #include <stdlib.h> #include <string.h> #include <ctype.h> FILE *fi = fopen("date.in","r"); char nume[100][20]; int n=0; int cmp(char *s1,char *s2) { int l1,l2,i; l1=strlen(s1),l2=strlen(s2); for(i=0;i<l1&&i<l2&&tolower(s 1[i])==tolower(s2[i]);++i); if(l1==l2&&i==l1) return(0); if(i==l1) return(-1); if(i==l2) return(1); return(tolower(s1[i])<tolower( s2[i])?-1:1); } void main() { int i,j; char swap[20]; while(fscanf(fi,"%s",nume[n++] )==1);n--; for(i = 0;i<=n-1;i++) for(j= 0;j<=n-2;j++)

if li[i]>li[i+1] then begin gasit:=true;aux:=nu[i]; nu[i]:=nu[i+1];nu[i+1]:=aux; aux:=li[i];li[i]:=li[i+1]; li[i+1]:=aux; end; end; writeln; end; procedure writedata; var ft:longint; begin ft:=0; for i:=1 to n do begin write(nu[i],' '); if (li[i][length(li[i])]='a') then inc(ft); end; writeln;writeln(ft); end; begin readdata; solve;writedata; end.

{ if(cmp(nume[j],nume[j+ 1])==1) { strcpy(swap,nume[j]); strcpy(nume[j],nume[j+1]); strcpy(nume[j+1],swap); } } for(i=0,j=0;i<n;++i) j+=tolower(nume[i][strlen(num e[i])-1])=='a'; for(i=0;i<n;++i) cout<<" "<<nume[i]; cout<<"\n"<<j; fclose(fi); }

Subiectul nr. 12
n fiierul date.in se gsesc, pe o singur linie, numere strict pozitive separate prin cte un spaiu. a. S se afieze elementele autopomorfice ale irului. Numim numr autopomorfic o valoare care este sufix al ptratului su. b. S se ordoneze cresctor elementele fiierului, n funcie de numrul de cifre pare ale fiecrui numr.

Datele de ieire se vor scrie pe ecran, astfel: - pe o linie, numerele determinate la punctul a, separate prin cte un spaiu - pe linia urmtoare, numerele ordonate, separate prin cte un spaiu. Exemplu: Fiierul date.in: 16 6 Se afieaz pe ecran: 6 25 11 16

832 6 25

25

11 514

514 832

Rezolvare: datele se citesc din fisierul date.in ; in functia cifre se determina numarul de cifre ale unui numar natural, iar functia putere calculeaza puterea lui 10 la numarul de cifre; in subprogramul cifrep se determina recursiv numarul de cifre pare ale unui numar natural; in programul principal verificam daca numarul a este autopomorf, adica daca a*a-a se termina intr-un numar de zerouri egal cu numarul de cifre ale numarului a; pentru sortare s-a folosit metoda bubble sort;

Varianta PASCAL; ype vector=array[1..20] of integer; var v,v1:vector; f1:text; i,p,n,ni,a,c,t,t1:integer; function cifre(x:longint):integer; var c:integer; begin c:=0; while x>0 do begin x:=x div 10;inc(c); end; cifre:=c end; function putere(x:longint):longint; var i:integer;p:longint; begin p:=1; for i:=1 to x do p:=p*10; putere:=p; end; procedure cifrep(k:integer); begin if k<>0 then begin if k mod 2=0 then c:=c+1; cifrep(k div 10); end; end; begin assign(f1,'date.in'); reset (f1); n:=0; while not eof(f1) do begin

Varianta C #include <fstream.h>

long cifre(long x) { long c=0; while (x>0) { x/=10; c++; } return c; } long putere(long x) { long i, p=1; for (i=1;i<=x;i++) p*=10; return p; } long cifrep(long x) { long c=0; while (x>0) { if (x%2==0) c++; x/=10; } return c; } int main() { long n, v[100], q[100], a, i, t; fstream f("date.in",ios::in);
261

read(f1,a); n:=n+1;v[n]:=a; end; writeln; for i:=1 to n do begin a:=putere(cifre(v[i])); if (v[i]*(v[i]-1) mod a =0 ) then write(v[i],' '); end; writeln; for i:=1 to n do begin c:=0; cifrep(v[i]);v1[i]:=c; end; repeat ni:=0; for i:=1 to n-1 do if v1[i]>v1[i+1] then begin t:=v[i];v[i]:=v[i+1]; v[i+1]:=t; t1:=v1[i]; v1[i]:=v1[i+1];v1[i+1]:=t1; ni:=ni+1;end; until ni=0; writeln; for i:=1 to n do write(v[i],' '); close(f1); end.

n=0; while (f>>a) { n++; v[n]=a; } f.close(); for (i=1;i<=n;i++) { a=putere(cifre(v[i])); if (v[i]*(v[i]-1)%a==0) cout<<" "<< v[i]; q[i]=cifrep(v[i]); } cout<<endl; do { a=0; for (i=1;i<n;i++) if (q[i]>q[i+1]) { a=1; t=q[i]; q[i]=q[i+1]; q[i+1]=t; t=v[i]; v[i]=v[i+1]; v[i+1]=t; } } while (a==1); for (i=1;i<=n;i++) cout<<" "<< v[i]; cout<<endl; return 0; }

Subiectul nr. 13
n fiierul date.in se gsesc, pe o linie, numere naturale de cel mult 9 cifre, separate prin cte un spaiu. Se cere:
262

a.

s se determine numerele care reprezint un factorial, adic sunt de forma k!; pentru fiecare astfel de numr se va afia valoarea lui k b. s se scrie, n ordine descresctoare dup prima cifr, toate numerele din fiier. Datele de ieire se vor scrie pe ecran, astfel: pe prima linie, numerele k determinate, separate prin spaii; pe a doua linie numerele sortate descresctor dup prima cifr, separate prin spaii. Exemplu: Fiierul date.in: 233 24 210 6 17 720 Se afieaz: 4 3 6 720 6 233 24 210 17 Rezolvare: datele de intrare se citesc din fisierul date.in ; functia recursiva fact verifica daca numarul din fisier se poate scrie ca factorial, adica 1*2*3*......*k. In caz afirmativ, in programul principal se scrie valoarea k; prima cifra a fiecarui numar este depusa in vectorul cif. Acesta se sorteaza in procedura sortare si corespunzator se modifica si numerele a caror prima cifra sunt. Varianta PASCAL Varianta C var f:text; n,s:longint; #include <fstream.h> nr:array[1..50] of longint; long n;nr[50]; int x=0,i,j; i,j,m,ies:integer;dafact:boolean; int dafact,ies; procedure fact(i:integer); void fact(long m) begin { if s<n then begin if(n>1){ s:=s*i;fact(i+1); if(n%m!=0) dafact=0; end n/=m; fact(m+1);}

263

else if s=n then ies:=i-1 else dafact:=false; end; procedure sortare; var aux:longint; cif:array[1..50] of longint; begin for i:=1 to m do begin n:=nr[i]; while n div 10 <>0 do n:=n div 10; cif[i]:=n; end; for i:=1 to m-1 do for j:=i+1 to m do if cif[i]<cif[j] then begin aux:=cif[i]; cif[i]:=cif[j]; cif[j]:=aux; aux:=nr[i]; nr[i]:=nr[j]; nr[j]:=aux; end; end; begin assign (f, 'date.in'); reset (f); i:=0; writeln; while not eof(f) do begin inc(i); read(f,n); nr[i]:=n; s:=1; dafact:=true;

else ies=m-1; } void sortare() { long aux; long cif[50]; for(i=1;i<=x;i++) { n=nr[i]; while(!(n/10==0)) n/=10; cif[i]=n; } for(i=1;i<=x-1;i++) for(j=i+1;j<=x;j++) if (cif[i]<cif[j]) { aux=cif[i]; cif[i]=cif[j]; cif[j]=aux; aux=nr[i]; nr[i]=nr[j]; nr[j]=aux;} } int main() { ifstream f("date.in"); while (f>>n) { x++; nr[x]=n; } cout<<endl; for(int i=1;i<=x;i++) { n=nr[i]; dafact=1; fact(1);
264

fact(1); if dafact then write(' ',ies,' '); end; close(f); m:=i; writeln; sortare; for i:=1 to m do write(nr[i],' ' ); end.

if(dafact) cout<<ies<<" "; } f.close(); sortare(); cout<<endl; for(i=1;i<=x;i++) cout<<nr[i]<<" "; return 0; }

Subiectul nr. 14
n fiierul date.in se gsesc, pe o linie, numere naturale de cel mult 9 cifre, separate prin cte un spaiu. Se cere: a. s se determine i s se afieze numerele care reprezint termeni ai irului Fibonacci b. s se afieze, n ordine cresctoare dup ultima cifr, toate numerele din fiier. Datele de ieire se vor scrie pe ecran, astfel: pe prima linie, numerele Fibonacci determinate, separate prin spaii; pe a doua linie numerele sortate cresctor dup ultima cifr, separate prin spaii. Exemplu: Fiierul date.in: 233 Se afieaz: 233 210

24 8 233

210 55 24

8 55

17 17 8

55

Rezolvare: ultima cifra a fiecarui numar este depusa in vectorul cif. Acesta se sorteaza in procedura sortare si

265

corespunzator se modifica si numerele a caror prima cifra sunt. in procedura verif se face verificarea numerelor care reprezinta termenii sirului lui Fibonacci. Reamintim ca sirul lui Fibonacci este definit astfel:
u 0 = 0; u 1 = 1; u n = u n +u n 1 2

Varianta PASCAL var f:text; n,s:longint; nr:array[1..50] of longint; i,j,m:integer; procedure verif(n:longint); var a,b,c:longint; begin a:=1; b:=1; while n>a do begin c:=a+b; a:=b; b:=c; end; if n=a then write(' ',n,' '); end; procedure sortare; var aux:longint;cif:array[1..50] of longint; begin for i:=1 to m do cif[i]:=nr[i] mod 10; for i:=1 to m-1 do for j:=i+1 to m do if cif[i]>cif[j] then begin aux:=cif[i]; cif[i]:=cif[j]; cif[j]:=aux;

Varianta C #include <fstream.h> long n;nr[50]; int x=0,i,j; void verif(long n) { long a=1,b=1,c; while(n>a) { c=a+b; a=b; b=c; } if(n==a) cout<<n<<" "; } void sortare() { long aux; long cif[50]; for(i=1;i<=x;i++) cif[i]=nr[i]%10; for(i=1;i<=x-1;i++) for(j=i+1;j<=x;j++) if (cif[i]>cif[j]) { aux=cif[i]; cif[i]=cif[j]; cif[j]=aux;
266

aux:=nr[i]; nr[i]:=nr[j]; nr[j]:=aux; end; end; begin assign (f, 'date.in'); reset (f); i:=0; while not eof(f) do begin inc(i);read(f,n); nr[i]:=n; end; close(f); m:=i; writeln; for i:=1 to m do verif(nr[i]); writeln; sortare; for i:=1 to m do write(nr[i],' ' ); end.

aux=nr[i]; nr[i]=nr[j]; nr[j]=aux;} } int main() { ifstream f("date.in"); while (f>>n) { x++; nr[x]=n; } cout<<endl; f.close(); for(i=1;i<=x;i++) { n=nr[i]; verif(n); } sortare(); cout<<endl; for(i=1;i<=x;i++) cout<<nr[i]<<" "; return 0; }

Subiectul nr. 15
n fiierul date.in se gsesc pe o singur linie numere ntregi nenule separate prin spaii. a. s se afieze media aritmetic a valorilor din fiier; b. s se creeze o list circular care va conine toate elementele, n ordinea n care apar n fiier; se vor afia elementele listei, pornind de la cea mai mic valoare.

267

Datele de ieire se vor scrie pe ecran, astfel: pe prima linie, media aritmetica, cu doua zecimale - pe linia a doua, elementele listei, separate prin spaii Exemplu: Fiierul date.in: -6 18 26 -56 13 -27 14 15 Pe ecran se vor afia valorile: a) 4.40 b) -56 71 -24 13 -27 14

71

-24

15

-6

18

26

Observaie: dac elementul minim apare de mai multe ori, atunci l lum pe primul dintre ele. Am folosit urmtoarele programe: CITIRE: citete datele din fiier n vectorul a MEDIE: calculeaz media aritmetic de la prima cerin CREARE: creaz lista circluar MIN: returneaz adresa primului element minim din list circular AFISARE: apeleaz MIN i afieaz lista circular ncepnd de la adresa acelui minim Pascal type pnod=^nod; nod=record info: integer; urm: pnod; end; var f:text; a:array[1..1000] of integer; n:integer; p:pnod; C++ #include <iostream.h> #include <fstream.h> #include <math.h> #include <iomanip.h> struct pnod { int info; pnod *urm; }; pnod *p; int n,a[1000];

268

procedure citire; var i:integer; begin n:=0; assign(f,'15.in'); reset(f); while not seekeof(f) do begin n:=n+1; read(f,a[n]); end; close(f); end; function medie:real; var s: real; i: integer; begin s:=0; for i:=1 to n do s:=s+a[i]; medie:=s/n; end; procedure creare; var u,q:pnod; i:integer; begin new(p); p^.info:=a[1]; p^.urm:=p; u:=p; for i:=2 to n do begin new(q); q^.info:=a[i]; u^.urm:=q; q^.urm:=p; u:=q;

void citire() { int i,x; fstream f("15.in",ios::in); n=0; while(f>>x) a[++n]=x; f.close(); cout<<"a: "; }

float medie() { float s=0; int i; for (i=1; i<=n; i++) s=s+a[i]; return s/n; } void creare() { pnod *u,*q; int i; p=new pnod; p->info=a[1]; p->urm=p; u=p; for (i=2; i<=n; i++) { q=new pnod; q->info=a[i]; u->urm=q; q->urm=p;

269

end; u^.urm:=p; { pt a deveni LC } end; function min(p:pnod):pnod; var i,m:integer; q: pnod; begin m:=p^.info; min:=p^.urm; q:=p^.urm; while q<>p do begin if q^.info<m then begin min:=q; m:=q^.info; end; q:=q^.urm; end; end; procedure afisare(p:pnod); var q,x:pnod; begin write('b) '); q:=min(p); x:=q; repeat write(q^.info,' '); q:=q^.urm; until q=x; writeln; end; begin citire; writeln('a) Media elem din fisier: ',medie:0:2); creare; afisare;

u=q; } u->urm=p; // pt a deveni LC } pnod* min(pnod *p) { int i,m; pnod *q,*t; m=p->info; t=p->urm; q=p->urm; while (q!=p) { if (q->info<m) { t=q; m=q->info; } q=q->urm; } return t; } void afisare() { pnod *q, *x; cout<<"b) "; q=min(p); x=q; do { cout<<q->info<<" "; q=q->urm; } while (q!=x); cout<<endl; } void main() { citire(); cout<<"a) Media elem din

270

end. }

fisier: "<<medie()<<endl; creare(); afisare();

Subiectul nr. 16
Se d un tablou bidimensional cu n linii i m coloane i componente numere reale. a. S se creeze o list simplu nlnuit care s conin elementele de pe marginile tabloului. b. S se verifice dac matricea conine cel puin un punct de tip a. Un punct este de tip a dac ndeplinete urmtoarele doua condiii: - este cea mai mare valoare de pe linia sa - este cea mai mic valoare de pe coloana sa. Datele de intrare se vor citi din fiierul date.in astfel: - pe prima linie se gsesc n i m - pe urmtoarele n linii cte m numere ce vor reprezenta elementele matricei. Datele de ieire se vor scrie pe ecran, astfel: - pe prima linie, elementele listei separate prin spaii - pe linia a doua, mesajul Nu exista punct a sau Punct a (linie, coloana). Exemplu: Fiierul date.in: 3 4 0.1 1.2 7.2 9.0 23.5 0.75

2.7 6.1 18.6

3.5 8.0 9.9

Pe ecran se vor afia rezultatele:

271

0.1 1.2 2.7 3.5 7.2 Punct sa (1,4)

8.0

9.9

18.6

0.75

23.5

Am folosit urmtoarele programe CITIRE: citete matricea din fiier CREARE: creaz o list simplu inlnuit cu elementele de pe cele 4 laturi ale matricei, ncepnd cu colul stnga-sus, spre dreapta; fiecare FOR este pentru o latur a matricei AFIS_LISTA: afieaz lista SA: verific dac exist elemente "a" i scrie DA/NU; se afl maximul din fiecare linie (pot fi mai multe valori maxime) i pentru fiecare maxim din linie, verific daca este i minim pe coloana sa. Dac da, atunci am aflat punct a n linia i, pe care il afim. Dac nu sunt puncte a, se d un mesaj. Pascal type pnod=^nod; nod=record info:real; urm:pnod; end; var p:pnod; a:array[1..30,1..30] of real; n,m:integer; procedure citire; var f:text; i,j:integer; begin assign(f,'16.in'); reset(f); readln(f,n,m); for i:=1 to n do C++ #include <iostream.h> #include <fstream.h> #include <math.h> #include <iomanip.h> struct pnod { float info; pnod* urm; }; pnod *p; float a[20][20]; int m,n; void citire() { pnod *q,*u; fstream f("16.in",ios::in); int i,j; f>>n>>m; for(i=1; i<=n; i++)

272

for j:=1 to m do read(f,a[i,j]); close(f); end; procedure creare; var i,j:integer; q,u:pnod; begin new(p); p^.info:=a[1,1]; p^.urm:=nil; u:=p; for j:=2 to m do begin new(q); q^.info:=a[1,j]; q^.urm:=nil; u^.urm:=q; u:=q; end; for i:=2 to n do begin new(q); q^.info:=a[i,m]; q^.urm:=nil; u^.urm:=q; u:=q; end; for j:=m-1 downto 1 do begin new(q); q^.info:=a[n,j]; q^.urm:=nil; u^.urm:=q;

for (j=1; j<=m; j++) f>>a[i][j]; f.close(); } void creare() { int i, j; pnod *q,*u; k++; p=new pnod; p->info=a[1][1]; p->urm=NULL; u=p; for(j=2; j<=m; j++) { q=new pnod; q->info=a[1][j]; q->urm=NULL; u->urm=q; u=q; } for (i=2; i<=n; i++) { q=new pnod; q->info=a[i][m]; q->urm=NULL; u->urm=q; u=q; } for (j=m-1; j>=1; j--) { q=new pnod; q->info=a[n][j]; q->urm=NULL; u->urm=q;

273

u:=q; end; for i:=n-1 downto 2 do begin new(q); q^.info:=a[i,1]; q^.urm:=nil; u^.urm:=q; u:=q; end; end; procedure afis_lista; var q:pnod; begin write('a) '); q:=p; while q<>nil do begin write(q^.info:0:2,' '); q:=q^.urm; end; writeln; end; procedure sa; var i,j,i1:integer; min,max:real; ok:boolean; begin ok:=true; for i:=1 to n do begin max:=a[i,1]; for j:=2 to m do

u=q; } for (i=n-1; i>=2; i--) { q=new pnod; q->info=a[i][1]; q->urm=NULL; u->urm=q; u=q; } } void afis_lista() { pnod *q; q=p; while (q!=NULL) { cout<<setprecision(2)<< q->info<<' '; q=q->urm; } cout<<endl; } void sa() { int i,j,i1,ok=1; float min,max; for (i=1; i<=n; i++) { max=a[i][1]; for (j=2; j<=m; j++) if (a[i][j]>max) max=a[i][j]; for (j=1; j<=m; j++)

274

if a[i,j]>max then max:=a[i,j]; for j:=1 to m do if a[i,j]=max then for i1:=1 to n do if a[i1,,j]<max then ok:=false; if ok then begin for j:=1 to m do if a[i,j]=max then writeln('b) Punct sa: (',i,',',j,')'); break; end; end; if not ok then writeln('b) Nu sunt puncte sa'); end; begin citire; creare; afis_lista; sa; end.

if (a[i][j]==max) for (i1=1; i1<=n; i1++) if (a[i1][j]<max) ok=0; if (ok) { for (j=1; j<=m; j++) if (a[i][j]==max) cout<<"Punct sa: ("<<i<<','<<j<<')' <<endl; break } } if (!ok) cout<<"Nu sunt puncte sa"<<endl; } void main() { citire(); creare(); afis_lista(); sa(); }

Subiectul nr. 17
n fiierul date.in se gsesc, pe aceeai linie, numere ntregi separate prin spaii.

275

a.

S se afieze elementele din fiier situate pe poziii pare (al doilea, al patrulea etc.). b. S se construiasc o list simplu nlnuit care s conin toate elementele irului, n ordine invers celei n care apar n fiier. Datele de ieire se vor scrie pe ecran, astfel: - pe o linie, elementele, din fiier, situate pe poziiile pare - pe linia a doua, elementele listei. Exemplu: Fiierul date.in: 18 20 15 34 Se afieaz pe ecran: 20 34 34 15 20 18

17 29 14

34 14 16

15 34 29

29

16

14

15

34

17

Am folosit urmatoarele subprograme: CITIRE: citete datele din fisier i le depune ntr-un vector AFISARE: afieaz elementele de pe poziiile pare din vector CREARE: creaz lista simplu nlnuit: se parcurg elementele din tablou n ordinea din fiier i se introduc la nceputul listei AFIS_LISTA: afieaz lista simplu nlnuit creat mai sus Pascal type pnod=^nod; nod=record info:integer; urm:pnod; end; var p:pnod; a:array[1..1000] of integer; n:integer; C++ #include <iostream.h> #include <fstream.h> struct pnod { int info; pnod* urm; }; pnod *p; int a[1000], n;

276

procedure citire; var f:text; i:integer; begin assign(f,'17.in'); reset(f); n:=0; while not seekeof(f) do begin n:=n+1;read(f,a[n]);end; close(f); end; procedure afisare; var i:integer; begin write('a) '); for i:=1 to n div 2 do write(a[2*i],' '); writeln; end; procedure creare; var q:pnod; i:integer; begin write('b) '); new(p); p^.info:=a[1]; p^.urm:=nil; for i:=2 to n do begin new(q); q^.info:=a[i]; q^.urm:=p; p:=q; end; end; procedure afis_lista; var q:pnod;

void citire() { int x; fstream f("17.in",ios::in); while(f>>x) a[++n]=x; f.close(); } void afisare() { int i; cout<<"a) "; for (i=1; i<=n/2; i++) cout<<a[2*i]<<" "; cout<<endl; } void creare() { pnod *q; int i; cout<<"b) "; p=new pnod; p->info=a[1]; p->urm=NULL; for (i=2; i<=n; i++) { q=new pnod; q->info=a[i]; q->urm=p; p=q; } } void afis_lista() {

277

begin q:=p; while q<>nil do begin write(q^.info,' -> '); q:=q^.urm; end; writeln('NIL'); end; begin citire; afisare; creare; afis_lista; end.

pnod *q; q=p; while (q) { cout<<q->info<<" -> "; q=q->urm; } cout<<"NULL"<<endl; } void main() { citire(); afisare(); creare(); afis_lista(); }

Subiectul nr. 18
Se citesc de la tastatur numere naturale pn la introducerea numrului 0. a. S se memoreze ntr-un vector, toate numerele citite care au minim 3 cifre, n ordine invers citirii; b. S se elimine din fiecare numr cifra sau cifrele din mijloc dup cum numrul are un numr impar sau par de cifre. Datele de ieire se vor scrie n fiierul date.out, astfel: - pe prima linie, elementele vectorului construit la cerina a - pe linia a doua, elementele vectorului obinut prin modificrile realizate la cerina b.

Exemplu: Pentru 1572 2351 1 519 introduse de la tastatur Fiierul de ieire date.out va conine:

73402

36

278

73402 7302

519 59

21

2351

12

1572

Am folosit urmtoarele subprograme: CITIRE: citete numere de la tastatur, iar cele ce au cel puin 3 cifre sunt numrate n n i trecute n vectorul a; apoi se rstoarn vectorul; inserarea elementelor la nceputul vectorului ar fi o risipa prea mare de efort inutil AFISARE: scrie vectorul a n fiierul de ieire; prima dat aa cum a fost creat de ctre CITIRE i a doua oar cu eliminrile de cifre, realizate de ctre PCT_B, care parcurge vectorul a i pentru fiecare element, apeleaz funcia ELIMINARE, care face eliminrile de cifre, conform cerinelor var a:array[1..1000] of longint; n:integer; g:text; procedure citire; var z,i,x:longint; begin n:=0; repeat readln(z); until (z=0) or (z>99); if z<>0 then begin n:=n+1; a[n]:=z readln(z) while z<>0 do begin #include <iostream.h> #include <fstream.h> struct pnod { long info; pnod* urm; }; fstream g("18.out",ios::out); long a[1000],n; void citire() { long z,i,x; n=0; do cin>>z; while (z && z<=99); if (z) { n++; a[n]=z; cin>>z; while (z)

279

if z>99 then begin n:=n+1; a[n]:=z; end; readln(z); end; end; { rasturnare a } for i:=1 to n div 2 do begin x:=a[i]; a[i]:=a[n+1-i]; a[n+1-i]:=x; end; end; procedure afisare; var i:integer; begin for i:=1 to n do write(g,a[i],' '); writeln(g); end; function eliminare(z:longint):longint; var i,nc:integer; c:array[1..10] of integer; begin nc:=0; repeat nc:=nc+1; c[nc]:=z mod 10; z:=z div 10; until z=0;

{ if (z>99) { n++; a[n]=z; } cin>>z; } } // rasturnare a for (i=1; i<=n / 2; i++) { x=a[i]; a[i]=a[n+1-i]; a[n+1-i]=x; } } void afisare() { int i; for (i=1; i<=n; i++) g<<a[i]<<" "; g<<endl; } long eliminare(long z) { long i,nc,c[11]; nc=0; do { nc++; c[nc]=z % 10; z=z / 10; } while (z); if (nc % 2 == 1)

280

if nc mod 2 = 1 then begin for i:=nc downto 1 do if i<>(nc+1) div 2 then z:=z*10+c[i]; eliminare:=z; end else begin for i:=nc downto 1 do if (i<>(nc+1) div 2) and (i<>(nc+2) div 2) then z:=z*10+c[i]; eliminare:=z; end; end; procedure pct_b; var z,i:longint; begin for i:=1 to n do a[i]:=eliminare(a[i]); end; begin citire; assign(g,'18.out'); rewrite(g); afisare; pct_b; afisare; close(g); end.

{ for (i=nc; i>=1; i--) if (i != (nc+1) / 2) z=z*10+c[i]; return z; } else { for (i=nc; i>=1; i--) if (i!=(nc+1) / 2 && i!=(nc+2) / 2) z=z*10+c[i]; return z; } } void pct_b() { long z,i; for (i=1; i<=n; i++) a[i]=eliminare(a[i]); } void main() { citire(); ofstream g("18.out"); afisare(); pct_b(); afisare(); g.close(); }

Subiectul nr. 19

281

n fiierul date.in se gsesc cuvinte separate prin cte un spaiu, cuvinte care sunt scrise cu litere mari i mici. Se cere: a. S se afieze cuvintele din fiier, n ordinea cresctoare a lungimii fiecrui cuvnt. b. S se memoreze fiecare cuvnt din fiier transformat n litere mari precum i numrul de vocale ce apar n cuvntul respectiv; se vor lua n calcul doar vocalele a e i o i u; Datele de ieire se vor scrie pe ecran astfel: pe un rnd cuvintele n ordinea cerut la punctul a, separate prin spaii pe rndul al doilea cuvintele i numrul de vocale n formatul (cuvnt, nr_de_vocale); Exemplu: Pentru fiierul date.in: InformatICa eLEV sCOalA CARTE se vor afia pe ecran liniile: eLEV CARTE sCOalA InformatICa (INFORMATICA,5) (ELEV,2) (SCOALA,3) (CARTE,2) Observaie: - vom presupune c toate cuvintele sunt separate printr-un spatiu; vom mai presupune textul de maximum 255 caractere. - modul de tratare a irurilor de caractere difer de la un limbaj la altul, dar aciunile sunt aceleai Am folosit urmtoarele subprograme: CITIRE: citete textul i depune cele nc cuvinte n vectorul a de cuvinte; acest vector se copiaz n vectorul b, pentru c vom avea nevoie de el la cerina a doua SORTARE: sorteaz cuvintele din vectorul a dupa lungimile lor AFISARE_A: afieaza vectorul a sortat mai sus PCT_B: transform literele mici n litere mari; apoi calculeaz n v[i] numrul de vocale ale cuvntului a[i] AFISARE_B: afieaz cuvintele i numrul lor de vocale

282

Pascal var a,b:array[1..100] of string; v:array[1..100] of integer; s:string; f:text; nc:integer;

C++

#include <fstream.h> #include <conio.h> #include <string.h> char a[100][256],b[100][256]; int v[100]; char s[100] = ""; int nc;ifstream f("19.in"); procedure citire; void citire() var i:integer; { int i; begin while(!f.eof()) assign(f,'19.in'); reset(f); { readln(f,s); char* aux; f>>aux; close(f); strcat(s,aux); strcat(s," "); s:=s+' '; } nc:=0; f.close(); nc = 0; while pos(' ',s)<>0 do char* p = strtok(s," "); begin while(p) nc:=nc+1; { a[nc]:=copy(s,1,pos(' ',s)-1); nc++; strcpy(a[nc],p); delete(s,1,pos(' ',s)); strcpy(b[nc],a[nc]); end; p = strtok(NULL," "); b:=a; } end; } procedure sortare; var t:string; i,j:integer; begin for i:=1 to nc-1 do for j:=i+1 to nc do if length(b[i])>length(b[j]) then begin t:=b[i]; b[i]:=b[j]; b[j]:=t; end; void sortare() { char* t; int i,j; for(i = 1; i <= nc-1; i++) for(j = i+1 ; j <= nc; j++) if( strlen(b[i]) > strlen(b[j]) ) { strcpy(t,b[i]); strcpy(b[i],b[j]); strcpy(b[j],t); }

283

end; procedure afisare_a; var i:integer; begin for i:=1 to nc do write(b[i],' '); writeln; end; procedure pct_b; var i,j:integer; begin for i:=1 to nc do for j:=1 to length(a[i]) do a[i,j]:=upcase(a[i,j]); for i:=1 to nc do begin v[i]:=0; for j:=1 to length(a[i]) do if (a[i,j]='A') or (a[i,j]='E') or (a[i,j]='I') or (a[i,j]='O') or (a[i,j]='U') then v[i]:=v[i]+1; end; end; procedure afisare_b; var i:integer; begin for i:=1 to nc do write('(',a[i],',',v[i],') '); writeln; end; begin citire;

} void afisare_pct_a() { int i; for(i = 1 ; i <= nc ; i++) cout<<b[i]<<" "; cout<<endl; } void pct_b() { int i,j; for(i = 1; i <= nc; i++) strcpy(a[i],strupr(a[i])); for(i = 1; i <= nc; i++) { v[i] = 0; for(j = 0; j< strlen(a[i]); j++) if(a[i][j] == 'A' || a[i][j] == 'E' || a[i][j] == 'I' || a[i][j] == 'O' || a[i][j] == 'U') v[i]++; } } void afisare_b() { int i; for(i = 1 ; i <= nc ; i++) cout<<"("<<a[i]<<","<<v[i] <<")"; cout<<endl; } void main() { citire();

284

sortare; afisare_a; pct_b; afisare_b; end.

sortare(); afisare_pct_a(); pct_b(); afisare_b(); }

Subiectul nr. 20
Se consider n intervale date. Se cere: a. S se determine intersecia lor; b. S se afle cte intervale disjuncte se obin prin reuniunea lor. Datele de intrare se vor citi din fiierul date.in astfel: - pe prima linie se gsete n - pe urmtoarele n linii, cte 2 numere naturale ce vor reprezenta limita inferioar i respectiv cea superioar a fiecrui interval. Datele de ieire se vor scrie pe ecran astfel: pe prima linie dou numere separate prin spaiu ce vor reprezenta intersecia intervalelor sau un mesaj, n cazul n care se obine mulimea vid. pe linia a doua, numrul de intervale disjuncte obinute prin reuniune Exemplu: Fiierul date.in: 5 2 5 3 7 10 13 4 9 12 18
285

Se afieaz pe ecran: Intervalele nu se intersecteaz 2 Explicaie: Cele dou intervale formate prin reuniune sunt (2,9) i (10,18) Observaii: - intervalele vor fi deschise la ambele capete (vezi explicaiile pentru exemplu) - vom afia i intervalele rezultate pentru reuniune i intersecie Am folosit urmtoarele subprograme: CITIRE: citete din fiierul de intrare datele n vectorii x i y INTERSECTIE: calculeaz i afieaz intersecia celor n intervale; dac intersecia este mulimea vid, se da un mesaj REUNIUNE: sorteaz intervalele citite dup extremitile lor stngi, calculeaz intervalele disjuncte ale reuniunii celor n intervale, obinnd extremitile celor k intervale ale reuniunii, pe care le depune n vectorii c i d. Pascal var f:text; x,y array[1..100] of real; n:integer; procedure citire; var i:integer; begin assign(f,'20.in'); reset(f); readln(f,n); for i:=1 to n do readln(f,x[i],y[i]); close(f); end; C++ #include<iostream.h> #include <fstream.h> #include<conio.h> #include <iomanip.h> float x[100],y[100],n; void citire() { int i; fstream f("20.in",ios::in); f>>n; for(i=1; i<=n; i++) f>>x[i]>>y[i]; f.close(); }

286

procedure intersectie; var is,id:real; i:integer; vid:boolean; begin is:=x[1]; id:=y[1]; vid:=false; for i:=2 to n do begin if (y[i]<=is) or (id<=x[i]) then begin vid:=true; break; end else if (x[i]<is) and (y[i]>is) and (y[i]<=id) then id:=y[i] else if (x[i]<is) and (y[i]>id) then else if (x[i]>=is) and (y[i]<=id) then begin is:=x[i]; id:=y[i]; end else if (x[i]>is) and (x[i]<id) and (y[i]>id) then is:=x[i]; end; if vid then writeln('Intersectie vida') else writeln('(',is:0:2,' ',id :0:2,')'); end; procedure reuniune; var i,j,k,z:integer; c,d:array[1..100] of real;

void intersectie() { float is,id; int i,vid; is=x[1]; id=y[1]; vid=0; for (i=2; i<=n; i++) { if (y[i]<=is || id<=x[i]) { vid=1; break; } else if (x[i]<is && y[i]>is && y[i]<=id) id=y[i]; else if (x[i]<is && y[i]>id) ; else if (x[i]>=is && y[i]<=id) { is=x[i]; id=y[i]; } else if (x[i]>is && x[i]<id && y[i]>id) is=x[i]; } if (vid) cout<<"Intervalele nu se intersecteaza"<<endl; else cout<<setprecision(2)<< '('<<is<<" "<<id<<')'<<endl; } void reuniune() { int i,j,k,z; float c[100],d[100],aux;

287

aux:real; begin for i:=1 to n-1 do for j:=i+1 to n do if x[i]>x[j] then begin aux:=x[i]; x[i]:=x[j]; x[j]:=aux; aux:=y[i]; y[i]:=y[j]; y[j]:=aux; end; for i:=1 to n do begin d[i]:=0;c[i]:=0; end; c[1]:=x[1];d[1]:=y[1];k:=0; for i:=1 to n do begin z:=1; for j:=1 to i-1 do if (x[i]>=c[j]) and (x[i]<d[j]) then begin if d[j]<y[i] then d[j]:=y[i]; z:=0; end; if z=1 then begin k:=k+1; c[k]:=x[i]; d[k]:=y[i]; end; end; for i:=1 to k do write ('(',c[i]:0:2,', ',d[i]:0:2,') '); writeln; end;

for(i=1;i<n;i++) for(j=i+1;j<=n;j++) if(x[i]>y[j]) { aux=x[i]; x[i]=x[j]; x[j]=aux; aux=y[i]; y[i]=y[j]; y[j]=aux; } for(i=1;i<=n;i++) {d[i]=0;c[i]=0;} c[1]=x[1];d[1]=y[1];k=0; for(i=1;i<=n;i++) { z=1; for(j=1;j<i;j++) if (x[i]>=c[j] && x[i]<d[j]) { if (d[j]<y[i]) d[j]=y[i]; z=0; } if (z==1) { k++; c[k]=x[i]; d[k]=y[i]; } } for(i=1;i<=k;i++) cout<<setprecision(2)<< '('<<c[i]<<", "<<d[i]<<") "; cout<<endl; }

288

begin citire; intersectie; reuniune;


end.

void main() { citire(); intersectie(); reuniune(); }

Subiectul nr. 21
n fiierul date.in se gsesc, pe o singur linie, numere naturale nenule separate prin spaii. a. S se memoreze ntr-un vector numerele din fiier i, pentru fiecare, numrul de cifre impare ce apar n scrierea sa; b. S se afieze cel mai mare dintre numerele care au un numr minim de cifre impare. Datele de ieire se vor scrie pe ecran astfel: pe un rnd componentele vectorului n formatul (nr, nr_de_cifre_impare); pe rndul al doilea numrul determinat conform cerinei de la punctul b. Exemplu: Fiierul date.in: 72946 14 339 180 Se afieaz pe ecran: (72946,2) (14,1) (180,1) (1027,2)

1027 (339,1)

339
Observaii: pentru cerina b), sunt dou numere cu numr minim de cifre impare: 14 i 180; ele au cte o cifr impar, deci numrul cel mai mare dintre acestea este 180 i nu 339, ca n exemplu.

289

Am folosit urmtoarele subprograme: CITIRE: citete numerele din fiierul de intrare, le numr i le depune n vectorul a PCT_A: calculeaz pentru fiecare a[i] numrul sau de cifre impare in b[i], dup care afieaz aceste informaii PCT_B: calculeaz numrul minim de cifre impare pentru un element din a i depune numerele din a ce au numr minim de cifre impare n vectorul c. Apoi compar elementele c[i] ce au b[i] egal cu acel minim i l afieaz pe cel mai mare dintre acestea (acest element poate aprea de mai multe ori) Pascal uses crt; var a,b: array[1..100] of longint; n:integer; f:text; procedure citire; var i,x:longint; begin n:=0; assign(f,'21.in'); reset(f); while not seekeof(f) do begin read(f,x); n:=n+1; a[n]:=x; end; close(f); end; procedure pct_a; var i:integer; x:longint; begin for i:=1 to n do begin C++ #include <iostream.h> #include <fstream.h> long a[100],b[100]; int n; fstream f("21.in",ios::in); void citire() { int i,x; n=0; // !!! pt citire asa !!! while (f>>x) a[++n]=x; f.close(); } void pct_a() { int i; long x; for (i=1; i<=n; i++) {

290

b[i]:=0; x:=a[i]; repeat if x mod 2 = 1 then b[i]:=b[i]+1; x:=x div 10; until x=0; end; for i:=1 to n do write('(',a[i],',',b[i],') '); writeln; end; procedure pct_b; var c:array[1..100] of longint; nc,i,min:integer; max:longint; begin min:=b[1]; for i:=2 to n do if b[i]<min then min:=b[i]; nc:=0; for i:=1 to n do if(b[i]=min) then begin nc:=nc+1; c[nc]:=a[i]; end; max:=c[1]; for i:=2 to nc do if c[i]>max then max:=c[i]; for i:=1 to nc do if c[i]=max then write(c[i],' '); writeln; end; begin citire; pct_a; pct_b;

b[i]=0; x=a[i]; do { if (x % 2) b[i]++; x=x/10; } while(x); } for (i=1; i<=n; i++) cout<<'('<<a[i]<<','<<b[i] <<") "; cout<<endl; } void pct_b() { long c[100],max; int nc,i,min; min=b[1]; for (i=2; i<=n; i++) if (b[i]<min) min=b[i]; nc=0; for (i=1; i<=n; i++) if(b[i]==min) { nc=nc+1; c[nc]=a[i]; } max=c[1]; for (i=2; i<=nc; i++) if (c[i]>max) max=c[i]; for (i=1; i<=nc; i++) if (c[i]==max) cout<<c[i]<<' '; cout<<endl; } void main() { citire(); pct_a(); pct_b();

291

end.

Subiectul nr. 22
Un graf neorientat cu n noduri i m muchii este descris n fiierul graf.in cu urmtoarea structur : - pe prima linie valorile pentru n i m separate printr-un spaiu ; - pe urmtoarele m linii, perechi de numere i j reprezentnd noduri ce formeaz o muchie. S se realizeze un program care s rspund urmtoarelor cerine: g) S se afieze matricea de adiacen asociat grafului descris n fiierul graf.in. h) S se afieze nodurile grafului n ordinea descresctoare a gradelor. Observaii: - pentru cerina b), nodurile 1, 2 i 6 trebuie s apar pe primele 3 poziii, indiferent de ordinea lor (toate au gradul 3), iar nodurile 4 i 5 trebuie s apar pe poziiile 4 i 5, indiferent de ordinea lor, pentru c ambele au gradul 2. - nu se precizeaz unde se face afiarea; am ales pe ecran. Am folosit urmtoarele subprograme: CITIRE: citete datele din fiierul de intrare i construiete matricea de adiacen a grafului PCT_A: afieaza matricea de adiacen PCT_B: calculeaz gradele nodurilor, apoi depune ntr-un vector numerele nodurilor; dup aceea face o sortare a gradelor iar cnd se fac interschimburi de grade, se interschimb i

292

numrele de ordine ale nodurilor; n final, afieaz doar numerele nodurilor, n ordinea dat de vectorul de grade. Pascal var a:array[1..20,1..20] of integer; n:integer; f:text; procedure citire; var i,j,x,y,m:integer; begin assign(f,'22.in'); reset(f); readln(f,n,m); for i:=1 to n do for j:=1 to n do a[i,j]:=0; for i:=1 to m do begin readln(f,x,y); a[x,y]:=1; a[y,x]:=1; end; close(f); end; procedure pct_a; var i,j:integer; begin for i:=1 to n do begin for j:=1 to n do write(a[i,j]:4); writeln; end; end; C++ #include <iostream.h> #include <fstream.h> int a[20][20],n; void citire() { int i,j,x,y,m; fstream f("22.in",ios::in); f>>n>>m; for (i=1; i<=n; i++) for (j=1; j<=n; j++) a[i][j]=0; for (i=1; i<=m; i++) { f>>x>>y; a[x][y]=1; a[y][x]=1; } f.close(); } void pct_a() { int i,j; for (i=1; i<=n; i++) { for(j=1; j<=n; j++) cout<<a[i][j]<<" "; cout<<endl; } cout<<endl; }

293

procedure pct_b; void pct_b() var max,i,j,z:integer; { g,x:array[1..20] of integer; int max,i,j,z,g[20],x[20]; begin max=0; max:=0; for(i=1; i<=n; i++) for i:=1 to n do { begin g[i]=0; g[i]:=0; for (j=1; j<=n; j++) for j:=1 to n do g[i]=g[i]+a[i][j]; g[i]:=g[i]+a[i,j]; if (g[i]>max) max=g[i]; if g[i]>max then max:=g[i]; } end; for (i=1; i<=n; i++) x[i]=i; for i:=1 to n do x[i]:=i; for (i=1; i<n; i++) for i:=1 to n-1 do for (j=i+1; j<=n; j++) for j:=i+1 to n do if (g[i]<g[j]) if g[i]<g[j] { then z=g[i]; g[i]=g[j]; g[j]=z; begin z=x[i]; x[i]=x[j]; x[j]=z; z:=g[i]; g[i]:=g[j]; g[j]:=z; } z:=x[i]; x[i]:=x[j]; x[j]:=z; for (i=1; i<=n; i++) end; cout<<x[i]<<" ";; for i:=1 to n do write(x[i],' '); cout<<endl; writeln; } end; void main() begin { citire; citire(); pct_a; pct_a(); pct_b; pct_b(); end. }

Subiectul nr. 23

294

Un graf neorientat cu n noduri este descris n fiierul graf.in cu urmtoarea structur: - pe prima linie, valoarea lui n; - pe urmtoarele n linii, cte n valori 0 i 1 reprezentnd matricea de adiacen a grafului. S se realizeze un program care s raspund urmtoarelor cerinte : a. S se afieze numrul de muchii ale grafului descris n fiierul graf.in i apoi perechile de numere reprezentnd muchiile acestuia, n ordine lexicografic. b. S se afieze nodurile grafului prin oricare dintre metodele de parcurgere cunoscute. Observaii: - dac facem sortare lexicografic a muchiilor, atunci, de exemplu, muchiile 1-2, 1-12, vor fi n ordinea 1-12 i apoi 1-2. - pentru cerina b, am ales "parcurgerea n lime", iar graful s fie conex; tot aici, nodul de plecare este citit de la tastatur; n cazul grafului neconex, se va face afiarea celor u noduri depuse n coada c. - afirile se vor face pe ecran - am folosit vectorii z1 i z2 pentru a reine nodurile unei muchii (muchia i este de la z1[i] la z2[i] ) - m este numrul de muchii = suma valorilor din matricea superior triunghiulara = 1/2 din suma elementelor din matrice - tratarea irurilor de caractere se face diferit n cele dou limbaje, dar cu acelai efect - pentru sortarea muchiilor se poate alege drept criteriu de sortare expresia 1000*z1[i] + z2[i] prin care ponderea primei extremiti este mrit de 1000 de ori. S-a folosit urmtoarele subprograme: CITIRE: citete matricea de adiacene din fiier PCT_A: pentru fiecare muchie gasit se constituie un ir de caractere (format de cele dou muchii, separate de un minus),

295

pe baza cruia se face sortarea lexicografic (aa cum fac limbajele pentru irurile de caractere) PCT_B: am ales parcurgerea BF (in lime), i anume o variant de manual Pascal var a:array[1..20,1..20] of integer; n:integer; procedure citire; var i,j,x,y:integer; f:text; begin assign(f,'23.in'); reset(f); readln(f,n); for i:=1 to n do for j:=1 to n do read(f,a[i,j]); close(f); end; procedure pct_a; var i,j,m,t:integer; s:string[10]; x,y:array[1..100] of string[10]; z1,z2:array[1..100] of integer; begin m:=0; for i:=1 to n-1 do for j:=i+1 to n do m:=m+a[i,j]; writeln(m,' muchii: '); C++ #include<fstream.h> #include<string.h> #include<stdlib.h> int a[20][20],n; void citire() { int i,j,x,y; ifstream f("23.in"); f>>n; for(i = 1; i <= n;i++) for(j = 1; j<=n;j++) f>>a[i][j]; f.close(); } void pct_a() { int i,j,m,t; char s[10], x[100][10], y[100][10]; int z1[100],z2[100]; m = 0; for( i = 1 ; i <= n-1 ; i++) for( j = i+1 ; j <= n ; j++) m = m + a[i][j]; cout<<m<<" muchii: "<<endl; m=0;

296

m:=0; for i:=1 to n-1 do for j:=i+1 to n do if a[i,j]=1 then begin m:=m+1; str(i,x[m]); str(j,y[m]); z1[m]:=i; z2[m]:=j; end; for i:=1 to m-1 do for j:=i+1 to m do if x[i]+y[i] > x[j]+y[j] then begin s:=x[i]; x[i]:=x[j]; x[j]:=s; s:=y[i]; y[i]:=y[j]; y[j]:=s; t:=z1[i]; z1[i]:=z1[j]; z1[j]:=t; t:=z2[i]; z2[i]:=z2[j]; z2[j]:=t; end; for i:=1 to m do writeln(z1[i],' ',z2[i]) end; procedure pct_b; var viz, c:array[1..100] of integer; p,i,j,x,y,u,v,n1:integer; begin write('Nodul de plecare: '); readln(n1);

for( i = 1 ; i <= n-1 ; i++) for(j=i+1;j<=n;j++) if(a[i][j] == 1) { m++; itoa(i,x[m],10); itoa(j,y[m],10); z1[m] = i; z2[m] = j; cout<<"muchie: } for( i = 1 ; i <= m-1 ; i++) for( j = i+1 ; j <= m ; j++) { char* aux1,*aux2; strcpy(aux1,x[i]); strcat(aux1,y[i]); strcpy(aux2,x[j]); strcat(aux2,y[j]); if( strcmp(aux1,aux2) > 0) { strcpy(s,x[i]); strcpy(x[i],x[j]); strcpy(x[j],s);strcpy(s,y[i]); strcpy(y[i],y[j]); strcpy(y[j],s); t = z1[i]; z1[i] = z1[j]; z1[j] = t; t = z2[i]; z2[i] = z2[j]; z2[j] = t; } } for( i=1 ; i<= m ; i++) cout<<z1[i]<<" "<<z2[i]<<endl; cout<<endl; } void pct_b() { int viz[100],c[100]; int p,i,j,x,y,u,v,n1; cout<<"Nodul de plecare:";

297

for i:=1 to n do viz[i]:=0; c[1]:=n1; viz[n1]:=1; p:=1; u:=1; while p<=u do begin v:=c[p]; for j:=1 to n do if (a[v,j]=1) and (viz[j]=0) then begin u:=u+1; c[u]:=j; viz[j]:=1; end; p:=p+1; end; for j:=1 to u do write(c[j],' '); end; begin citire; pct_a; pct_b; end.

f>>n1; for( i = 1 ; i <= n ; i++) viz[i]=0; c[1] = n1; viz[n1] = 1; p = 1; u = 1; while(p<=u) { v = c[p]; for(j = 1; j <= n ; j++) if(a[v][j] == 1 && !viz[j]) { u++;c[u] =j;viz[j] = 1; } p++; } for( j = 1; j <= u ; j++) cout<<c[j]<< ; cout<<endl; } void main() { citire(); pct_a(); pct_b();

} Subiectul nr. 24
Un graf neorientat cu n noduri este descris n fiierul graf.in cu urmtoarea structur: - pe prima linie valoarea lui n; - pe urmtoarele linii, pn la sfrit de fiier, perechi de numere i j reprezentnd noduri ce formeaz o muchie. S se realizeze un program care s rspund urmtoarelor cerine:

298

a. S se afieze, de la 1 la n, gradele nodurilor grafului descris n fiierul graf.in. b. S se determine dac dou noduri x i y fac parte din aceeai component conex. Valorile corespunzatoare celor dou noduri x i y se citesc de la tastatur. Se afieaz un mesaj corespunztor: nodurile x i y aparin/nu aparin aceleai componente conexe. Exemplu: date.in 6 12 14 16 24 25 56 Se va afia: a. Nodul 1 are gradul 3 Nodul 2 are gradul 3 Nodul 3 are gradul 0 Nodul 4 are gradul 2 Nodul 5 are gradul 2 Nodul 6 are gradul 2 b. - pentru x=2 i y=4; se va afia DA - pentru x=2 i y=3; se va rspunde NU Observaie - afirile se vor face pe ecran (nu sunt restricii) Am folosit urmtoarele subprograme: CITIRE: citete datele din fiierul de intrare i realizeaz matricea de adiacen GRADE: calculeaz i afieaz gradele nodurilor grafului
299

X_SI_Y: citete nodurile x i y i apoi realizeaz componenta conex cu plecare din nodul x i d un mesaj, dup cum nodul y se afl n acea component sau nu Pascal var a:array[1..20,1..20] of integer; m,n:integer; procedure citire; var i,j,x,y:integer; f:text; begin assign(f,'24.in'); reset(f); readln(f,n); for i:=1 to n do for j:=1 to n do a[i,j]:=0; while not seekeof(f) do begin readln(f,x,y); a[x,y]:=1; a[y,x]:=1; end; close(f); end; procedure grade; var i,j,k:integer; begin for i:=1 to n do begin k:=0; for j:=1 to n do k:=k+a[i,j]; writeln('Nodul ',i,' are gradul ',k); C++ #include <iostream.h> #include <fstream.h> int a[20][20],m,n; void citire() { int i,j,x,y; fstream f("24.in",ios::in); f>>n; for (i=1; i<=n; i++) for (j=1; j<=n; j++) a[i][j]=0; while(f>>x>>y) { a[x][y]=1; a[y][x]=1; } f.close(); } void grade() { int i,j,k; for (i=1; i<=n; i++) { k=0; for (j=1; j<=n; j++) k=k+a[i][j]; cout<<"Nodul "<<i<<" are gradul "<<k<<endl; }

300

end; end; procedure x_si_y; var c:array[1..100] of integer; i,j,x,y,t:integer; begin write('Nodul x: '); readln(x); write('Nodul y: '); readln(y); for i:=1 to n do c[i]:=i; for i:=1 to n do for j:=i+1 to n do if a[i,j]=1 then for t:=1 to n do if c[t]=c[j] then c[t]:=c[i]; if c[x]=c[y] then writeln('Nodurile ',x,' si ',y,' fac parte din aceeasi componenta conexa') else writeln('Nodurile ',x,' si ',y,' nu fac parte din aceeasi componenta conexa'); end; begin citire; afis; grade; x_si_y; end.

void x_si_y() { int c[100],i,j,x,y,t; cout<<"Nodul x: "; cin>>x; cout<<"Nodul y: "; cin>>y; for (i=1; i<=n; i++) c[i]=i; for (i=1; i<=n; i++) for (j=i+1; j<=n; j++) if (a[i][j]==1) for (t=1; t<=n; t++) if (c[t]==c[j]) c[t]=c[i]; if (c[x]==c[y]) cout<<"Nodurile "<<x<<" si "<<y<<" fac parte din aceeasi componenta conexa"<<endl; else cout<<"Nodurile "<<x<<" si "<<y<<" nu fac parte din aceeasi componenta conexa"<<endl; } void main() { citire(); grade(); afis(); x_si_y(); }

301

Subiectul nr. 25
Un graf orientat cu n noduri i m arce este descris n fiierul graf.in cu urmtoarea structur: - pe prima linie, valorile pentru n i m separate printr-un spaiu; - pe urmtoarele m linii, perechi de valori i j reprezentnd noduri ce formeaz un arc. S se realizeze un program care s raspund urmtoarelor cerine: a. S se afieze pe ecran perechile de noduri i j din graful descris n fiierul graf.in cu proprietatea c exist arc att de la i la j, ct i de la j la i. b. S se afiseze matricea varfuri-arce. Exemplu graf.in 6 13 12 16 61 34 43 45 54 65 25 52 14 36 63 Matricea de adiacen va fi: 010101 000010 000101
302

000010 010100 101010 a. Se vor afia perechile (nu neaparat n aceast ordine): 16 36 45 34 25 b. Coloanele nu trebuie s fie n aceast ordine, dar fiecare dintre ele va avea aceleai valori ca aici i n aceeai ordine de sus n jos 1 1 -1 0 0 0 0 0 0 0 1 0 0 -1 0 0 0 0 0 0 0 1 -1 0 0 0 0 0 0 1 -1 0 0 0 0 0 0 1 -1 0 0 0 -1 1 1 -1 0 0 0 -1 0 0 0 0 0 0 0 -1 1 -1 -1 1 0 0 0 0 -1 1 0 0 0 0 1 0 0 0 -1 1 Observatie -afirile se fac pe ecran Am folosit urmtoarele subprograme: CITIRE: citete vectorul de muchii din fiier i creaz matricea de adiacen; vectorii p i q conin extremitile muchilor PCT_A: analizeaz n matrice dac nodurile i i j sunt conectate n ambele sensuri, caz n care se afieaz perechea (i, j) PCT_B: analizeaz vectorii p i q, pe baza crora construiete matricea v (vrfuri-arce) Pascal C++

303

var a:array[1..20,1..20] of integer; m,n:integer; p,q:array[1..100] of integer; v:array[1..30,1..30] of integer; procedure citire; var i,j:integer; f:text; begin assign(f,'25.in'); reset(f); readln(f,n,m); for i:=1 to n do for j:=1 to n do a[i,j]:=0; for i:=1 to m do begin readln(f,p[i],q[i]); a[p[i],q[i]]:=1; end; close(f); end; procedure pct_a; var i,j:integer; begin for i:=1 to n-1 do for j:=i+1 to n do if (a[i,j]=1) and (a[j,i]=1) then writeln(i,' ',j); end; procedure pct_b; var x:array[1..20] of integer; i,j,t,nc:integer; begin

#include <iostream.h> #include <fstream.h> #include <iomanip.h> int a[20][20],m,n,p[100],q[100], v[30][30]; void citire() { int i,j; ifstream f("25.in"); f>>n>>m; for (i=1; i<=n; i++) for (j=1; j<=n; j++) a[i][j]=0; for (i=1; i<=m; i++) { f>>p[i]>>q[i]; a[p[i]][q[i]]=1; } f.close(); } void pct_a() { int i,j; for (i=1; i<=n-1; i++) for (j=i+1; j<=n; j++) if (a[i][j]==1 && a[j][i]==1) cout<<i<<" "<<j<<endl; } void pct_b() { int x[20],i,j,t,nc; for (i=1; i<=n; i++) for (j=1; j<=m; j++)

304

for i:=1 to n do for j:=1 to m do v[i,j]:=0; for j:=1 to m do begin v[p[j],j]:=1; v[q[j],j]:=-1; end; for i:=1 to n do begin for j:=1 to m do write(v[i,j]:3); writeln; end; end; begin citire; pct_a; pct_b; end.

v[i][j]=0; for (j=1; j<=m; j++) { v[p[j]][j]=1; v[q[j]][j]=-1; } for (i=1; i<=n; i++) { for (j=1; j<=m; j++) cout<<setw(3)<<v[i][j]; cout<<endl; } } void main() { citire(); pct_a(); pct_b();

BAZE DE DATE

Subiectul nr.1 S se creeze o tabel cu structura Cod_numeric_personal, Numele, Data_angajarii, Data_nasterii i s se introduc 8 articole cu date care s corespund cerinelor urmtoare:

305

a. S se afieze pe ecran toi angajaii cu o vechime mai mare de 10 ani; b. S se afieze toate persoanele a cror zi de natere se srbtorete astazi. Rezolvare. Observatie : Secventa urmatoare construieste tabela prin program. Ea nu mai apare in rezolvarea celorlalte subiecte, dar poate fi adaptata usor in functie de structura tabelei date. Tabela se construieste intr-o baza de date pentru a putea folosi nume de campuri lungi(mai mult de 10 caractere). Cerinta a. clear create databases ate1 create table s1(cod_numeric_personal n(13),numele ; c(12),data_angajarii d,data_nasterii d) for i=1 to 8 append blank @4,4 say[ cod-numeric..] get cod_numeric_personal @5,4 say[ numele..] get numele @6,4 say[ data-angajarii..] get data_angajarii @7,4 say[ data-nasterii..] get data_nasterii read endfor wait [Continuati d/n ?] to continua do while (continua=[d]) append blank @4,4 say[ cod-numeric..] get cod_numeric_personal @5,4 say[ numele..] get numele @6,4 say[ data-angajarii..] get data_angajarii @7,4 say[ data-nasterii..] get data_nasterii read wait [Continuati d/n ?] to continua

306

enddo clear zi=day(date()) luna=month(date()) an=year(date())-10 limita=ctod(str(luna)+str(zi)+str(an)) clear i=4 @i,5 say [Lista persoanelor cu o vechime mai mare de 10 ani] @i+1,5 say replicate('-',75) scan for data_angajarii<=limita @i+2, 15 say numele i=i+1 endscan read time 5 Cerinta b. clear zi=day(date()) luna=month(date()) i=4 @i,5 say [Lista persoanelor a caror zi de nastere se sarbatoreste astazi] @i+1,5 say replicate('-',95) scan for day(data_nasterii)=zi and month(data_nasterii)=luna @i+2, 15 say numele @i+2 ,35 say data_nasterii i=i+1 endscan Subiectul nr.2 S se creeze o tabel cu structura Numar_bilet, Oras, Pret, Numar_vagon i s se introduc 8 articole. Cerine:

307

a. S se calculeze suma realizat n urma vnzrii tuturor biletelor nregistrate n tabel; b. S se afieze pe ecran numrul de bilete vndute cu destinaia un anumit ora X, citit de la tastatur. Rezolvare. Cerinta a. suma=0 scan suma=suma+pret endscan clear @4,4 say[Suma totala este:]+str(suma) read time 5 Cerinta b. clear accept[Introduceti destinatia..] to orase count for oras=orase to nrorase @4,4 say[Numarul de bilete vandute:]+str(nrorase)

Subiectul nr.3 S se creeze o tabel cu structura Cod_caseta, Nume_film, Actor_principal, Tip. S se introduc n tabel minimum 8 articole, cu date care s corespund urmtoarelor cerine: a. S se tearg din tabel toate filmele de tip HORROR;

308

b. S se listeze pe monitor toate filmele n care joac actorul RICHARD GERE. Rezolvare. Cerinta a. scan for tip=[HORROR] delete endscan pack Cerinta b. i=4 clea @i-1,5 say repl('-',103) @i,5 say [Cod caseta] @i,20 say [Nume film] @i,35 say [Actor principal] @i,55 say [Tipul casetei] @i+1,5 say replicate('-',103) scan for actor_principal=[RICHARD GERE] @i+2,2 say cod_caseta @i+2,22 say nume_film @i+2,35 say actor_principal @i+2,57 say tip i=i+1 endscan

Subiectul nr.4

309

S se creeze o tabel cu urmatoarea structur Cod_furnizor, Cod_material, Nume_material, Pret, Cantitate. S se introduc n tabel minimum 8 articole. Cerine: a. S se afieze toate ofertele pentru materialul X dat de la tastatura, cresctor, dup preul oferit; b. S se afieze preul total al materialelor oferite de furnizorul Y - citit de la tastatur. Datele introduse n tabel trebuie s corespund cerinelor enunate mai sus Rezolvare Observatie: inregistrarile care nu indeplinesc conditiile cerute sunt sterse temporar. Ele se deselecteaza prin instructiunea recall all. Cerinta a. clear use s4 accept[ Numele materialului..] to tip delete for nume_material<>tip set deleted on set order to pret i=4 clea @i-1,5 say repl('-',103) @i,5 say [Cod furnizor] @i,20 say [Cod material] @i,35 say [Nume material] @i,55 say [Pretul] @i,65 say [Cantitate] @i+1,5 say replicate('-',103) scan @i+2,5 say cod_furnizor @i+2,23 say cod_material @i+2,39 say nume_material

310

@i+2,53 say pret @i+2,67 say cantitate i=i+1 endscan read time 5 recall all Cerinta b. clear input [Introduceti codul furnizorului..] to cod delete for cod_furnizor<>cod set deleted on p=0 scan p=p+pret*cantitate endscan ? [Suma calculata=],p recall all

Subiectul nr.5 S se creeze o tabel cu structura: Nume_muncitor, Cod_atelier, Numar_piese_produse i s se introduc 8 articole (un articol-un muncitor, codul unui atelier este un numr de la 1 la 9. Pot fi mai muli muncitori ntr-un atelier i toi au nume diferite). Cerine: a. S se afieze numrul atelierelor din tabel; b. S se afieze numrul de piese produse de fiecare atelier.

311

Rezolvare. Cerinta a. clear select 1 use s5 index on cod_atelier tag ateliere unique count to nratelier @2,2 say [Numar ateliere:]+str(nratelier) read time 5 Cerinta b. clear select 2 use s5 again select 1 scan atelier=cod_atelier select 2 nrpiese=0 scan for cod_atelier=atelier nrpiese=nrpiese+numar_piese_produse ends ? [Atelierul],atelier,nrpiese select 1 endscan Subiectul nr.6 S se creeze o tabel cu structura: Nume_muncitor, Cod_atelier, Numar_piese_produse i s se introduc 8 articole (un articol-un muncitor, codul unui atelier este un numr de la 1 la 9. Pot fi mai muli muncitori ntr-un atelier i toi au nume diferite). Cerine:

312

a. S se afieze codul atelierului din tabel cu cei mai muli muncitori; b. S se afieze codurile atelierelor n care numrul de piese produse este mai mare dect o valoare dat de la tastatur.
Rezolvare. Observatie: cerinta b. s-a rezolvat cu instructiunea SQL Select. Cerinta a. clear note index on cod tag atel set order to atel maxi=0 k=0 c=cod scan if cod=c k=k+1 else if maxi<k maxi=k Clear ?[ Lista codurilor] ?c else if maxi=k ?c endif endif k=1 c=cod endif
313

endscan if maxi=k ?c endif Read time 5 clear ( Rezolvare propusa de Bercea Teodor) Cerinta b. SELECT S6.cod_atelier, sum(numar_piese_produse) as total; FROM ate6!s6; GROUP BY S6.cod_atelier; INTO TABLE coduri.dbf input[ Limita de piese..] to numar i=4 @i-1,5 say replicate('-',44) @i,5 say [Cod atelier] @i,19 say [Numar muncitori] @i+1,5 say replicate('-',44) scan for total>numar @i+2,5 say cod_atelie @i+2,25 say total i=i+1 endscan use Subiectul nr.7 S se creeze o tabel cu structura: Nume_muncitor, Cod_atelier, Numar_piese_produse i s se introduc 8 articole (un articol-un muncitor, codul unui atelier este un numr de la 1 la 9. Pot fi mai muli muncitori ntr-un atelier i toi au nume diferite). Cerine:

314

a. Se terg articolele pentru care producia unui muncitor este mai mic dect o valoare dat de la tastatur. S se afieze numele acestora i codurile atelierelor din care fceau parte; b. S se afieze numrul atelierelor ce au rmas cu cel mult doi muncitori n urma tergerii articolelor de la cerina a). Rezolvare. Cerinta a. clear select 1 use s7 select 2 create table ateliere(cod_atelier n(8)) append from s7 index on cod_atelier tag atelier unique select 1 i=4 clear input[numarul minim de piese ] to piese @i-1,5 say replicate([-],33) @i,5 say [Nume muncitor] @i,25 say [Cod atelier] @i+1,5 say replicate([-],33) scan for numar_piese_produse<piese @i+2,8 say nume_muncitor @i+2,23 say cod_atelier i=i+1 delete endscan pack read time 5

315

Cerinta b. clear select 2 contor=0 scan atelier=cod_atelier select 1 count for cod_atelier=atelier to numar if numar<3 contor=contor+1 endif select 2 endscan @5,5 say [Numarul atelierelor cu cel mult 2 ; angajati:]+str(contor) select 1 Subiectul nr.8 S se creeze o tabel cu structura: Nume_muncitor, Cod_atelier, Numar_piese_produse, Salariul i s se introduc 8 articole (un articol-un muncitor, codul unui atelier este un numr de la 1 la 9. Pot fi mai muli muncitori ntr-un atelier i toi au nume diferite). Cerine: a. Toi muncitorii ce au produs un numr de piese mai mare cu cel putin 10% dect o valoare citit de la tastatur vor avea salariul majorat cu 10%. S se afieze salariile acestora (dupa mrirea salariilor) i codul atelierelor din care fceau parte; b. S se afieze suma total necesar mririi salariilor de la cerina a) i codul atelierului cu cei mai muli muncitori cu salarii mrite.

316

Rezolvare. Cerinta a. clear declare v[10] for i=1 to 9 v[i]=0 endfor clear input [ Numarul de piese..] to piese piese=int(piese*110/100) sume=0 i=4 @i-1,5 say replicate([-],33) @i,5 say [Salariul] @i,18 say [Cod atelier] @i+1,5 say replicate([-],33) scan for numar_piese_produse>=piese v[cod_atelier]=v(cod_atelier)+1 sume=sume+int(salariul*110/100)-salariul replace salariul with int(salariul*110/100) @i+2, 2 say salariul @i+2,12 say cod_atelier i=i+1 endscan read time 5 Cerinta b. clear @5,5 say [Suma suplimentara=]+str(sume) maxim=0 for i=1 to 9 if v[i]>maxim maxim=v[i] atelier=i

317

endif endfor @7,5 say [Codul atelierului fruntas:]+str( atelier) Subiectul nr.9 S se creeze o tabel cu structura: Nume_muncitor, Cod_atelier, Numar_piese_produse, Varsta i s se introduc 8 articole (un articol-un muncitor, codul unui atelier este un numr de la 1 la 9. Pot fi mai muli muncitori ntr-un atelier i toi au nume diferite). Cerine: a. Pentru a putea lucra n strintate, un muncitor trebuie s aib o varsta cel mult egala cu o valoare citit de la tastatur i s produc un numr de piese cel puin egal cu o valoare dat de la tastatur. S se afieze numele celor ce ndeplinesc ambele condiii i atelierele n care lucreaz acetia; b. S se afieze numrul mediu de piese produse de toi cei selectai la prima cerin. Rezolvare. Cerinta a. clear input[Varsta limita:] to ani input[Numar minim de piese:] to piese i=7 @i-1,5 say replicate([-],27) @i,5 say [Nume muncitor] @i,18 say[ Cod atelier] @i+1,5 say replicate([-],27) sume=0 numar=0 scan for varsta>=ani and numar_piese_produse>=piese

318

@i+2,7 say nume_muncitor @i+2,18 say cod_atelier i=i+1 numar=numar+1 sume=sume+numar_piese_produse endscan Cerinta b. medie=sume/numar @i+10,5 say [Numarul mediu de piese:] @i+10,28 say medie Subiectul nr.10 S se creeze o tabel cu structura: Nume_muncitor, Cod_atelier, Numar_piese_produse, Numar_copii_minori i s se introduc 8 articole (un articol-un muncitor, codul unui atelier este un numr de la 1 la 9. Pot fi mai muli muncitori ntrun atelier i toi au nume diferite). Cerine: a. S se afieze o list cu muncitorii din fiecare atelier (codul atelierului i apoi toi muncitorii din acel atelier i la fel pentru fiecare atelier); b. S se afieze numrul tuturor copiilor minori ai tuturor muncitorilor din tabel.

Rezolvare. Observatie. Se deschide tabela in doua zone de lucru si se creaza un index unic intr-una dintre zone, pentru a obtine lista atelierelor. Pentru a obtine suma copiilor se foloseste functia sum.

319

Cerinta a. clear select 1 use s10 again select 2 use s10 again index on cod_atelier tag atelier unique scan atelier=cod_atelier select 1 i=4 @i,5 say[Atelierul ]+str(atelier) scan for cod_atelier=atelier @i+4,5 say nume_muncitor i=i+1 endscan select 2 read time 4 clear endscan Cerinta b. set talk off select 1 sum(numar_copii_minori) to copii @15,5 say[ Numar total de copii]+str(copii)

Subiectul nr.11

320

S se creeze o tabel cu structura: Nume_muncitor, Cod_atelier, Numar_piese_produse i s se introduc 8 articole (un articol-un muncitor, codul unui atelier este un numr de la 1 la 9. Pot fi mai muli muncitori intr-un atelier i toi au nume diferite). Cerine: a. S se afieze numrul mediu de piese produse de un muncitor (numr total piese / numr muncitori); b. S se afieze numrul mediu de piese produse n fiecare atelier (numr total piese / numr ateliere). Observatie. Se obtine lista atelierelor ca la problema precedenta. Pentru calcularea mediei se foloseste functia avg in instructiunea calculate. Rezolvare. Cerinta a. select 1 use s11 clear calculate avg(numar_piese_produse) to medie @5,5 say [Media pieselor] @5,19 say medie read time 4 clear select 2 use s11 again index on cod_atelier tag atelier unique scan atelier=cod_atelier select 1

321

piese=0 numar=0 scan for cod_atelier=atelier piese=piese+numar_piese_produse numar=numar+1 endscan medie=piese/numar @5,5 say [Atelierul]+str(atelier) @7,5 say [Media pe atelier] @7,24 say medie select 2 read time 4 clear endscan

Subiectul nr.12 S se creeze o tabel cu structura: Nume_muncitor, Cod_atelier, Numar_piese_produse i s se introduc 8 articole (un articol-un muncitor, codul unui atelier este un numr de la 1 la 9. Pot fi mai muli muncitori ntr-un atelier i toti au nume diferite). Cerine: a. S se tearg articolele referitoare la muncitorii ce produc un numr de piese mai mai mic dect un numr dat de la tastatur i s se depun intr-o tabela nou (cu structura: Nume_muncitor, Numar_piese), apoi s se sorteze alfabetic noua tabel dup cmpul Nume_muncitor i s se afieze sortat; b. S se afieze tabela iniial, dup transferul precizat la cerina a). Rezolvare.

322

Cerinta a. select 1 use s12 again clear input [Limita de piese..] to piese select 2 create table elimin(nume_muncitor c(13); ,numar_piese_produse n(4)) select 1 scan for numar_piese_produse<piese n=nume_muncitor p=numar_piese_produse delete select 2 append blank replace nume_muncitor with n replace numar_piese_produse with p select 1 endscan pack select 2 use elimin agai index on nume_muncitor tag nume i=4 @i-1,5 say replicate([-],45) @i,5 say [Nume muncitor] @i,22 say [Numar de piese] @i+1,5 say replicate([-],45) scan @i+2,5 say nume_muncitor @i+2,22 say numar_piese_produse i=i+1 endscan read time 6

323

Cerinta b. select 1 clear @i-1,5 say replicate([-],45) @i,5 say [Nume muncitor] @i,22 say [Cod atelier] @i,34 say [Numar de piese] @i+1,5 say replicate([-],45) scan @i+2,5 say nume_muncitor @i+2,20 say cod_atelier @i+2,36 say numar_piese_produse i=i+1 endscan Subiectul nr.13 S se creeze o tabel cu structura: Nume_muncitor, Cod_atelier, Numar_piese_produse i s se

introduc 8 articole (un articol-un muncitor, codul unui atelier este un numr de la 1 la 9. Pot fi mai muli muncitori ntr-un atelier i toi au nume diferite). Cerine: a. Se citete de la tastatur un cod de atelier
existent n tabel. n acel atelier se angajeaz un muncitor nou pentru care se introduc date de la tastatur. Cmpul Numar_piese se va completa cu valoarea 0. S se afieze apoi numarul minim necesar de piese pe care noul venit trebuie s le produc astfel nct producia medie a acelui atelier s nu scad; b. Se citete de la tastatur un nume de muncitor i un cod de atelier. Dac muncitorul figureaz in acel atelier din tabel, atunci s i

324

se schimbe codul atelierului su cu un alt cod dat (existent n tabel) de la tastatur (se mut de la un atelier la altul). Dac acel muncitor nu figureaz n atelierul dat, atunci se va da un mesaj. Rezolvare. Cerinta a. clear input [Introduceti codul atelierului..] to atelier numar=0 piese=0 scan for cod_atelier=atelier numar=numar+1 piese=piese+numar_piese_produse endscan medie=piese/numar+1 append blank @4,4 say[ nume-muncitor..] get nume_muncitor replace cod_atelier with atelier replace numar_piese_produse with 0 read @8,5 say [Numarul minim este]+str(medie) read time 5 Cerinta b. clear accept [Introuceti numele..] to num input [Introuceti codul atelierului..] to c locate for nume_muncitor=num and cod_atelier=c

325

if found() input [Introduceti codul noului atelier..] to codnou replace cod_atelier with codnou else wait window [Muncitorul nu figureaza in atelier !!] endif

Subiectul nr.14 S se creeze o tabel cu structura: Nume_muncitor, Cod_atelier, Numar_piese_produse i s se introduc 8 articole (un articol-un muncitor, codul unui atelier este un numr de la 1 la 9. Pot fi mai muli muncitori ntr-un atelier i toi au nume diferite). Cerine: a. Muncitorul/muncitorii cu numr maxim de piese produse se va / se vor transfera la alt loc de munc. S se afieze n ordine alfabetic numele celor transferai; b. S se afieze numrul mediu de piese produse de ctre cei ramai n vechile ateliere.

Rezolvare. Cerinta a. select 1 use s14 again clear select 2 create table maximi(nume_muncitor c(13))

326

select 1 calculate max(numar_piese_produse) to maxim scan for numar_piese_produse=maxim nume=nume_muncitor delete select 2 append blank replace nume_muncitor with nume select 1 endscan select 2 index on nume_muncitor tag nume clear i=4 @i,5 say [Muncitori transferati] scan @i+2,5 say nume_muncitor i=i+1 endscan read time 5 Cerinta b. clear select 1 set deleted on piese=0 numar=0 scan piese=piese+numar_piese_produse numar=numar+1 endscan medie=int(piese/numar) @5,4 say [Media este]+str(medie) endif

327

Subiectul nr.15 S se creeze o tabel cu structura: Cod_material, Pret_unitar, Cantitate, Stoc_necesar i s se introduc 8 articole (un articol-un produs dintr-un depozit; cantitate = existentul n depozit; stoc_necesar = cantitatea minim necesar n depozit; valoarea unui produs = cantitatea * pret_unitar). Cerinte: a. S se afieze codurile produselor pentru care cantitatea existent este mai mic dect stocul necesar. Pentru fiecare dintre aceste produse se va afia ce cantitate trebuie adaugat pentru a se realiza o cantitate egal cu acel stoc_ necesar; b. S se afieze codurile produselor ce au cantitate mai mare cu cel putin 20% dect stoc_necesar, n ordinea codurilor Rezolvare. Cerinta a. clear i=4 @i-1,5 say replicate([-],33) @i,5 say [Cod material] @i,18 say[Cantitate necesara] @i+1,5 say replicate([-],33) scan for cantitate<stoc_necesar @i+2,5 say cod_material @i+2,18 say str(stoc_necesar-cantitate) i=i+1

328

endscan read time 11 Cerinta b. clear index on cod_material tag cod i=4 @i,5 say [Codul materialului] scan if cantitate>int(stoc_necesar*120/100) @i+2,8 say cod_material endif i=i+1 endscan

Subiectul nr.16 S se creeze o tabel cu structura: Cod_material, Pret_unitar, Cantitate, Stoc_necesar i s se introduc 8 articole (un articol-un produs dintr-un depozit; cantitate = existentul in depozit; stoc_necesar = cantitatea minim necesar n depozit; valoarea unui produs = cantitatea * pret_unitar). Cerinte: a. Se citesc de la tastatur un cod de material i o cantitate. Dac acel produs este n tabel i dac se poate livra (cantitatea din depozit este cel putin egala cu cea citit), atunci s se afieze cantitatea ramas n depozit dupa livrare. Dac acea cantitate ramas n depozit este mai mic dect stocul_necesar, se va da

329

un mesaj. Dac nu exist acel produs, sau nu e n cantitatea dorit, se va da un alt mesaj; b. Se citesc de la tastatur un cod de material ( c ) i o cantitate (k). Dac acel cod corespunde unui produs existent, atunci se va mri pentru el cantitatea existent n depozit cu valoarea k. Dac nu exist, atunci se va adauga tastatur. un i nou articol cu cmpurile de la pret_unitar stoc_necesar citite

Rezolvare. Cerinta a. define window geam from 2,2 to 15,33 ; color r*/gr+ font [arial],14 clear input [Introduceti codul materialului ] to cod locate for cod_material=cod if not found() wait window [Materialul solicitat nu se vinde in acest magazin !] else input [Introduceti cantitatea solicitata ] to cant if cantitate>=cant replace cantitate with cantitate-cant wait window [Cantitatea ramasa:]+str(cantitate) if cantitate<stoc_necesar for i=1 to 4 activate window geam

330

@3,3 say [Stoc insuficient !!] read time 1/2 deactivate window geam read time 1/2 endfor endif else wait window [Nu dispunem de intreaga cantitate solicitata !] endif endif read time 1 Cerinta b. clear input [Introduceti codul materialului ] to c input [Introduceti cantitatea ] to k locate for cod_material=c if found() replace cantitate with cantitate+k else append blank clear @5,5 say [Introduceti pretul..] get pret_unitar @6,5 say [introduceti stocul necesar..] get stoc_necesar read replace cod_material with c replace cantitate with k endif read time 2 clear select 1

331

Subiectul nr.17 S se creeze o tabel cu structura: Nume_autor, Titlu, Nr_exemplare_imprumutate, Data_imprumut i s se introduc cel putin 8 articole. Cerine: a. S se afieze numele autorului cu cele mai multe titluri; b. S se afieze numele autorului cu cele mai puine cri solicitate pentru mprumut n luna curent. Rezolvare. Cerinta a. set talk off clear calculate max(nr_exemplare_imprumutate) to maxi scan for nr_exemplare_imprumutate=maxi ? [ ],nume_autor endscan read time 5 Cerinta b clear calculate min(nr_exemplare_imprumutate) to maxi scan for nr_exemplare_imprumutate=maxi ? [ ],nume_autor endscan

332

Subiectul nr.18 S se creeze o tabel cu structura: Nume_angajat, Salariu, Numar_copii_minori, Numar_zile_concediu_medical i s se introduc cel putin 8 articole. Un articol reprezint un angajat din intreprindere. Cerine: a. S se afieze numele angajatului cu cele mai multe zile de concediu medical; b. S se afieze salariul mediu al celor ce au avut concediu medical i care au cel puin un copil minor.

Rezolvare. Cerinta a. set talk off clear calculate max(numar_zile_concediu_medical) to maxi clear i=4 @i-1,5 say replicate([-],44) @i,5 say [Numele angajatului] @i+1,5 say replicate([-],44) scan for numar_zile_concediu_medical=maxi @i+2,14 say nume_angajat i=i+1 endscan read time 3 Cerinta b. clear

333

calculate avg(salariu) for numar_zile_concediu_medical>0 and ; numar_copii_minori>0 to med @5,5 say [Salariul mediu] @5,22 say med Subiectul nr.19 S se creeze o tabel cu structura: Nume_medic, Nume_pacient, Diagnostic, Data_consultului, i s se introduc cel putin 8 articole. Un articol reprezint un pacient dintr-o policlinic (un consult - un articol). Cerine: a. S se afieze numrul pacienilor consultai n luna curent de ctre un medic al crui nume se introduce de la tastatur; b. S se afieze diagnosticul cel mai frecvent pus n luna curent. Rezolvare. Cerinta a. use s21 again clear set exact on delete for not(month(data_consultului)=month(date())and ; year(data_consultului)=year(date())) accept [Nume medic..] to nume count for nume_medic=nume to tot @5,5 say [Numarul de pacienti:]+str(tot) read time 3 clear Cerinta b.

334

alter table s21 add column total n(3) select 2 use s21 again index on diagnostic tag diag unique scan d=diagnostic select 1 count for diagnostic=d to sume select 2 replace total with sume endscan calculate max(total) to maxi i=4 @i-1,5 say replicate([-],44) @i,5 say [diagnosticul cel mai frecvent] @i+1,5 say replicate([-],44) scan for total=maxi @i+2,14 say diagnostic i=i+1 endscan recall all

Subiectul nr.20 S se creeze o tabel cu structura: Nume_elev, Clasa, Promovat i s se introduc cel putin 8 articole. Un articol reprezint un elev dintr-o clas a unei coli. Cerine: a. S se afieze clasa cu cel mai mare procent de promovabilitate. b. S se afieze numele elevilor nepromovai dintr-o clas dat de la tastatur. Rezolvare.

335

Cerinta a. clear set talk off alter table s23 add column total n(5,2) select 2 use s23 again index on clasa tag clasa unique scan cl=clasa select 1 count for clasa=cl and promovat to sume count for clasa=cl to numar select 2 replace total with sume/numar endscan calculate max(total) to maxi i=4 @i-1,5 say replicate([-],44) @i,5 say [Clasa cu cel mai mare procent] @i+1,5 say replicate([-],44) scan for total=maxi @i+2,15 say clasa i=i+1 endscan select 1 read time 3 clear Cerinta b. accept [Introduceti clasa:] to cl i=4 @i-1,5 say replicate([-],46) @i,5 say [Elevii nepromovati din clasa ]+cl @i+1,5 say replicate([-],46)

336

scan for clasa=cl and not promovat @i+2,15 say nume_elev i=i+1 endscan Subiectul nr.21 S se creeze o tabel cu urmtoarea stuctur:Cod_aliment, Den_aliment, Calorii n care introducei minimum 8 articole. Cerine: a. S se adauge la sfritul tabelei 3 nregisrri noi; b. S se afieze o list avnd cmpurile: den_aliment, calorii, n ordinea descresctoare a caloriilor. Rezolvare. Cerinta a. clear @2,2 say [Se introduc 3 noi inregistrari] for i=1 to 2 append blank @4,4 say[ cod aliment..] get cod_aliment @5,4 say[ den aliment..] get den_aliment @6,4 say[ calorii..] get calorii read endfor Cerinta b. clear index on calorii tag k descending set talk off
337

i=4 @i-1,5 say replicate([-],44) @i,5 say [Denumire aliment] @i,26 say [Calorii] @i+1,5 say replicate([-],44) scan @i+2,5 say den_aliment @i+2,27 say calorii i=i+1 endscan Subiectul nr.22 S se creeze la nivel de ntreprindere o tabel cu urmtoarea stuctur: Nume, Cod_pers, Adresa, Salariul n care introducei minimum 8 articole. Cerine: a. S se modifice adresa angajatului al crui nume a fost citit de la tastatur; b. S se afieze salariul mediu pe intreprindere. Rezolvare. Note Cerinta a. clear accept[ Introduceti numele ] to n locate for nume= n if found() @4,5 say [Modificati adresa:] @ 5,5 say adresa get adresa read else wait window [Persoana nu figureaza in tabela !!] endif

338

read time 3 clear note Cerinta b. set talk off calculate avg(salariul) to med @ 5,5 say [Salariul mediu este:]+str(med) Subiectul nr.23 S se creeze o tabel cu rezultatele sportivilor la Campionatul European de fotbal n care introducei minimum 8 articole. Sructura tabelei este urmtoarea: Nume_sportiv, Tara, Goluri_marcate. Cerine: a. S se afieze numrul rilor participante; b. S se afieze numele sportivilor, numrul de goluri marcate ale unei ri citite de la tastatur.

Rezolvare. Cerinta a.

clear index on tara tag tari unique count to numar @5,5 say[Numarul tarilor participante:]+str(numar) read time 3 Cerinta b..

339

clear set order to accept [Introduceti tara:] to tari i=4 @i-1,5 say replicate([-],48) @i,5 say [Numele jucatorului] @i,26 say [Numar goluri] @i+1,5 say replicate([-],44) scan for tara=tari @i+2,11 say nume_sportiv @i+2,27 say tara i=i+1 endscan Subiectul nr.24 Un depozit aprovizioneaz cu produse mai multe magazine. S se creeze o tabel cu urmtoarea structur: Cod_produs, Data_livrare, Pret_unitar, Cantitate, Unitate_masura, Cod_magazin n care introducei minimum 8 articole. Cerine: a. Pentru o data_livrare Y (citit de la tastatur) s se afieze toate codurile magazinelor i produsele cu care au fost aprovizionate; b. S se determine produsul cel mai solicitat n data_livrare X (citit de la tastatur) i s se afieze valoarea total obinut prin vnzarea lui. Rezolvare. Cerinta a. clear note alter table s27 add column total n(2) input [Introduceti data calendaristica] to d

340

clear i=4 @i-1,5 say replicate([-],44) @i,5 say [Cod magazin] @i,21 say [Cod produs] @i+1,5 say replicate([-],44) scan for data_livrare=d @i+2,10 say cod_magazin @i+2,25 say cod_produs i=i+1 endscan read time 3 Cerinta b clear select 2 use s27 again delete for data_livrare <> d set deleted on index on cod_produs tag cod unique scan c=cod_produs sele 1 count for cod_produs=c to numar sele 2 replace total with numar endscan calculate max(total) to maxi i=4 @i-1,5 say replicate([-],44) @i,5 say [Cod produs] @i+1,5 say replicate([-],44) scan for total=maxi

341

@i+2,15 say cod_produs i=i+1 endscan

Subiectul nr.25 Un magazin se aprovizioneaz cu produse de la mai multe depozite. Creai tabela cu urmtoarea structur: Cod_produs, Cantitate, Pret_unitar, Unitate_masura, Cod_depozit, Data_aprovizionare n care introduceti minimum 8 articole. Cerine: a. Pentru un produs dat, afiai cantitatea cu care sa aprovizionat magazinul n luna X (citit de la tastatur); b. Afiai valoarea total a mrfurilor transferate de la un depozit cu codul Z (citit de la tastatur). Rezolvare. Cerinta a. clear input [Introduceti luna..] to l input [Introduceti anul..] to a cant=0 input [Produs..] to k scan for month(data_aprovizionare)=l and; year(data_aprovizionare)=a and cod_produs=k cant=cant+cantitate endscan @5,6 say [Cantitatea totala]+str(cant) wait

342

Cerinta b. clear input[Introduceti cod depozit] to z suma=0 scan for cod_depozit=z suma=suma+pret_unitar*cantitate endscan @6,7 say[valoare totala]+str(suma)

343

S-ar putea să vă placă și