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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.73
isa
0 / 0 / 0
Регистрация: 27.11.2012
Сообщений: 12
#1

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

03.07.2013, 18:06. Просмотров 1612. Ответов 10
Метки нет (Все метки)

ребят такое дело. сам с++ норм знаю, но давно не работал (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
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.07.2013, 18:06
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Матрицу произвольного размера преобразовать в вектор (C++):

Заполнить матрицу произвольного размера с клавиатуры. найти в матрице столбец с минимальным значением произведения элементов - C++
Заполнить матрицу произвольного размера с клавиатуры. найти в матрице столбец с минимальным значением произведения элементов

Дана матрица размера 5*10, преобразовать матрицу, поменяв местами минимальный и максимальный элемент в каждой строке. C++ - C++
Есть код программы...но она меняет тока в 1й строке остальные нет((( Прошу помочь...Заранее спасибо откликнувшимся #include...

Вектор с неизвестным количеством чисел преобразовать в другой вектор, где числа будут стоять по возрастанию - C++
Вектор с неизвестным количеством чисел нужно превратить в другой вектор, где числа будут стоять по возрастанию. Мне код не столько нужен,...

Почему матрица на вектор умножается быстрее чем вектор на матрицу? - C++
Почему матрица на вектор умножается быстрее чем вектор на матрицу?

матрица на вектор, вроде правильно, а вектор на матрицу? посмотрите пожалуйста? - C++
#include &lt;iostream&gt; #include &lt;iomanip&gt; #include &lt;cstdlib&gt; #include &lt;ctime&gt; using namespace std; int main() { ...

Матрицы произвольного размера. - C++
Помогите пожалуйста написать программу, которая будет работать с матрицами произвольного размера. необходимо определить для матриц операции...

10
kventin_zhuk
БНТУ ФИТР
215 / 155 / 15
Регистрация: 26.12.2012
Сообщений: 382
03.07.2013, 18:09 #2
isa, Матрица - многомерный массив, или грубо "массив векторов". А вектор - одномерный массив. Так по какому принципу нужно её преобразовать в вектор? Например: взять элементы конкретной строки, взять элементы по диагонали, разложить матрицу по минорам......?
0
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++) ?
1
Croessmah
Эксперт CЭксперт С++
13513 / 7671 / 866
Регистрация: 27.09.2012
Сообщений: 18,886
Записей в блоге: 3
Завершенные тесты: 1
03.07.2013, 18:33 #4
Цитата Сообщение от SeerRus Посмотреть сообщение
Тут для каждого [i,j]
для каждого [j]

и где здесь вообще матрица
0
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;//Массив
0
Croessmah
Эксперт CЭксперт С++
13513 / 7671 / 866
Регистрация: 27.09.2012
Сообщений: 18,886
Записей в блоге: 3
Завершенные тесты: 1
03.07.2013, 18:44 #6
Цитата Сообщение от SeerRus Посмотреть сообщение
Цикл заполнения вектора вложен в два цикла - i и j - то есть выполняется для каждого элемента матрицы [i,j]
серьезно?
0
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....... и т.д.
0
Belfegor
Ghost
173 / 173 / 6
Регистрация: 16.09.2012
Сообщений: 526
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;
}
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 т.к. я не люблю писать и меньше или ровно
0
SeerRus
5 / 5 / 1
Регистрация: 26.06.2013
Сообщений: 32
03.07.2013, 18:56 #10
Кстати, не [i,j], а [i][j]. И считайте индексы с нуля.
0
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++) ?
проблема решилась, тема закрыта, спасибо сирус за понимание задачи!
0
03.07.2013, 19:23
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.07.2013, 19:23
Привет! Вот еще темы с ответами:

Динамический массив произвольного размера - C++
динамический массив заданного размера: int *massiv = new int а как организовать произвольного размера? спасибо.

Перемножить матрицы произвольного размера - C++
#include &lt;iostream&gt; using std::cin; using std::cout; using std::endl; int main() { int n,m,c,r; //...

Объект произвольного размера через new - C++
Хочу создать объект в динамической памяти так, чтобы 1) был вызван конструктор объекта, 2) размер объекта задавался в момент создания...

Строковый массив произвольного размера - C++
Можно ли каким-то образом образом написать программу, в которой будет вводиться строковый массив произвольной длины? Если бы это был...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru