Wątek przeniesiony 2021-10-06 15:50 z Off-Topic przez cerrato.

Czemuprogram nie wyświetla mi prawidłowego wyniku? Program ma zsumować elementy podzielne przez 7.

0
#include <iostream>

using namespace std;
int liczba,i;
int suma=0;
int main()
{

    cout<<"Ile elementow ma miec tablica?"<<endl;
    cin>>liczba;
    int liczby[liczba];
    for(int i=0;i<liczba;i++)
     {
        cout<<i+1<<"Liczby: ";
        cin>>liczby[i];
     }

    if(liczby[i]%7==0)
    {
       suma+=liczby[i];
    }

    cout<<"Suma liczb podzielnych przez 7: "<<suma<<endl;
    return 0;
}
2

Bo tutaj int liczby[liczba]; masz UB. Musisz użyć new jeśli chcesz mieć dynamiczny rozmiar tablicy. Ja jednak polecam użycie jakiegoś kontenera np. std::vector.

EDIT.
No i ten kod:

if(liczby[i]%7==0)
{
   suma+=liczby[i];
}

powinien być w pętli

EDIT2.
W sumie można też w ogóle bez tablicy

#include <iostream>

using namespace std;

int liczba = 0, n = 0, suma = 0;

int main(){
    cout << "Ile elementow ma miec tablica? ";
    cin >> n;
    
    for(int i = 0; i < n; i++) {
        cout << i+1 << " Liczby: ";
        cin >> liczba;
        
        if (liczba % 7 == 0) {
            suma += liczba;
        }
    }

    cout << "Suma liczb podzielnych przez 7: " << suma << endl;
    return 0;
}
4

Wersja z bardziej intensywnym użyciem biblioteki STL.

#include <iostream>
#include <iterator>
#include <numeric>

using namespace std;

int main()
{
    istream_iterator<int> it(cin);   
    cout << accumulate( istream_iterator<int>(it),istream_iterator<int>(),0,[](int a, int b){ return b%7==0? a+b:a; } ) << endl;
}

https://godbolt.org/z/YxGW6Kebc

0

Dlaczego tak: int liczby[liczba];?!?
W internecie są tony informacji, jak to zrobić:
https://duckduckgo.com/?t=ffab&q=create+array+of+integers+c%2B%2B&ia=web

3

Ranges:

#include <iostream>
#include <range/v3/all.hpp>

int main()
{
    using namespace ranges;

    std::cout << accumulate(istream_view<int>(std::cin) 
        | views::filter([](int x) { return x % 7 == 0;}), 0);

    return 0;
}

https://godbolt.org/z/cqc9E17Gf

Niestety std::ranges z C++20 na razie nie chce działać jak należy w tym wypadku.

1 użytkowników online, w tym zalogowanych: 0, gości: 1