Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/35: Рейтинг темы: голосов - 35, средняя оценка - 4.83
0 / 0 / 0
Регистрация: 27.11.2012
Сообщений: 12

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

03.07.2013, 18:06. Показов 6876. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
ребят такое дело. сам с++ норм знаю, но давно не работал (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
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
03.07.2013, 18:06
Ответы с готовыми решениями:

Преобразовать матрицу и записать ее вектор ,а вектор вывести
У нас есть булева переменная, если она равна = 1 то матрицу мы записываем в вектор(masiv) по строкам, если равна = 0 по столбцам, а вектор...

Сформировать произвольного размера матрицу А.
Сформировать произвольного размера матрицу А. элементы тех столбцов, суммы которых больше 12, уменьшить на элемент главной диагонали...

Задать матрицу A размера 10x10, вектор y размера 10
За ранее огромное спасибо)

13
БНТУ ФИТР
 Аватар для kventin_zhuk
215 / 155 / 42
Регистрация: 26.12.2012
Сообщений: 382
03.07.2013, 18:09
isa, Матрица - многомерный массив, или грубо "массив векторов". А вектор - одномерный массив. Так по какому принципу нужно её преобразовать в вектор? Например: взять элементы конкретной строки, взять элементы по диагонали, разложить матрицу по минорам......?
0
5 / 5 / 1
Регистрация: 26.06.2013
Сообщений: 32
03.07.2013, 18:29
Вот этот код я не понял наверно:
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
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,026
Записей в блоге: 1
03.07.2013, 18:33
Цитата Сообщение от SeerRus Посмотреть сообщение
Тут для каждого [i,j]
для каждого [j]

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

и вообще, надо ли было так заморачиваться?
C++
1
2
float* matr = 0x00;//Массив 
float* vec = 0x00;//Массив
0
Неэпический
 Аватар для Croessmah
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,026
Записей в блоге: 1
03.07.2013, 18:44
Цитата Сообщение от SeerRus Посмотреть сообщение
Цикл заполнения вектора вложен в два цикла - i и j - то есть выполняется для каждого элемента матрицы [i,j]
серьезно?
0
0 / 0 / 0
Регистрация: 27.11.2012
Сообщений: 12
03.07.2013, 18:51  [ТС]
да да именно так, эта канитель кучу раз делается, а мне не надо столько

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



нужно из нее получить вектор
в1=а11 в2=а12 в3=а13....... и т.д.
0
Ghost
 Аватар для Belfegor
174 / 174 / 40
Регистрация: 16.09.2012
Сообщений: 526
03.07.2013, 18:54
Цитата Сообщение от 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
0 / 0 / 0
Регистрация: 27.11.2012
Сообщений: 12
03.07.2013, 18:54  [ТС]
Цитата Сообщение от 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
5 / 5 / 1
Регистрация: 26.06.2013
Сообщений: 32
03.07.2013, 18:56
Кстати, не [i,j], а [i][j]. И считайте индексы с нуля.
0
0 / 0 / 0
Регистрация: 27.11.2012
Сообщений: 12
03.07.2013, 19:23  [ТС]
Цитата Сообщение от 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
 Аватар для Laborant666
208 / 101 / 20
Регистрация: 30.06.2020
Сообщений: 848
17.03.2023, 19:30
Цитата Сообщение от isa Посмотреть сообщение
а вектор выводит 599 т.к. я не люблю писать и меньше или ровно
То есть не любите писать то, что писать нужно для выполнения задачи? Забавно)
0
Неэпический
 Аватар для Croessmah
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,026
Записей в блоге: 1
17.03.2023, 19:43
Laborant666, теме почти 10 лет.
0
 Аватар для Laborant666
208 / 101 / 20
Регистрация: 30.06.2020
Сообщений: 848
17.03.2023, 20:09
Цитата Сообщение от Croessmah Посмотреть сообщение
теме почти 10 лет
А, да, не обратил внимание. Увидел просто не прочитанная тема, не подумал что и старые так поднимаются вверх
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
17.03.2023, 20:09
Помогаю со студенческими работами здесь

Заполнить матрицу произвольного размера по образцу
Решите плииз задачку....массив, размерностью n х n, заполняется для произвольного n по такому же принципу, как для n=5. 0 0 0 0...

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

Ввод данных пользователем в матрицу произвольного размера
Помогите создать матрицу, чтобы пользователь самостоятельно вводил переменные. В коде выдаёт ошибку в последнем end. Uses crt; ...

Ввести матрицу произвольного размера, посчитать ее среднее значение по строкам
Здравствуйте, хотелось бы узнать, как можно узнать, какие регистры использует ReadConsole в masm? В этом участке кода, мне нужна...

Получить квадратную матрицу произвольного размера из элементов, отвечающих формуле
1. Получить квадратную матрицу произвольного размера из элементов, отвечающих формуле: А(i,j)=SQR(i^2 + j^2) Подсчитать среднее...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка. Рецензия / Мнение Это мой обзор планшета X220 с точки зрения школьника. Недавно я решила попытаться уменьшить свой. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru