Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.07.2014, 11:54   #1
Cybill
 
Регистрация: 04.07.2014
Сообщений: 5
По умолчанию Можете написать пояснение кода, пожалуйста. Пока для меня это темный лес)

Дана вещественная матрица A(7x4). Переставляя ее строки и столбцы, добиться того, чтобы наибольший элемент (один их них) оказался в верхнем левом углу.
Код:

#include <stdio.h>
#include <conio.h>
#include <iostream.h>
#include <iomanip.h>
#include <stdlib.h>
#include <string.h>

const int N = 7;
const int M = 4;
 
int main()
{
    int a[N][M];
    
    srand (time(0));
    for (int i=0; i<N; i++)
    {
        for (int j=0; j<M; j++)
        {
            a[i][j]=rand()%50+1;
            cout << setw(3) <<a[i][j];

        }
        cout <<endl;
    }
    int maxIndexI = 0,maxIndexJ = 0;
    for (int i=0; i<N; i++)
        for (int j=0; j<M; j++)
            if (a[i][j] > a[maxIndexI][maxIndexJ])
            {
                maxIndexI = i;
                maxIndexJ = j;
            }
    if (a[0][0]!=a[maxIndexI][maxIndexJ])
    {
        int tmp;
        if (maxIndexI!=0)
            for (int j=0; j<M; j++)
            {
                tmp = a[maxIndexI][j];
                a[maxIndexI][j] = a[0][j];
                a[0][j] = tmp;
            }
        if (maxIndexJ!=0)
            for (int i=0; i<N; i++)
            {
                tmp = a[i][maxIndexJ];
                a[i][maxIndexJ] = a[i][0];
                a[i][0] = tmp;
            }
    }
    cout <<endl;
    for (int i=0; i<N; i++)
    {
        for (int j=0; j<M; j++)
            cout <<setw(3) <<a[i][j];
	    cout<<"\n";
          }
           cout <<endl;

    getch();
    return 0;

    }

Последний раз редактировалось Stilet; 02.08.2014 в 08:46.
Cybill вне форума Ответить с цитированием
Старый 02.08.2014, 06:17   #2
challengerr
Участник клуба
 
Аватар для challengerr
 
Регистрация: 30.07.2008
Сообщений: 1,639
По умолчанию

Переставлять нужно при каждом нахождении текущего максимального элемента, наверное, если я правильно понял формулировку задачи. В приведенном примере перестановка производится один раз, когда элемент уже известен. Делается это внесением кода перестановки внутрь внешнего цикла. Директива #include включает заголовочные файлы в вашу программу подставляя их непосредственно рекурсивно. const int N, M объявляет константы размерности матрицы. int main() это основная функция в программе, точка входа. int a[N][M]; объявляет матрицу. stand запускает генератор случайных чисел, функция rand()%50 генерирует целое псевдослучайное число в диапазоне от 0 до 50. Затем осуществляется вывод матрицы классом cout с перегруженным оператором <<. maxIndexI, maxIndexJ это индексы позиции текущего максимального элемента в матрицы.В цикле находится максимальный элемент, затем происходит перестановка столбцев и строк последовательно. В конце матрица выводится еще раз.
"SPACE.THE FINAL FRONTIER.This's a voyage of starship Enterprise. It's 5-year mission to explore strange new worlds,to seek out new life and civilizations,to boldly go where no man has gone before"
challengerr вне форума Ответить с цитированием
Старый 02.08.2014, 08:08   #3
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,964
По умолчанию

Так пойдёт?

Код:
// Подключаем стандартные библиотеки
#include <stdio.h>
 #include <conio.h>
 #include <iostream.h>
 #include <iomanip.h>
 #include <stdlib.h>
 #include <string.h>

// Задаём размерность матрицы
 const int N = 7;
 const int M = 4;

// Начинаем основной цикл
 int main()
 {
 int a[N][M];// Создаём целочисленную матрицу

 srand (time(0));// Рандомизируем генератор случайных чисел

// Заполняем матрицу случайными значениями с выводом на консоль
 for (int i=0; i<N; i++)
 {
   for (int j=0; j<M; j++)
   {
     a[i][j]=rand()%50+1;
     cout << setw(3) <<a[i][j];
   }
 cout <<endl;
 }

// Определяем максимальные элементы матрицы i, j
 int maxIndexI = 0,maxIndexJ = 0;
 for (int i=0; i<N; i++)
   for (int j=0; j<M; j++)
     if (a[i][j] > a[maxIndexI][maxIndexJ])
    {
       maxIndexI = i;
       maxIndexJ = j;
    }

// Выполняем перестановки
 if (a[0][0]!=a[maxIndexI][maxIndexJ])
 {
    int tmp;
    if (maxIndexI != 0)// Если maxIndexI не равен нулю, то производим перестановку
    for (int j=0; j<M; j++)
    {
      tmp = a[maxIndexI][j];
      a[maxIndexI][j] = a[0][j];
      a[0][j] = tmp;
    }

// Тоже самое, если maxIndexJ не равен нулю
    if (maxIndexJ!=0)
      for (int i=0; i<N; i++)
      {
        tmp = a[i][maxIndexJ];
        a[i][maxIndexJ] = a[i][0];
        a[i][0] = tmp;
      }
 }// end if

// Выводим на консоль полученные значения
 cout <<endl;
 for (int i=0; i<N; i++)
 {
   for (int j=0; j<M; j++)
     cout <<setw(3) <<a[i][j];
   cout<<"\n";
 }
 cout <<endl;

 getch();// Задержка закрытия консольного окна
 return 0;

 }
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Можете объяснить это условие? Hrum Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 09.12.2012 11:01
Пояснение кода aspen Общие вопросы C/C++ 0 22.10.2012 13:24
Графика в TurboPascal: Процедуры, рисующие на экране смешанный лес (лес состоит из елей) по курсору GreenDay Помощь студентам 2 04.05.2011 13:31
Очень надо написать программу, задачи не сложные для тех кто разбирается (не для меня увы) Artm3 Паскаль, Turbo Pascal, PascalABC.NET 2 08.03.2011 22:54
[Delphi+Excel] Пояснение кода Fiery Fox Общие вопросы Delphi 3 05.01.2011 11:21