tylkolegia Temat założony przez niniejszego użytkownika |
tabelka + i - » 2013-03-22 13:11:59 #include <iostream> #include <cstdlib> #include <ctime>
using namespace std;
#define ILOSC_PYTAN 10 #define ILOSC_TESTOW 2
enum Symbol { e, a, b, c, d };
void Wyswietlaj( Symbol x ); Symbol ElementPrzeciwny( Symbol x ); int SprawdzCzyMozna( Symbol poz_1, char znak, Symbol poz_2 );
struct Pytanie { char OperatorDzialania; Symbol WynikDzialania; };
Pytanie ZbiorPytan[ ILOSC_PYTAN ] = { { '+', a }, { '-', c }, { '+', e }, { '-', d }, { '+', b }, { '-', a }, { '+', c }, { '-', e }, { '+', d }, { '-', b } };
Symbol TabDodawania[ 5 ][ 5 ] = { { e, a, b, c, d }, { a, b, c, d, e }, { b, c, d, e, a }, { c, d, e, a, b }, { b, c, d, e, a } };
Symbol operator +( Symbol x, Symbol y ) { return TabDodawania[ x ][ y ]; }
Symbol operator -( Symbol x, Symbol y ) { Symbol przeciwna = e; while( y + przeciwna != e ) przeciwna = przeciwna + a; return x + przeciwna; }
istream & operator >>( istream & StrmWej, Symbol & WczytSym ) { Symbol TabSymboli[] = { a, b, c, d, e }; char ZnakSymbolu; StrmWej >> ZnakSymbolu; if( ZnakSymbolu <= 'a' && 'e' >= ZnakSymbolu ) { cerr << "Blad! Wprowadzony znak nie odpowiada zadnemu symbolowi" << endl; exit( 1 ); } WczytSym = TabSymboli[ ZnakSymbolu - 'a' ]; return StrmWej; }
ostream & operator <<( ostream & StrmWyj, Symbol x ) { StrmWyj << "eabcd"[ x ]; return StrmWyj; }
void Wyswietlaj( Symbol x ) { if( x == a ) cout << 'a'; if( x == b ) cout << 'b'; if( x == c ) cout << 'c'; if( x == d ) cout << 'd'; if( x == e ) cout << 'e'; }
int SprawdzCzyMozna( Symbol poz_1, char znak, Symbol poz_2 )
{ int czy_blad = 0; if( poz_1 != 'a' && poz_1 != 'b' && poz_1 != 'c' && poz_1 != 'd' && poz_1 != 'e' ) { czy_blad = 1; cout << "ZLE - symbol '" << poz_1 << "' jest niepoprawny" << endl; cout << "masz wpisac a,b,c,d albo e " << endl; cout << "Popraw to" << endl; } if( znak != '+' && znak != '-' ) { czy_blad = 1; cout << "ZLE - znak '" << znak << "' jest niepoprawny" << endl; cout << "masz wpisac znak + lub - " << endl; cout << "Popraw to" << endl; } if( poz_2 != 'a' && poz_2 != 'b' && poz_2 != 'c' && poz_2 != 'd' && poz_2 != 'e' ) { czy_blad = 1; cout << "ZLE - symbol '" << poz_2 << "' jest niepoprawny" << endl; cout << "masz wpisac a,b,c,d albo e" << endl; cout << "Popraw to" << endl; } return czy_blad; }
int main() { Symbol poz_1, poz_2; char znak; int czy_dobrze = 0; int zle_odpowiedzi; float wynik_procentowy; srand( time( 0 ) ); for( int j = 0; j < ILOSC_TESTOW; j++ ) { int i = rand() % 10; if( ZbiorPytan[ i ].OperatorDzialania == '+' ) { cout << "Podaj operacje dodawania, ktorej wynikiem jest: "; Wyswietlaj( ZbiorPytan[ i ].WynikDzialania ); cout << endl; do { cout << "Twoja odpowiedz to: "; cin >> poz_1; cin >> znak; cin >> poz_2; } while( SprawdzCzyMozna( poz_1, znak, poz_2 ) == 0 ); if(( poz_1 + poz_2 ) == ZbiorPytan[ i ].WynikDzialania && znak == '+' ) { czy_dobrze++; cout << "Odpowiedziales poprawnie"; cout << endl; } else { cout << "ZLE - wynikiem tej operacji jest: "; Wyswietlaj( poz_1 + poz_2 ); cout << endl; } } else { cout << "Podaj operacje odejmowania, ktorej wynikiem jest: "; Wyswietlaj( ZbiorPytan[ i ].WynikDzialania ); cout << endl; do { cout << "Twoja odpowiedz to: "; cin >> poz_1; cin >> znak; cin >> poz_2; } while( SprawdzCzyMozna( poz_1, znak, poz_2 ) == 0 ); if(( poz_1 - poz_2 ) == ZbiorPytan[ i ].WynikDzialania && znak == '-' ) { czy_dobrze++; cout << "Odpowiedziales poprawnie"; cout << endl; } else { cout << "ZLE - wynikiem tej operacji jest: "; Wyswietlaj( poz_1 - poz_2 ); cout << endl; } } zle_odpowiedzi = ILOSC_TESTOW - czy_dobrze; wynik_procentowy =( czy_dobrze * 100 ) / ILOSC_TESTOW; } cout << endl << "Koniec testu" << endl << endl; cout << "Dobre odpowiedzi: " << czy_dobrze << endl; cout << "Zle odpowiedzi: " << zle_odpowiedzi << endl; cout << "Wynik procentowy poprawnych odpowiedzi: " << wynik_procentowy << "%" << endl; cout << "Tyle statystyk, dzieki!" << endl; }
Program kompiluje sie bez zastrzezen ( prawie ) w visuala i dziala, natomiast nawet jesli wprowadzam dobre symbole to i tak za kazdym razem wyskakuje "ZLE - wprowadziles bledny symbol " i to 2 razy :/ Problem tkwi w funkcji SprawdzCzyMozna, jest zle chyba wkomponowana w calosc, nie wiem czy to while( SprawdzCzyMozna( poz_1, znak, poz_2 ) == 0 ); tak moze byc wpiete do maina, licze na pomoc. |