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

[C++] Pobieranie elementów większych od średniej z tablicy statycznej do tablicy dynamicznej.

Aruba Cloud - Virtual Private Server VPS
0 głosów
1,306 wizyt
pytanie zadane 12 stycznia 2017 w C i C++ przez joshmx Nowicjusz (120 p.)

Witam,

Mam problem z ustaleniem ile elementów z wcześniej stworzonej tablicy statycznej jest większych od ich średniej arytmetycznej oraz przesłaniem ich do tablicy dynamicznej.

Fragment kodu:

#include <iostream>
#include <ctime>
#include <cmath>
#include <cstdlib>

using namespace std;

int main()
#include <iostream>
#include <ctime>
#include <cmath>
#include <cstdlib>

using namespace std;

int main()
{
    const int N = 10;
    const int G = 50;
    const int D = 1;
    const int K = 2;
    int srednia;
    int suma = 0;
    int q;
    
    
    srand( time( 0 ) );
    int tab[ N ];
    for( int i = 0; i < N; i++ )
    {
        tab[ i ] = D + rand() %( G - D + 1 );
    }
    
    for( int i = 0; i < N; i++ )
    {
        if( i % K == 0 )
        {
            cout << tab[ i ] << ' ';
        }
        else
        {
            cout << tab[ i ] << '\n';
        }
    }
    suma = suma + tab[ i ];
    srednia = suma / N;
    cout << "srednia wynosi " << srednia << endl;
    
    for( i = 0; i > srednia; i++ )
    {
        int * tablica = new int[ 10 ];
        
        
        
        
        
        
        
        
        delete[] tablica;
    }

Prosiłbym o wskazówki i porady do rozwiązania problemu.

Z góry dziękuje i pozdrawiam,

joshmx

1 odpowiedź

+1 głos
odpowiedź 12 stycznia 2017 przez Dexterim Dyskutant (8,370 p.)

Po pierwsze po co dublowac importowanie bibliotek i dwa razy main. Po drugie

for( i = 0; i > srednia; i++ )
    {
        int * tablica = new int[ 10 ];
         
         
         
         
         
         
         
         
        delete[] tablica;
    }

za kazdym razem tworzysz i niszczysz tablice. Lepiej zrob sobie osobna petle która CI policzy ile masz wartosci większych od średniej. A następnie tą liczbą poza pętla tworzysz tablice dynamiczna. I zostaje tylko wypelnic tablice zaalokowana tymi wartoścami które chcesz

komentarz 12 stycznia 2017 przez joshmx Nowicjusz (120 p.)
Właśnie o to chodzi, nie mam pojęcia jak napisać ten fragment kodu, który ma liczyć ile liczb jest większych od średniej :/
komentarz 12 stycznia 2017 przez Dexterim Dyskutant (8,370 p.)

Możesz np.

int licznik=0;

for(int i = 0 ; i < 10 ; i++)
     if(tab[i]>srednia)
           licznik++;

 

komentarz 12 stycznia 2017 przez joshmx Nowicjusz (120 p.)

Dziekuje, działa zacnie :) 

Teraz mam pytanie dotyczące wypelnieniem tabeli dynamicznej w.w. elementami

Kod programu ma mniej wiecej wygladac tak?

for (int i=0; i<licznik; i++)
{
    int *tablica = new int [licznik];
    for (int i=0; i<licznik; i++)
    {
        if (licznik%K==0)
        {
            cout<<tablica[licznik]<<' ';
        }
        else
        {
            cout<<tablica[licznik]<<'\n';
        }
    }
    delete [] tablica;
}

 

komentarz 12 stycznia 2017 przez Dexterim Dyskutant (8,370 p.)

Nie wiem dlaczego próbujesz cały czas alokować tablice w pętli

int licznik=0;
 
for(int i = 0 ; i < 10 ; i++)
     if(tab[i]>srednia)
           licznik++;


int *tablica = new int [licznik];

int licznik2=0 ; // potrzebny do poruszania sie po nowej tablicy

for (int i=0; i<10; i++) //lecimy znow po calej tablicy
{
        if(tab[i]>srednia)
        {
           tablica[licznik2]=tab[i];
           licznik2++;
        }

}
//przed usunieciem tablicy mozemy ja ewentualnie wyprintowac

delete [] tablica;

 

komentarz 12 stycznia 2017 przez joshmx Nowicjusz (120 p.)

Chcąc zobaczyć jak będzie twój kod działać, po zwyklym kopiuj wklej  oraz dodaniu drukowania, program działa, ale drukuje tylko pierwszą liczbę, która jest większa od średniej. 

tutaj cały kod programu:

#include <iostream>
#include <ctime>
#include <cmath>
#include <cstdlib>

using namespace std;

int main()
{
    const int N = 10;
    const int G = 50;
    const int D = 1;
    const int K = 2;
    int srednia;
    int suma=0;
    int licznik=0;




    srand( time( 0 ) );
    int tab[ N ];
    for( int i = 0; i < N; i++ )
    {
        tab[ i ] = D + rand() %( G - D + 1 );


    }
    for( int i = 0; i < N; i++ )
    {
        if( i%K==0 )
        {
            cout << tab[ i ] << ' ';
        }
        else
        {
            cout << tab[ i ] << '\n';
        }

    }
    for (int i=0; i<N; i++)
    {
        suma+=tab[i];
        srednia=suma/N;
    }
    for(int i = 0 ; i < N ; i++)
    {
        if(tab[i]>srednia)
           licznik++;

    }


    cout<<"suma wynosi "<<suma<<endl;
    cout<<"srednia wynosi "<<srednia<<endl;
    cout<<"ilosc wyrazow wiekszych od sredniej wynosi "<<licznik<<endl;


int *tablica = new int [licznik];

int licznik2=0 ;

for (int i=0; i<N; i++)
{
        if(tab[i]>srednia)
        {
           tablica[licznik2]=tab[i];
           licznik2++;
        }

}
cout<<*tablica<<endl;

delete [] tablica;


system("pause");
return 0;
}

 

komentarz 12 stycznia 2017 przez Dexterim Dyskutant (8,370 p.)

Dając kod

cout<<*tablica<<endl;

wyrzucac tylko pierwszy elemet z tej tablicy. Chcąc zobaczyć cała tablice musisz po niej przejść w takim wypadku :

for (int i=0; i<licznik2; i++)
{
       cout<< tab[i] << endl;
 
}

 

komentarz 12 stycznia 2017 przez joshmx Nowicjusz (120 p.)
Super, wszystko działa jak należy. Na samym początku nie chciało działać ale tylko dlatego, że obydwoje pracowaliśmy na innych zmiennych (m.in tab oraz tablica). Bardzo dziękuje za poświęcony czas i wytłumaczenie problemu :)

Pozdrawiam,

joshmx
komentarz 12 stycznia 2017 przez joshmx Nowicjusz (120 p.)

Próbując zrozumieć dokładniej ten program staram się go modyfikować lub dodawać inne elementy. Chciałbym posortować otrzymana przeze mnie tablice stosując sortowanie przez wybieranie. Patrząc w internecie wydaje się to całkiem proste aczkolwiek wysypują się błędy..

staram się przerobić wzór z internetu tak aby pasował do mojego kodu. 

Kod:

void Sortowanie( int tab[], int size )
{
    int k;
    for( int i = 0; i < size; i++ )
    {
        k = i;
        for( int j = i + 1; j < size; j++ )
        if( tab[ j ] < tab[ k ] )
             k = j;
        
        swap( tab[ k ], tab[ i ] );
    }
}

// przerobiony jest ponizej

void Sortowanie( int tablica[], int licznik2 )
{
    int q;
    for( int i = 0; i < licznik2; i++ )
    {
        q = i;
        for( int j = i + 1; j < licznik2; j++ )
        if( tablica[ j ] < tablica[ q ] )
             q = j;
        
        swap( tablica[ q ], tablica[ i ] );
cout<<tablica[q]<<endl;
    }
}

gdzie w kodzie wystepuje blad?

komentarz 19 stycznia 2017 przez Dexterim Dyskutant (8,370 p.)
po pierwsze bedac w petli mozesz korzystac z jej iteratorow nie uzywajac kolejnej zmiennej niepotrzebnie po drugie w if brakuje klamr i to pewnie blad. Dodatkowo zle przekazujesz tablice do funkcji

Podobne pytania

0 głosów
2 odpowiedzi 1,006 wizyt
0 głosów
2 odpowiedzi 1,937 wizyt
+1 głos
1 odpowiedź 812 wizyt
pytanie zadane 4 grudnia 2016 w C i C++ przez niezalogowany

93,332 zapytań

142,326 odpowiedzi

322,405 komentarzy

62,669 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 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...