Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Zadanie, zliczające wybory i wypisujący średnią

Ostatnio zmodyfikowano 2018-02-14 17:32
Autor Wiadomość
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.

C/C++
#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;
}
P-169389
darko202
» 2018-02-14 08:41:02
zmień deklarację
char wynik[ 0 ];
P-169397
garlonicon
» 2018-02-14 17:32:53
C/C++
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?
  • Tak, nie mam nic przeciwko.
  • Nie, nie mam nic przeciwko.
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ć?
P-169398
« 1 »
  Strona 1 z 1