Форум программистов, компьютерный форум CyberForum.ru

Матрицу произвольного размера преобразовать в вектор - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.73
isa
0 / 0 / 0
Регистрация: 27.11.2012
Сообщений: 12
03.07.2013, 18:06     Матрицу произвольного размера преобразовать в вектор #1
ребят такое дело. сам с++ норм знаю, но давно не работал (1 год) все по забывал вот снова понадобилось. короче нужно матрицу произвольного размера преобразовать в вектор. я знаю что есть инклуд вектор и др., но с ними заморачиваться не хочу ибо, когда работал постоянно на с++ не особо вьезжал а сейчас вообще) короче прога что то не то делает, очен надеюсь на вашу помощь, может я чего намудрил. второй час сижу не могу понять что не так. задача то по идее простая...

вот код с++

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
//Подключаемые модули =============================================================================
//Стандартные модули C ----------------------------------------------------------------------------
#include "stdio.h"
#include "malloc.h"
//Подключаемые модули------------------------------------------------------------------------------
#include <conio.h>
#include<stdlib.h>
#include<ctime>
#include<iostream>
 
using namespace std;
 
//Глобальные переменные ---------------------------------------------------------------------------
int    Count    = 0;   //Размер массивов
int    MemCount = 0;   //Размер массивов, байт
float* matr   = 0x00;//Массив 
float* vec   = 0x00;//Массив 
 
//Создание матрицы чисел и преобразование их в вектор----------------------------------------------
void matr_vec(float* matr, float* vec)
{
    int height=30,width=20;//Задаем размеры картинки (матрицы) высота=30, ширина 20
    int razm=height*width+1;//Находим количество элементов матрицы
    srand(time(0));
    cout <<"Ishodnaya matrica\n";
    for (int  i= 1; i < height; i++)
    {
        for(int j=1;j<width;j++)
        {
                                        for(int k=1;k<razm;k++)
                                {
                                            matr[i,j]=(rand () %256);//создаем саму картинку (матрицу)
                                            vec[k]=matr[i,j];//преобразуем элементы матрицы в элементы вектора
                                }//for
            
        }//for
    }//for
        for (int  i= 1; i < height; i++)
    {
        for(int j=1;j<width;j++)
        {
            cout <<"M["<<i<<","<<j<<"]="<<matr[i,j]<<"  ";//выводим ее на экран
        }//for
    }//for
    cout <<"\nPreobrazovannyi vector\n";
    for(int k=1;k<razm;k++)
                { 
                    cout <<"V["<<k<<"]="<<vec[k]<<" ";//выводим ее на экран
                }//for
}//matr_vec
 
 
 
//Главная процедура -------------------------------------------------------------------------------
int main(int argc, char** argv)
{
  Count    = 600;
  MemCount = Count*sizeof(float);
  //Создание картинки
  matr=(float*)malloc(MemCount);
  vec=(float*)malloc(MemCount);
  matr_vec(matr,vec);
 
  //Завершение
  free(matr);
  free(vec);
  getch();
return 0;
}//main
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.07.2013, 18:06     Матрицу произвольного размера преобразовать в вектор
Посмотрите здесь:

Матрицы произвольного размера. C++
C++ Строковый массив произвольного размера
Заполнить матрицу произвольного размера с клавиатуры. найти в матрице столбец с минимальным значением произведения элементов C++
динамический массив произвольного размера C++
Дана матрица размера 5*10, преобразовать матрицу, поменяв местами минимальный и максимальный элемент в каждой строке. C++ C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
kventin_zhuk
БНТУ ФИТР
 Аватар для kventin_zhuk
214 / 154 / 15
Регистрация: 26.12.2012
Сообщений: 382
03.07.2013, 18:09     Матрицу произвольного размера преобразовать в вектор #2
isa, Матрица - многомерный массив, или грубо "массив векторов". А вектор - одномерный массив. Так по какому принципу нужно её преобразовать в вектор? Например: взять элементы конкретной строки, взять элементы по диагонали, разложить матрицу по минорам......?
SeerRus
5 / 5 / 1
Регистрация: 26.06.2013
Сообщений: 32
03.07.2013, 18:29     Матрицу произвольного размера преобразовать в вектор #3
Вот этот код я не понял наверно:
C++
1
2
3
4
5
6
7
8
9
10
11
12
for (int i= 1; i < height; i++)
{
for(int j=1;j<width;j++)
{
for(int k=1;k<razm;k++)
{
matr[i,j]=(rand () %256);//создаем саму картинку (матрицу)
vec[k]=matr[i,j];//преобразуем элементы матрицы в элементы вектора
}//for
 
}//for
}//for
Тут для каждого [i,j] выполняется следующее:
C++
1
2
3
4
5
for(int k=1;k<razm;k++)
{
matr[i,j]=(rand () %256);//создаем саму картинку (матрицу)
vec[k]=matr[i,j];//преобразуем элементы матрицы в элементы вектора
}//for
То есть [i,j] рандомно устанавливается (razm-1) раз, и после каждого раза элемент вектора с индексом k заполняется этим новым значением. И эта канитель (height-1)*(width-1) раз. Так?

А может вы хотели вот это?
C++
1
2
3
4
5
razm = (height-1)*(width-1); // -1 это у вас количество итераций такое, ибо сравнение < 
int k = 0;
for (int i= 1; i < height; i++)
  for(int j=1;j<width;j++)
    vec[k++]=matr[i,j]=(rand () %256);
и подумать вам: если width=2, то сколько раз выполнится цикл for(int j=1;j<width;j++) ?
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11845 / 6824 / 771
Регистрация: 27.09.2012
Сообщений: 16,919
Записей в блоге: 2
Завершенные тесты: 1
03.07.2013, 18:33     Матрицу произвольного размера преобразовать в вектор #4
Цитата Сообщение от SeerRus Посмотреть сообщение
Тут для каждого [i,j]
для каждого [j]

и где здесь вообще матрица
SeerRus
5 / 5 / 1
Регистрация: 26.06.2013
Сообщений: 32
03.07.2013, 18:38     Матрицу произвольного размера преобразовать в вектор #5
Цитата Сообщение от Croessmah Посмотреть сообщение
для каждого [j]
Цикл заполнения вектора вложен в два цикла - i и j - то есть выполняется для каждого элемента матрицы [i,j]

и вообще, надо ли было так заморачиваться?
C++
1
2
float* matr = 0x00;//Массив 
float* vec = 0x00;//Массив
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11845 / 6824 / 771
Регистрация: 27.09.2012
Сообщений: 16,919
Записей в блоге: 2
Завершенные тесты: 1
03.07.2013, 18:44     Матрицу произвольного размера преобразовать в вектор #6
Цитата Сообщение от SeerRus Посмотреть сообщение
Цикл заполнения вектора вложен в два цикла - i и j - то есть выполняется для каждого элемента матрицы [i,j]
серьезно?
isa
0 / 0 / 0
Регистрация: 27.11.2012
Сообщений: 12
03.07.2013, 18:51  [ТС]     Матрицу произвольного размера преобразовать в вектор #7
да да именно так, эта канитель кучу раз делается, а мне не надо столько

Добавлено через 2 минуты
Цитата Сообщение от kventin_zhuk Посмотреть сообщение
isa, Матрица - многомерный массив, или грубо "массив векторов". А вектор - одномерный массив. Так по какому принципу нужно её преобразовать в вектор? Например: взять элементы конкретной строки, взять элементы по диагонали, разложить матрицу по минорам......?
ну по идее должна получаться матрица что то вроде
а11 а12 а13.....
а21 а22 а23....
......



нужно из нее получить вектор
в1=а11 в2=а12 в3=а13....... и т.д.
Belfegor
Ghost
 Аватар для Belfegor
172 / 172 / 6
Регистрация: 16.09.2012
Сообщений: 524
03.07.2013, 18:54     Матрицу произвольного размера преобразовать в вектор #8
Цитата Сообщение от isa Посмотреть сообщение
matr[i,j]
паскаль какойто
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <vector>
#include <iostream>
#include <ctime>
#include <cstdlib>
using std::cin;
using std::cout;
using std::endl;
 
int main() {
    const int size = 10;
    float arr[size][size];
    std::vector <float> v;
    for (int i = 0; i < size; i++) {
        for (int j = 0; j < size; j++) {
            arr[i][j] = 50 - rand() % 90;
            j < size - 1 ? cout << arr[i][j] << ' ' : cout << arr[i][j] << endl;
        }
    }
    cout << endl;
    for (int i = 0; i < size; i++) {
        for (int j = 0; j < size; j++) {
            v.push_back(arr[i][j]);
        }
    }
    for (float x : v)cout << x << ' ';
    return 0;
}
isa
0 / 0 / 0
Регистрация: 27.11.2012
Сообщений: 12
03.07.2013, 18:54  [ТС]     Матрицу произвольного размера преобразовать в вектор #9
Цитата Сообщение от SeerRus Посмотреть сообщение
Вот этот код я не понял наверно:
[CPP]for (int i= 1; i < height; i++)
{

То есть [i,j] рандомно устанавливается (razm-1) раз, и после каждого раза элемент вектора с индексом k заполняется этим новым значением. И эта канитель (height-1)*(width-1) раз. Так?

А может вы хотели вот это?
C++
1
2
3
4
5
razm = (height-1)*(width-1); // -1 это у вас количество итераций такое, ибо сравнение < 
int k = 0;
for (int i= 1; i < height; i++)
  for(int j=1;j<width;j++)
    vec[k++]=matr[i,j]=(rand () %256);
и подумать вам: если width=2, то сколько раз выполнится цикл for(int j=1;j<width;j++) ?

не не просто допустим как у меня в проге 20 на 30 матрица, получается 600 элементов, а вектор выводит 599 т.к. я не люблю писать и меньше или ровно
SeerRus
5 / 5 / 1
Регистрация: 26.06.2013
Сообщений: 32
03.07.2013, 18:56     Матрицу произвольного размера преобразовать в вектор #10
Кстати, не [i,j], а [i][j]. И считайте индексы с нуля.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.07.2013, 19:23     Матрицу произвольного размера преобразовать в вектор
Еще ссылки по теме:

Передача в параметр многомерного массива произвольного размера C++
C++ Непонятно условие задачи: Вывести исходную матрицу, преобразованную матрицу и вектор Х.
Квадратная матрица произвольного размера C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
isa
0 / 0 / 0
Регистрация: 27.11.2012
Сообщений: 12
03.07.2013, 19:23  [ТС]     Матрицу произвольного размера преобразовать в вектор #11
Цитата Сообщение от SeerRus Посмотреть сообщение
Цикл заполнения вектора вложен в два цикла - i и j - то есть выполняется для каждого элемента матрицы [i,j]

и вообще, надо ли было так заморачиваться?
C++
1
2
float* matr = 0x00;//Массив 
float* vec = 0x00;//Массив
это задача не полностью же, поэтому так надо заморачиваться. по идее программа будет выполнять загрузку картинки бмп, конвертировать ее из ргб в грей, считывать данные матрицы, на основе полученных данных строить гистограмму, реализация будет проводиться как на цпу, так и на гпу при помощи куда.

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

Добавлено через 1 минуту
Цитата Сообщение от SeerRus Посмотреть сообщение
Вот этот код я не понял наверно:
[CPP]for (int i= 1; i < height; i++)
То есть [i,j] рандомно устанавливается (razm-1) раз, и после каждого раза элемент вектора с индексом k заполняется этим новым значением. И эта канитель (height-1)*(width-1) раз. Так?

А может вы хотели вот это?
C++
1
2
3
4
5
razm = (height-1)*(width-1); // -1 это у вас количество итераций такое, ибо сравнение < 
int k = 0;
for (int i= 1; i < height; i++)
  for(int j=1;j<width;j++)
    vec[k++]=matr[i,j]=(rand () %256);
и подумать вам: если width=2, то сколько раз выполнится цикл for(int j=1;j<width;j++) ?

вот эта вещь почти делает то что надо... надо еще варианты... подумайте плз
int k = 0;
for (int i= 1; i < height; i++)
for(int j=1;j<width;j++)
vec[k++]=matr[i,j]=(rand () %256);

Добавлено через 16 минут
Цитата Сообщение от SeerRus Посмотреть сообщение
Вот этот код я не понял наверно:
C++
1
2
3
4
5
6
7
8
9
10
11
12
for (int i= 1; i < height; i++)
{
for(int j=1;j<width;j++)
{
for(int k=1;k<razm;k++)
{
matr[i,j]=(rand () %256);//создаем саму картинку (матрицу)
vec[k]=matr[i,j];//преобразуем элементы матрицы в элементы вектора
}//for
 
}//for
}//for
Тут для каждого [i,j] выполняется следующее:
C++
1
2
3
4
5
for(int k=1;k<razm;k++)
{
matr[i,j]=(rand () %256);//создаем саму картинку (матрицу)
vec[k]=matr[i,j];//преобразуем элементы матрицы в элементы вектора
}//for
То есть [i,j] рандомно устанавливается (razm-1) раз, и после каждого раза элемент вектора с индексом k заполняется этим новым значением. И эта канитель (height-1)*(width-1) раз. Так?

А может вы хотели вот это?
C++
1
2
3
4
5
razm = (height-1)*(width-1); // -1 это у вас количество итераций такое, ибо сравнение < 
int k = 0;
for (int i= 1; i < height; i++)
  for(int j=1;j<width;j++)
    vec[k++]=matr[i,j]=(rand () %256);
и подумать вам: если width=2, то сколько раз выполнится цикл for(int j=1;j<width;j++) ?
проблема решилась, тема закрыта, спасибо сирус за понимание задачи!
Yandex
Объявления
03.07.2013, 19:23     Матрицу произвольного размера преобразовать в вектор
Ответ Создать тему
Опции темы

Текущее время: 20:51. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru