Форум программистов, компьютерный форум, киберфорум
Наши страницы
C++ Builder
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
antonkhizhenok
0 / 0 / 0
Регистрация: 30.11.2017
Сообщений: 9
1

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

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

Найти произведение элементов массива, расположенных после максимального по модулю элемента.
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.06.2018, 13:10
Ответы с готовыми решениями:

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

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

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

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

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

10
volvo
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
26149 / 17526 / 6950
Регистрация: 22.10.2011
Сообщений: 30,864
Записей в блоге: 6
25.06.2018, 13:19 2
Ну и при чем тут Билдер? Обычный цикл, обычный перебор элементов массива. Ничего специфического для Билдера...
0
Electroflower
Shiningemerald
375 / 108 / 22
Регистрация: 05.01.2012
Сообщений: 667
Записей в блоге: 1
25.06.2018, 15:15 3
1)Объявляешь массив
2)В цикле берешь модуль каждого числа, записанного в массив, сравнивая и записывая в переменную max, если оно больше max, в переменную index записываешь индекс ячейки где хранится максимальное
3) теперь во втором цикле начиная с i = index перемножаешь элементы уже без модуля

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

Не по теме:

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

0
Electroflower
Shiningemerald
375 / 108 / 22
Регистрация: 05.01.2012
Сообщений: 667
Записей в блоге: 1
25.06.2018, 17:33 5
Лучший ответ Сообщение было отмечено 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
289 / 201 / 88
Регистрация: 22.02.2018
Сообщений: 605
Записей в блоге: 2
26.06.2018, 08:29 6
Цитата Сообщение от 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
Практикантроп
4289 / 2305 / 401
Регистрация: 23.09.2011
Сообщений: 4,928
26.06.2018, 08:32 7
Цитата Сообщение от TrollHammer Посмотреть сообщение
я проверку бы сделал, что index+1<masslength
А к чему? На начальном этапе условие не выполняется, - выход из цикла.
0
TrollHammer
289 / 201 / 88
Регистрация: 22.02.2018
Сообщений: 605
Записей в блоге: 2
26.06.2018, 08:43 8
Цитата Сообщение от nick42 Посмотреть сообщение
На начальном этапе условие не выполняется, - выход из цикла.
Тестово попробовал, загнал в конец массива максимальное число и как результат, получил 0, а должна быть в таком случае 1? Почему?
0
Electroflower
Shiningemerald
375 / 108 / 22
Регистрация: 05.01.2012
Сообщений: 667
Записей в блоге: 1
26.06.2018, 08:48 9
TrollHammer, про очистку верно, да

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

C++
1
delete mas;
0
TrollHammer
289 / 201 / 88
Регистрация: 22.02.2018
Сообщений: 605
Записей в блоге: 2
26.06.2018, 08:51 10
Цитата Сообщение от Electroflower Посмотреть сообщение
delete mas;
Для освобождения динамически размещенного массива необходимо использовать следующую форму оператора delete:
delete [] переменная_указатель - delete [] mas;
1
Electroflower
Shiningemerald
375 / 108 / 22
Регистрация: 05.01.2012
Сообщений: 667
Записей в блоге: 1
26.06.2018, 09:21 11
TrollHammer, верно...блин, кто поспешит...
нужно добавить

C++
1
delete [] mas;
запускает деструктор для каждого элемента массива, иначе undefined behaviour обеспечен, я помню как вы меня учили в какой-то теме очистке памяти)
0
26.06.2018, 09:21
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.06.2018, 09:21

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

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

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


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru