LUCRARE SCRISĂ LA INFORMATICĂ PE SEMESTRUL AL II-LEA – varianta 1
Subiectul I (30 puncte)
1. Fiecare dintre variabilele declarate alăturat memorează numele şi nota câte unui struct elev{ elev. Scrieţi secvenţa de instrucţiuni prin care se citesc de la tastatură numele şi nota char nume[20]; pentru fiecare dintre variabilele e1 şi e2 şi apoi se afişează numele elevului cu nota float nota;}; cea mai mare. Dacă cele două medii sunt egale, se va afişa numele elevului memorat elev e1,e2; în variabila e1. 2. În declararea alăturată variabila a reţine în câmpurile x şi y coordonatele unui punct în planul xOy. Care este expresia a cărei valoare reprezintă distanţa punctului respectiv faţă de originea axelor de coordonate? struct punct { float x,y; }a; 3. Ce valoare va avea variabila întreagă x, în urma apelului F(1, x), ştiind că, înainte de apel, variabila x are valoarea 0, iar subprogramul F este definit alăturat? void F(int i, int &x) { if (i <= 10) { if(i%2!=0) x = x + 2; else x = x – 1; F(i + 1, x); } } 4. Se consideră funcţia Suma, definită alăturat. Ce valoare are Suma(2)? Dar Suma(8)? int Suma(int x) { if(x == 1 ) return 0; if(x%2==0) return Suma(x-1)+(x-1)*x; return Suma(x-1)-(x-1)*x; } 5. Ce se va afişa în urma executării secvenţei de program alăturate dacă variabila x memorează cuvântul bacalaureat, iar variabila y memorează cuvântul banal? if(strcmp(x, y) > 0) cout << x; | printf(“%s”,x); else if(strcmp(x,y) < 0) cout << y; | printf(“%s”,y); else cout << “imposibil”; | printf(“imposibil”); 6. Ştiind că variabila i este de tip întreg şi că variabila s reţine şirul de caractere barba, ce se va afişa la executarea secvenţei alăturate? for(i=0;i<strlen(s);i++) if(s[i]==’b’) s[i]=’t’; cout<<s; | printf(“%s”,s); 7. Într-o listă liniară simplu înlănţuită, alocată dinamic, fiecare element reţine în câmpul info un număr întreg, iar în câmpul leg adresa următorului nod din listă sau NULL dacă nu există un nod următor. Adresa primului element al listei este memorată în variabila p. Ce valoare se va afişa, în urma executării secvenţei alăturate, dacă lista memorează, în ordine, doar valorile 5, 4, 3, 2, 6 ? x=1; while (p->leg!=NULL) { x=x * p->leg->info; p=p->leg; } cout<<x;|printf(“%d“,x); 8. Fiecare nod al unei liste simplu înlănţuite, alocată dinamic, cu cel puţin 4 noduri, reţine in câmpul urm adresa nodului următor din listă sau NULL dacă nu are un nod următor. Ştiind că variabila p reţine adresa primului nod din listă, variabila q reţine adresa celui de-al doilea nod din listă, iar variabila r reţine adresa celui de-al treilea nod din listă, care este secvenţa prin care se interschimbă al doilea cu al treilea element din lista iniţială? a. p->urm=r; b. p->urm=r; c. r->urm=q->urm; d. q->urm=r->urm; q->urm=r->urm; r->urm=q->urm; q->urm=r->urm; p->urm=r; r->urm=q; q->urm=r->urm; p->urm=r; r->urm=q->urm;
Subiectul II (20 puncte)
Algoritmul alăturat este reprezentat în pseudocod. citeste x,y (numere naturale, x≤y) b0 c1 ┌pentru zx,y execută │┌cât timp c<z execută ││ ab ││ bc ││ ca+b │└■ │┌dacă z=c atunci ││ scrie z,’ ’ │└■ └■ a) Scrieți valorile afișate dacă se citesc, în această ordine, numerele 3 și 10. b) Dacă pentru variabila x se citește numărul 18, scrieți cel mai mic și cel mai mare număr care pot fi citite pentru variabila y astfel încât, în urma executării algoritmului, pentru fiecare dintre acestea, să se afișeze o singură valoare. c) Scrieți în pseudocod un algoritm echivalent cu cel dat, înlocuind adecvat structura cât timp...execută cu o structură repetitivă cu test final. d) Scrieți programul C/C++ corespunzător algoritmuluidat.
Subiectul III (20 puncte)
1. Se dă un şir cu n elemente, numere naturale. Folosind metoda Divide et Impera să se verifice dacă în şir există elemente prime. Programul afișează pe ecran mesajul DA, dacă şirul conţine elemente prime, respectiv NU în caz contrar. (1 ≤ n ≤ 200, elementele şirului vor fi mai mici decât 1.000.000.000) 2. Scrieți o funcție recursivă care să verifice dacă în șir există elemente prime, astfel încât înlocuind-o în programul precedent, acesta să fie funcțional. 3. Scrieți declarația corespunzătoare unei liste simplu înlănțuite de numere întregi. Scrieți o funcție care are ca parametri adresele primului și ultimului element din listă și șterge ultimul element din listă. LUCRARE SCRISĂ LA INFORMATICĂ PE SEMESTRUL AL II-LEA – varianta 2
Subiectul I (30 puncte)
1. Se consideră declarările alăturate. Care este tipul expresiei x.x.y ? struct A { struct B { int x; struct A x; char y; long y;}; float z;}; B x, y;. 2. Variabila x, declarată alăturat, memorează în câmpurile med1 şi med2 mediile semestriale ale unui elev. Scrieţi o expresie a cărei valoare va fi media anuală a acestui elev. struct elev { int matricol; float med1,med2; }x; 3. Ce se va afişa în urma executării subprogramului alăturat, la apelul F(57);? void F(int x) { if(x) { F(x/2); cout << x%2; | printf(“%d”,x%2); } } 4. Pentru definiţia alăturată a subprogramului f, scrieţi ce valoare are f(8). Dar f(1209986)? int f(long x) { int y,z; if (x==0) return x; else {y=x%10; z=f(x/10); if(y>z) return y ; else return z; } } 5. Ce se afişează pe ecran în urma executării secvenţei de program alăturate, unde a este o variabilă de tip şir de caractere? strcpy(a,"informatica"); strcpy(a+2,a+5); cout<<a; | printf("%s",a); 6. Ce valoare se va afişa pe ecran în urma executării secvenţei de program alăturate, ştiind că variabila a este de tip şir de caractere, iar i este o variabilă de tip întreg? strcpy(a,"info"); for(i=0;i<strlen(a);i++) a[i]=a[i]+1; cout<<a; | printf("%s",a); 7. Într-o listă simplu înlănţuită, alocată dinamic, fiecare element reţine în câmpul urm adresa elementului următor din listă sau NULL dacă nu are un element următor. Lista are cel puţin două elemente, variabila p reţine adresa primului element, iar q reţine adresa ultimului element din listă. Care este numărul de elemente din listă dacă expresia de mai jos are valoarea 1? p->urm->urm==q 8. Într-o listă simplu înlănţuită alocată dinamic, cu cel puţin două noduri, fiecare nod reţine în câmpul urm adresa nodului următor din listă sau NULL dacă nu are un nod următor. Ştiind că variabila p reţine adresa primului nod din listă, iar variabila q este de acelaşi tip cu p, care este secvenţa ce realizează eliminarea celui de-al doilea nod din listă? a. q=p->urm; b. p->urm=p->urm- c. q=p->urm; d. p=q->urm; q->urm=p->urm->urm; >urm; p->urm=p->urm->urm; q->urm=p->urm->urm; delete q; | free(q); delete p; | free(p); delete q; | free(q); delete q; | free(q); Subiectul II (20 puncte) Se consideră algoritmul alăturat, reprezentat în pseudocod. citeşte n (număr natural) k1 ┌cât timp n³1 execută │┌dacă n>k atunci ik ││altfel in │└■ │ nn-i │┌cât timp i³1 execută ││ scrie k,' '; ii-1 │└■ │ kk+1 └■ a) Scrieţi valorile afişate dacă se citește numărul 7. b) Scrieţi cel mai mic și cel mai mare număr care pot fi citite astfel încât, în urma executării algoritmului, pentru fiecare dintre acestea, ultima valoare afişată să fie 10. c) Scrieţi programul C/C++ corespunzător algoritmului dat. d) Scrieţi în pseudocod un algoritm, echivalent cu cel dat, înlocuind una dintre structurile cât timp...execută cu o structură repetitivă de alt tip.
Subiectul III (20 puncte)
1. Se dă un şir cu n elemente, numere naturale. Folosind metoda Divide et Impera să se verifice dacă în şir există elemente palinddrom. Programul afișează pe ecran mesajul DA, dacă şirul conţine elemente prime, respectiv NU în caz contrar. (1 ≤ n ≤ 200, elementele şirului vor fi mai mici decât 1.000.000.000) 2. Scrieți o funcție recursivă care să verifice dacă în șir există elemente palindrom, astfel încât înlocuind-o în programul precedent, acesta să fie funcțional. 3. Scrieți declarația corespunzătoare unei liste simplu înlănțuite de numere întregi. Scrieți o funcție care are ca parametri adresele primului și ultimului element din listă și adaugă un element după primul element par din listă.