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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.08.2010, 08:53   #1
FatalLight
Пользователь
 
Регистрация: 16.08.2010
Сообщений: 13
Печаль Обработка и сортировка 2 мерного динамического масива

проблема в следующем : пробую ортировать 2 мерный масив методом выбора, если пытаюсь сортировать статический массив то массив просто выводится, но не сортирется.А если память выделять вот так
int**mas=new int*[str];
for(i=0;i<str;i++)
mas[i]=new int[stb]
то при компилировании ошибки нет но прога вообще не работает
подскажите как можно отсортить 2 мерный днамический масив не переводя его в 1 мерный и не используя функций.
мой код :
Код:
#include <iostream.h>
void main(){
	int i,j,z,imin,imin_2,a,b,n,tmp;
   const int str=3,stb=2;
	int mas[str][stb];

   /*int**mas=new int*[str];
   for(i=0;i<str;i++)
   	mas[i]=new int[stb];*/

   for(i=0;i<str;i++)
   	for(j=0;j<stb;j++)
      	cin>>mas[i][j];
   for(n=0,z=1,a=0,b=1,i=0,j=0;n<str*stb-1;n++){
   	imin=i;imin_2=j;
      for(i=a;i<str;i++){
      	for(j=b;j<stb;j++){
         	if(mas[i][j]<mas[imin][imin_2]){imin=i;imin_2=j;}
         }
         if(j==stb){j=0;}
      }
      tmp=mas[i][j];
      mas[i][j]=mas[imin][imin_2];
      mas[imin][imin_2]=tmp;
      z++;
      if(z<stb){i=a;b++;j=b;}
      if(z==stb){z=0;a++;b=0;i=a-1;j=stb-1;}
   }
   cout<<"\nololo\n";;
   for(i=0;i<str;i++){
   	for(j=0;j<stb;j++)
      	cout<<mas[i][j]<<' ';
      cout<<"\n";
   }
   cin.get();
   cin.get();
}

Последний раз редактировалось Stilet; 20.08.2010 в 08:57.
FatalLight вне форума Ответить с цитированием
Старый 20.08.2010, 09:20   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
методом выбора
Предлагаю свою корректировку:
Код:
// gdfgfdg.cpp: определяет точку входа для консольного приложения.
//

#include "stdafx.h"
#include <iostream>

using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
	int i=5;
	int **a=new int*[i];
	for (int k=0;k<i;k++){
		a[k]=new int[k];
		for (int l=0;l<i;l++){
			a[k][l]=rand();
			cout<<a[k][l]<<"\t";
 		} cout<<"\n";
	}
	int imin,e;
	for(int t=0;t<i;t++){
		for (int k=0;k<i;k++){
			imin=k;
			for (int l=k;l<i;l++){ 
				imin=(a[t][l]<a[t][imin])?l:imin;
			} 
			e=a[t][k];a[t][k]=a[t][imin];a[t][imin]=e;
		}
	}
	cout<<'\n';
	for (int k=0;k<i;k++){
		for (int l=0;l<i;l++){
			cout<<a[k][l]<<"\t";
 		} cout<<"\n";
	}
	system("pause");
	return 0;
}
Смысл понятен?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 20.08.2010, 14:28   #3
FatalLight
Пользователь
 
Регистрация: 16.08.2010
Сообщений: 13
По умолчанию

хм... всё понятно, но масив сортируется построчно.
А я имел ввиду что допустим иходный массив такой:
9 1 8
2 7 3
6 4 5
а после сортировки должын получить
1 2 3
4 5 6
7 8 9
проблема в том что если масив не динамический он располагается в памяти построчно тоесть перебрать все элементы можно используя только 1 индекс, например так:mas[0][i];
но я никак не могу разобраться с динамическим! он храниться както иначе в памяти.
прошу ПМОГИТЕ!!! как его отсортить =(...

Последний раз редактировалось FatalLight; 20.08.2010 в 14:31. Причина: синтаксические ошибки
FatalLight вне форума Ответить с цитированием
Старый 20.08.2010, 16:22   #4
Tema_Crazzzy
Форумчанин
 
Регистрация: 29.04.2010
Сообщений: 114
По умолчанию

FatalLight, распологается то он "построчно", но к элементу можно обратиться и так:
Код:
for (i=0;i<str;i++)
    for (j=0;j<stb;j++)
       *(mas+i*str+j)...бла-бла-бла

Последний раз редактировалось Tema_Crazzzy; 20.08.2010 в 16:58.
Tema_Crazzzy вне форума Ответить с цитированием
Старый 20.08.2010, 16:44   #5
sever-42
Пользователь
 
Регистрация: 22.04.2010
Сообщений: 96
По умолчанию

тут
http://programmersforum.ru/showpost....02&postcount=6
include <Qt>
sever-42 вне форума Ответить с цитированием
Старый 20.08.2010, 22:57   #6
FatalLight
Пользователь
 
Регистрация: 16.08.2010
Сообщений: 13
По умолчанию

sever-42, опять же масив cортируется только построчно =(
А как его полнотью отсортить?
FatalLight вне форума Ответить с цитированием
Старый 21.08.2010, 00:41   #7
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,645
По умолчанию

Можно распрямить массив относительно координат ячеек
Код:
#include <stdlib.h>
#include <iostream>

using namespace std;

int main()
{
	int n=3;
	int m=5;
	int **mas=new int*[n];
	for (int i=0;i<n;i++)
	{
		mas[i]=new int[m];
		for (int j=0;j<m;j++)
		{
			mas[i][j]=rand()%50;
			cout<<mas[i][j]<<"\t";
		}
		cout<<"\n";
	}
	for (int k=0;k<n*m-1;k++)
	{
		int imin=mas[k/m][k%m];
		for (int i=k/m;i<n;i++)
		for (int j=0;j<m;j++)
		if ((i>k/m)||(j>=k%m))
		if ((mas[i][j]<imin))
		{
			imin=mas[i][j];
			mas[i][j]=mas[k/m][k%m];
			mas[k/m][k%m]=imin;
		}
	}
	cout<<"\n";
	for (int i=0;i<n;i++)
	{
		for (int j=0;j<m;j++)
		cout<<mas[i][j]<<"\t";
		cout<<"\n";
	}
	system("pause");
	return 0;
}
eoln вне форума Ответить с цитированием
Старый 21.08.2010, 00:57   #8
sever-42
Пользователь
 
Регистрация: 22.04.2010
Сообщений: 96
По умолчанию

Код:
#include <cstdlib>
#include <iostream>
using namespace std;

int main()
{
	const unsigned int n = 5;
	unsigned int i, j, k, l;
	int t;
	int arr[n][n];
	
	for (i = 0; i < n; ++i) {
		for (j = 0; j < n; ++j) {
			arr[i][j] = rand() % 100;
			cout << arr[i][j] << ' ';
		}
		cout << endl;
	}
	cout << endl;
	for (i = 0; i < n; ++i)
		for (j = 0; j < n; ++j)
			for (k = 0; k < n; ++k) 
				for (l = 0; l < n; ++l)
					if (arr[i][j] < arr[k][l]) {
						t = arr[i][j];
						arr[i][j] = arr[k][l];
						arr[k][l] = t;
					}	
	for (i = 0; i < n; ++i) {
		for (j = 0; j < n; ++j)
			cout << arr[i][j] << ' ';
		cout << endl;
	}
	return 0;
}
полностью сортирует. Поправил.
include <Qt>

Последний раз редактировалось sever-42; 21.08.2010 в 11:36.
sever-42 вне форума Ответить с цитированием
Старый 21.08.2010, 08:41   #9
FatalLight
Пользователь
 
Регистрация: 16.08.2010
Сообщений: 13
По умолчанию

Код, который дал eoln компилиться и приносит желаемый результат.
sever-42 компилирую твой код и в старом(borland c++ 5.02) и в новом(VS_2010) компиляторе масив веравно не сортируется.
Вот архив со скринами:
Вложения
Тип файла: rar 2D.rar (134.7 Кб, 15 просмотров)
FatalLight вне форума Ответить с цитированием
Старый 02.09.2010, 14:12   #10
FatalLight
Пользователь
 
Регистрация: 16.08.2010
Сообщений: 13
По умолчанию

Цитата:
Сообщение от Tema_Crazzzy Посмотреть сообщение
FatalLight, распологается то он "построчно", но к элементу можно обратиться и так:
Код:
for (i=0;i<str;i++)
    for (j=0;j<stb;j++)
       *(mas+i*str+j)...бла-бла-бла
в опровержение тому что динамический массив распологается посторочно есть простая прога:
Код:
#include <iostream.h>
void main(){
	int str=2,stb=2;
   int **mas=new int *[str];
   for(int i=0;i<str;i++)
   	mas[i]=new int[stb];
   mas[0][0]=1;
   mas[0][1]=2;
   mas[1][0]=3;
   mas[1][1]=4;
   cout<<mas[0][0]<<' '<<mas[0][1]<<' '<<mas[1][0]<<' '<<mas[1][1]<<' '<<'\n';
	cout<<mas[0][0]<<' '<<mas[0][1]<<' '<<mas[0][2]<<' '<<mas[0][3]<<' '<<"\n\n";

   int a[2][2];
   a[0][0]=1;
   a[0][1]=2;
   a[1][0]=3;
   a[1][1]=4;
   cout<<a[0][0]<<' '<<a[0][1]<<' '<<a[1][0]<<' '<<a[1][1]<<' '<<'\n';
   cout<<a[0][0]<<' '<<a[0][1]<<' '<<a[0][2]<<' '<<a[0][3]<<' '<<'\n';
   cin.get();
}
хотя возможно я чтото не так понял.
если кто знает как распологается динамический масив в памяти,пожалуйста объясните подробно и популярно.

Последний раз редактировалось Stilet; 02.09.2010 в 14:53.
FatalLight вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
проверка динамического масива Лубышев Помощь студентам 3 31.08.2009 00:00
Создание н-мерного динамического массива Парсифаль Общие вопросы C/C++ 33 02.05.2009 18:29
Удаление записи из динамического масива... Altera Общие вопросы Delphi 4 09.06.2008 09:15
Сортировка строк 2-мерного массива Mayday_007 Помощь студентам 1 04.04.2008 09:26
СОХРАНИЯ В ФАЙЛ ДВУМЕРНОГО ДИНАМИЧЕСКОГО МАСИВА!!!! _FL@ER_ Помощь студентам 2 23.06.2007 16:31