Как найти произведение отрицательных элементов массива



Высший разум

(1263700)


8 лет назад

Вся надежда на экстрасенсов. Будем дальше гадать какой язык.. .
program x;
var
 i, p: integer;
 a: array [1..10] of integer;
begin
 p := 1;
 for i := 1 to 10 do
 begin
  Write(‘a[‘, i, ‘] = ‘);
  ReadLn(a[i]);
  if a[i] < 0 then
   p := p * a[i];
 end;
 for i := 1 to 10 do
  Write(a[i], ‘ ‘);
 WriteLn;
 WriteLn(‘Proizvedenie = ‘, p);
 ReadLn;
end.

paperrose

Гуру

(4541)


8 лет назад

long mul = 1;

cout << “array elements:” << endl;
for (int i = 0; i < N; i++) {
if (arr[N] < 0) mul*=arr[N];

cout << arr[i] << “t”;

}

cout << endl << endl << “multiplication:” << endl << mul << endl;

Lance Spencer

Мыслитель

(7859)


8 лет назад

1) создаешь переменную в которой будет лежать произведение, кладешь туда 1
2) перебираешь элементы массива, внутри перебора проверяешь элемент меньше ли он нуля, если меньше – умножаешь переменную (см. выше) на этот элемент

0 / 0 / 0

Регистрация: 19.03.2015

Сообщений: 11

1

Вычислить произведение отрицательных элементов массива

19.03.2015, 10:56. Показов 9112. Ответов 12


Студворк — интернет-сервис помощи студентам

Дан массив из n элементов (вещественные числа). Вычислить: 1) произведение отрицательных элементов массива 2) сумму элементов массива, расположенных между максимальным и минимальным элементами. Упорядочить элементы по возрастанию.
срочно нужно решение, помогите кто может



0



zss

Модератор

Эксперт С++

13083 / 10360 / 6201

Регистрация: 18.12.2011

Сообщений: 27,699

19.03.2015, 11:06

2

Возьмите образец
Образцы (шаблоны) программ для типовых задач
Вам останется написать 3 функции.
Для примера – произведение

C++
1
2
3
4
5
6
7
8
double MultMinus(double* X,int n)
{
    double p=1.0;
    for(int i=0;i<n;i++)
       if(X[i]<0)
         p*=X[i];
    return p;
}



0



pavel_pushok

30 / 30 / 9

Регистрация: 25.12.2014

Сообщений: 115

19.03.2015, 11:14

3

1 пункт

C++
1
2
3
4
5
const int arr_size = 10;
int arr[arr_size];
int sum = 1;
for(int i = 0; i < arr_size; i++) 
If (arr[i] < 0) sum = sum * arr[i];



0



ForEveR

В астрале

Эксперт С++

8048 / 4805 / 655

Регистрация: 24.06.2010

Сообщений: 10,562

19.03.2015, 11:14

4

Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

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
#include <iostream>
#include <vector>
#include <algorithm>
#include <numeric>
#include <iterator>
 
int main()
{
   std::vector<double> v = {1.0, -2.0, 3.0, 2.0, 5.0, -1.0, -0.5};
   const auto mult = std::accumulate(v.begin(), v.end(), 1., [](double sum, double value) 
   { 
      return value < 0 ? sum * value : sum;
   });
   std::cout << "Mult of negatives: " << mult << std::endl;
   const auto minmax = std::minmax_element(v.begin(), v.end());
   const auto min_first = minmax.first < minmax.second;
   const auto begin = min_first ? std::next(minmax.first) : std::next(minmax.second);
   const auto end = min_first ? minmax.second : minmax.first;
   const auto sum = std::accumulate
   (
      begin, end, 0.
   );
   std::cout << "Sum between min and max: " << sum << std::endl;
   std::sort(v.begin(), v.end());
   std::copy(v.begin(), v.end(), std::ostream_iterator<int>(std::cout, " "));
   std::cout << std::endl;
}



0



creonis

0 / 0 / 0

Регистрация: 19.03.2015

Сообщений: 11

19.03.2015, 13:14

 [ТС]

5

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//одномерный массив
#include <iostream> 
#include <stdlib.h>
#include <time.h>
using namespace std; 
int main() 
{setlocale (LC_ALL,"Russian");
double x=1, sum=0;
int n,i;
cout<<"Введите размерность массива "; cin>>n;
cout<<"Сгенерированный массивn";
double*a=new double[n];
srand ((unsigned int) time (0));
for (i=0; i<n; i++) {a[i]=rand() %20-10.0; cout<<a[i]<<" "<<endl; if (a[i]<0) x*=a[i];}
cout<<"Произведение отрицательных элементов равно "<<x<<endl;

сделал первую часть, можете вторую сделать по этой?



0



FunkyShits

6 / 6 / 3

Регистрация: 15.12.2009

Сообщений: 39

19.03.2015, 16:39

6

Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

C++ (Qt)
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
#include <iostream> 
#include <stdlib.h>
#include <time.h>
 
using namespace std;
 
int main()
{
    setlocale(LC_ALL, "Russian");
    double x = 1.0, max = 0.0, min = 99999.9999,sum=0.0;
    int n, i, j,p_max, p_min,b;
    cout << "Введите размерность массива "; cin >> n;
    cout << "Сгенерированный массивn";
    double*a = new double[n];
    for (i = 0; i < n; i++) 
    { 
        a[i] = rand() % 41 - 20;
        cout << a[i] << " " << endl; 
        if (a[i] < 0) x *= a[i]; 
    }
    cout << "Произведение отрицательных элементов равно " << x << endl;
 
    for (i = 0; i < n; i++)
    {
        if (a[i]>max)
        {
            max = a[i];
            p_max = i;
        }
    }
    for (i = 0; i < n; i++)
    {
        if (a[i] < min)
        {
            min = a[i];
            p_min = i;
        }
    }
    //cout << "max: " << max << " " << "min: "<< min;
    if (p_max > p_min)
    {
        for (i = p_min; i < p_max; i++)
            sum = sum+a[i];
    }
    else
    {
        for (i = p_max; i < p_min; i++)
            sum = sum + a[i];
    }
    cout << "Сумма элементов,расположенных между максимальным и минимальным элементом: " << sum << endl;
    
    cout << "Отсортированный массив: ";
    for (j = 1; j < n; j++)
    for (i = 1; i < n-j; i++)
    if (a[i]>a[i + 1])
    {
        b = a[i];
        a[i] = a[i + 1];
        a[i + 1] = b;
    }
    for (i = 0; i < n; i++)
        cout << a[i] << " ";
 
    system("pause");
}



0



0 / 0 / 0

Регистрация: 19.03.2015

Сообщений: 11

19.03.2015, 19:46

 [ТС]

7

что-то явно не так после строчки cout<<“max: “<<max<<” ” <<“min: “<<min<<endl;

Миниатюры

Вычислить произведение отрицательных элементов массива
 



0



0 / 0 / 0

Регистрация: 19.03.2015

Сообщений: 11

19.03.2015, 19:59

 [ТС]

8

да и вы в коде забыли srand ((unsigned int) time (0));, а так же вместо a[i]=rand() %20-10.0; взяли a[i] = rand() % 41 – 20;



0



6 / 6 / 3

Регистрация: 15.12.2009

Сообщений: 39

19.03.2015, 22:44

9

creonis,
После вывода минимального и максимального элементов, осуществляется суммирование чисел между максимальным и минимальным с их сравнением на случай, если один окажется больше другого.
Далее пузырьковая сортировка.

да и вы в коде забыли srand ((unsigned int) time (0));, а так же вместо a[i]=rand() %20-10.0; взяли a[i] = rand() % 41 – 20;

не вижу смысла в строчке: srand ((unsigned int) time (0))
a[i]=rand() %20-10.0 – прости изменил границы рандома.



0



creonis

0 / 0 / 0

Регистрация: 19.03.2015

Сообщений: 11

20.03.2015, 11:36

 [ТС]

10

но ведь на скрине сумма чисел, находящихся между макс и мин не равна -17. там должно быть -15
а с rand я уже разобрался

Добавлено через 12 часов 23 минуты

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
//одномерный массив
#include <iostream> 
#include <stdlib.h>
#include <time.h>
#include <conio.h>
using namespace std; 
int main() 
{setlocale (LC_ALL,"Russian");
int n,i,j,b,x=1,sum=0,index_max,index_min,min_value=0,max_value=0;
cout<<"Введите размерность массива "; cin>>n;
cout<<endl;
cout<<"Сгенерированный массив: ";
int*a=new int[n];
srand ((unsigned int) time (0));
for (i=0; i<n; i++) {a[i]=rand()%20-10; cout<<a[i]<<" "; if (a[i]<0) x*=a[i];}
cout<<endl<<endl;
cout<<"1.Произведение отрицательных элементов: "<<x<<endl<<endl;
for (i=0; i<n; i++) {if (a[i]>max_value) {max_value=a[i]; index_max=i;} if (a[i]<min_value) {min_value=a[i]; index_min=i;}}
cout<<"Элемент с минимальным значением: "<<min_value<<"n";
cout<<"Элемент с максимальным значением: "<<max_value<<"n"<<endl;
if(index_min<index_max) for(i=index_min; i<index_max; i++) sum+=a[i];//начало
else for(i=index_max; i<index_min; i++) sum+=a[i];//конец
cout<<"2.Сумма элементов, расположенных между максимальным и минимальным элементом: "<<sum<<endl<<endl;
cout<<"Отсортированный массив: ";
for (j=1; j<n; j++)
for (i=0; i<n-j; i++) if (a[i]>a[i+1]) {b=a[i]; a[i]=a[i+1]; a[i+1]=b;}
for (i=0; i<n; i++) cout<<a[i]<<" ";
cout<<endl<<endl;
return 0;}

посмотрите, почему во 2 пункте он как-то не так считает сумму?



0



FunkyShits

6 / 6 / 3

Регистрация: 15.12.2009

Сообщений: 39

20.03.2015, 15:17

11

C++ (Qt)
1
2
if(index_min<index_max) for(i=index_min; i<=index_max; i++) sum+=a[i];//начало
else for(i=index_max; i<=index_min; i++) sum+=a[i];//конец



0



0 / 0 / 0

Регистрация: 19.03.2015

Сообщений: 11

20.03.2015, 20:35

 [ТС]

12

я уже теряюсь
ну должно же быть -2

Миниатюры

Вычислить произведение отрицательных элементов массива
 



0



creonis

0 / 0 / 0

Регистрация: 19.03.2015

Сообщений: 11

20.03.2015, 21:32

 [ТС]

13

все, понял в чем проблема, сделал. вот код, если вдруг кому понадобится:

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
//одномерный массив
#include <iostream> 
#include <stdlib.h>
#include <time.h>
#include <conio.h>
using namespace std; 
int main() 
{setlocale (LC_ALL,"Russian");
int n,i,j,b,x=1,sum=0,index_max,index_min,min_value=0,max_value=0;
cout<<"Введите размерность массива "; cin>>n;
cout<<endl;
cout<<"Сгенерированный массив: ";
int*a=new int[n];
srand ((unsigned int) time (0));
for (i=0; i<n; i++) {a[i]=rand()%20-10; cout<<a[i]<<" "; if (a[i]<0) x*=a[i];}
cout<<endl<<endl;
cout<<"1.Произведение отрицательных элементов: "<<x<<endl<<endl;
for (i=0; i<n; i++) {if (a[i]>max_value) {max_value=a[i]; index_max=i;} if (a[i]<min_value) {min_value=a[i]; index_min=i;}}
cout<<"Элемент с максимальным значением: "<<max_value<<"n";
cout<<"Элемент с минимальным значением: "<<min_value<<"n"<<endl;
if (index_max<index_min) for(i=index_max+1; i<index_min; i++) sum+=a[i];
else for(i=index_min+1; i<index_max; i++) sum+=a[i];
cout<<"2.Сумма элементов, расположенных между максимальным и минимальным элементом: "<<sum<<endl<<endl;
cout<<"Отсортированный массив: ";
for (j=1; j<n; j++)
for (i=0; i<n-j; i++) if (a[i]>a[i+1]) {b=a[i]; a[i]=a[i+1]; a[i+1]=b;}
for (i=0; i<n; i++) cout<<a[i]<<" ";
cout<<endl<<endl;
return 0;}



0



using System;
using System.Collections.Generic;
using System.Linq;
 
namespace ConsoleApp2
{
    class Program
    {
        static void Main(string[] args)
        {
            var size = 10;
            var array = new List<int>();
 
            Console.WriteLine("Ввести массив А из 10 элементов,найти произведение отрицательных nэлементов и вывести на экран");
            Console.WriteLine("Введите значения с клавиатуры, незабудьте ввести отрицательные числа!");
 
            while (size-- > 0) array.Add(int.Parse(Console.ReadLine()));
 
            Console.WriteLine("Исходный массив: {0}", string.Join(" ", array));
            Console.WriteLine("Произведение отрицательных чисел равно: {0}", array.Where(x => x < 0).Aggregate((x, y) => x * y));
 
            Console.ReadKey();
        }
    }
}

5.4.3 Вычисление произведения элементов массива

Дан массив X, состоящий из N элементов. Найти произведение элементов этого массива. Решение этой задачи сводится к тому, что значение переменной P, в которую предварительно была записана единица, последовательно умножается на значение i–го элемента массива. Блок-схема алгоритма приведена на рис. 5.5.

Соответствующий фрагмент программы будет иметь вид:

for (P=1, i =0; i<N; i++)
	P*=X [ i ];
cout<<" P = "<<P<<" n ";

Задача 5.1. Задан массив целых чисел. Найти сумму простых чисел и произведение отрицательных элементов массива.

Алгоритм решения задачи состоит из следующих этапов.

  1. Вводим массив X[N].
  2. Для вычисления суммы в переменную S записываем значение 0, для вычисления произведения в переменную P записываем 1.
  3. В цикле (i изменяется от 0 до N-1 с шагом 1) перебираем все элементы массива X, если очередной элемент массива является простым числом, добавляем его к сумме, а если очередной элемент массива отрицателен, то умножаем его на P.
  4. Выводим на экран значение суммы и произведения.

Вычисление произведения элементов массива

Рис.
5.5.
Вычисление произведения элементов массива

Блок-схема решения задачи представлена на рис. 5.6. Для решения задачи применим функцию (prostoe) проверки, является ли число простым. Текст программы с подробными комментариями приведён далее.

#include <iostream>
using namespace std;
//Текст функции prostoe.
bool prostoe ( int N)
{
	int i;
	bool pr;
	if (N<2) pr=false;
	else
	for ( pr=true, i =2; i<=N/ 2; i++)
	if (N%i ==0)
	{
		pr=false;
		break;
	}
	return pr;
}
int main ( )
{
	int *X, i,N, S, P;
	cout<<"Введите размер массива "; cin>>N; //Ввод размерности массива.
	X=new int [N ]; //Выделение памяти для хранения динамического массива X.
	cout<<"Ведите массив X n "; //Ввод массива X.
	for ( i =0; i<N; i++)
	{ cout<<" X ( "<<i<<" ) = "; cin>>X [ i ]; }
		for (P=1,S= i =0; i<N; i++) //В цикле перебираем все элементы массива
		{
			//Если очередной элемент массива — простое число, добавляем его к сумме.
			if ( prostoe (X [ i ] ) ) S+=X [ i ];
			//Если очередной элемент массива отрицателен, умножаем его на P.
			if (X [ i ] <0) P*=X [ i ];
		}
	cout << " S = " <<S<<" t P = "<<P<< endl; 	//Вывод S и P на экран.
	delete [ ] X; //Освобождение занимаемой массивом X памяти.
	return 0;
}

Блок-схема алгоритма решения задачи 5.1

Рис.
5.6.
Блок-схема алгоритма решения задачи 5.1

Результаты работы программы представлены ниже.

Введите размер массива 10
Ведите массив Х
X(0)=-7
X(1)=-9
X(2)=5
X(3)=7
X(4)=2
X(5)=4
X(6)=6
X(7)=8
X(8)=10
X(9)=12
S=14 P=63

Задача 5.2. Дан массив A, состоящий из k целых положительных чисел. Записать все чётные по значению элементы массива A в массив B.

На рис. 5.7 представлен фрагмент алгоритма решения данной задачи. Здесь индексы массива A хранятся в переменной i, а для номеров массива B зарезервирована переменная m. Операция, выполняемая в блоке 1, означает, что в массиве A может не быть искомых элементов. Далее организован цикл (блок 2), с помощью которого можно обращаться к элементам массива A. Если условие в блоке 3 выполняется, то переменная m увеличивается на единицу, а значение соответствующего элемента массива A записывается в массив В под номером m (блок 4). Условный блок 5 необходим для того, чтобы проверить, выполнилось ли хотя бы раз условие поиска (блок 2). Если массив B сформирован, то он выводится на экран (блоки 6, 7), в противном случае выдаётся соответствующее сообщение (блок 8).

Приведённый ниже фрагмент программы реализует описанный алгоритм:

for (m=-1, i =0; i<k; i++)
{
	if (A [ i ]%2==0) //Если элемент чётный, то
	{
		m++; //увеличить значение индекса массива В
		B [m]=A [ i ]; //и записать элемент в массив В.
	}
}
if (m>-1) //Если чётные элементы найдены, то распечатать сформированный массив.
	for ( i =0; i<=m; cout<<B [ i ]<<" t ", i++);
else //иначе, выдать сообщение,
	cout<<"Массив B не сформирован!"<<endl;

heyide215

heyide215

Вопрос по информатике:

Помогите пожалуйста с информатикой, буду благодарна за помощь. Написать программу для решения задач на языке Quick Basic.
Найти произведение всех отрицательных элементов массива В(15).

Трудности с пониманием предмета? Готовишься к экзаменам, ОГЭ или ЕГЭ?

Воспользуйся формой подбора репетитора и занимайся онлайн. Пробный урок – бесплатно!

Ответы и объяснения 1

zomsougr965

zomsougr965

Будем считать, что массив В уже в памяти компьютера. Тогда

cls
result = 1
for i=0 to 15
       if b(i)<0 then result = result * b(i)
next
print “Произведение отрицательных членов массива В равно”
print result

Знаете ответ? Поделитесь им!

Гость

Гость ?

Как написать хороший ответ?

Как написать хороший ответ?

Чтобы добавить хороший ответ необходимо:

  • Отвечать достоверно на те вопросы, на которые знаете
    правильный ответ;
  • Писать подробно, чтобы ответ был исчерпывающий и не
    побуждал на дополнительные вопросы к нему;
  • Писать без грамматических, орфографических и
    пунктуационных ошибок.

Этого делать не стоит:

  • Копировать ответы со сторонних ресурсов. Хорошо ценятся
    уникальные и личные объяснения;
  • Отвечать не по сути: «Подумай сам(а)», «Легкотня», «Не
    знаю» и так далее;
  • Использовать мат – это неуважительно по отношению к
    пользователям;
  • Писать в ВЕРХНЕМ РЕГИСТРЕ.

Есть сомнения?

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

Трудности с домашними заданиями? Не стесняйтесь попросить о помощи –
смело задавайте вопросы!

Информатика — наука о методах и процессах сбора, хранения, обработки, передачи, анализа и оценки информации с применением компьютерных технологий, обеспечивающих возможность её использования для принятия решений.

Добавить комментарий