Orar semigroup #2

Orar semigroup #2

12 mai - Mergesort

Se citeste de la tastatura un tablou neordonat cu n elemente. Dorim sa-l ordonam crescator.

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

void interclasare(int st, int m, int dr)
{int i,j,b[100],k;
i=st;
j=m+1;
k=0;
while(i<=m && j<=dr)
if(a[i]<=a[j])
b[k++]=a[i++];
else b[k++]=a[j++];

while(i<=m)
b[k++]=a[i++];
while(j<=dr)
b[k++]=a[j++];
for(i=st;i<=dr;i++)
a[i]=b[i-st];
}

void mergesort(int st, int dr)
{if(st<dr)
{int m;
m=(st+dr)/2;
mergesort(st,m);
mergesort(m+1,dr);
interclasare(st,m,dr);
}
}

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

joi, 12 mai 2011 by DlMuresan
Categories: , , , , , , | Leave a comment

11 mai - interclasare + TEMĂ/12

#include<iostream>
using namespace std;

void interclasare(int a[], int b[], int c[], int &k, int n, int m)
{int i,j;
i=j=k=0;
while(i<n && j<m)
    {
    if(a[i]<=b[j])
        {c[k]=a[i];i++;k++;}
    else {c[k]=b[j];j++;k++;}
    }
while(i<n)
    {c[k]=a[i];i++;k++;}
while(j<m)
    {c[k]=b[j];j++;k++;}
}

int main()
{int a[100],b[100],c[100],n,m,i,j,k;
cout<<"n=";cin>>n;
for(i=0;i<n;i++)
    cin>>a[i];
cout<<"m=";cin>>m;
for(j=0;j<m;j++)
    cin>>b[j];
interclasare(a,b,c,k,n,m);
for(i=0;i<k;i++)
    cout<<c[i]<<" ";
}
1) Se da un şir X sortat crescăţor. Se dă un şir Y neordonat. Pentru fiecare element din şirul Y să se determine dacă acesta apare în şirul X şi să se numere câte apeluri ale funcţiei de căutare binară s-au făcut.
#include<iostream>
using namespace std;
int a[100],m[100],mm,apel[100]={0},i,nr,limita;

void ordonare(int x[], int n)
{int i,j;
for(i=0;i<n;i++)
    for(j=i+1;j<n;j++)
        if(x[i]>x[j])
            swap(x[i],x[j]);
}

int binar(int v[],int x, int st, int dr, int &y)
{int m;
if(st>dr)
    return -1;
m=(st+dr)/2;
if(v[m]>x)
    {y++;return binar(v,x,st,m-1,y);}
else if(v[m]<x) {y++;return binar(v,x,m+1,dr,y);}
    else return m;
}

int main()
{
cout<<"nr de elemente ale lui X=";cin>>nr;
for(i=0;i<nr;i++)
    cin>>a[i];
ordonare(a,nr);
cout<<"nr de elemente ale lui Y=";cin>>mm;
for(i=0;i<mm;i++)
    cin>>m[i];
for(i=0;i<mm;i++)
    if(binar(a,m[i],0,nr-1,apel[i])==-1)
        apel[i]=-1;
    else binar(a,m[i],0,nr-1,apel[i]);
cout<<endl;
for(i=0;i<mm;i++)
    if(apel[i]==-1)
        cout<<m[i]<<" nu apare in sirul y"<<endl;
    else cout<<"Pentru "<<m[i]<<" au fost necesare "<<apel[i]<<" apeluri"<<endl;
}
2) Se dau 2 şiruri, X şi Y, neordonate. Să se determine folosind DI pentru fiecare element din Y de câte ori apare în X.
#include<iostream>
using namespace std;

void ordonare(int x[], int n)
{int i,j;
for(i=0;i<n;i++)
    for(j=i+1;j<n;j++)
        if(x[i]>x[j])
            swap(x[i],x[j]);
}

int binar(int v[],int x, int st, int dr)
{int m;
if(st>dr)
    return -1;
m=(st+dr)/2;
if(v[m]>x)
    {return binar(v,x,st,m-1);}
else if(v[m]<x) {return binar(v,x,m+1,dr);}
    else return m;
}

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

int main()
{int x[100],y[100],i,j,m,n,p,r,t,k;
cout<<"nr X=";cin>>n;
for(i=0;i<n;i++)
    cin>>x[i];
sort(x,n+x);
cout<<"nr Y=";cin>>m;
for(i=0;i<m;i++)
    cin>>y[i];
for(i=0;i<m;i++)
    cout<<y[i]<<" apare de "<<DI(x,y[i],0,n-1)<<" ori in sirul X"<<endl;
}

marți, 10 mai 2011 by DlMuresan
Categories: , , | Leave a comment

5 mai - cautare binara, a+b=S

Se citeşte de la tastatură un tablou de n numere întregi. Să se afişeze toate perechile de elemente din tablou care au suma egală cu o valoare dată, s.

#include<iostream>
using namespace std;

void ordonare(int a[], int n)
{int i,j;
for(i=0;i<n;i++)
    for(j=i+1;j<n;j++)
        if(a[i]>a[j])
            swap(a[i],a[j]);
}

int binar(int a[],int x, int st, int dr)
{int m;
if(st>dr)
    return -1;
m=(st+dr)/2;
if(a[m]>x)
    return binar(a,x,st,m-1);
else if(a[m]<x) return binar(a,x,m+1,dr);
    else return m;
}

int main()
{int n,a[100],m,s,j,i,s1,s2;
cout<<"n=";
cin>>n;
cout<<"s=";
cin>>s;
cout<<"Citire vector"<<endl;
for(i=0;i<n;i++)
    cin>>a[i];
ordonare(a,n);
cout<<"Afisare vector"<<endl;
for(i=0;i<n;i++)
    cout<<a[i]<<" ";
cout<<endl<<endl<<"Solutii"<<endl;
for(i=n-1;i>=0 && a[i]>s;i--);
if(i==-1)
{cout<<"Nu exista solutii";return 0;}
n=i+1;
for(j=0;j<n && a[j]<=s/2;j++)
{s1=a[j];
s2=s-s1;
if(binar(a,s2,j+1,n-1)!=-1)
    cout<<s1<<"+"<<s2<<"="<<s<<endl;
}
}

joi, 5 mai 2011 by DlMuresan
Categories: , , , , , | Leave a comment

28 aprilie - patrare şi triunghiuri

1) Pătrate în colţ.

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

void patrat(int xs,int ys,int l, int n)
{if(n)
{patrat(xs-l/4,ys-l/4,l/2,n-1);
patrat(xs+3*l/4,ys-l/4,l/2,n-1);
patrat(xs-l/4,ys+3*l/4,l/2,n-1);
patrat(xs+3*l/4,ys+3*l/4,l/2,n-1);
if(n%2==0)
    setfillstyle(1,0);
else setfillstyle(1,15);
delay(10);
bar(xs,ys,xs+l,ys+l);}
}

int main()
{initwindow(800,800);
patrat(350,350,200,5);
delay(100000);
}
2) Triunghiul domnului Sierpinski/y. // not funcţională
http://er.adrianmoisei.com/java/triunghi.html
#include<graphics.h>
#include<iostream>
using namespace std;

void triunghi(int xa,int ya,int xb,int yb,int xc,int yc,int n)
{
if(n){
line(xa,ya,xb,yb);
line(xa,ya,xc,yc);
line(xb,yb,xc,yc);
line((xa+xb)/2,(ya+yb)/2,(xa+xc)/2,(ya+yc)/2);
line((xa+xb)/2,(ya+yb)/2,(xb+xc)/2,(yb+yc)/2);
line((xa+xc)/2,(ya+yc)/2,(xb+xc)/2,(yb+yc)/2);
setfillstyle(1,2);
floodfill((xa+xb+xc)/3,(ya+yb+yc)/3,15);
triunghi((xa+xb)/4,(ya+yb)/4,(xa+xc)/4,(ya+yb)/4,xc/2,yc/2,n-1);
}
}

int main()
{initwindow(801,801);
triunghi(400,0,0,800,800,800,5);
delay(100000);
}
#include<graphics.h>
#include<iostream>
using namespace std;

void triunghi(int xa,int ya,int xb,int yb,int xc,int yc,int n)
{
if(n){
line(xa,ya,xb,yb);
line(xa,ya,xc,yc);
line(xb,yb,xc,yc);
line((xa+xb)/2,(ya+yb)/2,(xa+xc)/2,(ya+yc)/2);
line((xa+xb)/2,(ya+yb)/2,(xb+xc)/2,(yb+yc)/2);
line((xa+xc)/2,(ya+yc)/2,(xb+xc)/2,(yb+yc)/2);
setfillstyle(1,2);
floodfill((xa+xb+xc)/3,(ya+yb+yc)/3,15);
triunghi(3*(xa+xb)/4,(ya+yb)/6,(xa+xc)/8.4,(ya+yc)/4,(xb+xc)/2,(yb+yc)/4,n-1);
}
}

int main()
{initwindow(801,801);
triunghi(400,0,0,800,800,800,5);
delay(100000);
}

by DlMuresan
Categories: , , | Leave a comment

4 mai - algoritm de căutare binară + Tema/5

Algoritm de căutare binară

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

int DI(int x, int st, int dr)
{int m;
if(st>dr)
    return -1;
m=(st+dr)/2;
if(v[m]>x)
    return DI(x,st,m-1);
else if(v[m]<x) return DI(x,m+1,dr);
    else return m;

}

int main()
{int i,x;
cout<<"n=";cin>>n;
cout<<"x=";cin>>x;
for(i=0;i<n;i++)
    cin>>v[i];
cout<<DI(x,0,n-1);}
Vom genera aleator un tablou cu 1000 de elemente distincte. Îl vom ordona strict crescător. Elementele tabloului le vom genera între 1 şi 1 milion. Vom căuta în acest şir m numere naturale pe care le vom genera tot aleator. Pentru fiecare număru căutat vom memora numărul de apeluri ale funcţiei de căutare binară.
#include<iostream>
using namespace std;
int a[100],m[100],mm,apel[100]={0},i,nr,limita;

void fort(int x[], int nr, int limita)
{ int u,p=0,i,ok;
    u=rand()%limita+1;
x[0]=u;
p++;
while(p<nr)
{
    ok=0;
    u=rand()%limita+1;
    for(i=0;i<p;i++)
    {
        if(x[i]==u)
            ok=1;
    }
    if(ok==0)
    {
        x[p]=u;
        p++;
    }
}
}

void ordonare(int x[], int n)
{int i,j;
for(i=0;i<n;i++)
    for(j=i+1;j<n;j++)
        if(x[i]>x[j])
            swap(x[i],x[j]);
}

int binar(int v[],int x, int st, int dr, int &y)
{int m;
if(st>dr)
    return -1;
m=(st+dr)/2;
if(v[m]>x)
    {y++;return binar(v,x,st,m-1,y);}
else if(v[m]<x) {y++;return binar(v,x,m+1,dr,y);}
    else return m;
}

int main()
{
cout<<"nr de elemente ale vectorului mare=";cin>>nr;
cout<<"limita elementelor generate=";cin>>limita;
fort(a,nr,limita);
ordonare(a,nr);
for(i=0;i<nr;i++)
    cout<<a[i]<<" ";
cout<<endl<<endl<<"nr de elemente ale vectorului mic=";cin>>mm;
fort(m,mm,limita);
ordonare(m,mm);
for(i=0;i<mm;i++)
    cout<<m[i]<<" ";
for(i=0;i<mm;i++)
    binar(a,m[i],0,nr-1,apel[i]);
cout<<endl;
for(i=0;i<mm;i++)
    cout<<"Pentru "<<m[i]<<" au fost necesare "<<apel[i]<<" apeluri"<<endl;
}

by DlMuresan
Categories: , , , , | 2 comments