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

Слияние двух массивов в отсортированный по не убыванию массив - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Структуры и строковые переменные http://www.cyberforum.ru/cpp-beginners/thread438377.html
Помогите, пожалуйста, найти ошибку. Четвёртый час сношаюсь с задачей, не могу найти, в чём баг. Задача простейшая с массивом из двух структур и строками. Компилится без ошибок и без предупреждений. работаю в Visual Studio 6. всё работает, но после выполнения программы вылазит окно с ошибкой. Постановка задания: Описать структуру с именем TRAIN, содержащую следующие поля: название пункта...
C++ функция rand() функция rand(). Расскажите об этой функции плиз. Смотрел в инете но везде какойто бред. Как с её помощью можно задать последовательность доустим с 45 до 66, и что для этого надо. http://www.cyberforum.ru/cpp-beginners/thread438368.html
C++ Проблемы с кодировкой при сравнении строк
Здравствуйте! Мне, нужно сравнить две строки: одну получаю get запросом(на сайте кодировка windows 1251), а вторая указывается непосредственно в коде. Но из-за кодировок, они не равны. Если вывести в консоль обе, первая явно короче(у меня иероглифы, и не вижу что там написано), если в файл, то одно и тоже. Длина строк так же различна. Какие есть пути решения проблемы? Скрин консоли:
C++ Найти нулевой(ые) элемент(ы) в матрице, вывести на пересечение какой строки и столбца располагается(ются) этот(эти) элемент(ы)
Ребят, программа нужна срочно, мне на неё нужно много потратить времени, помогите. Язык Си.
C++ Проверка задачи. http://www.cyberforum.ru/cpp-beginners/thread438334.html
вечер добрый. решал тут задачу, был уверен в решении, получил 30/100 баллов. у кого будет время, посмотрите пожалуйста, и дайте пример, где она будет валится, у меня не получилось. Задача B. Сокращение ссылок. - http://neerc.ifmo.ru/school/io/archive/20120129/problems-individual-20120129.pdf #include <fstream> #include <string> #include <cctype>
C++ Считывание расположения (пути) файла с клавиатуры Нужно реализовать в консольной программе открытие файла, путь которого будет считан с клавиатуры. Если файл находится в директории программы, то его ввести его название не составляет большого труда и программа этот файл без проблем читает, но когда дело подходит к вводу полного пути (например, C:\Games\2.bmp), то программа не читает файл. Это касается только ввода пути как аргумента командной... подробнее

Показать сообщение отдельно
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
31.01.2012, 09:44     Слияние двух массивов в отсортированный по не убыванию массив
Ладно, не зря же писал))
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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
/* Даны два массива. Массив А состоит из N элементов, массив В состоит из М
 * элементов. Оба массива отсортированы по убыванию. Разработать программу для
 * слияния этих массивов в отсортированный по не убыванию массив С. Числа М, N
 * ввести с клавиатуры. Память под массивы а, в, с выделить динамически.
 * Элементы массивов А, В задать случайными целыми из диапазона [-15;20]
 */
 
#include <iostream>
#include <cstdlib>
#include <ctime>
 
int random(int lower_bound, int upper_bound)
{
    return int(lower_bound + (upper_bound - lower_bound) * double(rand()) / RAND_MAX);
}
 
void random_fill(int *arr, size_t size, int lower_bound, int upper_bound)
{
    for (size_t i = 0; i < size; ++i)
        arr[i] = random(lower_bound, upper_bound);
}
 
bool greater_compare(int a, int b)
{
    return a > b;
}
 
void bubble_sort(int *arr, size_t size, bool (*compare)(int, int))
{
    for (size_t i = 0; i < size; ++i)
        for (size_t j = 0; j < size - i - 1; ++j)
            if (!compare(arr[j], arr[j + 1]))
                std::swap(arr[j], arr[j + 1]);
}
 
void print_array(int *arr, size_t size)
{
    for (size_t i = 0; i < size; ++i)
        std::cout << arr[i] << "  ";
    
    std::cout << std::endl;
}
 
void merge(int *arr1, size_t size1, int *arr2, size_t size2, int *arr3, bool (*compare)(int, int))
{
    size_t i1 = 0, i2 = 0, i3 = 0;
    
    while ((i1 < size1) && (i2 < size2))
    {
        if (compare(arr1[i1], arr2[i2]))
            arr3[i3++] = arr1[i1++];
        else
            arr3[i3++] = arr2[i2++];
    }
    
    while (i1 != size1)
        arr3[i3++] = arr1[i1++];
    
    while (i2 != size2)
        arr3[i3++] = arr2[i2++];
}
 
void reverse(int *arr, size_t size)
{
    for (int *p1 = arr, *p2 = arr + size - 1; p1 < p2; ++p1, --p2)
        std::swap(*p1, *p2);
}
 
int main()
{
    srand(unsigned(time(0)));
    
    size_t size1 = size_t(random(5, 15));
    int *arr1 = new int [size1];
    
    size_t size2 = size_t(random(5, 15));
    int *arr2 = new int [size2];
    
    random_fill(arr1, size1, -15, 20);
    random_fill(arr2, size2, -15, 20);
    
    print_array(arr1, size1);
    print_array(arr2, size2);
    
    bubble_sort(arr1, size1, greater_compare);
    bubble_sort(arr2, size2, greater_compare);
    
    print_array(arr1, size1);
    print_array(arr2, size2);
    
    size_t size3 = size1 + size2;
    int *arr3 = new int [size3];
    
    merge(arr1, size1, arr2, size2, arr3, greater_compare);
    reverse(arr3, size3);
    
    print_array(arr3, size3);
    
    delete [] arr1;
    delete [] arr2;
    delete [] arr3;
    
    return 0;
}
 
Текущее время: 11:50. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru