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