Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- Zadatak: Program za generiranje C++ programa za permutaciju N elemenata
- Složenost: Kvadratna
- Datum: 2012-12-01
- Autor: Kristijan Burnik, udruga informatičara Božo Težak
- Gmail: kristijanburnik
- */
- #include <iostream>
- #include <sstream>
- #include <cstdlib>
- using namespace std;
- // pretvori int u string
- string strof(int n) {
- stringstream ss;
- ss << n;
- return ss.str();
- }
- // generiraj tabove
- string tabovi(int t) {
- return string(t,'\t');
- }
- // stvori if blok
- string _if(string uvjet, string tijelo, int t = 0) {
- string s = tabovi(t) + "if (" + uvjet + " ) {\n"
- + tijelo + "\n" + tabovi(t) + "}";
- return s;
- }
- // stvori for petlju
- string _for(int i, int n, string tijelo, int t = 0) {
- string var = "i["+strof(i)+"]";
- string s = tabovi(t)+ "for ("+var+" = 0; "+var+" < "
- + strof(n) + " ; "+var+"++ ) {\n" + tijelo + "\n" + tabovi(t) + "}";
- return s;
- }
- // stvori uvjet za if blok
- string uvjet(int n) {
- string str = "";
- for (int i = 0; i < n - 1; i++) {
- if (i > 0) str += " && ";
- str += "i[" + strof(i) + "] != i[" + strof(n-1) + "]";
- }
- return str;
- }
- // stvori cin za ulaz
- string ulaz(int n) {
- string str = "cin";
- for (int i = 0; i < n ; i++) {
- str += " >> a[" + strof(i) + "]";
- }
- str += ";\n";
- return str;
- }
- // stvori cout za ispis
- string ispis(int n, int t = 0) {
- string str = tabovi(t) + "cout ";
- for (int i = 0 ; i < n; i++) {
- str += "\n"+ tabovi(t) + "<< a[i[" + strof(i) + "]] << \" \"";
- }
- str += "\n" + tabovi(t) + "<< endl; \n";
- return str;
- }
- int main(int argc, char *argv[]) {
- int n;
- cin >> n;
- string init = "\tint a["+strof(n)+"],i["+strof(n)+"];\n";
- init += "\t" + ulaz(n);
- string sredina = _for( n-1,n, _if( uvjet(n) , ispis(n,n+3), n+2), n+1);
- // cout << sredina;
- string ific ="";
- for (int i = n-2; i >= 0; i--) {
- if (i > 0) {
- ific = _if(uvjet(i+1),sredina,i+2);
- } else {
- ific = sredina;
- }
- sredina = _for (i,n, ific,i+1);
- }
- sredina += "\n\n";
- cout << "#include <iostream>\n#include <cstdlib>\n\n"
- << "using namespace std;\n\nint main(void) {\n";
- cout << "\tcout << \"Unesi\" << " << strof(n)
- << " << \"broj(ev)a:\" << endl;\n";
- cout << init;
- cout << sredina;
- cout << "\tsystem(\"pause\");\n\treturn 0;\n}\n";
- // ako nema ulaznih parametara, pricekaj potvrdu korisnika za kraj
- if (argc == 1) system("pause");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement