Orar semigroup #2

Orar semigroup #2

5/18

Se citesc dintr-un fisier nr. Sa se creeze o coada cu nr prime si o stiva cu cele neprime. Sa se inlocuiasca fiecare nr din coada cu nr de cifre ale lui. Sa se stearga din stiva nr pana la intalnirea unui nr de 2 cifre. Cate nr s-au sters? Sa se concateneze elementele din coada la sfarsitul stivei. Sa ase afiseze noua stiva.

#include<iostream>
#include<fstream>
using namespace std;
struct nod{int info;
nod* urm;};

void adaugare_coada(nod* &prim,nod* &ultim,int x)
{nod* p=new nod;
p->info=x;
p->urm=NULL;
if(prim==NULL)
    prim=p;
else ultim->urm=p;
ultim=p;}

void stergere(nod* &prim)
{nod* p;
p=prim;
prim=prim->urm;
delete p;
}

void adaugare_stiva(nod* &vf, int x)
{nod* p;
p=new nod;
p->info=x;
p->urm=vf;
vf=p;}

void afisare(nod* vf)
{if(vf==NULL)
    cout<<"Stiva/Coada goala";
else
    while(vf!=NULL)
    {cout<<vf->info<<" | ";
    vf=vf->urm;}
    cout<<endl;
}

int primm(int n)
{int d,i,ok=1;
if(n==1 || n==0)
    return 0;
for(d=2;d<=n/2;d++)
    if(n%d==0)
        ok=0;
return ok;}

int nrcif(int x)
{int i=0;
while(x)
{i++;x=x/10;}
return i;}

int main()
{ifstream f("date");
nod* prim=NULL;
nod* ultim;
nod* vf=NULL;
int x;
while(f>>x)
    if(primm(x))
        adaugare_coada(prim,ultim,x);
    else adaugare_stiva(vf,x);
cout<<"Coada"<<endl;
afisare(prim);
cout<<"Stiva"<<endl;
afisare(vf);

nod*p=prim;
while(p)
{p->info=nrcif(p->info);
p=p->urm;}
cout<<"Noua coada"<<endl;
afisare(prim);
int j=0;
while(vf)
{if(nrcif(vf->info)!=2)
    {stergere(vf);j++;}
else break;
}
cout<<"Noua stiva"<<endl;
afisare(vf);
cout<<"S-au sters "<<j<<" elemente din stiva"<<endl;
cout<<"Stiva concatenata cu coad"<<endl;
while(prim)
{adaugare_stiva(vf,prim->info);
prim=prim->urm;}
afisare(vf);
}

joi, 17 mai 2012 by DlMuresan
Categories: , | Leave a comment

Leave a Reply