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

Podstawy C++, Alex Allain

VPS Starter Arubacloud
+1 głos
2,487 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 (214,220 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ź 599 wizyt
0 głosów
0 odpowiedzi 424 wizyt

93,023 zapytań

141,986 odpowiedzi

321,288 komentarzy

62,368 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 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...