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

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

Войти
Регистрация
Восстановить пароль
 
Лилька_
Сообщений: n/a
#1

Нужен листинг на С++ (даны два вектора, упорядоченные по возрастанию. Слить их в один вектор, так чтобы сохранилась упорядоченность) - C++

20.05.2013, 18:17. Просмотров 1060. Ответов 8
Метки нет (Все метки)

Задание: Даны два вектора {хi}, {уi}, i = 1,..., 10, упорядоченные по возрастанию. Слить их в один вектор {zi}, i = 1, …, 20, так чтобы сохранилась упорядоченность.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.05.2013, 18:17     Нужен листинг на С++ (даны два вектора, упорядоченные по возрастанию. Слить их в один вектор, так чтобы сохранилась упорядоченность)
Посмотрите здесь:
Слить вектора в один вектор {z},i=1,...20 так, чтобы сохранилась упорядоченность C++
Даны два упорядоченных массива. Слить их в третий, но чтобы элементы не повторялись C++
Упорядочить массив так, чтобы сначала иши упорядоченные положительные члены а потом упорядоченные отрицательные члены C++
Слить один два файла в один C++
даны 2 массива,упорядоченные по убыванию,получить из них третий,в котором элементы расположены по возрастанию C++
Слить два линейных списка, сохранив сортировку по возрастанию C++
Объединить два массива в один так, чтобы в полученном массиве были только не совпадающие элементы C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ilya80let
6 / 6 / 1
Регистрация: 14.05.2013
Сообщений: 43
21.05.2013, 10:40     Нужен листинг на С++ (даны два вектора, упорядоченные по возрастанию. Слить их в один вектор, так чтобы сохранилась упорядоченность) #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
35
//---------------------------------------------------------------------------
#include <iostream.h>
#include <conio.h>
#include <vcl.h>
#pragma hdrstop
 
//---------------------------------------------------------------------------
 
#pragma argsused
int main(int argc, char* argv[])
{
int arr1[]={1,2,3,4,5};
int size1 = sizeof(arr1)/sizeof(int);
int arr2[]={6,7,8,9,10};
int size2 = sizeof(arr2)/sizeof(int);
/*const int size3 = size1 + size2;
cout<<size3<<endl;
int arr3[size3];
 
*/
int arr3[10];
 
for(int i=0; i<size1; i++)
arr3[i]=arr1[i];
 
for(int i=0; i<size2; i++)
arr3[i+size1]=arr2[i];
 
for(int i=0; i<sizeof(arr3)/sizeof(int); i++)
cout<<arr3[i]<<endl;
 
getch();
    return 0;
}
//---------------------------------------------------------------------------
Кстати просветите почему не компилиться строчка int arr3[size3];, size3 обЪявлена константой
есть предположение, что на момент выделения памяти компилятор не знает размер size1 и size2
Тогда, как обойти это и создать массив, если заранее не известна длина
Ilot
Модератор
Эксперт С++
1789 / 1164 / 226
Регистрация: 16.05.2013
Сообщений: 3,060
Записей в блоге: 5
Завершенные тесты: 1
21.05.2013, 11:15     Нужен листинг на С++ (даны два вектора, упорядоченные по возрастанию. Слить их в один вектор, так чтобы сохранилась упорядоченность) #3
Цитата Сообщение от ilya80let Посмотреть сообщение
Кстати просветите почему не компилиться строчка int arr3[size3];, size3 обЪявлена константой
есть предположение, что на момент выделения памяти компилятор не знает размер size1 и size2
Тогда, как обойти это и создать массив, если заранее не известна длина
Использовать указатели и команду new.
Croessmah
Модератор
Эксперт CЭксперт С++
12979 / 7291 / 812
Регистрация: 27.09.2012
Сообщений: 18,007
Записей в блоге: 3
Завершенные тесты: 1
21.05.2013, 11:18     Нужен листинг на С++ (даны два вектора, упорядоченные по возрастанию. Слить их в один вектор, так чтобы сохранилась упорядоченность) #4
Цитата Сообщение от ilya80let Посмотреть сообщение
size3 обЪявлена константой
есть предположение, что на момент выделения памяти компилятор не знает размер size1 и size2
Именно. Это должна быть не просто const-значение, а константа времени компиляции.

Цитата Сообщение от ilya80let Посмотреть сообщение
Тогда, как обойти это и создать массив, если заранее не известна длина
Выделять память в куче(пост #3). Ну еще как вариант можно использовать надстройку GNU VLA
Ilot
Модератор
Эксперт С++
1789 / 1164 / 226
Регистрация: 16.05.2013
Сообщений: 3,060
Записей в блоге: 5
Завершенные тесты: 1
21.05.2013, 11:44     Нужен листинг на С++ (даны два вектора, упорядоченные по возрастанию. Слить их в один вектор, так чтобы сохранилась упорядоченность) #5
ilya80let, ваш алгоритм работать не будет так как не сказанно, что все элементы второго массива больше элементов первого. Можно решить задачу так:
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
//Программа расчета суммы на депозите
#include<iostream>
using namespace std;
void showArray (int arr[], int n);
int main()
{
    int arr1[10] = {1,2,3,4,5,7,8,9,10,15};
    int arr2[10] = {2,3,4,6,7,8,10,11,14,17};
    int array[20];
    
    int index1 = 9, index2 = 9;
    for(int i = 19; i >= 0; i--)
    {
        if (index1 < 0)
        {
            array[i] = arr2[index2];
            index2--;
            continue;
        }
        else if (index2 < 0 )
        {
            array[i] = arr1[index1];
            index1--;
            continue;
        }
 
        if (arr1[index1] > arr2[index2])
        {
            array[i] = arr1[index1];
            index1--;
        }
        else
        {
            array[i] = arr2[index2];
            index2--;
        }
    }
 
    showArray (array, 20);
 
    system("pause");
    return 0;
}
void showArray (int arr[], int n)
{
    for (int i = 0; i < n; i++)
        cout << arr[i] << " ";
    cout << endl;
}
ilya80let
6 / 6 / 1
Регистрация: 14.05.2013
Сообщений: 43
21.05.2013, 11:47     Нужен листинг на С++ (даны два вектора, упорядоченные по возрастанию. Слить их в один вектор, так чтобы сохранилась упорядоченность) #6
Цитата Сообщение от Лилька_ Посмотреть сообщение
Слить их в один вектор {zi}, i = 1, …, 20, так чтобы сохранилась упорядоченность.
я не сортировал новый массив, а слил два и сохранил их упорядоченность
Ilot
Модератор
Эксперт С++
1789 / 1164 / 226
Регистрация: 16.05.2013
Сообщений: 3,060
Записей в блоге: 5
Завершенные тесты: 1
21.05.2013, 11:53     Нужен листинг на С++ (даны два вектора, упорядоченные по возрастанию. Слить их в один вектор, так чтобы сохранилась упорядоченность) #7
Ок, а если взять два вот таких массива:
arr1: 1 3 5 7 9
arr2: 2 4 6 12 14
То должен получиться упорядоченный массив
array: 1 2 3 4 5 6 7 9 12 14
Ваш алгоритм этого не даст. И последнее
так как не сказанно, что все элементы второго массива больше элементов первого.
ilya80let
6 / 6 / 1
Регистрация: 14.05.2013
Сообщений: 43
21.05.2013, 12:02     Нужен листинг на С++ (даны два вектора, упорядоченные по возрастанию. Слить их в один вектор, так чтобы сохранилась упорядоченность) #8
Цитата Сообщение от Лилька_ Посмотреть сообщение
Слить их в один вектор {zi}, i = 1, …, 20, так чтобы сохранилась упорядоченность.
Я понял предлжение так "Слить их чтобы сохранилась упорядоченность" , вы поняли чтобы новый массив был упорядочен, то есть отсортирован.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.05.2013, 13:09     Нужен листинг на С++ (даны два вектора, упорядоченные по возрастанию. Слить их в один вектор, так чтобы сохранилась упорядоченность)
Еще ссылки по теме:
Добавить элемент в упорядоченный список так, чтобы его упорядоченность не нарушалась C++
В упорядоченный массив включить новый элемент так, чтобы не нарушилась упорядоченность C++
C++ Вставить в упорядоченный по неубыванию список элемент с заданным значением так, чтобы не нарушить упорядоченность
В массив, упорядоченный по убыванию значений элементов, добавить новое число так, чтобы не нарушить упорядоченность C++
Дан вектор Z(n). Сформировать два вектора C++

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

Или воспользуйтесь поиском по форуму:
diagon
Higher
1927 / 1193 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
21.05.2013, 13:09     Нужен листинг на С++ (даны два вектора, упорядоченные по возрастанию. Слить их в один вектор, так чтобы сохранилась упорядоченность) #9
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
#include <algorithm>
#include <vector>
#include <iterator>
 
int main()
{
    std::vector<int> x = {1, 3, 5, 7, 9};
    std::vector<int> y = {2, 4, 6, 12, 14};
    
    std::vector<int> res;
    res.reserve(x.size() + y.size());
    
    merge(x.begin(), x.end(), y.begin(), y.end(), std::back_inserter(res));
    
    copy(res.begin(), res.end(), std::ostream_iterator<int> (std::cout, " "));
}
http://ideone.com/CPwhmv
Yandex
Объявления
21.05.2013, 13:09     Нужен листинг на С++ (даны два вектора, упорядоченные по возрастанию. Слить их в один вектор, так чтобы сохранилась упорядоченность)
Ответ Создать тему
Опции темы

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