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

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

Войти
Регистрация
Восстановить пароль
 
zwenya
0 / 0 / 1
Регистрация: 13.11.2012
Сообщений: 61
#1

ошибка в программе - C++

27.12.2013, 17:01. Просмотров 199. Ответов 2
Метки нет (Все метки)

Даны два массива. Массив А состоит из N элементов и отсортирован по возрастанию. Массив В состоит из М элементов и отсортирован по убыванию. Разработать программу для слияния этих массивов в отсортированный по возрастанию массив С.

Помогите, пожалуйста, найти ошибку. Выводит 20 нулей , а должен - отсортированный по возрастанию массив

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
#include<iostream>
#include <conio.h>
#include <vector>
#include <algorithm>
#include <iterator>
using namespace std;
const int N=10, M=10;
vector<int> A, B, C;
 
struct Func
{
    int i;
    bool Flag;
    void operator()(int& x)
    {
        if(Flag)
            x=i++;
        if(!Flag)
            x=i--;
    };
    Func(int _i,bool flag):i(_i),Flag(flag){};
};
 
 
int main()
{
A.resize(10);
B.resize(10);
C.resize(20);
for_each(A.begin(),A.end(),Func(0,true));
for_each(B.begin(),B.end(),Func(50,false));
 
int x=0,i(0), y= M-1;
while (C[N+M-1])
{ 
    if (((A[x]>=B[y])||(x>N-1))&&(y<=M-1))
        {C[i]=B[i];
    i++;
    y--;}
 
else
    if  (((A[x]<=B[y])||(y<0)&&(x>=0)))
        { C[i]=A[x];
            i++;
            x++;
        }
 
}
ostream_iterator<int,char> It(cout," ");
copy(C.begin(),C.end(),It);
_getch();
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.12.2013, 17:01     ошибка в программе
Посмотрите здесь:

Ошибка в программе C++
C++ ошибка в программе
Ошибка в программе C++
C++ Ошибка в программе
C++ Ошибка в программе
ошибка в программе C++
ошибка в программе C++
C++ Ошибка в программе
Ошибка в программе C++
C++ Ошибка в программе
Ошибка в программе C++
C++ Ошибка в программе

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DiffEreD
1427 / 764 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
27.12.2013, 17:25     ошибка в программе #2
Если уж пользуемся STL, то можно так:
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 <iostream>
#include <vector>
#include <algorithm>
#include <functional>
 
std::ostream& operator << (std::ostream& os, const std::vector<int>& v)
{
   for (int i : v) os << i << " ";
   os << std::endl;
   return os;
}
 
int main()
{
   std::vector<int> a {8,3,9,7,1,3,9,7,0,3,6,4};
   std::vector<int> b {-7,-3,9,-2,-8,-4,-3,1,6,7,2,9,-2};
   std::sort(a.begin(), a.end());
   std::sort(b.begin(), b.end(), std::greater<int>());
   std::cout << "a: " << a << "b: " << b << "\n";
 
   std::vector<int> c;
   std::merge(a.begin(), a.end(), b.rbegin(), b.rend(), std::back_inserter(c));
   std::cout << "c: " << c << "\n";
 
   std::cout << "\n\nDone." << std::endl;
   return 0;
}
zwenya
0 / 0 / 1
Регистрация: 13.11.2012
Сообщений: 61
27.12.2013, 17:48  [ТС]     ошибка в программе #3
Цитата Сообщение от DiffEreD Посмотреть сообщение
std::merge(a.begin(), a.end(), b.rbegin(), b.rend(), std::back_inserter(c));
что такое back_inserter?
если заменить
C++
1
(C.begin(),C.end(),It)
на
C++
1
(B.begin(),B.end(),It)
, то выводим отсортированный по убыванию массив B. Тоже самое для A. Возможно ошибка у меня где-нибудь здесь:
Цитата Сообщение от zwenya Посмотреть сообщение
while (C[N+M-1])
{
if (((A[x]>=B[y])||(x>N-1))&&(y<=M-1))
{C[i]=B[i];
i++;
y--;}
else
if (((A[x]<=B[y])||(y<0)&&(x>=0)))
{ C[i]=A[x];
i++;
x++;
}
}
Yandex
Объявления
27.12.2013, 17:48     ошибка в программе
Ответ Создать тему
Опции темы

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