Documente Academic
Documente Profesional
Documente Cultură
Fisa de Lucru Functii
Fisa de Lucru Functii
Funcții
Subiectul nr. 1:
#include<iostream>
#include <fstream>
using namespace std;
ifstream f("suma.in");
int cifre_pare(int x)
{
int s=0,ok=0;
while(x!=0)
{
if(x%10%2==0)
{
ok=1;
s=s+x%10;
}
x=x/10;
}
if(ok==0)
return -1;
else
return s;
}
int main ()
{
int n,v[100],i,smax=-1,nrmax;
f>>n;
for(i=1;i<=n;i++)
f>>v[i];
for(i=1;i<=n;i++)
{
if(cifre_pare(v[i])>smax)
{
smax=cifre_pare(v[i]);
nrmax=v[i];
}
}
if(smax==-1)
cout<<"doar cifre impare";
else
cout<<smax<<' '<<nrmax;
return 0;
}
Subiectul nr. 2:
Subiectul nr. 3:
a. Subprogramul gaseste_cifra are doi parametri:
x, prin care primeşte un număr natural din intervalul [0,109];
c, prin care primește o cifră.
int main()
{
int x, j, ok=0, s;
cin >> x;
ofstream g("control.out");
for (int i=0; i<=9 && ok==0; i++) {
if (gaseste_cifra(x,i)>=1)
{
g << gaseste_cifra(x,i);
j=i;
ok=1;
}
}
for (int i=j+1; i<=9; i++) {
g << gaseste_cifra(x,i);
}
g << endl;
do {
s=0;
for (int i=0; i<=9; i++) {
s=s+(gaseste_cifra(x,i)*i);
}
x=s;
}
while (s>10);
g << s;
return 0;
}
Subiectul nr. 4:
}
int main ( )
{
int n,i,j,m[101][101],nr=0;
f>>n;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
f>>m[i][j];
nr=n-nrpare_p(n,m)+n-nrpare_s(n,m);
if(nr==0)
cout<<"nu exista";
else
cout<<nr;
Subiectul nr. 5:
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
int n, a[40][40],i, j, ctr;
ofstream g("mat.out");
cin >> n;
for (i=0; i<n; i++) {
if (i%2==0) {
ctr=0;
for (j=0; j<n; j++) {
a[i][j]=ctr;
ctr=(ctr+1)%3;
}
}
else {
ctr=0;
for (j=n-1; j>=0; j--) {
a[i][j]=ctr;
ctr=(ctr+1)%3;
}
}
}
for (i=0; i<n; i++) {
for (j=0; j<n; j++) {
g << a[i][j] << " ";
}
g << endl;
}
g.close();
return 0;
}
Subiectul nr. 6:
a. Subprogramul nr_prim are un singur parametru n prin care primește un număr natural
cu cel mult patru cifre și returnează 1 dacă n este prim sau 0 altfel.
Subprogramul cmmdc are doi parametri prin care primește câte un număr natural nenul cu
cel mult patru cifre. Subprogramul returnează cel mai mare divizor comun al celor două
numere.
Scrieţi la calculator definiţiile complete ale celor două subprograme.
b. Fișierul numere.in conține pe prima linie cel puțin două și cel mult 106 numere naturale
din intervalul [1,104], separate prin câte un spațiu. Se cere scrierea și executarea la
calculator a unui program care să afișeze pe ecran numărul perechilor de numere citite
consecutiv din fișier care nu sunt numere prime, dar sunt numere prime între ele.
Exemplu: dacă fișierul numere.in conține numerele:
35 45 22 11 8 35 256 1000
atunci se afișează 3
Explicație: Se numără perechile (45, 22), (8, 35), (35, 256)
#include <iostream>
#include<fstream>
using namespace std;
int cmmdc(int a, int b)
{
while(a>b)
a=a-b;
return a;
}
int prim(int m)
{
int nr=0,k;
for(k=1;k<=m;k++)
if(m%k==0)
nr++;
if(nr==2)
return 1;
else
return 0;
}
void program(int&n,int v[100])
{
int nr=0;
for(int i=1;i<n;i++)
if((cmmdc(v[i],v[i+1])==1) && (prim(v[i])==0) && (prim(v[i+1])==0))
nr++;
cout<<nr;
}
int main()
{
ifstream f("date.in");
int n,v[100],i;
f>>n;
for(i=1;i<=n;i++)
f>>v[i];
program(n,v);
return 0;
}
Subiectul nr. 7:
a. Oglinditul unui număr este numărul scris cu cifrele primului număr, în ordine inversă.
Subprogramul oglinda primește ca parametru un număr natural x din intervalul [1, 106] și
returnează oglinditul acestuia. Scrieţi la calculator definiția completă a subprogramului.
Exemplu: pentru x=12401, subprogramul returnează numărul 10421.
b. Se citesc de la tastatură două numere naturale a și b din intervalul [1, 106]. Un număr este
palindrom dacă este egal cu oglinditul său. Se cere scrierea și executarea la calculator a
unui program care scrie în fișierul palindrom.out, separate prin câte un spațiu, în ordine
crescătoare, toate numerele din intervalul [a, b] care sunt palindromuri. Apoi, programul
citește de la tastatură un număr natural k din intervalul [1,107] și scrie, pe următorul rând al
fișierului palindrom.out, palindromul asociat lui k. Palindromul asociat unui număr este
cel mai mic palindrom mai mare decât numărul inițial. Dacă numărul k este palindrom, se
va scrie mesajul palindrom.
Pentru determinarea valorilor cerute, programul va folosi apeluri utile ale subprogramului
oglinda.
Exemplu:
pentru a=11 și b=130, fișierul palindrom.out va conține pe primul rând numerele 11
22 33 44 55 66 77 88 99 101 111 121
pentru k=39995, fișierul palindrom.out va conține pe al doilea rând numărul 40004
#include<iostream>
#include <fstream>
using namespace std;
ofstream g("palindrom.out");
int oglinda(int x)
{
int inv=0;
while(x!=0)
{
inv=inv*10+x%10;
x=x/10;
}
return inv;
}
int main ()
{
int a,b,i,k,ok=0;
cin>>a>>b>>k;
for(i=a;i<=b;i++)
if(oglinda(i)==i)
g<<i<<' ';
while(ok==0)
{
if(oglinda(k)==k)
ok=1;
else
k++;
}
g<<endl<<k;
g.close();
return 0;
}
Subiectul nr. 8:
Din fișierul sir.in se citesc un număr natural nenul n (n<1000) și un șir de n numere
întregi cu cel mult 5 cifre fiecare.
Se cere scrierea și executarea la calculator a unui program care scrie în fișierul sir.out,
separate prin câte un spațiu, în ordine crescătoare, toate numerele naturale de 2 cifre care
nu apar în fișierul sir.in. În cazul în care nu există astfel de numere, în fișier se va scrie
mesajul nu exista.
Exemplu:
Fișierul sir.in conține În fișierul sir.out se va scrie
30 10 12 14 15 16 17 18 20 23 24 25 26 28 29 30 31 32 33
3 84 2 6 21 44 21 55 4 -7 34 36 38 39 40 41 43 45 46 47 48 49 50 51 52 53 54 56
55 37 74 68 85 5 42 67 58 59 60 61 62 64 65 66 69 70 71 72 73 75 76 77 78 79
13 19 27 11 99 87 57 1 80 81 82 83 86 88 89 90 91 92 93 95 96 97 98
94 63 35 22
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
int fr[100], n, x;
for (int i=10; i<=99; i++) {
fr[i]=0;
}
ifstream f("sir.in");
ofstream g("sir.out");
f>>n;
while (n>0) {
f>>x;
if (x>=10 && x<=99) fr[x]++;
n--;
}
for (int i=10; i<=99; i++) {
if(fr[i]==0) g<< i<< " ";
}
f.close();
g.close();
return 0;
}
Subiectul nr. 9:
a. Un număr perfect este un număr natural egal cu dublul sumei divizorilor săi.
Exemplu: 6 este număr perfect pentru că 2∙6=1+2+3+6.
Subprogramul perfect primește prin parametrul x un număr natural din intervalul [1,106]
și returnează 1, dacă numărul este perfect și 0, altfel. Scrieţi la calculator definiția
completă a subprogramului.
Exemplu: pentru x=6 subprogramul returnează 1, iar pentru x=5 subprogramul returnează
0.
b. Fișierul perfect.in conține pe primul rând un șir de numere naturale din intervalul [1,106],
separate prin câte un spațiu. Se cere scrierea și executarea la calculator a unui program care
citește șirul de numere din fișier, apoi afișează pe ecran cel mai mare număr perfect din
șirul citit și prima poziție a acestuia în șir, pe același rând, separate prin câte un spațiu.
Programul va folosi apeluri utile ale subprogramului perfect. Dacă în fișier nu există
niciun număr perfect, atunci pe ecran se afișează mesajul imposibil.
Exemplu: dacă fișierul perfect.in conține numerele 2048 6 79 496 1379 28 se va afișa
496 4
#include <iostream>
#include <fstream>
using namespace std;
ifstream f ("divizori.in");
int nr_div (int a)
{
int nr=0, d;
for (d=2; d<=a/2; d++)
if (a%d==0)
nr++;
return nr;
}
int main()
{
int x, y, max=0, c;
while (f>>x)
{
y=nr_div(x);
if (y>=max)
{
max=y;
c=x;
}
}
cout<<c;
f.close();
return 0;
}
Fișierul numere.in conține cel puțin două și cel mult 104 numere întregi cu cel mult 5 cifre
fiecare.
Se cere scrierea și executarea la calculator a unui program care citește valorile din fișier și
scrie în fișierul numere.out, cele mai mari două numere din șir și de câte ori apar acestea,
astfel: pe prima linie din fișier cel mai mare număr urmat de numărul său de apariții iar pe
a doua linie celălalt număr urmat de numărul său de apariții. Valorile de pe aceeași linie se
scriu separate prin câte un spațiu. Dacă în fișierul numere.in nu există cel puțin două
numere distincte, în fișierul numere.out se scrie mesajul numere identice.
Exemplu:
Fișierul numere.in conține În fișierul numere.out se va afișa
3 4 9 -2 -7 7 9 9 4 1 93
71
#include <iostream>
#include <fstream>
using namespace std;
int main() {
int x, max1 = -999, max2 = -999, cn1 = 0, cn2 = 0;
ifstream f("grade.in");
ofstream g("grade.out");
while (f >> x){
if (x > max1) {
if (max1 > max2) {
max2 = max1;
cn2 = cn1;
}
max1 = x;
cn1 = 1;
} else if (x == max1) {
cn1 ++;
}
else {
if (x > max2) {
max2 = x;
cn2 = 1;
} else if (x == max2) {
cn2 ++;
}
}
if (cn2!=0) {
g<< max1 << " " <<cn1 << endl << max2 << " " << cn2;
}
else g<< "numere identice";
f.close();
g.close();
return 0;
}
Subiectul nr. 13:
a. Scrieţi la calculator definiţia completă a subprogramului nr_div care primește prin
parametrul a un număr natural nenul cu cel mult patru cifre și returnează numărul tuturor
divizorilor lui a.
a. Scrieți și executați la calculator un program care citește de la tastatură un șir de numere
naturale nenule care se termină cu numărul 1. Șirul are cel puțin unul și cel mult 102 termeni cu
cel mult patru cifre fiecare. Programul verifică, apelând subprogramul nr_div, dacă numerele
citite sunt pătrate perfecte ale unui număr prim. Rădăcinile pătrate ale acestor numere se scriu
în fișierul patrate.out, separate prin câte un spațiu, în ordinea din șir. Dacă niciun număr citit
nu este pătratul unui număr prim, atunci în fișier se scrie mesajul nu exista.
Exemplu: dacă se citesc numerele 13 56 169 196 7 121 100 49 1
atunci fișierul patrate.out conține numerele:
13 11 7
Explicație: un număr care este pătratul unui număr prim are 3 divizori.
#include <iostream>
#include <fstream>
#include <math.h>
using namespace std;
int nr_div(int a) {
int nr=2;
for (int i=2; i<=a/2; i++) {
if (a%i==0) nr++;
}
return nr;
}
int main()
{
int x, ok=0;
ofstream g("grade.out");
do {
cin >> x;
if (nr_div(x)==3) {
g<<sqrt(x)<< " ";
ok=1;
}
} while (x!=1);
if (ok==0) g << "nu exista";
return 0;
}
Subiectul nr. 14:
#include <iostream>
#include <fstream>
using namespace std;
void tablou(int &n, int v[101]){
cin >> n;
for (int i=1; i<=n; i++) cin >> v[i];
}
int main()
{
int a[101], b[101], na, nb, ok=0;
ofstream g("grade.out");
tablou(na, a);
tablou(nb, b);
for (int i=nb; i>=1; i--) {
for (int j=1; j<=na; j++) {
if(b[i]==a[j]) {
ok++;
g << b[i] << " ";
}
}
}
if (ok==0) g << "nu exista";
g.close();
return 0;
}
}
int main()
{
int n, c=0, nr=0, max=0;
ifstream f("grade.in");
ofstream g("grade.out");
while (f>>n) {
if(prim(n)==1) {
c++;
}
else {
if (c==max) {
nr++;
}
else if (max<c) {
nr=1;
max=c;
}
c=0;
}
}
if (nr>1) {g<<nr;}
if (nr==1) {g<<max;}
f.close();
g.close();
return 0;
}
}
cout << endl;
}
f.close();
return 0;
}