Zadanie c++, Tablice dwuwymiarowe

0

Witam mam do zrobienia takie zadanie:
a. Tablicę A[w][k] (w, k - stałe) wypełnić liczbami losowymi całkowitymi dwucyfrowymi (dodatnimi lub ujemnymi).
b. Wydrukować tablicę wierszami z ustawioną szerokością wydruku, uzupełniając każdy wiersz na końcu średnią wartością wszystkich liczb w tym wierszu, wydrukowaną z dokładnością do 2 miejsc po kropce.
c. Zamienić miejscami kolumnę 0 z 1, 1 z 2 itd., w przypadku gdy ilość liczb podzielnych przez stałą D w j-tej kolumnie jest większa niż w kolumnie j+1.
d. Ponownie wydrukować tablicę.

Póki co tyle udał mi się zrobić samemu:

#include <iostream>
#include <cstdlib>
#include <ctime>
#include <iomanip>

using namespace std;

int main(int argc, char* argv[])
{
	const int w = 4;
	const int k = 3;
	const int d = 4;	
	int tab[w][k];	
	int tmps=0;

	srand(time(NULL));

	for (int i = 0; i < w; i++)
		for (int j = 0; j < k; j++)
		{
			tmps = (rand() % 199) + (-99);
			if (tmps < -9 || tmps>9)
			{
				tab[i][j] = tmps;
				
			}
		}
	for (int i = 0; i < w; i++)
	{
		for (int j = 0; j < k; j++)
			cout << setw(5) << tab[i][j];
		cout << endl;
	};

	return 0;

}

Nie mam zielonego pojęcia dlaczego czasami w tablicy wczytywane sa liczby totalnie z poza zakresu np.-89788201.
Prosił bym również o podpowiedź jak policzyć średnią każdego wiersza, bo moje próby niestety były totalnie nie trafione.
Z następnymi punktami będę walczył jak uporam się z tymi dwoma.

3
            tmps = (rand() % 199) + (-99);
            if (tmps < -9 || tmps>9)
            {
                tab[i][j] = tmps;

            }

Jaka wartość jest przypisywana jak wylosujesz tmps == 0?

jak policzyć średnią każdego wiersza

Sumujesz liczby, dzielisz przez liczbę liczb. Zapewne wykładasz się na tym, że dzielisz liczbę całkowitą przez liczbę całkowitą, a więc wynik też jest całkowity. Zamiast tego, typem sumy niech będzie double.

Powodzenia.

2

Nie wiem czy się w ogóle da, jedną liczbą, randem, stworzyć losowo dwucyfrowe dodatnie i ujemne, ale Masz mały "haczek" :) jak to zrobić, a co do średniej, to Ci @kq napisa.ł

#include <iostream>
#include <cstdlib>
#include <ctime>
#include <iomanip>

using namespace std;

int main(int argc, char* argv[])
{
    const int w = 4;
    const int k = 3;
    const int d = 4;    
    int tab[w][k];  
    int tmps=0, tmps1 = 0, rand_num = 0;

    srand(time(NULL));

    for (int i = 0; i < w; i++)
        for (int j = 0; j < k; j++)
        {
            tmps = rand()%(90) + (-99); // dodatnie dwucyfrowe
            tmps1 = rand()%(90) + 10; // ujemne dwucyfrowe
            rand_num = rand()%(2); // rzut monetą :)
            if (rand_num == 0)
            {
                tab[i][j] = tmps;
            }
            else
            {
                tab[i][j] = tmps1;
            }
        }
    for (int i = 0; i < w; i++)
    {
        for (int j = 0; j < k; j++)
            cout << setw(5) << tab[i][j] <<" ";
        cout << endl;
    };

    return 0;

}
1

Poprawiłem kod jeżeli chodzi o losowanie. Dzięki Kq za naprowadzenie. Lion bardzo ciekawe pomysł. Ja to zrobiłem tak:

#include <iostream>
#include <cstdlib>
#include <ctime>
#include <iomanip>

using namespace std;

int main(int argc, char* argv[])
{
	const int w = 4;
	const int k = 3;
	const int d = 4;	
	int tab[w][k];	
	int tmps=0;

	srand(time(NULL));

	for (int i = 0; i < w; i++)
		for (int j = 0; j < k; j++)
		{
			tmps = (rand() % 199) + (-99);
			if (abs(tmps)>9)
			{
				tab[i][j] = tmps;
				
			}
			else
				j--;
		}
	for (int i = 0; i < w; i++)
	{
		for (int j = 0; j < k; j++)
			cout << setw(5) << tab[i][j];
		cout << endl;
	};

	return 0;

}

Natomiast jeżeli chodzi liczenie średniej nie wiem w którym miejscu powinienem liczyć srednia.

1

Natomiast jeżeli chodzi liczenie średniej nie wiem w którym miejscu powinienem liczyć srednia.

Możesz liczyć podczas wydruku, na przykład, i dopisać ja na końcu każdego wiersza, tylko nie zapomnij zadeklarować sumy jako double.

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