Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //TP 2016/2017: Zadaća 1, Zadatak 2
- #include <iostream>
- #include <cmath>
- #include <vector>
- #include <deque>
- enum class Smjer {
- Opadajuci=0,
- Rastuci=1
- } smjer;
- bool ProvjeriPodniz(std::deque<std::vector<double>> v2,std::vector<double>v1,int i, int j)
- {
- if(v2.size()==0)
- return true;
- int razlika;
- razlika=j-i;
- int br=0;
- int temp;
- temp=i;
- for(int h=0; h<v2.size(); h++) {
- br=0;
- for(int u=0; u<v2.at(h).size(); u++) {
- if(v2.at(h).at(u)==v1.at(i) && i<=j) {
- br++;
- i++;
- } else {
- br=0;
- i=temp;
- }
- if(br==razlika+1)
- return false;
- }
- }
- return true;
- }
- std::deque<std::vector<double>> MaksimalniBalansiraniPodniz(std::vector <double> v1)
- {
- double suma1=0,suma2=0;
- const double eps=0.01;
- std::deque<std::vector<double>> v2;
- int sprat=0;
- for(int i=0; i<v1.size(); i++) {
- for(int j=v1.size()-1; j>i; j--) {
- suma1=0;
- suma2=0;
- if((j-i)%2!=0 || (i==0 && j%2!=0)) {
- for(int k=i; k<=(j+i)/2; k++) {
- suma1+=v1.at(k);
- }
- for(int k=(j+i)/2+1; k<=j; k++) {
- suma2+=v1.at(k);
- }
- if(fabs(suma1-suma2)<eps && ProvjeriPodniz(v2,v1,i,j)==true) {
- v2.resize(sprat+1);
- v2.at(sprat).resize(j-i+1);
- int g=0;
- for(int k=i; k<=j; k++) {
- v2.at(sprat).at(g)=v1.at(k);
- g++;
- }
- sprat++;
- }
- } else {
- for(int k=i; k<(j+i)/2; k++) {
- suma1+=v1.at(k);
- }
- for(int k=(j+i)/2+1; k<=j; k++) {
- suma2+=v1.at(k);
- }
- if(fabs(suma1-suma2)<eps && ProvjeriPodniz(v2,v1,i,j)==true) {
- v2.resize(sprat+1);
- v2.at(sprat).resize(j-i+1);
- int g=0;
- for(int k=i; k<=j; k++) {
- v2.at(sprat).at(g)=v1.at(k);
- g++;
- }
- sprat++;
- }
- }
- }
- }
- return v2;
- }
- std::deque<std::vector<double>> Transformacija(std::deque<std::vector<double>> v2,Smjer smjer)
- {
- for(int i=0; i<v2.size(); i++) {
- std::deque<std::vector<double>> v3(MaksimalniBalansiraniPodniz(v2.at(i)));
- if(v3.size()==0)
- throw std::domain_error("Dek vektora je neispravan.");
- }
- double temp;
- for(int l=0; l<v2.size(); l++) {
- if(v2.at(l).size()%2!=0 && int(smjer)==0) {
- for(int i=0; i<v2.at(l).size()/2-1; i++) {
- for(int j=i+1; j<v2.at(l).size()/2; j++) {
- if(v2.at(l).at(j)>v2.at(l).at(i)) {
- temp=v2.at(l).at(i);
- v2.at(l).at(i)=v2.at(l).at(j);
- v2.at(l).at(j)=temp;
- }
- }
- }
- for(int i=v2.at(l).size()/2+1; i<v2.at(l).size()-1; i++) {
- for(int j=i+1; j<v2.at(l).size(); j++) {
- if(v2.at(l).at(j)<v2.at(l).at(i)) {
- temp=v2.at(l).at(i);
- v2.at(l).at(i)=v2.at(l).at(j);
- v2.at(l).at(j)=temp;
- }
- }
- }
- } else if(v2.at(l).size()%2!=0 && int(smjer)==1) {
- for(int i=0; i<v2.at(l).size()/2-1; i++) {
- for(int j=i+1; j<v2.at(l).size()/2; j++) {
- if(v2.at(l).at(j)<v2.at(l).at(i)) {
- temp=v2.at(l).at(i);
- v2.at(l).at(i)=v2.at(l).at(j);
- v2.at(l).at(j)=temp;
- }
- }
- }
- for(int i=v2.at(l).size()/2+1; i<v2.at(l).size()-1; i++) {
- for(int j=i+1; j<v2.at(l).size(); j++) {
- if(v2.at(l).at(j)>v2.at(l).at(i)) {
- temp=v2.at(l).at(i);
- v2.at(l).at(i)=v2.at(l).at(j);
- v2.at(l).at(j)=temp;
- }
- }
- }
- } else if(v2.at(l).size()%2==0 && int(smjer)==0) {
- for(int i=0; i<v2.at(l).size()/2-1; i++) {
- for(int j=i+1; j<v2.at(l).size()/2; j++) {
- if(v2.at(l).at(j)>v2.at(l).at(i)) {
- temp=v2.at(l).at(i);
- v2.at(l).at(i)=v2.at(l).at(j);
- v2.at(l).at(j)=temp;
- }
- }
- }
- for(int i=v2.at(l).size()/2; i<v2.at(l).size()-1; i++) {
- for(int j=i+1; j<v2.at(l).size(); j++) {
- if(v2.at(l).at(j)<v2.at(l).at(i)) {
- temp=v2.at(l).at(i);
- v2.at(l).at(i)=v2.at(l).at(j);
- v2.at(l).at(j)=temp;
- }
- }
- }
- } else if(v2.at(l).size()%2==0 && int(smjer)==1) {
- for(int i=0; i<v2.at(l).size()/2-1; i++) {
- for(int j=i+1; j<v2.at(l).size()/2; j++) {
- if(v2.at(l).at(j)<v2.at(l).at(i)) {
- temp=v2.at(l).at(i);
- v2.at(l).at(i)=v2.at(l).at(j);
- v2.at(l).at(j)=temp;
- }
- }
- }
- for(int i=v2.at(l).size()/2; i<v2.at(l).size()-1; i++) {
- for(int j=i+1; j<v2.at(l).size(); j++) {
- if(v2.at(l).at(j)>v2.at(l).at(i)) {
- temp=v2.at(l).at(i);
- v2.at(l).at(i)=v2.at(l).at(j);
- v2.at(l).at(j)=temp;
- }
- }
- }
- }
- }
- return v2;
- }
- int main ()
- {
- std::vector<double> v1;
- std::deque<std::vector<double>> v3;
- std::deque<std::vector<double>> v5;
- int n;
- double broj;
- std::cout<<"Unesite broj elemenata niza: ";
- std::cin>>n;
- std::cout<<"Unesite elemente niza: ";
- for(int i=0; i<n; i++) {
- std::cin>>broj;
- v1.push_back(broj);
- }
- std::cout<<"Unesite tip: (1 - rastuci, 0 - opadajuci): ";
- int cifra;
- std::cin>>cifra;
- v3=MaksimalniBalansiraniPodniz(v1);
- v5=Transformacija(v3, Smjer(cifra));
- std::cout<<"\nMaksimalni balansirani podnizovi: \n";
- for(int i=0; i<v3.size(); i++) {
- for(int j=0; j<v3.at(i).size(); j++) {
- if(j==v3.at(i).size()-1)
- std::cout<<v3.at(i).at(j)<<"\n";
- else {
- std::cout<<v3.at(i).at(j)<<" ";
- }
- }
- }
- std::cout<<"Savrseni balansirani podnizovi nakon transformacije: \n";
- for(int i=0; i<v5.size(); i++)
- for(int j=0; j<v5.at(i).size(); j++)
- if(j==v5.at(i).size()-1)
- std::cout<<v5.at(i).at(j)<<"\n";
- else
- std::cout<<v5.at(i).at(j)<<" ";
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement