Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.81/21: Рейтинг темы: голосов - 21, средняя оценка - 4.81
3 / 3 / 0
Регистрация: 17.03.2019
Сообщений: 16
1

Разделить массив на 2 части

21.03.2019, 19:07. Показов 3831. Ответов 6
Метки нет (Все метки)

Добрый вечер, возможно вопрос будет слишком простым для кого-то, но я информации именно по такому заданию не нашёл(

Как мне разделить массив на 2 части по числу, которое вводить пользователь и получить 2 новых массива.
Например: есть массив array[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]. Пользователь вводит число 4 и получается 2 новых массива
array2[1, 2, 3, 4] и array3[5, 6, 7, 8, 9, 10]. Может кто-нибудь помочь с реализацией?
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.03.2019, 19:07
Ответы с готовыми решениями:

Разделить массив на 4 части
Прошу прощения за глупую просьбу, подскажите пожалуйста как разбить массив допустим из 40 элементов...

Разделить массив на две части
Помогите с решением задачи. Условие вот такое "дан массив целых чисел, лежащих в диапазоне ,...

Разделить массив на две части
Помогите решить адачку очень срочно надо Разделить массив на две части, поместив в первую...

Разделить одномерный массив на две части
Здравствуйте, есть данная заготовка, как массив А, поделить на две, три равные части? Каждая часть...

6
566 / 405 / 132
Регистрация: 22.11.2017
Сообщений: 1,033
21.03.2019, 19:19 2
Лучший ответ Сообщение было отмечено Aleksey30 как решение

Решение

Aleksey30, привет!
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
#include <iostream>
 
using namespace std;
 
int main()
{
    system("color 0A");
    
    size_t size0 = 10u;
    auto arr0 = new int[size0];
    for (size_t u = 0u; u < 10u; ++u)
    {
        arr0[u] = u;
        cout << arr0[u] << " ";
    }
    cout << endl;
    size_t num;
    cin >> num;
    auto arr1 = new int[num];
    for (size_t u = 0u; u < num; ++u)
    {
        arr1[u] = arr0[u];
        cout << arr1[u] << " ";
    }
    cout << endl;
    auto arr2 = new int[size0 - num];
    for (size_t u = num; u < size0; ++u)
    {
        arr2[u - num] = arr0[u];
        cout << arr2[u - num] << " ";
    }
    cout << endl;
    delete[] arr0;
    delete[] arr1;
    delete[] arr2;
    
    system("pause");
    return 0;
}
1
Миниатюры
Разделить массив на 2 части  
3 / 3 / 0
Регистрация: 17.03.2019
Сообщений: 16
21.03.2019, 20:17  [ТС] 3
SomniPhobia, огромное спасибо! Пойду разбираться.
0
566 / 405 / 132
Регистрация: 22.11.2017
Сообщений: 1,033
21.03.2019, 21:19 4
Aleksey30, пожалуйста!
Если будут вопросы - спрашивай.
0
3 / 3 / 0
Регистрация: 17.03.2019
Сообщений: 16
21.03.2019, 23:55  [ТС] 5
SomniPhobia, подстроил для своего кода, но есть проблемка(
Выходит, что мой массив делится по номеру выбранного элемента, а не по его значению.
Должны были получится массивы [0, -14, 6] и [7, 95, 14, 41, 88, 3]
Не подскажешь, как исправить? Буду благодарен!
Вот мой код, 2 цикла для разбития массива находятся в самом низу.



А пока попробую ещё сам что-нибудь придумать..

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
#include <stdio.h>
#include <iostream>
#include <stdlib.h>
 
using namespace std;
 
#define MAX 20
 
int main(void)
 
{
    int list[MAX];
 
    int next[MAX];
 
    int prev[MAX];
 
    int end = 0;
 
    int begin = 0;
 
    for (int i = 0; i < MAX; i++)
 
    {
        list[i] = next[i] = prev[i] = 0;
    }
 
    cout << "Input the number of elements: ";
    int n = 0;
 
    cin >> n;
 
    prev[0] = -1;
 
    cout << "Input elements of list: ";
 
    int count = 0;
 
    for (int i = 0; i < n; i++)
 
    {
        cin >> list[i];
 
        next[i] = i + 1;
 
        prev[i] = i - 1;
 
        count++;
 
    }
 
    prev[0] = -1;
 
    next[count] = -1;
 
    begin = 0;
 
    end = count - 1;
 
    cout << "Elements of list: ";
 
    int temp = begin;
 
    do {
        cout << list[temp] << " ";
 
        temp = next[temp];
 
    } while (next[temp] < n);
 
    cout << list[temp] << endl;
 
 
 
    size_t num;
    cout << "Enter element: ";
    cin >> num;
 
    auto arr1 = new int[num];
 
    for (size_t temp = 0u; temp < num; ++temp)
    {
        arr1[temp] = list[temp];
        cout << arr1[temp] << " ";
    }
    cout << endl;
    auto arr2 = new int[n - num];
 
    for (size_t temp = num; temp < n; ++temp)
    {
        arr2[temp - num] = list[temp];
        cout << arr2[temp - num] << " ";
    }
    cout << endl;
 
    system("pause");
 
    return 0;
}
0
Миниатюры
Разделить массив на 2 части  
566 / 405 / 132
Регистрация: 22.11.2017
Сообщений: 1,033
22.03.2019, 14:35 6
Aleksey30, убери слово лист. Это не листы у тебя. list -> array. Лист подразумевает список. Если тебе интересно - погугли. Можно и так, но не красиво, по крайней мере мне.
Вот код (строки 55 - 66 и далее). Сейчас нормально?
find() возвращает указатель на элемент в первом вхождении, который равен указанному значению.
distance() возвращает дистанцию между двумя указателями, что в отношении указателя на начало и на интересующий элемент = индексу на текущий элемент в массиве.
Вообще find(), distance() работают не с указателями, а с итераторами. Но они не против и указатели обработать.

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
#include <iostream>
#include <algorithm>
 
using namespace std;
 
#define MAX 20
 
int main()
{
    system("color 0A");
 
    int list[MAX];
    int next[MAX];
    int prev[MAX];
 
    int end = 0;
    int begin = 0;
 
    for (int i = 0; i < MAX; i++)
    {
        list[i] = next[i] = prev[i] = 0;
    }
 
    cout << "Input the number of elements: ";
    int n = 0;
    cin >> n;
    prev[0] = -1;
 
    cout << "Input elements of list: ";
    int count = 0;
    for (int i = 0; i < n; i++)
    {
        cin >> list[i];
        next[i] = i + 1;
        prev[i] = i - 1;
        count++;
    }
    prev[0] = -1;
    next[count] = -1;
    begin = 0;
    end = count - 1;
 
    cout << "Elements of list: ";
    int temp = begin;
    do
    {
        cout << list[temp] << " ";
 
        temp = next[temp];
 
    } while (next[temp] < n);
 
    cout << list[temp] << endl;
    
    size_t num;
    cout << "Enter element: ";
    cin >> num;
    auto it = find(list, list + MAX, num);
    if (it == list + MAX)
    {
        cout << "Not found" << endl;
        system("pause");
        return 1;
    }
    auto ind = distance(list, it);
    ++ind;
 
    auto arr1 = new int[ind];
 
    for (size_t temp = 0u; temp < ind; ++temp)
    {
        arr1[temp] = list[temp];
        cout << arr1[temp] << " ";
    }
    cout << endl;
    auto arr2 = new int[n - ind];
 
    for (size_t temp = ind; temp < n; ++temp)
    {
        arr2[temp - ind] = list[temp];
        cout << arr2[temp - ind] << " ";
    }
    cout << endl;
    
    system("pause");
    return 0;
}
0
Миниатюры
Разделить массив на 2 части  
6184 / 4191 / 2427
Регистрация: 18.12.2017
Сообщений: 13,119
23.03.2019, 04:39 7
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
#include <iostream>
using namespace std;
 
int main()
{
    int K, index=0, m=0, p=0;
    const int n=10;
    int a[n]={1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
    cout << "k="; cin >> K;
    
    for (int i = 0; i < n; i++)
    if (a[i]==K) {p=1;index=i;break;}
    
    if (p) 
    {    
    int*b = new int[index+1];
    int*c = new int[n-index-1];
    
    for (int i = 0; i < n; i++)
    {
        if (i<=index) b[i]=a[i];
        else c[m++]=a[i];        
    }
    
    for (int i = 0; i <= index; i++)    
        cout << b[i] << " ";
        cout << "\n";
        
    for (int i = 0; i < n-index-1; i++)    
        cout << c[i] << " ";       
        cout << "\n";    
    
    delete[]b;
    delete[]c;
    }
    else cout << "Number " << K << " is absent\n";
system("pause");
return 0;
}
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.03.2019, 04:39

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Разделить строку по пробелам и записать полученные части в массив
Здравствуйте. Подскажите, есть ли способ разделить строку по пробелам и записать полученные части в...

C++ разделить исходник на части
вопрос новичка посоветуйте, как это можно сделать (ни разу не делал) есть файл 1.cpp в котором...

разделить число на 2 части
как разделить число на 2 части вот у меня есть число в int : 445219 Я точно знаю что у меня с...

Разделить строку на части
Доброго времени суток. Имеется строка: char *pBuf=new char; заполняется она таким образом: ...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.