Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - Замена произвольных столбцов местами(массив)

Ответить
Настройки темы
C/C++ - Замена произвольных столбцов местами(массив)

Пользователь


Сообщения: 98
Благодарности: 1

Профиль | Отправить PM | Цитировать


Изменения
Автор: Drongo
Дата: 20-03-2009
Описание: Вроде бы не новичок уже, используем тег [code]...[/code]
Всем привет, хотел посоветоваться решаю тут задачку такого плана:

Дана произвольная матрица размером 10:10 поменять произвольные значение столбцов местами.

Вобщем я думал как ето лучше сделать и вот примерно что надумал:

Код: Выделить весь код
#include <stdio.h>
#include <stdlib.h>
#include <iostream.h>
#include <conio.h>

int main()
{
  int arr[10][10]={{0,0}};
  int i,j;
  int sum = 0;
  randomize;
  for(i = 0; i < 10; i++)
  for(j=0; j< 10; j++)
  {

  arr[i][j]=random(5);

  }

  printf("Massiv: n [ ");
  for(i = 0; i < 10; i++)
  for(j=0; j< 10; j++)
  printf("%i ",arr[i][j]);
  printf("]\n"); // вывод на экран нашего массива
Ну теперь сама задача я пока не делал програмкой опишу словами саму идею

Думаю,что случайно заменять не совсем получится(или я не знаю как )
Вобщем я хочу использовать псевдослучайную замену.
Тоесть сравнивать к примеру первое значение массива со всеми последующими если оно ну допустим arr[0][0]>arr[i][j](соответственно условие в цикле) значит переместить его в конец массива(тоесть присвоит arr[0][0]==arr[9][9])

Вобщем хотел спросить, таким методом мне прийдётся каждое значение массива сравнивать с последующим и переносить его в конец, а если к примеру массив 100на100 то такой метод вызывает у меня сомнение может подскажите что то более практичное!

Зарание благодарю!!!

Отправлено: 16:04, 20-03-2009

 

Ветеран


Сообщения: 3320
Благодарности: 916

Профиль | Отправить PM | Цитировать


ShadowMas, заполнять случайными числами элементами массива получается, так почему не получится тогда сделать выборку по столбцам массива? Главное проверять, что б во второй раз одно и тоже число не выпало, а то менять не с чем будет.
Насчёт псевдослучайной замены, это основываясь на предыдущей генерации случайных чисел массиву идёт справнее что больше с тем и работать?
Как уже выше предложил - тем же методом что и заполняются элементы массива с помощью функции random().

Отправлено: 17:50, 20-03-2009 | #2



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

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для Drongo

Будем жить, Маэстро...


Сообщения: 6694
Благодарности: 1393

Профиль | Сайт | Отправить PM | Цитировать


Честно говоря, задачу не совсем понял.
Цитата ShadowMas:
Думаю,что случайно заменять не совсем получится »
Непонял, что заменять с чем?
Цитата ShadowMas:
сравнивать к примеру первое значение массива со всеми последующими если оно ну допустим arr[0][0]>arr[i][j](соответственно условие в цикле) значит переместить его в конец массива(тоесть присвоит arr[0][0]==arr[9][9]) »
Это же вроде бы похоже на пузырьковую сортировку, так?

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

Код: Выделить весь код
...
   printf("Massiv: n \n\n");
   for(i = 0; i < 10; i++){
      for(j = 0; j < 10; j++)
           printf("%i ", arr[i][j]);
     
      if(j % 10 == 0)
         cout<<endl;
   }
...

-------
Правильная постановка вопроса свидетельствует о некотором знакомстве с делом.
3нание бывает двух видов. Мы сами знаем предмет — или же знаем, где найти о нём сведения.
[Quick Killer 3.0 Final [OSZone.net]] | [Quick Killer 3.0 Final [SafeZone.cc]] | [Парсер логов Gmer] | [Парсер логов AVZ]

http://tools.oszone.net/Drongo/Userbar/SafeZone_cc.gif


Отправлено: 18:14, 20-03-2009 | #3


Пользователь


Сообщения: 98
Благодарности: 1

Профиль | Отправить PM | Цитировать


Да спасибо так конечно будет нагляднее,я как то не подумал .

Да я извиняюсь за не совсем коректную постановку вопроса.

Вообщем суть в том что бы в массиве размерностью 10на10
arr[10][10] ,случайным образом поменять местами значения столбиков ну к примеру

arr[0][0] меняем (случайным образом) с arr[0][9] или arr[1][7] или с любым другим arr[i][j]

Дело в том что я не как не могу условие придумать оптимальное, что бы не приходилось каждый раз сравнивать одно значение с последующими и переносить его в конец или там на шаг в перёд или ещё куда то.
Это вообще то не очень удобно каждый раз сравнивать, а вот как описать проще не как не придумаю

Отправлено: 18:57, 20-03-2009 | #4


Аватара для Drongo

Будем жить, Маэстро...


Сообщения: 6694
Благодарности: 1393

Профиль | Сайт | Отправить PM | Цитировать


Извиняюсь если неправильно понял снова, но как понял, так и решил. Цель, перебросить все значения случайного столбца массива в другой столбец. Короче поменять содержимое двух столбцов. Красным цветом выделил, что нужно дописать. Единственно, можно вместо конкретных значений номеров столбца, генерировать случайные.
Возможное Решение
Код: Выделить весь код
#include <stdio.h>
#include <stdlib.h>
#include <iostream.h>
#include <conio.h>

int main()
{
  int arr[10][10] = {{0,0}};
  int i, j, temp;
  int sum = 0;
  randomize;
  for(i = 0; i < 10; i++)
    for(j=0; j< 10; j++){
      arr[i][j]=random(5);
    }

  printf("Massiv: n \n\n");
  for(i = 0; i < 10; i++){
    for(j = 0; j < 10; j++)
      printf("%i ",arr[i][j]);

    if(j % 10 == 0)
   cout<<endl;
  }
  cout<<"\n\n Perenosim stolbsi\n";
  // К примеру 5 столбец переносим на место 1 столца,
  // А 1 столбец, на место 5 столбца
  for(int i = 0; i < 10; i++){
     temp = arr[i][5];
     arr[i][5] = arr[i][0];
     arr[i][0] = temp;
    }

  cout<<endl;
  for(i = 0; i < 10; i++){
    for(j = 0; j < 10; j++)
      printf("%i ",arr[i][j]);

    if(j % 10 == 0)
      cout<<endl;
   }
  cin>>i;
}

-------
Правильная постановка вопроса свидетельствует о некотором знакомстве с делом.
3нание бывает двух видов. Мы сами знаем предмет — или же знаем, где найти о нём сведения.
[Quick Killer 3.0 Final [OSZone.net]] | [Quick Killer 3.0 Final [SafeZone.cc]] | [Парсер логов Gmer] | [Парсер логов AVZ]

http://tools.oszone.net/Drongo/Userbar/SafeZone_cc.gif


Отправлено: 19:24, 20-03-2009 | #5


Пользователь


Сообщения: 98
Благодарности: 1

Профиль | Отправить PM | Цитировать


Да спасибо, так и есть

Только я так понял "Единственно, можно вместо конкретных значений номеров столбца, генерировать случайные"
Имеется введу что вместо arr[i][5]; можно записать примерно так

Код: Выделить весь код
for(int i = 0; i < 10; i++){
random(j);  
 temp = arr[i][j];
     arr[i][j] = arr[i][0];
     arr[i][0] = temp;
    }

Отправлено: 20:04, 20-03-2009 | #6


Ветеран


Сообщения: 3320
Благодарности: 916

Профиль | Отправить PM | Цитировать


Drongo, ShadowMas, можно обойтись и без переменной temp
Код: Выделить весь код
arr[i][0]=arr[i][j]-arr[i][0];
arr[i][j]=arr[i][j]-arr[i][0];
arr[i][0]=arr[i][j]+arr[i][0];
Это сообщение посчитали полезным следующие участники:

Отправлено: 21:01, 20-03-2009 | #7


Аватара для Drongo

Будем жить, Маэстро...


Сообщения: 6694
Благодарности: 1393

Профиль | Сайт | Отправить PM | Цитировать


ShadowMas, В таком виде, вместо каждого следующего элемента одного столбца, будет генерироваться каждый раз, разный.
Код: Выделить весь код
...
   for(int i = 0; i < 10; i++){
     random(j);  
     temp = arr[i][j];
     arr[i][j] = arr[i][0];
     arr[i][0] = temp;
   }
...
Поэтому объяви переменную и вынеси random(j) вне блока for перед ним, и полученный номер присваивай randomColumn
Код: Выделить весь код
...
   int randomColum;
   ...
 randomColumn = random(j);  
 for(int i = 0; i < 10; i++){
     temp = arr[i][randomColumn];
     arr[i][randomColumn] = arr[i][0];
     arr[i][0] = temp;
Можно ещё добавить такие заголовочные файлы
Код: Выделить весь код
...
#include <ctime.h>
using std::time;
int main()
{
  int arr[10][10] = {{0,0}};
  int i, j, temp, randomColumn;
  int sum = 0;
  randomize;
  srand(time(0));
...
Тогда числа будут генерироваться каждый раз другие.

-------
Правильная постановка вопроса свидетельствует о некотором знакомстве с делом.
3нание бывает двух видов. Мы сами знаем предмет — или же знаем, где найти о нём сведения.
[Quick Killer 3.0 Final [OSZone.net]] | [Quick Killer 3.0 Final [SafeZone.cc]] | [Парсер логов Gmer] | [Парсер логов AVZ]

http://tools.oszone.net/Drongo/Userbar/SafeZone_cc.gif


Отправлено: 21:14, 20-03-2009 | #8


Пользователь


Сообщения: 98
Благодарности: 1

Профиль | Отправить PM | Цитировать


Спасибо всем за помощь!!!

Ушел пробывать

Отправлено: 23:01, 20-03-2009 | #9


Пользователь


Сообщения: 98
Благодарности: 1

Профиль | Отправить PM | Цитировать


Да люди спасибо за помощь вот что получилось :

Код: Выделить весь код
#include <stdio.h>
#include <stdlib.h>
#include <iostream.h>
#include <conio.h>

int main()
{
  int arr[10][10] = {{0,0}};
  int i, j, temp,a;
  int sum = 0;
  randomize;
  for(i = 0; i < 10; i++)
    for(j=0; j< 10; j++){
      arr[i][j]=random(5);
    }

  printf("Massiv: n \n\n");
  for(i = 0; i < 10; i++){
    for(j = 0; j < 10; j++)
      printf("%i ",arr[i][j]);

    if(j % 10 == 0)
   cout<<endl;
  }
  cout<<"\n\n Perenosim stolbsi\n";
  cout<<"ukazite perviy stolbik"<<endl;
  cin>>j;
  cout<<"ukazite vtoroy stolbik"<<endl;
  cin>>a;
    for(int i = 0; i < 10; i++){
     temp = arr[i][j];
     arr[i][j] = arr[i][a];
     arr[i][a] = temp;

      cout<<endl;
      }
  for(i = 0; i < 10; i++){
    for(j = 0; j < 10; j++)
      printf("%i ",arr[i][j]);

    if(j % 10 == 0)
      cout<<endl;
getch();
   
    return 0;
}
}

Отправлено: 18:46, 21-03-2009 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - Замена произвольных столбцов местами(массив)

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Интерфейс - [решено] как отключить показ дополнительных столбцов в проводнике? ALEXEY_DFD Microsoft Windows 2000/XP 5 31-03-2016 18:58
Диски поменялись местами cheap Хочу все знать 3 15-11-2005 17:28
MsOffice | Свойства столбцов в Access sdiplo Программирование и базы данных 1 31-01-2005 09:45
Поменять местами харды DeadAdmin Общий по Linux 7 17-08-2003 13:47
ListView редактирование столбцов lesco Программирование и базы данных 2 11-04-2003 22:23




 
Переход