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

Перестановка столбцов матрицы с заданным ключом - C++

Восстановить пароль Регистрация
 
pretty_girl
Сообщений: n/a
16.08.2011, 07:48     Перестановка столбцов матрицы с заданным ключом #1
Добрый день! Помогите, пожалуйста. Задание такое: дана матрица размерностью [6х9]. Нужно поменять столбцы местами по заданному ключу, например, ключ следующий: [2,4,1,6,3,5]. И в итоге, в новой матрице у нас получится, что 2 столбец исходной матрицы у нас будет первым, 4 - вторым и т.д. Матрица исходная выводится из файла. Заранее спасибо!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.08.2011, 07:48     Перестановка столбцов матрицы с заданным ключом
Посмотрите здесь:

C++ Не получается перестановка столбцов матрицы
C++ [C++] Перестановка строк и столбцов матрицы
Перестановка столбцов матрицы C++
C++ Перестановка столбцов матрицы
Удалить из массива элемент с заданным ключом C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
16.08.2011, 08:35     Перестановка столбцов матрицы с заданным ключом #2
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
#include <fstream>
#include <iostream>
#include <iomanip>
#include <algorithm>
 
int main()
{
    const int LINES = 9, COLUMNS = 6;
    std::ifstream fromFile("input.txt");
    int arr[LINES][COLUMNS], a_key[COLUMNS];
    for(int column = 0; column < COLUMNS; ++column)
        std::cin >> a_key[column];
    for(int line = 0; line < LINES; ++line)
        for(int column = 0; column < COLUMNS; ++column)
        {
            //std::fstream("input.txt") >> arr[line][column];
            int *p = std::find(a_key, (a_key + COLUMNS), column + 1);
            //std::cout << p - a_key << ' ';
            fromFile >> arr[line][p - a_key];
        }
    for(int line = 0; line < LINES; ++line)
    {
        for(int column = 0; column < COLUMNS; ++column)
            std::cout << std::setw(5) << arr[line][column];
        std::cout << std::endl;
    }
    system("pause");
    return 0;
}
Не проверят правильность вводимых данных.
mamedovvms
2912 / 833 / 93
Регистрация: 30.04.2009
Сообщений: 2,613
16.08.2011, 08:55     Перестановка столбцов матрицы с заданным ключом #3
C++
1
2
3
4
5
6
7
8
9
10
11
12
for (int i=0;i<n;i++){
 temp = a[i][0];
 for (int j=0;j<m;j++){
  k = 0;
  s = 1;
  while(kl[k]!=s) {k++;}
  temp1 = a[i][k];
  a[i][k] = temp;
  temp = temp1;
  s=k+1;
 }
}
xAtom
 Аватар для xAtom
910 / 735 / 60
Регистрация: 09.12.2010
Сообщений: 1,346
Записей в блоге: 1
16.08.2011, 10:13     Перестановка столбцов матрицы с заданным ключом #4
Вариантик. В файле данные:
1 11 21 31 41 51
2 12 22 32 42 52
3 13 23 32 43 53
4 14 24 34 44 54
5 15 25 35 45 55
6 16 26 36 46 56
7 17 27 37 47 57
8 18 28 38 48 58
9 19 29 39 49 59

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
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
 
int main(void) {
    const int cols = 6;
    const int rows = 9;
    int mat[rows][cols]; 
    int r = 0, c = 0;
 
    char line[255];
    FILE*  fp;
    if(! (fp = fopen("matrix.txt", "r")))
         exit(-1);
 
    while( ! feof(fp)) {  
          fgets(line, sizeof(line), fp);
          for(char* p = strtok(line, " \t"), c = 0; p; p = strtok(NULL, " \t"), c++)
                mat[r][c] = atoi(p); 
          r++;
    } 
    fclose(fp);
    
    // нумерация столбцов для задания ключа начинается не с нуля
    int key[] = { 2, 4, 1, 6, 3, 5 }; 
    for(int k = 0; k < cols; k += 2) {  // обмениваем
             for(r = 0; r < rows; r++) {
                     int tmp   = mat[r][ key[k]-1 ];
                     mat[r][ key[k]-1 ] = mat[r][ key[k+1]-1 ];
                     mat[r][ key[k+1]-1 ] = tmp;
             }
     }
     
     /* выводим в консоль если нужно в файл
      fp = fopen("matrix.txt", "w+");
      заменить поток вывода stdout на файловый - fp */
     for(r = 0; r < rows; r++) {
           for(c = 0; c < cols; c++) 
                fprintf(stdout, "%d\t", mat[r][c]);
           putc('\n', stdout);
     }
 
    getchar();
    return 0;
}
Olga_
 Аватар для Olga_
840 / 182 / 16
Регистрация: 01.08.2011
Сообщений: 502
16.08.2011, 10:28     Перестановка столбцов матрицы с заданным ключом #5
Цитата Сообщение от xAtom Посмотреть сообщение

C++
1
2
3
fgets(line, sizeof(line), fp);
 
for(char* p = strtok(line, " \t"), c = 0; p; p = strtok(NULL, " \t"), c++)
Поскольку используется функция fgets(), не будет ли лишним добавить в strtok разделитель '\n'?
pretty_girl
Сообщений: n/a
16.08.2011, 19:11     Перестановка столбцов матрицы с заданным ключом #6
Всем огромное спасибо!
Yandex
Объявления
16.08.2011, 19:11     Перестановка столбцов матрицы с заданным ключом
Ответ Создать тему
Опции темы

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