• 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

Object Storage Arubacloud
0 głosów
804 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 323 wizyt
pytanie zadane 13 sierpnia 2021 w Ogłoszenia, zlecenia przez Norbert O24 Nowicjusz (130 p.)
0 głosów
1 odpowiedź 418 wizyt
0 głosów
2 odpowiedzi 2,480 wizyt
pytanie zadane 13 grudnia 2015 w C i C++ przez Ciri Gaduła (3,380 p.)

92,576 zapytań

141,426 odpowiedzi

319,652 komentarzy

61,961 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...