Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Как сгенерировать матрицу????

26K
10 мая 2007 года
Seneka
10 / / 09.05.2007
[ 0 0 0 ..... 0 k]
[ 0 0 0 ..... 0 2k]
[ 0 0 0 ..... 0 3k]
......
[ 0 0 0 ..... 0 1]
[ 0 0 0 ..... 1k 0]
[ 0 0 0 ..... 1k 1k]
[ 0 0 0 ..... 1k 2k]
......
[ 1 1 ................1]

k - шаг с которым растет массив, а пользователь сам задает размернось массива n. Подскажите алгоритм, а то мне на ум приходит только n раз прописать цикл for. (как программист я не очень:) )
294
10 мая 2007 года
Plisteron
982 / / 29.08.2003
А можно поподробнее и другими словами? Я не понял ничего.
Из того, что понял...
Код:
int    n;
int    i;
int    j;
int  **x;
int    k;
char   buf[1024];

cout << "Размерность массива?";
cin >> n;
cout << "Шаг?";
cin >> k;

// Формируем
x = new int*[n];
for(i = 0; i < n; i++)
{
    x = new int[n];
    for(j = 0; j < n; j++)
        x[j] = (i > j)? 0 : k*(n - j);
}

// Печатаем
for(i = 0; i < n; i++)
{
    for(j = 0; j < n; j++)
    {
        sprintf(buf, "%10d", x[j];
        cout << buf;
    }
    cout << endl;
}

// Уничтожаем
for(i = 0; i < n; i++)
    delete[] x;
delete[] x;

Если не это нужно было, прошу ногами не пинать.
26K
11 мая 2007 года
Seneka
10 / / 09.05.2007
[ 0 0 0 0 0 0 0 0 0 0 ....... 0]
этих чисел n. каждое из них может принимать значение от 0 до 1. тоесть (0 0.01 0.02 0.03 ........ 1) нужно перебрать все возможные варианты, а сохранять надо именно вектор.
242
11 мая 2007 года
Оlga
2.2K / / 04.02.2006
чему равено k? до конца не уловила суть поставленной задачи.
допустим n==5, тогда как выглядят последовательности?
 
Код:
0 0 0 0 0.1
0 0 0 0 0.2
//????????????????????????????????????????
26K
11 мая 2007 года
Seneka
10 / / 09.05.2007
к - просто какой-то шаг с которым меняеются числа..... пусть будет 0.1.
опишу для 3ех.:)
[0 0 0]
[0 0 0,1]
[0 0 0,2]
[0 0 0,3]
[0 0 0,4]
[0 0 0,5]
[0 0 0,6]
....
[0 0 1]
[0 0,1 0]
[0 0,1 0,1]
[0 0,1 0,2]
[0 0,1 0,3]
[0 0,1 0,4]
......
[0 0,1 1]
[0 0,2 0]
[0 0,2 0,1]
[0 0,2 0,2]
[0 0,2 0,3]
........
[0,1 0 0]
[0,1 0 0,1]
[0,1 0 0,2]
[0,1 0 0,3]
.....
[1 1 1]
242
11 мая 2007 года
Оlga
2.2K / / 04.02.2006
спасибо, ясно. будет время, подумаю. тут надо сгенерить - анология двоичной последовательности или как там ее :)
 
Код:
0 0 0 0
0 0 0 1
0 0 1 0
0 0 1 1
0 1 0 0
.........
1 1 1 1
//some code [ /code] <- только без пробела перед слэшем.
26K
11 мая 2007 года
Seneka
10 / / 09.05.2007
В том то и дело что не с двоичной системой счисления аналогия, а с 16ричной.....
242
11 мая 2007 года
Оlga
2.2K / / 04.02.2006
сходи на algolist.manual.ru и посмотри задачи на генерацию последовательностей. неважно что генерить сс 16 или сс 2 :)
делай массив из n элементов и добавляй по 1 к нижнему разряду. как только превысили макс. значение ячейки - обнуляем и переходим в следущий разряд. и т.д.
2.1K
11 мая 2007 года
elan
56 / / 10.04.2003
Всегда нужно добавить шаг к последнему элементу массива.
Если элемент уже равен макс.значению, тогда обнулить его, и пытаться
добавить шаг к пред. элементу. Итд.
Код:
#include <windows.h>
#include <fstream>

using namespace std;

const int size = 3;
const int step = 1;
const int max_num = 10;

int main()
{
  int array[size];

  for(int i = 0; i < size; i++)
    array = 0;

  ofstream outFile("C:\\matrix.txt");
  bool bCont = true;
  while(bCont)
  {
    // Вывод текущей строки
    int value;
    for(int i = 0; i < size; i++)
    {
      value = array;
      if(value==0)
        outFile << " 0.0 ";
      else if(value==max_num)
        outFile << " 1.0 ";
      else
        outFile << " 0." << value << " ";
    }
    outFile << endl;

    // Генерация след. строки
    bCont = false;
    for(int ndx = size - 1; ndx >= 0; ndx--)
    {
      value = array[ndx] + size;
      if(value <= max_num)
      {
        array[ndx] = value;
        bCont = true;
        break;
      }
      else
      {
        array[ndx] = 0;
      }
    }
  }
  outFile.close();

  return 0;
}
26K
11 мая 2007 года
Seneka
10 / / 09.05.2007
Дело в том, то мне нужно каждый раз сохранять полноценный вектор из n элементов - что бы дальше с ними работать. причем зарание колличество элементов в массиве не дано... Мне просто нужна подсказка как написать n - вложенных друг в друга циклов for.
2.1K
11 мая 2007 года
elan
56 / / 10.04.2003
Цитата: Seneka
Дело в том, то мне нужно каждый раз сохранять полноценный вектор из n элементов - что бы дальше с ними работать. причем зарание колличество элементов в массиве не дано... Мне просто нужна подсказка как написать n - вложенных друг в друга циклов for.

Подсказка была выше.
1. Инициализировать вектора 0-ями. Это будет нулевая строка массива.
2. Сгенерировать след. строки.
Для этого.
1. Текущим элементом принять посл.элемент вектора.
2. Увеличить на шаг текущий элемент.
3. Если он стал больше макс. доп., тогда обнулить его. Текущим сделать
пред. элемент и снова на шаг 2.
Если элемент был увеличен, тогда мы получили след.строку.
А если не удалось ув. ни один элемент вектора, тогда выход, сгенерированы все строки.

Код:
#include <windows.h>

double *set_array_values(const int cols, const int step, const int max_value, int &rows)
{
  rows = 1; // Количество строк
  int m = max_value/step;
  for(int i = 0; i < cols; i++)rows*=m;
 
  double *dRes = new double[cols*rows];
  double *pD = dRes;

  int *array = new int[cols];
  for(i = 0; i < cols; i++)
    array = 0;

  bool bCont = true;

  while(bCont)
  {
    for(int i = 0; i < cols; i++)
      *pD = (double)array/max_value;

    bCont = false;
    for(int ndx = cols - 1; ndx >= 0; ndx--)
    {
      int value = array[ndx] + step;
      if(value <= max_value)
      {
        array[ndx] = value;
        bCont = true;
        break;
      }
      else
      {
        array[ndx] = 0;
      }
    }
  }
  delete[] array;

  return dRes;
}


int main()
{
  int rows;
  double *dblArray = set_array_values(3, 1, 10, rows);
// ...
// ...
// ...
// ...
  delete[] dblArray;
    return 0;
}
26K
13 мая 2007 года
Seneka
10 / / 09.05.2007
Спасибо Огромное.... Это то что надо.......:)
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог