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

Sumowanie liczb podanych na wejściu

Object Storage Arubacloud
0 głosów
4,847 wizyt
pytanie zadane 22 kwietnia 2015 w C i C++ przez falauthy Stary wyjadacz (11,550 p.)

Cześć,

Ma kolejny problem z pętlą for (dlaczego nie potrafię jej ogarnąć?!), więc na początek pierwsze pytanie - ktoś ma jakiś fajny artykuł/filmik/obrazek, który w łopatologiczny sposób tłumaczy zastosowanie pętli for? Drugie - gdy wprowadzam liczby w niżej podanym kodzie, to program w konsoli wiesi się. Możecie mnie poinstruować dlaczego?

Pozdrawiam!
 

#include <iostream>

using namespace std;

int suma = 0;
char liczba;

int main()
{
    cout << "Podawaj cyfry oddzielone spacja, a podlicze Ci ich sume: ";
    cin >> liczba;

    while (liczba != '0')
    {
        cin >> liczba;

        for (int i = 0; liczba != '0'; i++)
            suma += liczba;
    }
    cout << "Suma " << suma;
    return 0;
}

 

3 odpowiedzi

0 głosów
odpowiedź 22 kwietnia 2015 przez Boshi VIP (100,240 p.)
wybrane 22 kwietnia 2015 przez falauthy
 
Najlepsza

Tworzysz nieskończoną pętlę for, zły warunek. liczba!=0 oznacza, że pętla wykywać się będzie cały czas ponieważ jak podasz np  w zmiennej liczba 1 to dosłownie to  brzmi dla for.

"Przyjmij  dla i=0  pętlę wykonuj dopóki liczba jest inna od 0 (no a jest bo jest 1 czyli zapętlenie) inkrementuj pętlę."

Po drugie wynik nigdy w takim wypadku ci nie wyjdzie poprawny, bo char zostanie skonwertowany do Ascii i już dla samego warunku pętli do while dostaniesz 48. A dla np 1 i 0  dostaniesz 97, bo znak 0 w ascii to 48 w systemie dziesiątkowym a 1 to 49 w dziesiątkowym->wikipedia.

kolejna sprawa, podawanie zmiennej  na początku by tylko zainicjować pętlę while jest głupotą. Do tego masz pętlę specjalnie do while która wykona się zawsze przynajmniej raz.

 

 

#include <iostream>
#include <string.h>
/*Program: zadanie domowe nr 1 z lekcji: Pêtle do ... while. */
using namespace std;

int suma = 0;
char  liczba; //do zmiany

int main()
{
    cout << "Podawaj cyfry oddzielone spacja, a podlicze Ci ich sume: ";
   do

    {
        cin >> liczba;

      //  for (int i = 0; liczba != '0'; i++) // blad
            suma += liczba;
    }
     while (liczba != '0'); błąd
    cout << "Suma " << suma; // błędny wynik

    return 0;

porpaw błędy

komentarz 22 kwietnia 2015 przez Ursan Bywalec (2,920 p.)

Nic nie chcę mówić, ale nie lepiej, żeby kolega spróbował sam poprawić kod - więcej zapamięta smiley

komentarz 22 kwietnia 2015 przez Boshi VIP (100,240 p.)
Fakt, trochę pobrudziłem ten kod :)
komentarz 22 kwietnia 2015 przez falauthy Stary wyjadacz (11,550 p.)
Tylko w zadaniu jeszcze mam warunek, że jak użytkownik wprowadzi cyfrę 0, to kończy sumowanie.
komentarz 22 kwietnia 2015 przez Boshi VIP (100,240 p.)
No to przecież napisałem ci jak masz to zrobić. Zmień typ, albo w ascii znajdź odpowiednik 0 w heksadecymalnym  systemie.
0 głosów
odpowiedź 22 kwietnia 2015 przez Ursan Bywalec (2,920 p.)
edycja 22 kwietnia 2015 przez Ursan
int suma = 0;
char liczba; // radzilbym pobierac jako typ liczbowy (np. int)
 
int main()
{
    cout << "Podawaj cyfry oddzielone spacja, a podlicze Ci ich sume: ";
    cin >> liczba;
 
    while (liczba != '0') /*wtedy nie musisz się bawić w porownywanie znaków. 
                         Dajesz w tej pętli cin >> liczba, 
                         co oznacza "wykonuj dopóki (cin>> liczba) zwraca true,
                         czyli dopóki podaje się dobre dane. */
    {
        cin >> liczba;
 
        for (int i = 0; liczba != '0'; i++)
            suma += liczba; // Chcesz dodać do int znak '0, zamiast liczby-znak '0' == 48
    }
    cout << "Suma " << suma;
    return 0;
}

Spróbuj poprawić kod, jeśli Ci się nie uda, podrzucę Ci do przeanalizowania kawałek kodu smiley

0 głosów
odpowiedź 22 kwietnia 2015 przez falauthy Stary wyjadacz (11,550 p.)
Problem rozwiązany, dzięki Panowie. :)

Druga sprawa - jakieś fajne rzeczy do nauki pętli i instrukcji warunkowych?
komentarz 22 kwietnia 2015 przez Boshi VIP (100,240 p.)
W google jest tego mnóstwo, na YT to samo, nie ma dobrych.złych tutoriali do tak prostych rzeczy.

Podobne pytania

0 głosów
1 odpowiedź 4,385 wizyt
pytanie zadane 23 października 2017 w Rozwój zawodowy, nauka, praca przez Conny___ Nowicjusz (150 p.)
0 głosów
3 odpowiedzi 23,617 wizyt
pytanie zadane 22 kwietnia 2015 w C i C++ przez falauthy Stary wyjadacz (11,550 p.)
0 głosów
1 odpowiedź 168 wizyt
pytanie zadane 5 stycznia 2020 w C i C++ przez Nabuchadonozor Gaduła (3,120 p.)

92,632 zapytań

141,498 odpowiedzi

319,872 komentarzy

62,011 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!

...