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

Wyznaczanie sumy kolejnych liczb o określonej sumie cyfr.

Object Storage Arubacloud
0 głosów
727 wizyt
pytanie zadane 30 stycznia 2016 w C i C++ przez hanah1411 Nowicjusz (140 p.)
edycja 30 stycznia 2016 przez hanah1411

Witam!

Dopiero zaczynam swoją przygodę z programowaniem wiec proszę o pomoc w sprawie jednego algorytmu.

Mianowicie mam do napisania program który wyznaczy sumy n kolejnych liczb których suma cyfr jest równa b.

 

Niestety w kodzie jest błąd i nie działa jak powinien.Chodzi mi o to iz bezwzgledu na wprowadzone dane wejsciowe na wyjsciu zawsze wyswietla sie 0.Jeżeli ktoś wie jak rozwiazać ten problem to proszę o szybką odpowiedź.

#include <iostream>

using namespace std;
int n,b,k;
int x=1;
int ile=0;
int suma=0;
int wynik=0;


int main()
{
    cout << "Podaj n" << endl;
    cin>>n;
    cout<<"Podaj b"<<endl;
    cin>>b;

    while(ile<n)
    {
        while(x!=0)
        {
            wynik=wynik+x%10;
            x=x/10;
        }
        wynik=k;
        if(k=b)
        {
            ile++;
            suma=suma+x;
        }
        wynik=0;
        x++;
    }
    cout<<suma;
    return 0;
}

 

3 odpowiedzi

+1 głos
odpowiedź 30 stycznia 2016 przez niezalogowany

"Błąd", co rozumiesz przez to słowo.

http://warsztat.gd/wiki/Jak_nie_lami%C4%87

3. "Nie działa"

: Napisałem tak jak kazali w (...), ale to niestety nie działa, wyskakuje jakiś błąd. Co zrobić?

Nikt nie będzie w stanie doradzić ci, co zrobić, po takiej zdawkowej informacji. Jako programista, a tym samym zaawansowany użytkownik komputera, musisz czytać, rozumieć i analizować komunikaty o błędach. Programów nie uruchamia się na zasadzie "działa lub nie działa". Trzeba zobaczyć, co jest źle. Czy program się kompiluje? Jeśli nie, to jak brzmi błąd kompilatora? Czy program się "wysypuje"? Jeśli tak, to z jakim komunikatem? Wykonanie niedozwolonej operacji (błąd ochrony), a może "Debug Assertion Failed"? Czy program się nie uruchamia? Czy jakaś jego część nie działa? Jeśli tak, jaki kod błędu zwracają funkcje, które wywołujesz w swoim kodzie? Czy w ogóle to sprawdzasz?

Wiecie, nie mówię że powinniście czytać regulaminy/artykuły z każdego możliwego miejsca, ale czemu mało przed zadaniem pytania obejrzy to o co się chce zapytać pod kątem widzenia osób, które później mają odpowiedzieć na to pytanie (a nie chce im się np. kompilować kodu)

komentarz 30 stycznia 2016 przez hanah1411 Nowicjusz (140 p.)
Okej źle się wyraziłam.Miałam na myśli iż na wyjściu wyświetla się niepoprawny wynik.Mianowicie bezwzgledu na wprowadzone dane wejściowe wyświetla się 0. Następnym razem napisze konkretniejszy opis dzieki któremu uzyskam odpowiedz.
0 głosów
odpowiedź 30 stycznia 2016 przez Avalon Obywatel (1,130 p.)
edycja 30 stycznia 2016 przez Avalon
Przyjrzyj się sam trochę bliżej swojemu kodowi.Na pierwszy rzut oka widać warunek if(k=b) zamiast if(k==b)
komentarz 30 stycznia 2016 przez Avalon Obywatel (1,130 p.)

Po drugie wynik=k? a nie k=wynik?

Właściwie cały ten warunek jest bez sensu:

 if(k=b)
        {
            ile++;
            suma=suma+x;
        }
        wynik=0;
        x++;
    }

 

komentarz 30 stycznia 2016 przez Avalon Obywatel (1,130 p.)

Ja bym dał coś w stylu:

 for(int i=1;i<=n;i++)
    {
        if(k==b)
            suma=suma+i;
    }

Z tym że radziłbym sumowanie cyfr dać w funkcje lub pętle i dać if(sumacyfr==b) wtedy powinno działać powodzenia :)

komentarz 31 stycznia 2016 przez hanah1411 Nowicjusz (140 p.)

Sumowanie cyfr dałam w funkcję i pozmieniałam trochę natomiast teraz na wyjściu nie wyświetla się nic.Jeżeli masz gotowy kod do tego zadania mógłbyś go tu wklejić a ja przeanalizowalam by go i porównała z moim.

#include <iostream>
#include <cstdlib>

using namespace std;
int sumacyfr=0;

int sumaa(int x,int sumacyfr)
{
    while(x!=0)
    {
        sumacyfr=sumacyfr+x%10;
        x=x/10;
    }
    return sumacyfr;
}


int main()
{
    int n,b;
int x=1;
int ile=0;
int suma=0;


    cout << "Podaj n" << endl;
    cin>>n;
    cout<<"Podaj b"<<endl;
    cin>>b;

      while  (ile<n)
    {

  sumaa(x,sumacyfr);

      if  (sumacyfr==b)
        {
          ile++;
          suma+=x;
        }
      x++;
    }




    cout<<suma;
   return 0;
}

 

komentarz 31 stycznia 2016 przez Avalon Obywatel (1,130 p.)

Po pierwsze zmienna ile powinna być zwiększana na koniec pętli bo masz wartość zwiększoną przed pierwszym działaniem.Po drugie w warunku if powinieneś wywołać tą funkcję zamiast porównywać z wartością tak jest po prostu wygodniej.Zamiast while,wygodniej jest użyć pętli for.Ale postarałeś się oto nagroda:

Najpierw treść funkcji:

 int suma(int liczba)
    {
        int wynik=0;
        while(liczba!=0)
        {
            wynik=wynik+liczba%10;
            liczba=liczba/10;
        }
        return wynik;
    }

teraz main:

int main()
{
    cout<<"Wpsiz liczbe n: ";
    cin>>n;
    cout<<"Wpisz liczbe b: ";
    cin>>b;
    cout<<"n= "<<suma(n)<<endl;
    cout<<"b= "<<suma(b)<<endl;
    for(int i=1;i<=n;i++)
    {
        if(suma(i)==b)
            wynik=wynik+i;
    }
    cout<<"Wynik to: "<<wynik<<endl;

}

 

 

komentarz 31 stycznia 2016 przez Avalon Obywatel (1,130 p.)

To jest poprawiona wersja z pętlą while w twoim wykonaniu:

#include <iostream>
#include <cstdlib>

using namespace std;

int sumaa(int x)
{
    int sumacyfr=0;
    while(x!=0)
    {
        sumacyfr=sumacyfr+x%10;
        x=x/10;
    }
    return sumacyfr;
}


int main()
{
    int n,b;

int ile=1;
int suma=0;


    cout << "Podaj n" << endl;
    cin>>n;
    cout<<"Podaj b"<<endl;
    cin>>b;
      while  (ile<=n)
    {
      if  (sumaa(ile)==b)
        {
          suma+=ile;
        }
        ile++;
    }

    cout<<suma;
   return 0;
}

 

komentarz 31 stycznia 2016 przez Avalon Obywatel (1,130 p.)
Staraj się czasem robić sobie pomocnicze wydruki,bo na przykład zapomniałaś zerować za każdym razem zmiennej sumacyfr która była sumowana cały czas i wychodził inny wynik.

Nigdzie też nie zapisywałaś wartości funkcji,funkcja liczyła po czym wartość znikała, funkcja nie zwraca ci zmiennej tylko wartość, którą musisz albo gdzieś zapisać,albo wyświetlić albo wykonać na niej operacje tak jak ja w if'ie
0 głosów
odpowiedź 31 stycznia 2016 przez Fergus Obywatel (1,010 p.)
Sorry za pytanie, ale co ten program ma robić? Jaki ma być ostateczny efekt wyświetlenia po podaniu przez usera n i b ? Przetestowałem poprawiony kod, który wrzucił Avalon i gdy n < b to wynik zawsze jest 0.
komentarz 31 stycznia 2016 przez Avalon Obywatel (1,130 p.)
Ma wyznaczać sumę wszystkich liczb do n których  suma cyfr jest równa b.

Nie wyobrażam sobie żeby suma cyfr była kiedy kiedykolwiek  większa od samych liczb

dlatego też suma wynosi zero-bo nie ma co sumować.Dla przykładu do n=8 czyli od 1 do 8 nie ma żadnej liczby której suma cyfr równa byłaby 9.
komentarz 31 stycznia 2016 przez Fergus Obywatel (1,010 p.)
Ok, dzięki za wyjaśnienia. Źle zrozumiałem początkowe pytanie w tym wątku. Wszystko się zgadza:

n = 13

b = 2

wynik = 13, bo 2 + 11 = 13

Musiałem samemu sobie to wytłumaczyć ;-)   niektóre zadania są dość zakręcone.

Podobne pytania

0 głosów
2 odpowiedzi 514 wizyt
pytanie zadane 28 grudnia 2020 w C i C++ przez gryzedywany Użytkownik (510 p.)
0 głosów
1 odpowiedź 1,444 wizyt
pytanie zadane 16 września 2018 w C i C++ przez jjanickij Użytkownik (510 p.)
0 głosów
2 odpowiedzi 737 wizyt
pytanie zadane 6 czerwca 2018 w C i C++ przez Ardeq09 Nowicjusz (120 p.)

92,555 zapytań

141,403 odpowiedzi

319,554 komentarzy

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

...