Proszę o poprawienie programiku, dzięki z góry :)
#include "stdafx.h"
#include "iostream"
#include <iomanip>
#include <random>
using namespace std;
const int nmax = 10;
int z;
void PobTablice(int&z, int &n, int &m, int a[][nmax])
{
//pobieranie il. wierszy
do
{
cout << "Podaj il. wierszy\n n = ";
cin >> n;
} while ((n <= 0) || (n > nmax));
//pobieranie il. kolumn
do
{
cout << "Wstaw il. kolumn\n m = ";
cin >> m;
} while ((m <= 0) || (m > nmax));
//zakres liczb
cout << "Podaj zakres liczb\n z = ";
cin >> z;
if (z == 0 || z<0)
{
//pobieranie el. tablicy z konsoli
cout << "\nPodaj elementy macierzy A\n";
for (int i = 0; i < n; i++)
for (int j = 0; j < m; j++)
{
cout << "A[" << i + 1 << ", " << j + 1 << "] = ";
cin >> a[i][j];
}
}
else
{
//pobieranie elemetnow randomowo od -z do z
std::random_device rd;
std::mt19937 gen(rd());
std::uniform_int_distribution<> dis(-z, z);
for (int i = 0; i < n; i++)
for (int j = 0; j < m; j++)
{
a[i][j] = dis(gen);
}
}
}
void DrukTablice(int n, int m, int a[][nmax])
{
cout << "\n TABLICA BEZ WYROWNANIA \n" << endl;
for (int i = 0; i < n; i++)
{//wyswietlamy el. i-tego wiersza bez wyrownania
for (int j = 0; j < n; j++)
cout << a[i][j] << ' ';
cout << endl;//przechodzimy do nowego wiersza
}
cout << "\n TABLICA Z WYROWNANIEM \n" << endl;
for (int i = 0; i < n; i++)
{//wyswietlamy el. i-tego wiersza z wyrownaniem
for (int j = 0; j < n; j++)
cout << setw(10) << a[i][j];
cout << endl;//przechodzimy do nowego wiersza
}
}
int main()
{
int a[nmax][nmax];
int n, m; //n-il.wierszy, m-il. kolumn
PobTablice(z, n, m, a);
DrukTablice(n, m, a);
system("pause");
return 0;
}
Moje błędy :
- Liczba kolumn nie jest brana pod uwagę przy wydrukach (to jest typowy błąd "copy-paste").
- Szerokość kolumn jest ustawiona sztywno na 10 znaków, a powinna być równa szerokości najbardziej wymagającego elementu w danej kolumnie +1. To zresztą nie gwarantuje poprawności wydruku, np:
- Program obsługuje jeden przypadek w jednej aktywacji.
W 3 myślę, że wystarczy dać pętlę,