Losowanie cyfr z powtórzeniem,wprowadzanie liczb wierszy

0

Witam
Mam problem z programem w C++, próbowałem sam zrobić, ale nie daje rady. Szukałem już na wielu forach i wraz nic.
Muszę napisać program w C++ który będzie losował cyfry ze zbioru cyfr: {1,2,3,4,5,6,7,8,9}. Cyfry w losowaniu moga się powtarzać.
a)zadeklaruj tablicę dwuwymiarową 5x5k (5 kolumn, 5+k wierszy)
b)wprowadzana jest liczba wierszy która będzie wypełniona liczbami.(zabezpiecz aby nie dało się wprowadzić liczby większej od liczby zdefiniowanych wierszy)
c)zdefniuj fukcje z parametrem (paraustala liczbę wypełnionych wierszy w tablicy ) która wypełni liczbami wszystkie komórki oprocz ostatniego wiersza
d) w ostatnim wierszu umiesc sumy każdej kolumny tablicy
e) wuświetli całą tablicę z podsumowaniem na ekranie (wiersze tablicy w oddzielnych liniach jedne pod drugą)

Będę wdzięczny za każdą pomoc bo w tej chwili po wielu próbach nawet nie wiem jak się za to wziąć.

0

Ok, w którym miejscu pojawiają się trudności w wykonaniu zadania?

0

Napisałem kod, ale tylko taki który robił 5 kolumn i 5 wierszy i pokazywał liczby te które ja wpisałem w kodzie nie wiem jak zrobić zeby były losowe i także mam problem z podpunktami od b do końca

1

W takim razie zacznijmy od losowości. W C++ masz od tego nagłówek <random>. Pod linkiem znajdują się także przykłady użycia.

0
#include <iostream>
#include <string>
#include <cstdlib>
#include <ctime>
#include <iomanip>
//====================================================================================================================

void Print( std::ostream & out, int tab[ 5 ][ 5 ], int Rows )
{
    for( int j = -1; j < 5; ++j )
    {
        out << std::setw( 2 ) <<( j + 1 ) << ": ";
    }
    out << "\n";
    
    for( int i = 0; i < Rows; ++i )
    {
        out << std::setw( 2 ) <<( i + 1 ) << ": ";
        for( int j = 0; j < 5; ++j )
        {
            out << std::setw( 3 ) << tab[ i ][ j ] << " ";
        }
        out << "\n";
    }
}

void Fill( int tab[][ 5 ], int maxFillRow );
void SumColumns( int tab[][ 5 ], int Rows );

//====================================================================================================================

int main()
{
    using std::cout;
    using std::endl;
    using std::cin;
    
    srand (time (0) ) ;
    
    const int RowsNum = 5;
    const int ColumnsNum = 5;
    
    int RowsFilledByDigits;
do
{
    cout << "Podaj liczbe wierszy ktore maja byc wypelnione (1-5): ";
    cin >> RowsFilledByDigits;
    
    
} 
while( RowsFilledByDigits <= 0 || RowsFilledByDigits >= 6 );

int tab[ RowsNum ][ ColumnsNum ] { 0 };

    
    Fill( tab, RowsFilledByDigits );
    
    SumColumns( tab, RowsFilledByDigits );
    
    Print( cout, tab, RowsFilledByDigits );
    
    
    return 0;
}
//====================================================================================================================
void Fill( int tab[][ 5 ], int maxFillRow )
{
    for( int i = 0; i < maxFillRow; ++i )
    {
        for( int j = 0; j < 5; ++j )
        {
            tab[ i ][ j ] = rand() % 9 + 1;
        }
    }
}
//*****************************************************************************
void SumColumns( int tab[][ 5 ], int Rows )
{
    int columnSum = 0;
    
    for( int j = 0; j < 5; ++j )
    {
        for( int i = 0; i < Rows; ++i )
        {
            columnSum += tab[ i ][ j ];
        }
        tab[ Rows - 1 ][ j ] = columnSum;
        columnSum = 0;
    }
}

Mam zrobione coś takiego z pomocą kilku osób tylko nie wiem czy to jest tak jak powinno już być

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.