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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 19.12.2012, 10:35   #1
St@ter
Пользователь
 
Регистрация: 02.12.2012
Сообщений: 18
По умолчанию Главная и побочная диагональ, элемент пересечения (поменять местами) Visual Studio 2010

Здравствуйте, помогите пожалуйста исправить ошибки в коде.. Я понимаю, что возможно - бред, но нужна помощь...
Задание:
Дан вещественный массив А[N][N]. Поменять местами максимальный
элемент главной и побочной диагоналей с элементом, расположенным на пересечении диагоналей.

Вот мой код:
Код:
#include <iostream>
#include <math.h>

using namespace std;
 int main( )
 {
	 setlocale( 0, "" );
	 int j, el_gl_diag, el_pob_diag, Pindtwo, Pindone ( 0 ), indtwo( 0 ), indone, max( 0 ) ;
	 cout << " Введите размерность массива  \n";
	 cin >> j;
	 double **a;
	 a = new double*[ j ];
	 for(int i = 0; i < j; i++)
	 {
		 a[ i ] = new double[ j ];
	 }
	 cout<< " Заполните главную диагональ \n";
	 for ( int y = 0; y <= j; y++ )
	 {
		 cin >> a[ y ][ y ];
		 if ( a[ y ][ y ] < a[y + 1][y + 1] )
		 { 
			 el_gl_diag = a[y+1][y+1];
			 indone = y + 1;
			 indtwo = y + 1;

		 }
		 for ( int o = 0; o <= j; o++ )
		 {
			 for ( int e = j; e >= 0 ; e-- )
			 {
			 cin >> a[ o ][ e ];
			 if ( ( o == y ) && ( e == y ) )
			 {
				 max = a[ o ][ e ];
			 }
			 if ( a[ o ][ e ] < a[o + 1][e + 1] )
			 { 
              el_pob_diag = a[o+1][e+1];
              Pindone = y + 1;
              Pindtwo = y + 1;

			 }
				a[Pindone][Pindtwo] = max;
				a[indone][indtwo] = max;
			 }
		 }
	 }
	 cout << "Макс эл - т гл. диагоняли = "<< el_gl_diag <<" Теперь = " <<a[indone][indtwo] <<"\n";
	 cout << "Макс эл-т поб диагонали = " << el_pob_diag<< " Теперь = " <<a[Pindone][Pindtwo]<<"\n";
	 system ( "pause ");
	 delete [ ]a;
	 return 0;

 }
St@ter вне форума Ответить с цитированием
Старый 19.12.2012, 11:49   #2
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

Цитата:
Поменять местами максимальный
элемент главной и побочной диагоналей с элементом, расположенным на пересечении диагоналей.
Вопрос для изобретателя таких задач: а какой элемент будет на пересечении диагоналей если N - чётное число?) (если вопрос вызывает сложность, то попробуйте нарисовать такие массивы на бумаге)
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума Ответить с цитированием
Старый 19.12.2012, 11:54   #3
<- DelpHIFanat ->
Пользователь
 
Аватар для <- DelpHIFanat ->
 
Регистрация: 07.11.2011
Сообщений: 58
По умолчанию

Ваш код я не смотрел, т. к. понял, что диагонали Вы вводите отдельно. Возможно Вам нужно это. Компилировал в Dev C++ Compiler, но MS Visual Studio тоже должно пойти.

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

using namespace std;

int main()
{
    srand(time(0));
    int a[30][30];
    unsigned short i, j, n, m;
    
    do
    {
             cout << "Vvedi razmer (2 <= N <= 30) N = ";
             cin >> n;
    }
    while ((n < 2) || (n > 30));
    
    if (n % 2 == 0)
    {
          cout << endl << "Reshenii net!" << endl << "Davi na ENTER!";
          cin.get();
          cin.get();
          return 1;
    }
    
    cout << endl << "Ishodnaya matricza:" << endl << endl;
    int max = -50;
    unsigned short maxi, maxj;
    for (i = 0; i < n; i++)
    {
        for (j = 0; j < n; j++)
        {
            a[i][j] = rand() % 100 - 50;
            cout << setw(4) << a[i][j];
            if ((j == i) || (j == n-1-i))
                  if (max < a[i][j])
                  {
                        max = a[i][j];
                        maxi = i;
                        maxj = j;
                  }   
        }
        cout << endl;
    }
    
    cout << endl << "max = " << max << endl << "Poluchennaya matricza:" << endl << endl;
    
    int tmp;
    m = n / 2;
    tmp = a[m][m];
    a[m][m] = a[maxi][maxj];
    a[maxi][maxj] = tmp;
    
    
    for (i = 0; i < n; i++)
    {
        for (j = 0; j < n; j++)
            cout << setw(4) << a[i][j];
        cout << endl;   
    }
    
    cout << endl << "Davi na ENTER!";
    cin.get();
    cin.get();
    return 0;
}
Лучше вообще не иметь знаний о чём-то, чем иметь неправильные знания об этом!..

Последний раз редактировалось <- DelpHIFanat ->; 19.12.2012 в 18:44. Причина: Не совсем правильно понял условие задачи.
<- DelpHIFanat -> вне форума Ответить с цитированием
Старый 19.12.2012, 17:55   #4
St@ter
Пользователь
 
Регистрация: 02.12.2012
Сообщений: 18
По умолчанию

<- DelpHIFanat ->, большое вам спасибо, только 1 но пользователь сам должен заполнить матрицу (

DiemonStar, при отсутствии элемента на пересечении диагоналей программа не должна срабатывать..
St@ter вне форума Ответить с цитированием
Старый 19.12.2012, 18:09   #5
<- DelpHIFanat ->
Пользователь
 
Аватар для <- DelpHIFanat ->
 
Регистрация: 07.11.2011
Сообщений: 58
По умолчанию

Ну, я надеюсь, на то, что Вы и сами способны написать такой код для ввода матрицы пользователем.

Код:
for (i = 0; i < n; i++)
       for (j = 0; j < n; j++)
       {
             cout << "a[" << i+1 << "]" << "[" << j+1 << "] = ";
             cin >> a[i][j];
       }
А после этого вывести введённую матрицу:

Код:
for (i = 0; i < n; i++)
    {
        for (j = 0; j < n; j++)
            cout << setw(4) << a[i][j];
        cout << endl;   
    }
Тогда Вам уже не понадобится модуль time.h и строка srand(time());. А если размерность чётная, то просто, как-то обозначьте это в программе, что в этом случае задача не имеет решений.
Лучше вообще не иметь знаний о чём-то, чем иметь неправильные знания об этом!..

Последний раз редактировалось <- DelpHIFanat ->; 19.12.2012 в 18:11.
<- DelpHIFanat -> вне форума Ответить с цитированием
Старый 19.12.2012, 18:23   #6
St@ter
Пользователь
 
Регистрация: 02.12.2012
Сообщений: 18
По умолчанию

<- DelpHIFanat ->, большое спасибо! Вроди, все вышло!!
St@ter вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Побочная диагональ mimit Помощь студентам 2 17.11.2012 10:08
побочная диагональ Женька Good Помощь студентам 1 27.12.2011 22:12
Побочная диагональ BaronVik Паскаль, Turbo Pascal, PascalABC.NET 3 28.04.2010 09:47
массив. поменять местами элемент felmor Паскаль, Turbo Pascal, PascalABC.NET 2 26.12.2008 20:50