Sunteți pe pagina 1din 4

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)
b0
c1
┌pentru zx,y execută
│┌cât timp c<z execută
││ ab
││ bc
││ ca+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)
k1
┌cât timp n³1 execută
│┌dacă n>k atunci ik
││altfel in
│└■
│ nn-i
│┌cât timp i³1 execută
││ scrie k,' '; ii-1
│└■
│ kk+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ă.

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