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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 05.12.2009, 17:28   #1
frem-dag
Пользователь
 
Регистрация: 29.11.2009
Сообщений: 23
По умолчанию Матрица

Здравствуйте, уважаемые форумчане! Может быть проблема с которой я обращаюсь покажется очень простой, но все же, я уже всю голову сломал, никак не могу найти ошибку... Суть задачи следующая: В матрице Z(4,5) переписать в обратном порядке элементы в тех строках, которые начинаются с нуля. Все отрицательные элементы вывести в массив B. Вывести исходную и преобразованную матрицы, полученный массив.
Код:
#include <cstdlib>
#include <iostream>

using namespace std;

int main()
{
    const int n=4, m=5;
    int i,j,l,k,a[n][m];
    int b[l];
    int g=4;
    cout<<"Vvedite MATR 4x5"<<"\n";
    for(i=0;i<n;i++)
    {
      for(j=0;j<m;j++)
      {
        cin>>a[i][j];
        }
        }
        cout<<"\n";
        for(i=0;i<n;i++)
   {
        for(j=0;j<m;j++)
        {
        if (a[i][0]==0)
          for(j;j<m;j++)
          {
          k=a[i][j];
          a[i][j]=a[i][g];
          a[i][g]=k;
            g--;
            }
         else break;
        }
        }
      for(i=0;i<n;i++)
      {
        for(j=0;j<m;j++)
        {
          cout<<a[i][j]<<" ";
          }
          cout<<"\n";
          }
          cout<<"\n";
  for(i=0;i<n;i++)
     {
       for(j=0;j<m;j++)
        {
          if(a[i][j]<0)
        {
         b[l]=a[i][j];
         cout<<b[l]<<" ";
         l++;
        }
        }
        }
    system("PAUSE");
    return 0;
}
Вторая часть задачи, вывод одномерного массива отрицательных элементов, работает исправно, а проблема возникла с записью элементов в обратном порядке. Т.е я ввожу матрицу, где 2 и 4тая строки начинаются с 0, а программа первую и вторую строки оставляет без изменений, в 3тей строке изменённая 2ая строка, а в 4той изменённая 3я.
Я вводил переменную "g" для того чтобы менять элементы местами, в выделенном цикле, "g" я обозначал последний элемент и после преобразований g уменьшал на 1, чтобы от последнего элемента перейти к предоследнему. Наверно нужно присваивание g=4 поместить в цикл, а то получается что он только уменьшается и на след. строке уже другие значения... Только вот куда... или может я вообще не в тот направлении пошёл... Подскажите пожалуйста.
Изображения
Тип файла: jpg 3.3.JPG (19.4 Кб, 67 просмотров)
frem-dag вне форума Ответить с цитированием
Старый 05.12.2009, 18:50   #2
m0nax
Форумчанин
 
Аватар для m0nax
 
Регистрация: 25.09.2009
Сообщений: 525
По умолчанию

непонял как это компилится

Код:
    int i,j,l,k,a[n][m];
    int b[l];
мало того что l нигде не инициализирована, так она еще и не константа

////

а на счет обратного порядка можно сделать как-то так
Код:
	for (int i=0; i<n;++i)
	{
		if (arr[i][0] == 0)
			for (int j=0; j < n/2; ++j)	
			{
				int temp = arr[i][m-j-1] ;
				arr[i][m-j-1] = arr[i][j] ;
				arr[i][j]  = temp; 
			}
}

Последний раз редактировалось m0nax; 05.12.2009 в 18:52.
m0nax вне форума Ответить с цитированием
Старый 05.12.2009, 18:57   #3
frem-dag
Пользователь
 
Регистрация: 29.11.2009
Сообщений: 23
По умолчанию

Компилятор Dev-C++ 4.9.9.2
Я, если честно, сам не понял в чём дело... Если указывать b[l] строчкой выше, вместе с i,j,l,k,a[n][m] , то как раз не компилируется, стоило только указать на новой строчке, всё заработало.
frem-dag вне форума Ответить с цитированием
Старый 05.12.2009, 19:08   #4
m0nax
Форумчанин
 
Аватар для m0nax
 
Регистрация: 25.09.2009
Сообщений: 525
По умолчанию

короче вот так все работает
Код:
#include <iostream>
using std::cout ;
using std::endl;

/*
// В матрице Z(4,5)переписать в обратном порядке элементы в тех строках, которые начинаются с нуля.
// Все отрицательные элементы вывести в массив B.
// Вывести исходную и преобразованную матрицы, полученный массив.
*/

int main()
{
	const int n = 4 ;
	const int m = 5;
	int arr[n][m] ;	// = { 
	//	-10,3,7,-5,1,
	//	0,6,-8,3,7,		 
	//	0,3,7,5,-1,
	//	1,3,7,8,5,
	//};
	
	int k = 0 ; //кол-во отрицательных для будушего массива
	for (int i=0; i<n;++i)
	{
		for(int j=0;j<m;++j)
		{
			arr[i][j] = -20+rand()%50 ;
			arr[1][0] = 0;
			arr[3][0] = 0;

			cout << arr[i][j] << "\t";
			if(arr[i][j] <0) ++k; 
		}
		cout << endl ;
	}
	cout << "\n\n";

	int *arrB = new int[k] ; //используем кол-во отрицательных и делаем новый массив
	int h = 0 ; //счетчик для нового массива

	for (int i=0; i<n;++i)
	{
		if (arr[i][0] == 0)
			for (int j=0; j < n/2; ++j)	
			{
				int temp = arr[i][m-j-1] ;
				arr[i][m-j-1] = arr[i][j] ;
				arr[i][j]  = temp; 
			}

		for(int j=0;j<m;++j)
		{
			if(arr[i][j]<0)
			{
				arrB[h] = arr[i][j]; //новый массив заполняем
				++h ; 
			}
			cout << arr[i][j] << "\t"; 
		}
		cout << endl ;
	}

	cout << "\n\n";
	for (int i=0;i<k;++i) 
		cout << arrB[i] << "\t" ;

	delete[] arrB ;
	cout << endl ;
	system("PAUSE");
	return 0;
}
m0nax вне форума Ответить с цитированием
Старый 05.12.2009, 21:27   #5
frem-dag
Пользователь
 
Регистрация: 29.11.2009
Сообщений: 23
По умолчанию

Да, всё отлично работает. Спасибо огромное.
frem-dag вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Непонятки с DirectX (матрица поворота, камера, матрица проекции) ROD Общие вопросы C/C++ 2 17.09.2010 17:00
TurboPascal: граф, матрица смежности и матрица инцидентности. ulala Помощь студентам 0 02.12.2009 10:11
Матрица на C++ Maxs Помощь студентам 5 31.05.2009 14:35
Матрица jorjinho10 Паскаль, Turbo Pascal, PascalABC.NET 2 14.05.2009 15:18
матрица Verochka Помощь студентам 3 23.11.2008 22:42