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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 08.03.2015, 17:25   #1
schoolboy99
Пользователь
 
Регистрация: 11.02.2015
Сообщений: 57
По умолчанию Дублируется строка при сортировке матрицы и не может вывести минимальный элемент строки

Проблема возникает при сортировке матрицы по сумме элементов строк по убыванию,то есть если у меня на 2-ух строках одинаковая сумма но разные цифры,то 2-ая строка дублируется 1-ой..

Например получилось 2 строки до сортировки

18 19 20 21 22 23 24 = 147
15 17 20 15 20 30 30 = 147

После сортировки вместо 2-ой строки появляются цифры 1-ой.

18 19 20 21 22 23 24 = 147
18 19 20 21 22 23 24 = 147

Код:
#include "stdafx.h"
#include <iostream>
#include <conio.h>
#include <iomanip>
#include <stdio.h>
#include <ctime>
 
using namespace std;
 
const size_t N=100;
const size_t M=100;
const int k=100;
 
int _tmain(int argc, _TCHAR* argv[])
{
    int i,j,t1,t2,n,m;
    int min,max;
    int nmin;
    int myArr[N][M];
    int myArr1[N]; 
    int myArr2[N];
    int sum[N]={0};
    setlocale(LC_ALL,"Russian");
    cout<<"Введите число устройств"<<endl;
    cin>>m;
    cout<<"Введите количество работ"<<endl;
    cin>>n;
    cout<<"Начальное значение диапазона"<<endl;
    cin>>t1;
    cout<<"Конечное значение диапазона"<<endl;
    cin>>t2;
     for (size_t i = 0; i < n; ++i)
    {
        for( size_t j = 0; j < m; ++j)
        {
  myArr[i][j] =t1+ rand() % (t2-t1);
    }
     }
    cout<<"Полученные данные : "<<endl;
    cout<<"T = ";
    for(size_t i=0; i<n; ++i)
    {
        for( size_t j = 0; j < m; ++j)
        cout<<setw(4)<<myArr[i][j];
        cout<<"\n";
        }
    for (i = 0; i < n; ++i)
    {
        for(j = 0; j < m; ++j)
        {
            sum[i]+=myArr[i][j];
        }
    }
        cout<<"T=";
            for(size_t i=0; i<n; i++)
    {
        for( size_t j = 0; j < m; j++)
        cout<<setw(4)<<myArr[i][j];
        cout << "  Сумма строки: ";
        cout<< sum[i] << endl;
}
           for (int i = 0; i < k; i++)
               myArr1[i] = sum[i];             
           for (int i = 0; i < k - 1; i++)
           {
               nmin = i; min = sum[i];
               for (int j = i + 1; j < k; j++)
                   if (sum[j] > min)
                   {
                       min = sum[j]; 
                       nmin = j;
                   }
               sum[nmin] = sum[i]; 
               sum[i] = min;
           }
           cout<<"Сумма элементов по возрастанию: "<<endl;
           for (int i = 0; i < n; i++)
               cout<<sum[i]<<endl;  
           for (int i = 0; i < k; i++)
               for (int j = 0; j < k; j++)
                   if (sum[i] == myArr1[j]) 
                   { 
                       myArr2[i] = j;  
                       break; 
                   }
         cout<<"Вывод матрицы по убыванию сумм в строках:"<<endl;
         for (int i = 0; i < n; i++)
           {
              for (int j = 0; j < m; j++)
                     cout<<setw(4)<<myArr[myArr2[i]][j];
               cout << "  Сумма строки: ";
        cout<< sum[i] << endl;
         }
 for (int i = 0; i < m; i++)
    {
        min = 0;
        for (int j = 0; j < n; j++)
        {
            if (myArr[i][min] > myArr[i][j])
            {
                min = j;
            }
        }
        myArr3[i] = myArr[i][min];
    }
cout<<"Минимальный элемент строки:"<<endl;
for (j=0; j<m;j++)
{
cout<<myArr3[i]<<endl;
}
    system("pause");
    return 0;
}
Изображения
Тип файла: jpg Безымянный1111.jpg (115.5 Кб, 54 просмотров)
schoolboy99 вне форума Ответить с цитированием
Старый 08.03.2015, 19:30   #2
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

я не буду читать и анализировать твой код.
знаешь почему?
потому что надо найти и разбить морду тому нехорошему человеку (редиске), который упорно учит уже не первое поколение нубов пихать код всей проги в мэйн!!!
этого вредителя давно нужно найти и лишить девственности черенком от лопаты!
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 08.03.2015, 21:12   #3
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,289
По умолчанию

Код:
           for (int i = 0; i < k; i++)
               for (int j = 0; j < k; j++)
                   if (sum[i] == myArr1[j])
                   {
                       myArr2[i] = j;
                       break;
                   }
Тут неверно заполняется myArr2 (т.к. одинаковая сумма соответствует разным строкам). Нужно сортировать сумму строк и номера одновременно.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 09.03.2015, 16:20   #4
schoolboy99
Пользователь
 
Регистрация: 11.02.2015
Сообщений: 57
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
Код:
           for (int i = 0; i < k; i++)
               for (int j = 0; j < k; j++)
                   if (sum[i] == myArr1[j])
                   {
                       myArr2[i] = j;
                       break;
                   }
Тут неверно заполняется myArr2 (т.к. одинаковая сумма соответствует разным строкам). Нужно сортировать сумму строк и номера одновременно.
то есть мне стоит сделать myArr2[i][j] или также с одним элементом работать?
я просто кучу вариантов перепробовал и всё впустую..
schoolboy99 вне форума Ответить с цитированием
Старый 09.03.2015, 16:48   #5
planetoxod
Пользователь
 
Регистрация: 04.03.2015
Сообщений: 22
По умолчанию

1. Вычисляем сумму в каждой строке.
sum[i,1]- сумма , sum[i,2] - номер строки
2. Сравниваем sum[i,1] (i от 1 до k) с sum[j,1] (j от i до k), если больше либо равно меняем местами строки i и j

3. Выводим myArr[sum[i,2]][j]
planetoxod вне форума Ответить с цитированием
Старый 09.03.2015, 16:58   #6
Вадим Мошев

Старожил
 
Аватар для Вадим Мошев
 
Регистрация: 12.11.2010
Сообщений: 8,568
По умолчанию

Цитата:
Сообщение от min@y™ Посмотреть сообщение
я не буду читать и анализировать твой код.
знаешь почему?
потому что надо найти и разбить морду тому нехорошему человеку (редиске), который упорно учит уже не первое поколение нубов пихать код всей проги в мэйн!!!
этого вредителя давно нужно найти и лишить девственности черенком от лопаты!
А если студент ещё не проходил функции?
Вадим Мошев вне форума Ответить с цитированием
Старый 09.03.2015, 23:41   #7
Praud
Форумчанин
 
Аватар для Praud
 
Регистрация: 11.10.2012
Сообщений: 409
По умолчанию

Цитата:
Сообщение от min@y™ Посмотреть сообщение
я не буду читать и анализировать твой код.
знаешь почему?
потому что надо найти и разбить морду тому нехорошему человеку (редиске), который упорно учит уже не первое поколение нубов пихать код всей проги в мэйн!!!
этого вредителя давно нужно найти и лишить девственности черенком от лопаты!
Улыбнуло) А код то реально читать противно
Praud вне форума Ответить с цитированием
Старый 09.03.2015, 23:56   #8
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
А если студент ещё не проходил функции?
тогда он распыляет свой говнокод по всему рунету.
имхо, это хреновый студент – больной халявщик-звездобол-доечник, не читавший матчасть.
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 10.03.2015, 07:48   #9
schoolboy99
Пользователь
 
Регистрация: 11.02.2015
Сообщений: 57
По умолчанию

Сколько желчи в сво
schoolboy99 вне форума Ответить с цитированием
Старый 10.03.2015, 07:55   #10
schoolboy99
Пользователь
 
Регистрация: 11.02.2015
Сообщений: 57
По умолчанию

Цитата:
Сообщение от min@y™ Посмотреть сообщение
тогда он распыляет свой говнокод по всему рунету.
имхо, это хреновый студент – больной халявщик-звездобол-доечник, не читавший матчасть.
Сколько же желчи в свой адрес слышу..

"хреновый студент – больной халявщик-звездобол-доечник, не читавший матчасть."(с)

Ну уж извините не все рождаются такими умными как вы..

Заметьте я не писал ааа помогите,аааа я не знаю,
Я выложил код и попросил подсказку и мне подсказали,а именно пользователь planetoxod..
За что ему спасибо,дальше я справился сам.

А как я пишу код или не так,это не уже не ваше дело.
Свой гнев и желчь могли бы и поберечь для других дел или просто можно было промолчать.
Да я распыляю свой код,советовать и подсказывать закон не запрещает..
То что вы тут распыляете свою желчь и гадости в адрес начинающих студентов-программистов я это увидел на себе.

А я учусь и каждый раз открываю что-то новое для себя.
schoolboy99 вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вывести строки матрицы, в которых есть такой элемент, что сумма предшествующих равна сумме следующих за ним элементов. vigorouz Помощь студентам 0 21.05.2014 23:47
Найты минимальный элемент матрицы A[5][5]. agent008 Помощь студентам 2 07.05.2014 09:48
Минимальный элемент главной диагонали квадратной матрицы wlll Общие вопросы Delphi 0 13.04.2013 14:24
Поменять максимальный элемент матрицы на минимальный Margarita 2703 Паскаль, Turbo Pascal, PascalABC.NET 8 18.11.2011 13:42
Delphi-минимальный элемент матрицы. STIFLER32 Помощь студентам 3 25.03.2010 19:48