Форум программистов, компьютерный форум CyberForum.ru

В матрице переставить столбцы от 0-4 и 0-6 - C++

Восстановить пароль Регистрация
 
blancoross1
0 / 0 / 0
Регистрация: 16.05.2013
Сообщений: 45
28.12.2013, 14:07     В матрице переставить столбцы от 0-4 и 0-6 #1
Здраствуйте, задача работает , но препод требует вывести исходный массив помимо получившегося. Помогите пожалуйста срочно(
Пробовал через print f matrix , не выходит(
исправьте код.

Код
#include <iostream>
#include <math.h>
const int c_rows = 4;
const int c_cols = 6;
int GetIndex(int row, int col, int rows = c_rows)
{
  return col*rows + row;
}
int Summ(int matrix[], int col, int rows = c_rows)
{
  int res = 0;
  for (int row=0; row<rows; ++row)
  {
    res += matrix[GetIndex(row, col)];
  }
  return res;
}
int main()
{
  //matrix = {r1c1, r2c1, r3c1, r4c1, r1c2 ...}
  int matrix[c_rows*c_cols];
  for (int index=0; index<c_cols*c_rows; ++index)
    matrix[index] =-round(fabs(sin(index)*10000)) + 10000;
  for (int col=0; col<c_cols; ++col)
  
  {
    int maxcol = col;
    for (int col2=col+1; col2<c_cols; ++col2)
      if (Summ(matrix, maxcol)>Summ(matrix, col2))
        maxcol = col2;
    if (maxcol != col)
      for (int row=0; row<c_rows; ++row)
      {
        int mem = matrix[GetIndex(row, col)];
        matrix[GetIndex(row, col)] = matrix[GetIndex(row, maxcol)];
        matrix[GetIndex(row, maxcol)] = mem;
      }
  }
  std::cout << "Matrix:\n";
  for (int row=0; row<c_rows; ++row)
  {
    for (int col=0; col<c_cols; ++col)
      std::cout << matrix[GetIndex(row, col)] << " ";
    std::cout << "\n";
  }
  std::cout << "Summs:\n";
  for (int col=0; col<c_cols; ++col)
    std::cout << Summ(matrix, col) << " ";
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zss
Модератор
Эксперт С++
 Аватар для zss
5942 / 5547 / 1783
Регистрация: 18.12.2011
Сообщений: 14,155
Завершенные тесты: 1
28.12.2013, 14:22     В матрице переставить столбцы от 0-4 и 0-6 #2
У Вас же есть этот код
C++
1
2
3
4
5
6
7
std::cout << "Matrix:\n";
  for (int row=0; row<c_rows; ++row)
  {
    for (int col=0; col<c_cols; ++col)
      std::cout << matrix[GetIndex(row, col)] << " ";
    std::cout << "\n";
  }
blancoross1
0 / 0 / 0
Регистрация: 16.05.2013
Сообщений: 45
28.12.2013, 14:35  [ТС]     В матрице переставить столбцы от 0-4 и 0-6 #3
zss, вы имеете ввиду, что это и есть исходный массив? Препод заявил , что ему нужен исходный массив, а у меня при запуске программы уже отсоритрованный массив по его словам.... Толи он не понимает чего или я?
zss
Модератор
Эксперт С++
 Аватар для zss
5942 / 5547 / 1783
Регистрация: 18.12.2011
Сообщений: 14,155
Завершенные тесты: 1
28.12.2013, 14:40     В матрице переставить столбцы от 0-4 и 0-6 #4
Все зависит от последовательности выполнения.
Массив, ведь, один и тот же.
Вставьте этот код после строки 23, вот и выведете исходный массив.
blancoross1
0 / 0 / 0
Регистрация: 16.05.2013
Сообщений: 45
28.12.2013, 14:51  [ТС]     В матрице переставить столбцы от 0-4 и 0-6 #5
zss, сделал как вы сказали, но не понимаю , что вижу . Появился массив после ранее созданного, но его числа ...не понятны( Попробуйте пожалуйста скомпилировать если есть возможность и скажите что у вас получилось.

Добавлено через 5 минут
zss,
если я правильно понял, то тот код который вы дали это исходный массив, а какой тогда обработанный?
zss
Модератор
Эксперт С++
 Аватар для zss
5942 / 5547 / 1783
Регистрация: 18.12.2011
Сообщений: 14,155
Завершенные тесты: 1
28.12.2013, 14:58     В матрице переставить столбцы от 0-4 и 0-6 #6
Мне пришлось исправить строку 23 (нет функции round):
C++
1
    matrix[index] =-int(rand()/(double)RAND_MAX*10000.) -500;
А остальное работает

Добавлено через 29 секунд
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
#include <iostream>
#include <math.h>
const int c_rows = 4;
const int c_cols = 6;
int GetIndex(int row, int col, int rows = c_rows)
{
  return col*rows + row;
}
int Summ(int matrix[], int col, int rows = c_rows)
{
  int res = 0;
  for (int row=0; row<rows; ++row)
  {
    res += matrix[GetIndex(row, col)];
  }
  return res;
}
int main()
{
  //matrix = {r1c1, r2c1, r3c1, r4c1, r1c2 ...}
  int matrix[c_rows*c_cols];
  for (int index=0; index<c_cols*c_rows; ++index)
    matrix[index] =-int(rand()/(double)RAND_MAX*10000.) -500;
  std::cout << "Matrix:\n";
  for (int row=0; row<c_rows; ++row)
  {
    for (int col=0; col<c_cols; ++col)
      std::cout << matrix[GetIndex(row, col)] << " ";
    std::cout << "\n";
  }
  for (int col=0; col<c_cols; ++col)
  
  {
    int maxcol = col;
    for (int col2=col+1; col2<c_cols; ++col2)
      if (Summ(matrix, maxcol)>Summ(matrix, col2))
        maxcol = col2;
    if (maxcol != col)
      for (int row=0; row<c_rows; ++row)
      {
        int mem = matrix[GetIndex(row, col)];
        matrix[GetIndex(row, col)] = matrix[GetIndex(row, maxcol)];
        matrix[GetIndex(row, maxcol)] = mem;
      }
  }
  std::cout << "Matrix:\n";
  for (int row=0; row<c_rows; ++row)
  {
    for (int col=0; col<c_cols; ++col)
      std::cout << matrix[GetIndex(row, col)] << " ";
    std::cout << "\n";
  }
  std::cout << "Summs:\n";
  for (int col=0; col<c_cols; ++col)
    std::cout << Summ(matrix, col) << " ";
  system("pause");
}
Yandex
Объявления
28.12.2013, 14:58     В матрице переставить столбцы от 0-4 и 0-6
Ответ Создать тему
Опции темы

Текущее время: 12:23. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru