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

Podstawy C++, Alex Allain

Object Storage Arubacloud
+1 głos
2,276 wizyt
pytanie zadane 29 sierpnia 2016 w C i C++ przez FatDeiv Początkujący (300 p.)

Jako że to mój pierwszy post na tym forum wypadałoby się przywitać - Witam cześć i czołem ! Zmotywowany filmami Pana Mirosława postanowiłem rozpocząć naukę C++ z książką Alex'a Allain'a i aktualnie głowię się nad zadaniem o treści : Napisz program obliczający sumę narastającą liczb wprowadzanych przez użytkownika , który zakończy swoje działanie, gdy użytkownik wprowadzi 0.  Chciałbym was również prosić bardziej o wskazówki aniżeli gotowe rozwiązania - chciałbym mimo wszystko po prostu zrozumieć to zadanie a nie bezmyślnie skompilować kawałek kodu. Z góry bardzo bardzo dziękuje za jakąkolwiek pomoc. Wstawiam mój (prawdopodobnie tragiczny kod) może na podstawie tego powiecie mi gdzie popełniłem błąd i czy w ogóle szedłem w dobrą stronę. Pozdrawiam ! 

#include <iostream>

using namespace std;

int main()
{
    int i = 0;
    cout << " Wprowadz a: " << endl;
    cin >> i;

    int suma = 0;

    while ( i != 0 )
    {

        cout << " Wprowadz b: " << endl;
        cin >> suma;
        suma = suma += i;
        cout << "Wynik: " << suma;

    }

    return 0;
}

 

3 odpowiedzi

+1 głos
odpowiedź 29 sierpnia 2016 przez criss Mędrzec (172,590 p.)
Dobrze ze pamiętasz o inicjalizacji zmiennych. To rzadkie u początkujących. W przypadku i nie jest potrzebna skoro i tak za chwile cin coś do niej przypisze, ale to dobry nawyk. Nie bardzo rozumiem czym jest suma narastajaca... ale skoro ma przestać pytać dopóki użytkównik nie wprowadzi 0, to warunek powinien dotyczyć zmiennej do której cały czas wpisujesz liczbę. Nie potrzebujesz żadnych cin-ów poza pętlą. cin >> suma tez nie ma sensu. W sumie chcesz przecież przechowywac. .. sumę. Więc nie chcemy jej nadpisywac niemożliwą do przewidzenia podaną przez użytkownika wartością. No i oczywiście wynik powinien być wyświetlany za pętlą. Wydaje mi się że nie rozumiesz czym jest pętlą albo cin.
komentarz 29 sierpnia 2016 przez FatDeiv Początkujący (300 p.)
No właśnie sam do końca nie rozumiem tego polecenia dlatego napisałem na forum z nadzieją że ktoś bardziej ogarnięty wyłapie o co chodzi. Dałem cin i dlatego że gdyby zostało 0 to wykluczałoby to uruchomienie while != 0. Ale zaraz przetestuje czy while zadziała gdy usunę cin oraz przypisanie.

 

@EDIT sprawdziłem jak to wygląda - gdy zostawiłem "łyse" i bez żadnego przypisania wartości tudzież jej wprowadzenia przez użyszkodnika - przydziela losowe liczby pod 'i'
komentarz 29 sierpnia 2016 przez criss Mędrzec (172,590 p.)
Miałem na myśli, że nie musisz wpisywać 0 jeśli i tak zostanie za chwile przypisana wartość przez cin. Jeśli wyrzucisz i cin i inicjalizacje (= 0), to dostajesz śmieci z pamięci (czyli jak to nazwałeś losowe liczby). Zamiast sie nad tym zastanawiać, popraw ten kod.
komentarz 29 sierpnia 2016 przez FatDeiv Początkujący (300 p.)
Ok, już kumam o co chodziło. Poprawione, dzięki :D
+1 głos
odpowiedź 12 marca 2017 przez mzajac Nowicjusz (160 p.)
edycja 12 marca 2017 przez mzajac

Witaj,

Jestem na tym samym etapie książki co Ty. Podszedłem do tego zadanie w trochę inny sposób. Chciałem żeby program za każdym razem pytał o wartość a i wartość b i obie te wartości dodawał do sumy która nie resetuje się przy każdej nowej pętli. Instrukcja warunkowa if okazała się być rozwiązaniem problemu zamykania programy w przypadku wprowadzenia zera.

#include <iostream>

using namespace std;

int main()
{
    int a;
    int b;
    int suma = 0;

    while ( true )
    {
        cout << endl;

        cout << "podaj a: " << endl;
        cin >> a;

        cout << "podaj b: " << endl;
        cin >> b;

        if ( a == 0 || b == 0 )
        {
            return 0;
        }
        suma = suma + ( a += b );
        cout << "suma to: " << suma << endl;
    }
}
komentarz 11 czerwca 2017 przez Gieshable Nowicjusz (100 p.)

Cześć,

Też jestem na tym etapie książki. Pozwoliłam sobie popracować z Twoim kodem i spróbować użyć innego rodzaju pętli:

DLA FOR

#include <iostream>

using namespace std;

int main()
{
    int a;
    int b;
    int suma = 0;

    for (int a =1; a!=0; a+b)
    {
        cout << "podaj a: " << endl;
        cin >> a;

        cout << "podaj b: " << endl;
        cin >> b;

        if ( a == 0 || b == 0 )
        {
            return 0;
        }
        suma = suma + ( a += b );
        cout << "suma to: " << suma << endl;
    }
}

DLA DO... WHILE

#include <iostream>

using namespace std;

int main()
{
    int a;
    int b;
    int suma = 0;

    do
    {
        cout << "podaj a: " << endl;
        cin >> a;

        cout << "podaj b: " << endl;
        cin >> b;

        suma = suma + ( a += b );
        cout << "suma to: " << suma << endl;
    }

   while (!(a==0 || b==0));

        {

            return 0;
        }

    }

Najwięcej problemu sprawiło do... while. Co sądzicie o takim rozwiązaniu? Żeby instrukcja była wywołana więcej niż raz, do zapętlenia, użyłam negacji w warunku while.

0 głosów
odpowiedź 29 sierpnia 2016 przez Ehlert Ekspert (212,670 p.)
Jeśli zczytujesz w pętli to czyść bufor.
komentarz 29 sierpnia 2016 przez FatDeiv Początkujący (300 p.)
Zadanie które podałem wyżej powinno być rozwiązane za pomocą instrukcji warunkowych, pętli gdyż dopiero na tym etapie książki jestem i niestety nie było niczego o czyszczeniu buforu

Podobne pytania

0 głosów
1 odpowiedź 543 wizyt
0 głosów
0 odpowiedzi 415 wizyt

92,572 zapytań

141,422 odpowiedzi

319,643 komentarzy

61,959 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!

...