Sunteți pe pagina 1din 6

C++ clasa xI-a

Evaluare PROBLEME DE TIP GRILA


1. Care dintre variantele de mai jos reprezinta o declaratie corecta a unui sir de caractere?
a)char s[20]
d)char s

b) char *s[20]
e)char s[]

c)char *s

2. Ce afiseaza programul urmator?


#include<stdio.>
Void main ()
{char *s= 123456789, *t,*u;
u=&s[4], s+=3 ,t==&s[1];
printf(%d%d%d,u==s,u==t,s==t);
}
a)000 b)001 c)010
d)100 e)111
3. Care dintre instructiunile (1),(2),,(5) din functia main de mai jos sunt eronate ?
#include <stdio.h >
#include <string.h >
#include <iostream.h>
void main()
{char *s1,*s2,*s3;
Int x;
s1=test;
//(1)
scanf(%s,s2) //(2)
s3=&s1;
//(3)
cout<<s1+s2; //(4)
x=strlen(*s2); //(5)
}
a) (2) ,(3) ,(4)
b) (2),(3),(4) si (5)
c) (4) si (5)
d) (3) si (5)
e) (3) ,(4) si (5)
4. Fie programul
#include <iostream.h>
Void.main()
{char *s,*t,*u;
int i,x;
cin>>s;
for(x=0,i=0;s[i],t=&s[i], u=t+1, u[0]==t[0]? x=1:0,i++);

cout<<x;
}

In urma executiei programului ,se va afisa valoarea 0,daca:


a)toate caracterele sirului s sunt identice
b)in sirul s exista cel putin doua caractere successive diferite
c)in sirul s exista cel mult doua caractere successive identice
d)in sirul s exista cel putin doua caractere successive identice
e)in sirul s nu exista doua caractere successive identice.
5. Ce afiseaza programul de mai jos?
#include <iostream.h>
Void main()
{char *s[5]=012,345,678,9AB ,CDE};
Char *t, *u; int i;
t=&s[1][0];
cout<<(*(t+5)==s[2][1]);
u=&s[3][0]+1;
i=0;
while(u[i]) cout<<u[i++];
}
a)178
b)1AB
c)078
d)0AB
e)067
6. Ce afiseaza programul de mai jos?
#include <string.h >
#include<iostream.h >
Void main()
{
Char *s[10]={*10,00,10,01,11}
Char *t=10;
Int i=0,j=i-1;
While (s[i])
{if(!strcmp(s[i],t))j=i;
i++;
}
Cout<< j;
a)-1
b)0
c)1
d)3
e)4

APROFUNDARE
Probleme rezolvate
R.I.4 Numarul magic
Conform tratatelor de numerologie, fiecare om are un asa-numit numar magic,aflat in stransa
legatura cu configuratia astrala aferenta zodiei in care s-a nascut persoana,si care influenteaza
imaginea publica si comportamentul respectivei persoane.Acest numar magic se poate determina
pornind de la numele persoanei,prin aplicarea urmatorului algoritm:
-fiecare litera a alfabetului latin are o asa-numita cifra caracteristica,cifra de la 1 la 9;
-se determina mai intai numarul natural obtinut prin adunarea cifrelor caracteristice aferente
tuturor literelor ce compun numele persoanei;
-se calculeaza suma cifrelor numarului intermediar rezultat la pasul anterior,apoi suma cifrelor
sumei rezultate, s.a.m.d., pana se ajunge la o suma alcatuita dintr-o singura cifra;
-aceasta cifra reprezinta numarul magic cu care este inzestrata persoana .
Cifrele caracteristice aferente literelor alfabetului latin sunt urmatoarele:
1 pentru A ,J si S;
2 pentru B ,K si T;
3 pentru C,L,U ;
4 pentru D,M,V ;
5 pentru E,N,W ;
6 pentru F,O,X ;
7 pentru G,P,Y ;
8 pentru H,Q,Z ;
9 pentru I si R ;
Realizati un program care citeste de la tastatura numele complet al unei persoane (numele de
familie si toate prenumele in ordinea din bulletin, scrise numai cu majuscule si separate prin
spatii.),apoi se calculeaza si afiseaza cifra magica a persoanei respective.
Exemplu
Daca se introduce numelePOPESCU CRISTINA ADRIANA,algoritmul de calcul al
numarului magic conduce la urmatoarele rezultate:
7+6+7+5+1+3+3+9+9+1+2+9+5+1+4+9+9+1+5+1 101
1+0+12
Rezolvare
Observati ca cifrele caracteristice aferente literelor alfabetului latin respecta o anumita
simetrie ,in sensul ca se repeta din 10 in 10 .Altfel spus,literele de la A laI au succesiv
cifrele caracteristice 1,2,,9, apoi incepand cu J, pana la R,se reia numaratoarea de la 1
la 9 ,si in sfarsit literelor de la S la Z le revin cifrele 1,2,,8 (fiind numai 28 de litere ,
ultimul set este incomplet).
Definim un vector cif al cifrelor caracteristice ,in care pozitiile elementelor sunt codurile
caracterelor in setul ASCII, iar cifrele caracteristice sunt elementele.Evident ca,dintre cele
255 de pozitii create in vectorul cif vor fi folosite numai cele aferente literelor mari, de la 65
la 93.De exemplu cif[65] =1,cu semnificatia ca cifra caracteristica a literei A,memorata pe

pozitia 65 , este 1.Prin prisma simetriei descrise in paragraful anterior, putem completa acest
vector astfel:
parcurgem in variabila c,de tipul int,caracterele litera ,mare , de la A la Z ;
Definim o variabila ant, in care vom pastra in permanenta cifra caracteristicaa literei
anteriore celei curente din vector;folosindu-ne de compatibilitatea intre tipul caracter si tipul
intreg,vom proceda in fiecare pas in felul urmator:
in cazul in care pozitia curenta c este una din literele A, J , sau S,facem atribuirile
cif[c]=1 si ant[c]=1;
in caz contrar,vcifra caracteristica este obtinuta prin incrementarea cu 1 a celei anteriore
(cif[c]=ant+1),iar aceasta noua cifra caracteristica va deveni anterioara pentru pasul urmator
(ant=cif[c]);
Citim de la tastatura numele persoanei in variabila nume.Transformam literele mici ale
sirului nume in litere mari,verificand concomitent ,prin intermediul unei variabile de tip
semafor (cu sens logic) daca numele este corect,adica daca el contine numai litere .(in caz
contrar abbandona programul dupa afisarea unui mesaj de atentionare).
Daca numele este corect ,declansam algoritmul de determinare a numarului
magic.Determinam in variabila mag numarul intermediar ce rezulta prin insumarea cifrelor
caracteristice aferente literelor ce compun numele:parcurgem intr-un ciclu pozitiile
i=0,1,strlen(nume)-1 ale caracterelor sirului nume , si la fiecare pas ,daca nume[i] este
diferit de caracterul spatiu(acum sirul nume poate contine doar litere mari si spatii care
separa numele de familie si prenumele),atunci adaugam la mag cifra caracteristica a
caracterului nume[i] {mag+=cif[nume[i]];}
In continuare trebuie sa determinam suma cifrelor numarului magic , pe care o memoram tot
in variabila mag,apoi suma cifrelor pentru suma obtinuta, s.a.m.d., pana cand obtinem in
variabila mag o suma alcatuita dintr-o singura cifra.Este vorba despre algoritmul clasic de
determinare a sumei cifrelor unui numar natural,care insa trebuie ciclat de asa natura incat sa
se reia cat timp mag>=10.
Ultimul numar rezultat in variabila mag este chiar numarul magiccerut.
#include <iostream.h>
#include <string.h>
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
Void main()
{char nume[50];
Int c;
Int mag,ant,I,s,nr;
Int cif[255];
//construieste vectorul cif al cifrelor caracteristice aferente literelor alfabetului
//vectorul va avea pozitiile de la 0 la 255,din care se vor folosi cele date de codurile
//caracterelor litera
For (c=A;c<=Z;c++)
If(c==A || c==J|| c==S)
{cif[c]=1;
ant=1;

} else
{cif[c]=ant+1;
ant=cif[c];
}
//afiseaza vectorul cifrelor caracteristice
Cout<<endl;
For(c=A;c<=Z;c++)
Printf(%c%d,c,cif[c]);
cout<<\nDati numele persoanei: ;
gets(nume);
//verifica daca numele este corect (contine numai litere) si transforma literele mici in
litere //mari
Int ok=1;
for(i=0;i<=strlen(nume)-1;i++)
if((nume[i]>=A && nume[i]<=` Z `)|| nume[i]==` `)
;
Else
If (nume[i]>=`a`&& nume[i]<=`z`)
nume[i]- =32;
else
ok=0;
if(!ok)
{cout<<\nNume incorrect!;
Getch();
Exit0;
}
//determina numarul intermediary rezultat prin adunarea cifrelor caracteristice aferente
//literelor din numele persoanei
mag=0;
for(i=0;i<=strlen(nume)-1;i++)
if(nume[i] != )
cout<<\nNumarul intermediar este :<<mag;
//construieste numarul magic facand suma cifrelor numarului intermediar anterior,
//apoi suma cifrelor noului numar obtinut s.a.m.d., pana cand se ajunge la o singura cifra.
While(mag>=10)
{s=0;nr=mag;
Do
{s+=nr%10;
Nr/=10;
}while(nr);
Mag=s;
Cout<<\n<<mag;
}cout<<\nNumarul magic este:<<mag;
Getch() ;
}

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