Orar semigroup #2

Orar semigroup #2

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

Grafică - 27 aprilie - pătrate

Desenaţi n pătrare, cunoscându-se coordonatele primului pătrat şi faptul că are latura l (variabilă iniţializată în program). Următorul pătrat are latura l+l/2.

#include<graphics.h>
void patrat(int xs,int ys,int l,int n)
{if(n)
{
setcolor(rand()%15+1);
delay(10);
rectangle(xs,ys,xs+l,ys-l);
patrat(xs-l/4,ys+l/4,l+l/2,n-1);
}
}
int main()
{
initwindow(1000, 800);
patrat(500,400,20,10);
while( !kbhit() )
closegraph();
}

miercuri, 27 aprilie 2011 by DlMuresan
Categories: , , | Leave a comment

Probleme recursive - 26, 27

Inversul unui numar. Sa se genereze primii n termeni ai unei progresii aritmetice (geometrice), daca se cunosc primul termen si ratia.

#include<iostream>
using namespace std;

void invers(int n)
{
    if(n!=0)
{    cout<<n%10;
    invers(n/10);
}
}

void progresie(int nn, int a, int r)
{if(nn!=0)
{    cout<<a<<" ";
    progresie(nn-1,a+r,r);
}
}

int main()
{int n,a,r,nn;
cout<<"n=";
cin>>n;
cout<<"nn=";
cin>>nn;
cout<<"a=";
cin>>a;
cout<<"r=";
cin>>r;
cout<<"Inversul lui "<<n<<endl;
invers(n);
cout<<endl<<"Progresie"<<endl;
progresie(nn,a,r);
}

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

28 martie - recursiva 15 + Temă 22,23,24

Problema 15

#include<iostream>
using namespace std;
int a,b,n;
double A(int);
double B(int);
   
int main()
{int i;
cout<<"a=";cin>>a;
cout<<"b=";cin>>b;
cout<<"n=";cin>>n;
for(i=1;i<=n;i++)
{cout<<A(i)<<" "<<B(i);
cout<<endl;}
}

double A(int n)
{if(n==0)
    return a;
else return (A(n-1)+B(n-1))/2;
}

double B(int n)
{if(n==0)
    return b;
else return sqrt(A(n-1)*B(n-1));
}
22, 23, 24
#include<iostream>
using namespace std;
int p=0;
int s=0;

void afisare(int n, int i)
{
    if(n%i==0)
        cout<<i<<" ";
    if(i<=n)
        afisare(n,++i);
}

int numarare(int n, int i)
{
    if(n%i==0)
        p++;
    if(i<=n)
        numarare(n,++i);
return p;
}

int suma(int n, int i)
{
    if(n%i==0)
        s=s+i;
    if(i<=n)
        suma(n,++i);
return s;
}

int main()
{int n,i=1;
cin>>n;
afisare(n,i);
cout<<endl<<"NR DIVIZORI "<<numarare(n,i)<<endl;
cout<<"SUMA DIVIZORILOR "<<suma(n,i);
}

miercuri, 30 martie 2011 by DlMuresan
Categories: , , , , | Leave a comment

Triunghiul lui Pascal

#include<iostream>
using namespace std;

int vectori(int n, int k)
{int v[100], u[100], i, j, t;
v[0]=1;
for(i=0;i<n;i++)
    if(i==0)
        u[i]=0;
    else u[i]=v[i]+v[i-1];
}

int main()
{int k,t,i=0,j=0,n,a[100][100]={0},nn,kk;
cin>>n;
for(i=0;i<n;i++)
    for(j=0;j<=i;j++)
        if(j==0)
            a[i][j]=1;
        else a[i][j]=a[i-1][j]+a[i-1][j-1];

for(k=0;k<n;k++)
    {for(t=0;t<k+1;t++)
        cout<<a[k][t]<<" ";
    cout<<endl;}
    cout<<"citire"<<endl;
    cin>>nn>>kk;
    cout<<"Combinari de "<<nn<<" luate cate "<<kk<<"="<<a[nn][kk];
}

marți, 29 martie 2011 by DlMuresan
Categories: , , | Leave a comment