Subprogramul
cif, cu doi parametri, primeşte prin intermediul parametrului a un număr natural cu cel mult 8 cifre şi prin intermediul parametrului b o cifră; subprogramul returnează numărul
de apariţii ale cifrei b în
scrierea numărului a.
Exemplu:
pentru a=125854 şi b=5, subprogramul va returna valoarea 2.
a) Scrieţi
definiţia completă a subprogramului cif.
b) Scrieţi
un program C/C++ care
citeşte de la tastatură un număr natural n cu exact 8 cifre, fiecare cifră fiind nenulă, şi
care determină şi afişează pe ecran, folosind apeluri utile ale subprogramului cif, cel mai mic număr palindrom ce poate
fi obţinut prin rearanjarea tuturor cifrelor numărului n. Dacă nu se poate obţine un palindrom
din toate cifrele numărului
n, programul va afişa pe ecran numărul 0. Un număr natural este palindrom dacă
este egal cu numărul obţinut prin scrierea cifrelor sale în ordine inversă.
Exemplu:
dacă n=21523531 atunci
se va afişa pe ecran numărul 12355321, iar
dacă n=12272351 atunci
se va afişa pe ecran numărul 0.
#include<iostream>
using namespace std;
int cif(int a, int b)
{int i=0;
while(a)
{if(a%10==b)
i++;
a=a/10;}
return i;
}
int main()
{int nn=0,k,n,i,f[100],j;
cin>>n;
for(i=1;i<=9;i++)
f[i]=cif(n,i);
for(i=1;i<=9;i++)
if(f[i]%2==1)
{cout<<"NU";return 0;}
for(i=1;i<10;i++)
for(j=1;j<=f[i]/2;j++)
cout<<i;
for(i=9;i>0;i--)
for(j=1;j<=f[i]/2;j++)
cout<<i;
}
Scrieţi un program C/C++
care citeşte de la
tastatură două caractere c1 şi c2 (litere distincte ale alfabetului
englez), şi un text având cel mult 250 caractere (doar spaţii şi litere ale
alfabetului englez), pe care îl modifică înlocuind toate apariţiile
caracterului memorat în c1 cu cel memorat în c2 şi toate apariţiile caracterului
memorat în c2 cu cel memorat în c1. Programul afişează pe linii
separate ale ecranului atât textul iniţial cât şi textul obţinut după
efectuarea
înlocuirilor. Exemplu: dacă pentru c1 se citeşte a, pentru c2 se citeşte o iar textul
citit este:
hocus
pocus preparatus
se va afişa :
hocus
pocus preparatus
hacus
pacus preporotus
#include<iostream>
using namespace std;
int main()
{char i,a[100],c1,c2;
cin.get(a,100);
cin>>c1>>c2;
cout<<a<<endl;
for(i=0;i<strlen(a);i++)
if(a[i]==c1)
a[i]=c2;
else
if(a[i]==c2)
a[i]=c1;
cout<<a;
}
Subprogramul numar cu 4 parametri (n,c1,c2,&x) returneaza prin x numarul obtinut prin eliminarea din n a cifrelor cuprinse in intervalul [c1,c2].
#include<iostream>
using namespace std;
void numar(int n, int c1, int c2, int &x)
{int r,p=1;
x=0;
while(n)
{if(n%10<c1 || n%10>c2)
{x=n%10*p+x;p=p*10;}
n=n/10;
}
}
int main()
{int n,c1,c2,x;
cin>>n>>c1>>c2;
numar(n,c1,c2,x);
cout<<x;
}
Min/max
#include<iostream>
using namespace std;
void f(int a, int b, int c, int &min, int &max)
{max=min=a;
if(b>max)max=b;
if(c>max)max=c;
if(b<min)min=b;
if(c<min)min=c;
}
int main()
{int a,b,c,min,max;
cin>>a>>b>>c;
f(a,b,c,min,max);
cout<<min<<" "<<max;
}
reduce(a,b) returneaza suma cifrelor lui a care nu divid numarul b
#include<iostream>
using namespace std;
int reduce(int a, int b)
{int s=0;
while(a)
{if (b%(a%10)!=0)
s=s+a%10;
a=a/10;
}
return s;
}
int main()
{int a,b;
cin>>a>>b;
cout<<reduce(a,b);
}
suma(n,v[]) returneaza suma el. lui v care au prima cifra egala cu ultima
#include<iostream>
using namespace std;
int suma(int n, int v[])
{int i,s=0;
for(i=0;i<n;i++)
if(v[i]%10==v[i]/100)
s=s+v[i];
return s;
}
int main()
{int n,v[100],i;
cin>>n;
for(i=0;i<n;i++)
cin>>v[i];
cout<<suma(n,v);
}
Se dau două numere reale cu două cifre la partea întreagă şi două la partea fracţionară. Să se scrie o funcţie care returnează maximul dintre următoarele 4 numere: cele două numere şi alte două numere obţinute prin interschimbarea părţii întregi cu partea fracţionară.
#include<iostream>
using namespace std;
void max(float a, float b, float &c)
{float aa=0.0,bb=0.0,p,d;
p=(int)a;
aa=(a-p)*100+p/100;
d=(int)b;
bb=(b-d)*100+d/100;
c=a;
if(b>c)c=b;
if(aa>c)c=aa;
if(bb>c)c=bb;
}
int main()
{float a,b,c,p;
cin>>a>>b;
max(a,b,c);
cout<<c;
}