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

Не работает функция замены последнего отрицательного элемента в массиве на три элемента, равных заданному значению

21.04.2019, 03:37. Показов 846. Ответов 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
43
44
45
46
47
48
49
50
51
52
//Функция поиска последнего отрицательного элемента в массиве и замена его на три элемента, равных заданному значению
void remove_otr_element_on_3_numbers(double *arr, int &length)
{
    double change_number;
    cout << "Введите число, на которое нужно заменить " << endl;
    cin >> change_number;
    int check_otr = 0, check_ne_otr = 0, otr_number;
 
    for (int i = length - 1; i >= 0; i--)
    {
        if (arr[i] < 0 && check_otr == 0)
        {
            otr_number = i;
            check_otr++;
        }
        if (arr[i] >= 0)
            check_ne_otr++;
    }
 
    if (check_ne_otr == length)
        cout << "Замена невозможна, так как все числа положительные " << endl;
 
    else 
    {
        double *arr_2 = new double[length + 2];
 
        for (int i = 0, j = 0; i < length; i++)
        {
            if (i == otr_number)
            {
                arr_2[j] = change_number;
                arr_2[j + 1] = change_number;
                arr_2[j + 2] = change_number;
                j+=3;
            }
 
            else
            {
                arr_2[j] = arr[i];
                j++;
            }
        }
 
        length += 2;
        for (int i = 0; i < length; i++)
        {
            arr[i] = arr_2[i];
        }
        delete[]arr_2;
 
    }
}
Добавлено через 2 минуты
Я предполагаю, что с границами массивов напортачил что-то, но не могу понять где именно.

Добавлено через 1 минуту
А ошибки выдает каждый раз разные и мне, как первокурснику, они просто непонятны.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
21.04.2019, 03:37
Ответы с готовыми решениями:

Массив: Заменить последний из отрицательных элементов в массиве на три элемента, равных заданному значению.
Вставка в вектор новых элементов 1)Заменить последний из отрицательных элементов в массиве на три эле¬мента, равных заданному значению....

Найти номер последнего отрицательного элемента в массиве
Найти номер последнего отрицательного элемента в массиве. Формат входных данных В первой строке входных данных находится число...

В массиве после каждого отрицательного элемента, вставить элемент, равный модулю отрицательного элемента
Нужен код С#

1
Прощай, Мир!
 Аватар для proc3nt
1673 / 831 / 253
Регистрация: 26.05.2012
Сообщений: 3,056
21.04.2019, 05:36
Цитата Сообщение от GreyBasil Посмотреть сообщение
void remove_otr_element_on_3_numbers(double *arr, int &length)
желательно передавайте здесь длину исходного массива не по адресу а напрямую..
C++
1
void remove_otr_element_on_3_numbers(double *arr, int length)
Цитата Сообщение от GreyBasil Посмотреть сообщение
if (arr[i] < 0 && check_otr == 0)
{
otr_number = i;
check_otr++;
}
if (arr[i] >= 0) check_ne_otr++;
так как нужно найти именно последний отрицательный элемент, то нужно сразу выходить из цикла после его нахождения..
C++
1
2
3
4
5
6
7
8
9
10
11
12
for(int i=length-1;i>=0;i--)
{
    if(arr[i]<0)
    {
        otr_number=i;
        break;
    }
    else
    {
        check_ne_otr++;
    }
}
Цитата Сообщение от GreyBasil Посмотреть сообщение
length += 2;
for (int i = 0; i < length; i++)
{
arr[i] = arr_2[i];
}

delete [ ] arr_2;
так не получится полностью скопировать новый массив в исходный, т.к. размер исходного динамического массива будет меньше нового, а размер исходного увеличить нельзя.. можно только вывести новый полученный массив..
C++
1
2
3
4
5
6
cout<<"\nNew array: ";
 
for(int i=0;i<length+2;i++)
{
    cout<<arr_2[i]<<" ";
}
вот прикрепляю полный вариант программы..
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
#include <iostream>
 
using namespace std;
 
void remove_otr_element_on_3_numbers(double *arr,int length)
{
    double change_number;
    cout<<"\nВведите число, на которое нужно заменить ";
    cin>>change_number;
    int check_ne_otr=0,otr_number;
 
    for(int i=length-1;i>=0;i--)
    {
        if(arr[i]<0)
        {
            otr_number=i;
            break;
        }
        else
        {
            check_ne_otr++;
        }
    }
 
    if(check_ne_otr==length)
    {
        cout<<"Замена невозможна, так как все числа положительные "<<endl;
    }
    else
    {
        double *arr_2=new double[length+2];
 
        for(int i=0,j=0;i<length;i++)
        {
            if(i==otr_number)
            {
                arr_2[j]=change_number;
                arr_2[j+1]=change_number;
                arr_2[j+2]=change_number;
                j+=3;
            }
            else
            {
                arr_2[j]=arr[i];
                j++;
            }
        }
 
        cout<<"\nNew array: ";
 
        for(int i=0;i<length+2;i++)
        {
            cout<<arr_2[i]<<" ";
        }
 
    }
}
 
int main()
{
    const int n=5;
    double *arr=new double[n];
 
    for(int i=0;i<n;i++)
    {
        cout<<"arr["<<i<<"]=";
        cin>>arr[i];
    }
 
    cout<<"\nYour array: ";
 
    for(int i=0;i<n;i++)
    {
        cout<<arr[i]<<" ";
    }
 
    remove_otr_element_on_3_numbers(arr,n);
 
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
21.04.2019, 05:36
Помогаю со студенческими работами здесь

Функция. Массивы. Определить номер последнего отрицательного элемента
Помогите пожалуйста для массивов А (М), К (N) определить номер последнего отрицательного элемента

В целочисленном массиве найти номер последнего отрицательного элемента
В целочисленном массиве найти номер последнего отрицательного элемента. Удалить этот элемент из массива

Вывести положение последнего отрицательного элемента в двумерном массиве
Вывести положение последнего отрицательного элемента в двумерном массиве. Все нужно делать через StringGrid. Вот что я сделал, но...

В массиве N элементов найти номер последнего отрицательного элемента
В массиве N элементов найти номер последнего отрицательного элемента. Значение элемента и его порядковый номер вывести на экран. C++

Найти номер последнего отрицательного элемента в одномерном динамическом массиве
Найти номер последнего отрицательного элемента в одномерном динамическом массиве.


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru