Sunteți pe pagina 1din 60

1. Se considera tabela ANGAJATI cu structura: CNP, NUME, DATA_ANGAJARE, DATA_NASTERE, SALARIU. a.

Sa se creeze tabela si sa se introduca 10 articole care sa corespunda cerintelor urmatoare; b. Sa se afiseze pe ecran toti angajatii cu o vechime mai mare de 10 ani; c. Stergeti din baza de date toate persoanele cu numele dat de la tastatura; d. Afisati pe ecran numele celor mai vechi angajati; e. Modificati salariul persoanei cu numele Popescu marindu-l cu 10%; f. Afisati numarul de angajari din fiecare an. Rezolvare: b. select * from angajati where ((sysdate-data_angajare)/3650) >10; c. delete from angajati where nume=:x; d. select nume from angajati where data_angajare=(select min(data_angajare) from angajati); e. select salariu+10*salariu/100 from angajati where nume=Popescu; f. select count(*) from angajati as nr_ang, to char(data_a,yyyy) from angajati group by to_char(data_a, yyyy) 2. Se considera tabela ELEVI cu structura: NUME_PREN , NOTA_RO, NOTA_MAT, NOTA_GI, REZULTAT, MEDIE a. Sa se creeze tabela si sa se introduca 10 articole care sa corespunda cerintelor urmatoare; b. Completati campul Rezultat cu valoarea promovat daca elevul a promovat testul national (note minimum 5 la cele 3 discipline) nepromovat in caz contrar; c. Pentru elevii promovati calculati media generala la disciplina romana; d. Determinati procentul de promovabilitate (nr elevi promovati / nr elevi inscrisi); e. Afisati elevii care au obtinut cea mai mare medie; f. Afisati pe ecran elevii grupati dupa rezultat (promovat/nepromovat), apoi alfabetic dupa nume; Rezolvare: c. select avg(nota_ro) from elevi where rezultat=promovat; d. select ((select count (*) from elevi where rezultat=promovat)/ (select count (*) from elevi)) from dual e. select num_pren, medie from elevi where medie=(select max(medie) from elevi); f. select * from elevi order by rezultat desc, nume_pren. 3. Se considera tabela FILME cu structura: NUME, GEN, BUGET, DATA_AP a. Sa se creeze tabela si sa se introduca 10 articole care sa corespunda cerintelor urmatoare; b. Afisati pe ecran filmele gen comedie cu buget >10000; c. Afisati toate filmele din tabela grupate pe genuri; d. Afisati filmul care a avut cel mai mare buget; e. Stergeti din tabela filmele in aparute inainte de 1-ian-1990; f. Calculati bugetul total al tuturor filmelor gen aventura. Rezolvare: b. select nume from filme where gen=comedie and buget>10000;

c. select nume, gen, buget, data_ap from filme order by gen; d. select nume from filme where buget=(select max(buget) from filme); e. delete from filme where data_ap<1-01-1991; f. select sum(buget) from filme where gen=comedie; 4. Se considera tabela ELEVI cu structura: NUME, CLASA, MEDIE, ABS_NEM g. Sa se creeze tabela si sa se introduca 10 articole care sa corespunda cerintelor urmatoare h. Afisati elevul (elevii) cu media cea mai mare din clasa 12A; i. Afisati pe ecran in ordine alfabetica elevii cu peste 20 absente nemotivate; j. Aflati suma totala a absentelor nemotivate pe fiecare clasa; k. Stergeti elevii cu peste 40 absente nemotivate; l. Elevul Popescu Gigel se muta din clasa 12A in clasa 12B. Faceti modificarile necesare. Rezolvare: b. select nume from elevi where medie=(select max(medie) from elevi where clasa=12a) and clasa=12a; c. select * from elevi where abs_nem>20 order by nume; d. select clasa, sum(abs_nem) as total_absente from elevi group by clasa; e. delete from elevi where abs_nem>40; f. update elevi set clasa=12b where nume=popescu gigel. 5. Se considera tabela PROFESORI cu structura: NUME, GRAD, DATA_NAST, CATEDRA, SALAR, DIRIG a. Sa se creeze tabela si sa se introduca 10 articole care sa corespunda cerintelor urmatoare b. Afisati profesorii cu gradul I; c. Aflati salariul mediu pe coala si numarul de profesori care au mai putin de salariul mediu d. Afisati alfabetic profesorii care sunt diriginti. e. Stergeti din tabela profesorii care implinesc 60 ani in anul calendaristic curent f. Afisati numarul de profesori de la fiecare catedra. Rezolvare: b. select nume from profesori where grad=1; c. select count(*) from profesori where salariu<(select avg(salariu) from profesori); d. select nume from profesori where dirig=da order by nume; e. delete from profesori where (sysdate-data_nast)/365=60; f. select count (*), catedra from profesori group by catedra. 6. Se considera tabela EXCURSII cu structura: DESTI NATIE, DATA_PL, PRET, DURATA, TRANSPORT (avion, autocar, etc) a. Sa se creeze tabela si sa se introduca 10 articole care sa corespunda cerintelor urmatoare b. Afisati excursiile din tabela cu destinatia NISA ordonate crescator dupa data plecarii c. Aflati destinatia (destinatiile) cea mai ieftina d. Afisati excursiile din tabela grupate pe destinatii e. Modificati pretul la excursiile cu avionul (pretul excursiei scade cu 25%)

f. Stergeti din tabela excursiile care s-au desfasurat sau care sunt in curs de desfasurare (au data plecarii anterioara datei curente) Rezolvare: b. select * from excursii where destinatie=nisa order by data_pl; c. select destinatie from excursii where pret=(select min(pret) from excursii); d. select destinatie from excursii group by destinatie; e. update excursii set pret=pret-25*pret/100 where transport=avion; f. delete from excursii where data_pl<=sysdate. 7.Se considera tabela CIOCOLATA cu structura: SORTIMENT, PRET_BUC, FIRMA_PROD a. Sa se creeze tabela si sa se introduca 10 articole care sa corespunda cerintelor urmatoare; b. Afisati sortimentele de ciocolata ce au pretul_bucata >20 Ron ordonata alfabetic dupa firma producatoare; c. Aflati firma (firmele) ce produce cea mai ieftina ciocolata; d. Afisati pentru fiecare firma numarul de sortimente de ciocolata; e. Modificati pretul_bucata (scade cu 15%) la toate sortimentele firmei Primola; f. Stergeti din tabela toate sortimentele firmei Poiana; Rezolvare: a. select * from ciocolata where pret_buc>20 order by firma_prod; b. select firma_prod from ciocolata where pret_buc=(select min(pret_buc) from ciocolata); c. select count(sortiment) from ciocolata group by firma_prod; d. update ciocolata set pret_buc=pret_buc-15*pret_buc/100 where firma_prod =primola; e. delete from ciocolata where firma_prod=poiana. 8.Se considera tabela LIBRARIE cu structura: TITLU, AUTOR, PRET_BUC, EDITURA a.Sa se creeze tabela si sa se introduca 10 articole care sa corespunda cerintelor urmatoare; b.Afisati toate cartile autorului Mihai Eminescu ordonate descrescator dupa pret; c.Aflati costul total al tuturor cartilor de la editura Donaris; d.Afisati pentru fiecare autor numarul total al cartilor sale; e.Aflati cartea (cartile) cea mai scumpa; f.Stergeti din tabela cartile cu pretul mai mare de 25 Ron si aparute la editura X (X de la tastatura) Rezolvare: b. select * from librarie where autor=mihai eminescu order by pret_buc desc; c. select sum(pret_buc) from librarie where editura=donaris; d. select autor, count(*) from librarie group by autor; e. select * from librarie where pret_buc=(select max(pret_buc) from librarie); f. delete from librarie where pret_buc>20 and editura=:x;

9.Se considera tabela FARMACIE cu structura: MEDICAMENT, DATA_EXP, PRET a.Sa se creeze tabela si sa se introduca 10 articole care sa corespunda cerintelor urmatoare. b.Afisati medicamentele care mai au o luna pana la expirare c.Micsorati pretul cu 5% la medicamentul aspirina; d.Aflati medicamentul(medicamentele) cel mai ieftin; e.Aflati pretul unui medicament dat de la tastatura; f.Stergeti din tabela medicamentele care au data de expirare astazi. Rezolvare: b. select * from farmacie where data_exp=11.03.2010; c. update farmacie set pret=pret-5*pret/100 where medicament=aspirina; d. select * from farmacie where pret=(select min(pret) from farmacie); e. select pret from farmacie where medicament=:x; f. delete from farmacie where data_exp=11.02.2010. 10.Se considera tabela CONCURS cu structura : NUME, NOTA1, NOTA2, NOTA3, NOTA_FIN, DATA_NAST, JUDET a.Sa se creeze tabela si sa se introduca 10 articole care sa corespunda cerintelor urmatoare; b.Calculati nota_fin (media aritmetica a celor 3 note) pentru fiecare candidat; c.Afisati concurentii care au obtinut nota finala peste 7 in ordinea descrescatoare a mediilor; d.Afisati candidatul (candidatii) cu nota finala maxima; e.Afisati mediile generale pe judete (media aritmetica a notelor finale pentru fiecare judet); f.Stergeti concurentii care au media finala sub 5. Rezolvare: b. update concurs set nota_fin=(nota1+ nota2+ nota3)/3; c. select nume, nota_fin, judet from concurs where nota_fin>7 order by nota_fin desc; d. select * from concurs where nota_fin=(select max(nota_fin) from concurs); e. select judet, avg(nota_fin) from concurs group by judet; f. delete from concurs where nota_fin<5. 11.Se considera tabela FIRME cu structura: NUME, DATA_AP, ORAS, CAPITAL, NR_ANG a.Sa se creeze tabela si sa se introduca 10 articole care sa corespunda cerintelor urmatoare; b.Afisati firmele care au cel putin 3 ani de la infiintare ordonate alfabetic; c.Afisati firmele din tabela grupate pe orase; d.Aflati firma (firmele) cu cei mai multi angajati; e.Mariti cu 10% capitalul social al firmei x preluata de la tastatura; f.Stergeti din tabela firmele care au capital social <1000 Ron. Rezolvare: b. select * from firme where (sysdate-data_ap)/365>=3; c. select nume, oras from firme group by oras; d. select nume from firme where nr_ang=(select max(nr_ang) from firme);

nume=:x;

e. update firme set capital= capital+10*capital/100 where

f. delete from firme where capital<1000. 12.Se considera tabela CARTI cu structura: COD_CARTE, DENUMIRE_CARTE, AUTOR, AN_APARITIE, GEN, PRET. a.Sa se creeze tabela si sa se introduca 10 articole care sa corespunda cerintelor urmatoare; b.Sa se afiseze cartile a caror pret nu depaseste 10 RON; c.Sa se diminueze cu 10% pretul cartilor al caror an de aparitie este introdus de la tastatura; d.Sa se afiseze valoarea cartilor pentru fiecare autor a carui nume incepe cu litera A; e.Sa se afiseze denumirea cartii si autorul pentru care pretul este maxim; f.Sa se afiseze cartea si autorul pe genuri literare. Rezolvare: b. select * from carti where pret<10; c. update carti set pret=pret-10*pret/100; d. select * from carti where autor like a%; e. select pret, autor from where pret=(select max(pret) from carti); f. select gen from carti group by gen. 13.Se considera tabela TARI cu structura: NUME, REGIUNE, SUPRAFATA, POPULATIE, PIB (produsul intern brut al unei tari). a.Sa se creeze tabela si sa se introduca 10 articole care sa corespunda cerintelor urmatoare; b.Sa se afiseze tarile a caror populatie este mai mare de 20 milioane; c.Sa se afiseze tarile a caror regiune este introdusa de la tastatura; d.Afisati tarile in ordine descrescatoare a valorii produsului intern brut; e.Sa se afiseze tarile cu suprafata minima; f.Sa se afiseze numarul tarilor pe regiuni. Rezolvare: b. select * from tari where populatie>20 milioane; c. select * from tari where regiune=:x; d. select * from tari order by pib desc; e. select * from tari where suprafata=(select min(suprafata) from tari); f. select regiune, count(regiune) from tari group by regiune. 14.Se considera tabela SECTIE cu structura: COD_SECTIE,DENUMIRE, NR_ANGAJATI, PRODUCTIE, CIFRA_A(cifra de afaceri), PRODUCTIVITATE. a.Sa se creeze tabela si sa se introduca 10 articole care sa corespunda cerintelor urmatoare; b.Sa se afiseze sectiile cu numarul de angajati mai mare de 1000; c.Sa se completeze campul productivitate dupa formula cifra de afaceri/numar de angajati; d.Afisati sectiile cu productivitatea cea mai mare; e.Sa se stearga datele din baza de date pentru o sectie a carui cod este introdus de la tastatura; f.Sa se ordoneze crescator dupa productie. Rezolvare:

b. select * from sectie where nr_ang>1000; c. update sectie set productivitate=cifra_a/nr_ang; d. select * from sectie where productivitate=(select max(productivitate) from sectie); e. delete from sectie where cod_sectie=:x; f. select * from sectie order by productivitate desc. 15.Se considera tabela CLADIRI cu structura: DENUMIRE, LOCALITATE, VAL_INV (valoarea investitiei), AN_CON (anul construirii), INDICE, VAL_ACT (valoarea actualizata). a.Sa se creeze tabela si sa se introduca 10 articole care sa corespunda cerintelor urmatoare; b.Sa se afiseze denumirea cladirilor a carei valoare actualizata este mai mica de 100.000 RON; c.Modificati campul indice cu valoarea 1 pentru cladirile construite inainte de 1950 si cu 2 pentru cladirile construite dupa 1950; d.Afisati numarul cladirilor construite in anul 1970; e.Afisati cate cladiri au fost construite in fiecare localitate; f.Sa se afiseze valoarea investitiei si anul constructiei pentru o cladire a carei denumire este introdusa de la tastatura. Rezolvare: b. select * from cladiri where val_act<1000; c. update cladiri set indice=2 where an_con>=1950; update cladiri set indice=1 where an_con<1950; d. select count(*) from cladiri where an_con=1970; e. select loc, count(loc) from cladiri group by loc; f. select val_inv, an_con from cladiri where loc=:x. 16.Se considera tabela MATERIALE cu structura: DEN_MAT, STOC_I (stoc ini?ial), INTRARI , IESIRI, STOC_F (stoc final) a.Sa se creeze tabela si sa se introduca 10 articole care sa corespunda cerintelor urmatoare; b.Sa se completeze campul stoc final dupa formula: stoc initial+intrari-iesiri; c.Sa se afiseze materialele a caror stoc final este egal cu zero; d.Afisati materialele in ordine crescatoare a stocurilor initiale; e.Afisati materialele pentru care valoarea intrarii este cea mai mica. f.Stergeti din tabela materialele care au stocul final cuprins in intervalul a,b (a si b citite de la tastatura); Rezolvare: b. update materiale set stoc_f=stoc_i+intrari-iesiri c. select * from materiale where stoc_f=0; d. select * from materiale order by stoc_f; e. select * from materiale where intrari=(select min(intrari) from materiale) f. delete from materiale where :a<stoc_f and stoc_f <:b; 17.Se considera tabela SPITALE cu structura: NUME_P, DIAGNOSTIC, MEDIC, ETAJ , SALON. a.Sa se creeze tabela si sa se introduca 10 articole care sa corespunda cerintelor urmatoare; b.Lista alfabetica a pacientilor;

c.Afisati cati pacienti sunt internati avand diagnosticulGRIPA d.Afisati numarul de pacienti a fiecarui medic; e.Sa se afiseze care este salonul cu numar maxim de pacienti. f.Stergeti din tabela inregistrarea corespunzatoare unui pacient introdus de la tastatura. Rezolvare: b. select * from spitale order by nume_p; c. select count(*), nume_p from spitale where diagnostic=gripa; d. select medic, count(medic) as nr pacienti from spitale group by medic; e. select salon, count(*) from spitale group by salon; f. delete from spitale where nume_p=:x. 18.Se considera tabela SPORTIVI cu structura: NUME, VARSTA, SEX, GREUTATE, INALTIME, SPORT . a.Sa se creeze tabela si sa se introduca 10 articole care sa corespunda cerintelor urmatoare; b.Sa se afiseze sportivii de la haltere a caror greutate este de 80 kg; c.Listati alfabetic sportivii ordonandu-i dupa sporturile pe care le practica; d.Sa se afiseze cati sportivi practica Fotbal; e.Sa se afiseze care este sportivul cu inaltimea cea mai mare care face handbal; f.Afisati care este media de varsta pentru baieti, respectiv pentru fete. Rezolvare: b. select * from sportivi where sport=haltere and greutate=80; c. select * from sportivi order by sport; d. select count(*) from sportivi where sport=fotbal; e. select nume from sportivi where inaltime=(select max(inaltime) from sportivi) and sport=handbal; f. select avg(varsta) from sportivi where sex=f; select avg(varsta) from sportivi where sex=m; 19.Se considera tabela STATISTICA cu structura: NUME, STUDII, OCUPATIA , DOMENIU, VENIT. a.Sa se creeze tabela si sa se introduca 10 articole care sa corespunda cerintelor urmatoare; b.Sa se afiseze cate persoane au venit peste 10 milioane; c.Sa se stearga din baza de date informatiile corespunzatoare studiilor introduse de la tastatura; d.Afisati care sunt persoanele cu venit maxim din domeniul educatiei; e.Sa se afiseze cat la suta reprezinta persoanele cu ocupatia vanzator din acest sondaj; f.Sa se determine venitul total pe domenii. Rezolvare: b. select count(*) from statistica where venit>10; c. delete from statistica where studii=:x; d. select nume from statistica where venit=(select max(venit) from statistica where domeniu =educational) and domeniu=educational; e. select (select count(*) from statistica where ocupatia=vanzator)/(select count(*) from statistica) * 100 from dual.

f. select sum(venit), domeniu from statistica group by domeniu. 20.Se considera tabela ABONATI cu structura: NUME, CNP, MIN_INCLUSE, MIN_UTILIZATE, VALOARE, ACHITAT, RETEA. a.Sa se creeze tabela si sa se introduca 10 articole care sa corespunda cerintelor urmatoare; b.Sa se afiseze pentru fiecare abonat valoarea facturii pe care trebuie sa o achite cunoscand ca minutele suplimentare costa cu 10% mai mult decat minutele incluse si ca tariful unui minut inclus este de 0,25 lei; c.Afisati abonatii care sunt restanti; d.Sa se afiseze abonatii cu valoarea facturata cea mai mare; e.Pentru abonatul a carui CNP s-a introdus de la tastatura sa se indice daca a achitat; f.Sa se afiseze valoarea obtinuta din incasari pentru fiecare retea. Rezolvare: b. alter table abonati add factura number update abonati set factura=0.25*min_incluse where (min_utilizate-min_incluse)<=0; update abonati set factura=0.25*min_incluse+0.275*(min_utilizate-min_incluse) where (min_utilizate-min_incluse)>0; c. select * from abonati where achitat=0; d. select nume from abonati where factura=(select max(factura) from abonati); e. select achitat from abonati where cnp=:x; f. select sum(factura), retea from abonati group by retea. 21.Se considera tabela STUDENTI cu structura: NUME, CNP, AN, MEDIE, BURSA. a.Sa se creeze tabela si sa se introduca 10 articole care sa corespunda cerintelor urmatoare; b.Sa se afiseze cati studenti primesc bursa din anul I; c.Afisati studentii care au bursa de merit(media peste 9,50 inclusiv); d.Afisati numarul studentilor bursieri din fiecare an; e.Afisati care este valoarea maxima a bursei dupa marirea cu 20% f.Sa se stearga studentii care au pierdut bursa(media este sub 8). Rezolvare: b. select count(*) from studenti where bursa< >0 and an=1; c. select nume from studenti where medie>=9.5; d. select count(*), an, from studenti where bursa< >0 group by an; e. update studenti set bursa=bursa+20*bursa/100 select bursa from studenti where bursa=(select max(bursa) from studenti); f. delete from studenti where medie<=8. 22. Se considera tabela ELEVI cu structura: CODELEV, NUME, PRENUME, CLASA, MEDIA, CODSEFCLASA a. Sa se creeze tabela si sa se introduca 10 articole care sa corespunda cerintelor urmatoare; b. Sa se afiseze in ordinea alfabetica primii 3 elevi din clasa C (C citit de la tastatura);

c. Cati elevi al caror nume se termina cu litera U sunt in tabela? d. Pentru fiecare clasa din tabela sa se calculeze media pe clasa; rezultatele se vor afisa in formatul Media clasei este .; Coloana rezultata va avea aliasul Medii; e. Sa se afiseze elevii cu cea mai mare medie. Se vor afisa primele trei linii (daca exista); f. Sa se afiseze elevii si sefii lor de clasa in formatul: Seful de clasa al elevului .. este ..; 23. Se considera tabela PARIURI cu structura: CODPARIU, PERSOANA, CAL, SUMA, DATA a. Sa se creeze tabela si sa se introduca 10 articole care sa corespunda cerintelor urmatoare; b. Sa se afiseze toate persoanele care au pariat in trimestrul 1. Informatiile se vor afisa in formatul: Persoana a pariat in data de . suma de . pe calul ; c. Persoana de la pariul cu codul X si-a triplat suma pariata. Actualizati tabela. d. Cate persoane au pariat in luna curenta pe calul cu numele C? (C dat de la tastatura); e. Calul cu numele X s-a imbolnavit. Sa se stearga toate pariurile din luna curenta pe acest cal; f. Sa se afiseze numele persoanei/persoanelor cu cea mai mare suma pariata la un pariu; 24. Se considera tabelele ECHIPE si MECIURI cu structurile: ECHIPE (ID, NUME, ORAS) MECIURI (ID, ID_ECHIPA1, ID_ECHIPA2, GOL1, GOL2, DATA) a. Sa se creeze tabelele si sa se introduca cate 6 articole care sa corespunda cerintelor urmatoare; b. Afisati in ordine alfabetica toate echipele cu numele incepand cu litera S; Prima litera din numele echipei va fi litera mare, restul vor fi litere mici; c. Meciurile din data D (citita de la tastatura) au fost amanate cu 7 zile. Actualizati tabela; d. Adaugati o noua echipa cu id-ul 1001, numele Speranta care sa fie acelasi oras cu echipa cu numele X (X citit de la tastatura); e. Stergeti din tabela meciurile disputate in zilele de joi; f. Afisati toate meciurile in formatul:NumeEchipa1 NumeEchipa2: Gol1 Gol2; Rezolvare: b. update echipe set nume=initcap(nume); select nume from echipe where nume like S% order by nume; c. update meciuri set data=data+7 where data=:d; d. insert into echipe (id, nume, oras) value (1001, speranta, (select oras from echipe where nume=:x)); e. delete from meciuri where to_char(data, day)=miercuri; f. select p.nume as nume echipa 1, (select p.nume from echipe p,meciuri f where p.id=f.id_echipa2) as nume echipa 1, f.gol1, f.gol2 from echipe p, meciuri f where p.id=f.id_echipa1; 25. Se considera tabelele ANGAJATI si DEPARTAMENTE cu structurile: ANGAJATI (ID, NUME, PRENUME, DATA_ANGAJARE, SALARIU, ID_DEP) DEPARTAMENTE (ID, DENUMIRE) a. Sa se creeze tabelele si sa se introduca cate 6 articole care sa corespunda cerintelor urmatoare; b. Salariul persoanelor angajate de cel putin 10 luni se mareste cu 10%. Actualizati tabela ANGAJATI;

c. Sa se adauge un nou angajat care sa lucreze in acelasi departament cu angajatul cu numele Y (Y citi de la tastatura); d. Departamentul cu denumirea D (D citit de la tastatura) s-a desfiintat. Actualizati cele doua tabele, stergand departamentul si angajatii care lucreaza in acest departament; e. Sa se afiseze toti angajatii din departamentul cu denumirea X (X citit de la tastatura); Informatiile vor fi afisate in formatul Angajatul .. lucreaza in departamentul .. f. Sa se afiseze salariul maxim pentru fiecare departament. Rezultatele vor fi afisate in formatul Salariul maxim din departamentul .. este ... Coloana rezultata va avea aliasul SALARII. Rezolvare: b. UPDATE ANGAJATI1 SET SALARIU=(SALARIU +(10/100)*SALARIU) WHERE ((SYSDATE-DATA_A)>310) c. INSERT INTO ANGAJATI1(ID, NUME, PRENUME, DATA_A, ID_DEP, SALARIU) VALUES ('5', 'MHH', 'WXX', '04-06-2008', (SELECT ID_DEP FROM ANGAJATI1 WHERE NUME=:Y), '1111') d. delete from angajati where id_dep=:x delete from departamente where id=34; e. select nume as "angajatul lucreaza la ", d.denumire as "departamentul.." from angajati1 a, departamente d where a.id_dep=(select id from departamente where denumire=:x) and a.id_dep=d.id; f. select (salariul maxim din departamentul ||id_dep|| este || max(salariu)) as salarii from angajati group by id_dep, salariu 26. Se considera tabelele: TURISTI si EXCURSII cu structurile: TURISTI (COD, NUME, SEX, COD_EXC) EXCURSII (COD , DESTINATIE , DATA_INCEPUT, DATA_SFARSIT, PRET) a. Sa se creeze tabelele si sa se introduca cate 6 articole care sa corespunda cerintelor urmatoare; b. Sa se afiseze destinatiile in ordine alfabetica. Fiecare destinatie va fi afisata o singura data; c. Excursiile care vor avea loc la Predeal in lunile de iarna s-au ieftinit cu 100 lei. Actualizati tabela EXCURSII; d. Stergeti din tabela turistul cu numele X (X citit de la tastatura); e. Cati turisti au ales destinatia Vatra Dornei? f. Afisati turistii care au participat la excursii cu durata mai mare de 7 zile. Informatiile vor fi afisate in formatul: Turistul . a participat la excursia .in perioada . - .. Rezolvare: b. select * from excursii order by destinatie c. d. delete from turisti where nume=:x; e. select t.nume, e.destinatie from turisti t, excursii26 e where t.codexc=e.cod; f. 27. Se considera tabelele NUMERE1 si NUMERE2 cu structurile: NUMERE1 ( CIFRA ) NUMERE2 ( CIFRA ) a. Sa se completeze fiecare din cele doua tabele cu cifrele de la 1 la 5; b. Sa se afiseze cifrele din a doua tabela folosind scrierea cu cifre romane; c. Sa se afiseze tabla inmultirii pana la 5 in formatul cifra x cifra = rezultat; se vor afisa primele 20 de linii;

d. Sa se afiseze tabla inmultirii cu X (X<6 cifra nenula citita de la tastatura); e. Sa se afiseze catul si restul impar?irii cifrei X la toate celelalte cifre in formatul cifra / cifra = (cat, rest) X (X<6 cifra nenula citita de la tastatura); f. Cifrele din prima tabela se vor inversa: 5,4,3,2,1. Actualizati tabela. 28. Se considera tabela PACHETE cu structura EXPEDITOR, DESTINATAR, DATA_EXPEDIERE, CATEGORIA, GREUTATE a. Sa se creeze tabela si sa se introduca 10 articole care sa corespunda cerintelor urmatoare; b. Sa se afiseze in ordine alfabetica a destinatarului pachetele care nu au completat expeditorul; c. Sa se calculeze media aritmetica a greutatilor pachetelor din tabela; d. Se completeaza cu NECUNOSCUT toti expeditorii nespecificati si cu data de astazi toate datele de expediere necompletate; e. Sa se stearga toate pachetele expediate anul trecut care au greutatea mai mica decat X (citit de la tastatura); f. Care este destinatarul care a primit cele mai multe pachete? Rezolvare: b. select * from pachete where expeditor= order by destinatar; c. select avg(greutate) from pachete; d. update pachete set expeditor=necunoscut where expeditor= ; update pachete set data_ex=nvl(data_ex, sysdate); e. delete from pachete where data_ex>31-12-2008 and data_ex<01-01-2010 and greutate<:x; f. select destinatar, count(*) from pachete group by destinatar having count(*)=(select max(count(*) from pachete group by destinatar); 29. Se considera tabela PRODUSE cu structura: ID, DENUMIRE, CATEGORIE, DATA_EXP, PRET, CANTITATE a. Sa se creeze tabela si sa se introduca 10 articole care sa corespunda cerintelor urmatoare; b. Sa se afiseze produsele care expira astazi; se vor afisa doar primele 5 linii; c. Care este valoarea totala a produselor din tabela? Afisati in formatul Valoarea totala este.; d. Produsele care expira maine se ieftinesc cu 50%. Actualizati tabela; e. Sa se adauge un nou produs care sa fie in aceeasi categorie cu produsul cu id-ul egal cu 4. f. Sa se afiseze categoria / categoriile care contine cele mai multe produse; Rezolvare: b. select denumire, rownum from produse where data_exp=22-032010 and rownum<=5; c. select valoarea totala este sum(pret*cantitate) from produse; d. update produse set pret=0.5* pret where data_exp=23-03-2010; e. insert into produse (id, denumire, categorie, data_exp, cantitate) values (20, sapun, select categorie from produse where id=4, 24-03-2010, 3, z) f. select categorie, count(*) from produse group by categorie having count(*)=(select max(count(*)) from produse group by categorie) 30. Se considera tabela FOTBALI STI cu structura:

NUME, ECHIPA, POST, NRMECIURI, GOLURIMARCATE a. Sa se creeze tabela si sa se introduca 10 articole care sa corespunda cerintelor urmatoare; b. Afisati toti jucatorii echipei Ceahlaul; c. Afisati jucatorii grupati pe echipe, iar in cadrul echipelor pe posturi d. Mijlocasul Ronaldo s-a transferat la echipa Cimentul; e. Stergeti din tabela un jucator cu numele citit de la tastatura; f. Afisati atacantul cu cel mai mare procent de reusita (numarul de goluri marcate/ numarul de meciuri jucate); Rezolvare: b. select * from fotbalisti where echipa=Ceahlaul; c. select nume, echipa, post from fotbalisti order by echipa, post, nume; d. update fotbalisti set echipa=Ceahlaul where numr=Ronaldo; e. delete from fotbalisti where nume=:x; f. select * from fotbalisti where goluri=(select max (nrmeciuri/goluri) from fotbalisti); 31. Se considera tabela CONCURENTI cu structura : COD, NUME, TARA, PUNCTAJ a. Sa se creeze tabela si sa se introduca 10 articole care sa corespunda cerintelor urmatoare; b. afisarea clasamentului final in ordine descrescatoare a punctajelor si la punctaje egale alfabetic dupa nume; c. citindu-se codul unui concurent si un nou punctaj al acestuia actualizati informatiile din tabela; d. lista concurentilor cu punctaje maxime; e. numarul de concurenti din fiecare tara; f. sa se afiseze tara /tarile cu cea mai mare medie a punctajelor; Rezolvare: b. select * from concurenti order by punctaj desc, nume; c. update concurentii set punctaj=56 where cod=5; d. select * from concurenti where punctaj=(select max(punctaj) from concurenti); e. select count(nume) from concurenti group by tara; f. select tara, avg(punctaj) from concurenti group by tara having avg(punctaj)>(select avg(punctaj) from concurenti); 32. Se considera tabela PACIENTI cu structura COD, NUME, DIAGNOSTIC, ADRESA, NR_ZILE_ SPITALIZARE a. Sa se creeze tabela si sa se introduca 10 articole care sa corespunda cerintelor urmatoare; b. lista alfabetica a pacientilor; c. stergeti din tabela inregistrarea corespunzatoare unui cod introdus de la tastatura; d. afisati pacientii cu un numar maxim de zile de spitalizare; e. numarul de pacienti pentru fiecare diagnostic; f. pentru un diagnostic dat mariti numarul de zile de spitalizare cu o valoare data de la tastatura. Rezolvare: b. select * from pacienti order by nume; c. delete from pacienti where cod=:x; d. select * from pacienti where nr_zile_spitalizare=(select max(nr_zile_spitalizare) from pacienti); e. select count(nume) from pacienti group by diagnostic;

f. update pacienti set nr_zile_spitalizare=nr_zile_spitalizare + :z where diagnostic=:v; 33. Se considera tabela ANGENTII cu structura COD, DENUMIRE, LOCALITATE, NR_ANGAJATI a. Sa se creeze tabela si sa se introduca 10 articole care sa corespunda cerintelor urmatoare; b. lista alfabetica a agentiilor; c. citindu-se codul unei agentii si un nou numar de angajati actualizati datele corespunzatoare din tabela; d. modificati numarul angajatilor de la o agentie al carei cod se citeste de la tastatura diminuandu-l cu 10 %; e. numarul de agentii pe localitati; f. sa se afiseze localitatile care au numar numar maxim de angajati; Rezolvare: b. select * from agentii order by denumire; c. update agentii set nr_ang=:z where cod=:v; d. update agentii set nr_ang=(nr_ang-(nr_ang*10)/100) where cod=:v; e. select count(*) from agentii group by localitate; f. select localitate from agentii where nr_ang=(select max(nr_ang) from agentii). 34. Se considera tabela SPECII cu structura COD_SPECIE, NUME, ZONA, NR_EXEMPLARE a. Sa se creeze tabela si sa se introduca 10 articole care sa corespunda cerintelor urmatoare; b. lista alfabetica a speciilor; c. stergeti din tabela un articol de cod introdus de la tastatura; d. afisati numarul total de specii pe zone; e. afisati lista alfabetica a zonelor existente in tabela ; f. lista speciilor cu numar minim de exemplare. Rezolvare: b. select * from specii order by nume; c. delete from specii where cod_specie=:x; d. select count(*) from specii group by zona; e. select * from specii order by zona; f. select * from specii where nr_exemplare=(select min(nr_exemplare) from specii). 35. Se considera tabela BIBLIOTECA cu structura COD, TITLU, AUTOR, NR_EXEMPLARE a. Sa se creeze tabela si sa se introduca 10 articole care sa corespunda cerintelor urmatoare; b. sa se afiseze numarul total de exemplare din tabela; c. lista alfabetica a titlurilor cu numar maxim de exemplare; d. pentru fiecare autor afisati numarul total de exemplare; e. stergeti din tabela toate articolele unui autor introdus de la tastatura; f. pentru un cod introdus de la tastatura actualizati tabela marind numarul de exemplare cu 10. Rezolvare: b. select count(*) from biblioteca; c. select * from biblioteca where nr_exemplare=(select max(nr_exemplare) from biblioteca) order by titlu; d. select count(nr_exemplare) from biblioteca group by autor; e. delete from biblioteca where autor=:x; f. update biblioteca set nr_exemplare=nr_exemplare+10 where cod=:x;

36. Se considera tabela CREDITE cu structura COD, NUME, DATA, PERIOADA, SUMA. a. Sa se creeze tabela si sa se introduca 10 articole care sa corespunda cerintelor urmatoare; b. lista persoanelor pentru care perioada de creditare s-a incheiat; c. lista persoanelor care au credite cu sume maxime; d. calculati suma totala a creditelor pe fiecare an; e. pentru un cod introdus de la tastatura mariti perioada de creditare cu 1 luna. f. stergeti din tabela inregistrarea corespunzatoare unui cod citit de la tastatura. Rezolvare: b. select * from credite where data+perioada<sysdate; c. select nume from credite where suma=(select max(suma) from credite) order by nume; d. select data, sum(nume) from credite group by data; e. update credite set perioada=(perioada+30) where cod:x; f. delete from credite where cod=:x; 37. Se considera tabela REVISTE cu structura COD, NUME, DATA_LANSARE, PRET, NR_EXEMPLARE a. Sa se creeze tabela si sa se introduca 10 articole care sa corespunda cerintelor urmatoare; b. lista publicatiilor lansate in anul 2009; c. numarul de publicatii cu numar maxim de exemplare; d. calculati numarul total de publicatii pe an de aparitie; e. lista publicatiilor alfabetic si pe an de aparitie; f. pentru un cod introdus de la tastatura actualizati tabela marind numarul de exemplare cu 100. Rezolvare: b. select * from reviste where(data_lansare>=01-01-2009 and data_lansare<=31-12-2009); c. select count(*) from reviste where nr_exemplare=(select max(nr_exemplare) from reviste); d. select count(*) to_char (data_lansare, yyyy) as anul from reviste group by to_char( data_lansare, yyyy); e. select * from reviste order by nume, to_char(data_lansare, yyyy); f. update reviste set nr_exemplare=nr_exemplare+100 where cod=:x; 38. Se considera tabela ABONAMENTE cu structura COD, LOC_PLECARE, LOC_SOSIRE, DATA_PLECARE, PRET g. Sa se creeze tabela si sa se introduca 10 articole care sa corespunda cerintelor urmatoare; h. lista curselor cu plecare din Bicaz; i. localitatea de plecare cu numar maxim de abonamente; j. numarul abonamentelor cu sosire in Roman; k. lista curselor sortate cronologic; l. pentru un cod introdus de la tastatura actualizati articolul corespunzator marind pretul cu 5%. Rezolvare: b. select * from abonamente where loc_plecare=bicaz; c. select max(count(loc_plecare)) from abonamente group by loc_plecare; d. select loc_sosire, count(loc_sosire) from abonamente where loc_sosire=roman group by loc_sosire;

e. select * from abonamente order by data_plecare; f. update abonamente set pret=pret +(0,05 * pret) where cod=:x; 39. Se considera tabela ATESTAT cu structura: NUME, TEMA, COORDONATOR, AN, NOTA m. Sa se creeze tabela si sa se introduca 10 articole care sa corespunda cerintelor urmatoare; n. Afi?a?i pe ecran toate atestatele a caror tema contine cuvantul grafuri; o. Afi?a?i temele de atestat din anul 2010, grupate dupa coordonator; p. Afi?a?i atestatele coordonate de profesorul X care au obtinut cea mai mare nota (X se citeste de la tastatura); q. Afisati numarul de atestate coordonate de fiecare profesor; r. Eliminati din tabela atestatele sustinute in anul 2005 care au obtinut nota sub 7; Rezolvare: b. select * from atestat where tema=grafuri; c. select * from atestat where an=2010 group by coordonator; d. select * from atestat where nota=(select max(nota) from atestat) and coordonator=:x; e. select count(*) from atestat group by coordonator; f. delete from atestat where an=2005 and nota<=7; 40. Se considera tabela AGENDA cu structura: ID_AGENDA, NUME, PRENUME, DATA_NASTERE, TELEFON, EMAIL, ADRESA, NR_COPII. a. Sa se creeze tabela si sa se introduca 10 articole care sa corespunda cerintelor urmatoare; b. Sa se afiseze persoanele care au un singur copil si locuiesc in orasul X introdus de la tastatura. c. Lista persoanelor care sunt nascute in luna noiembrie. d. Sa se afiseze lista persoanelor care locuiesc in judetul Neamt (prefix 0233)si nu au adresa de email. e. Afisati persoanele care au acelasi numar de copii cu persoana cu numele X (X citit de la tastatura); f. Lista persoanelor din agenda pe orase si pentru acelasi oras alfabetic dupa nume. Rezolvare: b. select * from agenda where nr_copii=1 and adresa=:x; c. select * from agenda where data_nastere= d. select * from agenda where adresa=neamt and email is NULL; e. select * from agenda where nr_copii=(select nr_copii from agenda where nume=:x) f. select * from agenda group by adresa,nume; 41. Se considera tabela PAPETARIE cu structura: ID_PRODUS, NUME_PRODUS, PRET, NR_EXEMPLARE, FURNIZOR. a. Sa se creeze tabela si sa se introduca 10 articole care sa corespunda cerintelor urmatoare; b. Care este produsul care se gaseste in stoc in cantitate maxima. c. Lista furnizorilor de produse din Papetarie. d. Sa se stearga produsul / produsele cu pret minim; e. Stergerea din baza de date a produselor furnizorului introdus de la tastatura. f. Care este numarul produselor achizitionate de la fiecare furnizor. Rezolvare:

b. select * from papetarie where nr_exemplare=(select max(nr_exemplare) from papetarie); c. select furnizor from papetarie; d. delete from papetarie where pret=(select min(pret) from papetarie); e. delete from papetarie where furnizor=:X; f. select count(nume_produs) from papetarie group by furnizor; 42. Se considera tabela CLASE cu structura: CNP, NUME, PRENUME, DATA_NASTERE, LOCALITATE, EMAIL, MEDIE. a. Sa se creeze tabela si sa se introduca 10 articole care sa corespunda cerintelor urmatoare; b. Sa se afiseze elevii care nu locuiesc intr-un oras introdus de la tastatura; c. Care sunt elevii care au ziua de nastere in luna curenta; d. Sa se afiseze numarul de elevi din fiecare localitate; e. Sa se afiseze elevii care au media mai mare decat media maxima a elevilor dintr-o localitate data de la tastatura; f. Lista elevilor in ordinea descrescatoare a mediilor si la medii egale alphabetic Rezolvare: b. select * from clase where localitate<>:x; c. select nume from clase where to_char(data_n, month)=septembrie; d. select count(*) from clase group by localitate; e. select nume from clase where media>(select max(medie) from clase where localitate=:x); f. select * from clase order by medie desc, nume; 43. Se considera tabela IMOBILIARA cu structura: ID_LOC, NR_CAMERE, SUPRAFATA, TIP, ETAJ, PRET. a. Sa se creeze tabela si sa se introduca 10 articole care sa corespunda cerintelor urmatoare; b. Sa se afiseze structura apartamentelor situate la etajul 1. c. Sa se afiseze care sunt tipurile de apartamente din tabela. d. Sa se afiseze apartamentele decomandate care au suprafata cuprinsa intre doua valori introduse de la tastatura. e. Sa se stearga din tabela articolele care au pretul minim si 2 camere. f. Sa se afiseze ofertele de apartamente in ordinea descrescatoare a preturilor. Rezolvare: b. select nr_camere, suprafata, tip, pret from imobiliara where etaj=1; c. select * from imobiliara group by tip; d. select * from imobiliara where suprafata>:x and suprafata<:z; e. delete from imobiliara where pret=(select min(pret) from imobiliara) and nr_camere=2; f. select * from imobiliara order by pret desc; 44. Se considera tabela FARMACIE cu structura: ID_PRODUS, PRET, STOC, DATA_EXPIRARE, FURNIZOR. a. Sa se creeze tabela si sa se introduca 10 articole care sa corespunda cerintelor urmatoare; b. Care cantitatea existenta in stoc pentru un medicament introdus de la tastatura. c. Care sunt produsele in cantitate maxima in stoc.

d. Lista produselor pentru care termenul de valabilitate expira peste 2 luni. e. Cantitatea de produse in stoc pe furnizori. f. Sa se afiseze produsele alfabetic si pentru acelasi produs crescator in functie de pret. Rezolvare: b. select stoc from farmacie where id_produs=:x; c. select * from farmacie where stoc=(select max(stoc) from farmacie); d. select * from farmacie where data_expirare >30-04-2010 and data_expirare<01-06-2010; e. select sum(stoc), furnizori from farmacie group by furnizor; f. select * from farmacie order by pret; 45. Se considera tabela CARTI cu structura: AUTOR, TITLU, EDITURA, NR_EXEMPLARE, AN_ACHIZITIE. a. Sa se creeze tabela si sa se introduca 10 articole care sa corespunda cerintelor urmatoare; b. Care sunt editurile la care au fost publicate cartile achizitionate. c. Autorii si titlul lucrarilor cu numar maxim de exemplare in tabela. d. Care sunt numarul de titluri publicate de fiecare editura. e. Lista lucrarilor achizitionate intre 1990 si 2009. f. Lista cartilor alfabetic pe autori si pentru acelasi autor descrescator dupa numarul de exemplare. Rezolvare: b. select editura from carti group by editura; c. select autor, titlu, from carti where nr_exemplare=(select max(nr_exemplare) from carti); d. select count(editura), editura from carti group by editura; e. select autor, titlu from carti where an>=1990 and an<=2009; f. select titlu from carti order by autor desc, nr_exemplare; 46. Se considera tabela CLIENTI cu structura: ID_CLIENT, NUME, PRENUME, TELEFON, EMAIL, ADRESA, ORAS. a. Sa se creeze tabela si sa se introduca 10 articole care sa corespunda cerintelor urmatoare; b. Care sunt orasele in care locuiesc clientii din tabela. c. Care este numarul clientilor dintr-un oras dat de la tastatura. d. Sa se afiseze numele si prenumele clientilor care au prefixul telefonic 0233. e. Care sunt clientii care nu au adresa de email in tabela. f. Lista clientilor pe orase si in acelasi oras alfabetic dupa nume. Rezolvare: b. select oras from clienti: c. select count(nume) from clienti where oras=:x; d. select nume, prenume from clienti where telefon like 0233%; e. select * from clienti where email is NULL; f. select * from clienti order by oras, nume; 47. Se considera tabela LOCATARI cu structura NUME, PRENUME, APARTAMENT, RESTANTA, TAXA_LIFT a. Sa se creeze tabela si sa se introduca 10 articole care sa corespunda cerintelor urmatoare; b. Afi?a?i pe ecran locatarii cu restante de plata; c. Inlocui?i in baza de date datele locatarului de la apartamentul 11 cu datele noului proprietar; d. Determina?i valoarea totala a restantelor de plata

e. Locatarul de la apartamentul X are aceeasi restanta cu locatarul de la apartamentul Y. Actualizati tabela; (X, Y citite de la tastatura) f. Afi?a?i locatarii primelor 5 apartamente care nu platesc taxa de lift; Rezolvare: b. select * from locatari where restanta is not null; c. update locatari set nume='ion', prenume='ciucu' , restanta='7', taxa_lift='8' where apartament='11'; d. select sum(restanta) from locatari e.update locatari set restanta=(select rest from locatari where n=:x) where nume=:y; f. select * from locatari where taxa is null and rownum<6; 48. Se considera tabela LABORATOR cu structura NUMAR_STATIE, PROCESOR, FRECVENTA, MEMORIE, DVD, VALOARE a. Sa se creeze tabela si sa se introduca 10 articole care sa corespunda cerintelor urmatoare; b. Afi?a?i pe ecran calculatoarele dotate cu procesor Intel cu frecventa mai mare de 1000 Mhz (se va afi?a numarul sta?iei, modelul procesorului si frecventa) c. ?terge?i sta?iile cu memoria RAM mai mica sau egala cu 128 MB d. Cate sta?ii sunt prevazute cu unitate de DVD? e. Determina?i valoarea totala de inventar a sta?iilor. f. Afisati numarul statiilor pentru fiecare tip de procesor. Rezolvare: b. select numar_statie, procesor, frecventa from laborator where procesor='Intel' and frecventa>1000 c. delete from laborator where memorie<='128'; d. select count(*) from laborator where dvd is not null; e. select sum(valoare) from laborator ; f. select count(*) from laborator group by procesor; 49. Se considera tabela MUNCITORI cu structura NUME, COD_ATELIER, NR_PIESE a. Sa se creeze tabela si sa se introduca 10 articole care sa corespunda cerintelor urmatoare; b. Sa se afiseze numarul atelierelor din tabela; c. Sa se afiseze codul atelierului din tabela cu cei mai multi muncitori; d. Muncitorul cu numele X (dat de la tastatura) se pensioneaza. Eliminati-l din tabela; e. Sa se afiseze numarul de piese produse de fiecare atelier; f. Sa se afiseze atelierul / atelierele cu cele mai multe piese produse; Rezolvare: b. select count(*) from muncitori c. select cod_atelier,count(*) from muncitori group by cod_atelier having count(*) =(select max(count(*)) from muncitori d) delete from muncitori where nume=:X e) select sum(nr_piese),cod_atelier from muncitori group by cod_atelier f) select cod_atelier from muncitori group by cod_atelier having sum(nr_piese)=(select max(sum(nr_piese)) from muncitori group by cod_atelier) 50. Se considera tabela TESTE cu structura: DENUMIRE, DISCIPLINA, TIP, CLASA, PROFIL, DURATA Tipul poate fi: clasic, grila, combinat.

. Sa se creeze tabela si sa se introduca 10 articole care sa corespunda cerintelor urmatoare; a Afi?a?i pe ecran denumirile testelor de la disciplina Informatica, de tip grila care se pot da elevilor de clasa a IX-a, indiferent de profil; b ?terge?i din baza de date testele cu durata mai mare de 60 minute. c Afi?a?i testele de la profilul Matematica-informatica, grupate alfabetic pe discipline si descrescator dupa durata testului. d Modifica?i durata testului Componentele calculatorului la 40 min si tipul acestuia in test grila. e Afisati disciplina / disciplinele cu cele mai multe teste. b) select denumire from teste where disciplina='informatica' and tip='grila' and clasa='a9a' c) delete from teste where durata>'80' d) update teste set durata='40',tip='grila' where denumire='componentele calculatorului' e) select disciplina,count(*) from teste group by disciplina having count(*)=(select max(count(*)) from teste group by disciplina)

1. Se citesc de la tastatura n numere naturale, cu cel mult 9 cifre fiecare. Scrieti un program care pentru o cifra k citita de la tastatura, afiseaza pe ecran cate numere prime in scrierea carora apare cifra k, se gasesc in sirul dat. Exemplu: pentru n=4 , cifra k=2 si valorile citite 23, 603, 122, 27 se obtine numarul nr = 1, care corespunde valorii 23 . #include <iostream> #include <math.h> using namespace std; int prim(long int x){ if(x<=1) return 0; for(long d=2;d<=sqrt(x);d++) if(x%d==0) return 0; return 1; } int test(long x,int k){

while(x>0){ if(k==x%10) return 1; x/=10;//x=x/10; } return 0; } int main() { long x; int k,nr,n,i; cin>>k>>n; nr=0; for(i=1;i<=n;i++){ cin>>x; if(prim(x) && test(x,k)) nr++; } cout<<nr; return 0; } 2. Se citeste de la tastatura un numar natural n cu cel mult noua cifre. Scrieti un program care verifica daca exista un numar natural k cu proprietatea ca n=1*2*3**k. Daca exista un astfel de numar, programul va afisa mesajul Da si valoarea k , altfel va afisa mesajul Nu.(intensiv: valoarea se determina utilizand o metoda eficienta din punct de vedere al timpului de executie) #include <iostream> using namespace std; int main() { long n,f=1; cin>>n; int k=0; do { k++; f*=k; }while(f<n); if(f==n) cout<<"Da "<<k; else cout<<"Nu"; return 0; }

3. In fisierul valori.txt se gasesc pe prima linie maximum 1000 de numere intregi despartite printr-un spatiu. Scrieti un program care sa determine valoarea maxima si valoarea minima, impreuna cu numarul de aparitii al maximului, respectiv al minimului. (intensiv: folositi o metoda eficienta din punct de vedere al memoriei si al numarului de operatii efectuate si afisati pe ecran valorile obtinute). Exemplu:continutul fisierului valori.txt este : 24 3 89 24 1 3 1 1 89, atunci se vor afisa rezultatele: min = 1 nr_aparitii = 3 max = 89 nr_aparitii = 2 #include <iostream> #include <fstream> using namespace std; int main() { ifstream f("valori.txt"); //fstream f("valori.txt",ios::in); int x,max,min,fmax,fmin; f>>x; max=min=x; fmax=fmin=1; while(f>>x) { if(x<min) { min=x; fmin=1; } else if(min==x) fmin++; if(x>max) { max=x; fmax=1; } else if(max==x) fmax++; } f.close(); cout<<"min = "<<min<<" nr_aparitii = "<<fmin<<endl; cout<<"max = "<<max<<" nr_aparitii = "<<fmax; return 0; } 4.Fisierul unu.in contine pe primul rand valoarea n ( 2=n=1.000.000 ), iar pe a doua linie se gasesc n numere intregi formate din cel mult 9 cifre si despartite prin spatiu. Stiind ca

fisierul contine cel putin doua numere distincte printre cele n de pe a doua linie, scrieti un program care sa scrie in fisierul unu.out pe o singura linie si separate printr-un spatiu, in ordine descrescatoate, cele mai mari doua valori distincte din fisierul de intrare. (intensiv :alegeti o metoda eficienta de rezolvare atat ca timp de executare, cat si ca gestionare a memoriei) Exemplu : unu.in unu.out 10 -8 14 8 14 15 9 -7 1 4 10 15 14 #include <iostream> #include <fstream> using namespace std; int main() { long n,x,maxM,maxm; ifstream f("unu.in"); f>>n>>x; maxM=maxm=x; while(n>1) { f>>x; if(x>maxM) {maxm=maxM; maxM=x;} else//x<=maxM if(maxm<x && x<maxM) maxm=x; n--; } f.close(); ofstream g("unu.out"); g<<maxM<<' '<<maxm; g.close(); return 0; }

5. Fisierul text numere.in contine pe prima linie un numar natural n (0=n=5000), iar pe a doua linie n numere naturale de cel mult 9 cifre fiecare, separate prin cate un spatiu. Sa se scrie un program care citeste n, apoi cele n numere naturale din fisierul numere.in si scrie in fisierul numere.out, pe cate o linie fiecare, numerele de pe a doua linie a fisierului numere.out care sunt palindroame cu exact patru cifre (un numar este palindrom daca este egal cu oglinditul sau). De exemplu daca fisierul numere.in are urmatorul continut : 5 1441 5 14 2552 78 atunci fisierul numere.out va contine : 1441

2552 #include <iostream> #include <fstream> using namespace std; int main() { int n,i; long nr; ifstream f("numere.in"); ofstream g("numere.out"); f>>n; for(i=1;i<=n;i++){ f>>nr; if(1000<=nr&&nr<=9999&&nr%10==nr/1000&&nr/10%10==nr/100%10) g<<nr<<endl; } f.close(); g.close(); } 6.Se citeste de la tastaturp n, si apoi n perechi de cate doua numere intregi a si b cu ( a < 0 < b) reprezentand capetele intervalului[a, b]. Afisati pe ecran , daca exista, capetele intervalului de intersecsie al celor n intervale citite. in cazul in care nu exista intervalul de intersecsie se afiseaza 0. De exemplu, pentru n=3 si perechile [-1,20], [-4,9], [-7, 12] , obtinem solutia x= -1 si y= 9. #include <iostream> using namespace std; int main() { int n, a, b, amax , bmin; //amax este maximul de valori negative a iar bmin este minimul de valori pozitive b cin>>n; cin>>amax>>bmin; //valorile maxime/minime sunt intializate cu valori din sir for(int i=1;i<=n-1;i++){ cin>>a>>b; if(a>amax) amax=a; if(b<bmin) bmin=b; } cout<<amax<<" "<<bmin; }

7. Se citesc de la tastatura n numere naturale, cu cel mult 9 cifre fiecare. Scrieti un program care afiseaza cifra care apare de cele mai multe ori in numerele citite. Daca exista mai multe astfel de cifre se vor afisa toate. Exemplu:Pentru n=4 si valorile 23, 431, 154, 452 se afiseaza 3 pentru ca cifra 4 apare de 3 ori in numerele citite. #include <iostream> using namespace std; int v[10]; int main() { int n, i; long val; cin>>n; for (i=1;i<=n;i++) { cin >>val; while (val>0) { v[val%10]++; val/=10; } } int max=v[0]; for (i=1;i<=9;i++) if (max<v[i]) max=v[i]; // am calculat frecventa max a unei cifre; for (i=0;i<=9;i++) if (v[i]==max) cout<<i<<" "; return 0; }

8. Se citeste de la tastatura un numar natural n cu maxim cinci cifre. Afisati cel mai apropiat numar fata de n care are aceeasi suma a cifrelor. #include <iostream> #include <fstream> using namespace std; int sc(long x) { int s=0; while(x) { s+=x%10; x/=10; } return s; } int main() { long x; ifstream f("date.txt");

f>>x; f.close(); int s=sc(x); long st=x, dr=x; do { st--; } while(sc(st)!=s); do { dr++; } while(sc(dr)!=s); ofstream g("r.txt"); if(x-st<dr-x) g<<st; else if(x-st>dr-x) g<<dr; else g<<st<<' '<<dr; return 0; } 9.Se citesc n numere naturale. Sa se ordoneze numerele crescator dupa numarul de divizori. (intensiv: numarul de divizori se va determina utilizand o metoda eficienta din punct de vedere al timpului de execusie) Exemplu: n=4, numerele 12,4,6,13s 13,4,6,12 . #include <iostream> #include <fstream> using namespace std; int nrd(long x) { int nrdiv=0; for(long int d=1;d<=x/2;d++) if(x%d==0) nrdiv++; return nrdiv+1;} int main() { long x[100]; int n,i; ifstream f("sir.txt"); f>>n; for(i=0;i<=n-1;i++) f>>x[i]; f.close(); int sortat=0; while(!sortat) {

sortat=1; for(i=0;i<=n-2;i++) if(nrd(x[i])>nrd(x[i+1])) { long aux=x[i]; x[i]=x[i+1]; x[i+1]=aux; sortat=0;}} ofstream g("rezultat.txt"); for(i=0;i<=n-1;i++) g<<x[i]<<' '; g.close(); return 0; } 10. Se citeste n numar natural (n<32000) si apoi se introduc pe rand n numere intregi. Sa se afiseze numerele prime si sa se calculeze media lor aritmetica. #include <iostream> #include <fstream> #include <math.h> using namespace std; int prim(long x) { if(x<=1) return 0; for(long d=2;d<=sqrt(x);d++) if(x%d==0) return 0; return 1;} int main() { long x; float s=0; int nrp=0,n,i; ifstream f("date.txt"); ofstream g("out.txt"); f>>n; for(i=1;i<=n;i++) { f>>x; if(prim(x)) { g<<x<<' '; s+=x; nrp++;}} if(nrp) g<<s/nrp; f.close(); g.close(); return 0;}

11. Se citeste de la tastatura un numar natural n cu cel mult 9 cifre. Sa se afiseze cel mai mare si cel mai mic numar care se poate forma cu cifrele distincte ale numarului. #include <iostream> #include <fstream> using namespace std; int fr[10]; int main() { long n; int i; ifstream f("intrare.txt"); f>>n; f.close(); ofstream g("iesire.txt"); if(n==0) g<<0<<endl<<0; else { while(n) { fr[n%10]++; n/=10; } for(i=9;i>=0;i--) if(fr[i]) g<<i; g<<endl; if(!fr[0]) for(i=0;i<=9;i++) {if(fr[i]) g<<i;} else { int primnenul=0; for(i=1;i<=9;i++) if(fr[i]) { if(primnenul==0) g<<i<<0; else g<<i; primnenul=1; }} }f.close();g.close(); return 0;}

12. Se citeste din fisierul numar.txt un numar natural n. Sa se verifice daca este putere a lui 2 si sa se calculeze frecvensa de aparisie a fiecarei cifre in scrierea in baza 10 a numarului. #include <iostream> #include <fstream> #include <math.h> using namespace std; int fr[10]; int main() { long n; ifstream f("numar.txt"); f>>n; f.close(); ofstream g("r.txt"); if(n==pow(2,floor(log(n)/log(2)))) g<<"ok\n"; else g<<"eroare\n"; while(n){fr[n%10]++;n/=10;} for(int i=0;i<=9;i++) g<<i<<" :: "<<fr[i]<<endl; g.close(); return 0; }

13. Scrieti un program care afiseaza pe ecran toate numerele naturale cu maxim 9 cifre care sunt rotunde(numerele care convertite in binar au acelasi numar de 0 respectiv de 1). Exemplu: 12=>1100 este rotund; 13 =>1101 nu este rotund ) #include <iostream> #include <fstream> using namespace std; int test(long x) { int nr0=0; int nr1=0; do{ if(x%2==1) nr1++; else nr0++; x/=2;

} while(x>0); return nr0==nr1; } int main() { ofstream f("rezultat.txt"); long x; for(x=0;x<=999999999;x++) if(test(x)) f<<x<<endl; f.close(); return 0;}

14. Fisierul text numere.in contine pe prima linie un numar natural n (0<n<1000), iar pe a doua linie n numere naturale cu cel mult 9 cifre fiecare, despartite prin cate un spatiu. Scrieti un program C/C++ care citeste toate numerele din fisier si afiseaza pe ecran, separate prin cate un spatiu, numerele de pe a doua linie a fisierului, care sunt formate din cifre identice. Exemplu: daca fisierul numere.in are continutul: 9 55 107 3 101 99 7 208 2222 80 numerele ce se vor afisa sunt: 55 3 99 7 2222 #include <iostream> #include <fstream> using namespace std; int test(long x) { int uc=x%10; while(x) { if(x%10!=uc) return 0; x/=10; } return 1; } int main() { ifstream f("numere.in"); ofstream g("numere.out"); int n; long x; f>>n;

for(int i=1;i<=n;i++) { f>>x; if(test(x)) g<<x<<' ';} f.close(); g.close(); return 0;}

15.Fisierul atestat.txt contine pe prima linie un numar natural n (n=100), iar pe a doua linie, separate prin cate un spatiu, n numere naturale nenule, cu cel mult 4 cifre fiecare. Scrieti programul C/C++ care afiseaza pe ecran cifra de control a fiecarui numar (c(4568)=c(4+5+6+8)=c(23)=5). Exemplu: daca fisierul are continutul alaturat, 7 120 346 68 9 32 0 112 atunci se afiseaza 3 4 5 9 5 0 4 #include <fstream> #include <iostream> using namespace std; int cc(unsigned short int n) { unsigned short int sc; while(n>=10) { sc=0; while(n>0) { sc+=n%10; n/=10; } n=sc; } return n;} int main() { ifstream f("atestat.txt"); unsigned short int n,x,i; f>>n; for(i=1;i<=n;i++) { f>>x; cout<<cc(x)<<' ';

} f.close(); return 0;} 16. Fisierul numere.in contine pe prima linie mai multe numere naturale in ordine crescatoare dintre care cel pusin o putere a lui 3. Scrieti un algoritm eficient care afiseaza pe ecran numerele din fisier ce sunt puteri ale lui 3. #include <iostream> #include <fstream> #include <math.h> using namespace std; int main() { ifstream f("numere.in"); long x; while(f>>x) if(log(x)/log(3)==floor(log(x)/log(3))) cout<<x<<' '; f.close(); return 0;} 17. Dat n natural, sa se descompuna ca suma de puteri distincte ale lui 2. Exemplu : 25=24+23+20. #include <fstream> #include <iostream> #include <math.h> using namespace std; int main() { long x; cin>>x; int e;//exponentul lui 2 while(x) { e=floor(log(x)/log(2)); cout<<"2^"<<e<<endl; x-=pow(2,e);} return 0;} 18. Sa se scrie un program care sa verifice daca suma cifrelor de pe pozitiile impare si suma cifrelor de pe pozitiile pare ale unui numar natural n citit de la tastatura sunt egale.

Pozitiile se numara de la dreapta la stanga incepand cu pozitia 1. Se afiseaza sumele si un mesaj corespunzator pe ecran. Exemplu: se citeste: n=12345 si se afiseaza: sp=6 si simp=9 Nu coincid! #include <fstream> #include <iostream> using namespace std; int main() { long int n; int sp=0,simp=0; cin>>n; int p=1; while(n) { if(p%2) simp+=n%10; else sp+=n%10; n/=10; p++; } if(sp==simp) cout<<"sp="<<sp<<" si simp="<<simp<<" Coincid!"; else cout<<"sp="<<sp<<" si simp="<<simp<<" Nu Coincid!"; return 0; }

19. Sa se afiseze primele n perechi de numere prime gemene, unde n este un numar natural nenul citit de la tastatura. Exemplu: se citeste: n=4 se afiseaza: (3 ; 5) ; (5 ; 7) ; (11 ; 13) ; (17 ; 19) #include <fstream> #include <iostream> #include <math.h> using namespace std; int prim(int x) { for(int d=2;d<=sqrt(x);d++) if(x%d==0) return 0; return 1;}

int main() { int n; cin>>n; int a=3; while(n) { if(prim(a) && prim (a+2)) { cout<<'('<<a<<','<<a+2<<")\n"; n--;} a+=2;} return 0;} 20. Se citesc n numere naturale nenule. Sa se precizeze cu cate zerouri se va termina produsul numerelor fara a calcula efectiv produsul lor. Exemplu: se citeste:n=3 si numerele25, 12, 9 se afiseaza: 2 de zero #include <iostream> #include <fstream> using namespace std; int main() { ifstream f("date.txt"); int n,x,nr2=0,nr5=0; f>>n; while(n) { f>>x; while(x%2==0) { nr2++; x/=2;} while(x%5==0) { nr5++; x/=5;} n--;} ofstream g("rezultat.txt"); if(nr2>nr5) g<<nr5; else g<<nr2; g.close(); return 0; }

21. Se citeste un numar natural n. Sa se afiseze toate numerele prime mai mici decat n astfel incat suma cifrelor a fiecarui numar sa fie mai mica decat un alt numar citit m. Exemplu: se citeste: n= 30 si m=7 se afiseaza: 2, 3, 5, 11, 13, 23

#include <iostream> #include <fstream> #include <math.h> using namespace std; int prim(int x) { for(int d=2;d<=sqrt(x);d++) if(x%d==0) return 0; return 1;} int suma_cifre(int x) { int s=0; while(x>0) { s+=x%10;x/=10;} return s;} int main() { ifstream f("date.txt"); int n,m; f>>n>>m; f.close(); ofstream g("iesire.txt"); for(int i=2;i<n;i++) if(prim(i)&&suma_cifre(i)<m) g<<i<<' '; g.close(); return 0;} 22. Fisierul matrice.txt contine pe primul rand doua valori naturale m si n (1=n=100, 1=m=100), reprezentand numarul de linii si respectiv de coloane ale unei matrice a, iar pe urmatoarele m linii cate n valori intregi cu maximum 4 cifre fiecare, separate prin cate un spatiu, reprezentand elementele matricei a. Afisati pe ecran un sir de 2*(n+m) 4 numere ordonate crescator, sir format din elementele aflate pe chenarul exterior al matricei a. Chenarul exterior este format din prima si ultima linie, respectiv prima si ultima coloana din matrice. Exemplu: daca matricea data este : 3 4 1 2 3 4 5 6 7 8 9 1 2 3 se va afisa sirul : 1 1 2 2 3 3 4 5 8 9. #include <iostream> #include <fstream> using namespace std; void citire(int a[100][100],int &m,int &n) {

ifstream f("matrice.txt"); f>>m>>n; for(int i=0;i<=m-1;i++) for(int j=0;j<=n-1;j++) f>>a[i][j]; f.close(); } void Bubble_Sort(int v[400], int n) { int sortat=0; while(!sortat) { sortat=1; for(int i=0;i<=n-2;i++) if(v[i]>v[i+1]) { int aux=v[i]; v[i]=v[i+1]; v[i+1]=aux; sortat=0;}}} void contur(int a[100][100],int m,int n,int v[400]){ int k=0,i; for(i=0;i<=n-1;i++) v[k++]=a[0][i]; for(i=1;i<=m-1;i++) v[k++]=a[i][n-1]; for(i=n-2;i>=0;i--) v[k++]=a[m-1][i]; for(i=m-2;i>=1;i--) v[k++]=a[i][0]; } int main() { int a[100][100],v[400];int m;int n; citire(a,m,n); contur(a,m,n,v); Bubble_Sort(v,2*(m+n)-4); ofstream f("iesire.txt"); for(int i=0;i<=2*(m+n)-4-1;i++) f<<v[i]<<' '; f.close(); return 0; } 23. Se citeste de la tastatura o valoare naturala m (2=m=100). Scrieti programul C/C+ +/Pascal care construieste in memorie si apoi afiseaza pe ecran matricea a cu m linii si m coloane de numere intregi, construita dupa urmatoarea regula : elementul de pe linia i si coloana j a matricii ( 1=i , j=m) este : s 1 daca i*i+j*j este patrat perfect s 2 daca i*i+j*j nu este patrat perfect, dar este numar prim mai mare decat 2 s 3 in rest.

Exemplu: pentru m = 2, se va afisa matricea : 3 2 2 3 #include <fstream> #include <iostream> #include <math.h> using namespace std; int pp(int x) {return sqrt(x)==floor(sqrt(x));} int prim(int x){ if(x<2) return 0; for(int d=2;d<=sqrt(x);d++) if(x%d==0) return 0; return 1;} int main() { int m,t[100][100],i,j; ifstream f("input.txt"); f>>m; f.close(); for(i=1;i<=m;i++) for(j=1;j<=m;j++) if(pp(i*i+j*j)) t[i][j]=1; else if(i*i+j*j>2 && prim(i*i+j*j)) t[i][j]=2; else t[i][j]=3; ofstream g("output.txt"); for(i=1;i<=m;i++){ for(j=1;j<=m;j++) g<<t[i][j]<<' '; g<<endl;} g.close(); return 0;} 24. Se citeste un vector v cu n componente numere naturale. Sa se afiseze cel mai mare numar care se poate forma cu cifra maxima a fiecarui numar din vector. Exemplu: se citeste: n= 5 si v=(29, 171, 0, 2222, 100) se afiseaza: 97210 #include <iostream> #include <fstream>

using namespace std; int cmax(long x) { int cm=x%10; x/=10; while(x) { if(x%10>cm) cm=x%10; x/=10; } return cm; } int c[10]; int main() { long v[100]; int n,i; ifstream f("input.txt"); f>>n; for(i=0;i<=n-1;i++) f>>v[i]; f.close(); for(i=0;i<=n-1;i++) c[cmax(v[i])]++; ofstream g("output.txt"); for(i=9;i>=0;i--) for(int j=1;j<=c[i];j++) g<<i; g.close(); return 0; } 25. Se considera o matrice oarecare de dimensiune mxn cu elemente numere naturale. Sa se afiseze numerele cu numar impar de divizori din matrice si sa se indice numarul lor. Exemplu: se citeste: m=2 si n=3 si matricea se afiseaza: 4, 25, 2 numere #include <fstream> #include <iostream> using namespace std; int nrd(int x) { int nr=0; for(int d=1;d<=x/2;d++) if(x%d==0) nr++; return nr+1; } int main() { int t[100][100],m,n,nr=0,i,j;

ifstream f("input.txt"); f>>m>>n; for(i=0;i<=m-1;i++) for(j=0;j<=n-1;j++) f>>t[i][j]; f.close(); ofstream g("output.txt"); for(i=0;i<=m-1;i++) for(j=0;j<=n-1;j++) if(nrd(t[i][j])%2==1) { g<<t[i][j]<<' '; nr++; } g<<endl<<nr; return 0; } 26. Fie un vector v cu n elemente numere intregi citite de la tastatura. Fara a folosi alt vector auxiliar, sa se mute la sfarsitul lui v elementele sale nule, pastrand ordinea celorlalte elemente. Exemplu: se citeste: n=7 si vectorul v=(2,3,0,9,0,0,8) se afiseaza: v=(2,3,9,8,0,0,0) #include <iostream> #include <fstream> using namespace std; int main() { long v[100]; int n,i; ifstream f("input.txt"); f>>n; for(i=0;i<=n-1;i++) f>>v[i]; f.close(); int test=0; while(!test) { test=1; for(i=0;i<=n-2;i++) if(v[i]==0 && v[i+1]) { int aux=v[i]; v[i]=v[i+1]; v[i+1]=aux; test=0; }} ofstream g("output.txt"); for(i=0;i<=n-1;i++) g<<v[i]<<' '; g.close(); return 0;}

27. Fie a o matrice patratica de dimensiune n. Folosind o functie de ordonare a unui vector de dimensiune k, afisati matricea modificata prin ordonarea crescatoare a liniilor impare. #include <iostream> #include <fstream> using namespace std; void sortare(long x[100], int n){ int sortat=0; int i; while(!sortat) { sortat=1; for(i=0;i<=n-2;i++) if(x[i]>x[i+1]) { long aux=x[i]; x[i]=x[i+1]; x[i+1]=aux; sortat=0;}} } int main() { long x[100][100],n; ifstream f("date.txt"); f>>n; int i,j; for(i=0;i<=n-1;i++) for(j=0;j<=n-1;j++) f>>x[i][j]; f.close(); for(i=0;i<=n-1;i+=2) sortare(x[i], n); for(i=0;i<=n-1;i++){ for(j=0;j<=n-1;j++) cout<<x[i][j]<<' '; cout<<endl;} return 0; } 28. Fisierul matrice.in contine pe prima linie un numar natural n (0=n=5000), iar pe urmatoarele 2n linii cate n numere naturale de cel mult 5 cifre fiecare, separate prin cate un spatiu reprezentand elementele a doua matrice a si b cu cate nXn elemente fiecare. Verificati daca b este obtinuta din a prin rotirea spre stanga cu 270 de grade, afisand un mesaj afirmativ sau nu. Exemplu:

Daca fisierul matrice.in are urmatorul continut : 3 123 345 567 531 642 753 atunci se va afisa DA #include <iostream> #include <fstream> using namespace std; int main() { long a[100][100],b[100][100],n; ifstream f("matrice.in"); f>>n; int i,j; for(i=0;i<=n-1;i++) for(j=0;j<=n-1;j++) f>>a[i][j]; for(i=0;i<=n-1;i++) for(j=0;j<=n-1;j++) f>>b[i][j]; f.close(); //linia i din a trebuie sa coincida cu coloana n-1-i din b int test=1; //test devine 0 in caz de nepotrivire for(i=0;i<=n-1&&test;i++) for(j=0;j<=n-1&&test;j++) if(a[i][j]!=b[j][n-1-i]) test=0; if(test) cout<<"DA"; else cout<<"NU"; return 0; } 29. Data o matrice cu elemente numere intregi de dimensiune nXm sa se determine punctele-sa din matrice, adica elementele care sunt minime pe linia lor si maxime pe coloana lor. in cazul in care nu exista se va afisa mesajul NU. Exemplu=3; 4 3 6 12 1 4 => numarul 3 este sa. 5 0 7

#include <iostream> #include <fstream> using namespace std; int main() { long x[100][100],n,m; ifstream f("matrice.in"); f>>n>>m; int i,j; for(i=1;i<=n;i++) for(j=1;j<=m;j++) f>>x[i][j]; f.close(); //pastram maximul coloanei i in x[0][i] //pastram minimul liniei i in x[i][0] for(i=1;i<=n;i++) for(j=1;j<=m;j++){ if(x[i][j]>x[0][j]) x[0][j]=x[i][j]; if(x[i][j]<x[i][0]) x[i][0]=x[i][j]; } for(i=1;i<=n;i++) for(j=1;j<=m;j++) if(x[i][j]==x[i][0] && x[i][j]==x[0][j]) cout<<x[i][j]<<' '; return 0; }

30. Fie n si m doua numere naturale citite de la tastatura. Sa se formeze un tablou bidimensional cu n linii si m coloane cu primele nm numere naturale imperfecte. Un numar natural n este perfect daca suma S a divizorilor sai mai mici decat n este egala de numarul n (exceptand numarul insusi ). Exemplu:n=2, m=3 atunci matricea este 1 2 3 4 5 7 ! 6 este numar perfect 6=1+2+3 #include<iostream.h> #include<conio.h> int n,v[100],i,j; void citire() {cout<<"n="; cin>>n; }

int perfect(int a) {int s=1,d; for(d=2;d<=a/2;d++) if(a%d==0) s=s+d; if(s==a) return 1; return 0; } void vector(int n,int v[100]) {int sw=1,t=1,i=1; while(sw!=0){if(perfect(i)==0||i==1) {v[t]=i; if(t==n*n) sw=0; t++; } i++; } } void afis() {cout<<endl; for(i=1;i<=n*n;i++) if(i%n==0) cout<<v[i]<<endl; else cout<<v[i]<<" "; } void main() {clrscr(); citire(); vector(n,v); afis(); getch(); } 31. Scrieti un program C/C++ care citeste de la tastatura un numar natural n (2<n<20), construieste in memorie si afiseaza pe ecran o matrice cu n linii si n coloane, numerotate de la 1 la n. Fiecare element din matrice aflat pe o linie impara va fi egal cu numarul liniei pe care se afla iar elementele de pe linii pare sa fie completate cu valorile de la n la 1. Elementele matricei vor fi afisate pe ecran, cate o linie a matricei pe cate o linie a ecranului cu cate un spatiu intre elementele fiecarei linii. Exemplu: pentru n=5 se va afisa matricea de mai jos 11111 54321 33333 54321 55555 #include<iostream.h> #include<conio.h> int n,a[20][20],i,j;

void citire() {cout<<"n="; cin>>n; } void formare() {for(i=1;i<=n;i++) for(j=1;j<=n;j++) if(i%2==1)a[i][j]=i; else a[i][j]=n-j+1; } void afis() {for(i=1;i<=n;i++) for(j=1;j<=n;j++){gotoxy(j*3,i+4); cout<<a[i][j]; } } void main() {clrscr(); citire(); formare(); afis(); getch(); }

32. Se dau numarul de n linii si m coloane a unei matrici.Sa se construiasca si sa se afiseze matricea in fisierul matrice.out stiind ca elementul din pozitia i,j este egal cu minimul dintre i si j. Afisarea se realizeaza prin intermediul unui vector construit prin parcurgerea matricei sub forma de L. #include<iostream.h> #include<conio.h> int n,a[20][20],i,j,v[100]; void citire() {cout<<"n="; cin>>n; } void formare() {for(i=1;i<=n;i++) for(j=1;j<=n;j++) if(i>j)a[i][j]=j; else a[i][j]=i; } void afis() {for(i=1;i<=n;i++) for(j=1;j<=n;j++){gotoxy(j*3,i+4); cout<<a[i][j]; } cout<<endl;

} void vector() {int t,k=0; for(t=1;t<=n;t++) {for(j=1;j<=n-t;j++)v[++k]=a[j][t]; for(j=t;j<=n;j++) v[++k]=a[n-t+1][j]; } } void main() {clrscr(); citire(); formare(); afis(); vector(); for(i=1;i<=n*n;i++) cout<<v[i]<<" "; getch(); }

33. Fisierul text NUMERE.IN contine pe prima linie un numar natural nenul n (1=n=100) si pe urmatoarea linie n numere reale pozitive separate prin cate un spatiu. Scrieti un program C/C++ care citeste din fisierul NUMERE.IN numarul natural n, si determina, utilizand un algoritm eficient din punct de vedere al timpului de executare si al memoriei utilizate, pozisia pe care se afla primul si ultimul numar din cele n numere reale care sunt egale cu valoarea minima dintre ele. Exemplu: Daca fisierul NUMERE.IN are continutul: 6 2.8 2.3 5.7 5.7 2.3 6.3 atunci se afiseaza 2 si 5 (valoarea minima este 2.3 si numerele de pe pozitia 2 si 5 sunt egale cu 2.3) #include<iostream.h> #include<conio.h> int n,i; float v[100]; void citire() {cout<<"n="; cin>>n; for(i=1;i<=n;i++) cin>>v[i]; } float minim() {float min; min=v[1]; for(i=2;i<=n;i++) if(min>v[i]) min=v[i]; return min; }

void main() {float a; int b; clrscr(); citire(); a=minim(); for(i=1;i<=n;i++)if(v[i]==a){cout<<i<<" "; i=n+1; b=i; } for(i=n;i>=1;i--) if(v[i]==a){if(i!=b)cout<<i; i=0; } getch(); }

34. Scrieti un program C/C++ care citeste de la tastatura un numar natural n (1<=n<=20), elementele unei matrice cu n linii si n coloane, numere intregi din intervalul [-100, 100] si afiseaza pe ecran m1 si m2, unde m1 este media aritmetica a elementelor strict pozitive ale matricei, situate deasupra diagonalei principale, iar m2 este media aritmetica a elementelor strict pozitive ale matricei, situate sub diagonala principala, ca in exemplu. Cele doua medii se considera egale cu 0 daca nu exista valori strict pozitive in zonele corespunzatoare. Exemplu: pentru n=4 si matricea alaturata se afiseaza m1=2.75, calculata din elementele aflate deasupra diagonalei principale, si m2=2.5, calculata din elementele aflate sub diagonala principala. -1 2 -4 5 0 6 3 1 2 4 2 0 3 -5 1 -3 #include<iostream.h> #include<conio.h> int a[20][20],n,i,j,k,t; float m1,m2; void citire() {cout<<"n="; cin>>n; for(i=1;i<=n;i++) for(j=1;j<=n;j++){gotoxy(j*7,i+9); cin>>a[i][j]; } } float sumaunu() {float s=0;

for(i=1;i<=n;i++) for(j=i+1;j<=n;j++) if(a[i][j]>0){s=s+a[i][j]; k++; } m1=s/k; return m1; } float sumadoi() {float s=0; for(i=1;i<n;i++) for(j=1;j<i;j++)if(a[i][j]>0){s=s+a[i][j]; t++; } m2=s/t; return m2; } void main() {clrscr(); citire(); cout<<"Media aritmetica a elementelor strict pozitive de deasupra diagonalei principale este "<<sumaunu(); cout<<"Media aritmetica a elementelor strict pozitive de dedesubtul diagonalei principale este "<<sumadoi(); getch(); }

35. Scrieti un program C/C++ care citeste de la tastatura numerele intregi m si n (1<=m<=50, 1<=n<=50) si elementele unui tablou bidimensional cu m linii si n coloane, numere intregi distincte de cel mult 4 cifre fiecare. Programul va afisa pe prima linie a ecranului numarul de elemente prime de pe fiecare coloana a matricii, separate prin cate un spasiu.Definisi o functie care verifica daca un numar intreg este prim si folosii apeluri ale ei pentru rezolvarea cerintei. Exemplu: pentru m=3 si n=4 si tabloul de mai jos 2714 14 6 12 3 9 22 8 5 Pe ecran se va afisa: 311 #include<iostream.h> #include<conio.h> int a[20][20],n,i,j; void citire()

{cout<<"n="; cin>>n; for(i=1;i<=n;i++) for(j=1;j<=n;j++){gotoxy(j*7,i+9); cin>>a[i][j]; } } int prim(int a) {int d; for(d=2;d<=a/2;d++) if(a%d==0) return 0; return 1; } void main() {clrscr(); citire(); for(i=1;i<=n;i++) for(j=1;j<=n;j++)if(prim(a[j][i])==1) cout<<a[j][i]<<" "; getch(); }

36. Fie x un vector de numere intregi de lungime n, sa se construiasca un vector y, astfel incat y[i]=numarul de aparitii ale lui x[i] in vectorul x. Exemplu: Pentru x=(1,5,2,1,5,7,2,1,5) se obtine y=(3,3,2,3,3,1,2,3,3). #include<iostream.h> #include<conio.h> int v[50],y[50],n,i,j,k; void citire() {cout<<"n="; cin>>n; for(i=1;i<=n;i++)cin>>v[i]; } int aparitie(int a) {int s=0; for(i=1;i<=n;i++)if(v[i]==a)s++; return s; } void formare(int n,int v[50],int y[50]) {for(j=1;j<=n;j++){k=aparitie(v[j]); y[j]=k; } } void afis(int n,int x[100]) {for(i=1;i<=n;i++) cout<<x[i]<<" ";

cout<<endl; } void main() {clrscr(); citire(); formare(n,v,y); afis(n,v); afis(n,y); getch(); }

37. Scrieti un program care citeste de la tastatura doua numere naturale nenule m si n si care construieste in memorie si apoi afiseaza o matrice A cu m linii si n coloane cu proprietatea ca fiecare element aij memoreaza cea mai mica dintre valorile indicilor i si j. Matricea se va afisa in fisierul matrice.txt, cate o linie a matricei pe cate o linie a ecranului, elementele fiecarei linii fiind separate prin cate un spatiu. Exemplu: Pentru m=4 si n=5 fisierul va consine matricea alaturata #include<iostream.h> #include<conio.h> int a[20][20],n,m,i,j; void citire() {cout<<"n="; cin>>n; cout<<"m="; cin>>m; } void formare() {for(i=1;i<=n;i++) for(j=1;j<=m;j++)if(i<j)a[i][j]=i; else a[i][j]=j; } void afis() {for(i=1;i<=n;i++) for(j=1;j<=m;j++){gotoxy(j*3,i+5); cout<<a[i][j]; } } void main() {clrscr(); citire(); formare(); afis(); getch(); }

38. Se citesc de la tastatura doi vectori cu cate n elemente. Afisati ultima cifra a sumei fara a calcula efectiv suma. #include<iostream.h> #include<conio.h> int n,a[100],b[100],i; void citire() {cout<<"Dati numarul de elemente:"; cin>>n; for(i=1;i<=n;i++) {cin>>a[i]; cin>>b[i]; } } int ultimacifra(int n,int a[100],int b[100]) {int s=0; for(i=1;i<=n;i++){s=s+a[i]+b[i]; s=s%10; } return s; } void main() {clrscr(); citire(); cout<<"Suma se termina cu cifra:"<<ultimacifra(n,a,b); getch(); }

39. Scrieti un program care construieste in memorie o matrice patratica de ordin n cu elemente numere naturale astfel incat pe diagonala principala sa existe numai elemente egale cu 1, elementele de pe cele doua semidiagonale paralele cu diagonala principala si alaturate diagonalei principale sa fie toate egale cu 2, elementele de pe urmatoarele doua semidiagonale sa fie egale cu 3,etc. Valoarea lui n se citeste de la tastatura, iar matricea se va afisa pe ecran. Pentru n=4 se va afisa tabloul : 1234 2123 3212 4321 #include<iostream.h> #include<conio.h>

int a[20][20],n,m,i,j; void citire() {cout<<"n="; cin>>n; } void formare() {for(i=1;i<=n;i++) for(j=n;j>=i;j--){a[i][j]=j-i+1; a[j][i]=a[i][j]; } } void afis() {for(i=1;i<=n;i++) for(j=1;j<=n;j++){gotoxy(j*3,i+4); cout<<a[i][j]; } } void main() {clrscr(); citire(); formare(); afis(); getch(); }

39. Fie a un vector cu n componente reale (n>=30). Sa se obtina din a vectorul b care sa indeplineasca conditiile : - b[i]>=b[i+1] pentru i=1,2,,k-1 - b[i]<=b[i+1] pentru i=k,k+1, , n-1 - b[k-i]>=b[k+i] pentru i=1,2, , k-1, unde k=n/2 cand n este par si k=(n+1)/2 cand n este impar. #include<iostream.h> #include<conio.h> int v[50],n,b[50],i,j; void citire() {cout<<"n="; cin>>n; for(i=1;i<=n;i++) cin>>v[i]; } void sortare() {int sw,aux; do{sw=1; for(i=1;i<n;i++) if(v[i]<v[i+1]){aux=v[i]; v[i]=v[i+1];

v[i+1]=aux; sw=0; } }while(sw==0); } void formare(int &t,int b[50]) {t=0; for(i=1;i<=n/2;i++)b[++t]=v[i]; for(i=n;i>=n/2;i--)b[++t]=v[i]; } void afis(int m,int x[100]) {for(i=1;i<=m;i++) cout<<x[i]<<" "; cout<<endl; } void main() {int t; clrscr(); citire(); afis(n,v); sortare(); formare(t,b); afis(n,b); getch(); } 40. Se citeste de la tastatura o matrice a cu m linii si n coloane, ale carei elemente sunt cifre de la 0 la 9 (0<=m,n<=5). Sa se afiseze suma numerelor care se pot forma cu cifrele fiecarei linii (numarul aferent fiecarei linii se va obsine prin citirea cifrelor de pe linia respectiva de la stanga la dreapta, ignorandu-se zerourile de la inceputul liniei). Exemplu : Pentru matricea : 03825 00514 0 7 7 9 3 se va afisa valoarea 12132 reprezentand suma 3825+514+7793. #include<iostream.h> #include<conio.h> int a[20][20],n,m,i,j; void citire() {cout<<"n="; cin>>n; for(i=1;i<=n;i++) for(j=1;j<=n;j++){gotoxy(j*3,i+4); cin>>a[i][j]; } }

int numar(int t) {int p=0; for(i=1;i<=n;i++)if(a[t][i]!=0) p=p*10+a[t][i]; else if(p!=0) p=p*10+a[t][i]; return p; } int suma() {int s=0,b; for(j=1;j<=n;j++){b=numar(j); cout<<b<<" "; s=s+b; } return s; } void main() {clrscr(); citire(); cout<<"Suma obtinuta este "<<suma(); getch(); }

41. Scrieti un program care construieste in memorie o matrice t patratica de ordin n cu elemente numere naturale astfel incat pe ultima coloana si pe ultima linie sa se afle numai elemente egale cu 1, iar oricare alt element al matricei sa fie egal cu suma dintre elementul aflat imediat sub el si elementul aflat imediat in dreapta lui. Exemplu : Pentru n =4 se va afisa tabloul urmator : 20 10 4 1 10 6 3 1 4 3 2 1 1 1 1 1 include<iostream.h> #include<conio.h> int a[20][20],n,m,i,j; void citire() {cout<<"n="; cin>>n; for(i=1;i<=n;i++){a[n][i]=1; a[i][n]=1; } } void formare() {for(i=n-1;i>=1;i--) for(j=n-1;j>=1;j--)a[i][j]=a[i+1][j]+a[i][j+1]; }

void afis() {for(i=1;i<=n;i++) for(j=1;j<=n;j++){gotoxy(j*3,i+5); cout<<a[i][j]; } } void main() {clrscr(); citire(); formare(); afis(); getch(); }

42. Scrieti programul C, C++ sau Pascal, care citeste de la tastatura un sir s de cel mult 30 de caractere si un caracter c. Programul determina triplarea fiecarei aparitii a caracterului c in s si scrie noul sir obtinut in fisierul text final.out. (neintensiv: sirul poate fi scris in fisier fara a fi construit efectiv in memorie) De exemplu, daca se citeste sirul : ciocarlie si caracterul c atunci fisierul va contine sirul : ccciocccarlie. #include<iostream.h> #include<string.h> #include<conio.h> void main() {char cuv[100],ch; int i,n,j; clrscr(); cout<<"Dati cuvantul:"<<endl; cin.get(cuv,30); cin.get(); cout<<"Dati caracterul ch:"; cin>>ch; n=strlen(cuv); for(i=0;i<n;i++)if(cuv[i]==ch) {for(j=n;j>i+1;j--)cuv[j]=cuv[j-1]; cuv[i+1]=ch; n++; i++; for(j=n;j>i+1;j--)cuv[j]=cuv[j-1]; n++; cuv[i+1]=ch; i=i+2;

} cuv[n]=NULL; cout<<cuv; getch(); }

43. Fisierul cuv_a.txt contine mai multe cuvinte ordonate alfabetic. Pentru un cuvant c dat de la tastatura generati fisierul cuv_b.txt contine cuvintele din primul fisier si cuvantul c, toate in ordine alfabetica. #include<iostream.h> #include<string.h> #include<conio.h> void main() {char cuv[100][100],ch[100]; int i,n,sw=1,j; clrscr(); cout<<"Dati nr de cuvinte:"; cin>>n; cin.get(); for(i=1;i<=n;i++){cin.get(cuv[i],20); cin.get(); } cin.get(ch,20); if(strcmp(cuv[1],ch)>=0){for(j=n+1;j>=1;j--) strcpy(cuv[j],cuv[j-1]); strcpy(cuv[1],ch); n=n+1; sw=0; } else for(i=2;i<=n;i++)if(strcmp(cuv[i],ch)>=0) {for(j=n+1;j>=i;j--)strcpy(cuv[j],cuv[j-1]); strcpy(cuv[i],ch); n++; sw=0; i=n+3; } if(sw==1){strcpy(cuv[n+1],ch); n++; } for(i=1;i<=n;i++) cout<<cuv[i]<<endl; getch(); }

44. Definiti structura fractie care memoreaza in campul a al structurii numaratorul, iar in campul b numitorul fracsiei. Citisi numitorul si numaratorul a n fracsii. Pentru fiecare fracsie sa se verifice daca este ireductibila, in caz afirmativ sa se afiseze, iar in caz contrar sa se afiseze numitorul si numaratorul dupa simplificare. #include<iostream.h> #include<conio.h> struct fractie{int a; int b; }; fractie f; void citire() {cout<<"Dati numaratorul fractiei:"; cin>>f.a; cout<<"Dati numitorul fractiei:"; cin>>f.b; } int divizor(int p,int t) {int i; if(p>t)for(i=t;i>1;i--) if(p%i==0&&t%i==0) return i; for(i=p;i>1;i--)if(p%i==0&&t%i==0) return i; return 0; } void main() {clrscr(); citire(); int k; k=divizor(f.a,f.b); if(k!=0) cout<<"Fractia simplificata este "<<f.a/k<<"/"<<f.b/k; else cout<<"Fractia este ireductibila"; getch(); } 45. Se considera un text cu maximum 255 de caractere in care cuvintele sunt separate prin unul sau mai multe spatii. Primul caracter din textul citit este o litera, iar cuvintele sunt formate numai din litere mici ale alfabetului englez. Scrieti un program C/C++ care citeste de la tastatura textul si il transforma inlocuind prima litera a fiecarui cuvant cu litera mare corespunzatoare, restul caracterelor ramanand nemodificate. Textul astfel transformat va fi afisat pe ecran. Exemplu: daca de la tastatura se introduce textul: clasa elev scoala se va afisa pe ecran: Clasa Elev Scoala #include<iostream.h> #include<string.h> #include<conio.h> #include<ctype.h> void main() {char cuv[100];

int i,n; clrscr(); cin.get(cuv,30); n=strlen(cuv); cuv[0]=toupper(cuv[0]); for(i=1;i<n;i++) if(cuv[i]==' '&&cuv[i+1]!=' ')cuv[i+1]=toupper(cuv[i+1]); cout<<cuv; } 46. Se da o inregistrare cu numele cerc,in care sunt stocate abscisa si ordonata centrului cercului si raza acestuia. Pentru un n numar natural <100, citisi datele caracteristice a n cercuri, sortasi structurile descrescator in funcsie de diametru si afisasi coordonatele centrelor cercurilor in ordinea obsinuta dupa ordonare. #include<iostream.h> #include<conio.h> struct cerc {int x; int y; float r; }; cerc c[100]; int n,i; void citire() {cout<<"Dati numarul de cercuri:"; cin>>n; for(i=1;i<=n;i++){cout<<"Dati abscisa centrului cercului:"; cin>>c[i].x; cout<<"Dati ordonata centrului cercului:"; cin>>c[i].y; cout<<"Dati raza cercului:"; cin>>c[i].r; } } void ordonare() {int sw,aux1,aux2; float aux3; do{sw=1; for(i=1;i<n;i++) if(2*c[i].r>=2*c[i+1].r){sw=0; aux1=c[i].x; c[i].x=c[i+1].x; c[i+1].x=aux1; aux2=c[i].y; c[i].y=c[i+1].y; c[i+1].y=aux2; aux3=c[i].r;

c[i].r=c[i+1].r; c[i+1].r=aux3; } }while(sw==0); } void main() {clrscr(); citire(); ordonare(); for(i=1;i<=n;i++) cout<<"Cercul de centrul("<<c[i].x<<","<<c[i].y<<") si de raza "<<c[i].r<<endl; getch(); }

47. Scrieti programul C/C++ care citeste de la tastatura un numar de n siruri de cel mult 40 de caractere, formate doar din litere mici ale alfabetului englez. Sa se verifice daca sirul de pe pozitia i se termina cu acelasi caracter cu care incepe sirul de pe pozitia i+1, pentru i de la 1 la n-1. Se va afisa pe ecran mesajul Sirurile citite verifica proprietatea sau Sirurile citite nu verifica proprietatea Exemplu: daca se citeste sirul n=4 si sirurile proba a acoperit tot atunci pe ecran se va afisa: Sirurile citite verifica proprietatea #include <iostream> #include <string> using namespace std; int main() { char curent[41], anterior[41]; int n; cin>>n; cin.get(); cin.get(curent,41); int test=1; for(int i=1;i<=n-1;i++) { strcpy(anterior,curent); cin.get(); cin.get(curent,41); if(anterior[strlen(anterior)-1]!=curent[0])

test=0; } if(test) cout<<"Sirurile citite verifica proprietatea."; else cout<<"Sirurile citite nu verifica proprietatea."; return 0; }

48. Fisierul text linii.txt este alcatuit din mai multe linii de lungime variabila, pe fiecare linie gasindu-se cate un cuvant. Scrieti un program care afiseaza linia (liniile) de lungime maxima. Exemplu: Pentru fisierul linii.txt: Se va afisa: informatica informatica isoscel programator triunghi trapez programator caiet #include <fstream> #include <iostream> #include <string> using namespace std; int main() { char cuvant[200]; int max=0; ifstream f("linii.txt"); while(f.getline(cuvant,200)) if(strlen(cuvant)>max) max=strlen(cuvant); f.close(); ifstream g("linii.txt"); while(g.getline(cuvant,200)) if(strlen(cuvant)==max) cout<<cuvant<<endl; g.close(); return 0; } 49. Fie s1 si s2 doua siruri de caractere. Verificati daca s2 este o codificare shift a lui s1(o codificare shift se obtine din s1 prin adagarea la codul ASCII al fiecarui caracter din s1 a unei constante k) afisand in caz afirmativ valoarea lui k sau mesajul NU in caz contar.

Ex: Pentru sirurile s1=acdrtu si s2=ceftvx se afiseaza k=2. #include <iostream> using namespace std; int test(char *s1, char *s2) { if(strlen(s1)!=strlen(s2)) return 0; int d=s1[0]-s2[0]; for(int i=1;i<=strlen(s1)-1;i++) if(d!=s1[i]-s2[i]) return 0; return 1; } int main() { char s1[30],s2[30]; cin.get(s1,30); cin.get(); cin.get(s2,30); cout<<test(s1,s2); if(test(s1,s2)) cout<<' '<<s2[0]-s1[0]; return 0; }

50. Scrieti un program care citeste de la tastatura un sir de caractere ce contine litere mici si spatii. Afisati cuvantul cu cele mai multe vocale (daca exista mai multe se va afisa unul singur). Exista cel pusin un cuvant ce consine vocale. #include <iostream> #include <string> using namespace std; int nrv(char *s) { int k=0; for(int i=0;i<=strlen(s)-1;i++) if(strchr("aeiouAEIOU",s[i])) k++; return k; } int main() { char propozite[1000], *cuvant, cuvant_max[20]; int nrv_max=0; cin.get(propozite,1000);

cuvant=strtok(propozite," "); while(cuvant) { int aux=nrv(cuvant); if(aux>nrv_max) { nrv_max=aux; strcpy(cuvant_max,cuvant); } cuvant=strtok(NULL," "); } cout<<cuvant_max; return 0; } 51. Scrieti programul C/C++ care citeste de la tastatura un cuvant de cel mult 15 litere mici ale alfabetului englez si care afiseaza pe ecran, pe linii distincte, cuvintele obtinute prin stergerea succesiva a vocalelor din cuvantul citit, de la stanga la dreapta, ca in exemplu de mai jos: Exemplu: Daca se citeste cuvantul examen se afiseaza: xamen xmen xmn

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