Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/15: Рейтинг темы: голосов - 15, средняя оценка - 4.73
0 / 0 / 0
Регистрация: 30.11.2017
Сообщений: 9

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

25.06.2018, 13:10. Показов 3134. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Найти произведение элементов массива, расположенных после максимального по модулю элемента.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
25.06.2018, 13:10
Ответы с готовыми решениями:

Вычислить произведение элементов массива, расположенных после максимального по модулю элемента
Вообщем вот задачка: Произведение элементов массива, расположенных после максимального по модулю элемента. Упорядочение массив таким...

Произведение элементов массива, расположенных между максимальным по модулю и минимальным по модулю элементами
Здравствуйте, помогите мне пожалуйста реализовать данный пример. Произведение элементов массива, расположенных между максимальным по...

Вычислить сумму модулей элементов массива, расположенных после минимального по модулю элемента - C++
Дан массив из N элементов (вещественные числа). Вычислить: 1) количество отрицательных элементов массива; 2) сумму модулей эле-ментов...

10
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33378 / 21502 / 8236
Регистрация: 22.10.2011
Сообщений: 36,899
Записей в блоге: 11
25.06.2018, 13:19
Ну и при чем тут Билдер? Обычный цикл, обычный перебор элементов массива. Ничего специфического для Билдера...
0
Shiningemerald
 Аватар для Electroflower
384 / 117 / 22
Регистрация: 05.01.2012
Сообщений: 951
25.06.2018, 15:15
1)Объявляешь массив
2)В цикле берешь модуль каждого числа, записанного в массив, сравнивая и записывая в переменную max, если оно больше max, в переменную index записываешь индекс ячейки где хранится максимальное
3) теперь во втором цикле начиная с i = index перемножаешь элементы уже без модуля

Ну такое, написанная на коленке инструкция, но на мысли наведет)
1
25.06.2018, 15:37

Не по теме:

Цитата Сообщение от Electroflower Посмотреть сообщение
но на мысли наведет)
Эх, мечты. мечты... :D

0
Shiningemerald
 Аватар для Electroflower
384 / 117 / 22
Регистрация: 05.01.2012
Сообщений: 951
25.06.2018, 17:33
Лучший ответ Сообщение было отмечено antonkhizhenok как решение

Решение

Цитата Сообщение от D1973 Посмотреть сообщение
Эх, мечты. мечты...
.....

Добавлено через 41 секунду
Могу, конечно, написать быстренько, просто на работе сижу)

Добавлено через 32 минуты
Вот что получилось, комменты дольше писала чем код...
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
int masslength = StrToInt(Edit1->Text); //берем количество символов, которое задается в Edit1 на форме, как видно
int *mas = new int [masslength]; //тут объявляем массив чисел int размером с вышеобъявленный masslength
randomize(); 
 
//далее ниже заполняем массив рандомными числами в диапазоне -10..10 и выводим для наглядности в Edit2
for (int i = 0; i < masslength; i++) {
                                      mas[i] = (rand()%21)-10;
                                      Edit2->Text=Edit2->Text +' ' +mas[i];
                                      }
 
int max = abs(mas[0]); //в переменную  max записываем первый элемент массива
int index = 0; //в переменную  index записываем индекс первого элемента массива
 
//далее перебираем модули всех элементов массива, сравнивая с максимумом и если попадается что-то большее чем ранее объявленный максимум, то max переписываем, соответственно и index переписываем и выводим для наглядности все в Edit-ы 
for (int i = 0; i < masslength; i++) {
                                      if (abs(mas[i]) > max) {
                                                         max = abs(mas[i]);
                                                         index = i;
                                                         }
                                      Edit3->Text  =   max;
                                      Edit4->Text  =   index;
                                      }
int multiplication = 1; //объявляем переменную в которую запишется конечный резалт умножения
 
//в цикле ниже начиная с элемента стоящего  после максимального по модулю и до конца массива все перемножаем 
for (int i = index+1; i < masslength; i++) {
                                            multiplication = multiplication* mas[i];
                                            Edit5->Text  = multiplication;
                                           }
Добавлено через 12 минут
В общем все это можно вставить в батон, я так и сделала
Вот так:
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
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Edit2->Clear();
int masslength = StrToInt(Edit1->Text);
int *mas = new int [masslength];
//randomize();
for (int i = 0; i < masslength; i++) {
                                      mas[i] = (rand()%21)-10;
                                      Edit2->Text=Edit2->Text +' ' +mas[i];
                                      }
int max = abs(mas[0]);
int index = 0;
for (int i = 0; i < masslength; i++) {
                                      if (abs(mas[i]) > max) {
                                                         max = abs(mas[i]);
                                                         index = i;
                                                         }
                                      Edit3->Text  =   max;
                                      Edit4->Text  =   index;
                                      }
int multiplication = 1;
for (int i = index+1; i < masslength; i++) {
                                            multiplication = multiplication* mas[i];
                                            Edit5->Text  = multiplication;
                                           }
}
Соответственно на форме Button1, Edit1, Edit2, Edit3, Edit4, Edit5, не забудьте все подписать и вообще это задача на 10 минут, посидите, подумайте в следующий раз над задачей и получите кайф от результата.

Добавлено через 16 минут
Единственное, в моей программе, если попадается два одинаковых максимальных числа, например -6 -2 10 -2 10 2 -4 6 3 -1.
Тут две десятки, так вот у меня прога берет первую 10ку как максимальную и соответственно перемножает все что после нее стоит. Чтобы избежать этого, нужно в цикле где ищется max поставить вместо знака > знак >=, тогда будет брать уже следующую 10ку и с нее перемножать.
Вот так:
C++
1
2
3
4
5
6
7
8
for (int i = 0; i < masslength; i++) {
                                      if (abs(mas[i]) >= max) {
                                                         max = abs(mas[i]);
                                                         index = i;
                                                         }
                                      Edit3->Text  =   max;
                                      Edit4->Text  =   index;
                                      }
1
 Аватар для TrollHammer
1216 / 709 / 336
Регистрация: 22.02.2018
Сообщений: 2,095
Записей в блоге: 2
26.06.2018, 08:29
Цитата Сообщение от Electroflower Посмотреть сообщение
int *mas = new int [masslength];
а память почистить не надо после использования?

Добавлено через 3 минуты
Цитата Сообщение от Electroflower Посмотреть сообщение
for (int i = index+1; i < masslength; i++) {
* * * * * * * * * * * * * * * * * * * * * * multiplication = multiplication* mas[i];
* * * * * * * * * * * * * * * * * * * * * * Edit5->Text *= multiplication;
* * * * * * * * * * * * * * * * * * * * * *}
А тут бы я проверку бы сделал, что index+1<masslength
1
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
26.06.2018, 08:32
Цитата Сообщение от TrollHammer Посмотреть сообщение
я проверку бы сделал, что index+1<masslength
А к чему? На начальном этапе условие не выполняется, - выход из цикла.
0
 Аватар для TrollHammer
1216 / 709 / 336
Регистрация: 22.02.2018
Сообщений: 2,095
Записей в блоге: 2
26.06.2018, 08:43
Цитата Сообщение от nick42 Посмотреть сообщение
На начальном этапе условие не выполняется, - выход из цикла.
Тестово попробовал, загнал в конец массива максимальное число и как результат, получил 0, а должна быть в таком случае 1? Почему?
0
Shiningemerald
 Аватар для Electroflower
384 / 117 / 22
Регистрация: 05.01.2012
Сообщений: 951
26.06.2018, 08:48
TrollHammer, про очистку верно, да

в конце нужно добавить

C++
1
delete mas;
0
 Аватар для TrollHammer
1216 / 709 / 336
Регистрация: 22.02.2018
Сообщений: 2,095
Записей в блоге: 2
26.06.2018, 08:51
Цитата Сообщение от Electroflower Посмотреть сообщение
delete mas;
Для освобождения динамически размещенного массива необходимо использовать следующую форму оператора delete:
delete [] переменная_указатель - delete [] mas;
1
Shiningemerald
 Аватар для Electroflower
384 / 117 / 22
Регистрация: 05.01.2012
Сообщений: 951
26.06.2018, 09:21
TrollHammer, верно...блин, кто поспешит...
нужно добавить

C++
1
delete [] mas;
запускает деструктор для каждого элемента массива, иначе undefined behaviour обеспечен, я помню как вы меня учили в какой-то теме очистке памяти)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
26.06.2018, 09:21
Помогаю со студенческими работами здесь

Найти сумму модулей элементов массива, расположенных после первого отрицательного элемента
Сумму модулей элементов массива, расположенных после первого отрицательного элемента. -&gt; это сделано. Также при вводе исключительно...

Найти сумму модулей элементов массива, расположенных после первого элемента, равного нулю
Народ помогите пж! Сумму модулей элементов массива, расположенных после первого элемента, равного нулю.

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

Сумма модулей элементов массива, после наименьшего по модулю элемента
Добрый день. Возникла проблема с решением задачки. Суть в том что в массиве нужно определить наименьший элемент по модулю и после этого...

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


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru