Advertisement
kaenan

tema info 1

May 12th, 2014
175
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.04 KB | None | 0 0
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. struct nod
  6.     {
  7.         int info;
  8.         nod *next;
  9.     };
  10.  
  11. nod *p,*u,*x,*z;
  12. int n,m;
  13.  
  14. //Creaza lista sau adauga elemente listei
  15. void mk_ad()
  16. {
  17.     nod *c;
  18.     if(!p)
  19.         {
  20.             p=new nod;
  21.             cout<<"valorea primului nod:";
  22.             cin>>p->info;
  23.             u=p;
  24.         }
  25.     else
  26.         {
  27.             c=new nod;
  28.             cout<<"informatie utila:";
  29.             cin>>c->info;
  30.             u->next=c;
  31.             u=c;
  32.         }
  33.     u->next=0;
  34. }
  35.  
  36. //Afisarea listei
  37. void prt_l()
  38. {
  39.     nod *c;
  40.     c=p;
  41.     while(c)
  42.         {
  43.             cout<<c->info<<" ";
  44.             c=c->next;
  45.         }
  46.     cout<<endl;
  47. }
  48.  
  49. //Verifica daca este prim
  50. int prim(nod *a)
  51. {
  52.     int i=2;
  53.     while(i<=a->info/2)
  54.         {
  55.             if(a->info%i==0)
  56.                 return 0;
  57.             i=i+1;
  58.         }
  59.     return 1;
  60. }
  61.  
  62. //Nr. de elemente prime
  63. int l_nrp(nod *q)
  64. {
  65.     if(q)
  66.         {
  67.             if(prim(q)==1)
  68.                 return 1+l_nrp(q->next);
  69.             else
  70.                 return l_nrp(q->next);
  71.         }
  72.     return 0;
  73. }
  74.  
  75. //Suma elementelor listei
  76. int l_sum(nod *q)
  77. {
  78.     if(q)
  79.         {
  80.             return q->info+l_sum(q->next);
  81.         }
  82.     return 0;
  83. }
  84.  
  85. //Produsul elementelor listei
  86. int l_prod(nod *q)
  87. {
  88.     if(q)
  89.         {
  90.             return q->info*l_prod(q->next);
  91.         }
  92.     return 1;
  93. }
  94.  
  95. //Verifica daca lista este ordonata
  96. int ord()
  97. {
  98.     nod *c,*d;
  99.     c=p;
  100.     d=c->next;
  101.     while(d)
  102.         {
  103.             if((c->info)>(d->info))
  104.                 return 0;
  105.             c=c->next;
  106.             d=d->next;
  107.         }
  108.     return 1;
  109. }
  110.  
  111. //Elementul maxim al listei
  112. int l_max()
  113. {
  114.     int max; nod *c;
  115.     c=p;
  116.     max=c->info;
  117.     c=c->next;
  118.     while(c)
  119.         {
  120.             if(c->info>max)
  121.                 max=c->info;
  122.             c=c->next;
  123.         }
  124.     return max;
  125. }
  126.  
  127. //Creaza o noua lista sau adauga elemente listei
  128. void sec_mkad()
  129. {
  130.     nod *c;
  131.     if(!x)
  132.         {
  133.             x=new nod;
  134.             cout<<"valorea primului nod:";
  135.             cin>>x->info;
  136.             z=x;
  137.         }
  138.     else
  139.         {
  140.             c=new nod;
  141.             cout<<"informatie utila:";
  142.             cin>>c->info;
  143.             z->next=c;
  144.             z=c;
  145.         }
  146.     z->next=0;
  147. }
  148.  
  149. //Suma cifrelor unui numar
  150. int c_sum(int a)
  151. {
  152.     if(a>0)
  153.         return a%10+c_sum(a/10);
  154.     return 0;
  155. }
  156.  
  157. //Dublarea cifrelor cu suma numerelor < 10
  158. void dli()
  159. {
  160.     nod *c,*r,*aux;
  161.     c=p;
  162.     while(c)
  163.         {
  164.             aux=c->next;
  165.             if(c_sum(c->info)<10)
  166.                 {
  167.                     r=new nod;
  168.                     r->info=c->info;
  169.                     r->next=c->next;
  170.                     c->next=r;
  171.                 }
  172.             c=aux;
  173.         }
  174. }
  175.  
  176. int main()
  177. {
  178.     int i;
  179.     nod *q;
  180.     //a. Creaza lista, adauga elemente + afisare
  181.     cout<<"n="; cin>>n;
  182.     for(i=1;i<=n;i++)
  183.         {
  184.             mk_ad();
  185.         }
  186.     cout<<endl; prt_l();
  187.  
  188.  
  189.     //b. Adauga 2 elemente + afisare
  190.     for(i=1;i<=2;i++)
  191.         {
  192.             mk_ad();
  193.         }
  194.     cout<<endl; prt_l();
  195.  
  196.  
  197.     //c. Adauga m elemente + afisare
  198.     cout<<"m="; cin>>m;
  199.     for(i=1;i<=m;i++)
  200.         {
  201.             mk_ad();
  202.         }
  203.     cout<<endl; prt_l();
  204.  
  205.  
  206.     //d. Cate de numere prime sunt in lista
  207.     q=p;
  208.     cout<<"Nr. prime: "<<l_nrp(q)<<endl;
  209.  
  210.  
  211.     //e. Suma + produsul elementelor listei
  212.     cout<<"Suma: "<<l_sum(q)<<"; Produsul: "<<l_prod(q)<<endl;
  213.  
  214.  
  215.     //f. ord?(1/0)
  216.     if(ord()==1)
  217.         cout<<"Lista ordonata"<<endl;
  218.     else
  219.         cout<<"Lista neordonata"<<endl;
  220.  
  221.     //g. Elementul maxim al listei
  222.     cout<<"Maxim: "<<l_max()<<endl;
  223.  
  224.  
  225.     //h. Creaza o noua lista, adauga n elemente + afisare
  226.     cout<<"n=";
  227.     cin>>n;
  228.     for(i=1;i<=n;i++)
  229.         {
  230.             sec_mkad();
  231.         }
  232.     u->next=x;
  233.     u=z;
  234.     cout<<endl;
  235.     prt_l();
  236.  
  237.  
  238.     //i. Dubleaza cif cu s_cif<10
  239.     dli();
  240.     cout<<endl;
  241.     prt_l();
  242.     return 0;
  243. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement