Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.11.2019, 10:12   #1
Enotik_1998
Пользователь
 
Регистрация: 09.03.2018
Сообщений: 77
По умолчанию Работа с матрицами в С

Здравствуйте. Помогите, пожалуйста, с задачей: Проверить упорядочены ли элементы столбцов матрицы. Если нет, то упорядочить их в порядке возрастания методом просеивания.
Вот я сделал ввод-вывод матрицы:
Код:
#include <stdio.h>
#include <math.h>
#include <conio.h>
#include <stdlib.h>
int main ()
{
int a[10][10];
int i, j, n, m, r, k, p;
printf ("Vvedite razmer matrici n=");   
scanf ("%d", &n);
k=0;
for (i=0; i<n; i++)
for (j=0; j<n; j++)
{
	printf("a[%d][%d]=", i, j);
	scanf("%d", &a[i][j]);
}
for (i=0; i<n; i++)
{ 
for (j=0; j<n; j++)
	printf("%2d", a[i][j]);
	printf("\n");
}               
}
Проверку на упорядоченность я делаю так:
Код:
for (i = 0; i < n; i++) //просматриваем каждую строку и
 // проверяем, упорядочена ли она
{
	k = p = 0;	
	for (j = 0; j < n - 1; j++)
     	if (A[i][j] <= A[i][j + 1]) 
k++;//упорядочена ли по возрастанию
		else
			p++;// упорядочена ли по убыванию
	if (k != n - 1 && p != n - 1) // если строка не упорядочена,
		//то выполняем сортировку
Я нашёл сам метод просеивания для массива:
Код:
for (i=0;i<=n-2;i++)
 if (A[i]>A[i+1])
 {
  r=A[i];
  A[i]=A[i+1];
  A[i+1]=r;
  j=i;
  while (A[j]<A[j-1]&&j>0)
  {
    r=A[j];
    A[j]=A[j-1];
    A[j-1]=r;
    j=j-1;
  }
}
Но как его сделать для матрицы?

Последний раз редактировалось Enotik_1998; 08.11.2019 в 10:39.
Enotik_1998 вне форума Ответить с цитированием
Старый 08.11.2019, 11:21   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Вам не надо делать его для матрицы. Вам надо его делать для каждого столбца матрицы, который суть массив.
p51x вне форума Ответить с цитированием
Старый 09.11.2019, 10:25   #3
Enotik_1998
Пользователь
 
Регистрация: 09.03.2018
Сообщений: 77
По умолчанию

Т.е. мне нужно в этом цикле i поменять на j?:
Код:
for (i=0;i<=n-2;i++)
 if (A[i]>A[i+1])
 {
  r=A[i];
  A[i]=A[i+1];
  A[i+1]=r;
  j=i;
Enotik_1998 вне форума Ответить с цитированием
Старый 10.11.2019, 11:07   #4
Enotik_1998
Пользователь
 
Регистрация: 09.03.2018
Сообщений: 77
По умолчанию

Вот я сделал отдельный цикл, но там ничего не сортируется:
Код:
#include <stdio.h>
#include <math.h>
#include <conio.h>
#include <stdlib.h>
int main ()
{
int a[10][10];
int i, j, n, m, r, k, p;
printf ("Vvedite razmer matrici n=");   
scanf ("%d", &n);
for (i=0; i<n; i++)
for (j=0; j<n; j++)
{
	printf("a[%d][%d]=", i, j);
	scanf("%d", &a[i][j]);
}
for (i = 0; i < n; i++) 
{
	k = p = 0;	
	for (j = 0; j < n - 1; j++)
     	if (a[i][j] <= a[i][j + 1]) 
	k++;
		else
			p++;
	if (k != n - 1 && p != n - 1) 
	{
		for (i=0;i<=n-2;i++)
		for (m = 0; m <= j; m++)
 		if (a[i][m]>a[i+1][m])
 		{
  			r=a[i][m];
  			a[i][m]=a[i+1][m];
  			a[i+1][m]=r;
  			m=i;
  		while (a[i][m]<a[i][m-1]&&j>0)
  		{
    		r=a[i][m];
    		a[i][m]=a[i][m-1];
    		a[i][m-1]=r;
    		m=m-1;
  		}	
		}
    }
}
for (i=0; i<n; i++)
{ 
for (j=0; j<n; j++)
	printf("%2d", a[i][j]);
	printf("\n");
}               
}
Что тут надо исправить?
Enotik_1998 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с матрицами (C++) Nadia Trofimova Помощь студентам 2 23.10.2013 20:17
Работа с матрицами (C++) helperDar Помощь студентам 4 22.10.2013 16:20
Работа с матрицами C++ OldUnion Помощь студентам 0 09.11.2012 21:25
Работа с матрицами Vera_0709 Помощь студентам 1 28.12.2011 05:47
Работа с матрицами (норма матрицы, работа со строками) Neitrosha Помощь студентам 1 26.11.2010 20:19