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

Problem z napisaniem wyjątków w funkcji

Ostatnio zmodyfikowano 2016-11-20 22:12
Autor Wiadomość
yamaha
Temat założony przez niniejszego użytkownika
Problem z napisaniem wyjątków w funkcji
» 2016-11-18 00:52:14
Witam. Mam pewien problem z zadaniem. Mam do napisania program, który zlicza głosy. Najpierw wprowadzam do niego liczby oddzielone spacją n m(np 4 15). Pierwsza oznacza liczbę kandydatów, a druga liczbę głosów (1<=n<=1000 1<=m<=100000000). Potem podaje się liczby oddzielone spacjami, z których każda z nich oznacza głos na danego kandydata (np 5 5 4 1 1) -> dwa głosy na kandydata nr 5, jeden na nr 4, dwa na nr 1. (0 to głos nieważny). O ile udało mi się napisać funkcję, która liczy głosy bez występowania zer, to nie wiem jak uwzględnić to, żeby 1)gdy mam same zera (czyli wszystkie głosy nieważne) to na wyjściu mam mieć indeksy wszystkich kandydatów (bo każdy wygrał tak jakby) 2) jeżeli najwięcej jest zer, to ma mi na wyjsciu wyswietlic indeks gdzie jest najwiecej, ale oprocz zer (logiczne: 10 głosów nieważnych i 4 głosy na kandydata nr 1 to wygrywa nr 1). 3). Uprzedzając pytanie: dane wejściowe są zawsze poprawne (nie trzeba sprawdzac czy wejscie jest OK). Wklejam kawałek kodu, który zdołałem napisać:

C/C++
#include <iostream>
using namespace std;

const int kandydaci = 1001;

int main()
{
    int m, n, k, max;
    int tab[ kandydaci ];
    cin >> n >> m;
   
    for( int i = 0; i < m; i++ )
    {
        cin >> k;
        tab[ k ] ++;
    }
   
   
    max = tab[ 0 ];
    for( int i = 0; i <= n; i++ )
    {
        if( tab[ i ] > max )
        {
            max = tab[ i ];
        }
    }
   
   
    for( int i = 1; i <= n; i++ )
    {
        if( tab[ i ] == max )
        {
            cout << i << " ";
        }
    }
    return 0;
}
P-153880
karambaHZP
» 2016-11-18 07:28:24
1. tab[0] będzie równy liczbie głosów i wyświetlasz po kolei liczby od 1 do liczby kandydatów.
2. Nie rozumiem, po co wyświetlać liczbę nieważnych głosów. Choćby ich było 14 na 15, to i tak ważny jest ten jeden dla kandydata. Wyszukaj maks głosów od indeksu nr 1.

Jeśli nie ma jakiegoś narzutu czasowego, skorzystaj z std::map.
P-153881
mateczek
» 2016-11-18 07:42:10
jeśli masz same głosy nieważne to znaczy spełniony jest warunek
tab[ 0 ] == m

większość głosów nieważnych
tab[ 0 ] > m / 2
P-153883
yamaha
Temat założony przez niniejszego użytkownika
» 2016-11-18 22:27:16
No dobra.  Próbowałem już wpisać
C/C++
if( tab[ 0 ] == m ) // czyli liczbie głosów
{ for( int i = 1; i < m; i++ )
    { cout << i << " "; }
    return 0 }
 Coś w tym stylu.  Tylko nie wiem w którym miejscu coś takiego ma być. Próbowałem już po pierwszej lub drugiej pętli" for",  ale nic z tego nie wychodziło.
P-153911
czaffik
» 2016-11-18 23:24:04
1. Bo musisz zastosować instrukcję warunkową, jeśli tab[0] == m to wyświetl indeksy wszystkich  kandydatów, ewentualnie informację że wybory trzeba powtórzyć xD, w przeciwnym wypadku wyświetl tego który wygrał.
C/C++
if( tab[ 0 ] == m )
{
    cout << "wszyscy przegrali" << endl;
}
else
{
    for( int i = 0; i <= n; i++ )
    {
        if( tab[ i ] == max )
        {
            cout << "wygral kandydat: " << i << " ";
        }
    }
}
2. W tym przypadku wystarczy że będziesz szukał największego elementu tablicy od indeksu nr 1 a nie od indeksu nr 0. Czyli w 18 i 19 linijce swojego kodu zmień 0 na 1.
3. Zapmniałem dodać, wyzeruj tablice kandydatów na początku bo bzdury otrzymujesz.
P-153914
yamaha
Temat założony przez niniejszego użytkownika
» 2016-11-20 15:46:03
Wyzeruj tablice kadydatów, czyli co mam zrobić? Nie jestem w tym dobry, więc nie wiem o co chodzi.
P-153976
karambaHZP
» 2016-11-20 16:26:00
Wyzeruj tablice kadydatów, czyli co mam zrobić?
int tab[ kandydaci ] { };

lub ręcznie ustaw wszystkie wartości w tablicy na 0, aby dodawanie zaczynać od 0, a nie przypadkowej wartości.
P-153977
yamaha
Temat założony przez niniejszego użytkownika
» 2016-11-20 16:30:05
Ok, to na samym początku funkcji wyzerować? Tuż po zainicjowaniu tejże tablicy?
P-153978
« 1 » 2
  Strona 1 z 2 Następna strona