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

В одномерном массиве найти наибольшее отрицательное значение

21.11.2019, 19:47. Показов 2816. Ответов 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
#include <iostream>
 
 
using namespace std;
int main(int argc, char** argv)
{
    int* mas, n, sum, min ; 
    sum = 0;
 
    setlocale(0, "rus");
    cout << "введите размер массива:";
    
    cin >> n;
    
    
    mas = new int[n];
    for (int i = 0; i < n; i++)
    {
        cout << "mas[" << i << "]=";
        cin >> mas[i];
        min = mas[i];
    }
    for (int i = 0; i < n; i++)
    {
        if (mas[i] % 2 == 0)
            sum += mas[i];
    }
    int Array[n];   // n - тут я так и не понял как вклинить переменную , разве что поменять на число , а так же начиная от сюда в ответ выводит как я понял максимальное отрицательное число для этого массива не смотря на числа которые якобы вводить пользователь .
    int min2 = Array[0];
    for (int i = 0; i <= n; i++) {
 
        if (Array[i] < 0 && Array[i] > min2) {
 
            min2 = Array[i];
        }
 
 
    }
    
    cout << "сумма четных элементов = " << sum << endl;
    cout << "наибольшее из отрицательных чисел массива"  << min2<<  endl;
    system("pause");
    return 0;
 
 
}
//возможно я вообще неправильно написал эту часть кода
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
21.11.2019, 19:47
Ответы с готовыми решениями:

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

Найти наибольшее число в одномерном массиве
Вроде простой код, но что-то идёт не так: выдаёт ошибку. Уже читал другие темы, но код там идёт такой же. Что делать не знаю:/ ...

В одномерном массиве состоящий из Н чисел целых элементов найти сумму индексов отрицательное элементов
В одномерном массиве состоящий из Н чисел целых элементов найти сумму индексов отрицательное элементов

3
Модератор
Эксперт С++
 Аватар для zss
13769 / 10962 / 6491
Регистрация: 18.12.2011
Сообщений: 29,236
21.11.2019, 20:10
Лучший ответ Сообщение было отмечено Vvas как решение

Решение

массив Array не нужен
C++
1
2
3
4
5
6
7
int min2 = 0;
    for (int i = 0; i < n; i++) {      // <    а не   <=
         if (mas[i] < 0 && (min2==0 || mas[i] > min2) ) {
               min2 = mas[i];
        }
    }
    delete[] mas;// не забывайте освобождать выделенную память
1
0 / 0 / 0
Регистрация: 21.11.2019
Сообщений: 5
21.11.2019, 20:46  [ТС]
Большое спасибо , я сначала пробовал без него но из-за неправильного условия , было тоже самое , и пошел по дебрям литературы как можно решить подобные проблемы .
0
El. Psy. Congroo.
 Аватар для Mightsoul
110 / 92 / 32
Регистрация: 09.01.2018
Сообщений: 344
21.11.2019, 22:27
1. утечка памяти. Для вашего кода это не критично, поскольку всякое выделенное виртуальное адресное пространство освобождается в конце программы, но нужно понимать, что в более менее серьёзных проектах, терять доступ к данным кучи - непростительно, если вы не понимаете о чём я говорю, попробуйте скомпилировать и запустить следующий фрагмент кода:
C++
1
while (true) new double;
предупреждаю, что программа затребует у процессора огромное количество страниц, чтобы избежать утечки памяти запомните правило: "Каждому new свой delete, а malloc свой free.".

2.
C++
1
int Array[n];
это запрещено стандартом. Попытаюсь объяснить максимально развёрнуто. После того, как вы осуществляете вызов функции в высокоуровневом языке, предположим:
C++
1
function(10,20);
происходит передача фактических параметров, через что и каким образом - определяется программным бинарным интерфейсом (ABI), конкретно, соглашением о вызове, регламентирующий, в частности, передачу фактических параметров: через стек или регистры, порядок их передачи: прямой или обратный, возврат данных, ответственность за сохранность регистров и очистку стека: вызывающая или вызываемая функция и по мелочи, передачу указателя this. Предположим, что используется cdecl (передача фактических параметров через стек в обратном порядке):
Assembler
1
2
push dword 20
push dword 10
после чего, процессор обработает код команды, соответствующий мнемонике
Assembler
1
call
этот опкод, в сущности, делает две вещи: помещает в стек вызовов адрес возврата - адрес следующей после вызова инструкции в сегменте кода и осуществляет безусловный переход по сигнатурной метке (в c++, для реализации полиморфизма (общего интерфейса для разных типов данных), используется декорирование имён, представьте перегрузку функций, у них идентичное высокоуровневое имя, но разная низкоуровневая сигнатура (полное имя), это необходимо для того, чтобы сократить количество используемых идентификаторов, а также для того, чтобы делегировать трансляцию сигнатуры, непосредственно, компилятору, таким образом, прототип функции:
C++
1
function(int,int);
будет иметь следующую сигнатуру: _Z8functionii, именно по ней и осуществляется переход, дабы узнать сигнатуру достаточно обратится к таблице символических имён, позволяющая компоновщику произвести связывание имени с определением).

далее идёт пролог функции, состоящий из двух строк:
Assembler
1
2
push bp
mov bp,sp
суть пролога заключается в том, чтобы организовать доступ к данным, для этого сохраняется адрес прошлого кадра стека и в базовый регистр помещается адрес вершины стека. Для чего? Для того, чтобы используя смещение относительно базы, обращаться к данным. Таким образом, для доступа к первому параметру, используется:
Assembler
1
mov ax,[bp+8]
После пролога, если это необходимо, происходит расширение стека, в моём случае, через команду:
Assembler
1
sub
поскольку вершина стека устремлена вниз к сегменту кучи, мы перешли к той части, ради которой я всё это расписал: компилятор производит расширение локального хранилища главной функции на 32 байта (во всяком случае, у меня именно так), если зайти за границы этого хранилища, например, произведя переполнение буфера, становится доступным - перезапись адреса возврата, позволяющая, как пример, вызвать другую функцию или заставить выполнить shell-код, дабы получить удалённый доступ к серверу (на этом основан эксплойт - heartbleed, червь Морриса и многие другие), но если об этом не знать, то наиболее вероятным результатом станет - ошибка сегментации, поскольку процесс попытается обратится к данным, расположенным за пределами его виртуального адресного пространства, центральный процессор сгенерирует исключение, а операционная система его обработает, мораль сей басни такова: если размер массива определяется на этапе выполнения - использовать кучу, иначе, по-усмотрению. В конце концов, базовый регистр восстановит адрес прошлого кадра стека, инструкцией:
Assembler
1
ret
снимется адрес возврата, помещённый в регистр команд, вернётся управление и произойдёт очистка стека. Надеюсь, никто голову не сломал, если ошибся, прошу подправить.

Добавлено через 5 минут
P.S. в той части, где говорилось про передачу параметров, я забыл добавить, что по младшему адресу располагается наименее значимый байт - lsb, поскольку используется обратный порядок следования байтов, но это, наверное, здесь и не важно.

Добавлено через 29 секунд
Update: лучше бы я этого не писал.

Добавлено через 17 минут
премия "Самый запутанный ответ в истории Cyberforum" достаётся мне.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
21.11.2019, 22:27
Помогаю со студенческими работами здесь

Найти максимальное значение в одномерном массиве
Здравствуйте! Необходимо перевести этот код из Pascal в C++. uses crt; var n, i,s ,m,j,k:...

Найти максимальное значение в одномерном массиве
int m&gt;max) { Max = m ; } } Std::cout &lt;&lt;max; Здравствуйте, объясните код построчно Что происходит. Где задается массив и...

В одномерном массиве найти максимальное значение
Доброго времени суток. Дана задачка : В одномерном массиве найти максимальное значение. Вводим массив и находим макс. значение.

Как найти среднее значение в одномерном массиве?
Тут массив из целых чисел. Среднее значение - это сумма всех элементов, деленная на кол-во элементов? А если сред. значение не является...

Найти наибольшее значение курса доллара в массиве
Помогите решить задачу. Курс доллара в течение года менялся в диапазоне от 28руб. до 30руб. Найти наибольшее значение курса доллара. В...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru