Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
1 / 1 / 0
Регистрация: 22.04.2023
Сообщений: 11
1

Сжать массив А, удалив из него все элементы, индекс которых кратен числу k с занесением их в массив B

22.04.2023, 10:24. Показов 515. Ответов 9

Author24 — интернет-сервис помощи студентам
Дан вещественный массив А[N] и натуральное число k ≥ 2. Сжать массив А, уда-
лив из него все элементы, индекс которых кратен числу k с занесением их в массив B.
Определить количество оставшихся элементов и вывести на экран: количество элемен-
тов массива A после сжатия, а также сами значения массива A; удаленные элементы
(массив B). (МАССИВ ДОЛЖЕН БЫТЬ СТАТИЧЕСКИМ И ОБЕЗАТЕЛЬНО НУЖНО УДАЛИТЬ ЭЛЕМЕНТЫ ИЗ МАССИВА)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.04.2023, 10:24
Ответы с готовыми решениями:

Сжать массив, удалив из него элементы индекс которых кратен какому либо числу
Как сжать массив удалив из него элементы индекс которых кратен какому либо числу?

Сжать массив удалив из него все элементы индекс которых кратен заданному числу
Дан вещественный массив А и натуральное число k ≥ 2. Сжать массив А, удалив из него все элементы,...

Сжать массив, удалив из него все элементы, кратные заданному числу k.
Дан массив A. Сжать массив, удалив из него все элементы, кратные заданному числу k. Освободившиеся...

Массив: Сжать массив, удалив из него все элементы, величина которых находится на интервале [a, b]
Сжать массив, удалив из него все элементы, величина которых находится на интервале . Место, которое...

Дан целочисленный массив размера N. Сжать массив, удалив из него все элементы, модуль которых не превышает 1
Помогите пожалуйста написать программу. Дан целочисленный массив размера N. Сжать массив, удалив...

9
9 / 10 / 4
Регистрация: 16.10.2020
Сообщений: 36
22.04.2023, 10:30 2
C++ (Qt)
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
#include <iostream>
using namespace std;
 
const int MAX_N = 100;
 
int main() {
    double A[MAX_N], B[MAX_N];
    int N, k, i, j;
 
    cout << "Введите размер массива A (до " << MAX_N << "): ";
    cin >> N;
 
    cout << "Введите элементы массива A:\n";
    for (i = 0; i < N; i++) {
        cin >> A[i];
    }
 
    cout << "Введите значение k (>=2): ";
    cin >> k;
 
    int num_deleted = 0;
    for (i = 0, j = 0; i < N; i++) {
        if ((i + 1) % k == 0) {
            B[num_deleted] = A[i];
            num_deleted++;
        } else {
            A[j] = A[i];
            j++;
        }
    }
 
    cout << "Количество оставшихся элементов в массиве A равно: " << N - num_deleted << endl;
 
    cout << "Элементы массива A после сжатия:\n";
    for (i = 0; i < N - num_deleted; i++) {
        cout << A[i] << " ";
    }
    cout << endl;
 
    cout << "Удаленные элементы:\n";
    for (i = 0; i < num_deleted; i++) {
        cout << B[i] << " ";
    }
    cout << endl;
 
    return 0;
}
В этом решении объявляем два массива - A и B - для исходного и удаленного содержимого, соответственно. Затем заполняем массив A с помощью ввода с клавиатуры, а также запрашиваем значение k. Затем мы проходим по массиву A и удаляем каждый элемент, индекс которого кратен k, перемещая его в массив B и увеличивая счетчик удаленных элементов. Также используем переменную j для отслеживания текущей позиции в массиве A после удаления элементов.

После этого выводим количество оставшихся элементов в массиве A, а также оставшиеся элементы. Затем выводим удаленные элементы из массива B.
0
1 / 1 / 0
Регистрация: 22.04.2023
Сообщений: 11
22.04.2023, 10:57  [ТС] 3
Получается по вашему коду мы просто не выводим ненужные значения. А можно сделать так, чтобы из массива полностью удалить элемент?
0
9 / 10 / 4
Регистрация: 16.10.2020
Сообщений: 36
22.04.2023, 13:09 4
Да, можно удалить элемент из массива. Однако, в статическом массиве C++ это не совсем просто. В общем для удаления элемента из массива необходимо сдвинуть все последующие элементы на одну позицию влево и уменьшить размер массива на единицу.

Но в случае со сжатием массива, это может оказаться не очень удобно и эффективно, так как это потребует множества операций с массивом, особенно если массив содержит большое количество элементов.

Вместо этого можно использовать подход, похожий на тот, что я показал выше, то есть пометить элементы, которые нужно удалить, а затем просто не выводить их на экран. Это позволит сохранить все элементы массива в памяти, но не использовать их в дальнейшей обработке.

Если все же нужно полностью удалить элемент из статического массива, можно воспользоваться следующим методом:
C++ (Qt)
1
2
3
4
for (int i = index; i < size - 1; i++) {
    array[i] = array[i+1];
}
size--;
Здесь array - это имя массива, size - это текущий размер массива, index - индекс элемента, который нужно удалить. Сдвигаем все последующие элементы на одну позицию влево, начиная с index, затирая элемент, который хотим удалить. Затем уменьшаем размер массива на единицу.
0
1 / 1 / 0
Регистрация: 22.04.2023
Сообщений: 11
22.04.2023, 13:32  [ТС] 5
Да, мне нужно полностью удалить элемент с массива.

Добавлено через 8 минут
Как можно вставить этот кусок кода, в программу которая выше?

Добавлено через 1 минуту
Как можно вставить этот кусок кода в твою программу, которую ты кидал выше?
0
9 / 10 / 4
Регистрация: 16.10.2020
Сообщений: 36
22.04.2023, 13:40 6
C++ (Qt)
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
#include <iostream>
using namespace std;
 
const int MAX_SIZE = 100;
 
void compressArray(double A[], int& sizeA, double B[], int& sizeB, int k) {
    int j = 0;
    for (int i = 0; i < sizeA; i++) {
        if ((i + 1) % k == 0) {
            B[j] = A[i];
            j++;
        } else {
            A[i - j] = A[i];
        }
    }
    sizeA -= j;
    sizeB = j;
    for (int i = 0; i < sizeA; i++) {
        cout << A[i] << " ";
    }
    cout << endl;
    for (int i = 0; i < sizeB; i++) {
        cout << B[i] << " ";
    }
}
 
int main() {
    double A[MAX_SIZE];
    double B[MAX_SIZE];
    int sizeA, sizeB, k;
 
    // Заполнение массива A
    cout << "Введите размер массива A: ";
    cin >> sizeA;
    cout << "Введите элементы массива A:" << endl;
    for (int i = 0; i < sizeA; i++) {
        cin >> A[i];
    }
 
    // Ввод параметра k
    cout << "Введите значение параметра k: ";
    cin >> k;
 
    // Сжатие массива A
    compressArray(A, sizeA, B, sizeB, k);
 
    // Вывод количества элементов и самих элементов массива A
    cout << "Количество элементов массива A после сжатия: " << sizeA << endl;
    cout << "Элементы массива A после сжатия: ";
    for (int i = 0; i < sizeA; i++) {
        cout << A[i] << " ";
    }
    cout << endl;
 
    // Вывод удаленных элементов массива A
    cout << "Удаленные элементы массива A: ";
    for (int i = 0; i < sizeB; i++) {
        cout << B[i] << " ";
    }
    cout << endl;
 
    return 0;
}
Здесь добавил вывод количества элементов и самих элементов массива A после сжатия, а также изменил функцию compressArray, чтобы удалять элементы из массива A.
0
1 / 1 / 0
Регистрация: 22.04.2023
Сообщений: 11
22.04.2023, 13:47  [ТС] 7
А можно это как-то реализовать, не через функцию?
0
9 / 10 / 4
Регистрация: 16.10.2020
Сообщений: 36
22.04.2023, 13:49 8
Да, можно, будет выглядеть вот так:
C++ (Qt)
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>
using namespace std;
 
const int MAX_SIZE = 100;
 
int main() {
    double A[MAX_SIZE];
    double B[MAX_SIZE];
    int sizeA, sizeB, k;
 
    // Заполнение массива A
    cout << "Введите размер массива A: ";
    cin >> sizeA;
    cout << "Введите элементы массива A:" << endl;
    for (int i = 0; i < sizeA; i++) {
        cin >> A[i];
    }
 
    // Ввод параметра k
    cout << "Введите значение параметра k: ";
    cin >> k;
 
    // Сжатие массива A и формирование массива B
    int j = 0;
    for (int i = 0; i < sizeA; i++) {
        if ((i + 1) % k == 0) {
            B[j] = A[i];
            j++;
        } else {
            A[i - j] = A[i];
        }
    }
    sizeA -= j;
    sizeB = j;
 
    // Вывод количества элементов и самих элементов массива A после сжатия
    cout << "Количество элементов массива A после сжатия: " << sizeA << endl;
    cout << "Элементы массива A после сжатия: ";
    for (int i = 0; i < sizeA; i++) {
        cout << A[i] << " ";
    }
    cout << endl;
 
    // Вывод удаленных элементов массива A
    cout << "Удаленные элементы массива A: ";
    for (int i = 0; i < sizeB; i++) {
        cout << B[i] << " ";
    }
    cout << endl;
 
    return 0;
}
Здесь просто добавил код функции compressArray внутрь функции main и удалил объявление и вызов функции.
1
1 / 1 / 0
Регистрация: 22.04.2023
Сообщений: 11
22.04.2023, 13:51  [ТС] 9
Спасибо, большое
1
9 / 10 / 4
Регистрация: 16.10.2020
Сообщений: 36
22.04.2023, 13:52 10
Обращайся
0
22.04.2023, 13:52
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.04.2023, 13:52
Помогаю со студенческими работами здесь

Дан целочисленный массив размера N. Сжать массив, удалив из него все элементы, модуль которых не превышает 1
Помогите пожалуйста написать программу: Дан целочисленный массив размера N. Сжать массив, удалив из...

Дан одномерный массив. Сжать массив, удалив из него все элементы. модуль которых не превышает, заданно 20 числа а.
Дан одномерный массив. Сжать массив, удалив из него все элементы. модуль которых не превышает,...

Массив: Удалить из массива все элементы, у которых индекс кратен заданному числу.
Сформировать массив A(n) случайным образом на отрезке . Составить программу удаления из заданной...

Дан одномерный массив А, состоящий из N целых чисел. Сжать массив, удалив из него все элементы, модуль которых находится в интервале [a,b]. Освободивш
ПОЖАЛУЙСТА ПОМОГИТЕ, а то будет очень плохо!!!!!(((((((( Дан одномерный массив А, состоящий из N...

Сжать массив, удалив из него все элементы, модуль которых не превышает 1
Сжать массив, удалив из него все элементы, модуль которых не превышает 1. Элементы, освободившихся...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru