Sunteți pe pagina 1din 8

PB3

/*n fisierul numere.in se afla pe prima linie un numar natural n (n<=9),


iar pe a doua linie se afla numere naturale a1, a2, .., an din multimea
cifrelor zecimale ({0,1,2,.., 9}). Se cere sa se calculeze
suma S= a1a2an + ana1a2an-1 + + a2a3ana1, utiliznd un proces iterativ
de calcul al nsumarii, termenul curent de nsumat fiind obtinut prin rotatia
la dreapta aplicata precedentului termen.
*/
# include<iostream>
# include<fstream>
using namespace std;
int n, a[100];
void citire(int &n,int a[100])//referinta la n
{ifstream f("numere.in");
f>>n;
cout<<"numerele citite sunt: "<<endl;
for(int i=1;i<=n;i++) {f>>a[i];
cout<<a[i]<<" ";}}
int termen(int n,int a[100])
{int nr=0,aux;
for(int i=1;i<=n;i++) nr=nr*10+a[i];
aux=a[n];
for(int i=n;i>1;i--) a[i]=a[i-1];
a[1]=aux;
cout<<nr<<" ";
return nr;}
int suma(int n,int a[100])
{int s=0;
cout<<"\n\ntermenii sunt:\n";
for(int i=1;i<=n;i++) {s+=termen(n,a);}
return s;}
int main()
{citire(n,a);
cout<<"\n\nsuma termenilor este "<<suma(n,a);
return 0;
}
PB4
/*n fisierul cuvinte.in se afla cte unul pe linie un sir de cuvinte. Sa se scrie
un program care citeste cuvintele din fisier si le afiseaza n fisierul cuvinte.out
n ordine alfabetica. Pentru ordonarea alfabetica veti utiliza unul din algoritmii
de sortare studiati.*/
# include<iostream>
# include<fstream>
# include<string>
using namespace std;
int n;
string v[100];
ifstream f("cuvinte.in");
ofstream g("cuvinte.out");
void citire(int &n,string v[100])
{n=0;
while(f>>v[++n]) ;

}
void scriere(int n, string v[100])
{for(int i=1;i<=n;i++) g<<v[i]<<endl;}
void ordonare(int n, string v[100])
{int schimb;
string aux;
do
{schimb=0;
for(int i=1;i<n;i++)
if(v[i]>v[i+1]) {aux=v[i];

}
while(schimb);}

v[i]=v[i+1];
v[i+1]=aux;
schimb=1;}

int main()
{citire(n,v);
g<<"cuvintele citite sunt:\n";
scriere(n,v);
ordonare(n,v);
g<<"\ncuvintele ordonate alfabetic sunt:";
scriere(n,v);
f.close();
g.close();
return 0;
}
PB 5
/* Subprogramul sub primeste prin intermediul parametrului n (0<n<20) dimensiunea
unei matrice patrate, prin intermediul parametrului a matricea de numere reale
(aij cu 1<=i<=n, 1<=j<=n) si prin intermediul parametrului k un numar natural nenul
(1<k<=2*n). El returneaza prin intermediul parametrului s suma tuturor elementelor
aij cu proprietatea ca i+j=k. Scrieti programul care citeste de la tastatura un tablou
de numere reale cu n linii si n coloane si afiseaza suma elementelor din tablou aflate
strict deasupra diagonalei secundare a tabloului, folosind apeluri ale subprogramului sub,
definit conform cerintei.*/
# include<iostream>
using namespace std;
int n, a[100][100],k,s=0;
void citire(int &n,int a[100][100])
{cout<<"n=";
cin>>n;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
{cout<<"a["<<i<<"]["<<j<<"]=";
cin>>a[i][j];}
}
void scriere(int n,int a[100][100])
{cout<<"matricea citita este \n";
for(int i=1;i<=n;i++)
{for(int j=1;j<=n;j++) cout<<a[i][j]<<" ";
cout<<endl;}
}
void sub(int n,int a[100][100],int k,int &s)
{

for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
if (i+j==k) s+=a[i][j];
}
int main()
{citire(n,a);
scriere(n,a);
for(int k=1;k<=n;k++) sub(n,a,k,s);//i+j<=n - deasupra secundarei
cout<<"suma elementelor de deasupra diagonalei secundare="<<s;
return 0;
}
PB 6
/*Se citesc de la tastatura doua numere naturale nenule a si b (3<a<b) de cel mult
9 cifre fiecare. Sa se determine, daca exista, un numar prim x care apartine intervalului
nchis [a,b] pentru care valoarea expresiei |b+a-2*x| este minima. S-a folosit notatia
|m| pentru modulul numarului m. Daca nu exista un astfel de numar, se va afisa valoarea
0,
iar daca exista mai multe, se va afisa unul dintre ele.
*/
# include<iostream>
using namespace std;
int a,b;
int prim(int n)
{int i=2;
while(n%i!=0 && i<=sqrt((double) n)) i++;
if (i>sqrt((double) n)) return 1;
else return 0;
}
int main()
{int min=INT_MAX,e,x;
cout<<"a=";cin>>a;
cout<<"b=";cin>>b;
int gasit=0;
cout<<"nr prime din interval sunt:\n";
for(int i=a;i<=b;i++)
if (prim(i)) {cout<<i<<" ";
gasit=1;
e=abs(b+a-2*i);
if (min>e) {min=e;x=i;}

}
if(!gasit) cout<<"nu sunt numere care respecta cerintele";
else
{cout<<"\nnr care verifica conditia este:";
cout<<"x="<<x;}
return 0;
}

PB 7
/* Subprogramul apcar primeste prin intermediul parametrului s un sir cu cel mult 255 de
caractere
si prin parametrul c un caracter. El returneaza prin intermediul parametrului p un numar
natural
reprezentnd numarul de aparitii ale caracterului c n sirul s. Scrieti programul care
citeste
de la tastatura un sir de caractere (litere mari si cifre). Se cere sa se determine numarul
total

de vocale din sirul dat, folosind apeluri ale subprogramului apcar, definit conform
cerintei. */
# include<iostream>
# include<string>
using namespace std;
string sir;
char v[]="AEIOU";
int p,nr_vocale=0;
void apcar(string s, char c, int &p)
{p=0;
for(unsigned int i=0;i<s.length();i++)
if(c==s[i]) p++;
}
int main()
{cout<<"dati sirul:";
cin>>sir;
for(unsigned int i=0;i<strlen(v);i++)
{apcar(sir,v[i],p);
nr_vocale+=p;}
cout<<"nr de vocale este : "<<nr_vocale;
return 0;
}
PB 8
/*Se citesc n (n numar natural, n>1) si apoi n numere reale x1, x2, ..., xn.
Sa se determine cte dintre cele n numere citite se afla n afara intervalului nchis
determinat de numerele x1 si xn.
*/
# include<iostream>
using namespace std;
int main()
{int n,cate_nr=0;
float x[100];
cout<<"n=";
cin>>n;
for(int i=1;i<=n;i++)
{cout<<"x"<<i<<"=";
cin>>x[i];}
for(int i=1;i<=n;i++)
if (x[1]<x[n]) {if (x[i]<x[1] || x[i]>x[n]) cate_nr++;}
else if(x[i]<x[n] || x[i]>x[1]) cate_nr++;
cout<<"numere in afara intervalului [x1,xn] sunt :"<<cate_nr;
return 0;
}
PB 9
/*Din fisierul DATE.TXT se citesc n si m (n, m numere naturale, 0<m<n<5000) de pe
prima linie,
apoi n numere naturale a1, a2, , an de pe linia a doua si apoi m numere naturale b1,
b2, , bm
de pe linia a treia a fisierului. Sa se verifice daca sirul b citit de pe a treia linie a fisierului
se poate obtine din sirul a (aflat pe a doua linie a fisierului) prin eliminarea unora dintre
componentele

sirului a. Sa se scrie programul ce realizeaza prelucrarea descrisa folosind un algoritm


eficient si afiseaza
pe ecran un mesaj corespunzator.
*/
# include<iostream>
# include<fstream>
using namespace std;
int n,m,a[5000],b,nr_gasite=0,apartine;
int main()
{ifstream f("date.txt");
f>>n>>m;
for(int i=1;i<=n;i++) f>>a[i];
for(int j=1;j<=m;j++)
{apartine=0;
f>>b;
for(int i=1;i<=n && !apartine;i++) if(a[i]==b) apartine=1; //verifica pana cand gaseste
if(apartine) nr_gasite++;
}
if(nr_gasite==m) cout<<"b se poate obtine din a";
else cout<<"b nu se poate obtine din a";
return 0;
}
PB 10
/*Scrieti un program care citeste din fisierul text DATE.TXT un sir S de maxim 100.000 de
numere naturale
formate din exact doua cifre fiecare si afiseaza distanta maxima care exista ntre doua
elemente egale ale sirului.
Definim distanta dintre doua elemente Si si Sj prin modulul diferentei indicilor celor doua
elemente, |j-i|.
Daca sirul contine doar elemente distincte, distanta ceruta este 0. */
# include<iostream>
# include<fstream>
using namespace std;
int n, s[100000];
int main()
{ifstream f("date.txt");
int max=INT_MIN;
n=1;
while(f>>s[n]) n++;
n--;
for(int i=1;i<=n;i++) cout<<s[i]<<" ";
for(int i=1;i<=n;i++)
for(int j=i;j<=n;j++)
if(s[i]==s[j] && abs(i-j)>max) max=abs(i-j);
cout<<"\ndistanta maxima="<<max;
return 0;
}
PB 11
/*a. Scrieti o definitie completa pentru un subprogram suma cu trei parametri:
x, matrice patratica cu elemente ntregi;
n, numar natural ce reprezinta numarul efectiv de linii si coloane ale matricei x,
2<=n<=10;
p, numar natural, 1<=p<=n.
Subprogramul va returna suma elementelor aflate pe linia p a matricei.

b. Scrieti un program care citeste din fisierul matrice.in un numar natural n si o matrice
cu n linii si
n coloane si afiseaza n fisierul matrice.out indicii liniilor din matrice pentru care suma
elementelor
este numar par. Se va folosi subprogramul definit la punctul a.*/
# include<iostream>
# include<fstream>
using namespace std;
int x[10][10],n;
ifstream f("matrice.in");
ofstream g("matrice.out");
int suma(int x[10][10], int n, int p)
{int s=0;
for(int j=1;j<=n;j++) s+=x[p][j];
return s;
}
void citire(int x[10][10], int &n)
{f>>n;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++) f>>x[i][j];
}
int main()
{ citire(x,n);
for(int i=1;i<=n;i++)
if (suma(x,n,i)%2==0) g<<i<<" ";
f.close();
g.close();
return 0;
}
PB 12
/*Pe prima linie a fisierului date.in se gaseste un numar natural n, n<=100,
iar a doua linie contine un sir cu n numere naturale, separate prin cate un spatiu.
Sa se scrie n fisierul date.out toate numerele prime din sir, separate prin cate un spatiu.
Se va folosi o functie prim care verifica daca un numar natural, dat ca parametru de
intrare,
este numar prim.*/
# include<iostream>
# include<fstream>
# include<cmath>
using namespace std;
int n,v[100];
int prim(int nr)
{int i=2;
while(nr%i!=0 && i*i<=nr) i++;//i<radicalul lui nr
if(i*i>nr) return 1;
else return 0;
}
int main()
{ifstream f("date.in");
ofstream g("date.out");
f>>n;
for(int i=1;i<=n;i++)
{f>>v[i];
if (prim(v[i])) g<<v[i]<<" ";}
f.close();

g.close();
return 0;
}
PB 13
/*Se citeste de la tastatura un numar natural n, 2<=n<=10. Sa se construiasca o matrice
cu n linii si n coloane care sa contina pe fiecare linie cate o permutare a multimii
{1,2,,n},
astfel nct pe linii diferite sa avem permutari diferite. Matricea se va afisa pe ecran ca
matrice.*/
# include<iostream>
using namespace std;
void permutare(int v[100],int n)
{int aux;
aux=v[1];
for(int i=1;i<n;i++) v[i]=v[i+1];
v[n]=aux;}
int main()
{int n,a[100][100],v[100];//vectorul in care fac permutarile
cout<<"n=";
cin>>n;
for(int i=1;i<=n;i++) v[i]=i;
for(int k=1;k<=n;k++)
for(int i=1;i<=n;i++)
{for(int j=1;j<=n;j++) a[i][j]=v[j];
permutare(v,n);}
for(int i=1;i<=n;i++)
{for(int j=1;j<=n;j++) cout<<a[i][j]<<" ";
cout<<endl;}
return 0;
}
PB 14
/* Pe prima linie a fisierului date.in se gaseste un numar natural n, n<=100,
iar a doua linie contine un sir cu n numere naturale, separate prin cate un spatiu.
Sa se scrie n fisierul date.out toate numerele din sir care sunt termeni din sirul lui
Fibonacci.
Se va folosi o functie test_fibo care verifica daca un numar natural, dat ca parametru de
intrare,
este termen n sirul lui Fibonacci (f1=1, f2=1, fn=fn-1+fn-2, pentru n>2).*/
# include<iostream>
# include<fstream>
using namespace std;
int n,v[100];
int test_fibo(int nr)
{int fibo1=1,fibo2=1,fibo,ok=0;
if (nr==1) ok=1;
while(nr>fibo2)
{fibo=fibo1+fibo2;
if(nr==fibo)ok=1;
fibo1=fibo2;
fibo2=fibo;}
if(ok)return 1;
else return 0;
}
int main()
{ifstream f("date.in");
ofstream g("date.out");
f>>n;

for(int i=1;i<=n;i++)
{f>>v[i];
if (test_fibo(v[i])) g<<v[i]<<" ";}
f.close();
g.close();
return 0;
}
PB 15
/*Se citesc din fisierul numere.in doua numere naturale a si b cu cel mult 9 cifre fiecare.
Se cere sa se scrie n fisierul numere.out cel mai mare numar natural care se poate
forma cu
toate cifrele celor doua numere.*/
# include<iostream>
# include<fstream>
using namespace std;
int a,b,v[20],n,nr=0;//v-vectorul care va retine cifrele lui a si b
void cifre(int a,int b, int v[20],int &n)
{int i=0;
while(a)
{v[++i]=a%10;
a/=10;}
while(b)
{v[++i]=b%10;
b/=10;
}
n=i;
}
void ordonare(int v[20])
{int aux,schimb;
do
{schimb=0;
for(int i=1;i<n;i++)
if(v[i]<v[i+1]) {aux=v[i];

}
while(schimb);
}

v[i]=v[i+1];
v[i+1]=aux;
schimb=1;}

void construire_numar(int v[20],int &nr)


{for(int i=1;i<=n;i++) nr=nr*10+v[i];
}
int main()
{ifstream f("numere.in");
ofstream g("numere.out");
f>>a>>b;
cifre(a,b,v,n);//separa cifrele din a si b si le aseaza in v
ordonare(v);//sorteaza descrescator
construire_numar(v,nr);//construieste nr din v
g<<nr;
f.close();
g.close();
return 0;
}

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