Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Преобразование матрицы 
:(
    Опции темы
vitaxa3581
Дата 12.3.2013, 21:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 13.12.2012

Репутация: нет
Всего: нет



ребята как сделать так чтоб в матрице менялись местами второй и последний столбцы если они состоят только из отрицательных элементов. в моем варианте они просто меняются, а надо чтоб менялись только когда эти столбцы состоят только из отрицательных.
Код

#include <stdio.h>
#include <conio.h>
#define N 50
#define M 50
int main()
{
/* ==============  Исходные данные ================*/
int m, n;                  
int i, j;          // переменные циклов
int temp [N];     // временный масив          
int A[N][M];       // матрица     
 
 
/* ================ Создание матрицы  =====================*/
 
 printf("\n Введите количество строк и столбцов прямоугольной матрицы.\n");
 printf ("\n Cтроки: ");
   scanf("%d", &m);
 printf ("\n Cтолбцы: ");
   scanf("%d", &n);
   
   if ((m>1 && n>1 && m!=n)&& (m<M && n<N ))
         {
                      printf("\n========== Введите матрицу ================\n");
                      for (i=0; i<n; i++)
                      
            for (j=0; j<m; j++)
             { printf("\n Элемент %d столбца:", i+1);
                              printf (" A [%d] [%d] ", j, i);
                      scanf("%d", &A[j][i]);
                
                 }
                printf("\n============ Исходная матрица ==============\n");
                printf("\n");
               for ( j = 0; j < m; j ++ ) // цикл по строкам
                                                            { 
               for ( i = 0; i < n; i ++ ) // вывод одного столбца (в цикле)
           printf ( "%2d ", A[j][i] ); // 4 символа на число
           printf("\n \n");
                                                 } 
 /*======== меняем местами столбцы =============*/ 
           
                                for (j=0; j<m; j++)
                                    {
                                        temp [N] = A[j][1];
                                        A[j][1]=A[j][n-1];
                                        A[j][n-1]=temp[N];}
                                    
 
         
                                    printf("\n========== Преобразованая матрица ========== \n");
                                    printf("\n");
               for ( j = 0; j < m; j ++ ) // цикл по строкам
                                                            { 
               for ( i = 0; i < n; i ++ ) // вывод одного столбца (в цикле)
           printf ( "%2d ", A[j][i] ); // 2 символа на число
           printf("\n \n");
                                                 }                              
                                    }
         
 else printf("\n Ошибка!!! Повторите ввод!");
getch();
return 0;
}

PM MAIL   Вверх
feodorv
Дата 12.3.2013, 21:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: 12
Всего: 45



Ответил в личку  smile хотя условие задачи у Вас теперь по-другому выглядит.

Добавлено через 1 минуту и 55 секунд
Цитата(vitaxa3581 @  12.3.2013,  22:04 Найти цитируемый пост)
надо чтоб менялись только когда эти столбцы состоят только из отрицательных.

Так проверьте заранее, состоят они только из отрицательных элементов или нет...

Это сообщение отредактировал(а) feodorv - 12.3.2013, 21:38


--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
vitaxa3581
Дата 12.3.2013, 21:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 13.12.2012

Репутация: нет
Всего: нет



Цитата(feodorv @ 12.3.2013,  21:37)

Так проверьте заранее, состоят они только из отрицательных элементов или нет...

я немного подкоректировал, но меняет отрицательные элементы независимо от того весь столбец из отрицательных или нет. а надо чтоб замена происходила только при полностью отрицательном столбце



Код

 for (j=0; j<m; j++)
    {
      for (i=0; i<n; i++)
       if (A[j][1]<0 && A[j][n-1]<0)
                                         {
                                        temp [N] = A[j][1];
                                        A[j][1]=A[j][n-1];
                                        A[j][n-1]=temp[N];
                                         }
     }
                                    

PM MAIL   Вверх
feodorv
Дата 12.3.2013, 22:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: 12
Всего: 45



Цитата(vitaxa3581 @  12.3.2013,  22:54 Найти цитируемый пост)
 но меняет отрицательные элементы независимо от того весь столбец из отрицательных или нет

Поверять надо заранее, а не в цикле замены. И если оба столбца состоят исключительно из отрицательных элементов, то только тогда менять:
Код

#define N 50
#define M 50

int isNegative( int A[N][M], int size, int col)
{
  int i;
  for( i = 0; i < size; i++)
    if( A[i][col] >= 0 ) return 0;
  return 1;
}

int main( void )
{
  int A[N][M];
  int n = 5, m = 5, i, j;

  for( i = 0; i < n; i++)
    for( j = 0; j < m; j++) A[i][j] = i + j - 6;

  for( j = 0; j < m; j++)
    printf( "[%d] = %d\n", j, isNegative( A, n, j));
}


Соответственно в Вашем коде:
Код

if( isNegative( A, n, 1) && isNegative( A, n, m-1) )


Хотя я заметил, что в Вашем коде нет четкого понимания, где у матрицы столбец, где строка. Что есть N, что есть M? A[i][j] или A[j][i]? Что нумерует i, что j??? Всё должно быть единообразно...

Ну и опять Вы стоите на своём:
Цитата(vitaxa3581 @  12.3.2013,  22:54 Найти цитируемый пост)
                                        temp [N] = A[j][1];
                                        A[j][1]=A[j][n-1];
                                        A[j][n-1]=temp[N];

У массива temp нет элемента temp[N], это выход за пределы массива. Да и не нужен здесь массив, можно обойтись одной переменной...

По стилю. Всё возможно разбить на маленькие подзадачки:
Код

int main( void )
{
  enterDimention( &n, &m);
  enterMatrix( A, n, m);
  printMatrix( A, n, m);

  if( isNegative( A, n, 1) && isNegative( A, n, m-1) ) 
  {
     swapColumns( A, n, m);
     printMatrix( A, n, m);
  }
  else
     printf( "OOPS\n" );

  return 0;
}

И всё сразу становится ясным, кто что делает. В первоначальном коде можно запутаться...


--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0469 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.