На фотографии ручкой обведено
Вот пример кода :
#include <iostream>
#include<stdio.h>
#include <windows.h>
#define i0 6
#define j0 5
using namespace std;
int main()
{
float a[i0][j0];
float b[j0];
int i, j;
SetConsoleOutputCP(1251);
SetConsoleCP(1251);
cout << "nВведіть елементи масиву Аn";
for (i = 0;i<i0;i++)
for (j = 0;j<j0;j++)
{
printf(" Введіть A[%i,%i]= n", i, j);
cin >> a[i][j];
}
for (i = 0;i<i0;i++)
{
b[i] = 1.0;
for (j = 0;j<j0;j++)
{
if (a[i][j] != 0) b[i] = b[i] * a[i][j];
}
printf("b[%i]=%fn", i, b[i]);
}
return 1;
}
Harry
214k15 золотых знаков117 серебряных знаков229 бронзовых знаков
задан 28 окт 2021 в 9:28
1
Диагонали обходятся одним циклом, не вложенным…
double p = 1;
for(int i = 0; i < 6; ++i)
{
if (a[i][i] != 0) p *= a[i][i];
if (a[i][5-i] != 0) p *= a[i][5-i];
}
ответ дан 28 окт 2021 в 9:33
HarryHarry
214k15 золотых знаков117 серебряных знаков229 бронзовых знаков
3
Формулы, по которым вычисляется
произведение элементов массива,
аналогичны формулам вычисления сумм:
, (2.4)
. (2.5)
Поэтому вычисление произведения
элементов массива выполнятся по
алгоритмам аналогичным вычислению
суммы. Отличие заключается в том, что
начальное значение произведения p
должно быть равным 1, а в цикле по
параметру i надо вычислять
p=p*ai. Таким образом,
если в графических схемах алгоритмов,
рисунок 2.5 – 2.7 вместо s=0 и s=s+ai
записать p=1 и p=p*ai,
то получим алгоритмы вычисления
произведения элементов массива.
Пример 2.6.
В одномерном массиве a
размерностью n,
вычислить среднее геометрическое
ненулевых элементов массива.
Решение
Среднее геометрическое k элементов
массива – это корень степени k
из произведения этих элементов. Таким
образом, сначала необходимо вычислить
произведение Р ненулевых
элементов массива и их количество k,
а затем среднее геометрическое Sg
по формуле:
. (2.6)
Например, если элементы массива равны
A= {1, 0, 2, 4, 0} то –
Графическая схема алгоритма решения
задачи изображена на рисунке 2.11. В
приведенном алгоритме в цикле по i
(блоки 5 – 9) помимо вычисления
произведения вычисляется и количество
ненулевых элементов массива. После
цикла с помощью ветвления, проверяется,
есть ли в массиве ненулевые элементы
(k>0 – условие наличия в массиве
ненулевых элементов), в этом случае
вычисляется и выводится среднее
геометрическое. В противном случае
выводится сообщение «В массиве все
элементы равны нулю«. В программе
переменные Р и Sg имеют
вещественный тип двойной точности
(double), т.к. произведение вещественных
чисел может быть очень большим числом.
Используемые переменные: n – число элементов массива; a[] – статический массив;
P – произведение не нулевых элементов
k – количество не нулевых элементов
Sg – среднее геометрическое элементов i – параметр цикла; |
#include <stdio.h> #include <math.h> main() { float a[20]; int n, i , k; double P, Sg;
puts(«Введите число элементов scanf(«%d»,&n); for (i=0;i<n;i++) { printf(«Введите число a[%2d]=»,i); scanf(«%f»,&a[i]); } P=1; k=0; for(i=0;i<n;i++) if(a[i]!=0) {P*=a[i]; k++;} puts(«Массив a»); for(i=0;i<n;i++) printf(«a[%2d]=%6.2f n», i, a[i]); if(k>0) { if(P>0) Sg=powl(P,1.0/k); else Sg= –powl(fabs(P),1.0/k);
printf(«Среднее геометрическое printf(«P=%.4lf k=%d n», P, k); }
else puts(«В массиве все элементы return(0); } |
Рисунок 2.11 Графическая схема и программа
для примера 2.6
В программе для возведения P в
степень 1/k используется функция
powl(основание, степень), первый
аргумент которой может быть только
положительным числом. Поэтому для
отрицательного P использовано
выражение
,
запись которого на языке С имеет вид:
–powl(fabs(P), 1.0/k).
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
- #
- #
- #
- #
- #
- #
- #
- #
- #
- #
- #
Warburton 0 / 0 / 1 Регистрация: 25.03.2014 Сообщений: 17 |
||||
1 |
||||
Произведение ненулевых элементов массива25.03.2014, 23:29. Показов 5613. Ответов 7 Метки нет (Все метки)
помогите, начал изучать С++ недавно, столкнулся с проблемой с массивами
Добавлено через 16 минут
0 |
Programming Эксперт 94731 / 64177 / 26122 Регистрация: 12.04.2006 Сообщений: 116,782 |
25.03.2014, 23:29 |
7 |
Genn55 413 / 250 / 118 Регистрация: 26.12.2012 Сообщений: 786 |
||||
25.03.2014, 23:44 |
2 |
|||
Сообщение было отмечено Warburton как решение Решение
1 |
Warburton 0 / 0 / 1 Регистрация: 25.03.2014 Сообщений: 17 |
||||
25.03.2014, 23:51 [ТС] |
3 |
|||
а можешь указать на ошибку) не хочется потом каждый раз спрашивать)
что бы данная строка выводилась 1 раз ,а не кучу раз, массивом Добавлено через 4 минуты
0 |
Genn55 413 / 250 / 118 Регистрация: 26.12.2012 Сообщений: 786 |
||||||||
26.03.2014, 00:00 |
4 |
|||||||
Так как у меня написано будет выводиться 1 раз.Но я немного переделал условие так как в вашем случае числа будут большими и вы увидите их в експоненциальном виде.Чтобы увидеть большое число в нормальном виде вам нужно написать
и добавить
0 |
UnsKneD |
26.03.2014, 00:10
|
Не по теме:
язык С++ учим второй месяц, а задания дали, будто мы пол года изучаем его Да не, всё нормально вам дали. Через пол года уже деревья, стеки, очереди изучать будете,
0 |
0 / 0 / 1 Регистрация: 25.03.2014 Сообщений: 17 |
|
26.03.2014, 00:24 [ТС] |
6 |
Спасибо огромное)
0 |
413 / 250 / 118 Регистрация: 26.12.2012 Сообщений: 786 |
|
26.03.2014, 00:33 |
7 |
Сообщение было отмечено Warburton как решение РешениеЕсли я вас правильно понял в вашей среде отсутствует нумерация строк? У меня в кодеблок таких проблем не было какая у вас не знаю.
0 |
0 / 0 / 1 Регистрация: 25.03.2014 Сообщений: 17 |
|
26.03.2014, 00:40 [ТС] |
8 |
да да, Вы верно поняли. у меня среда Microsoft Visual C++ 2010 Express щас по нему поищу в гугле мануал по Microsoft Visual C++ 2010 Express, всё не буду Вас тревожить)) спасибо за всё ещё раз) Добавлено через 4 минуты При помощи меню откройте диалог Tools — Options — Text Editor — All Languages – General и установите флажок на опции Line numbers для того, чтобы включить нумерацию строк во всех типах файлов.
0 |
IT_Exp Эксперт 87844 / 49110 / 22898 Регистрация: 17.06.2006 Сообщений: 92,604 |
26.03.2014, 00:40 |
8 |
Given an array consisting of zeros and positive elements, I want to take the product of the non-zero elements. I am currently replacing zeroes with 1’s a[a == 0] = 1
and using np.prod
. Given that my array is sparse, one speed up I assume would be to subset for non-zero elements sub = a[a != 0]
and take the product over the elements in sub
.
Is there a more efficient numpy operation to do do this?
asked Apr 19, 2022 at 6:47
1
Actually, your idea is correct, but it could be shortened to one line code like this:
np.prod(x[x != 0])
answered Apr 19, 2022 at 7:02
Сумма и произведение ненулевых элементов массива
Sep 27th, 2017
164
0
Never
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
-
Сумма и произведение ненулевых элементов массива
-
#include <iostream>
-
using namespace std;
-
int main()
-
{
-
setlocale(LC_ALL, «RUSSIAN»);
-
int *arr;
-
int size;
-
cout << «Введите размер массива.» << endl;
-
cout << «n= «;
-
cin >> size;
-
if (size <= 0) { // Задаем размер массива
-
cerr << «Размер массива должен быть положительным» << endl;
-
return 1;
-
}
-
arr = new int[size]; // Вводим элементы массива
-
for (int i = 0; i < size; i++) {
-
cout << «arr[« << i << «] = «;
-
cin >> arr[i];
-
}
-
int S = 0, P = 1;
-
for (int i = 1; i < size; i++) {
-
if (arr[i] != 0) {
-
S = S + arr[i];
-
P = P*arr[i];
-
}
-
}
-
cout << » « << endl;
-
cout << «Сумма ненулевых элементов массива: « << S << endl;
-
cout << » « << endl;
-
cout << «Произведение ненулевых элементов массива: « << P << endl;
-
delete[] arr;
-
return 0;
-
}