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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.01.2017, 13:17   #1
mrKrog
Пользователь
 
Регистрация: 20.01.2017
Сообщений: 12
По умолчанию C++ Переставить элементы этого столбца в обратном порядке

Вот все задание: Дан вещественный массив А[N][М]. Определить индекс столбца с максимальной суммой элементов. Переставить элементы этого столбца в обратном порядке. Все сделал кроме последнего пункта (Переставить элементы этого столбца в обратном порядке)
Код:
#include<iostream>
#include<ctime>
#include <time.h>
#include <stdlib.h>
#include <cmath>
#include <Windows.h>
#include <tchar.h>

 
int main(){
    setlocale(LC_ALL,"rus");
    
    std::cout << "Vvedite razmer matrici (m x n):\n\tm = ";
    int m,n;
    std::cin >> m;
    std::cout << "\tn = ";
    (std::cin >> n).get();
 
    
    std::cout << std::endl << "Matrica:" << std::endl;
    srand(time(0));
    int ** M=new int*[m];
    for(int i=0;i<m;++i){
        M[i]=new int[n];
        for(int j=0;j<n;++j)
            std::cout << (M[i][j]=rand()%100)<< "\t";
        std::cout << std::endl;
    }
 
   
    int max=0,col=0;
    for(int j=0;j<n;++j){
        int sum=0;
        for(int i=0;i<m;++i)
            sum+=M[i][j];
        if(max<=sum){
            max=sum;
            col=j;
        }
    
	}
    std::cout << "Summa ravna: " << max << std::endl;
    
	std::cout << "Maksimalnaya summa v stolbce: " << col+1 << std::endl;
    
 
    for(int i=0;i<m;++i)
        delete [] M[i];
    delete [] M;
    std::cin.get();
    return 0;
}
mrKrog вне форума Ответить с цитированием
Старый 20.01.2017, 13:21   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

А в чем проблема? Столбец это формально одномерный массив. Первое же решение работает: идем до половины и меняем: первый с начала и первый с конца, второй с начала и второй с конца, и т.д.
p51x вне форума Ответить с цитированием
Старый 20.01.2017, 13:38   #3
mrKrog
Пользователь
 
Регистрация: 20.01.2017
Сообщений: 12
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
второй с начала и второй с конца, и т.д.
т е цикл для этой операции начинаем так? или как?
Код:
 for(int j=0;j<n;++j){
       for(int i=0;i<m;++i)
mrKrog вне форума Ответить с цитированием
Старый 20.01.2017, 14:10   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от mrKrog Посмотреть сообщение
т е цикл для этой операции начинаем так?
нет. достаточно ОДНОГО цикла (for, например):
Код:
   for(int i=0;i<m/2;++i) {
     int tmp = M[i][col];
     M[i][col] = M[m-i-1][col];
     M[m-i-1][col] = tmp;
   }
Serge_Bliznykov вне форума Ответить с цитированием
Старый 20.01.2017, 14:13   #5
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Нет. У вас один индекс уже есть, он зафиксирован, он постоянный. Второй цикл вам здесь не нужен.
p51x вне форума Ответить с цитированием
Старый 20.01.2017, 14:27   #6
mrKrog
Пользователь
 
Регистрация: 20.01.2017
Сообщений: 12
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
цикла (for, например):
Затем вывод новой матрицы? правильно?
mrKrog вне форума Ответить с цитированием
Старый 20.01.2017, 14:29   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от mrKrog Посмотреть сообщение
Затем вывод новой матрицы? правильно?
да, так.

скажите, а почему у Вас строк в матрице M, а столбцов N ?!
ведь в условии сказано:
Цитата:
Сообщение от mrKrog Посмотреть сообщение
Дан вещественный массив А[N][М]
это N строк, M столбцов (матрица N x M )...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 20.01.2017, 14:45   #8
mrKrog
Пользователь
 
Регистрация: 20.01.2017
Сообщений: 12
По умолчанию всем спс

все разобрался, вот код может кому-нибудь он поможет
Код:
#include<iostream>
#include<ctime>
#include <time.h>
#include <stdlib.h>
#include <cmath>
#include <Windows.h>
#include <tchar.h>
 
 
int main(){
    setlocale(LC_ALL,"rus");
    
    std::cout << "Vvedite razmer matrici (m x n):\n\tm = ";
    int m,n;
    std::cin >> m;
    std::cout << "\tn = ";
    (std::cin >> n).get();
 
    
    std::cout << std::endl << "Matrica:" << std::endl;
    srand(time(0));
    int ** M=new int*[m];
    for(int i=0;i<m;++i){
        M[i]=new int[n];
        for(int j=0;j<n;++j)
            std::cout << (M[i][j]=rand()%100)<< "\t";
        std::cout << std::endl;
    }
 
   
    int max=0,col=0;
    for(int j=0;j<n;++j){
        int sum=0;
        for(int i=0;i<m;++i)
            sum+=M[i][j];
        if(max<=sum){
            max=sum;
            col=j;
        }
    
    }
    std::cout << "Summa ravna: " << max << std::endl;
    
    std::cout << "Maksimalnaya summa v stolbce: " << col+1 << std::endl;
    
for (int i=m-1, j=col; i>=0; i--)
        {
            std::cout << M[i][j] << '\t';
        }
    
    for(int i=0;i<m;++i)
        delete [] M[i];
    delete [] M;
    std::cin.get();
    return 0;
}
mrKrog вне форума Ответить с цитированием
Старый 20.01.2017, 15:15   #9
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от mrKrog Посмотреть сообщение
все разобрался, вот код может кому-нибудь он поможет
не хочу Вас расстраивать, но этот пункт задания:
Цитата:
Сообщение от mrKrog Посмотреть сообщение
Переставить элементы этого столбца в обратном порядке.
Вы не выполнили.

дело в том, что вывести на экран столбец в обратном порядке это не одно и то же, что переставить элементы столбца в обратном порядке.


пишу это и для тех, кому, возможно, потребуется решить аналогичную задачу и они придут в эту тему
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Переставить в обратном порядке элементы массива Lorein Помощь студентам 0 26.12.2016 20:43
Переставить буквы в обратном порядке Julia2707 Помощь студентам 6 10.03.2013 22:07
Переставить в обратном порядке столбцы mimit Помощь студентам 1 30.11.2012 00:06
Как переставить в обратном порядке элементы массива, расположенные между его минимальным и максимальным элементами? xEk Помощь студентам 1 09.05.2012 21:20
Переставить элементы массива в обратном порядке Mayers Общие вопросы C/C++ 3 06.05.2012 12:15