Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

problem z sumowaniem liczb mniejszych od podanej

Ostatnio zmodyfikowano 2020-11-28 15:09
Autor Wiadomość
Temat założony przez niniejszego użytkownika
problem z sumowaniem liczb mniejszych od podanej
» 2020-11-28 01:04:43
Witam
Mam problem z sumowaniem kolejnych liczb mniejszych od podanych przez użytkownika. Kod działa poprawnie, gdy poda się 1 liczbę. Dla większej ilości suma jest ta sama i często wykracza poza ilość elementów w tablicy. Program ma wyglądać tak, że użytkownik poda np liczby 45, 67, 89 i program ma policzyć ile jest w tablicy liczb mniejszych od każdej z podanych.

C/C++
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;

int main()
{
    int ile;
    cout << "Ile liczb naturalnych chcesz zobaczyc?" << " ";
    cin >> ile;
   
    int tab[ ile ];
    srand( time( NULL ) );
    for( int i = 0; i < ile; i++ )
    {
        tab[ i ] = rand() % 100 + 1;
        cout << tab[ i ] << " ";
    }
   
    cout << endl << "Mozesz sprawdzic ile liczb z wyswietlonych jest mniejszych od podanej przez Ciebie liczby."
    << endl << "Ile chcesz podac takich liczb?" << " ";
    int ile_l;
    cin >> ile_l;
    cout << "podaj te liczby" << " ";
   
    int suma = 0;
   
    int tab_l[ ile_l ];
    for( int i = 0; i < ile_l; i++ )
    {
        cin >> tab_l[ i ];
    }
    cout << endl << "liczby mniejsze od " << endl;
    for( int i = 0, j = 0; i < ile; ++i )
    {
        for( j = 0; j < ile_l; ++j )
        {
           
            if( tab[ i ] < tab_l[ j ] )
            {
                cout << tab_l[ j ] << ": " << tab[ i ] << endl;
                suma++;
            }
        }
    }
   
    for( int i = 0; i < ile_l; ++i )
    {
        cout << "liczb mniejszych od " << tab_l[ i ] << " jest " << suma << endl;
    }
   
   
    return 0;
}
P-177756
» 2020-11-28 11:23:35
C/C++
for( int i = 0; i < ile_l; ++i )
{
    cout << "liczb mniejszych od " << tab_l[ i ] << " jest " << suma << endl;
}
Popatrz na ten kod bez kontekstu i widać że wypisujesz ile_l jakichś liczb i przy każdej podajesz ten sam wynik suma. Wynik wychodzi większy od rozmiaru tablicy, bo używasz go ponownie bez wyzerowania.
P-177757
» 2020-11-28 11:31:38
dodam ze swojej strony, że to jest błędne
C/C++
for( int i = 0, j = 0; i < ile; ++i )
{
    for( j = 0; j < ile_l; ++j )
    {
       
        if( tab[ i ] < tab_l[ j ] )
        {
powinno być
C/C++
for( int i = 0; i < ile_l; ++i )
{
    for( int j = 0; j < ile; ++j )
    {
        if( tab[ j ] < tab_l[ i ] )
        {
i powinna być alokowana pamięć na tablice a raczej na 2 tablice
P-177758
Temat założony przez niniejszego użytkownika
» 2020-11-28 13:51:04
nanoant20 nie rozumiem tej zamiany, wytlumaczysz?
P-177759
Temat założony przez niniejszego użytkownika
» 2020-11-28 13:52:33
pekfos problem w tym, ze nie wiem do konca jak wyzerowac sume po kazdej liczbie
P-177760
» 2020-11-28 14:41:45
ile - reprezentuje wszystkie wygenerowane liczby
ile_l - reprezentuje wszystkie liczby szukane
1 petlą pobieram 1 liczbę szukaną z tab_l[ile_l]. a 2 pętlą przechodzę po całej tablicy tab[ile]
po każdym przebiegu pętli, czyli przez tab[ile], resetujemy sumę, ustawiamy na 0
suma = 0;

alokowanie pamieci: Zarządzanie pamięcią new, delete

C/C++
for( int i = 0; i < ile_l; ++i )
{
    cout << endl << "liczby mniejsze od " << tab_l[ i ] << endl;
    for( int j = 0; j < ile; ++j )
    {
        if( tab[ j ] < tab_l[ i ] )
        {
            cout << tab_l[ i ] << ": " << tab[ j ] << endl;
            suma++;
        }
    }
    cout << "liczb mniejszych od " << tab_l[ i ] << " jest " << suma << endl;
    //musimy wyzerowac (zresetowac) sume
    suma = 0;
}

P-177761
Temat założony przez niniejszego użytkownika
» 2020-11-28 15:09:58
nanoant20 dziękuję ;)
P-177762
« 1 »
  Strona 1 z 1