Stránka: 1 z 1
| [ Príspevkov: 8 ] | |
Autor | Správa |
---|
Registrovaný: 15.04.13 Prihlásený: 17.04.13 Príspevky: 3 Témy: 1 | 1 |
Dobry den, mam takyto problem: vytvoril som si program v c++, klasicky konzolovy. Pouzivam v nom len polia a premenne, nemam tam triedy. Robil som to do skoly ako projekt a veduci mi povedal, ze mam pre to vytvorit graficke rozhranie. Pozeral som na nete, ako sa to da spravit. skusal som Qt creator, lenze ked nemam triedy tak s tym velmi nepochodim, hladal som aj riesenia na googly a nic vhodne som nenasiel. V principe by to graficke rozhranie malo byt jednoduche: nabehne uvodne okno kde zadam pociatocne hodnoty, na zaklade tych hodnot sa vypise tabulka a do tej tabulky zadam hodnoty, tie hodnoty sa mi budu ukladat do pola a na konci sa to pole vypise ako tabulka aj s hodnotami. Preto sa pytam, co by ste mi poradili, cez aky program to urobit, respektive aku kniznicu pouzit. Tu je moj kod, je tam toho viac, ale v principe do premennej pocet_stavov a n zadam rozmery pola, a na zaklade rozmerov by sa vytvorila tabulka, a kazde policko tabulky by bol 1 prvok v poli. Kód: #include <cstdlib> #include <iostream> #include <string> #include <vector> #include <fstream> #include <math.h>
using namespace std; int main(int argc, char *argv[]) { char volba; bool chyba = false; do { cout << "Program sluzi na minimalizaciu uplne urceneho konecneho automatu." << endl; vector< vector<int> > max_triedy; //pocet stavov int pocet_stavov = 0, minimum = 0, maximum = 0, min = 0, abeceda = 0, n = 0, m = 0, q = 0; do { cout << endl << "Zadajte pocet stavov automatu[musi byt vacsi ako 1]: "; cin >> pocet_stavov; if( !cin ) { cout << "Zadali ste znak alebo zlu hodnotu!" << endl; cin.clear(); cin.ignore( 1000, '\n' ); pocet_stavov = -1; } } while( pocet_stavov < 1 ); do { cout << "Zadajte pocet vstupov[z intervalu <0,3>]: "; cin >> n; if( !cin.good() || n < -1 || n > 3 ) { cout << "Zadali ste znak alebo zlu hodnotu!" << endl; cin.clear(); cin.ignore( 1000, '\n' ); n = -2; } } while( !cin.good() || n < -1 || n > 3 ); do { cout << "Zadajte pocet vystupov[z intervalu <1,8>]: "; cin >> q; if( !cin.good() || q < -1 || q > 3 ) { cout << "Zadali ste znak alebo zlu hodnotu!" << endl; cin.clear(); cin.ignore( 1000, '\n' ); q = -2; } } while( !cin.good() || q < -1 || q > 3 ); abeceda = ( int ) pow( 2 , n ); m = ( int ) pow( 2 , q ); maximum = pocet_stavov - 1; min = minimum; int prechody[ pocet_stavov ][ abeceda ]; int vystupy[ pocet_stavov ][ m ]; //Zadavanie povodneho automatu cout << endl << "Stavy musia byt z intervalu < 0 , " << maximum << " > a vystupy musia byt vacsie ako 0."; cout << endl << "Zadavanie prechodovej tabulky povodneho automatu" << endl; cout << "STAV \t Vstup \t Vystup" << endl; cout << "\t"; for( int i = 0; i < abeceda; i++) cout << i << "\t"; for( int i = 0; i < m; i++) cout << i << "\t"; cout << endl; for( int i = 0; i < pocet_stavov; i++ ) { cout << minimum << "\t"; for( int j = 0; j < abeceda; j++ ) { do { chyba = false; cin >> prechody[ i ][ j ]; if( prechody[ i ][ j ] < min || prechody[ i ][ j ] > maximum ) chyba = true; if( !cin.good() || chyba == true ) { cin.clear(); cout << endl << "Zadali ste znak alebo zlu honotu!" << endl; cin.ignore( 1000, '\n' ); chyba = true; } } while( !cin.good() || chyba == true ); chyba = false; } for( int j = 0; j < m; j++ ) { do { chyba = false; cin >> vystupy[ i ][ j ]; if( vystupy[ i ][ j ] < 0 ) chyba = true; if( !cin.good() || chyba == true ) { cin.clear(); cout << endl << "Zadali ste znak alebo zlu honotu!" << endl; cin.ignore( 1000, '\n' ); chyba = true; } } while( !cin.good() || chyba == true ); chyba = false; } minimum++; } minimum = min; int imptab[ pocet_stavov ][ pocet_stavov][ 2 * abeceda ]; bool nachadza = false; //tvorba implikacnej tabulky char impF[ pocet_stavov ][ pocet_stavov ]; for( int i = 1; i < pocet_stavov; i++ ) { for( int j = 0; j < pocet_stavov; j++ ) { impF[ i ][ j ] = '1'; } } for( int i = 0; i < pocet_stavov; i++ ) { nachadza = false; for( int k = 0; k < pocet_stavov; k++ ) { for( int j = 0; j < m; j++ ) { if( vystupy[ i ][ j ] == vystupy[ k ][ j ] ) nachadza = true; else { nachadza = false; break; } } if( nachadza == true ) { impF[ i ][ k ] = '1'; for( int in = 0; in < abeceda; in++ ) { imptab[ i ][ k ][ 2 * in ] = prechody[ i ][ in ]; imptab[ i ][ k ][ ( 2 * in ) + 1 ] = prechody[ k ][ in ]; } } else { impF[ i ][ k ] = 'X'; for( int l = 0; l < 2 * abeceda; l++ ) imptab[ i ][ k ][ l ] = 0; } } } bool zmena = false; do { zmena = false; for( int i = 0; i < pocet_stavov; i++ ) { for( int j = 0; j < pocet_stavov; j++ ) { if( impF[ i ][ j ] == 'X' ) { for( int d = 0; d < pocet_stavov; d++) { for( int k = 0; k < pocet_stavov; k++ ) { if( impF[ d ][ k ] != 'X' ) { for( int l = 0; l < abeceda; l++ ) { if( ( imptab[ d ][ k ][ 2 * l ] == i && imptab[ d ][ k ][ ( 2 * l ) + 1 ] == j ) || ( imptab[ d ][ k ][ 2 * l ] == j && imptab[ d ][ k ][ ( 2 * l ) + 1 ] == i ) ) { impF[ d ][ k ] = 'X'; zmena = true; break; } } } } } } } } } while( zmena == true ); cout << endl; int a = 1; //urcenie ci je povodny automat minimaly a = 1; int pocet = 0; for( int i = 1; i < pocet_stavov; i++ ) { for( int j = 0; j < a; j++ ) { if( impF[ i ][ j ] != 'X' ) pocet++; } a++; } if( pocet == 0) { cout << "Povodny automat" << endl; cout << "STAV \t Vstup \t Vystup" << endl; cout << "\t"; for( int i = 0; i < abeceda; i++) cout << i << "\t"; for( int i = 0; i < m; i++) cout << i << "\t"; cout << endl; minimum = min; for( int i = 0; i < pocet_stavov; i++ ) { cout << minimum << "\t"; for( int j = 0; j < abeceda; j++ ) { cout << prechody[ i ][j ] << "\t"; } for( int j = 0; j < m; j++ ) { cout << vystupy[ i ][j ] << "\t"; } cout << endl; minimum++; } cout << endl << "Zadany automat je minimalny."; } else { //Maximalne triedy for( int u = 0; u < pocet_stavov; u++) { if( u >= max_triedy.size() ) max_triedy.resize( u + 1 ); max_triedy[ u ].push_back( 'A' + u ); } int index = 0, icko = 0, krat = 0, hodnota = 0; for( int i = pocet_stavov - 2; i >= 0; i--) { for( int j = pocet_stavov - 1; j > i; j-- ) { if( impF[j][i] == '1' ) { if( icko == 0) { max_triedy[ index ].push_back( i ); max_triedy[ index ].push_back( j ); icko++; } else max_triedy[ index ].push_back( j ); } } if ( max_triedy[ index ].size() >= 2 ) { for ( int h = 0; h < index; h++ ) { if ( max_triedy[ h ].size() < 2 ) continue; for( int g = 1; g < max_triedy[ h ].size(); g++ ) { if( max_triedy[ h ][ g ] == max_triedy[ index ][ 2 ] ) { max_triedy[ h ].push_back(max_triedy[ index ][ 1 ]); max_triedy[ index ].erase( max_triedy[ index ].begin() + 1, max_triedy[ index ].end() ); index--; break; } } if(max_triedy[index].size()<2) break; } } if ( icko ) index++; icko = 0; krat = 0; } vector<int> isnt; bool zhoda = false; int stavy[ pocet_stavov ]; for( int i = 0; i < pocet_stavov; i++ ) { stavy[ i ] = i; } for( int i = 0; i < pocet_stavov; i++ ) { zhoda = false; for( int vec = 0; vec < max_triedy.size(); vec++ ) { for( int pos = 1; pos < max_triedy[ vec ].size(); pos++ ) { if( max_triedy[ vec ][ pos ] == stavy[ i ] ) { zhoda = true; break; } } } if( zhoda == false) isnt.push_back( stavy[ i ] ); } for( int i = 0; i < isnt.size(); i++ ) { for( int vec = 0; vec < max_triedy.size(); vec++ ) { if( max_triedy[ vec ].size() == 1 ) { max_triedy[ vec ].push_back( isnt[ i ] ); break; } } } for( int vec = 0; vec < max_triedy.size(); vec++ ) { if( max_triedy[ vec ].size() == 1 ) { max_triedy.erase( max_triedy.begin() + vec, max_triedy.end() ); break; } } char automat[ pocet_stavov ][ abeceda ]; char min_automat[ max_triedy.size() ][ abeceda ]; int min_automatV[ max_triedy.size() ][ m ]; int y; for( int i = 0; i < pocet_stavov; i++ ) { for( int j = 0; j < abeceda; j++ ) { for( int vec = 0; vec < max_triedy.size(); vec++ ) { for( y = 1; y < max_triedy[ vec ].size(); y++ ) { if( max_triedy[ vec ][ y ] == prechody[ i ][ j ] ) break; } if( y != max_triedy[ vec ].size() ) { automat[ i ][ j ] = max_triedy[ vec ][ 0 ]; break; } } } } for( int i = 0; i < abeceda; i++ ) { min_automat[ 0 ][ i ] = automat[ 0 ][ i ]; } for( int i = 0; i < m; i++ ) { min_automatV[ 0 ][ i ] = vystupy[ 0 ][ i ]; } int kolko = 1; int x,z; for( int i = 1; i < pocet_stavov; i++ ) { for( x = 0; x < kolko; x++ ) { for( y = 0; y < abeceda; y++ ) { if( min_automat[ x ][ y ] != automat[ i ][ y ] ) break; } for( z = 0; z < m; z++ ) { if( min_automatV[ x ][ z ] != vystupy[ i ][ z ] ) break; } if( y == abeceda && z == m ) break; } if( x == kolko ) { for( int l = 0; l < abeceda; l++) { min_automat[ kolko ][ l ] = automat[ i ][ l ]; } for( int l = 0; l < m; l++) { min_automatV[ kolko ][ l ] = vystupy[ i ][ l ]; } kolko++; } } char *novy_stav; novy_stav = new char[ max_triedy.size() ]; for ( int i = 0; i < max_triedy.size(); i++ ) novy_stav[ i ] = max_triedy[ i ][ 0 ]; char choice; cin.get(); cout << "Chcete vypisat medzivysledky?a/n: "; cin.get( choice ); cout << endl; if( choice == 'a' || choice == 'A' ) { //Vypis implikacnej tabulky cout << "Implikacna tabulka automatu" << endl << endl; a = 1; minimum = min; for( int i = 1; i < pocet_stavov; i++ ) { for( int j = 0; j < a; j++ ) { if( j == 0) cout << min + i << "\t" << impF[ i ][ j ] << "\t"; else cout << impF[ i ][ j ] << "\t"; } a++; cout << endl; } cout << endl; minimum = min; for( int i = 0; i < pocet_stavov - 1; i++ ) { cout << "\t" << minimum; minimum++; } cout << endl << endl; //Vypis priradenia stavov cout << "Priradenie novych stavov" << endl; for ( int u = 0; u < max_triedy.size(); u++ ) { cout << "{ "; for ( int v = 1; v < max_triedy[u].size(); v++ ) { cout << max_triedy[ u ][ v ] << " "; } cout << "} --> " << novy_stav[ u ] << " "; } cout << endl << endl; } //Vypis prechodovej tabulky povodneho automatu cout << "Povodny automat" << endl; cout << "STAV \t Vstup \t Vystup" << endl; cout << "\t"; for( int i = 0; i < abeceda; i++) cout << i << "\t"; for( int i = 0; i < m; i++) cout << i << "\t"; cout << endl; minimum = min; for( int i = 0; i < pocet_stavov; i++ ) { cout << minimum << "\t"; for( int j = 0; j < abeceda; j++ ) { cout << prechody[ i ][j ] << "\t"; } for( int j = 0; j < m; j++ ) { cout << vystupy[ i ][j ] << "\t"; } cout << endl; minimum++; } //Vypis prechodovej tabulky minimalneho automatu cout << endl << "Minimalny automat" << endl; cout << "STAV \t Vstup \t Vystup" << endl; cout << "\t"; for( int i = 0; i < abeceda; i++) cout << i << "\t"; for( int i = 0; i < m; i++) cout << i << "\t"; cout << endl; for( int i = 0; i < max_triedy.size(); i++ ) { cout << novy_stav[ i ] <<"\t"; for( int j = 0; j < abeceda; j++ ) { cout << min_automat[ i ][ j ] << "\t"; } for( int j = 0; j < m; j++ ) { cout << min_automatV[ i ][ j ] << "\t"; } cout << endl; } delete[] novy_stav; } cout << endl << "Chcete minimalizovat iny automat?" << endl << "A - pre ano, iny znak pre nie." << endl << "Vasa volba: "; cin.get(); cin.get( volba ); } while( volba == 'A' || volba == 'a' ); cout << endl << "program by Jozef Jenca" << endl; system("PAUSE"); return EXIT_SUCCESS; } Za kazdu 1 radu dakujem.
|
|
Registrovaný: 05.04.11 Príspevky: 1693 Témy: 50 | 50 Bydlisko: Žilina, Pop... |
"al som Qt creator, lenze ked nemam triedy tak s tym velmi nepochodim,"
_________________ rMBP 13 2015 iPhone 7
|
|
Registrovaný: 24.01.08 Prihlásený: 13.09.17 Príspevky: 14572 Témy: 66 | 66 Bydlisko: Žilina |
Fúúú, takúto špagetu som už dlho nevidel. V prvom rade by som riešil tento kód, potom k nemu robil grafické nadstavby......
_________________ C#, PHP, ... |
|
Registrovaný: 15.04.13 Prihlásený: 17.04.13 Príspevky: 3 Témy: 1 | 1 |
riesil kod myslis, prepisat to na funkcie a triedy?
|
|
Registrovaný: 05.04.11 Príspevky: 1693 Témy: 50 | 50 Bydlisko: Žilina, Pop... |
no veď o tom by predsa malo byť to C++ ako objektové riešenie modelu.
_________________ rMBP 13 2015 iPhone 7
|
|
Registrovaný: 24.01.08 Prihlásený: 13.09.17 Príspevky: 14572 Témy: 66 | 66 Bydlisko: Žilina |
Áno, proste to vyčistiť a použiť princípy OOP. Je pravda, že C++ dovoľuje aj takéto veci, ale určite by som to nepoužíval. Čím čistejší budeš mať kód, tým ľahšie sa ti s ním bude pracovať.
_________________ C#, PHP, ... |
|
Registrovaný: 15.04.13 Prihlásený: 17.04.13 Príspevky: 3 Témy: 1 | 1 |
este taka vec, keby som chcel pouzit nejaku kniznicu, ako bolo v Ccku Allegro na tvorbu hier, dalo by sa to nejako cez nejaku tu kniznicu spravit?
|
|
Registrovaný: 14.03.11 Prihlásený: 04.07.24 Príspevky: 815 Témy: 23 | 23 Bydlisko: Bratislava |
Rýchlejšie to bude napísať znovu (a poriadne). Každý tretí riadok cout a cin...
|
|
Stránka: 1 z 1
| [ Príspevkov: 8 ] | |
Podobné témy | Témy | Odpovede | Zobrazenia | Posledný príspevok |
---|
| v Assembler, C, C++, Pascal, Java | 4 | 2914 | 04.05.2010 14:39 programmer | | v Assembler, C, C++, Pascal, Java | 1 | 314 | 14.04.2013 15:48 programmer | | v Operačné systémy Unix a Linux | 6 | 877 | 10.09.2009 11:52 dudan | | v Novinky | 1 | 512 | 26.04.2007 18:30 OmeGa | | v Assembler, C, C++, Pascal, Java | 1 | 520 | 17.01.2017 22:50 BX | | v Assembler, C, C++, Pascal, Java | 2 | 438 | 27.04.2010 10:20 vama | | v Assembler, C, C++, Pascal, Java | 4 | 348 | 01.05.2013 21:00 chrono | | v Assembler, C, C++, Pascal, Java | 14 | 1237 | 29.01.2015 15:36 petozaba | | v nVidia grafické karty | 20 | 1433 | 01.07.2008 15:39 OmeGa | | v Ostatné | 2 | 816 | 19.03.2009 18:46 Romanko | | v Operačné systémy Microsoft | 3 | 359 | 10.06.2014 22:32 brmbo | | v Krčma | 17 | 1255 | 26.11.2009 22:11 waika | | v Intel čipové sady | 7 | 839 | 11.06.2013 19:40 michalesku | | v Grafické karty | 3 | 757 | 19.08.2009 15:59 dominique | | v SSD disky | 11 | 782 | 22.01.2018 9:02 sajmon.ol. | | v Antivíry a antispywary | 10 | 1249 | 22.03.2009 12:17 mates321 |
|