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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 08.11.2009, 15:47   #1
Ker_33rus
Пользователь
 
Регистрация: 17.10.2009
Сообщений: 46
Восклицание Не могу разобраться как менять строки в масмсиве

Код:
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif

#include <iostream>
#include <cstdlib>

using namespace std;

int main(int argc, char *argv[])
{
int array[5][5];
int i, j, x;
x=array[0][0];
srand(time(NULL));
for (i=0; i<5; i++)
{
for (j=0; j<5; j++)
{
array[i][j]=rand()%10;
cout<<" "<< array[i][j];
}
cout<<endl;
}
printf(" \n");
for(i=1, j=1; i<5, j<5; i++, j++)
{
if (array[i][j]>x)
{
x=array[i][j];
cout<<" "<<array[i][j];
}
}
  return EXIT_SUCCESS;
}
Задание: переставить строки 2-х мерного квадратного массива так, чтобы элементы главной диагонали распологались по убыванию.
Явно не хватает чего-то в if, объясните как строки менять, скоррее всего этого и не хватает
Помогите пожалуста...
Ker_33rus вне форума Ответить с цитированием
Старый 08.11.2009, 19:39   #2
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
объясните как строки менять
Код:
for(j=0; j<5; j++)
 {
  x = array[a][j];
  array[a][j] = array[b][j];
  array[b][j] = x;
 }
Меняет местами строки с номерами a и b.

Сначала решите задачу "на бумаге" и составьте алгоритм работы.
Задача сводится к сортировке строк по элементам главной диагонали.
На примере линейной:
Код:
for(i=0; i<4; i++)
 for(j=i+1; j<5; j++)
  if(array[i][i]<array[j][j])
   { меняем строки местами }
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 08.11.2009, 23:57   #3
Ker_33rus
Пользователь
 
Регистрация: 17.10.2009
Сообщений: 46
Восклицание

Спасибо, прицип понял, но реализовать пока не получается, помогите мне, а да еще когда запускаеь прогу компилятор выдает числа полученного масива какието 5-ти значные и пишет ошибку сигментирования
Код:
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif

#include <iostream>
#include <cstdlib>

using namespace std;

int main(int argc, char *argv[])
{
int array[5][5];
int i, j, x, a, b;
a=0;
b=0;
x=array[0][0];
srand(time(NULL));
for (i=0; i<5; i++)
{
for (j=0; j<5; j++)
{
array[i][j]=rand()%10;
cout<<" "<< array[i][j];
}
cout<<endl;
}
printf(" \n");
for(i=0; i<4; i++)
 for(j=i+1; j<5; j++)
  if(array[i][i]<array[j][j])
{
for(j=0; j<5; j++)
 {
  x = array[a][j];
  array[a][j] = array[b][j];
  array[b][j] = x;
cout<<" "<< array[a][j];
a++;
b=a+1;
 }
cout<<endl;
}
  return EXIT_SUCCESS;
}
Ker_33rus вне форума Ответить с цитированием
Старый 10.11.2009, 03:15   #4
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Так, я немного поторопился.. Там не так просто будет. Ведь элемент диагонали зависит от положения строки.

Самое примитивное решение, которое иногда будет работать - это поставить первой строку, у которой первый элемент будет максимальным среди элементов того же столбца.
Затем второй поставить строку, у которой вторым элементом будет максимум среди элементов этого столбца, расположенных ниже этой (второй) строки, а также который будет меньше, чем предыдущий элемент на диагонали. И так далее. То есть примерно такое:
Код:
for(i=0; i<5; i++)
 {
  mx = i;
  for(j=i; j<5; j++)
   if(array[j][i]>array[mx][i] && (i==0 || array[j][i]<=pred))
     mx = j;
  for(j=0; j<5; j++)
   {
    x = array[i][j];
    array[i][j] = array[mx][j];
    array[mx][j] = x;
   }
  pred = array[i][i];  
 }
Но тут нужно делать по-другому. У меня просто сейчас нет времени. Так что попробуйте придумать алгоритм.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 10.11.2009, 11:18   #5
Ker_33rus
Пользователь
 
Регистрация: 17.10.2009
Сообщений: 46
По умолчанию

Sazary, в любом случае спасибо за помощь и объяснение, постараюсь придумать
Ker_33rus вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не могу разобраться Zmaxer Помощь студентам 24 10.10.2009 18:52
не могу разобраться Инспектор ГУЛ Свободное общение 7 20.09.2009 09:29
как менять стили?? oLMeR Свободное общение 3 10.11.2006 14:27