Variabilele x și y sunt reale, iar z și t sunt întregi. Indicați ce valoare va avea x după executarea următoarei secvențe de instrucțiuni.
x=1.5; y=2.0;
z=2; t=4;
x=x*y+(float)z/t;
3.03.52.53.15
Conversia (float)z se aplică lui z înainte de împărțire, deci (float)z/t este o împărțire reală: 2.0/4 = 0.5 (fără conversie, z/t ar fi împărțire între întregi și ar da 0). Apoi x*y este 1.5*2.0 = 3.0, iar x devine 3.0+0.5 = 3.5.În secvența de mai jos toate variabilele sunt numere întregi. Indicați care dintre următoarele secvențe de instrucțiuni pot înlocui punctele de suspensie astfel încât, în urma executării secvenței obținute, variabila x să memoreze valoarea 246.
y=1234567, x=0, z=1;
while(y)
{
if(!(y%2)){...}
y/=10;
}
x=(y%10)*10+x; z=z*10;x=(y%10)*10+x; z=z+1;x=z*(y%10)+x; z=z*10;z=z*10; x=z*(y%10)+x;
Ciclul scoate cifrele lui y de la dreapta la stânga, iar !(y%2) le reține doar pe cele pare: 6, 4, 2, în această ordine. Pentru a construi 246, fiecare cifră pară nouă trebuie înmulțită cu o putere a lui 10 care crește la fiecare cifră reținută, adică exact x=z*(y%10)+x; z=z*10;: x=1⋅6=6, apoi x=10⋅4+6=46, apoi x=100⋅2+46=246. Cele două variante care folosesc x=(y%10)*10+x înmulțesc mereu cu 10 și ajung la 120, oricum ar evolua z. Cea care începe cu z=z*10; folosește un z deja înmulțit, deci cifrele sunt înmulțite cu 10, 100, 1000, iar rezultatul este 2460.Pentru a verifica dacă într-un tablou unidimensional având elementele (3,4,7,10,12,17,18,20,46) există elementul cu valoarea x=17, se aplică metoda căutării binare.Știind că numerotarea elementelor, în tablou, se realizează începând cu poziția 0, indicați care este numărul minim de elemente ale tabloului care trebuie verificate pentru a găsi elementul căutat.
- 3
- 2
- 6
- 5
Poziții 0…8. Prima verificare este la mijloc, poziția (0+8)/2=4, valoarea 12<17, deci se continuă în dreapta, pe pozițiile 5…8. A doua este poziția (5+8)/2=6, valoarea 18>17, deci rămân pozițiile 5…5. A treia este poziția 5, valoarea 17: găsit. Sunt verificate 3 elemente; căutarea secvențială ar fi verificat 6.Indicați care este numărul elementelor egale cu 1 aflate pe diagonala principală în urma executării secvenței de mai jos, în care A este un tablou bidimensional cu n linii și n coloane, iar i, j sunt variabile de tip întreg.
for(i=n;i>=1;i--)
for(j=n;j>=1;j--)
A[i][j]=(i==j);
nnu poate fi calculatn-1(n+1)*n/2
Parcurgerea în sens invers nu schimbă nimic: fiecare element primește valoarea expresiei (i==j), adică 1 când i=j și 0 în rest. Toate cele n elemente de pe diagonala principală (unde i=j) devin 1, deci răspunsul este n.Indicați valoarea variabilei s la finalul executării următoarei secvențe de program:
char s[100]="aerisirea", t[100];
for(int i=0;i<strlen(s)/2;i++)
{
if(strchr("aeiou",s[i]) && s[i]==s[strlen(s)-i-1])
{
strcpy(t,s+i);
strcpy(s+i+1,t);
s[i+1]='x';
strcpy(t,s+strlen(s)-i-1);
strcpy(s+strlen(s)-i,t);
s[strlen(s)-i-1]='x';
i++;
}
}
xaxerxisxirxrxaaxerisireaxaxexrisirexaxaxexrixsixrexax
Blocul if se execută când s[i] este vocală egală cu litera simetrică din dreapta; atunci pune câte un x după fiecare dintre cele două vocale, iar i++ din interior sare peste x-ul nou inserat. Pas cu pas: i=0 (a și a) dă axerisireax; i=2 (e și e) dă axexrisirexax; i=4 este r, nu vocală; i=5 (i și i) dă axexrixsixrexax. După blocul pentru i=5, variabila i ajunge la 7, iar condiția 7<15/2=7 este falsă (șirul are acum 15 caractere), deci rezultatul final este axexrixsixrexax.