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

Удалить из массива целых положительных элементов совершенные числа и оставшиеся элементы перевернуть симметрично центра

06.12.2021, 11:53. Показов 915. Ответов 0

Author24 — интернет-сервис помощи студентам
Доброго времени суток, товарищи. Не так давно изучаю cpp и не могу разобраться в проблеме, поэтому прошу у вас помощи. Написал код по заданию, но при некоторых условиях выводит неверный результат. В данном коде при вводе условных 10 совершенных чисел выводит 2, хотя не должен выводить ни одного. Вся проблема в функции del. Заранее спасибо

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
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
#include <iostream>
 
using namespace std;
 
bool perf(int*, int); //прототип функции поиска совершенного числа
void del(int&, int*&, int& num); //прототип функции удаления совершенного числа
int change(int, int*&, int&); //прототип функции отзеркаливания массива
 
int main()
{
    setlocale(0, "ru");
    srand(time(NULL));
    int num = 0;
    int SIZE;
    cout << "Введите размерность массива: " << endl;
    cin >> SIZE;
    int* arr = new int[SIZE]; //создание массива
    cout << "\nНачальный массив: " << endl;
 
    for (int i = 0; i < SIZE; i++) //вывод начального массива
    {
        arr[i] = 6 ;//rand() % 7;
        cout << arr[i] << " ";
    }
    cout << endl;
 
    del(SIZE, arr, num); //функция удаления совершенных чисел
    if (num != 0)
    {
        cout << "\nМассив без совершенных чисел: " << endl; //вывод массива без совершенных чисел
 
        for (int i = 0; i < SIZE; i++) //вывод массива без совершенных чисел
        {
            cout << arr[i] << " ";
        }
        cout << "\n\nИтоговый массив: " << endl;
        change(SIZE, arr, num); //функция отзеркаливания массива
    }
    else
        cout << "Все элементы удалены" << endl;
}
 
 
 
bool perf(int* arr, int number) //функция поиска совершенного числа
{
    if (arr[number] == 0) // не убираем 0 из массива
        return false;
    int sum = 0; //сумма делителей
    for (int i = 1; i < arr[number]; i++) //поиск соверш
    {
        if (arr[number] % i == 0)
            sum += i; 
    }
    return sum == arr[number];
}
 
 
void del(int& SIZE, int*& arr, int& num) //функция удаления совершенных чисел из массива
{
    int sum = 0;
    for (int i = 0; i < SIZE; i++)
    {
        if (perf(arr, i) and perf(arr, i) == perf(arr, i + 1)) //если несколько совершенных чисел сгенерирвоались подряд
        {
            for (int j = i; j < SIZE; j++)
            {
                arr[j] = arr[j + 2];
            }
            sum += 2; //кол-во совершенных чисел
        }
 
        if (perf(arr, i)) //если сгенерировалось 1 совершенное число
        {
            for (int j = i; j < SIZE; j++)
            {
                arr[j] = arr[j + 1];
            }
            sum++; //кол-во совершенных чисел
        }
    }
    num = (SIZE -= sum); //кол-во несовершенных чисел 
}
 
 
 
 
int change(int SIZE, int*& arr, int& num) //функция отзеркаливания массива
{
    int* res = new int[SIZE];
    if (num % 2 == 0) //если количество элементов массива %2==0
    {
        for (int i = (SIZE / 2) - 1, j = 0; i >= 0; i--) //отзеркаливание 1 половины
        {
            res[j] = arr[i];
            j++;
            cout << arr[i] << " ";
        }
 
        for (int i = SIZE - 1, j = 0; i >= SIZE / 2; i--) //отзеркаливание 2 половины
        {
            res[j] = arr[i];
            j++;
            cout << arr[i] << " ";
        }
    }
    else //если количество элементов массива %2!=0
    {
        for (int i = (SIZE / 2) - 1, j = 0; i >= 0; i--) //отзеркаливание 1 половины
        {
            res[j] = arr[i];
            j++;
            cout << arr[i] << " ";
        }
 
        for (int i = SIZE / 2, j = 0; j < 1; j++) //вывод цетрального элемента массива
        {
            cout << arr[i] << " ";
        }
 
        for (int i = SIZE - 1, j = 0; i >= (SIZE / 2) + 1; i--) //отзеркаливание 2 половины
        {
            res[j] = arr[i];
            j++;
            cout << arr[i] << " ";
        }
    }
    return 0;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.12.2021, 11:53
Ответы с готовыми решениями:

Удалить из массива целых чисел размером P элементов все четные числа, стоящие на нечетных местах, сдвинув оставшиеся в начало массива.
Задание 1. Составьте программу для решения следующей задачи обработки одномерных массивов...

Удалить из массива целых чисел размером P элементов все четные числа, стоящие на нечетных местах, сдвинув оставшиеся в начало массива.
Составьте программу для решения следующей задачи обработки одномерных массивов произвольной длины....

Удалить из массива целых чисел все четные числа, стоящие на нечётных местах, сдвинув оставшиеся в начало
Создайте проект, в котором в рамках класса Program опишите метод вывода и метод обработки...

Необходимо удалить первое вхождения числа Х в массив, оставшиеся элементы сдвинуть в начало массива
Нужно срочное решение. Пользователь вводит: - размер массива ; - элементы массива ; - число...

В одномерном массиве, состоящем из n целых элементов, «перевернуть» первые 5 элементов массива, остальные элементы возвести в квадрат
В одномерном массиве, состоящем из n целых элементов, «перевернуть» первые 5 элементов массива,...

0
06.12.2021, 11:53
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.12.2021, 11:53
Помогаю со студенческими работами здесь

Определить максимальный и минимальный элементы среди положительных нечётных элементов целочисленного массива. Удалить из массива все нулевые элементы
Определить максимальный и минимальный элементы среди положительных нечётных элементов...

Модуль. Из массива удалить отрицательные элементы, а затем оставшиеся элементы расположить в порядке убывания
Помогите решить задачку с использованием модуля - Из массива удалить отрицательные элементы, а...

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

В n мерном массиве целых чисел, вычислить сумму отрицательных элементов массива, положительных, и упорядочить все элементы массива по возрастанию
Ребят помогите решить! В n мерном массиве целых чисел, вычислить сумму отрицательных элементов...

Массивы. Удалить из массива все элементы, превосходящие х, а оставшиеся сдвинуть к началу
Введите с клавиатуры число х и удалите из массива все элементы, превосходящие х, а оставшиеся...

Удалить из массива число, у которого наибольшая сумма цифр и отсортировать оставшиеся элементы
Задан массив целых чисел х. Удалить из него число,у которого наибольшая сумма цифр. Поменять...


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

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