• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Program liczący głosy w ankiecie

Aruba Cloud - Virtual Private Server VPS
0 głosów
991 wizyt
pytanie zadane 16 kwietnia 2016 w C i C++ przez kazik8980 Użytkownik (810 p.)

Witam!

Dzisiaj skończyłem czytać rozdział w książce o programowaniu. Dotyczył on pętli. Pod koniec rozdziału znajdowało się zadanie dotyczące stworzenia ankiety która sumuje oddane głosy i wyświetla wyniki po wpisaniu 0. Tutaj jest moj kod:

#include <iostream>

using namespace std;

int main()
{
    int glos=1;
    int wynika;
    int wynikb;
    int wynikc;
    cout << "Witaj!" << endl;
    cout << "Nasz program umozliwia sumowanie wynikow ankiety!" << endl;
    cout << "Wpisz wyniki ankiety: " << endl;
    do{cout << "1. pytanie" << endl;
    cout << "2. pytanie" << endl;
    cout << "3. pytanie" << endl;
    cin >> glos;
    if (glos==1)
    {
        cout << wynika+glos << endl;
    }
    if (glos==2)
    {
        cout << wynikb+glos << endl;
    }
    if (glos==3)
    {
        cout << wynikc+glos << endl;
    } }while (glos!=0);
    return 0;
}

I teraz mam pytanie. Co zrobić aby te glosy się sumowały?
Za każdym razem pokazuje mi się bardzo duża liczba.
Z góry dziękuję!

3 odpowiedzi

0 głosów
odpowiedź 16 kwietnia 2016 przez Barus Stary wyjadacz (14,120 p.)
wybrane 16 kwietnia 2016 przez kazik8980
 
Najlepsza
Przy deklaracji zmiennej "glos" usuń "=1" (przecież wartość zmiennej podajesz przed instrukcjami warunkowymi, więc nie trzeba jej nic przypisywać), natomiast zmiennym "wynika", "wynikb" i "wynikc" przypisz wartość "=0" przy deklaracji. :)

Pozdrawiam!
komentarz 16 kwietnia 2016 przez kazik8980 Użytkownik (810 p.)

tak jak już wyżej napisałem w komentarzu zmieniłem wartości zmiennych "wynika", "wynikb" i "wynikc" 
ale program jeszcze musi pokazać po wpisaniu 0 wyniki dla poszczególnych odpowiedzi

 

komentarz 16 kwietnia 2016 przez Barus Stary wyjadacz (14,120 p.)
Chcesz po wykonaniu pętli wyświetlić wyniki dla tych trzech zmiennych, tak ?
komentarz 16 kwietnia 2016 przez kazik8980 Użytkownik (810 p.)
Tak. Po w wpisaniu 0 glosy maja być zliczone dla tych trzech zmiennych
np. głosy na odp. 1: 5
głosy na odp. 2: 1
głosy na odp. 3: 9
komentarz 16 kwietnia 2016 przez Barus Stary wyjadacz (14,120 p.)

Tak więc przy każdym "if" jeszcze przed "cout" zamiast np. "wynika+glos" musisz napisać wynika+=glos (to jest równoznaczne z zapisem wynika=wynika+glos). Musi to wyglądać mniej-więcej tak :

if (glos==1)
    {
        wynika+=glos
        cout << wynika<< endl;
    }

I tak przy każdym if'ie (te cout'y w if'ach nie są Ci tak naprawdę potrzebne). Natomiast po wykonaniu pętli wypisujesz te zmienne cout'em. 

//po wykonaniu petli

cout<<wynika<<endl;
cout<<wynikb<<endl;
cout<<wynikc<<endl;

Pozdrawiam! 

komentarz 16 kwietnia 2016 przez kazik8980 Użytkownik (810 p.)
Dziękuję!
O to właśnie chodziło!

Jeszcze raz dziękuję i pozdrawiam!
komentarz 16 kwietnia 2016 przez Barus Stary wyjadacz (14,120 p.)
Nie ma sprawy. Powodzenia w dalszej przygodzie z programowaniem :)

Pozdrawiam!
0 głosów
odpowiedź 16 kwietnia 2016 przez Muminek Dyskutant (8,650 p.)
Bierze się to z tego, że w linii 8,9,10 deklarujesz zmienną wynik jej miejsce w pamięci posiada różne "śmieci" stąd taki wynik. Rozwiązanie jest proste zdefiniuj te zmienne czyli przypisz im od razu wartość (inicjalizacja) i wtedy nie będzie problemu. int zmienna = 0;  i załatwione.
komentarz 16 kwietnia 2016 przez kazik8980 Użytkownik (810 p.)

czyli wtedy te linijki będą wyglądać tak:

    int wynika=0;
    int wynikb=0;
    int wynikc=0;

Potem program musi jeszcze sumować wszystkie podane głosy

komentarz 16 kwietnia 2016 przez Marcin Soczówka Użytkownik (590 p.)
Po co sumować skoro:

a) wartość wynika, wynikb i wynikc są na początku 0;

b) są typami int

Wystarczy inkrementacja w danym przypadku:P.
0 głosów
odpowiedź 16 kwietnia 2016 przez Marcin Soczówka Użytkownik (590 p.)
edycja 16 kwietnia 2016 przez Marcin Soczówka

Jeśli chodzi tylko o problem który zgłaszałeś to po while(warunek) nie masz instrukcji wypisania dla wynik_a, wynik_b i wynik_c. Jeżeli chodzi o wielkie liczby to tak jak pisał Muminek: 

Bierze się to z tego, że w linii 8,9,10 deklarujesz zmienną wynik jej miejsce w pamięci posiada różne "śmieci" stąd taki wynik. Rozwiązanie jest proste zdefiniuj te zmienne czyli przypisz im od razu wartość (inicjalizacja) i wtedy nie będzie problemu. int zmienna = 0;  i załatwione.

Wiem, że nie pytałeś co uważamy o Twoim kodzie ale pozwoliłem sobie na analizę całości a nie tylko problemu który zgłosiłeś:P. 

U Ciebie brakuje mi:

  1. Zabezpieczenia przed wpisaniem czegoś poza 0, 1, 2 i 3.
  2. Nie ma info dla użytkownika jak zakończyć program. 
  3. cout << "1. pytanie" << endl; -> z tego wnioskuje, że chcę wybrać pytanie nr 1 a nie odpowiedź nr  1.

Jeżeli chodzi o kod to:

  1. Staraj się unikać polskich nazw. Ogólnie przyjęto, że używamy języka angielskiego w programowaniu więc dobrze jest się  przestawić:P,
  2. Deklarując kilka zmiennych jednego typu możesz robić to po przecinku, a więc: int wynik_a=0, wynik_b=0, wynik_c=0, glos;,
  3. endl można zastąpić '\n',
  4. Dbaj o przejrzystość kodu ->
    do{cout << "1. pytanie" << endl; NOPE 
    
    do
    {
        cout << "1. pytanie" << endl;
        ...
        ...
    

 

Pobawiłem się Twoim programem i tak wygląda po skompilowaniu:

Mam nadzieję, że może kiedyś się to komuś przyda, pozdrawiam:).

Podobne pytania

+1 głos
0 odpowiedzi 434 wizyt
pytanie zadane 13 sierpnia 2021 w Ogłoszenia, zlecenia przez Norbert O24 Nowicjusz (130 p.)
0 głosów
1 odpowiedź 576 wizyt
0 głosów
2 odpowiedzi 2,703 wizyt
pytanie zadane 13 grudnia 2015 w C i C++ przez Ciri Gaduła (3,380 p.)

93,335 zapytań

142,328 odpowiedzi

322,407 komentarzy

62,670 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...