#include <iostream>
#include <ctime>
#include <cstdlib>
const int ROZMIAR = 6;
void wypelni(double tab[][ROZMIAR])
{
for (int i = 0; i < ROZMIAR; ++i)
{
for (int j = 0; j < ROZMIAR; ++j)
{
tab[i][j] = 10.0 * rand() / RAND_MAX;
}
}
}
void wypisz(double tab[][ROZMIAR])
{
for (int i = 0; i < ROZMIAR; ++i)
{
for (int j = 0; j < ROZMIAR; ++j)
{
std::cout << tab[i][j] << '\t';
}
std::cout << std::endl;
}
}
void znajdz_i_zmien_przekatne(double tab[][ROZMIAR]) {
double najwieksza_1 = tab[0][0], najwieksza_2 = tab[1][1];
auto w1{ 0 }, w2{ 1 }, k1{ 0 }, k2{ 1 };
if (najwieksza_2 > najwieksza_1) {
std::swap(najwieksza_1, najwieksza_2);
std::swap(w1, w2);
std::swap(k1, k2);
}
for (auto i{ 2 }; i < ROZMIAR; ++i) {
if (tab[i][i] > najwieksza_1) {
najwieksza_2 = najwieksza_1;
w2 = w1;
k2 = k1;
najwieksza_1 = tab[i][i];
w1 = i;
k1 = i;
}
else if (tab[i][i] > najwieksza_2) {
najwieksza_2 = tab[i][i];
k2 = i;
w2 = i;
}
}
const auto K{ ROZMIAR - 1 };
for (auto i{ 0 }; i < ROZMIAR; ++i) {
if (tab[i][K - i] > najwieksza_1) {
najwieksza_2 = najwieksza_1;
w2 = w1;
k2 = k1;
najwieksza_1 = tab[i][K - i];
w1 = i;
k1 = K - i;
}
else if (tab[i][K - i] > najwieksza_2) {
najwieksza_2 = tab[i][K - i];
k2 = K - i;
w2 = i;
}
}
/*for (int i = 0; i < ROZMIAR; ++i) {
if (tab[i][i] > najwieksza_1) {
najwieksza_2 = najwieksza_1;
w_max = w_min; k_max = k_min;
najwieksza_1 = tab[i][i];
w_min = i; k_min = i;
}
else if (tab[i][i] > najwieksza_2) {
najwieksza_2 = tab[i][i];
w_max = i; k_max = i;
}
if (tab[i][ROZMIAR - 1 - i] > najwieksza_1) {
najwieksza_2 = najwieksza_1;
w_max = w_min; k_max = k_min;
najwieksza_1 = tab[i][ROZMIAR - 1 - i];
w_min = i; k_min = ROZMIAR - 1 - i;
}
else if (tab[i][ROZMIAR - 1 - i] > najwieksza_2) {
najwieksza_2 = tab[i][ROZMIAR - 1 - i];
w_max = i; k_max = ROZMIAR - 1 - i;
}
}*/
std::cout << "Najwieksza wartosc na przekatnych: " << najwieksza_1 << " na polu [" << w1 << "][" << k1 << "]" << std::endl;
std::cout << "Druga najwieksza wartosc na przekatnych: " << najwieksza_2 << " na polu [" << w2 << "][" << k2 << "]" << std::endl;
tab[w2][k2] = 0;
tab[w1][k1] = 0;
std::cout << "\n liczby zamienione na 0:\n";
wypisz(tab);
}
void wartoscMinMax(double tab[][ROZMIAR])
{
auto najmniejsza{ tab[0][0] }, najwieksza{ tab[0][0] };
auto w_min{ 0 }, w_max{ 0 }, k_min{ 0 }, k_max{ 0 };
// sprawdzenie pozostałych elementów zerowego wiersza:
for (int i{ 1 }; i < ROZMIAR; ++i) {
if (tab[0][i] < najmniejsza) {
najmniejsza = tab[0][i];
k_min = i;
}
else if (tab[0][i] > najwieksza) {
najwieksza = tab[0][i];
k_max = i;
}
}
// sprawdzenie pozostałych elementów ostatniej kolumny:
const auto k{ ROZMIAR - 1 };
for (int i{ 1 }; i < ROZMIAR; ++i) {
if (tab[i][k] < najmniejsza) {
najmniejsza = tab[i][k];
k_min = k;
w_min = i;
}
else if (tab[i][k] > najwieksza) {
najwieksza = tab[i][k];
k_max = k;
w_max = i;
}
}
// sprawdzenie pozostałych elementów ostatniego wiersza:
for (int i{ 0 }; i < k; ++i) {
if (tab[k][i] < najmniejsza) {
najmniejsza = tab[k][i];
k_min = i;
w_min = k;
}
else if (tab[k][i] > najwieksza) {
najwieksza = tab[k][i];
k_max = i;
w_max = k;
}
}
// sprawdzenie pozostałych elementów zerowej kolumny:
for (int i{ 1 }; i < k; ++i) {
if (tab[i][0] < najmniejsza) {
najmniejsza = tab[i][0];
k_min = 0;
w_min = i;
}
else if (tab[i][0] > najwieksza) {
najwieksza = tab[i][0];
k_max = 0;
w_max = i;
}
}
std::cout << "Najwieksza wartosc na obwodzie znajduje sie na polu [" << w_max << "][" << k_max << "] i wynosi " << najwieksza << std::endl;
std::cout << "Najmniejsza wartosc na obwodzie znajduje sie na polu [" << w_min << "][" << k_min << "] i wynosi " << najmniejsza << std::endl;
double suma = najmniejsza + najwieksza;
tab[w_min][k_min] = suma;
tab[w_max][k_max] = suma;
std::cout << "\nsuma tych liczb:\n";
//wypisz(tab);
}
int main()
{
double tab2w[ROZMIAR][ROZMIAR];
srand(time(nullptr));
wypelni(tab2w);
wypisz(tab2w);
znajdz_i_zmien_przekatne(tab2w);
wartoscMinMax(tab2w);
wypisz(tab2w);
}