kburnik

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

Dec 1st, 2012
107
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  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. }
RAW Paste Data

Adblocker detected! Please consider disabling it...

We've detected AdBlock Plus or some other adblocking software preventing Pastebin.com from fully loading.

We don't have any obnoxious sound, or popup ads, we actively block these annoying types of ads!

Please add Pastebin.com to your ad blocker whitelist or disable your adblocking software.

×