Orar semigroup #2

Orar semigroup #2

Grafica - cronometru DLM

Cronometru DLM

#include <graphics.h>
#include<iostream>
#include <windows.h>
#include <math.h>
int main()
{double p;
    int driver, mod;
    initwindow(1400, 800);
    double midx = getmaxx()/2;
    double midy = getmaxy()/2;
    double x, y, raza, unghi;
    unghi = 0; raza = 200;
    x = cos(unghi)*raza + midx;
    p=x;
    setcolor(15);
    settextstyle(5,HORIZ_DIR,1);
    line(midx,midy-raza,midx,midy-raza+10);
    outtextxy(midx-13,midy-raza-18,"45");
    line(midx,midy+raza,midx,midy+raza-10);
    outtextxy(midx-13,midy+raza+5,"15");
    line(midx+raza,midy,midx+raza-10,midy);
    line(midx-raza,midy,midx-raza+10,midy);
    outtextxy(midx-raza-28,midy-8,"30");
    while(!kbhit())
    {    x = cos(unghi)*raza + midx;
        y = sin(unghi)*raza + midy;
        setcolor(4);
        circle(midx,midy,p-midx);
        setcolor(5);
        line(midx,midy,x,y);
        unghi += 0.00138;
        if(unghi >= 2*M_PI)
            unghi=0;
        delay(10);
        setcolor(0);
        line(midx, midy, x, y);
    }
    closegraph();
    return 0;
}
Varianta cu grafica setata conform http://clasa11info.wikispaces.com/Grafica
#include "graphics2.h"
#include<iostream>
#include <windows.h>
#include <math.h>
int main()
{
int driver, mod;
initgraph(&driver, &mod, "", 1024, 768);
int midx = getmaxx()/2;
int midy = getmaxy()/2;
double p;

double x, y, raza, unghi;
unghi = 0; raza = 200;
x = cos(unghi)*raza + midx;
p=x;
setcolor(15);
settextstyle(5,HORIZ_DIR,1);
line(midx,midy-raza,midx,midy-raza+10);
outtextxy(midx-13,midy-raza-18,"45");
line(midx,midy+raza,midx,midy+raza-10);
outtextxy(midx-13,midy+raza+5,"15");
line(midx+raza,midy,midx+raza-10,midy);
line(midx-raza,midy,midx-raza+10,midy);
outtextxy(midx-raza-28,midy-8,"30");
while(!kbhit())
    {   x = cos(unghi)*raza + midx;
        y = sin(unghi)*raza + midy;
        setcolor(4);
        circle(midx,midy,p-midx);
        setcolor(5);
        line(midx,midy,x,y);
        unghi += 3.14/1900;
        if(unghi >= 2*M_PI)
            unghi=0;
        delay(1);
        setcolor(0);
        line(midx, midy, x, y);
    }
}

joi, 23 iunie 2011 by DlMuresan
Categories: , | Leave a comment

Turnurile din Hanoi

Turnrile din Hanoi

#include<iostream>
using namespace std;
int p=0;
int hanoi(int n, int i, int j)
{ p++;
if(n==1) cout<<i<<"->"<<j<<endl;
else {hanoi(n-1,i,6-i-j);
cout<<i<<"->"<<j<<endl;
hanoi(n-1,6-i-j,j);}
return p;
}
int main()
{int n;
cin>>n;
hanoi(n,1,2);
cout<<p<<" mutari";}

by DlMuresan
Categories: , , , , | Leave a comment

16 mai - probleme teza

Se dau n cutii de forma cubica, pentru care cunoastem latura. Cutiile sunt aliniate in ordine crescatoare a laturii acestora. Se mai da o cutie de latura data L. Dorim sa plasam cutia, intr-una cat mai apropiata ca dimensiune. Sa se afiseze latura acesteia.

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

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

int main()
{int i,L,st,dr;
cout<<"L=";cin>>L;
cout<<"n=";cin>>n;
for(i=0;i<n;i++)
    cin>>x[i];
binar(x,L,0,n-1,st,dr);
cout<<"Plasam cutia de latura "<<L<<" in cutia de latura "<<x[st]<<endl;
//cout<<"dr="<<dr<<endl;
}
Se da un tablou de numere naturale, ordonat strict crescator. Dorim sa inseram in el o valoare data y, doar in cazul in care aceasta nu mai apare in tablou. Sa se afiseze elementele intre care se insereaza.
#include<iostream>
using namespace std;
int x[100],n;
int binar(int a[],int x, int st, int dr, int &c,int &d)
{int m;
c=st;
d=dr;
if(st>dr)
    return -1;
m=(st+dr)/2;
if(a[m]>x)
    return binar(a,x,st,m-1,c,d);
else if(a[m]<x) return binar(a,x,m+1,dr,c,d);
    else return m;
}

int main()
{int i,L,st,dr;
cout<<"L=";cin>>L;
cout<<"n=";cin>>n;
for(i=0;i<n;i++)
    cin>>x[i];
if(binar(x,L,0,n-1,st,dr)==-1)
    cout<<L<<" trebuie inserat intre "<<x[dr]<<" si "<<x[st]<<endl;
else cout<<L<<" exista in vector";
}
Se dau n numere intregi pentru care se cere sa se afiseze modalitatea de calcul a produsului lor prin metoda D&I  Ex: pentru n=5 se va afisa  ((x1*x2)*x3)*(x4*x5)).
#include <iostream>
using namespace std;
int x[100],n;

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

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

marți, 17 mai 2011 by DlMuresan
Categories: | 1 comment

6 mai - stânga/dreapta cu Gorgan + Temă grafică/9 mai

1) Să se afişeze intervalele în care se face căutarea unui element într-un vector ordonat folosind algoritmul de căutare binară.

#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;
cout<<"["<<a[st]<<","<<a[dr]<<"]"<<endl;
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;
}

void eliminare(int a[],int n,int i)
{int j;
for(j=i;j<n-1;j++)
    a[j]=a[j+1];
}
   
int main()
{int n,a[100],st,dr,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<<"Intervale"<<endl;
binar(a,s,0,n-1);
}
2) n copii sunt înşiraţi la ora de sport. Gorgan vrea să aleagă un conducător în felul următor:
- dacă spune dreapta, copiii din dreapta rămân pe loc şi ceilaţi pleacă la vestiare
- dacă spune stânga, copiii din stânga rămân pe loc şi ceilalţi pleacă la vestiare
- copilul din mijloc pleacă şi el la vestiare (dacă numărul de copii este impar)
- ultimul rămas este conducătorul
Cunoscându-se numărul de pe tricouri: 1,2,...,n, să se spună dacă elevul cu numărul y poate deveni conducător şi să se afişeze ce spune profesorul în acest caz. 
#include<iostream>
using namespace std;

void afisare(int a[], int n)
{int i;
for(i=1;i<=n;i++)
    cout<<a[i]<<" ";
}

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;
}

void eliminare(int a[],int &n,int i)
{int j;
for(j=i;j<=n;j++)
    a[j]=a[j+1];
n--;
}
 
int main()
{int n,a[100],st,dr,s,j,i,s1,s2,y,t,g;
cout<<"n=";cin>>n;
cout<<"y=";cin>>y;
for(i=1;i<=n;i++)
    a[i]=i;
cout<<"Afisare elevi"<<endl;
for(i=1;i<=n;i++)
    cout<<a[i]<<" ";
cout<<endl<<endl<<"GORGAN says"<<endl;

while(a[1]!=y || n>1)
{
cout<<n<<" "<<endl;
afisare(a,n);
cout<<endl<<endl;
if(n%2==1 && y==n/2+1)
    {cout<<"Nu poate fi conducator"; return 0;}
if(binar(a,y,1,n)==-1)
    {cout<<"Nu poate fi conducator"; return 0;}
if(binar(a,y,1,n)<=n/2)
    cout<<"stanga "<<endl;
else if(binar(a,y,1,n)>n/2)
    cout<<"dreapta "<<endl;

if(binar(a,y,1,n)<=n/2)
    n=n/2;
else if(binar(a,y,1,n)>n/2)
        {if(n%2==1)
            g=n/2+1;
        else g=n/2;
        for(t=1;t<=g;t++)
            eliminare(a,n,1);
        }
        //afisare(a,n);
}

afisare(a,n);
}
3) Temă grafică
#include<graphics.h>
#include<iostream>
using namespace std;

void patrat(int xs,int ys,int l, int n)
{if(n)
{patrat(xs+3*l/4,ys-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,2);
else setfillstyle(1,10);
delay(10);
bar(xs,ys,xs+l,ys+l);}
}

int main()
{initwindow(800,800);
patrat(20,250,200,10);
delay(100000);
}
4) Sa se modifice algoritmul de cautare binara astfel incat sa se afiseze mesaul DA sau NU in functie de rezultatul cautarii.
#include<iostream>
using namespace std;
char* binar(int a[],int x, int st, int dr)
{int m;
if(st>dr)
    return "NU";
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 "DA";
}

int main()
{int y,n,a[100],i;
cout<<"y=";cin>>y;
cout<<"n=";cin>>n;
for(i=0;i<n;i++)
    cin>>a[i];
cout<<binar(a,y,0,n-1);
}
5) Sa se afiseze stanga sau dreapta.
#include<iostream>
using namespace std;
void binar(int a[],int x, int st, int dr)
{int m;
if(st>dr)
    cout<<"NU";
m=(st+dr)/2;
if(a[m]>x)
{cout<<"stanga";binar(a,x,st,m-1);}
else if(a[m]<x) {cout<<"dreapta";binar(a,x,m+1,dr);}
    else cout<<"DA";
}

int main()
{int y,n,a[100],i;
cout<<"y=";cin>>y;
cout<<"n=";cin>>n;
for(i=0;i<n;i++)
    cin>>a[i];
binar(a,y,0,n-1);
}
6) Sa se afiseze modul de calculare a cmmdc a n numere naturale folosind algoritmul DI.
#include <iostream>
using namespace std;
int x[100],n;

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

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

duminică, 15 mai 2011 by DlMuresan
Categories: , , , , , | Leave a comment

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