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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.12.2010, 18:39   #1
Markuss
 
Регистрация: 05.12.2010
Сообщений: 8
По умолчанию Двумерный динамический массив

Здравствуйте!
Помогите пожалуюста разобраться в данном задании
"Дана матрица NxM.Упорядочить её строки по возростанию их максимальных элементов"

вот мой код, программа запускается но после ввода массива выдает ошибку,т.е на сортировке происходит сбой,обьясните пожалуюста где допущена ошибка и обьяснить работу 3-ей части программы, т.е "Построение строк матрицы по возрастанию их максимальных членов". Заранее большое спасибо.


Код:

Код:
#include <iostream.h>
#include <iomanip.h>
#include <math.h>
#include <stdlib.h>
#include <time.h>

int main()
{
	int i,j,n,m,k,g,t;


//--- Ввод двумерного динамического массива NxM


cout <<"Vvedite kolichestvo strok (N): ";
cin >> n;
cout <<"Vvedite kolichestvo stolbcov (M): ";
cin >> m;
int *b=new int[m];
//--- Выделение памяти
int **massiv = new int*[n];
for(k= 0; k < n; k++)
massiv[k] = new int[m];

//--- Тут  massiv[i][j]
for(i = 0; i < n; i++)
for(j = 0; j < m; j++)
{
cout <<"s["<<i<<"]["<<j<<"]:";
cin >> massiv[i][j];
}
// --- Построение строк матрицы по возрастанию их максимальных членов

for (i=0;i<n;i++)
{
	b[i]=massiv[i][0];
	for (j=1;j<m;j++)
		if (massiv[i][j]>b[i]) b[i]=massiv[i][j];
}
for (i=0;i<n-1;i++)
for (j=i+1;j<n;j++)
if (b[i]>b[j])
{
	t=b[i];
	b[i]=b[j];
	b[j]=t;
	for (g=0;g<m;g++)
	{
		t=massiv[i][g];
		massiv[i][g]=massiv[j][g];
		massiv[j][g]=t;
	}
}    
// --- Вывод двумерного массива  NxM
for (i=0;i<n;i++)
{
	for (j=0;j<m;j++)
		cout <<setiosflags(ios::fixed)<<setw(10)<<setprecision(3)<<
		massiv[i][j]<<
		" ";
	cout<<endl;
}


//--- Освобождение выделенной памяти
for (int s = 0; s <n; s++)
delete[]massiv[s];
delete[]massiv;
delete[]b;
return 0;
}

Последний раз редактировалось Markuss; 06.12.2010 в 19:35.
Markuss вне форума Ответить с цитированием
Старый 06.12.2010, 19:23   #2
Markuss
 
Регистрация: 05.12.2010
Сообщений: 8
По умолчанию

Может я неправильный тип подключил?
Markuss вне форума Ответить с цитированием
Старый 06.12.2010, 19:27   #3
Hacker19_90
Delphi Warrior
Старожил
 
Аватар для Hacker19_90
 
Регистрация: 15.08.2008
Сообщений: 2,502
По умолчанию

Может обьясните где у вас массив b обьявлен?
Если нет то помогу найти ошибку!!!
Mess with the best, die like the rest. (с) Hackers
Лабораторные, курсовые на Delphi\Pascal\C++
ya.flex-freelance@yandex.ru Icq - 636-954-303
Hacker19_90 вне форума Ответить с цитированием
Старый 06.12.2010, 19:33   #4
Markuss
 
Регистрация: 05.12.2010
Сообщений: 8
По умолчанию

да массив b и не обьявлен
и в чем же ошибка?

а нет я криво код скопировал
вот у меня обьявлен b
Код:
cout <<"Vvedite kolichestvo strok (N): ";
cin >> n;
cout <<"Vvedite kolichestvo stolbcov (M): ";
cin >> m;
int *b=new int[m];
Самйю малость переделал код но в итоге пришол к такой же ошибке, т.е где то при подсчете сбой


Код:
#include <iostream.h>
#include <iomanip.h>

int main()
{
int n,m,i,j,k;
double s,t;

cout << "Vvedite razmer n m" << endl;
	cin >> n >> m;
// Выделение памяти под массив


double  **umas2;
  umas2=new double*[n];  
    for(i=0; i<n; i++) 
	    umas2[i]=new double[m];

	for (i=0; i<n; i++) 
	 for (j=0; j<m; j++) 
	{
	cout << "Vvedite umas2[" << i << "][" << j << "]: " ;
	cin >> umas2[i][j];
	}


// Выделение памяти под  b


double  *b;
 b=new double[n]; 


	

	// Действия
	

	for (i=0; i<n; i++) 
	{
               
 	b[i]=umas2[i][0];
	for (j=1;j<m;j++)
		if (umas2[i][j]>b[i]) b[i]=umas2[i][j];
	}
	for (i=0;i<n-1;i++)
		for (j=i+1;j<n;j++)
			if (b[i]>b[j])
			{
				t=b[i];
				b[i]=b[j];
				b[j]=t;
				for (k=0;k<m;k++)
				{
					t=umas2[i][k];
					umas2[i][k]=umas2[j][k];
					umas2[j][k]=t;
				}
			}




           //  Вывод


	for (i=0; i<n; i++) 
	{
	 for (j=0; j<m; j++) 
		cout << setw (9) << umas2[i][k] << " "; 
	 cout << endl;
	}




   // Очистка памяти под массив


           for(i=0; i<n; i++) 
	      delete []umas2[i];
   delete []umas2;
   umas2=NULL;

  // Очистка памяти под б


   delete []b;
   b=NULL;

return 0;
}

Последний раз редактировалось Stilet; 07.12.2010 в 09:18.
Markuss вне форума Ответить с цитированием
Старый 06.12.2010, 20:26   #5
Markuss
 
Регистрация: 05.12.2010
Сообщений: 8
По умолчанию

Улучшил читабельность программы и немного подправил код


Код:
#include <iostream.h>
#include <iomanip.h>

int main()
{
int n,m,i,j,k;
double t;
// Ввод размерности массива
cout << "Vvedite razmer n m" << endl;
cin >> n >> m;

// Выделение памяти под массив
double  **umas2;
umas2=new double*[n];  
for(i=0; i<n; i++) 
umas2[i]=new double[m];

// Тут ввод массива
for (i=0; i<n; i++) 
for (j=0; j<m; j++) 
{
cout << "Vvedite umas2[" << i << "][" << j << "]: " ;
cin >> umas2[i][j];
}

// Выделение памяти под массив b
double  *b;
b=new double[n]; 

	

// Действия
for (i=0; i<n; i++) 
{
              
b[i]=umas2[i][0];
for (j=1;j<m;j++)
if (umas2[i][j]>b[i]) b[i]=umas2[i][j];
}
for (i=0;i<n-1;i++)
for (j=i+1;j<n;j++)
if (b[i]>b[j])
{
t=b[i];
b[i]=b[j];
b[j]=t;
for (k=0;k<m;k++)
{
t=umas2[i][k];
umas2[i][k]=umas2[j][k];
umas2[j][k]=t;
}
}

//  Вывод на экран
for (i=0; i<n; i++) 
{
for (j=0; j<m; j++) 
cout << setw (9) << umas2[i][k] << " "; 
cout << endl;
}

// Очистка выделенной под umas2 памяти
for(i=0; i<n; i++) 
delete []umas2[i];
delete []umas2;
umas2=NULL;
 
// Очистка выделенной под b памяти
delete []b; 
b=NULL;
return 0;
}
Но я тут сам с сабой разговариваю

up
нет ни малейшей идеи

видите у меня ошибку в коде,я уже 3 час втыкаю в монитор но не могу сообразить

Последний раз редактировалось Stilet; 07.12.2010 в 09:18.
Markuss вне форума Ответить с цитированием
Старый 07.12.2010, 00:50   #6
Hacker19_90
Delphi Warrior
Старожил
 
Аватар для Hacker19_90
 
Регистрация: 15.08.2008
Сообщений: 2,502
По умолчанию

Даю посказку:
Раздел С++ посмотри! http://programmersforum.ru/showthread.php?t=125600
Mess with the best, die like the rest. (с) Hackers
Лабораторные, курсовые на Delphi\Pascal\C++
ya.flex-freelance@yandex.ru Icq - 636-954-303
Hacker19_90 вне форума Ответить с цитированием
Старый 07.12.2010, 09:29   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Не проверял но, раз уж ты сам с собой разговариваешь, вот покрути это:
Код:
// rwerwe.cpp: определяет точку входа для консольного приложения.
//

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

const int n=5,m=4;
int a[n][m+1];

int _tmain(int argc, _TCHAR* argv[])
{

	// Нулевой элемент - максимум
	for(int i=0;i<n;i++){
		for(int j=1;j<=m;j++){
			a[i][j]=rand()%50;printf("%d\t",a[i][j]);
			a[i][0]=(a[i][j]>a[i][0])?a[i][j]:a[i][0];
		};printf("\n");
	}; printf("\n");

	// Сортирим по максимумам
	for(int i=0;i<n;i++){
		for(int j=0;j<n;j++){
			if(a[i][0]<a[j][0]){
				for(int e=0;e<=m;e++){
					int k=a[i][e];a[i][e]=a[j][e];a[j][e]=k;
				}
			}
		}
	}
	// Выводим
	for(int i=0;i<n;i++){
		for(int j=1;j<=m;j++){
			printf("%d\t",a[i][j]);
		};printf("\n");
	}; printf("\n");
	getchar();
	return 0;
}
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
двумерный динамический массив amandra Общие вопросы Delphi 16 30.07.2013 22:56
Двумерный динамический массив Markuss Общие вопросы C/C++ 5 07.12.2010 00:40
Двумерный динамический массив Inna_L Общие вопросы C/C++ 2 01.10.2010 23:27
Двумерный динамический массив С++ UnknownVirus Помощь студентам 7 20.06.2010 01:48
Двумерный динамический массив IceExecutioner Общие вопросы Delphi 1 04.06.2009 08:41