Показать сообщение отдельно

  #3  
Старый 13.12.2009, 23:20
ss88
Участник форума
Регистрация: 27.11.2008
Сообщений: 161
С нами: 9185589

Репутация: 128
По умолчанию

Цитата:
Сообщение от Nelson17  
Дана целочисленная матрица размера m на n. Размер матрицы задается динамически во время выполнения программы. Для хранения элементов матрицы использовать динамическое выделение памяти. Матрица заполняется случайными числами в диапазоне от -50 до 50. Используя алгоритм пузырьковой сортировки отсортировать элементы каждой четной строки по возрастанию, а нечетную - по убыванию. Заполнение матрицы случайными числами, сортировку элементов строк матрицы и вывод матрицы на экран организовать в виде функции.
Задание вроде не сильное с первого взгляда, но написать не могу. Помогите по-возможности. С++
Не путай С и С++
Вот:
Код:
#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>

void fill_matrix(int* matrix, int m, int n);
void print_matrix(int* matrix, int m, int n);
void sort_matrix(int* matrix, int m, int n);

int main(int argc, char** argv)
{
	int m, n;
	(void) printf("Введите количество строк: ");
	(void) scanf("%d", &m);
	(void) printf("Введите количество столбцов: ");
	(void) scanf("%d", &n);
	
	int * matrix = malloc(m * n * sizeof(int));
	
	fill_matrix(matrix,m,n);
	
	print_matrix(matrix,m,n);
	
	(void) printf("Сортировка\n");
	
	sort_matrix(matrix,m,n);
	
	print_matrix(matrix,m,n);
	
	return 0;
}

void fill_matrix(int* matrix, int m, int n){
	for(int i = 0; i < m; i++){
		for(int j = 0; j < n; j++){
			int r = rand() % 51;
			matrix[m*i + j] = (r % 2)?-r:r;
		}
	}
}

void print_matrix(int* matrix, int m, int n){
	(void) printf("\nМатрица [%d,%d]\n", m, n);
	
	for(int i = 0; i < m; i++){
		for(int j = 0; j < n; j++){
			(void) printf("%3d ", matrix[m*i + j]);
		}
		(void) printf("\n");
	}
	(void) printf("\n");
}

void sort_matrix(int* matrix, int m, int n){
	for(int i = 0; i < m; i++){
		bool cond = true;
		while(cond) {
			cond = false;
			for(int j = 0; j < n - 1; j++){
				if(i % 2){
					if(matrix[m*i + j] < matrix[m*i + j + 1])
						cond = true;
				} else {
					if(matrix[m*i + j] > matrix[m*i + j + 1])
						cond = true;
				}
				
				if(cond){
					int swp = matrix[m*i + j];
					matrix[m*i + j] = matrix[m*i + j + 1];
					matrix[m*i + j + 1] = swp;
				}
			}
		}
	}
}
Результаты в таком виде:
Цитата:
rocky@rocky-laptop:~$ ./s
Введите количество строк: 4
Введите количество столбцов: 4

Матрица [4,4]
10 -49 -9 34
32 -37 -37 48
-45 -19 -5 -31
20 -19 -29 22

Сортировка

Матрица [4,4]
34 10 -9 -49
-37 -37 32 48
-5 -19 -31 -45
-29 -19 20 22
Если не захочет компилироваться в среде, которую ты используешь, то заюзай gcc:
Цитата:
rocky@rocky-laptop:~$ gcc -Wall -pedantic -std=c99 simple_lab3.c -o s
Цитата:
я забыл написать, что нужно написать на паскале)))
можешь переписать пожалуйста)
Какая неописюемая наглость Не могу, я паскаль последний раз видел на 1-м курсе, а это было лет 7 назад, но я запомнил, что его лучше не видеть
Перепиши сам, это не трудно

Последний раз редактировалось ss88; 13.12.2009 в 23:30..
 
Ответить с цитированием