Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.10.2010, 19:39   #1
ATAMAN200
Пользователь
 
Регистрация: 30.08.2010
Сообщений: 41
По умолчанию Ошибка в алгоритме слияние массивов

Этот код производит слияние двух массивов "int a[] = {4,2,6}" и "b[] = {645,998,333}" в массив "c[6]"

Код:
#include "stdafx.h" 
#include <iostream>
#include "conio.h" 
#include "string.h" 
using namespace std;
int a[] = {4,2,6}, b[] = {645,998,333}, c[6];
 
int main()
{
        for(int i=0, j=0, k=0; k < (sizeof(b)+sizeof(a))/4; k++)
        {
c[k] = (a[i] < b[j]) ? a[i++] : b[j++];
cout << c[k] << endl;
        }
        getch();
}
но результат таков
4
2
6
645 повторяет дважды и пропускает 333
645

998
ATAMAN200 вне форума Ответить с цитированием
Старый 25.10.2010, 19:47   #2
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Видимо, когда массив a заканчивается, то i == 3, то есть за пределами массива a. Фактически там может располагаться любое число, но скорее всего записан массив b. И потому на четвёртой итерации сравниваются a[3](предположительно равное 645) и b[0](равное 645). Короче проблема в том, что один лишний раз увеличивается i
netrino вне форума Ответить с цитированием
Старый 25.10.2010, 20:36   #3
elja_1989
Пользователь
 
Регистрация: 16.03.2010
Сообщений: 58
По умолчанию

а зачем так странно писать?) да и сайзоф даст размер *-зателя..

Код:
#include "stdafx.h" 
#include <iostream>
#include "conio.h" 
#include "string.h" 
using namespace std;
int a[] = {4,2,6}, b[] = {645,998,333}, c[6];
 
int main()
{
        int length1 = длинна(a);
        int length2 = длинна(b);
        for(int i = 0 ; i < length1  +length2; i++ )
        {
               if(i < length1)
                    c[i] = a[i];
               else if(i > length1 && i < length2)
                    c[i] = b[length1 - i];
        }
        getch();
}

Последний раз редактировалось elja_1989; 25.10.2010 в 20:41.
elja_1989 вне форума Ответить с цитированием
Старый 25.10.2010, 20:37   #4
ATAMAN200
Пользователь
 
Регистрация: 30.08.2010
Сообщений: 41
По умолчанию

Цитата:
Сообщение от elja_1989 Посмотреть сообщение
а зачем так странно писать?)
это ты про что ?
ATAMAN200 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Слияние двух массивов в Delphi sauron99 Помощь студентам 17 03.04.2016 09:37
Слияние массивов в паскале A_Orlov Помощь студентам 0 20.06.2010 21:09
Ошибка в алгоритме?Выдает ошибку после компиляции. Aerial Общие вопросы C/C++ 2 12.05.2010 16:52
Ошибка в алгоритме программы на бинарные фйлы ROD Общие вопросы C/C++ 0 15.04.2009 22:15
Объединение, пересечение, слияние массивов -=Domestos=- Помощь студентам 6 25.12.2006 21:06