Консультация № 63698
22.11.2006, 12:25
0.00 руб.
0 3 3
Мне срочно нужна программа на С.
Нужно в матрице отсортировать нечётные столбцы по возрастанию и чётные по убыванию.
Заранее огромное спасибо!!!

Обсуждение

Неизвестный
22.11.2006, 12:55
общий
это ответ
Здравствуйте, POSTAL!
Держи, прога правда написана на С++, если возникнут вопросы пиши

Приложение:
#include <iostream>#include <vector>#include <algorithm>#include <functional>using namespace std;typedef vector<int> vArray;typedef vector<vArray> vMatrix;int main(int argc, char* argv[]){ using namespace std; vMatrix m1; for(int i=0; i<5; i++) { vArray v; for(int j=0; j<10; j++) { v.push_back(rand()); } m1.push_back(v); } //Вывод на экран неотсортированной матрицы cout << "Original matrix m1" << endl; vMatrix::iterator mIter; vArray::iterator vIter; for(mIter = m1.begin() ; mIter != m1.end() ; ++mIter) { for(vIter = mIter->begin(); vIter != mIter->end(); ++vIter) { cout << *vIter << " "; } cout << endl; } cout << endl; bool even = false;//четный - нечетный столбец for(mIter = m1.begin() ; mIter != m1.end() ; ++mIter) { if(even) { sort(mIter->begin(), mIter->end(), greater<int>());//сортировка по возрастанию } else { sort(mIter->begin(), mIter->end(), less<int>());//сортировка по убыванию } even = !even; } //Вывод на экран отсортированной матрицы cout << "Sort matrix m1" << endl; for(mIter = m1.begin() ; mIter != m1.end() ; ++mIter) { for(vIter = mIter->begin(); vIter != mIter->end(); ++vIter) { cout << *vIter << " "; } cout << endl; } cout << endl; return 0;}
Неизвестный
22.11.2006, 21:51
общий
это ответ
Здравствуйте, POSTAL!

Немного более простой пример, использующих функцию сортировки массивов методом пузырька.

Приложение:
#include <iomanip.h>#include <fstream.h>inline void swap(double *a,double *b){ double temp = *a; *a = *b; *b = temp;}void sort_matrix(double *matrix,int entry_count,bool A_Z = true){ bool noch_ein_mal = false; do { noch_ein_mal = false; for (int i = 0; i<entry_count-1; i++) { if (A_Z) { if (matrix[i]>matrix[i+1]) {swap(&matrix[i],&matrix[i+1]);noch_ein_mal=true;} } else if (matrix[i]<matrix[i+1]) {swap(&matrix[i],&matrix[i+1]);noch_ein_mal=true;} } } while (noch_ein_mal);}int main(){ double matr[10][10]; int i,j; for (i=0; i<10; i++) { for (j=0; j<10; j++) { matr[i][j] = i+j; } } for (j = 0; j<10; j++) { sort_matrix(matr[j],10,!(j%2)); } ofstream out("out.txt"); for (j=0; j<10; j++) { out<<‘\n‘; for (i=0; i<10; i++) { out<<setw(10)<<matr[i][j]; } }}
Неизвестный
23.11.2006, 03:11
общий
это ответ
Здравствуйте, POSTAL!
Вот текст с использование сортировки методом выбора

Приложение:
// matrix_sort.cpp : Defines the entry point for the console application.//#include <stdlib.h>#include <stdio.h>#include <time.h>#define ASC 1#define DESC 2#define SIZE 10int A[SIZE][SIZE];void select_sort(int col, int order) { int i,j, index, temp; for(i=0; i<SIZE-1; i++) { index = i; for(j=i+1; j<SIZE; j++) { if(order == ASC) { if(A[index][col] < A[j][col]) index = j; } else { if(A[index][col] > A[j][col]) index = j; } } if(i!=index) { temp = A[i][col]; A[i][col] = A[index][col]; A[index][col] = temp; } }}int main(int argc, char* argv[]) { int i, j; srand((unsigned)time(NULL)); for(i=0; i<SIZE; i++) for(j=0; j<SIZE; j++) A[i][j] = rand()%100; for(i=0; i<SIZE; i++) { for(j=0; j<SIZE; j++) { printf("%d ", A[i][j]); } printf("\n"); } printf("\n"); for(i=0; i<SIZE; i++) if(i%2) select_sort(i, ASC); else select_sort(i, DESC); for(i=0; i<SIZE; i++) { for(j=0; j<SIZE; j++) { printf("%d ", A[i][j]); } printf("\n"); } return 0;}
Форма ответа