Orar semigroup #2

Orar semigroup #2

Se afișează postările cu eticheta suma. Afișați toate postările

29 aprilie - Divide et Impera (temă 2 mai)

Suma elementelor unui tablou de nr intregi

#include<iostream>
using namespace std;
int x[100],n;

int DI(int st, int dr)
{int m,s1,s2;
if(st==dr)
    return x[st];
m=(st+dr)/2;
s1=DI(st,m);
s2=DI(m+1,dr);
return s1+s2;
}

int main()
{int i;
cin>>n;
for(i=0;i<n;i++)
    cin>>x[i];
cout<<DI(0,n-1);
return 0;
}
Elementul minim dintr-un tablou de numere întregi
#include<iostream>
using namespace std;
int x[100],n;
int DI(int st, int dr)
{int m,s1,s2;
if(st==dr)
    return x[st];
m=(st+dr)/2;
s1=DI(st,m);
s2=DI(m+1,dr);
if(s1<s2)return s1;
else return s2;   
}

int main()
{int i;
cin>>n;
for(i=0;i<n;i++)
    cin>>x[i];
cout<<DI(0,n-1);
return 0;
}
Cmmdc dintr-un tablou
#include<iostream>
using namespace std;
int x[100],n;
int cmmdc(int a, int b)
{
while(a!=b)
{    if(a>b)a=a-b;
    else b=b-a;
}
return a;
}

int DI(int st, int dr)
{int m,s1,s2;
if(st==dr)
    return x[st];
m=(st+dr)/2;
s1=DI(st,m);
s2=DI(m+1,dr);
return cmmdc(s1,s2);
}

int main()
{int i;
cin>>n;
for(i=0;i<n;i++)
    cin>>x[i];
cout<<DI(0,n-1);
}
Suma cifrelor tuturor elementelor din sir
#include<iostream>
using namespace std;
int x[100],n;

int suma(int a)
{int s=0;
while(a)
{    s=s+a%10;
a=a/10;}
return s;
}

int DI(int st, int dr)
{int m,s1,s2;
if(st==dr)
    return suma(x[st]);
m=(st+dr)/2;
s1=DI(st,m);
s2=DI(m+1,dr);
return s1+s2;
}

int main()
{int i;
cin>>n;
for(i=0;i<n;i++)
    cin>>x[i];
cout<<DI(0,n-1);
}
Numarul de elemente impare
#include<iostream>
using namespace std;
int x[100],n;

int DI(int st, int dr)
{int m,s1,s2;
if(st==dr)
    if(x[st]%2==1)
        return 1;
    else return 0;
m=(st+dr)/2;
s1=DI(st,m);
s2=DI(m+1,dr);
return s1+s2;
}

int main()
{int i;
cin>>n;
for(i=0;i<n;i++)
    cin>>x[i];
cout<<DI(0,n-1);
}
Numarul de elemente prime
#include<iostream>
using namespace std;
int x[100],n;

int prim(int a)
{int d,ok=1;
if(a==1)return 0;
for(d=2;d<=a/2;d++)
    if(a%d==0)
        ok=0;
return ok;
}

int DI(int st, int dr)
{int m,s1,s2;
if(st==dr) return prim(x[st]);
m=(st+dr)/2;
s1=DI(st,m);
s2=DI(m+1,dr);
return s1+s2;
}

int main()
{int i;
cin>>n;
for(i=0;i<n;i++)
    cin>>x[i];
cout<<DI(0,n-1);
}

joi, 28 aprilie 2011 by DlMuresan
Categories: , , , , | Leave a comment

24+25 februarie - matrice

Se citeşte de la tastatură un număr s şi un număr m. Să se scrie funcţii pentru citirea dimensiunii unei matrici pătratice şi a matricii, pentru afişarea matricii, pentru afişarea elementelor de pe diagonala principală, pentru afişarea sumei de pe coloana s, pentru afişarea sumei de pe linia m, pentru inversarea a doua linii ale matricii, pentru schimbarea DP cu DS si pentru calcularea sumei de pe DS.

Pentru DP: [i][i];
Pentru DS: [i][n-i-1]; 

#include<iostream>
using namespace std;
int a[10][10],n;
void citire()
{int i,j;
cout<<"Dimensiunea"<<endl;
cin>>n;
cout<<"Cititi elementele matricii"<<endl;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
cin>>a[i][j];}
void afisare()
{int i,j;
for(i=0;i<n;i++)
{cout<<endl;
for(j=0;j<n;j++)
cout<<a[i][j]<<" ";}}
void diagonala()
{int i;
cout<<endl<<"Elementele de pe diagonala principala sunt:"<<endl;
for(i=0;i<n;i++)
cout<<a[i][i]<<" ";}
int sumai(int i)
{int s1=0,j;
for(j=0;j<n;j++)
s1=s1+a[i][j];
return s1;}
int sumaj(int j)
{int i,s2=0;
for(i=0;i<n;i++)
s2=s2+a[i][j];
return s2;}
void inversare(int i,int j)//inversarea elementelor de pe i si j!
{int k,aux;
for(k=0;k<n;k++)
{aux=a[i][k];
a[i][k]=a[j][k];
a[j][k]=aux;}
}
int sumads()//suma de pe Diagonala secundara,exercitiu nou!
{int i,j,s=0;
for(i=0;i<n;i++)
s=s+a[i][n-1-i];
return s;
}
void schimba()//schimbarea elementelor de pe DP si DS!
{int i,aux;
for(i=0;i<n;i++)
{aux=a[i][i];
a[i][i]=a[i][n-1-i];
a[i][n-1-i]=aux;
}}
int main()
{int s1,s2,s,m;
cout<<"Linia m: ";cin>>m;
cout<<"Coloana s: ";cin>>s;
cout<<endl<<"Citire matrice"<<endl;citire();
cout<<endl<<"Afisare matrice";afisare();
cout<<endl;diagonala();
inversare(0,1);
cout<<endl<<endl<<"Dupa inversarea liniilor";afisare();
schimba();
cout<<endl<<endl<<"Dupa schimbarea DP cu DS";afisare();
cout<<endl<<endl<<"suma de pe linia "<<m<<": "<<sumai(m);
cout<<endl<<"suma de pe coloana "<<s<<": "<<sumaj(s);
cout<<endl<<"suma pe DS este: "<<sumads()<<endl;
}

joi, 24 februarie 2011 by DlMuresan
Categories: , , , | Leave a comment

21 ianuarie - fisa subprograme BAC

1. Scrieţi definiţia completă a subprogramului număr, cu 4 parametrii, care primeşte prin intermediul parametrului n un număr natural format din cel mult 9 cifre, iar prin intermediul parametrilor c1 şi c2 câte o cifră cu proprietatea c1<c2; subprogramul furnizează prin intermediul celui de-al 4-lea parametru, x, o valoare obţinută prin eliminarea din numărul primit prin parametrul n a fiecărei cifre cuprinse în intervalul închis [c1,c2]. Dacă toate cifrele lui n aparţin acestui interval se va afişa 0.

#include<iostream>
using namespace std;
void numar(int n, int c1, int c2, int &x)
{   int r=0,k=1; x=0;
  while(n)
  {  if (n%10<c1 || n%10>c2)
    {x=n%10*k+x; k=k*10;}
       n=n/10; }
}
int main()
{  int n,c1,c2,x;
cin>>n;
cin>>c1;
cin>>c2;
numar(n,c1,c2,x);
cout<<x;
}
2. Scrieţi definiţia completă a subprogramului reduce, cu doi parametrii, care primeşte prin intermediul parametrilor a şi b două numere naturale formate din cel mult 9 cifre fiecare. Funcţia returnează o valoare obţinută din numărul a prin însumarea acelor cifre diferite de 0 ale numărului a care NU divid numărul b. Dacă nu există asemenea cifre, se va returna valoarea 0.
 #include<iostream>
using namespace std;
int reduce(int a, int b)
{  int s=0;
 while (a)
 {   if(a%10!=0 && b%(a%10)!=0)
     s=s+a%10;
    a=a/10;
 }
 return s;
}
int main()
{   int a,b;
cin>>a;
cin>>b;
cout<<reduce(a,b);
}
3. Scrieţi definiţia completă a subprogramului număr, cu 3 parametrii, care primeşte prin intermediul parametrului n un număr natural format din cel mult 9 cifre, iar prin intermediul parametrilor c1 şi c2 câte o cifră nenulă; subprogramul returnează numărul obţinut prin înlocuirea în numărul primit prin parametrul n a fiecărei apariţii a cifrei c1 cu cifra c2. Dacă c1 nu apare în n, subprogramul returnează valoarea n.
#include<iostream>
using namespace std;
int numar(int n, int c1, int c2)
{int r=0,k=1;
    while(n)
{    if(n%10==c1)r=c2*k+r;
    else r=(n%10)*k+r;
    k=k*10;
    n=n/10;
}
return r;
}
int main()
{int n,c1,c2;
cin>>n;
cin>>c1>>c2;
cout<<numar(n,c1,c2);
}
4. Scrieţi definiţia completă a subprogramului suma care are 2 parametrii: n, prin care primeşte un număr natural(1<=n<=100) şi v prin care primeşte un tablou unidimensional cu n elemente, fiecare element memorând un număr cu exact 3 cifre. Funcţia returnează suma elementelor din tablou care au prima cifră egală cu ultima cifră.
#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);
}
5. Scrieţi definiţia completă a subprogramului suma care are 2 parametrii: n, prin care primeşte un număr natural(1<=n<=100) şi v prin care primeşte un tablou unidimensional cu n elemente, numere întregi situate în intervalul [10...30000]. Funcţia returnează suma numerelor din tabloul v care au ultimele două cifre identice.
#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]/10%10)
        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);
}
6. Scrieţi definiţia completă a subprogramului medie care are 2 parametrii: n, prin care primeşte un număr natural situat între 1 şi 100, şi v prin care primeşte un tablou unidimensional cu n elemente, fiecare din ele având cel mult 4 cifre. Subprogramul returnează media aritmetică a numerelor din tablou.
#include<iostream>
using namespace std;
int medie(int n, int v[])
{int i,s=0;
float p;
for(i=0;i<n;i++)
    s=s+v[i];
cout<<(float)s/n;
}
int main()
{int n,v[100],i;
cin>>n;
for(i=0;i<n;i++)
    cin>>v[i];
medie(n,v);
}
7. Scrieţi definiţia completă a unui subprogram max care primeşte prin intermediul parametrilor a şi b două numere reale cu cel mult 4 cifre la partea întreagă şi cel mult 5 zecimale fiecare. Subprogramul determină cel mai mare număr real dintre următoarele 4 valori: a, b şi numerele reale obţinute din a şi b prin interschimbarea părţii întregi cu partea fracţionară în cadrul aceluiaşi număr. Această valoare(maximă) este furnizată prin intermediul parametrului real c.
#include<iostream>   //   GRESIT
using namespace std;
float max(float a, float b, float &c)
{float x,y,p,k=1,t=1;
p=a;
while((int)p)
{k=k*10;p=p/10;}
p=a;
while(int(p)!=p)
{p=p*10;t=t*10;}
x=(a-(int)a)*t+(int)a/k;

p=b;k=1;t=1;
while((int)p)
{k=k*10;p=p/10;}
p=b;
while(int(p)!=p)
{p=p*10;t=t*10;}
y=(b-(int)b)*t+(int)b/k;

c=a;
if(b>c)c=b;
if(x>c)c=x;
if(y>c)c=y;
}
int main()
{float a,b,c;
cin>>a>>b;
max(a,b,c);
cout<<c;
}
8. Se consideră subprogramul CMMDC care primeşte prin cei doi parametrii x şi y două numere naturale şi returnează cel mai mare divizor comun al lor. 
a) scrieţi numai antetul subprogramului CMMDC
b) Fişierul text NUMERE.IN conţine, pe fiecare linie, câte două numere naturale nenule mai mici sau egale cu 10000, despărţite printr-un spaţiu, reprezentând numitorul şi numărătorul câte unei fracţii. Scrieţi un program care, pentru fiecare linie k din fişierul NUMERE.IN, citeşte numitorul şi numărătorul fracţiei pe această linie şi scrie în fişierul text NUMERE.OUT, tot pe linia k, numitorul şi numărătorul acestei fracţii, adusă la forma ireductibilă, ca în exemplu. Se vor utiliza apeluri utile ale funcţiei CMMDC. 
#include<iostream>   //   GRESIT
#include<fstream>
using namespace std;
int CMMDC(int x, int y)
{
    while(x!=y)
        if(x>y)x=x-y;
        else y=y-x;
return x;
}
int main()
{int x,y;
    ifstream f("NUMERE.IN");
    ofstream g("NUMERE.OUT");
    f>>x>>y;
    while(!f.eof())
{       
    x=x/CMMDC(x,y);
    y=y/CMMDC(x,y);
    g<<x<<" "<<y<<endl;
    f>>x>>y;
}
}
9. Ne putem folosi de formula CMMMC = a*b/CMMDC.
Se consideră subprogramul CMMMC care primeşte prin cei doi parametrii x şi y două numere naturale şi returnează cel mai mic multiplu comun al lor. Fişierul text NUMERE.IN conţine, pe fiecare linie, câte două numere naturale nenule mai mici decât 10000, despărţite printr-un spaţiu. Scrieţi un program care, pentru fiecare linie k din fişierul NUMERE.IN, citeşte câte două numere de pe această linie şi scrie în fişierul NUMERE.OUT, tot pe linia k, cel mai mic multiplu comun al acestora. Se vor folosi apeluri utile ale funcţiei CMMMC. 


10. Scrieţi doar antetul unui subprogram prim cu doi parametrii, care primeşte prin intermediul parametrului n un număr natural cu cel mult 4 cifre şi returnează prin intermediul parametrului p valoarea 1 dacă n este prim şi 0 în caz contrar. 
Scrieţi un program care citeşte de la tastatură un număr natural n<1000 şi afişează pe ecran, desparţite prin câte un spaţiu, primele n numere prime, utilizând apeluri utile ale subprogramului prim. 


11. Scrieţi definiţia completă a unui subprogram s care primeşte prin intermediul parametrului n un număr natural de maximum 9 cifre, prin intermediul parametrului c o cifră şi furnizează prin intermediul parametrului k numărului de cifre ale numărului n care aparţin intervalului [c-1,c+1]. 

sâmbătă, 12 februarie 2011 by DlMuresan
Categories: , , , , , , , , , , , | 2 comments

10 februarie - zaruri

2 copii se joaca un joc cu zarul. Fiecare face cate n aruncari. Aruncarile fiecarei fete se memoreaza in cate un tablou.
A) Sa se afiseze cele 2 tablouri
B) Castiga cel care a acumulat mai multe puncte. Sa se afiseze castigatorul.
C) Sa se afiseze, pentru fiecare jucator, numarul maxim de aruncari consecutive ale unei fete x.
de exemplu, daca ne intereseaza fata 5 si un jucator arunca 3 5 5 6 5 5 5 7 5, numarul cautat este 3.

Indicatii:

  1. Se va folosi functia rand() care genereaza numere aleatoare intre 0 si RAND_MAX.
  2. La inceputul programului se va face urmatorul apel: srand(time(NULL));
se va scrie o functie care genereaza numere aleatoare intre 1 si x, cu x parametru
#include<iostream>
using namespace std;
int randx(int x)
{return rand()%x+1;
}
void aruncari(int a[],int n)
{ int i;
for(i=0;i<n;i++)
a[i]=randx(6);
}
void afisare(int a[],int n)
{ int i;
cout<<"jucatorul a aruncat zarurile: ";
for(i=0;i<n;i++)
cout<<a[i]<<" ";
cout<<endl;
}
int suma(int a[],int n)
{int s=0,i;
for(i=0;i<n;i++)
s=s+a[i];
return s;
}
void fata(int &x)
{x=rand()%6+1;}
int main()
{ int n,x,a1[200],a2[200],s1,s2,max,v[100]={0},t[100]={0},j,k,r,p,i;
cout<<"Nr de aruncari:";
cin>>n;
srand(time(NULL));
aruncari(a1,n);
aruncari(a2,n);
afisare(a1,n);
afisare(a2,n);
s1=suma(a1,n);
s2=suma(a2,n);
if(s1>s2)
cout<<"primul castiga";
else if(s2>s1) cout<<"castiga al doilea";
else cout<<"egalitate";
fata(x);
cout<<endl<<"x="<<x<<endl;

max=0;j=0;
for(i=0;i<=n;i++)
{ if(a1[i]==x)
max++;
if(a1[i]!=x)
{v[j]=max;
j++;
max=0;}
}
p=0;
for(k=0;k<=j;k++)
if(v[k]>p)
p=v[k];
cout<<p<<" aparitii consecutive ale fetei "<<x<<" pentu primul jucator"<<endl;

max=0;j=0;
for(i=0;i<=n;i++)
{ if(a2[i]==x)
max++;
if(a2[i]!=x)
{t[j]=max;
j++;
max=0;}
}
p=0;
for(k=0;k<=j;k++)
if(t[k]>p)
p=t[k];
cout<<p<<" aparitii consecutive ale fetei "<<x<<" pentu al doilea jucator"<<endl;
}

miercuri, 9 februarie 2011 by DlMuresan
Categories: , , , , , | Leave a comment

14 ianuarie - Fisa de lucru 4 - FULL CORECT


Se citeste de la tastatura un vector cu n numere intregi.
Sa se realizeze subprograme pentru realizarea urmatoarelor cerinte:
1)      Afisarea vectorului
2)      Calcularea sumei valorilor vectorului
3)      Afisarea numarului de valori prime din vector
4)      Afisarea numarului de elemente palindroame din vector (1234321 este palindrom)
5)      Afisarea urmatorului triunghi cu valorile din tablou:
a[0] a[1] a[2]........ .............a[n-1] 
            a[0] a[1] a[2]........ ......a[n-2]
            a[0] a[1] a[2]........ ...a[n-3] 
            .....
a[0] a[1]
a[0]
#include<iostream>
#include<fstream>
#include<math.h>
using namespace std;
void afisare(int n, int a[100])
{int i;
for(i=0;i<n;i++)
    cout<<a[i]<<" ";
}

int suma(int n, int a[100])
{int s=0,i;
for(i=0;i<n;i++)
    s=s+a[i];
return s;
}

int prime(int n, int a[100])
{int d,ok=1,s=0,i;
for(i=0;i<n;i++)
{    ok=1;
    for(d=2;d<=a[i]/2;d++)
        if(a[i]%d==0)
            ok=0;
    if(a[i]==1)ok=0;
    if(a[i]==2 || a[i]==3)ok=1;
    if(ok==1)s++;
}
return s;
}

int palindrom(int n, int a[100])
{int t,r,d,ok=1,s=0,i;
for(i=0;i<n;i++)
{    ok=1;r=0;
    t=a[i];
    while(t)
    {r=r*10+t%10;
    t=t/10;}
    if(a[i]!=r)
        ok=0;
    if(ok==1)
        s++;
}
return s;
}

void triunghi(int n, int a[100])
{int i,j;
j=n;
while(j>0)
{for(i=0;i<j;i++)
    cout<<a[i]<<" ";
cout<<endl;
j--;
}
}

int main()
{int i,n,a[100];
cout<<"Numarul de elemente ale vectorului este:"<<endl;
cin>>n;
cout<<"Cititi elementele vectorului"<<endl;
for(i=0;i<n;i++)
    cin>>a[i];
cout<<endl<<"<<Afisare>>"<<endl;
afisare(n,a);
cout<<endl<<endl<<"<<Suma valorilor vectorului>>"<<endl;
cout<<suma(n,a)<<endl<<endl;
cout<<"<<Numarul de elemente prime>>"<<endl;
cout<<prime(n,a)<<endl<<endl;
cout<<"<<Numarul de elemente palindrom>>"<<endl;
cout<<palindrom(n,a)<<endl<<endl;
cout<<"<<TRIUNGHIUL BERMUDELOR>>"<<endl;
triunghi(n,a);
}

luni, 24 ianuarie 2011 by DlMuresan
Categories: , , , , , | 1 comment

29 noiembrie - citire din fisier, putback

1) Se citeste din fisier o propozitie cu cifre si alte caractere. Numerele pot sa apara si in interiorul cuvintelor. Sa se afiseze numerele fiecare pe cate un rand. Sa se afiseze numarul maxim si suma.

#include<iostream>
#include<fstream>
using namespace std;
int main()
{int max=0,s=0,n;
char a[100],*p,c;
ifstream fin("date.in");
while((c=fin.get()) !=EOF)
{    if(isdigit(c))
        {fin.putback(c);
        fin>>n;
    s=s+n;
    if(n>max)
        max=n;
    cout<<n<<endl;
    c=fin.get();}
}
cout<<endl<<endl<<"Suma: "<<s<<endl<<endl;
cout<<"Max: "<<max<<endl;

}
Fisierul:
Ana cumpara 12 mere,12 pere,125 flori si inca10lalele12crini5ghiocei.

2) Sa se calculeze o expresie de genul -2x+4x+10x-5x. Coeficientii lui x sunt intre -9 si +9.
#include<iostream>
using namespace std;
int main()
{double s=0;
char a[100],*p;
cin.get(a,100);
for(p=a;*p;p++)
    if(isdigit(*p))
    {if(*(p-1)=='-')
        s=s-*p+'0';
    else s=s+*p-'0';
    }
    cout<<"="<<s<<"x";
}

luni, 29 noiembrie 2010 by DlMuresan
Categories: , , , , , | 1 comment

19 noiembrie

La un concurs de Miss si Mister participa mai multi concurenti. La fete se citeste din fisier inaltimea, iar la baieti sportul preferat.
a) sa se afiseze nr de fete si de baieti
b) sa se afiseze inaltimea medie a fetelor
c) sa se afiseze toate sporturile o singura data

#include<iostream>
#include<fstream>
using namespace std;
int main()
{int i=0,j=0,k=0,s=0,h;
char a[100],b[100],*p;
ifstream f("miss.in");
while(f>>a)
{if(isdigit(a[0]))
    {i++;
s=s+atoi(a);}
if(isalpha(a[0]))
{    j++;
if(strstr(b,a)==0)
    {for(p=a;*p;p++)
        {b[k]=*p;k++;}
        b[k]=' ';k++;}}}
b[k]=NULL;
cout<<i<<" fete "<<j<<" baieti "<<endl;
h=(float)s/i;
cout<<h<<" inaltime medie"<<endl;
cout<<b;
}
Temă: Să se afişeze *\n**\n***....de n ori * pornind de la sirul a si concatenand sirul "*" de n ori.
#include<iostream>
using namespace std;
int main()
{int n,i;
char a[100]={0};
cin>>n;
for(i=1;i<=n;i++)
{ strcat(a,"*");
cout<<a<<endl;}
}

joi, 18 noiembrie 2010 by DlMuresan
Categories: , , , , , , , , | Leave a comment

Tema 11 noiembrie

Se dă fişierul "numere.in" cu numere întregi. Să se afişeze suma cifrelor şi numerele prime.

#include<iostream>
#include<fstream>
using namespace std;
int main()
{int a,s=0,d,i,j,ok;
ifstream f("numere.in");
cout<<"Nr prime"<<endl;
while(f>>a)
{s+=a;
ok=1;
for(d=2;d<=a/2;d++)
    if(a%d==0)
        ok=0;
    if(ok==1)cout<<a<<";";
}
cout<<endl<<"Suma "<<s;
}

miercuri, 10 noiembrie 2010 by DlMuresan
Categories: , , , , | Leave a comment