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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.10.2014, 20:32   #1
Riven7
Пользователь
 
Регистрация: 30.10.2014
Сообщений: 10
По умолчанию отсортировать четные столбцы в обратном порядке, а нечетные в прямом

Помогите решить!
Дана матрица (22)x(22) отсортировать четные столбцы в обратном порядке, а нечетные в прямом, числа генерировать случайно в интервале [-22; 22]

В общем я написал прогу,только она совсем не хочет сортировать. выводит слитно кучу чисел и больше ничего

Код:
#include <iostream>
#include <stdlib.h>
#include <stdio.h>
using namespace std;
int a=22;
int mass[22][22];
int main()
{
    bool rep;
    int per;
          for (int i=0;i<a;i++)
          {
              for(int j=0;j<a;j++)
              {
                  mass[i][j]=a+rand()%45-22;
              }
          }
 
              printf(("First Matrix:\n"));
              for (int i=0;i<a;i++)
              {
                  for (int j=0;j<a;j++)
                  {
                      printf ("%3d", mass[i][j]);
                  }
                  printf("\n");
              }
              for(int j=0;j<a;j++)
              {
                  if(j%2==0)
                  {
                      rep=true;
                      while (rep!=false)
                      {
                          rep=false;
                          for(int i=0;i<21;i++)
                          {
                              if (mass[i][j]>mass[i+1][j])
                          {
                              rep=true;
                              per=mass[i][j];
                              mass[i][j]=mass[i+1][j];
                              mass[i+1][j];
                          }
                      }
                  }
              }
          }
          for(int j=0; j<a;j++)
          {
              if(j%2==1)// если столбец четный
              {
                  rep=true;
                  while(rep!=false)
                  {
                      {
                          rep=false;
                          for(int i=0; i<21; i++)
 
                      if (mass[i][j]<mass[i+1][j])
                      {
                          rep=true;
                          per = mass[i][j];
                          mass[i][j] = mass[i+1][j];
                          mass[i+1][j]=per;
                      }
                      }
                  }
              }
         }
         printf("\n\n Result Mass:\n");
         for(int i=0; i<a; i++)
         {
             for (int j=0;j<a;j++)
             {
                 printf("3%d", mass[i][j]);
             }
             printf("\n");
         }
         getchar();
         return 0;
}
Riven7 вне форума Ответить с цитированием
Старый 30.10.2014, 20:54   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Дам небольшой подсказончик:
Код:
#include <stdio.h>
#include <stdlib.h>

int main()
{
    int a[3][3]={
        {1,2,3},
        {4,5,6},
        {7,8,9}
    };
    int i,j,k,v;
    for( i=0;i<3;i++){
        for( j=0;j<3;j++){
            for( k=0;k<3;k++){
               if((i%2 && (a[k][i]<a[j][i])) || (!(i%2) && a[k][i]>a[j][i] ))
                  {v=a[k][i];a[k][i]=a[j][i];a[j][i]=v;}
            }
        }
    }
        for( i=0;i<3;i++){
            for( j=0;j<3;j++) printf("%5d",a[i][j]);printf("\n");
        }
        getchar();
    return 0;
}
Это сортировка 3х3
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 30.10.2014, 23:11   #3
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,323
По умолчанию

Если по условию задачи разрешено использовать стандартную функцию sort(), то можно скопировать столбец в массив, отсортировать этот массив и скопировать обратно в матрицу

Сортировка массива в прямом направлении:
Код:
#include <iostream>
#include <algorithm>
#include <vector>

void showArray( const std::vector<int> &arr );

int main()
{
    // Input array
    int myints[] = { 32,71,12,45,26,80,53,33 };
    std::vector<int> myvector ( myints, myints + 8 );

    // Sort the array
    std::sort( myvector.begin(), myvector.end() );

    // Print out content:
    showArray( myvector );

    return 0;
}

void showArray( const std::vector<int> &arr )
{
    std::cout << "arr contains:";
    for ( auto it = arr.begin(); it != arr.end(); ++it )
        std::cout << ' ' << *it;
    std::cout << '\n';
}
Сортировка массива в обратном направлении:
Код:
#include <iostream>
#include <algorithm>
#include <vector>

void showArray( const std::vector<int> &arr );

int main()
{
    // Input array
    int myints[] = { 32,71,12,45,26,80,53,33 };
    std::vector<int> myvector ( myints, myints + 8 );

    // Sort the array
    std::sort( myvector.begin(), myvector.end(), [] ( int i, int j ) { return i > j; } );

    // Print out content:
    showArray( myvector );

    return 0;
}

void showArray( const std::vector<int> &arr )
{
    std::cout << "arr contains:";
    for ( auto it = arr.begin(); it != arr.end(); ++it )
        std::cout << ' ' << *it;
    std::cout << '\n';
}
Этого выражения не пугайтесь:
Код:
[] ( int i, int j ) { return i > j; }
Это из С++11, называется лямбда. Эта конструкция задаёт порядок сортировки. У функции sort поумолчанию прямой порядок сортировки: i < j, а мы переделываем на обратный: i > j

Последний раз редактировалось 8Observer8; 30.10.2014 в 23:13.
8Observer8 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Дан массив. Вывести вначале все четные числа в порядке возрастания их индексов, затем - все нечетные в порядке убывания.( Delphi ) simonte Помощь студентам 9 07.12.2013 06:54
Упорядочить массив так, чтобы вначале размещались четные цифры в порядке возрастания, а затем нечетные - в порядке убывания Маруся171996 Паскаль, Turbo Pascal, PascalABC.NET 1 22.11.2013 17:42
Рекурсивный алгоритм вывода десятичного числа в прямом/обратном порядке zorg-kirill Общие вопросы C/C++ 14 17.12.2012 08:19
Вывести сначала все его четные (нечетные) елементы, а потом- нечетные(четные). tondo Помощь студентам 4 25.04.2012 00:17
Вывод на экран записей в прямом и обратном порядке mileshin Помощь студентам 3 20.04.2010 09:19