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

Создание отсортированого массива с двух - C++

Восстановить пароль Регистрация
 
triadec_96
 Аватар для triadec_96
11 / 11 / 0
Регистрация: 27.12.2012
Сообщений: 429
Завершенные тесты: 1
10.09.2013, 23:01     Создание отсортированого массива с двух #1
Задание:
Есть массив c[1],...c[n] и массив d[1],...d[k].С этих двух массивов создать массив f так,чтобы f[1]<=f[2]<=...<=f[n+k].
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
#include <iostream>
#include <conio.h>
using namespace std;
void main()
{
    int i,j,c[255],d[255],f[255],t,n,k,q,w,e;
 
    cout<<"Input n"<<endl; //ввод переменных n и k
    cin>>n;
    system("cls");
    cout<<"Input k"<<endl;
    cin>>k;
    system("cls");
 
    for(i=0;i<n;i++) //ввод массивов
    {cout<<"Input c"<<endl;
    cin>>c[i];}
 
    for(i=0;i<k;i++)
    {cout<<"Input d"<<endl;
    cin>>d[i];}
    system("cls");
 
    for(i=0;i<n-1;i++) //сортировка массивов
        for(j=0;j<n-1;j++)
            if(c[j]>c[j+1]) 
            {t=c[j];
            c[j]=c[j+1];
            c[j+1]=t;}
 
    for(i=0;i<k-1;i++)
        for(j=0;j<k-1;j++)
            if(d[j]>d[j+1]) 
            {t=d[j];
            d[j]=d[j+1];
            d[j+1]=t;}
 
    t=0;j=0;q=0; //t-индекс текущего элемента массива с,j-ИТЭМ d,q-число,которое будем присваивать эл. масс. f
        for(i=0;i<n+k;i++)
        {
            if(t==n-1) //если закончились элементы с
            {e=i; //e-новый индекс масс. f
                for(w=j;j<k;w++,e++)
                    f[e]=c[w];
        i=254;} // это потому,что в конце цыкла есть строка "f[i]=q" и надо сбить i
        else if(j==k-1) //если закончились элементы d
            {e=i;
                for(w=j;j<k;w++,e++)
                    f[e]=d[w];
        i=254;}
            if(c[t]==d[j]) //если текущий с равен текущему d
        {f[i]=c[t]; 
        q=d[j];
        i++;t++;j++;} //думаю понятно почему так много инкрементов
        else if(c[t]<d[j]) //здесь тоже не сложно
        {q=c[t];t++;}
        else {q=d[j];j++;}
        
        f[i]=q;}
 
        for(i=0;i<n+k;i++)
            cout<<f[i]<<" ";
 
    getch();
}
Проблема в том,что перед выводом результата выбивает "Необработанное исключение по адресу 0x009552ED в Проект1.exe: 0xC0000005: нарушение прав доступа при чтении по адресу 0x00260000."
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.09.2013, 23:01     Создание отсортированого массива с двух
Посмотрите здесь:

C++ Создание минимально возможного третьего динамического массива из двух
C++ Найти номера двух одинаковых элементов массива
C++ Создать два массива, которые будут содержать: все четные элементы двух массивов; все нечетные элементы двух массивов
C++ Поменять местами значения двух элементов массива
Создание ДЕК (как стэк только о двух концах) без <deque> C++
Создание двух объектов класса Employee C++
Формировка третьего массива из двух других C++
C++ Сравнение двумерного массива созданного из двух строк

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
User409368
191 / 168 / 6
Регистрация: 09.09.2013
Сообщений: 524
10.09.2013, 23:18     Создание отсортированого массива с двух #2
лучше написать отдельную функцию для сортировки массива, чем одно и тоже писать в нескольких частях программы

Добавлено через 31 секунду
отсюда и появляются ошибки
Stella
75 / 75 / 5
Регистрация: 26.02.2013
Сообщений: 224
11.09.2013, 00:16     Создание отсортированого массива с двух #3
triadec_96, возможно сначала здесь:

C++
1
2
3
4
5
6
7
        if(t==n-1) //если закончились элементы с
        {
            e=i; //e-новый индекс масс. f
            for(w=j;j<k;w++,e++)
                f[e]=c[w];
            i=254;
        } // это потому,что в конце цыкла есть строка "f[i]=q" и надо сбить i
элементы с у вас закончились, а почему вы в f дальше элементы из с записываете?


Цитата Сообщение от triadec_96 Посмотреть сообщение
i=254;} // это потому,что в конце цыкла есть строка "f[i]=q" и надо сбить i
вот по-этому скорее всего и исключение.
как только заканчиваются элементы из с или d, i устанавливается 254, а потом увеличивается на 1 (в условии цикла) и стает 255, а потом читается с[255] или d[255] - и выход за границы массива.

Попробуйте пройти программу по F10 и посмотрите, как изменяются переменные. Тогда будет видно.
Yandex
Объявления
11.09.2013, 00:16     Создание отсортированого массива с двух
Ответ Создать тему
Опции темы

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