С++. БЕЗ ИСПОЛЬЗОВАНИЯ АДРЕСОВ И УКАЗАТЕЛЕЙ.

Пусть дано натуральное число n и вещественная матрица размером n x 10.
Обменяйте местами строку, в которой находится ПОСЛЕДНИЙ максимальный элемент (в матрице может быть несколько максимальных элементов) с последней строкой.

В программе обязательно рассмотрите случай, когда последний максимальный элемент находится на последней строке, тогда обмен производить не нужно.

Ответы

Ответ дал: Вованичикчка
0

#include <iostream>

#include <ctime>

using namespace std;

int main() {

   const int n = 4;

   float arr[n][10];

   

   cout << "Исходный массив: " << endl;

   srand(time(NULL));

   for (int i = 0; i < n; i++){

       for (int j = 0; j < 10; j++){

           float minValue = -10.f;

           float maxValue = 10.f;

           arr[i][j] = (float)rand()/(float) RAND_MAX * (maxValue - minValue) + minValue;

           

           cout << arr[i][j] << " ";

       }

       cout << endl;

   }

   

   int maxIndex = 0;

   for (int i = 0; i < n; i++)

       for (int j = 0; j < 10; j++)

           if (arr[i][j] >= arr[maxIndex/10][maxIndex%10])

               maxIndex = i * 10 + j;

   cout << "Max: " << "arr["<<maxIndex/10<<"]["<<maxIndex%10<<"] = "

       << arr[maxIndex/10][maxIndex%10] << endl;

   

   int row = maxIndex/10;

   if (row < n - 1){

       cout << "Меняем " << row + 1 << " и " << n << " строки местами: " << endl;

       for (int j = 0; j < 10; j++){

           float temp = arr[n-1][j];

           arr[n-1][j] = arr[row][j];

           arr[row][j] = temp;

       }

       for (int i = 0; i < n; i++){

           for (int j = 0; j < 10; j++)

               cout << arr[i][j] << " ";

           cout << endl;

       }

   } else {

       cout << "Максимальный элемент находится на последней строке." << endl;

   }

   return 0;

}


puteanlive: А arr[i][j] разве не i, j - не указатели?
Вованичикчка: без использования указателей обращение к элементам массива невозможно. Так что в любом случае для этого нужно использовать указатели. Но я не писал адресное выражение *(arr+i+j), которое явно говорит, что мы имеем дело с указателями, и не применял адресную арифметику.
Вас заинтересует