Orar semigroup #2

Orar semigroup #2

5/15 - Coada, Totti

Adaugare, Afisare, Stergere

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

void adaugare(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 afisare(nod* prim)
{if(prim==NULL)
    cout<<"Coada goala";
else while(prim)
{cout<<prim->info<<" | ";
prim=prim->urm;}
cout<<endl;
}

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

int main()
{ifstream f("date");
int x,k;
nod* prim=NULL;
nod* ultim=NULL;
cin>>k;
while(f>>x)
    adaugare(prim,ultim,x);
afisare(prim);
adaugare(prim,ultim,2);
stergere(prim,k);
afisare(prim);
}

luni, 14 mai 2012 by DlMuresan
Categories: | Leave a comment

5/11

Se citesc dintr-un fisier text nr care se pun intr-o stiva. Cate cifre sunt in toate nr din stiva? Sa se construiasca o stiva cu nr prime. Sa se stearga elementele din stiva pana la prima aparitie a maximului. Sa se inverseze stiva.

#include<iostream>
#include<fstream>
using namespace std;
struct nod{
    int info;
    nod* urm;};
  
void afisare(nod* vf)
{if(vf==NULL)
    cout<<"Stiva goala";
else
    while(vf!=NULL)
    {cout<<vf->info<<" ";
    vf=vf->urm;}
}

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

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

int prim(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 main()
{ifstream f("date");
int x,s=0,m=0,mm=0;
nod* vf=NULL,*vf1=NULL,*p;
while(f>>x)
    adaugare(vf,x);
nod* pp=vf;
afisare(vf);
cout<<endl;
vf=pp;
while(vf!=NULL)
    {s=s+nrcif(vf->info);
    if(prim(vf->info))
        adaugare(vf1,vf->info);
    if(vf->info>m)
        m=vf->info;
    vf=vf->urm;}
cout<<s<<" cifre in stiva"<<endl;
afisare(vf1);
cout<<endl;
while(vf1!=NULL)
{    if(vf1->info>mm)
        mm=vf1->info;
    vf1=vf1->urm;}
int ok=1;

vf=pp;
while(vf!=NULL)
{if(vf->urm->info==m)
{    p=vf;
    vf=vf->urm;
    delete p;
    ok=0;}
if(ok==0)
    break;
vf=vf->urm;}

afisare(vf);
cout<<endl;
while(vf1!=NULL)
{if(vf1->info!=mm)
{    p=vf;
    vf1=vf1->urm;
    delete p;}
vf1=vf1->urm;}
afisare(vf1);
cout<<endl<<endl;
}

duminică, 13 mai 2012 by DlMuresan
Categories: | Leave a comment

5/10

Se citesc numere dintr-un fisier text. Scrieti o functie care verifica daca elementul din varful stivei mai apare in stiva. Afisati numarul de elemente pare din stiva. Stergeti elemente din stiva pana la intalnirea unui nr de 3 cifre (care nu se sterge).

#include<iostream>
#include<fstream>
using namespace std;
struct nod{
    int info;
    nod* urm;};
   
void afisare(nod* vf)
{if(vf==NULL)
    cout<<"Stiva goala";
else
    while(vf!=NULL)
    {cout<<vf->info<<" ";
    vf=vf->urm;}
}

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

void verif_vf(nod* vf)
{int x=vf->info,ok=0;
while(vf->urm!=NULL)
{if(vf->urm->info==x)
    ok=1;
vf=vf->urm;}
if(ok==1)
    cout<<x<<" (varful) mai apare in stiva";
else cout<<x<<" (varful) nu mai apare in stiva";
}

int nrpare(nod* vf)
{int i=0;
while(vf!=NULL)
{if(vf->info%2==0)
    i++;
vf=vf->urm;
}
return i;
}

void stergere(nod* &vf)
{nod* p;
while(vf->info>999 || vf->info<100)
{p=vf;
vf=vf->urm;
delete p;}
}

int main()
{nod* vf=NULL;
ifstream f("date");
int x;
while(f>>x)
    adaugare(vf,x);
afisare(vf);
cout<<endl;
verif_vf(vf);
cout<<endl;
cout<<nrpare(vf)<<" nr pare"<<endl;
stergere(vf);
afisare(vf);
}
Sa se inverseze o stiva.  //  NON-FINISHATA
#include<iostream>
#include<fstream>
using namespace std;
struct nod{
    int info;
    nod* urm;};
   
void afisare(nod* vf)
{if(vf==NULL)
    cout<<"Stiva goala";
else
    while(vf!=NULL)
    {cout<<vf->info<<" ";
    vf=vf->urm;}
}

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

void verif_vf(nod* vf)
{int x=vf->info,ok=0;
while(vf->urm!=NULL)
{if(vf->urm->info==x)
    ok=1;
vf=vf->urm;}
if(ok==1)
    cout<<x<<" (varful) mai apare in stiva";
else cout<<x<<" (varful) nu mai apare in stiva";
}

int nrpare(nod* vf)
{int i=0;
while(vf!=NULL)
{if(vf->info%2==0)
    i++;
vf=vf->urm;
}
return i;
}

void STADT_C(nod* &vf)
{nod* p;
while(vf->info>999 || vf->info<100)
{p=vf;
vf=vf->urm;
delete p;}
}

int main()
{nod* vf=NULL;
ifstream f("date");
int x;
while(f>>x)
    adaugare(vf,x);
afisare(vf);
cout<<endl;

int nr=0,i=1,j;
while(vf!=NULL)
{nr++;
vf=vf->urm;}
nod* p=vf;

while(i<nr/2 && vf!=NULL)
{j=1;
p=vf;
    while(j<nr-i)
        {p=p->urm;
        j++;}
    vf->urm=p->urm;
    vf->info=p->info;
    i++;
}
afisare(p);
}

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

5/9

Se citesc nr dintr-un fisier. Sa se creeze doua stive, una cu nr pare, alta cu nr impare. Sa se afiseze stivele. Sa se afiseze nr de elemente din fiecare stiva. Sa se adauge stiva elementelor pare la sfarsitul stivei celor impare.

#include<iostream>
#include<fstream>
using namespace std;
struct nod{
    int info;
    nod *urm;};
  
void afisare(nod* vf)
{if(vf==NULL)
    cout<<"Stiva goala";
while(vf!=NULL){
    cout<<vf->info<<" ";
    vf=vf->urm;}
}

int nr_el(nod* vf)
{int i=0;
while(vf!=NULL)
{i++;
vf=vf->urm;}
return i;
}

void concat(nod* vf1, nod* vf2)
{nod*p=vf1;
    while(p->urm != NULL)
        p=p->urm;
    p->urm=vf2;
}

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

int main()
{nod *par=NULL,*impar=NULL;
ifstream f("date");
int x;
while(f>>x)
    if(x%2==0)
        adaug(x,par);
    else adaug(x,impar);
  
afisare(par);
cout<<endl<<nr_el(par)<<" elemente";
cout<<endl<<endl;
afisare(impar);
cout<<endl<<nr_el(impar)<<" elemente";
cout<<endl<<endl;
concat(impar,par);
afisare(impar);
}
2 copii dau cu zarul. Aruncarile fiecaruia se memoreaza in cate o stiva. Fiecare da cu zarul pana arunca 6. Cel care are mai multe puncte castiga. Afisati:
a) stiva fiecaruia

b) numarul de aruncari ale fiecaruia

c) castigatorul si punctele lui

#include<iostream>
#include<fstream>
using namespace std;
struct nod{
    int info;
    nod *urm;};
   
void afisare(nod* vf)
{if(vf==NULL)
    cout<<"Stiva goala";
while(vf!=NULL){
    cout<<vf->info<<" ";
    vf=vf->urm;}
}

int suma(nod* vf)
{int i=0;
while(vf!=NULL)
{i+=vf->info;
vf=vf->urm;}
return i;
}

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

int main()
{nod *vf1=NULL,*vf2=NULL;
ifstream f("date");
int x;
f>>x;
while(x!=6)
{    adaug(x,vf1);
f>>x;}
f>>x;
while(x!=6)
{adaug(x,vf2);
f>>x;}
   
afisare(vf1);
cout<<endl<<suma(vf1)<<" puncte";
cout<<endl<<endl;
afisare(vf2);
cout<<endl<<suma(vf2)<<" puncte";
cout<<endl<<endl;
if(suma(vf1)>suma(vf2))
    cout<<"Copilul 1 cu "<<suma(vf1);
else if(suma(vf2)>suma(vf1))
    cout<<"Copilul 2 cu "<<suma(vf2);
else cout<<"=";
}

marți, 8 mai 2012 by DlMuresan
Categories: | Leave a comment

5/7

Scrieti o functie care concateneaza doua stive in prima stiva. (adresele varfurilor vor fi param. in functie)

#include<iostream>
#include<fstream>
using namespace std;
struct nod{
    int info;
    nod *urm;};
   
void afisare(nod* vf)
{while(vf!=NULL){
    cout<<vf->info<<" ";
    vf=vf->urm;}
}

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

void creare(nod* &vf, char n[])
{ifstream f(n);
int x;
while(f>>x)
    adaug(x,vf);
}

void concat(nod* vf1, nod* vf2)
{nod*p=vf1;
    while(p->urm != NULL)
        p=p->urm;
    p->urm=vf2;
}

int main()
{nod *vf1=NULL,*vf2=NULL,*p;
creare (vf1,"date");
creare (vf2,"date2");
afisare(vf1);
cout<<endl;
afisare(vf2);
cout<<endl;
concat(vf1,vf2);
cout<<endl;
afisare(vf1);
}

Un fisier text contine mai multe linii de forma: POP x sau PUSH y, reprezentand operatii care trebuie executate asupra unei stive:
POP x => se scot din stiva x numere

PUSH y => se pune in stiva numarul y.

Sa se creeze o stiva asupra careia sa se efectueze toate operatiile specificate.

Sa se verifice daca la sfarsit stiva ramane vida. Obs. Daca nu se poate efectua operatia POP, programul se termina si se afiseaza EROARE.

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

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

void afisare(nod* vf)
{if(vf==NULL)
    cout<<"Stiva vida";
while(vf!=NULL){
    cout<<vf->info<<" ";
    vf=vf->urm;}
}

void POP(int x, nod* &vf)
{int i=0;
nod*p;
while(i<x)
{p=vf;
vf=vf->urm;
i++;
delete p;}
}

int main()
{nod *vf=NULL,*p,*vf2=NULL;
int x,i=0,nr=0;
char s[100];
ifstream f("date");
while(f>>s>>x)
    {if(strcmp(s,"POP")==0)
        if(x>=nr)
            {cout<<"EROARE";return 0;}
        else POP(x,vf);
    else
        if(strcmp(s,"PUSH")==0)
            adaug(x,vf);nr++;
    }
afisare(vf);
}
Fisier
PUSH 1
PUSH 1
PUSH 1
PUSH 1
PUSH 1
POP 1
PUSH 6
POP 3
PUSH 1
POP 3
Se citesc dintr-un fisier text linii de forma: elev clasa numar_absente
a) Creati 4 stive cu elevii si absentele lor, pentru fiecare nivel. (9,10,11,12)

b) Afisati numarul de absente pe nivele

c) Afisati numarul de elevi de pe fiecare nivel

Obs: clasa poate fi: 9A,9B, …12D

#include<iostream>
#include<fstream>
using namespace std;
struct nod{
    char n[20],c[4];
    int na;
    nod *urm;};

void adaug(char n[], char c[], int na, nod* &vf)
{nod* p;
p=new nod;
strcpy(p->n,n);
strcpy(p->c,c);
p->na=na;
p->urm=vf;
vf=p;}

void afisare(nod* vf)
{if(vf==NULL)
    cout<<"Stiva vida";
while(vf!=NULL){
    cout<<vf->n<<" "<<vf->c<<" "<<vf->na<<" ";
    vf=vf->urm;
cout<<endl;}
}

int nr_abs(nod* vf)
{int i=0;
    while(vf!=NULL)
{i+=vf->na;
    vf=vf->urm;}
return i;
}

int nr_el(nod* vf)
{int i=0;
while(vf!=NULL)
{i++;
vf=vf->urm;}
return i;
}

int main()
{nod *vf=NULL,*p,*vf2=NULL;
int na;
char n[20],pr[20],c[4];
nod *vf9=NULL,*vf10=NULL,*vf11=NULL,*vf12=NULL;
ifstream f("date");
while(f>>n)
{f>>c>>na;
if(strncmp(c,"9",1)==0)
    adaug(n,c,na,vf9);
else if(strncmp(c,"10",2)==0)
    adaug(n,c,na,vf10);
else if(strncmp(c,"11",2)==0)
    adaug(n,c,na,vf11);
else if(strncmp(c,"11",2)==0)
    adaug(n,c,na,vf12);
}
cout<<"Clasa 9"<<endl;
afisare(vf9);
cout<<nr_abs(vf9)<<" absente"<<endl;
cout<<nr_el(vf9)<<" elevi"<<endl;
cout<<endl;
cout<<"Clasa 10"<<endl;
afisare(vf10);
cout<<nr_abs(vf10)<<" absente"<<endl;
cout<<nr_el(vf10)<<" elevi"<<endl;
cout<<endl;
cout<<"Clasa 11"<<endl;
afisare(vf11);
cout<<nr_abs(vf11)<<" absente"<<endl;
cout<<nr_el(vf11)<<" elevi"<<endl;
cout<<endl;
cout<<"Clasa 12"<<endl;
afisare(vf12);
cout<<nr_abs(vf12)<<" absente"<<endl;
cout<<nr_el(vf12)<<" elevi"<<endl;
cout<<endl;
}

duminică, 6 mai 2012 by DlMuresan
Categories: | Leave a comment