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

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

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

Студворк — интернет-сервис помощи студентам
Доброго времени суток, товарищи. Не так давно изучаю 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
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
06.12.2021, 11:53
Ответы с готовыми решениями:

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

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

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

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
06.12.2021, 11:53
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит: токи, напряжения и их 1 и 2 производные при t = 0;. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru