Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Перестановка столбцов в матрице(С++).

30K
07 мая 2008 года
Nikes
18 / / 07.05.2008
Помогите сделать программу.
Создать матрицу (int a[n][m]) и меняя местами столбцы, отсортировать по возрастанию ее первую строку.
Заранее спасибо.
247
08 мая 2008 года
wanja
1.2K / / 03.02.2003
Код:
for (i=0;i<m-1;i++)
   for (j=i+1;j<m;j++)
       if (a[0]>a[0][j])
          {
           for (k=0;k<n;k++)
                 {
                 h=a[k];
                 a[k]=a[k][j];
                 a[k][j]=h;
                 }  
          }

Примено так...
1.8K
08 мая 2008 года
igor_nf
256 / / 13.12.2006
Цитата: wanja
Код:
for (i=0;i<m-1;i++)
   for (j=i+1;j<m;j++)
       if (a[0]>a[0][j])
          {
           for (k=0;k<n;k++)
                 {
                 h=a[k];
                 a[k]=a[k][j];
                 a[k][j]=h;
                 }  
          }

Примено так...



Так в данном случае медленно будет. Вот вариант побыстрее(полный код) :

Код:
#include <stdio.h>
#define ROW 1024
#define      COL    1024

// меняем местами два столбца. row, col - размеры матрицы, col_1, col_2 - столбцы для обмена
void swap_columns(long *p, int row, int col, int col_1, int col_2) {

    long tmp;

    for(int i = 0; i < row; ++i) {

        tmp = p[i * col + col_1];
        p[i * col + col_1] = p[i * col + col_2];
        p[i * col + col_2] = tmp;

    }

}

/*
void show_matrix(long p[][COL], const int row, const int col) {

    int i, j;

    for(i = 0; i < row; ++i) {
        for(j = 0; j < col; ++j)

//          if(j == 0 || (j % 7 == 0))
//              putchar('\n');

            printf("M[%d_%d] = %ld ", i, j, p[j]);

        putchar('\n');
    }
           

}
*/

//собс-но, ф-я сортировки, вызывающая swap_columns()
//
void sort(long p[][COL], const int row, const int col, void *sortfunc()) {

    for(int i = 0; i < col - 1; ++i) {

        int minind = i + 1;

        for(int j = i + 1; j <= col - 1; ++j)
            if(p[0][j] < p[0][minind])
                minind = j;

        if(p[0][minind] < p[0])
            sortfunc(p, row, col, minind, i);
    }

}

int main(int ac, char *av[]) {

    static long matrix[ROW][COL];
    int i, j;

    for(i = 0; i < ROW; ++i)
        for(j = 0; j < COL; ++j)
            matrix[j] = 40 - j - i;
   
//  show_matrix(matrix, ROW, COL);

    sort(matrix, ROW, COL, swap_columns);

//печать значений отсортированной строки
    for(i = 0; i < COL; ++i)
        printf("Matrix[%d][%d] = %ld\n", 0, i, matrix[0]);

return 0;
}
30K
12 мая 2008 года
Nikes
18 / / 07.05.2008
спасибо) буду пробывать вашые варианты
30K
28 мая 2008 года
Nikes
18 / / 07.05.2008
Код:
#include <iostream>
#include <cmath>
#include <conio.h>
#include <time.h>
using namespace std;
int main()

{
 int n,m,i,j,h,k;
 cin>>n>>m;
 int a[n][m];

srand((unsigned)time(0));
 for (i=0;i<n;i++) {
 for (j=0;j<m;j++) {
 a[j]=rand()%90+10;
 cout<<a[j]<<" "; }
 cout<<'\n'; }

cout<<'\n';
for (i=0;i<n;i++)
 for (j=i;j<m;j++)
 if (a[0]>a[0][j])
 {
 for (k=0;k<n;k++)
 {
 h=a[k];
 a[k]=a[k][j];
 a[k][j]=h;
 }
 }
 for (i=0;i<n;i++) {
 for (j=0;j<m;j++)
 cout<<a[j]<<" ";
 cout<<'\n'; }
 getch();
}
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог