Advertisement
hahahah231241

Zadaca II

Apr 5th, 2020
418
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 7.23 KB | None | 0 0
  1. //TP 2016/2017: Zadaća 1, Zadatak 2
  2. #include <iostream>
  3. #include <cmath>
  4. #include <vector>
  5. #include <deque>
  6. enum class Smjer {
  7.     Opadajuci=0,
  8.     Rastuci=1
  9. } smjer;
  10. bool ProvjeriPodniz(std::deque<std::vector<double>> v2,std::vector<double>v1,int i, int j)
  11. {
  12.     if(v2.size()==0)
  13.         return true;
  14.     int razlika;
  15.     razlika=j-i;
  16.     int br=0;
  17.     int temp;
  18.     temp=i;
  19.     for(int h=0; h<v2.size(); h++) {
  20.         br=0;
  21.         for(int u=0; u<v2.at(h).size(); u++) {
  22.             if(v2.at(h).at(u)==v1.at(i) && i<=j) {
  23.                 br++;
  24.                 i++;
  25.             } else {
  26.                 br=0;
  27.                 i=temp;
  28.             }
  29.             if(br==razlika+1)
  30.                 return false;
  31.  
  32.         }
  33.     }
  34.     return true;
  35. }
  36. std::deque<std::vector<double>> MaksimalniBalansiraniPodniz(std::vector <double> v1)
  37. {
  38.     double suma1=0,suma2=0;
  39.     const double eps=0.01;
  40.     std::deque<std::vector<double>> v2;
  41.     int sprat=0;
  42.     for(int i=0; i<v1.size(); i++) {
  43.         for(int j=v1.size()-1; j>i; j--) {
  44.             suma1=0;
  45.             suma2=0;
  46.             if((j-i)%2!=0 || (i==0 && j%2!=0)) {
  47.                 for(int k=i; k<=(j+i)/2; k++) {
  48.                     suma1+=v1.at(k);
  49.                 }
  50.                 for(int k=(j+i)/2+1; k<=j; k++) {
  51.                     suma2+=v1.at(k);
  52.                 }
  53.                 if(fabs(suma1-suma2)<eps && ProvjeriPodniz(v2,v1,i,j)==true) {
  54.                     v2.resize(sprat+1);
  55.                     v2.at(sprat).resize(j-i+1);
  56.                     int g=0;
  57.                     for(int k=i; k<=j; k++) {
  58.                         v2.at(sprat).at(g)=v1.at(k);
  59.                         g++;
  60.                     }
  61.                     sprat++;
  62.                 }
  63.             } else {
  64.                 for(int k=i; k<(j+i)/2; k++) {
  65.                     suma1+=v1.at(k);
  66.                 }
  67.                 for(int k=(j+i)/2+1; k<=j; k++) {
  68.                     suma2+=v1.at(k);
  69.                 }
  70.                 if(fabs(suma1-suma2)<eps && ProvjeriPodniz(v2,v1,i,j)==true) {
  71.                     v2.resize(sprat+1);
  72.                     v2.at(sprat).resize(j-i+1);
  73.                     int g=0;
  74.                     for(int k=i; k<=j; k++) {
  75.                         v2.at(sprat).at(g)=v1.at(k);
  76.                         g++;
  77.                     }
  78.                     sprat++;
  79.                 }
  80.             }
  81.         }
  82.  
  83.     }
  84.     return v2;
  85. }
  86. std::deque<std::vector<double>> Transformacija(std::deque<std::vector<double>> v2,Smjer smjer)
  87. {
  88.     for(int i=0; i<v2.size(); i++) {
  89.         std::deque<std::vector<double>> v3(MaksimalniBalansiraniPodniz(v2.at(i)));
  90.         if(v3.size()==0)
  91.             throw std::domain_error("Dek vektora je neispravan.");
  92.     }
  93.     double temp;
  94.     for(int l=0; l<v2.size(); l++) {
  95.         if(v2.at(l).size()%2!=0 && int(smjer)==0) {
  96.             for(int i=0; i<v2.at(l).size()/2-1; i++) {
  97.                 for(int j=i+1; j<v2.at(l).size()/2; j++) {
  98.                     if(v2.at(l).at(j)>v2.at(l).at(i)) {
  99.                         temp=v2.at(l).at(i);
  100.                         v2.at(l).at(i)=v2.at(l).at(j);
  101.                         v2.at(l).at(j)=temp;
  102.                     }
  103.                 }
  104.             }
  105.             for(int i=v2.at(l).size()/2+1; i<v2.at(l).size()-1; i++) {
  106.                 for(int j=i+1; j<v2.at(l).size(); j++) {
  107.                     if(v2.at(l).at(j)<v2.at(l).at(i)) {
  108.                         temp=v2.at(l).at(i);
  109.                         v2.at(l).at(i)=v2.at(l).at(j);
  110.                         v2.at(l).at(j)=temp;
  111.                     }
  112.                 }
  113.             }
  114.         } else if(v2.at(l).size()%2!=0 && int(smjer)==1) {
  115.             for(int i=0; i<v2.at(l).size()/2-1; i++) {
  116.                 for(int j=i+1; j<v2.at(l).size()/2; j++) {
  117.                     if(v2.at(l).at(j)<v2.at(l).at(i)) {
  118.                         temp=v2.at(l).at(i);
  119.                         v2.at(l).at(i)=v2.at(l).at(j);
  120.                         v2.at(l).at(j)=temp;
  121.                     }
  122.                 }
  123.             }
  124.             for(int i=v2.at(l).size()/2+1; i<v2.at(l).size()-1; i++) {
  125.                 for(int j=i+1; j<v2.at(l).size(); j++) {
  126.                     if(v2.at(l).at(j)>v2.at(l).at(i)) {
  127.                         temp=v2.at(l).at(i);
  128.                         v2.at(l).at(i)=v2.at(l).at(j);
  129.                         v2.at(l).at(j)=temp;
  130.                     }
  131.                 }
  132.             }
  133.  
  134.  
  135.         } else if(v2.at(l).size()%2==0 && int(smjer)==0) {
  136.             for(int i=0; i<v2.at(l).size()/2-1; i++) {
  137.                 for(int j=i+1; j<v2.at(l).size()/2; j++) {
  138.                     if(v2.at(l).at(j)>v2.at(l).at(i)) {
  139.                         temp=v2.at(l).at(i);
  140.                         v2.at(l).at(i)=v2.at(l).at(j);
  141.                         v2.at(l).at(j)=temp;
  142.                     }
  143.                 }
  144.             }
  145.             for(int i=v2.at(l).size()/2; i<v2.at(l).size()-1; i++) {
  146.                 for(int j=i+1; j<v2.at(l).size(); j++) {
  147.                     if(v2.at(l).at(j)<v2.at(l).at(i)) {
  148.                         temp=v2.at(l).at(i);
  149.                         v2.at(l).at(i)=v2.at(l).at(j);
  150.                         v2.at(l).at(j)=temp;
  151.                     }
  152.                 }
  153.             }
  154.         } else if(v2.at(l).size()%2==0 && int(smjer)==1) {
  155.             for(int i=0; i<v2.at(l).size()/2-1; i++) {
  156.                 for(int j=i+1; j<v2.at(l).size()/2; j++) {
  157.                     if(v2.at(l).at(j)<v2.at(l).at(i)) {
  158.                         temp=v2.at(l).at(i);
  159.                         v2.at(l).at(i)=v2.at(l).at(j);
  160.                         v2.at(l).at(j)=temp;
  161.                     }
  162.                 }
  163.             }
  164.             for(int i=v2.at(l).size()/2; i<v2.at(l).size()-1; i++) {
  165.                 for(int j=i+1; j<v2.at(l).size(); j++) {
  166.                     if(v2.at(l).at(j)>v2.at(l).at(i)) {
  167.                         temp=v2.at(l).at(i);
  168.                         v2.at(l).at(i)=v2.at(l).at(j);
  169.                         v2.at(l).at(j)=temp;
  170.                     }
  171.                 }
  172.             }
  173.         }
  174.  
  175.     }
  176.     return v2;
  177. }
  178. int main ()
  179. {
  180.     std::vector<double> v1;
  181.     std::deque<std::vector<double>> v3;
  182.     std::deque<std::vector<double>> v5;
  183.     int n;
  184.     double broj;
  185.     std::cout<<"Unesite broj elemenata niza: ";
  186.     std::cin>>n;
  187.     std::cout<<"Unesite elemente niza: ";
  188.     for(int i=0; i<n; i++) {
  189.         std::cin>>broj;
  190.         v1.push_back(broj);
  191.     }
  192.     std::cout<<"Unesite tip: (1 - rastuci, 0 - opadajuci): ";
  193.     int cifra;
  194.     std::cin>>cifra;
  195.     v3=MaksimalniBalansiraniPodniz(v1);
  196.     v5=Transformacija(v3, Smjer(cifra));
  197.     std::cout<<"\nMaksimalni balansirani podnizovi: \n";
  198.     for(int i=0; i<v3.size(); i++) {
  199.         for(int j=0; j<v3.at(i).size(); j++) {
  200.             if(j==v3.at(i).size()-1)
  201.                 std::cout<<v3.at(i).at(j)<<"\n";
  202.             else {
  203.                 std::cout<<v3.at(i).at(j)<<" ";
  204.             }
  205.         }
  206.     }
  207.     std::cout<<"Savrseni balansirani podnizovi nakon transformacije: \n";
  208.     for(int i=0; i<v5.size(); i++)
  209.         for(int j=0; j<v5.at(i).size(); j++)
  210.             if(j==v5.at(i).size()-1)
  211.                 std::cout<<v5.at(i).at(j)<<"\n";
  212.             else
  213.                 std::cout<<v5.at(i).at(j)<<" ";
  214.     return 0;
  215. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement