Atestat2016 1-10
/*1. Care este ultima cifră a lui 2^n, n>=0? n se citește de la tastatură.
Indicație: Calculând 2 la diverse puteri consecutive se observă că ultima cifră se repetă din 4 în 4, excepție
făcând cazul în care n=0.
Exemple: n=3 => 8; n=10 =>4 */
#include <iostream>
using namespace std;
int main()
{
int n;
cout << "n=";cin>>n;
if(n==0) cout<<1;
else
if(n%4==0) cout<<6;
else
if(n%4==3) cout<<8;
else
if(n%4==2) cout<<4;
else cout<<2;
return 0;
}
/*2. Se citește un șir de caractere, introdus de la tastatură. Să se afișeze cate cuvinte conțin 3 caractere.*/
#include <iostream>
#include <string.h>
using namespace std;
int main()
{
char str[101],sir[101];
char *p;
int i,n; char v[50][20];
cin.get(str,100);
n=0;
int nr=0;
p = strtok(str, " ");
while( p != NULL )
{
n++; strcpy(v[n],p);
if(strlen(v[n])==3)nr++;
p = strtok(NULL, " ");
}
cout<<nr;
}
/*3. Se citește o matrice cu m linii și n coloane și un număr x. m, n, x -citite de la tastatură.
Să se afișeze matricea și suma numerelor pare de pe linia x.
*/
#include <iostream>
using namespace std;
int main()
{
int a[100][100],i,j,s=0,x,m,n;
cout << "numarul de linii=";cin>>m;
cout<<"numarul de coloane=";cin>>n;
cout<<"x=";cin>>x;
for(i=1;i<=m;i++)
for(j=1;j<=n;j++)
{
cout<<"a["<<i<<"]["<<j<<"]=";cin>>a[i][j];
if(i==x && a[i][j]%2==0)s=s+a[i][j];
}
cout<<"suma elementelor pare de pe linia "<<x<<"="<<s<<endl;
for(i=1;i<=m;i++)
{
for(j=1;j<=n;j++)
cout<<a[i][j]<<' ';
cout<<endl;
}
return 0;
}
/*4. Se citește un număr n cu max. 9 cifre. Să se verifice dacă toate cifrele numărului n sunt pare și să
se afișeze un mesaj corespunzător. */
#include <iostream>
using namespace std;
int main()
{
long int n;
cout<<"n=";cin>>n;
int c1 = 0, c2 = 0;
while (n > 0)
{
if (n % 2 == 0) c1++;
c2++;
n = n / 10;
}
if (c1 == c2) cout<<"numarul are numai cifre pare";
else cout<<"numarul are cifre pare si impare";
return 0;
}
/*5. Să se afișeze rezultatul ecuației ax^2+bx+c=0, a,b și c se citesc de la tastatură.
Exemple: a=1; b=-2; c=1 =>x1,2=1; a=1; b=1; c=-2 => x1=1, x2=-2
*/
#include <iostream>
#include <math.h>
using namespace std;
int main()
{
int a,b,c;
cout<<"a=";cin>>a;
cout<<"b=";cin>>b;
cout<<"c=";cin>>c;
if (a == 0 && b == 0 && c == 0)
cout<<"infinitate solutii";
else
if (a == b && b == 0)
cout<<"Imposibil";
else
if (a == 0)
cout<<"ecuatie de gr. I sol=" <<(double)(-c / b);
else
{
double d = (double)(b * b - 4 * a * c);
if (d < 0) cout<<"solutii complexe";
else
{
double dd = sqrt(d);
double x1 = (-b + dd) / (2 * a);
double x2 = (-b - dd) / (2 * a);
cout<<"x1="<<x1<<" x2="<<x2;
}
}
return 0;
}
/*6. Să se afișeze cel mai mare divizor propriu al unui număr citit de la tastatură.
Exemple: n=24 => 12 ; n=11 => nu are divizori proprii.*/
#include <iostream>
using namespace std;
int main()
{
int n,i;
cout<<"n=";cin>>n;
i=n/2;
int are_divizori_propri = 0; //nu s-au gasit divizori
while (are_divizori_propri == 0 && i >= 2)
{
if (n % i == 0)
{
cout<<"cel mai mare divizor propriu="<<i;
are_divizori_propri = 1;
}
i--;
}
if (are_divizori_propri == 0)
cout<<"Nu are divizori propri";
return 0;
}
/*7. Să se afișeze media aritmetică a unui șir de numere care se citește de la tastatură până la
introducerea numărului 0 care nu face parte din șir.
Exemplu: 3,2,2,3,1,1,0 =>2 */
#include <iostream>
using namespace std;
int main()
{
int s=0,c=0,n;
while(cin>>n && n!=0)
{
s=s+n;
c++;
}
cout<<(float)s/c;
return 0;
}
/*8. Se citesc de la tastatură n numere. Să se afișeze acele numere care au exact 3 divizori.
Exemplu: n=7; x=(1,25,4,5,8,6,9) =>25,4,9 */
int nr_divizori(int n)
{
int c=0,i;
for(i=1;i<=n;i++)
if(n%i==0)c++;
return c;
}
#include <iostream>
using namespace std;
int main()
{
int n,i,a[100];
cout<<"n=";cin>>n;
cout<<"dati numerele"<<endl;
for(i=1;i<=n;i++)cin>>a[i];
for(i=1;i<=n;i++)
if(nr_divizori(a[i])==3) cout<<a[i]<<' ';
return 0;
}
/*9. Se citeste un vector v cu n elemente numere naturale. Să se afișeze elementele care îndeplinesc
următoarele condiții:
-sunt divizibile cu 3;
-sunt mai mici decât 100.
*/
#include <iostream>
using namespace std;
int main()
{
int i,n,a[100];
cout<<"n=";cin>>n;
cout<<"dati numerele"<<endl;
for(i=1;i<=n;i++)cin>>a[i];
cout<<endl;
for(i=1;i<=n;i++)
if(a[i]%3==0 && a[i]<100) cout<<a[i]<<' ';
return 0;}
/*
10. Se citeşte de la tastatură un şir de caractere, scris cu litere mici ale alfabetului englez.
Se cere:
a) Să se afişeze cu ajutorul unui subprogram șirul în care spațiile se vor înlocui cu caracterul “.”;
b) Considerand că, în șirul dat, orice vocală valorează 2 puncte, orice consoana valoreaza 1 punct,
iar orice spațiu, punct sau virgulă valorează 10 puncte, să se calculeze cu ajutorul unui
subprogram, suma în fucție de valoarea fiecărui caracter.
Obs: Considerăm că șirul dat nu conține diacritice, sau alte semne, cu excepția celor menționate mai sus.
*/
#include <iostream>
#include<string.h>
char s[200];
int n;
using namespace std;
void pct_a()
{
for(int i=0;i<n;i++)
if(s[i]==' ') cout<<'.';
else cout<<s[i];
}
void pct_b()
{
int ss=0;
for(int i=0;i<n;i++)
if(strchr("AEIOUaeiou",s[i])!=0)ss=ss+2;
else
if(s[i]==','||s[i]==' '||s[i]=='.')ss=ss+10;
else ss=ss+1;
cout<<ss<<" puncte";
}
int main()
{
cin.get(s,200);
n=strlen(s);
pct_a();
pct_b();
return 0;
}