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

Функция поиска положения последнего отрицательного элемента массива

02.07.2020, 14:12. Показов 3311. Ответов 3

Студворк — интернет-сервис помощи студентам
Найти ошибку кода по С++
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
#include <iostream>
/*Создать функцию для поиска положения последнего отрицательного элемента произвольного массива целых чисел. Вернуть указатель на отрицательный элемент.
Тестовая программа:
⦁  Создать и инициализировать 2 массива A[N1], B[N2]
⦁  Найти положение отрицательного элемента массива. Полученный указатель разделяет массив на 2 части.
⦁  Определить максимальный элемент в второй  части массив
⦁  Пункты 2 и 3 выполнить для массивов A и B
 
*/
 
using namespace std;
 
int ArrayCreate(int Array[], int size)
{
    for (int i = 0; i < size; i++)
    {
        Array[i] = rand() % 41 - 20;
        cout << Array[i] << " ";
    }
    return 0;
}
int *SearchLastNegative(int Array[], int size)
{
    for (int i = size; i > 0; i--)
    {
        if (Array[i] < 0)
        {
            cout << "Last index negative number " << i << endl;
            cout << "Last  negative number " << Array[i] << endl;
            int *ptr = &Array[i];
            return ptr;
            break;
        }
 
    }
    return 0;
}
 
int GetMaximumItem(int Array[], int size, int *ptr)
{
 
    int IndexPart = 0, MaxItem = 0;
    for (int i = size; i > 0; i--)
    {
        if (Array[i] == *ptr)
        {
            IndexPart = i;
            break;
        }
    }
    MaxItem = Array[IndexPart];
    for (int i = IndexPart; i < size; i++)
    {
        if (Array[i] > MaxItem) {
            MaxItem = Array[i];
        }
    }
    return MaxItem;
}
 
 
int main() {
    int const  N1 = 15, N2 = 21;
    int A[N1], B[N2];
    cout << "Create A:" << ArrayCreate(A, N1) << endl;
    cout << "Create B:" << ArrayCreate(B, N2) << endl;
    cout << "Pointer on item A:" << SearchLastNegative(A, N1) << endl;
    cout << "Pointer on item B:" << SearchLastNegative(B, N2) << endl;
    cout << "MaximumItem A: " << GetMaximumItem(A, N1, SearchLastNegative(A, N1)) << endl;
    cout << "MaximumItem B:" << GetMaximumItem(B, N2, SearchLastNegative(B, N2)) << endl;
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
02.07.2020, 14:12
Ответы с готовыми решениями:

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

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

Нахождение последнего отрицательного элемента массива
Программа ищет последний отрицательного элемент массива. Не могу понять ошибки программы: 3 from F:\...\2_17.C In file included from...

3
264 / 183 / 87
Регистрация: 03.05.2020
Сообщений: 790
02.07.2020, 14:22
C++
1
2
3
4
5
6
7
8
9
10
11
int *SearchLastNegative(int Array[], int size)
{
    for (int i = size-1; i >= 0; i--)
    if (Array[i] < 0)
        {
            cout << "Last index negative number " << i << endl;
            cout << "Last  negative number " << Array[i] << endl;
            return Array+i;
       }
     return 0;
}
0
Эксперт CЭксперт С++
 Аватар для liv
5120 / 4574 / 855
Регистрация: 07.10.2015
Сообщений: 9,462
02.07.2020, 14:50
worthless1o, уточните, что делаем, если:
1) отрицательные не будут найдены вообще (можно предположить, ищем по всему массиву)
2) отрицательный элемент окажется последним элементом, т.е. не будет где искать максимальный элемент

Добавлено через 19 минут
worthless1o, смотрите, как сделал:
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 <ctime>
 
/*Создать функцию для поиска положения последнего отрицательного элемента произвольного массива целых чисел. Вернуть указатель на отрицательный элемент.
Тестовая программа:
⦁  Создать и инициализировать 2 массива A[N1], B[N2]
⦁  Найти положение отрицательного элемента массива. Полученный указатель разделяет массив на 2 части.
⦁  Определить максимальный элемент в второй  части массив
⦁  Пункты 2 и 3 выполнить для массивов A и B
 
*/
 
using namespace std;
 
void ArrayCreate(int Array[], int size)
{
    for (int i = 0; i < size; i++)
    {
        Array[i] = rand() % 41 - 20;
        cout << Array[i] << " ";
    }
}
int *SearchLastNegative(int Array[], int size)
{
    for (int i = size-1; i >= 0; i--)
    {
        if (Array[i] < 0)
        {
            cout << "Last index negative number " << i << endl;
            cout << "Last  negative number " << Array[i] << endl;
            return &Array[i];
        }
    }
    return nullptr;
}
 
int GetMaximumItem(int Array[], int size, int *ptr)
{
    int *last = &Array[size - 1];
    if (ptr == nullptr)
        ptr = Array;
    else
        ++ptr;
 
    if (ptr > last)
        return -1;
    
    int MaxItem = *ptr;
    for (++ptr; ptr <= last; ++ptr)
    {
        if (*ptr > MaxItem)
            MaxItem = *ptr;
    }
    return MaxItem;
}
 
 
int main() 
{
    srand(unsigned int(time(0)));
 
    int const  N1 = 15, N2 = 21;
    int A[N1], B[N2];
    cout << "Create A: "; 
    ArrayCreate(A, N1);
    cout << endl;
    cout << "Create B: ";
    ArrayCreate(B, N2);
    cout << endl;
 
    int *pA = SearchLastNegative(A, N1);
    cout << "Pointer on item A:" << pA << endl;
    int *pB = SearchLastNegative(B, N2);
    cout << "Pointer on item B:" << pB << endl;
 
    int max = GetMaximumItem(A, N1, pA);
    if (max >= 0)
        cout << "MaximumItem A: " << max << endl;
    else
        cout << "MaximumItem A: negative number is last" << endl;
    
    max = GetMaximumItem(B, N2, pB);
    if (max >= 0)
        cout << "MaximumItem B: " << max << endl;
    else
        cout << "MaximumItem B: negative number is last" << endl;
}
0
 Аватар для Annemesski
2673 / 1335 / 480
Регистрация: 08.11.2016
Сообщений: 3,690
02.07.2020, 15:13
1. в функции int *SearchLastNegative(int Array[], int size)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
int *SearchLastNegative(int Array[], int size)
{
    for (int i = size; i > 0; i--) // подумайте над начальным значением счетчика цикла учитывая что индексы массива нумеруются с нуля, также подумайте что даст строгое неравенство в условии продолжения цикла
    {
        if (Array[i] < 0)
        {
            cout << "Last index negative number " << i << endl;
            cout << "Last  negative number " << Array[i] << endl;
            int *ptr = &Array[i]; // зачем плодить копии, когда можно вернуть указатель прямо здесь: return &Array[i]
            return ptr;
            break; // этот break не имеет смысла - return прекратит выполнение цикла вместе с выполнением функции
        }
 
    }
    return 0;
}
2. в функции int GetMaximumItem(int Array[], int size, int *ptr)
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
int GetMaximumItem(int Array[], int size, int *ptr)
{
 
    int IndexPart = 0, MaxItem = 0;
    for (int i = size; i > 0; i--) // те же ошибки что и в предыдущей функции, впрочем:
    /*зачем повторно искать последний элемент? Этот цикл лучше бы убрать*/
    {
        if (Array[i] == *ptr)
        {
            IndexPart = i;
            break;
        }
    }
    /*-----------------------------------------------------------------------*/
 
    /*и воспользоваться арифметикой указателей*/
    MaxItem = Array[IndexPart]; // MaxItem = *ptr;
    for (int i = IndexPart; i < size; i++) // while (++ptr != Array + size)
    {
        if (Array[i] > MaxItem) { // if (*ptr > MaxItem)
            MaxItem = Array[i];
        }
    }
    return MaxItem;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
02.07.2020, 15:13
Помогаю со студенческими работами здесь

Найти номер последнего отрицательного элемента массива
# include &lt;iostream&gt; using namespace std; void main () { int i=0; int p; setlocale(LC_ALL, &quot;rus&quot;); cout&lt;&lt;&quot;Введите числа...

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

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

Номер последнего отрицательного элемента массива
procedure TForm1.Button3Click(Sender: TObject); var i,m:integer; begin m := 0; i:=n; While (i &gt;= 1) and (massiv &gt;=0) Do...

Найти номер последнего отрицательного элемента массива
1. Дан одномерный массив, задающийся генератором случайных чисел. Найти номер последнего отрицательного элемента массива. Добавлено...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
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 https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&amp;d=1772460536 Одним из. . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru