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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 29, средняя оценка - 4.97
Мирзали
4 / 5 / 1
Регистрация: 20.11.2010
Сообщений: 353
#1

Преобразование двумерного массива в одномерный - C++

01.09.2012, 16:34. Просмотров 3958. Ответов 10
Метки нет (Все метки)

Дан двумерный массив. Сформировать одномерный массив, каждый элемент которого равен сумме элементов соответствующей строки двумерного массива меньших числа n.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.09.2012, 16:34     Преобразование двумерного массива в одномерный
Посмотрите здесь:
Преобразование двумерного массива в одномерный C++
C++ Преобразование двумерного массива
Преобразование двумерного массива C++
C++ Преобразование двумерного массива
залить из двумерного массива данные в одномерный длиной, равной количеству всех элементов исходного массива C++
C++ Преобразование двумерного массива.Подскажите пжл!
C++ Перевести из двумерного массива в одномерный
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Dekio
Фрилансер
Эксперт С++
5837 / 1218 / 214
Регистрация: 23.11.2010
Сообщений: 3,378
Записей в блоге: 1
01.09.2012, 17:53     Преобразование двумерного массива в одномерный #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Если по простому, то
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
#include <iostream>
#include <algorithm>
#include <iterator>
#include <vector>
#include <random>
#include <ctime>
 
int main()
{
    std::random_device rand;
    std::mt19937 gen(rand());
    std::uniform_int_distribution <> distr(-10, 30);
    int rows, cols, size;
    std::cin>>rows>>cols>>size;
    std::vector <std::vector <int>> matrix(rows, std::vector <int> (cols, 0));
    std::vector <int> vec;
    for_each(matrix.begin(), matrix.end(), [&vec, &gen, &distr, &size] (std::vector <int> &curLine) -> std::vector <int>
    {
        std::generate(curLine.begin(), curLine.end(), [&gen, &distr] () -> int { return distr(gen); });
        std::copy(curLine.begin(), curLine.end(), std::ostream_iterator <int> (std::cout, " "));
        std::cout<<std::endl;
        int lineSize = std::accumulate(curLine.begin(), curLine.end(), 0);
        if(lineSize < size)
        vec.push_back(lineSize); 
        return curLine;
    });
    std::copy(vec.begin(), vec.end(), std::ostream_iterator <int> (std::cout, " "));
    return 0;
}
http://liveworkspace.org/code/1ebac8...6a4897347f3a97
zitxbit
Master C/C++
87 / 739 / 75
Регистрация: 11.04.2012
Сообщений: 971
01.09.2012, 17:58     Преобразование двумерного массива в одномерный #3
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
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <memory.h>
 
#define N 10
 
int main()
{
    int** A = new int*[N];
    for (int m1 = 0; m1 < N; m1++)
    {
        A[m1] = new int[N];
        for (int m2 = 0; m2 < N; m2++)
        {
            A[m1][m2] = rand() % N + 1;
            printf("%d ",A[m1][m2]);
        }
 
        printf("\n");
    }
 
    printf("\n");
 
    int* B = new int[N]; int n = 5;
    memset((void*)B, 0x00, sizeof(int) * N);
 
    for (int i = 0; i < N; i++)
        for (int k = 0; k < N; k++)
            if (A[i][k] < n) B[i]+=A[i][k];
 
    for (int n1 = 0; n1 < N; n1++)
    {
        for (int n2 = 0; n2 < N; n2++)
            printf("%d ",A[n1][n2]);
 
        printf(" sum = %d\n", B[n1]);
    }
 
    printf("\n");
 
    _getch();
 
    return 0;
}
http://liveworkspace.org/code/87b5a3...ac993f4635628b
Миниатюры
Преобразование двумерного массива в одномерный  
I.M.
564 / 547 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
01.09.2012, 18:11     Преобразование двумерного массива в одномерный #4
Цитата Сообщение от Dekio Посмотреть сообщение
C++
1
2
3
        int lineSize = std::accumulate(curLine.begin(), curLine.end(), 0);
        if(lineSize < size)
        vec.push_back(lineSize);
Здесь наверное ТС имел ввиду такое условие:
C++
1
2
3
        int lineSize = std::accumulate(curLine.begin(), curLine.end(), 0, [&](int res, int value){return value<size?res+value:res;});
        //if(lineSize < size)
        vec.push_back(lineSize);
Ev[G]eN
Эксперт С++
5096 / 1534 / 381
Регистрация: 23.01.2011
Сообщений: 3,148
01.09.2012, 18:20     Преобразование двумерного массива в одномерный #5
Сообщение было отмечено автором темы, экспертом или модератором как ответ
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
#include <iostream>
#include <iomanip>
#include <cstdlib>
#include <ctime>
 
int main()
{
    srand(time(0));
    const int Rows = 5, Colls = 5;
    int Matrix[Rows][Colls], Array[Rows];
    
    std::cout << "Matrix: " << std::endl;
    for(int i = 0; i < Rows; i++)
    {
            for(int j = 0; j < Colls; j++)
            {
                    Matrix[i][j] = rand() % 25;
                    std::cout << std::setw(4) << Matrix[i][j] << " ";
            }
            std::cout << std::endl;
    }
    
    int Number = 0, Count = 0;
    std::cout << "Enter number: ";
    std::cin >> Number;
    
    for(int i = 0; i < Rows; i++)
    {
            int Summa = 0;
            for(int j = 0; j < Colls; j++)
                    Summa += Matrix[i][j];
            if(Summa < Number)
                     Array[Count++] = Summa;
    }
    
    std::cout << "Array: " << std::endl;
    for(int i = 0; i < Count; i++)
            std::cout << std::setw(4) << Array[i];
    std::cout << std::endl;
    
    system("pause");
    return 0;
}
Dekio
Фрилансер
Эксперт С++
5837 / 1218 / 214
Регистрация: 23.11.2010
Сообщений: 3,378
Записей в блоге: 1
01.09.2012, 18:21     Преобразование двумерного массива в одномерный #6
I.M., не уверены, не пишите.

Цитата Сообщение от Мирзали Посмотреть сообщение
меньших числа n.
Ev[G]eN
Эксперт С++
5096 / 1534 / 381
Регистрация: 23.01.2011
Сообщений: 3,148
01.09.2012, 18:25     Преобразование двумерного массива в одномерный #7
zitxbit, мне кажется Ваша программа делает далеко не то, что попросил ТС
nameless
Эксперт C++
333 / 297 / 14
Регистрация: 16.06.2009
Сообщений: 486
01.09.2012, 18:29     Преобразование двумерного массива в одномерный #8
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Как вариант..

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
#include <iostream>
#include <algorithm>
#include <random>
#include <vector>
 
#include <boost/multi_array.hpp>
 
const int N = 10; 
const int M = 10;   
 
int main() {
   typedef boost::multi_array <int, 2> matrix_t;
   typedef boost::multi_array_types::index_range range;
   typedef matrix_t::array_view <1>::type matrix_view;
   typedef boost::multi_array_ref <int, 1> array_ref;
   
   std::random_device random_dev;
   
   matrix_t matrix(boost::extents[N][M]);
   array_ref matrix_ref(
      matrix.data(),
      boost::extents[matrix.num_elements()]
   );
 
   std::generate(
      matrix_ref.begin(),
      matrix_ref.end(),
      std::bind(
         std::uniform_int_distribution <int>(0, 10),
         std::mt19937(random_dev())
      )
   );
   
   int number = 6;
   std::vector <int> v_result;
   for (std::size_t index = 0; index < N; index++) {
      matrix_view row_view = matrix[boost::indices[index][range()]];
      v_result.push_back(
         std::accumulate(
            row_view.begin(),
            row_view.end(),
            0,
            [number](int lhs, int rhs) -> int {
               return lhs += (rhs < number) ? rhs : 0;
            }
         )
      );
   }
   
   for (std::size_t i = 0; i < N; i++) {
      std::copy(
         matrix[i].begin(),
         matrix[i].end(),
         std::ostream_iterator <int>(std::cout, "\t")
      );
      std::cout << "\n";
   }
   
   std::cout << '\n';
   for (const auto & val : v_result) {
      std::cout << val << "\t";
   }
}
http://liveworkspace.org/code/2454d2...c5bb64b02e58e9

Добавлено через 3 минуты
Цитата Сообщение от Мирзали Посмотреть сообщение
строки двумерного массива меньших числа n.
Пардон. Немного не так сделал. Извеняйте..
Мирзали
4 / 5 / 1
Регистрация: 20.11.2010
Сообщений: 353
01.09.2012, 19:14  [ТС]     Преобразование двумерного массива в одномерный #9
спасибо. полностью забыл С++((
Ev[G]eN
01.09.2012, 19:24
  #10

Не по теме:

Правило 3.6: Если какой-либо пост на форуме показался вам полезным, нажмите кнопку "Спасибо" внизу самого поста.

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.11.2013, 17:31     Преобразование двумерного массива в одномерный
Еще ссылки по теме:
C++ Сделать из двумерного массива одномерный
Из двумерного массива сформировать одномерный C++
Переписать из двумерного массива в одномерный C++
C++ Перевод двумерного массива в одномерный
Преобразование нединамического двумерного массива через указатели C++

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

Или воспользуйтесь поиском по форуму:
aned
2 / 1 / 0
Регистрация: 27.07.2013
Сообщений: 22
03.11.2013, 17:31     Преобразование двумерного массива в одномерный #11
C#
1
2
3
4
5
string[,] A= new string[M,N];
 
for(int i=0; i<M; i++)
for(int j=0; j<N ; j++)
 B[i * N + j] = A[i , j];//преобразуем двумерный массив A в одномерный B
Yandex
Объявления
03.11.2013, 17:31     Преобразование двумерного массива в одномерный
Ответ Создать тему
Опции темы

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