Differences
This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
admitere-informatica-2021 [2021/04/28 15:28] pdmatei |
admitere-informatica-2021 [2021/05/18 12:43] (current) pdmatei |
||
---|---|---|---|
Line 1: | Line 1: | ||
+ | ====== Lectie filmata online ===== | ||
+ | |||
+ | ==== Varianta 2. Problema 3 ==== | ||
+ | Un tablou bidimensional ''a'' cu n linii si n coloane numerotate de la 1 la n, este simetric fata de diagonala secundara, daca pentru orice pereche de indici (i,j) este adevarata expresia: | ||
+ | |||
+ | - ''a[i][j] = a[j][i]'' | ||
+ | - ''a[i][j] = a[n+1-j][n+1+i]'' | ||
+ | - ''a[i][j] = a[n+1-i][n+1-j]'' | ||
+ | - ''a[i][j] = a[n-j][n-i]'' | ||
+ | - ''a[i][j] = a[n+1-j][n+1-i]'' | ||
+ | - ''a[i][j] = a[n+j][n-i]'' | ||
+ | ==== Solutie ==== | ||
+ | |||
+ | Intr-o matrice, numerotam cu ''i'' liniile, si cu ''j'' coloanele. Diagonala secundara poate fi gasita la pozitiile: ''a[n-i+1,i]'' cu i de la 1 la n. Pentru ca matricea sa fie simetrica in raport cu diagonala secundara, in particular, prima linie: ''a[1,1] ... a[1,n]'' trebuie sa aibe aceleasi valori, element cu element, cu ultima coloana, **transpusa**: ''a[n,n] ... a[1,n]''. Asadar: ''a[1,j] = a[n-j+1,n]'', cu j de la 1 la n. Conditia trebuie sa fie adevarata, in continuare, pentru linia 2 si coloana n-1 **transpusa**, deci generalizand: ''a[i,j]=a[n-j+1,n-i+1]''. Raspuns corect e). | ||
+ | |||
+ | ==== Varianta 2. Problema 3 ==== | ||
+ | Precizati ce valoare are variabila ''b'' de tip sir de caractere dupa executarea secventei: | ||
+ | |||
+ | <code C> | ||
+ | char b[] = "toc2019" | ||
+ | b[3] = b[3]-1; | ||
+ | strcpy(b+5,b+7); | ||
+ | strcpy(b,b+3); | ||
+ | </code> | ||
+ | |||
+ | - ''b20'' | ||
+ | - ''19'' | ||
+ | - ''20'' | ||
+ | - ''10'' | ||
+ | - ''toc'' | ||
+ | - ''2019'' | ||
+ | |||
+ | ==== Solutie ==== | ||
+ | |||
+ | * Instructiunea ''b[3]=b[3]-1;'' modifica sirul in ''toc1019''; | ||
+ | * ''strcpy(b+5,b+7)'' modifica sirul in ''toc10'' (sirul ''b+7''este sirul vid codificat ca ''\0'') | ||
+ | * ''strcpy(b,b+3)'' modifica sirul in ''10'' | ||
+ | |||
+ | Raspuns corect ''10'' (varianta d). | ||
+ | |||
+ | |||
+ | ==== Varianta 4. Problema 7 ==== | ||
+ | |||
+ | Tabloul bidimensional ''b'' (cu liniile si coloanele numerotate de la ''1'' la ''n'') se obtine din tabloul bidimensional ''a'' prin rotire cu 90deg la dreapta. Pentru obtinerea unei transformari corecte, secventa: | ||
+ | |||
+ | <code C> | ||
+ | for (i=1; i<=n; i++) | ||
+ | for (j=1; j<=n; j++) | ||
+ | ... | ||
+ | </code> | ||
+ | trebuie completata cu atribuirea: | ||
+ | - ''b[i][j]=a[j][i]'' | ||
+ | - ''b[i][j]=a[j][n-i+1]'' | ||
+ | - ''b[i][j]=a[n-j+1][n-i+1]'' | ||
+ | - ''b[i][j]=a[n-i+1][n-j+1]'' | ||
+ | - ''b[i][j]=a[n-j+1][i]'' | ||
+ | - ''b[i][j]=a[n-i+1][j]'' | ||
+ | |||
+ | ==== Solutie ==== | ||
+ | |||
+ | In rotatia cu 90deg dreapta, linia 1 a matricii devine coloana n, asadar ''b[i,n] = a[1,i]'', pentru i de la 1 la n. A doua linie a matricii a devine coloana n-1, deci ''b[i,n-1]=a[2,i]'', iar ''b[i,1] = a[n,i]''. Asadar: ''b[i,j]=a[n-j+1,i]''. Raspuns corect ''e)''. | ||
+ | |||
+ | |||
+ | |||
+ | ==== Varianta 5. Problema 3 ==== | ||
+ | |||
+ | Precizati ce valoare se va afisa pe ecran in urma executarii secventei de program urmatoare, stiind ca ''s'' este o variabila care memoreaza un sir de caractere, iar ''i'' este o variabila de tip intreg. | ||
+ | |||
+ | <code C> | ||
+ | strcpy(s,"admitere"); | ||
+ | for(i=0; i<strlen(s); i++) | ||
+ | if (strchr("politehnica", s[i])) | ||
+ | strcpy(s+i,s+i+1); | ||
+ | </code> | ||
+ | |||
+ | - ''dmt'' | ||
+ | - ''dm'' | ||
+ | - ''dmtr'' | ||
+ | - ''dmr'' | ||
+ | - ''mt'' | ||
+ | - ''mrt'' | ||
+ | |||
+ | ==== Solutie ==== | ||
+ | |||
+ | Nu stim capacitatea lui ''s'', insa din faptul ca printre variante nu avem un caz de eroare, prespunem ca este suficienta. | ||
+ | - ''i=0''. ''strchr'' va cauta prima aparitie a lui ''s[i]'', si va intoarce un pointer la ea. Instructiunea din ''if'' se va executa doar daca gasim o aparitie. In acest caz ''a'' exista si rezultatul va fi: ''s="dmitere"'' | ||
+ | - ''i=1''. String-ul este ''dmitere'' -> ''m'' nu apare in ''politehnica'', continuam cautarea; | ||
+ | - ''i=2''. ''i'' apare in politehnica: ''*(s+2)="itere"'' si noul ''s'' va fi ''dmtere''; | ||
+ | - ''i=3''. ''e'' apare in politehnica: ''*(s+3)="ere"'' si noul ''s'' va fi ''dmtre''; | ||
+ | - ''i=4''. ''e'' apare in politehnica: ''*(s+4)="e"'' si noul ''s'' va fi ''dmtr''; | ||
+ | - ''i=5''. Conditia din ''for'' nu mai este satisfacuta. | ||
+ | |||
+ | Raspuns corect: **c)** (''dmtr'') | ||
+ | |||
+ | |||
+ | |||
+ | ==== Varianta 5. Problema 9 ==== | ||
+ | |||
+ | Se considera secventa alaturata in care ''A'' este un tablou bidimensional cu cinci linii si cinci coloane, numerotate de la ''1'' la ''5'', iar ''x'' si ''i'' sunt variabile de tip intreb. Stiind ca orice element al tabloului este initial egal cu numarul de ordine al liniei pe care se afla, precizati care este valoarea variabilei ''x'' dupa executarea secventei de mai jos: | ||
+ | |||
+ | <code C> | ||
+ | x=0; | ||
+ | for (i=1; i<=5; i++) | ||
+ | if (i%2==0) x=x+A[i-1][i]; | ||
+ | </code> | ||
+ | |||
+ | ==== Solutie ==== | ||
+ | |||
+ | Matricea arata in felul urmator: | ||
+ | <code> | ||
+ | 1 1 1 1 1 | ||
+ | 2 2 2 2 2 | ||
+ | 3 3 3 3 3 | ||
+ | 4 4 4 4 4 | ||
+ | 5 5 5 5 5 | ||
+ | </code> | ||
+ | |||
+ | Elementele ''A[i-1][i]'' (atentie, cu i de la **2** la **5**), sunt cele **deasupra** diagonalei principale: | ||
+ | <code> | ||
+ | 1>1 1 1 1 | ||
+ | 2 2>2 2 2 | ||
+ | 3 3 3>3 3 | ||
+ | 4 4 4 4>4 | ||
+ | 5 5 5 5 5 | ||
+ | </code> | ||
+ | |||
+ | Conditia ''i%2==0'' verifica daca ''i'' este par (prin urmare, ea nu va fi satisfacuta pentru ''i=1''), asadar adunam valorile pentru ''i=2'' si ''i=4'', deci a doua si a patra valoare de **deasupra diagonalei principale**, adica ''1+3=4''. | ||
+ | |||
+ | ==== Varianta 7. Problema 3 ==== | ||
+ | |||
+ | Se considera doua tablouri unidimensionala ''A'' si ''B''. Stiind ca ''A=(7,10,12,18,20)'', iar in urma interclasarii tablourilor ''A'' si ''B'', in ordine descrescatoare, se obtine tabloul cu elementele ''(46,20,18,17,12,10,10,7,4,3)''. Atunci tabloul ''B'' poate fi: | ||
+ | - ''(3,4,17,46)'' | ||
+ | - ''(3,4,10,46)'' | ||
+ | - ''(3,4,10,17)'' | ||
+ | - ''(3,4,10,17,46)'' | ||
+ | - ''(46,17,4,3)'' | ||
+ | - ''(46,10,4,3)'' | ||
+ | |||
+ | ==== Solutie ==== | ||
+ | |||
+ | Daca eliminam din rezultat elementele din ''A'', obtinem: ''(46,17,10,4,3)'', nu neaparat in aceasta ordine. Informatia e suficienta pentru a identifica raspunsul corect, insa putem anticipa si ordinea. Interclasarea se face (conform enuntului) de la ultimul element al fiecarei liste. Observam ca lista rezultat este sortata, ''A'' este sortata, deci elementele din ''B'' sunt in mod necesar (in acest exemplu) sortate, deci ordinea este ''(3,4,10,17,46)''. | ||
+ | |||
+ | |||
+ | |||
====== Rezolvare subiecte admitere - varianta 41 ====== | ====== Rezolvare subiecte admitere - varianta 41 ====== | ||
Line 84: | Line 228: | ||
<code C> | <code C> | ||
// Varianta 4 | // Varianta 4 | ||
- | for (i=0 ; i<n && a[i] != x ; i++) | + | for (i=0 ; i<n && a[i] != x ; i++); |
if (i < n) printf("%d", i); | if (i < n) printf("%d", i); | ||
else printf("-1"); | else printf("-1"); | ||
Line 91: | Line 235: | ||
<code C> | <code C> | ||
// Varianta 5 | // Varianta 5 | ||
- | for (i=0 ; i==n && a[i] != x ; i++) | + | for (i=0 ; i==n && a[i] != x ; i++); |
if (i == n) printf("%d", i); | if (i == n) printf("%d", i); | ||
else printf("-1"); | else printf("-1"); |