Sunteți pe pagina 1din 34

Citirea n numere din fisier

#include <iostream>

#include <fstream>

using namespace std;

ifstream fin("date.in");

int main()

int n, x, s=0, i;

fin >> n;

for(i=1; i<=n; i++)

fin>>x;

s=s+x;

cout<<s;

return 0;

Citirea mai multor numere din fisier fara a fi precizat numarul

#include <iostream>

#include <fstream>

using namespace std;

ifstream fin("date.in");

int main()

int n, x, s=0, i;

fin >> n;

for(i=1; i<=n; i++)


{

fin>>x;

s=s+x;

cout<<s;

return 0;

#include <iostream>

#include <fstream>

using namespace std;

ifstream fin("date.in");

int main()

int n, x, s=0, i=0, v[100], j;

while(fin>>x)

{i++;

v[i]=x;

s=s+x;

cout<<"S-a citit numarul x:"<<x<<endl;

cout<<s<<endl;

cout<<"Valoarea lui i="<<i<<endl;

cout<<"Elementele vectorului sunt"<<endl;

for(j=1; j<=i; j++)

cout<<v[j]<<',';

return 0;

}
#include <iostream>

#include <fstream>

using namespace std;

ifstream fin("date.in");

int main()

int n, x, s=0, i=0, v[100], j;

while(fin>>x)

{i++;

v[i]=x;

s=s+x;

cout<<"S-a citit numarul x:"<<x<<endl;

cout<<s<<endl;

cout<<"Valoarea lui i="<<i<<endl;

cout<<"Elementele vectorului sunt"<<endl;

for(j=1; j<=i; j++)

cout<<v[j]<<','<<endl;

// Verificam daca toate elementele din vector sunt pozitive.

n=i;

bool OK = true; // Presupunem ca toate sunt pozitive.

for(int i = 1 ; i <= n && OK ; i ++)

if(v[i]<=0)

cout<<"S-a oprit la elementul de pe pozitia"<<i<<endl;

OK = false;}

if(OK==true)

cout<<"Toate sunt pozitive"<<endl;

else cout<<"Nu sunt toate pozitive"<<endl;

// Verificam daca exista un numar par.

OK = false; // Presupunem ca nu exista un numar par.


for(int i = 1 ; i <= n && !OK ; i ++)

if(v[i]%2==0)

cout<<"S-a oprit la elementul de pe pozitia"<<i<<endl;

OK = true;}

if(OK==true)

cout<<"Exista un numar par";

else cout<<"Nu exista numere pare";

return 0;

Folosirea vectorului caracteristic pt a afla de cate ori apare fiecare nr de 2 cifre in fisier
OBS-putem folosi vectorul caracteristic pt nr de o cf, doua, trei, patru

#include <iostream>

#include <fstream>

using namespace std;

ifstream fin("date.in");

int main()

int n, x, i=0, j, v[100]={0}; // v[10] va arata de cate ori a aparut nr 10

while(fin>>x)

v[x]++;

cout<<"S-a citit numarul x:"<<x<<endl;

cout<<"Numere citite in ordine crescatoare sunt:"<<endl;

for(i=10; i<=99; i++)

if(v[i]>0)

cout<<"numarul "<<i<<" a aparut de "<<v[i]<<" ori"<<endl;

// afiseaza 12 12 12 12 12 12 etc.
for(i=10; i<=99; i++)

if(v[i]>0)

//afisam numarul i de v[i] ori - ex: afisam 12 de 6 ori

for(j=1; j<=v[i]; j++)

cout<<i<<',';

return 0;

#include <iostream>

#include <fstream>

using namespace std;

ifstream fin("date.in");

int main()

int n, x, i=0, j, v[100]={0}; // v[10] va arata de cate ori a aparut nr 10

while(fin>>x)

v[x]++;

cout<<"S-a citit numarul x:"<<x<<endl;

cout<<"Numere citite in ordine crescatoare sunt:"<<endl;

for(i=10; i<=99; i++)

if(v[i]>0)

cout<<"numarul "<<i<<" a aparut de "<<v[i]<<" ori"<<endl;

// numerele distincte sunt

for(i=10; i<=99; i++)

if(v[i]>0)

{
cout<<i<<',';

return 0;

Explicam eficienta algoritmului


1. eficienta ca timp de rulare (nr de repetari a unor operatii)
2. eficienta ca spatiu de memorie

1. Pt citirea din fisier se efectueaza maxim 1.000.000 citiri (n).


Se parcurge vectorul caracteristic +100 operatii.
Complexitatea algoritmului este una liniara O(n).
2. Am utilizat doar un vector cu 100 de elemente.

#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("date.in");
//scriem o functie care returneaza minimul din matricea v

int f(int v[100][100], int n, int m) // linia de antet a functiei


// v, n, m se numesc parametrii formali
{
int min=v[1][1], i, j;
// min, i, j se numesc variabile locale functiei, deci sunt recunoscute doar in functie
for(i=1; i<=n; i++)
for(j=1; j<=m; j++)
if(v[i][j]<min)
min=v[i][j];
return min;
}

int main()
{
int n, m, v[100][100], i, j, l, k ;
fin>>n;
fin>>m;
for(i=1; i<=n; i++)
for(j=1; j<=m; j++)
fin>>v[i][j];
for(i=1; i<=n; i++)
{ for(j=1; j<=m; j++)
cout<<v[i][j]<<' ';
cout<<endl;}
cout<<"minimul din matrice="<<f(v, n, m)<<endl;
// s-a apelat functia f care calculeaza minimul si il returneaza

// afisam linia l din matrice


// v[l][1] v[l][2] ... v[l][j] ... v[l][m]
cin>>l;
for(j=1; j<=m; j++)
cout<<v[l][j]<<' '<<endl;
// afisam coloana k din matrice
cin>>k;
for(i=1; i<=n; i++)
cout<<v[i][k]<<endl;
return 0;
}

TEMA- de adaugat 1. Transforma in functie afisarea liniei l si a coloanei k


Void afisarelinie (int v[100][100], int n, int m, int l)
{int j;
for(j=1; j<=m; j++)
cout<<v[l][j]<<' '<<endl;
}
// daca functia este void, nu mai punem return
- Cum apelam functia in main
cin>>l;
afisarelinie(v, n, m, l);

#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("date.in");

void afisarelinie (int v[100][100], int n, int m, int l)


{
int j;
for(j=1; j<=m; j++)
cout<<v[l][j]<<' ';
}

void afisarecoloana (int v[100][100], int n, int m, int k)


{
int i;
for(i=1; i<=n; i++)
cout<<v[i][k]<<endl;
}

int main()
{
int n, m, v[100][100], i, j, l, k ;
fin>>n;
fin>>m;
for(i=1; i<=n; i++)
for(j=1; j<=m; j++)
fin>>v[i][j];
for(i=1; i<=n; i++)
{
for(j=1; j<=m; j++)
cout<<v[i][j]<<' ';
cout<<endl;
}
cin>>l;
afisarelinie(v, n, m, l);
cin>>k;
afisarecoloana(v, n, m, k);
return 0;
}
#include <iostream>
#include <fstream>
using namespace std;

int sumacifre(int n)//n parametru formal


{ int c,s=0;// variabile locale fuctiei , pot fi utilizate doar in interiorul functiei
while (n)
{ c=n%10;
s=s+c;
n/=10;
}
return s;
}

//scrieti o functie care returneaza prin intermediul a doi parametrii formali suma cifrelor
pare ale lui n si produsul cifrelor impare

void sumacifrepare(int n, int &sp, int &pi) // sp si pi sunt parametrii transmisi prin referinta
// valorile lor se transmit modificate in afara functiei
{ int c;
sp=0;
pi=1;
while (n)
{ c=n%10;
if(c%2==0)
sp=sp+c;
else pi=pi*c;
n/=10;
}
}
int main()
{
int a, b, sp, pi;
cin>>a>>b;
sumacifrepare(a, sp, pi);
cout<<"sp="<<sp<<endl;
cout<<"pi="<<pi<<endl;
cout<<"sumacifre(a)="<<sumacifre(a)<<endl; // a se numeste parametru actual transmis
prin valoare
cout<<"valoarea lui a dupa apelul functiei este neschimbata"<<a<<endl;
cout<<"sumacifre(123)="<<sumacifre(123)<<endl;
cout<<"sumacifre(b)="<<sumacifre(b);
return 0;
}

#include <iostream>
#include <fstream>
using namespace std;

// scrieti o functie care returneaza numarul de divizori ai lui n


// pt n=40 1 2 4 5 8 10 20 40, returneaza 7
int div1 (int n)
{
int nr=0, i;
for(i=1; i<=n; i++)
if(n%i==0)
nr++;
return nr;
}

//scrieti o functie care afiseaza divizorii proprii ai lui n


// n=40 2 4 5 8 10 20
void div2 (int n)
{
int i;
for(i=2; i<=n/2; i++)
if(n%i==0)
cout<<i<<' ';
}

// scrieti o functie care returneaza cel mai mare divizor impar al lui n

int div3 (int n)


{
int i;
for(i=n; i>=1; i--)
if(n%i==0 && i%2==1)
return i;
}

int main()
{
int n;
cin>>n;
cout<<"div1="<<div1(n)<<endl;
div2(n);
cout<<"div3="<<div3(n);
return 0;
}

#include <iostream>
#include <fstream>
using namespace std;

int p(int n)
{ int d;
if(n<2)
return 0;
for(d=2;d*d<=n;d++)
if(n%d==0)
return 0;
return 1; // returneaza 1 daca numarul este prim si 0 daca nu este prim
}

int main()
{
cout<<p(4);
return 0;
}
#include <iostream>

#include <fstream>

using namespace std;

/* 1) initializam vectorul v[10 cu 0. Int v[10]={0};// v[i] numarul de aparitii in n a cifrei i

2) extragem pe rand cate o cifra din n in variabila c. v[c]++;

3) parcurgem cu for I, vectorul v de la pozitia 9 la pozitia 0 si afisam cifra i de v[i] ori.

*/

int main()

int v[10]={0}, i, n, c, j;

cin>>n;

// n=17353

while(n!=0)

c=n%10;

v[c]++;

n=n/10;

for(i=9; i>=0; i--)

//afisam cifra i de cate ori a aparut ea in nr, informatia se afla in v[i]

for(j=1; j<=v[i]; j++)

cout<<i;

return 0;

void cifminmax (long n, int &cfmax, int &cfmin)


{
int c;
cfmax=0;
cfmin=10;
while(n!=0)
{
c=n%10;
if(c>cfmax)
cfmax=c;
if(c<cfmin)
cfmin=c;
n=n/10;
}
if(cfmin==10)
cfmin=0;
}

Să se scrie o funcție C++ care, pentru doi parametri, a și b, afișează pe ecran, separate
prin câte un spațiu, în ordine descrescătoare, toate numerele perfecte din
intervalul [a,b]. Dacă în interval nu există astfel de numere, subprogramul afișează pe
ecran mesajul nu exista.

void perfect (int a, int b)


{
int i, ok=0;
for(i=b; i>=a; i--)
// verific daca i este perfect
// calculez suma divizorilor lui i care sunt mai mici decat i
{
int s=0, j;
for(j=1; j<=i/2; j++)
if(i%j==0)
s=s+j;
if(i==s)
{
ok=1;
cout<<i<<' ';
}

}
if(ok==0)
cout<<"nu exista";
}

T- 17, 30, 114

17. Să se scrie o funcție C++ care să determine suma divizorilor unui număr natural
transmis ca parametru. Funcția întoarce rezultatul prin intermediul unui parametru de
ieşire.

void sum_div(int n, int &s)


{ int d;
s=0;
for(d=1; d*d<=n; d++)
{ if(n%d==0)
s+=d+(n/d);
if(d*d==n)
s-=d;
}
}
30. Scrieți definiția completă a funcției C++ sub care primește doi parametri n și k și
determină afișarea pe ecran, în ordine descrescătoare, a primelor n numere naturale
nenule divizibile cu k.

void sub(int n, int k)


{
int i;
for (i=n*k; i>=k; i-=k)
cout<<i<<' ';
}

114. Să se scrie o funcție C++ care să determine numărul divizorilor impari ai unui
număr natural transmis ca parametru. Funcția întoarce rezultatul prin intermediul unui
parametru de ieşire.

int nr_div_imp (int n, int &ndi)


{
int i;
ndi=0;
for(i=1; i*i<=n; i++)
{
if(n%i==0)
{
if(i%2==1)
ndi++;
if((n/i)%2==1)
ndi++;
}
if(i*i==n && i%2==1)
ndi--;
}
return ndi;
}
#include <iostream>
using namespace std;

int main() {
char c[20]; // declarare sir de caractere
int nr=0;
//citirea cu for a sirului
for(int i=0;i<=5;i++)
cin>>c[i];
c[6]=NULL;//transforma vectorul c intr-un sir de caractere
cout<<c;//afiseaza sir
//aflam cate litere 'a' s-au introdus
for(int i=0; i<=5; i++)
if(c[i]=='a')
nr++;
cout<<nr;
}

#include <iostream>
#include <cstring>

using namespace std;

int main() {
char a[30],b[30];
int i, nr=0;
cin.get(a,30);
cin.get();
//cin.get(b,10);
cout<<a;
//cout<<b;

//cate vocale sunt in acest sir a


for(i=0; i<strlen(a); i++)
//for(i=0; p[i]!=NULL; i++)
if(a[i]=='a' || a[i]=='e' || a[i]=='i' || a[i]=='o' || a[i]=='u')
nr++;
cout<<nr;
return 0;
}
#include <iostream>
#include <cstring>

using namespace std;


// cauta in sir aparitiile caracterului c
int main() {
char sir[100]; char c;
cin.get(sir,100);
cin>>c;
char *p;//declarare variabila de tip pointer sau adresa de memorie
int nr=0;
p=strchr(sir,c);//p=adresa unde a fost gasit c in sir
//daca nu s-a gasit, p=NULL;
while (p!=NULL)
{
   nr++;
   p=strchr(p+1,c);
//se repeta cautarea de la adresa p+1, adica dupa caracterul c
}
cout<<nr;
return 0;
}

#include <iostream>
#include <cstring>

using namespace std;


int main() {
char aux[50], a[50], b[50];
cin.get(a,50);
cin.get();
cin.get(b,50);
strcpy(aux, a);
strcpy(a,b);
strcpy(b,aux);
cout<<"valorile dupa interschimbare:"<<endl;
cout<<a<<endl;
cout<<b;
return 0;
}
#include <iostream>
#include <cstring>

using namespace std;


//introdu numele si prenumele a doua persoane. formeaza prin lipire
variabilele nume1 si nume2 care sa contina si nume si prenume
//afla 1. persoana cu cel mai lung nume si valoarea lungimii numelui
// 2. afiseaza numele persoanelor in ordine alfabetica
int main() {
//if(strcmp(nume1,nume2)>0)
//strcat(nume,prenume);
char nume1[100], nume2[100], nume[30], prenume[30];
int l1, l2;
//introduceti numele
cin>>nume;
cin.get();
cin>>prenume;
//copiem numele in nume1
strcpy(nume1, nume);
strcat(nume1, " ");
strcat(nume1, prenume);
cout<<nume1;
cin>>nume;
cin.get();
cin>>prenume;
strcpy(nume2, nume);
strcat(nume2, " ");
strcat(nume2, prenume);
cout<<nume2;
//aflam lungimea fiecarui nume
l1=strlen(nume1);
l2=strlen(nume2);
if(l1>l2)
{
cout<<" cel mai lung nume este "<<nume1<<endl;
cout<<" lungimea lui este "<<' '<<l1;
}
else if(l1<l2)
{
cout<<" cel mai lung nume este "<<nume2<<endl;
cout<<" lungimea lui este "<<' '<<l2;
}
return 0;
}
#include <iostream>
#include <cstring>

using namespace std;


// cauta in sir aparitiile caracterelor ., !
int main() {
char sir1[100];
char c;
cin.get(sir1,100);
cin>>c;
char *p;
int nr1=0;
p=strchr(sir1,c);
while (p!=NULL)
{
nr1++;
p=strchr(p+1,c);
}
char sir2[100];
char d;
cin.get();
cin.get(sir2,100);
cin>>d;
char *s;
int nr2=0;
s=strchr(sir2,d);
while(s!=NULL)
{
nr2++;
s=strchr(s+1,d);
}
int nr=0;
nr=nr1+nr2;
cout<<"Textul contine "<< nr <<" propozitii."<<endl;
return 0;
}
#include <iostream>
#include <string.h>
using namespace std;

int main(){

char a[100],b[100];
cin>>a>>b;

if(strlen(a) != strlen(b))
cout<<"Cuvintele nu sunt anagrame"<<endl;
else{
int i,j;
for (i = 0; i < strlen(a);i++)
for (j = i + 1; j < strlen(a); j++)
if (a[i] > a[j])
{
char aux = a[i];
a[i] = a[j];
a[j] = aux;
}
for (i = 0; i < strlen(b); i++)
for (j = i + 1; j < strlen(b); j++)
if (b[i] > b[j])
{
char aux = b[i];
b[i] = b[j];
b[j] = aux;
}
if (strcmp(a,b) == 0)
cout<<"Cuvintele sunt anagrame"<<endl;
else
cout<<"Cuvintele nu sunt anagrame"<<endl;
}

return 0;
}
V1 – care nu e f buna deoarece repeta while de 2 ori

#include <iostream>
#include <cstring>

using namespace std;


// cauta in sir aparitiile caracterelor a doua caractere
int main() {
char sir1[100];
char c;
cin.get(sir1,100);
cin>>c;
char *p;
int nr1=0;
p=strchr(sir1,c);
while (p!=NULL)
{
nr1++;
p=strchr(p+1,c);
}
cout<<"Caracterul "<< c <<" a aparut de"<< nr1<<endl;
cout<<"Introduceti al doilea caracter";
char d;
cin>>d;
char *s;
int nr2=0;
s=strchr(sir1,d);
while(s!=NULL)
{
nr2++;
s=strchr(s+1,d);
}
int nr=0;
nr=nr1+nr2;
cout<<"Textul contine "<< nr <<" propozitii."<<endl;
return 0;
}
#include <iostream>
#include <cstring>

using namespace std;


// cauta in sir aparitiile caracterelor a doua caractere
int main() {
char sir[100];
char c;
char *p;
int nr1=0;
int i;
cin.get(sir,100);
for(i=1; i<=2; i++)
{
cin>>c;
nr1=0;
p=strchr(sir,c);
while (p!=NULL)
{
nr1++;
p=strchr(p+1,c);
}
cout<<"Caracterul "<< c <<" a aparut de"<< nr1<<endl;
}

return 0;
}

#include <iostream>
#include <cstring>

using namespace std;


// cauta in sir aparitiile caracterelor a doua caractere
int main() {
char sir[100];
char c1, c2;
char *p;
int nr1=0;
int i;
cin.get(sir,100);
cin>>c1; cin>>c2;
nr1=0;
// parcurgem sirul cu for si comparam fiecare caracter din sir cu c1 si c2
for(i=0; i<strlen(sir); i++)
{
if(sir[i]==c1 || sir[i]==c2)
nr1++;
}

cout<<"Caracterele "<< c1 <<" si "<< c2 <<" apar de " << nr1<<" ori "<<endl;

return 0;
}

#include <iostream>
#include <cstring>

using namespace std;


// aflam numarul de propozitii stiind ca separatorul dintre propozitii este: ?
! .
int main() {
char sir[100];
char c;
cin.get(sir,100);
char *p;
int nr=0;
p=strtok(sir,"?!.");
while (p!=NULL)
{
nr++;

cout<<"propozitia"<<nr<<':'<<p<<endl;
// prelucram propozitia p
cout<<"lungimea propozitiei este"<<strlen(p)<<endl;
p=strtok(NULL,"?!.");
}
cout<<"Numarul de propozitii este "<< nr;
return 0;
}
-daca adaug separatorul spatiu se separa cuvintele
#include <iostream>
#include <string.h>
using namespace std;

int main(){

char a[100],b[100];
cin>>a>>b;

if(strlen(a) != strlen(b))
cout<<"Cuvintele nu sunt anagrame"<<endl;
else{
int i,j; // a="bac" a="abc"
// ordoneaza crescator literele cuvantului a
for (i = 0; i < strlen(a);i++)
for (j = i + 1; j < strlen(a); j++)
if (a[i] > a[j])
{
char aux = a[i];
a[i] = a[j];
a[j] = aux;
}
// ordoneaza crescator literele cuvantului b
// daca b="dab" b="abd"
for (i = 0; i < strlen(b); i++)
for (j = i + 1; j < strlen(b); j++)
if (b[i] > b[j])
{
char aux = b[i];
b[i] = b[j];
b[j] = aux;
}
if (strcmp(a,b) == 0)
cout<<"Cuvintele sunt anagrame"<<endl;
else
cout<<"Cuvintele nu sunt anagrame"<<endl;
}

return 0;
}
#include <iostream>
#include <string.h>
using namespace std;

int main(){
int i;
char s[100]="aBRDC";
i=0;
while (i<strlen(s))
// testam daca s[i] este litera mare , daca da o eliminam
if( s[i]>='A' && s[i]<='Z')
strcpy(s+i, s+i+1); // i=1 s=”afC”
else i++;
cout<<s;

return 0;
}

#include <iostream>
#include <string.h>
using namespace std;

int main(){
int i, j;
char aux;
char s[100];
cin>>s;
cout<<s<<endl;
// interschimbarea caracterelor aflate pe poziţii simetrice faţă de mijlocul
şirului (primului caracter cu ultimul, al doilea cu penultimul, etc).
i=0;
j=strlen(s)-1;
while (i<j)
{
aux=s[i];
s[i]=s[j];
s[j]=aux;
i++;
j--;
}
cout<<s;
return 0;
}

/*i  0  1  2   3  4


Sir A   B  f  C  NULL
C f B A */
#include <iostream>
#include <string.h>
using namespace std;

int main(){
char s[50]="mnoprst", x[50];
strcpy(x,s+4); //x=”rst”
strcpy(s+4,"587"); //s=”mnop587”
strcat(s,x); // s=”mnop587rst”
cout<<s;
return 0;
}

/*Şirul de caractere s2 este “clona” şirului de caractere s1 dacă se poate


obţine din 1 prin eliminarea tuturor apariţiilor unei singure vocale. Se
consideră vocală orice literă din mulţimea {a,e,i,o,u}. Scrieţi programul C/C+
+ care citeşte de la tastatură un cuvânt format din cel mult 20 litere mici
ale alfabetului englez şi afişează pe ecran (dacă există), toate “clonele”
acestui cuvânt, fiecare pe câte o linie a ecranului.
1. char voc[5]="aeiou";
2. citim sirul s
3. parcurgem cu for vocalele si elminam din s ficerae vocala voc[i].
4. Scriem o functie care elimina o vocala v, din sirul s
*/

#include <iostream>
#include <string.h>
using namespace std;

void clona(char s[20], char v)


{
//eliminam vocala v din sirul s si afisam sirul rezultat ex: abac v=a => bc
int i=0;
while (i<strlen(s))
if(s[i]==v)
strcpy(s+i, s+i+1);
else i++;
}

int main(){
char s[20], s1[20], v, voc[]="aeiouAEIOU";
int i;
cin>>s;
for(i=0; i<strlen(voc); i++)
{
strcpy(s1, s);
clona(s1,voc[i]);
if(strcmp(s1,s)!=0)
cout<<s1<<endl;
}

return 0;
}

18. Se consideră un text cu maximum 255 de caractere, format din litere mici ale alfabetului englez şi
spaţii. Textul conţine cel puţin o consoană. Scrieţi un program C++ care citeşte de la tastatură textul şi
apoi determină transformarea acestuia, eliminând numai ultima consoană care apare în text, ca în
exemplu. Programul va afişa pe ecran textul obţinut. Exemplu: dacă de la tastatură se introduce
textul: mare frig saci pe ecran se va afişa: mare frig sai (Bacalaureat 2009)

#include <iostream>
#include <string.h>
using namespace std;

int main()
{
char s[256], voc[]="aeiou";
int i;
cin.get(s,256);
cin.get();
for(i=strlen(s)-1; i>=0; i--)
{
if(s[i]>='a' && s[i]<='z')
if(strchr(voc,s[i])==NULL)
{
strcpy(s+i, s+i+1);
cout<<"Textul final este: "<<s;
i=0;
}
}
return 0;
}
19. Se consideră un text alcătuit din cel mult 250 de caractere, în care cuvintele sunt formate doar din
litere mici ale alfabetului englez şi sunt separate prin unul sau mai multe caractere *. Scrieţi un
program C++ care citeşte de la tastatură textul şi afişează pe ecran, pe câte o linie, toate secvenţele
formate din câte două litere identice, ca în exemplu. Exemplu: dacă textul citit este: se afişează
perechile alăturate : ii ii oo

#include <iostream>
#include <string.h>
using namespace std;

/*toate secvenţele formate din câte două litere identice


exemplu: abccx xx - cc xx
idee: se parcurge sirul s pozitie cu pozitie (for), si se compara s[i] cu
s[i+1]
*/
int main()
{ char s[251];
cin.get(s,251);
int i, nr=0;
for(i=0; i<=strlen(s); i++)
{
if(s[i]==s[i+1])
{ nr++;
cout<<s[i]<<s[i+1]<<endl;
}
}
cout<<nr;
return 0;
}
20. Scrieţi un program C++ care citeşte de la tastatură două şiruri de caractere formate din maximum
100 litere mici ale alfabetului englez şi afişează pe ecran cel mai lung sufix comun al celor două şiruri
de caractere. Dacă cele două şiruri nu au niciun sufix comun, atunci programul va afişa pe ecran
mesajul NU EXISTĂ. Exemplu: pentru şirurile marina şi elena se va afişa na

/*afişează pe ecran cel mai lung sufix comun al celor două şiruri de
caractere. Dacă cele două şiruri nu au niciun sufix comun, atunci programul va
afişa pe ecran mesajul NU EXISTĂ
Exemplu: pentru şirurile
marina şi
elena
ananas se va afişa na
Idee: extragem pe rand sufixe din s1 si le cautam in s2. daca se gaseste in
s2, atunci verificam si daca este la sfarsitul cuvantului s2
marina
primul sufix este s1
al doilea sufix este s1+1
sufixul i va fi s1+i
ultimul va fi s1+strlen(s1)-1
*/
#include <iostream>
#include <string.h>
using namespace std;

int main()
{ char s1[251], s2[251], *p;
cin.get(s1,251);
cin.get();
cin.get(s2,252);
int i, g=0;
for(i=0; i<strlen(s1) && g==0; i++)
{
cout<<s1+i<<endl; // s1+i este un sufix al lui s1
//cautam s1+i in s2
int l=strlen(s1+i);
p=strstr(s2+strlen(s2)-l,s1+i);
if(p!=NULL)
{cout<<"S-a gasit sufixul "<<p<<endl;
g=1;}
/*marina
dinaina*/
}
if(g==0)
cout<<"NU EXISTA";

return 0;
}
Un număr natural nenul se numește p-număr dacă are aceeași paritate cu suma
divizorilor săi pozitivi.
Exemplu: 10 și 25 sunt p-numere (10 are aceeași paritate cu 18=1+2+5+10, iar
25 are aceeași
paritate cu 31=1+5+25).
Subprogramul kpn, are trei parametri, a, b și k, prin care primește câte un
număr natural din intervalul
[1,106] (a≤b). Subprogramul returnează cel de al k-lea p-număr din intervalul
[a,b] sau -1, dacă
nu există cel puțin k astfel de numere în acest interval. Scrieți definiția
completă a subprogramului.
Exemplu: dacă a=27, b=50 și k=3, atunci subprogramul returnează 34.

#include <iostream>
#include <string.h>
using namespace std;

int kpn(int a, int b, int k)


{
//parcurgem intervalul [a,b] cu for i
//calculam suma divizorilor lui i si apoi verificam paritatile
//nr va numara numerele gasite pt a ne opri la al k-lea
int i, nr=0;
for(i=a; i<=b; i++)
{
// calculez suma div lui i; presupunem i=100, cautam divizorii printre
1,2,3..100
int s=0;
for(int j=1; j<=i; j++)
if(i%j==0) // verific daca j este divizor al lui i
s=s+j; // calculez suma div lui i
if(i%2==s%2) // aflam paritatile
{nr++;
if(nr==k)
return i;
}
}
return -1;
}

int main()
{
cout<<"Rezultatul este: "<<kpn(27,50,3);
return 0;
}
#include <iostream>
#include <string.h>
using namespace std;

/*Subprogramul kpn, are trei parametri, a, b și k, prin care primește câte un


număr natural din intervalul
[1,106] (a≤b). Subprogramul returnează cel de al k-lea p-număr din intervalul
[a,b] sau -1, dacă
nu există cel puțin k astfel de numere în acest interval.

Scrie functia nrdivizori care returneaza numarul de divizori pari ai lui x


care este parametrul functiei.
apeleaza functia pentru 2 nr - 100 3

Afiseaza toate numerele din intervalul [a,b] care au nr de cifre pare = cu nr


de cifre impare.

*/

int kpn(int a, int b, int k)


{
//parcurgem intervalul [a,b] cu for i
//calculam suma divizorilor lui i si apoi verificam paritatile
//nr va numara numerele gasite pt a ne opri la al k-lea
int i, nr=0;
for(i=a; i<=b; i++)
{
// calculez suma div lui i; presupunem i=100, cautam divizorii printre
1,2,3..100
int s=0;
for(int j=1; j<=i; j++)
if(i%j==0)
s=s+j;
if(i%2==s%2)
{nr++;
if(nr==k)
return i;
}
}
return -1;
}

int nrdivizori(int x)
{
int nrdiv=0, i;
for(i=2; i<=x; i=i+2)
{
if(x%i==0)
nrdiv++;
}
return nrdiv;
}

void pareimpare(int a, int b)


{
int i, cif, x, pare=0, impare=0;
for(i=a; i<=b; i++)
{
// extragem cifrele nr i si numaram cifre pare impare
x=i;
pare=0; impare=0;
while(x!=0)
{cif=x%10;
if(cif%2==0)
pare++;
else impare++;
x=x/10;
}
if(pare==impare)
cout<<i<<endl;
}
}

int main()
{
cout<<"Rezultatul este: "<<kpn(27,50,3)<<endl;
cout<<"Numarul de divizori pari este: "<<nrdivizori(10)<<endl;
cout<<"Numarul de divizori pari este: "<<nrdivizori(3);
pareimpare(1000, 3000);
return 0;
}

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