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

задание из книжки с массивами - C++

Восстановить пароль Регистрация
 
Olejeg85
13 / 10 / 0
Регистрация: 27.03.2011
Сообщений: 164
20.06.2011, 14:20     задание из книжки с массивами #1
два заведомо упорядоченных массива (например 1,3,6,8,100500 и 3,5,9,10,9000), размер массивов одинаковый. Склеить их в один новый массив длиной в два раза больший, чем они, так, чтобы новый массив был так же упорядочен. Применять сортировку нельзя, иначе задача решается легко

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
 
using namespace std;
 
int main ()
{
    int mass1[]={1,2,3,4,5};
    int mass2[]={2,3,4,1,6};
    int mass3[10];
 
    for(int i=0; i<5; i++)
        mass3[i]=mass1[1];
        
    for(int i=5; i<10; i++)
        mass3[i]=mass1[2];
 
    return 0;
}
а как их упорядочить подскажите?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.06.2011, 14:20     задание из книжки с массивами
Посмотрите здесь:

книжки C++
C++ Задание с одномерными массивами
книжки C++
C++ Задание по работе с массивами
книжки по си++ C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
denix
 Аватар для denix
63 / 63 / 2
Регистрация: 11.01.2009
Сообщений: 130
20.06.2011, 14:21     задание из книжки с массивами #2
А подумать если?
grizlik78
Эксперт С++
 Аватар для grizlik78
1884 / 1416 / 102
Регистрация: 29.05.2011
Сообщений: 2,961
20.06.2011, 14:34     задание из книжки с массивами #3
Olejeg85, в задании говорится об упорядоченных массивах, а mass2 у тебя не такой. Для упорядоченных массивов задача решается просто.
Код попробуй сам написать, а алгоритм такой:
1. Заводим 3 индекса, по одному на массив (i1, i2, i3) и обнуляем их.
2. Пока первый массив не закончился и пока элемент первого массива с индексом i1 не больше элемента второго с индексом i2 переписываем элемент в очередную ячейку третьего массива
3. Пока второй массив не закончился и пока элемент второго массива с индексом i2 не больше элемента первого с индексом i1 переписываем элемент в очередную ячейку третьего массива
4. пункты 2 и 3 повторяются пока не закончатся оба массива

Добавлено через 1 минуту
правда надо учесть ещё, что другой массив мог уже закончится, тогда с его элементами сравнивать не надо.
VASSUV
MiThEoN
 Аватар для VASSUV
412 / 278 / 15
Регистрация: 31.10.2009
Сообщений: 403
Записей в блоге: 2
20.06.2011, 14:55     задание из книжки с массивами #4
Цитата Сообщение от grizlik78 Посмотреть сообщение
2. Пока первый массив не закончился и пока элемент первого массива с индексом i1 не больше элемента второго с индексом i2 переписываем элемент в очередную ячейку третьего массива
3. Пока второй массив не закончился и пока элемент второго массива с индексом i2 не больше элемента первого с индексом i1 переписываем элемент в очередную ячейку третьего массива
4. пункты 2 и 3 повторяются пока не закончатся оба массива
Как то сложновато сказал:

2. В одном цикле проходишь до конца третьего массива
2.1 В этом цикле проверяешь(т.е первое условие), прошел ли ты до конца первого массива(i1 = 5), есди да тогда дописываешь остатки второго массива;
2.2 Второе условие --//-- до конца второго массива(i2 = 5), если да тогда дописываешь остатки первого массива;
2.3 третье условие : сравнивание очередных элементов массивов(1-го и 2-го), и дописываешь в третий минимальный из них

PS: На этапе этих условий, соответствующие индексы увеличиваются

Добавлено через 1 минуту
Я бы все это написал так бы:
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
#include <iostream>
using namespace std;   
#define N1 5
#define N2 6
#define N3 N1+N2
int main()
{
        int mass1[N1]={1,3,5,7,9};
        int mass2[N2]={0,2,3,8,10,13};
    int mass3[N3];
    int j1 = 0,  
        j2 = 0;
    for(int i=0; i<N3; i++)
    {
        if(j1 == N1)
        {
            mass3[i] = mass2[j2];
            j2 ++;
        }
        else if(j2 == N2)
        {
            mass3[i] = mass1[j1] ;
            j1 ++;
        }
        else if(mass1[j1]<mass2[j2])
        {
            mass3[i] = mass1[j1];
            j1 ++;
        }
        else 
        {   
            mass3[i] = mass2[j2];
            j2 ++;
        }
    }
 
    for(int i = 0; i < N3; i ++)
        cout<<mass3[i]<<" ";
    cout<<endl;
    system("pause");
    return 0; 
}
grizlik78
Эксперт С++
 Аватар для grizlik78
1884 / 1416 / 102
Регистрация: 29.05.2011
Сообщений: 2,961
20.06.2011, 15:00     задание из книжки с массивами #5
Ну вот что-то не рождаются в моей голове простые конструкции. Я имел в виду такой код
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
#include <iostream>
 
using namespace std;
 
int main ()
{
    int mass1[] = {1, 3, 6, 8, 100500};
    int mass2[] = {3, 5, 9, 10, 9000};
    int const N1 = sizeof(mass1)/sizeof(*mass1);
    int const N2 = sizeof(mass2)/sizeof(*mass2);
    int const N3 = N1 + N2;
    int mass3[N3];
 
    int i1 = 0, i2 = 0, i3 = 0;
    while (i3 < N3 && (i1 < N1 || i2 < N2))
    {
        while (i1 < N1 && ( i2 >= N2 || mass1[i1] <= mass2[i2]))
            mass3[i3++] = mass1[i1++];
 
        while (i2 < N2 && ( i1 >= N1 || mass2[i2] <= mass1[i1]))
            mass3[i3++] = mass2[i2++];
    }
 
    for (int i = 0; i < N3; ++i)
        cout << mass3[i] << " ";
    cout << endl;
 
    return 0;
}
Эх, всё пропало...
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
20.06.2011, 15:22     задание из книжки с массивами #6
Все проще
C++
1
2
3
4
5
6
7
8
9
#include <iostream>
#error нечитабельный быдлокод
int main(){
    int m1[]={1,2,3,4,8,9,11,12,15},n1=sizeof(m1)/sizeof(*m1),m2[]={1,3,4,5,7,10,14},n2=sizeof(m2)/sizeof(*m2),n3=n1+n2, * newarr = new int[n3];
    for (int i = 0,x = 0, y =0; i < n3; std::cout << newarr[i++] << ' '){
        newarr[i] = (m1[x] < m2[y]?m1[x++]:m2[y++]);
        if (x == n1) m1[--x]=m2[n2-1]+1; if (y == n2) m2[--y]=m1[n1-1]+1; }
        delete[] newarr;
}
VASSUV
MiThEoN
 Аватар для VASSUV
412 / 278 / 15
Регистрация: 31.10.2009
Сообщений: 403
Записей в блоге: 2
20.06.2011, 15:29     задание из книжки с массивами #7
Цитата Сообщение от diagon Посмотреть сообщение
#error нечитабельный быдлокод
grizlik78
Эксперт С++
 Аватар для grizlik78
1884 / 1416 / 102
Регистрация: 29.05.2011
Сообщений: 2,961
20.06.2011, 15:46     задание из книжки с массивами #8
Читаемый, если отформатировать. Но главный недостаток — меняет исходные массивы, к которым вообще может не быть доступа на запись.

Добавлено через 5 минут
Плюс не сможет отсортировать массивы, в которых присутствует максимальное для данного типа число.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.06.2011, 16:18     задание из книжки с массивами
Еще ссылки по теме:

C++ Задание с массивами.
C++ задание со строкой и массивами. C++.
Задание с массивами C++

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

Или воспользуйтесь поиском по форуму:
Olejeg85
13 / 10 / 0
Регистрация: 27.03.2011
Сообщений: 164
20.06.2011, 16:18  [ТС]     задание из книжки с массивами #9
спасибо всем
Yandex
Объявления
20.06.2011, 16:18     задание из книжки с массивами
Ответ Создать тему
Опции темы

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