Advertisement
kburnik

C++ - Program za generiranje C++ programa za permutacije

Dec 1st, 2012
146
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.72 KB | None | 0 0
  1. /*
  2.     Zadatak: Program za generiranje C++ programa za permutaciju N elemenata
  3.  
  4.     Složenost: Kvadratna
  5.  
  6.     Datum: 2012-12-01
  7.  
  8.     Autor: Kristijan Burnik, udruga informatičara Božo Težak
  9.  
  10.     Gmail: kristijanburnik
  11.  
  12. */
  13. #include <iostream>
  14. #include <sstream>
  15. #include <cstdlib>
  16.  
  17.  
  18. using namespace std;
  19.  
  20. // pretvori int u string
  21. string strof(int n) {
  22.     stringstream ss;
  23.     ss << n;
  24.     return ss.str();
  25. }
  26.  
  27. // generiraj tabove
  28. string tabovi(int t) {
  29.     return string(t,'\t');
  30. }
  31.  
  32. // stvori if blok
  33. string _if(string uvjet, string tijelo, int t = 0) {
  34.    
  35.     string s = tabovi(t) + "if (" + uvjet +  " ) {\n"
  36.           + tijelo + "\n" + tabovi(t) + "}";
  37.     return s;
  38. }
  39.  
  40. // stvori for petlju
  41. string _for(int i, int n, string tijelo, int t = 0) {
  42.     string var = "i["+strof(i)+"]";
  43.  
  44.     string s = tabovi(t)+ "for ("+var+" = 0; "+var+" < "
  45.         + strof(n) + " ; "+var+"++ ) {\n"  + tijelo + "\n" + tabovi(t) + "}";
  46.     return s;
  47. }
  48.  
  49. // stvori uvjet za if blok
  50. string uvjet(int n) {
  51.     string str = "";
  52.     for (int i = 0; i < n - 1; i++) {
  53.         if (i > 0) str += " && ";
  54.         str += "i[" + strof(i) + "] != i[" + strof(n-1) + "]";
  55.     }
  56.     return str;
  57. }
  58.  
  59. // stvori cin za ulaz
  60. string ulaz(int n) {    
  61.       string str = "cin";
  62.        for (int i = 0; i < n ; i++) {      
  63.         str += " >> a[" + strof(i) + "]";
  64.     }
  65.     str += ";\n";
  66.     return str;
  67. }
  68.  
  69. // stvori cout za ispis
  70. string ispis(int n, int t = 0) {
  71.     string str = tabovi(t) + "cout ";
  72.     for (int i = 0 ; i < n; i++) {
  73.         str += "\n"+ tabovi(t) + "<< a[i[" + strof(i) + "]] << \" \"";
  74.     }
  75.     str += "\n" + tabovi(t) + "<< endl; \n";
  76.     return str;
  77. }
  78.  
  79. int main(int argc, char *argv[]) {
  80.     int n;
  81.     cin >> n;
  82.    
  83.     string init = "\tint a["+strof(n)+"],i["+strof(n)+"];\n";
  84.     init += "\t" + ulaz(n);
  85.    
  86.     string sredina = _for( n-1,n, _if( uvjet(n) , ispis(n,n+3), n+2), n+1);
  87.   //  cout << sredina;
  88.    
  89.     string ific ="";
  90.     for (int i = n-2; i >= 0; i--) {
  91.             if (i > 0) {
  92.                 ific = _if(uvjet(i+1),sredina,i+2);
  93.             } else {
  94.                 ific = sredina;    
  95.             }
  96.             sredina = _for (i,n, ific,i+1);
  97.     }
  98.    
  99.     sredina += "\n\n";
  100.    
  101.    
  102.     cout << "#include <iostream>\n#include <cstdlib>\n\n"
  103.             << "using namespace std;\n\nint main(void) {\n";
  104.            
  105.     cout << "\tcout << \"Unesi\" << " << strof(n)
  106.              << " << \"broj(ev)a:\" << endl;\n";
  107.              
  108.     cout << init;
  109.     cout << sredina;
  110.    
  111.     cout << "\tsystem(\"pause\");\n\treturn 0;\n}\n";
  112.  
  113.     // ako nema ulaznih parametara, pricekaj potvrdu korisnika za kraj
  114.     if (argc == 1) system("pause");
  115.     return 0;
  116. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement