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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.07.2009, 17:28   #1
defol-2009
 
Регистрация: 17.07.2009
Сообщений: 4
Восклицание Необходимо отсортировать по возрастанию без флага перестановки матрицу

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

Вот текст программы но надо чтобы он сортировал в таком виде


подскажите как это можно реализовать?


Код:

Код:
#include<stdio.h>
#include<iostream.h>
#include<stdlib.h>
#include<conio.h>
#include<string.h>


const RAZ = 10;			//Максимальный размер массиваvoid okno(int x1,int y1,int x2,int y2,int bkcol,int colb,char zag[15]);
void obnul(const int n, const int c, int**);
void sortir(const int n,const int c,int**);
void imputmas(const int n,int**);
void outputmas(const int n,const int c,int**);

int main()
{
	int i,n=0,d,c;
	int matr[RAZ][RAZ];
	okno(1,1,80,80,BLACK,GREEN,""); // Заставка программы
   gotoxy (31,12);
	cprintf (" METODY SORTIROVKI\n\r ");
   gotoxy (7,13);
   cprintf (" SORTIROVKA PO VOZRASTANIU METODOM OBMENA BEZ FLAGA PERESTANOVKI\n ");
   gotoxy (62,24);
	cprintf ("Vasilieva J.N.");
   getchar();
   clrscr();
	okno(25,1,60,7,WHITE,BLACK,"Opisanie"); // Описание программы
	cprintf("\r\n V dvumernom massive razmerom\r\n");
	cprintf("2n x 2n otsortirovat' stroki \r\n");
	cprintf(" oblasti A6 po vozrastaniu metodom\r\n");
	cprintf(" obmena bez flaga perestanovki\r\n");
	okno(2,12,39,34,BLACK,WHITE,"Vvod"); // Окно ввода
   gotoxy (7,2);
	cprintf ("Vvedite razmer massiva"); //Ввод размера матрицы
   gotoxy(17,4);
	cin >> n;
   if(2*n>RAZ)   // Проверка размера массива
	{
		okno(25,10,60,12,WHITE,RED,"ERROR");
		cprintf("\n    Slishkom bol'shoj massiv!!!");
		getchar();
		return 0;
	}
    if(!n)      // Проверка содержания введенного размера
	{
		okno(25,10,60,12,WHITE,RED,"ERROR");
		cprintf("\n  Nekkorektnuj razmer massiva!!!");
		getchar();
		return 0;
	}
   d=2*n%3; // Расчет сортируемого фрагмента 
	c=(2*n-d)/3;
   if(n<3)
	{
		c=1;
	}
	int *dinamo[RAZ];
	for(i = 0; i < RAZ; i++)
		dinamo[i] = matr [i];
	imputmas(n,dinamo); //Формирование массива
	okno(2,12,39,34,BLACK,WHITE," Ishodnuj massiv\n\r");
	outputmas(n,c,dinamo); //Вывод массива
	sortir(n,c,dinamo); //Сортировка
	obnul(n,c,dinamo); //Обнуление неотсортированных строк
	okno(42,12,79,34,BLACK,WHITE,"Poluchennuj massiv\n\r");
	outputmas(n,c,dinamo); //Вывод полученного массива
	getchar();
	return 0;
}

void okno(int x1,int y1,int x2,int y2,int bkcol,int colb,char zag[15])
{
	window(x1,y1,x2,y2);
	textbackground(bkcol);
	textcolor(colb);
	clrscr();
	gotoxy((x2 - x1 - strlen(zag)) / 2,1);
	cprintf("%s\n\r",zag);
}

void imputmas(const int n,int** dinamit)
{
	int i,j;
	for(i = 0; i < 2 * n; i++)
		for(j = 0; j < 2 * n; j++)
			dinamit[i][j] = 10*(i+1)-j;  //Формула для задания массива
}

void outputmas(const int n,const int c,int** dinamit)
{
	int i,j;

   for(i = 0; i < 2 * n; i++)
	{
      gotoxy(13-2*n,i+3);
     	for(j = 0; j < 2 * n; j++)
         if((j <= c-1)||(j >= 2*n - c))  //Выделение сортируемого фрагмента
			{

           	textbackground(BLACK);
				textcolor(RED);
				cprintf("%3i",dinamit[i][j]);
				textcolor(WHITE);
				textbackground(BLACK);
         }
        	else cprintf("%3i",dinamit[i][j]);
			gotoxy(13-2*n,i+4);
	}
}

void sortir(const int n,const int c,int** dinamit)
{
	int i, j, z, k;
	for (k=0; k<2*n-2;  k++)
	{
		for (i=0;i<2*n;i++)
		{
			for (j=0;j<2*n-1;j++)
				if((j < c-1) || (j>=2*n-c))/
				{
					if(dinamit[i][j]>dinamit[i][j+1])
					{
						z=dinamit[i][j];
						dinamit[i][j]=dinamit[i][j+1];
						dinamit[i][j+1]=z;
					}
				}
		}
	}

}

void obnul(const int n,const int c,int** dinamit)
{
	int i,j;
	for(i = 0; i < 2 * n; i++)
		for(j = 0; j < 2 * n; j++)
			if(j >= c && j < 2*n - c)
				dinamit[i][j] = 0;
}
вначале идет просто расположение окон и т.д.....
а вот где сама формула чтобы поменять

хотя бы подсказаньку какую нить....

Последний раз редактировалось MaTBeu; 28.07.2009 в 21:16.
defol-2009 вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Отсортировать матрицу вот такого вида! defol-2009 Общие вопросы C/C++ 2 22.07.2009 13:23
Транспонировать матрицу(Без исп. доп. массивов)) Doublefaced Помощь студентам 4 27.06.2009 13:03
Объясните пожалуйста как можно считать значения в этом файле в вектор, 4 -ую матрицу, 6-ую матрицу ciaonataha Помощь студентам 1 30.03.2009 20:57
Переформировать матрицу - столбцы по возрастанию их последних элементов HoroHoro Паскаль, Turbo Pascal, PascalABC.NET 9 23.12.2008 19:20