Obsah fóra
PravidláRegistrovaťPrihlásenie




Odpovedať na tému [ Príspevkov: 8 ] 
AutorSpráva
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 15.04.13
Prihlásený: 17.04.13
Príspevky: 3
Témy: 1
Príspevok NapísalOffline : 15.04.2013 15:22

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.
Spoiler: zobraziť
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.


Offline

Užívateľ
Užívateľ
graficke rozhranie z existujuceho kodu v c++

Registrovaný: 05.04.11
Príspevky: 1693
Témy: 50
Bydlisko: Žilina, Pop...
Príspevok NapísalOffline : 15.04.2013 15:46

"al som Qt creator, lenze ked nemam triedy tak s tym velmi nepochodim,"







_________________
rMBP 13 2015
iPhone 7
Offline

Skúsený užívateľ
Skúsený užívateľ
graficke rozhranie z existujuceho kodu v c++

Registrovaný: 24.01.08
Prihlásený: 13.09.17
Príspevky: 14572
Témy: 66
Bydlisko: Žilina
Príspevok NapísalOffline : 15.04.2013 15:48

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, ...
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 15.04.13
Prihlásený: 17.04.13
Príspevky: 3
Témy: 1
Príspevok Napísal autor témyOffline : 15.04.2013 16:03

riesil kod myslis, prepisat to na funkcie a triedy?


Offline

Užívateľ
Užívateľ
graficke rozhranie z existujuceho kodu v c++

Registrovaný: 05.04.11
Príspevky: 1693
Témy: 50
Bydlisko: Žilina, Pop...
Príspevok NapísalOffline : 15.04.2013 16:06

no veď o tom by predsa malo byť to C++ ako objektové riešenie modelu.







_________________
rMBP 13 2015
iPhone 7
Offline

Skúsený užívateľ
Skúsený užívateľ
graficke rozhranie z existujuceho kodu v c++

Registrovaný: 24.01.08
Prihlásený: 13.09.17
Príspevky: 14572
Témy: 66
Bydlisko: Žilina
Príspevok NapísalOffline : 15.04.2013 19:18

Á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, ...
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 15.04.13
Prihlásený: 17.04.13
Príspevky: 3
Témy: 1
Príspevok Napísal autor témyOffline : 15.04.2013 22:43

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?


Offline

Užívateľ
Užívateľ
graficke rozhranie z existujuceho kodu v c++

Registrovaný: 14.03.11
Prihlásený: 02.08.23
Príspevky: 814
Témy: 23
Bydlisko: Bratislava
Príspevok NapísalOffline : 17.04.2013 11:35

Rýchlejšie to bude napísať znovu (a poriadne). Každý tretí riadok cout a cin... :oops:


Odpovedať na tému [ Príspevkov: 8 ] 


Podobné témy

 Témy  Odpovede  Zobrazenia  Posledný príspevok 
V tomto fóre nie sú ďalšie neprečítané témy. Ako tvoriť grafické užívateľské rozhranie pre programy v C++

v Assembler, C, C++, Pascal, Java

4

2561

04.05.2010 14:39

programmer Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Eclipse - grafické rozhranie sa nezobrazí

v Assembler, C, C++, Pascal, Java

1

282

14.04.2013 15:48

programmer Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Kubuntu 9.04 - nenabootuje graficke rozhranie

v Operačné systémy Unix a Linux

6

823

10.09.2009 11:52

dudan Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Patent na grafické rozhranie vstáva z mŕtvych

v Novinky

1

479

26.04.2007 18:30

OmeGa Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Skratenie kodu - C++

v Assembler, C, C++, Pascal, Java

1

490

17.01.2017 22:50

BX Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Vlozenie c++ kodu do wordu

v Assembler, C, C++, Pascal, Java

2

394

27.04.2010 10:20

vama Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. C a grafické rozhrahie

v Assembler, C, C++, Pascal, Java

4

311

01.05.2013 21:00

chrono Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. C++ Grafické aplikácie (Hry)

v Assembler, C, C++, Pascal, Java

14

1177

29.01.2015 15:36

petozaba Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Rozhranie

v nVidia grafické karty

20

1382

01.07.2008 15:39

OmeGa Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Rozhranie Aero

v Operačné systémy Microsoft

3

329

10.06.2014 22:32

brmbo Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. rozhranie HDD

v Krčma

17

1194

26.11.2009 22:11

waika Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Web rozhranie

v Ostatné

2

778

19.03.2009 18:46

Romanko Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Vnutorne rozhranie TPM

v Intel čipové sady

7

787

11.06.2013 19:40

michalesku Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. rozhranie ssd disku

v SSD disky

11

726

22.01.2018 9:02

sajmon.ol. Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. rozhranie grafickej karty

v Grafické karty

3

706

19.08.2009 15:59

dominique Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Nejde webove rozhranie routera

v Siete

0

439

27.01.2012 20:39

matustoth Zobrazenie posledných príspevkov


Nemôžete zakladať nové témy v tomto fóre
Nemôžete odpovedať na témy v tomto fóre
Nemôžete upravovať svoje príspevky v tomto fóre
Nemôžete mazať svoje príspevky v tomto fóre

Skočiť na:  

Powered by phpBB Jarvis © 2005 - 2024 PCforum, webhosting by WebSupport, secured by GeoTrust, edited by JanoF
Ako väčšina webových stránok aj my používame cookies. Zotrvaním na webovej stránke súhlasíte, že ich môžeme používať.
Všeobecné podmienky, spracovanie osobných údajov a pravidlá fóra