Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
Xitomi3
0 / 0 / 0
Регистрация: 01.11.2014
Сообщений: 62
1

Сформировать третий массив из упорядоченных по убыванию значений обоих массивов

20.02.2017, 12:32. Просмотров 1086. Ответов 7
Метки нет (Все метки)

Создать два массива действительных чисел при помощи функции rand(), состоящих из 7 и 9 элементов. Сформировать третий массив из упорядоченных по убыванию значений обоих массивов.

Создал 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
30
31
32
33
34
#include "stdafx.h"
#include <iostream>
#include <ctime>
 
using namespace std;
 
int main()
{
    setlocale(LC_ALL,"RUS");
    srand(time(NULL));
    int mas1[7], mas2[9];
    cout << "Массив длинною 7 элементов: "; 
    for (int i = 0; i < 7; i++)
    {
        mas1[i] = rand() % 20;
    }
    for (int i=0; i<7; i++)
    {
        cout << mas1[i] << " ";
    }
    cout << endl;
    cout << "Массив длинною 9 элементов: ";
    for (int i = 0; i < 9; i++)
    {
        mas2[i] = rand() % 20;
    }
    for (int i = 0; i<9; i++)
    {
        cout << mas2[i] << " ";
    }
    cout << endl;   
    system("pause");
    return 0;
}

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.02.2017, 12:32
Ответы с готовыми решениями:

Сформировать третий массив из упорядоченных по убыванию значений двух массивов
ввести два массива действительных чисел, состоящих из 7 и 9 элементов....

Из упорядоченных по возрастанию значений двух исходных массивов сформировать третий массив
Добрый день, друзья, очень нужна ваша помощь. Задача: Ввести два массива...

Создать третий массив минимально возможного размера, в котором нужно собрать элементы обоих массивов
2. Даны два массива: А и B (M и N вводятся с клавиатуры). Необходимо создать...

Создать третий массив минимально возможного размера, в котором нужно собрать элементы обоих массивов
Вот Задача Даны два массива: А и B (M и N вводятся с клавиатуры). Необходимо...

Создать третий массив минимально возможного размера, в котором нужно собрать элементы обоих массивов
Даны два массива: А и B (M и N вводятся с клавиатуры). Необходимо создать...

7
tyg
1 / 0 / 0
Регистрация: 06.02.2015
Сообщений: 6
20.02.2017, 13:13 2
Во-первых, Вам нужны массивы действительных чисел, а не целых. Ну а во-вторых, если в задании не указано каким способом осуществлять сортировку и Вы используете stl, то проще всего функции stl и использовать. Например алгоритм std::sort(), передав ему объект функцию std::greater<float>() в качестве критерия сортировки.
0
Дмитрий8892
53 / 53 / 51
Регистрация: 05.07.2016
Сообщений: 180
20.02.2017, 13:14 3
Лучший ответ Сообщение было отмечено Xitomi3 как решение

Решение

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
#include "windows.h"
#include <iostream>
#include <ctime>
 
using namespace std;
 
 void bubbleSort(int* arrayPtr, int length_array)
{
 int temp = 0;
 bool exit = false;
 
 while (!exit)
 {
  exit = true;
  for (int int_counter = 0; int_counter < (length_array - 1); int_counter++)
    if (arrayPtr[int_counter] > arrayPtr[int_counter + 1])
    {
     temp = arrayPtr[int_counter];
     arrayPtr[int_counter] = arrayPtr[int_counter + 1];
     arrayPtr[int_counter + 1] = temp;
     exit = false;
    }
 }
}
 
int main()
{
    setlocale(LC_ALL,"RUS");
    srand(time(NULL));
    int mas1[7], mas2[9], mas3[16];
    cout << "Массив длинною 7 элементов: ";
    for (int i = 0; i < 7; i++)
    {
        mas1[i] = rand() % 20;
        mas3[i]=mas1[i];
    }
    for (int i=0; i<7; i++)
    {
        cout << mas1[i] << " ";
    }
    cout << endl;
    cout << "Массив длинною 9 элементов: ";
    for (int i = 0; i < 9; i++)
    {
        mas2[i] = rand() % 20;
        mas3[i+7]=mas2[i];
    }
    for (int i = 0; i<9; i++)
    {
        cout << mas2[i] << " ";
    }
    cout << endl;
    bubbleSort(mas3,16);
    cout << "Массив длинною 16 элементов: ";
     for (int i = 0; i<16; i++)
    {
        cout << mas3[i] << " ";
    }
    system("pause");
    return 0;
}
1
MrGluck
Модератор
Эксперт CЭксперт С++
8105 / 4956 / 1436
Регистрация: 29.11.2010
Сообщений: 13,450
20.02.2017, 13:31 4
C++14
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
#include <algorithm>
#include <functional>
#include <iostream>
#include <iterator>
#include <random>
 
int main()
{
    constexpr size_t M = 7, N = 9, P = M + N;
    double A[M], B[N], C[P];
    std::mt19937 gen{ std::random_device()() };
    std::uniform_real_distribution<double> dist(0, 10);
    auto print = [](const auto &arr)
    {
        std::copy(std::cbegin(arr), std::cend(arr), std::ostream_iterator<double>(std::cout, " "));
        std::cout << std::endl;
    };
    auto gen_and_print = [&dist, &gen, &print](auto &arr)
    {
        std::generate(std::begin(arr), std::end(arr), [&dist, &gen] { return dist(gen); });
        print(arr);
    };
    
    gen_and_print(A);
    gen_and_print(B);
 
    auto cmp = std::less<double>();
    std::sort(std::begin(A), std::end(A), cmp);
    std::sort(std::begin(B), std::end(B), cmp);
    std::merge(std::cbegin(A), std::cend(A), std::cbegin(B), std::cend(B), std::rbegin(C), cmp);
    print(C);
}
1
tyg
1 / 0 / 0
Регистрация: 06.02.2015
Сообщений: 6
20.02.2017, 14:03 5
ну раз критика приветствуется, то:
1. В условии задачи указано "сформировать при помощи функции rand()"
2. Сортировка должна быть в порядке убывания, а не возрастания.
3. Зачем сортировать исходные массивы?
4. Код должен легко и просто читаться. Для данной задачи - просто перемудрили.
5. перепутали double и float
0
MrGluck
Модератор
Эксперт CЭксперт С++
8105 / 4956 / 1436
Регистрация: 29.11.2010
Сообщений: 13,450
20.02.2017, 14:17 6
Цитата Сообщение от tyg Посмотреть сообщение
1. В условии задачи указано "сформировать при помощи функции rand()"
Оставлю извращение в виде генерации вещественных чисел с помощью double адептам СИ.
Цитата Сообщение от tyg Посмотреть сообщение
2. Сортировка должна быть в порядке убывания, а не возрастания.
У меня и есть в порядке убывания, могли бы хоть предварительно запустить.
Цитата Сообщение от tyg Посмотреть сообщение
3. Зачем сортировать исходные массивы?
Очевидно же, что это самый простой способ сформировать третий массив, упорядоченный по убыванию. Даже если бы я не использовал STL, то свелосипедил бы свою сортировку.
Цитата Сообщение от tyg Посмотреть сообщение
4. Код должен легко и просто читаться. Для данной задачи - просто перемудрили.
Легко и просто читается, нужно читать названия, а не акцентировать внимание на неизвестных конструкциях.
Я тут вижу след. моменты (абстрагируясь от языка):
1. объявление переменных и функций, одна print, скорее всего выводит что-то на экран, другая gen_and_print. Учитывая, что внутри она вызывает generate, то очевидно, что она генерирует что-то и потом выводит это на экран
2. вызов gen_and_print для A и B - значит генерируем и выводим на экран A и B
3. sort A и B с параметром cmp (less). Легко догадаться, что сортировка.
4. merge - слияние. Смотрим откуда, смотрим куда, cmp скорее-всего сравнение при слиянии
5. print C - очевидно вывод

Код получился самоописательный, комменты тут могут быть только кэповские (КО) типо // merge делает слияние

Более-того, плюсовиков не испугать синтаксисом STL, наоборот, он скорее поймёт что хотел автор, если тот использует стандартные алгоритмы, а не велосипедит своё.

Почему люди думают, что если код написан на С++, а не "С с классами", то это сложно? Те же лямбды, строки, дин.массивы, стандартные алгоритмы в других языках (JS, python, ...) - это "просто и удобно", а в С++ их надо избегать?
1
tyg
1 / 0 / 0
Регистрация: 06.02.2015
Сообщений: 6
20.02.2017, 14:26 7
Прежде чем что-то делать, необходимо определить цели и задачи. Из условий задачи следует, что цель - познакомить человека с массивами, сортировкой элементов массива и функцией rand(). Причем тут лямбды и прочие навороты, если он даже не понимает как создать третий массив и путает целые числа с вещественными? Наверняка студенту задачку дали и ему нужно в решении показать, что он разобрался в теме. И не факт, что его преподаватель информатики сможет понять, что Вы написали. )
0
kostya037
1 / 1 / 0
Регистрация: 23.01.2018
Сообщений: 4
23.01.2018, 14:12 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
#include "stdafx.h"
#include <iostream>
#include <ctime>
 
using namespace std;
 
int main()
{
int mas1[7], mas2[9],mas3[16];
            cout << "Массив длинною 7 элементов: ";
            for (int i = 0; i < 7; i++)
            {
                mas1[i] = 1+rand() % 20;
                mas3[i] = mas1[i];
                cout << mas1[i] << " ";
            }
            cout << endl;
            cout << endl;
            cout << "Массив длинною 9 элементов: ";
            for (int i = 0; i < 9; i++)
            {
                mas2[i] = 1+rand() % 20;
                mas3[i + 7] = mas2[i];
                cout << mas2[i] << " ";
            }
            cout << endl;
            cout << endl;
            cout << "Массив длинною 16 элементов сформированный из двух выше перечисленных: ";
 
            for (int i = 0; i < 16; i++)
            {
                cout << mas3[i] << " ";
            }
            cout << endl;
            cout << endl;
            cout << "Массив длинною 16 элементов упорядоченный по убыванию: " ;
 
            for (int i = 0; i < 16; i++)
            {
                for (int j = 16-1; j > i; j--)
                {
                    if (mas3[j - 1] > mas3[j])
                    {
                        int temp = mas3[j - 1];
                        mas3[j - 1] = mas3[j];
                        mas3[j] = temp;
                    }
                }
            }
 
            for (int i = 15; 0 <= i; i--)
            {
                cout << mas3[i] << " ";
            }
            cout << endl;
            cout << endl;
}
0
23.01.2018, 14:12
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.01.2018, 14:12

Сформировать из двух упорядоченных массивов новый массив, тоже упорядоченный
Даны два одномерных массива, содержащих по N и M элементов, упорядоченных по...

Из двух одинаково упорядоченных одномерных массивов k и s сформировать один массив размером k+s
7.*.1. Помогите, пожалуйста, решить задачу в С++. Из двух одинаково...

На основе массивов А(4) и В(4) сформировать третий массив С(8)
Составить программу обработки одномерных массивов. На основе массивов А(4) и...


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

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

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