Zadanie, zliczające wybory i wypisujący średnią
Ostatnio zmodyfikowano 2018-02-14 17:32
rolly98 Temat założony przez niniejszego użytkownika |
Zadanie, zliczające wybory i wypisujący średnią » 2018-02-13 18:47:38 Teoretycznie łatwe zadanie z pierwszego roku studiów. Treść zadania: Napisz program który zliczy wszystkie odpowiedzi "tak", "nie" lub doda odpowiedź jako inną, zapisując odpowiedzi w tablicy do 50 znaków.Słowo "koniec" kończy zliczanie. Przedstaw najwyższy wynik głosowania jako procent wszystkich wypisanych elementów. Dla przykładu jeśli wpiszemy: tak TAK Tak Tttak natak nIE nie ddaad to powinno nam policzyć pięć odpowiedzi "tak", dwie "nie" oraz jedną "inną". Czyli najwięcej jest odpowiedzi tak i stanowią 62.5% całości. Mógłby ktoś wskazać miejsce w którym robię błąd? Kompilator zawsze wyrzuca odpowiedź zero i nie wiem co może być nie tak. Dziękuję z góry za pomoc. #include <iostream> using namespace std; int main() { int tak = 0; int nie = 0; int inne; int elem = 0; bool koniec = 0; bool koniec2 = 0; float wynikobl; cout << "Referendum, wpisz tak lub nie dokonujšc wybor i zakoncz wpisujac slowo koniec"; while( true ) { char * wybor = new char[ 50 ]; int i = 0; cin >> wybor; for( int i = 0; i < 50; i++ ) { if(( wybor[ i ] == 't' || wybor[ i ] == 'T' ) &( wybor[ i + 1 ] == 'a' || wybor[ i + 1 ] == 'A' ) &( wybor[ i + 2 ] == 'k' || wybor[ i + 2 ] == 'K' ) ) { tak++; koniec2 = 1; } else if(( wybor[ i ] == 'n' || wybor[ i ] == 'N' ) &( wybor[ i + 1 ] == 'i' || wybor[ i + 1 ] == 'I' ) &( wybor[ i + 2 ] == 'e' || wybor[ i + 2 ] == 'E' ) ) { nie++; koniec2 = 1; } else if(( wybor[ i ] == 'k' || wybor[ i ] == 'K' ) &( wybor[ i + 1 ] == 'o' || wybor[ i + 1 ] == 'O' ) &( wybor[ i + 2 ] == 'n' || wybor[ i + 2 ] == 'N' ) &( wybor[ i + 3 ] == 'i' || wybor[ i + 3 ] == 'I' ) &( wybor[ i + 4 ] == 'e' || wybor[ i + 4 ] == 'E' ) &( wybor[ i + 5 ] == 'c' || wybor[ i + 5 ] == 'C' ) ) { koniec = 1; koniec2 = 1; } if( koniec2 == 1 ) { i = 49; } } if( koniec == 0 ) { elem++; } delete[] wybor; if( koniec == 1 ) { break; } } inne = elem -( tak + nie ); int maks = 0; char wynik[ 0 ]; if( maks < tak ) { maks = tak; wynik[ 0 ] = 't'; } if( maks < nie ) { maks = nie; wynik[ 0 ] = 'n'; } if( maks < inne ) { maks = inne; wynik[ 0 ] = 'i'; } switch( wynik[ 0 ] ) { case 't': wynikobl =(( tak - elem ) / elem ) * 100; cout << "wygral wynik tak, mial on " << wynikobl; cout << "%"; break; case 'n': wynikobl =(( nie - elem ) / elem ) * 100; cout << "wygral wynik tak, mial on" << wynikobl; cout << "%"; break; case 'i': wynikobl =(( inne - elem ) / elem ) * 100; cout << "wygral wynik tak, mial on" << wynikobl; cout << "%"; break; } return 0; }
|
|
darko202 |
» 2018-02-14 08:41:02 zmień deklarację char wynik[ 0 ]; |
|
garlonicon |
» 2018-02-14 17:32:53 switch( wynik[ 0 ] ) { case 't': wynikobl =(( tak - elem ) / elem ) * 100; cout << "wygral wynik tak, mial on " << wynikobl; cout << "%"; break; case 'n': wynikobl =(( nie - elem ) / elem ) * 100; cout << "wygral wynik tak, mial on" << wynikobl; cout << "%"; break; case 'i': wynikobl =(( inne - elem ) / elem ) * 100; cout << "wygral wynik tak, mial on" << wynikobl; cout << "%"; break; } |
Ciekawe podejście. Cokolwiek się stanie, to i tak "wygral wynik tak" . Referendum w stylu: Czy nie masz nic przeciwko X?
|
A tak na serio, to masz obliczenia na typach int (które zawsze będą z przedziału od 0 do 1, czyli otrzymasz 0% albo 100%). Co prawda na końcu niejawnie rzutujesz całość na float , ale to wciąż nie zmienia faktu, że wyniki pośrednie są liczone jako int . Poza tym, dobrze byłoby wyeliminować tutaj powtórzenia. I jeszcze jedno: skoro elem to wszystkie głosy, to dlaczego odejmujesz je od głosów, których procent chcesz policzyć? |
|
« 1 » |