Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Karina29
0 / 0 / 0
Регистрация: 05.09.2017
Сообщений: 4
#1

В одномерном массиве, состоящем из n вещественных элементов, вычислить: - произведение отрицательных элементов массива;

08.11.2017, 17:19. Просмотров 314. Ответов 10

В одномерном массиве, состоящем из n вещественных элементов, вычислить:
- произведение отрицательных элементов массива;
- сумму положительных элементов массива, расположенных до максимального элемента.

Как изменить код,чтобы если отрицательных элементов нет, выводилось произведение равно нулю?
вот код

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
#include<stdio.h>
#include<conio.h>
#include<locale.h>
void main ()
{
    setlocale(LC_ALL,"russian");
    int n,i, max = 0 ;
    float a[20], P = 1, S = 0;
    while(1)
    {
    printf_s("Введите размер массива \n");
    scanf_s("%d",&n);
    printf_s("Введите %d чисел \n", n);
    for (i = 0; i < n; i++)
    { scanf_s("%f",&a[i]);
        if (a[i]<0)
            P*=a[i];
        if(a[i]>a[max])  
            max = i;
         }  
    printf_s("Произведение отрицательных элементов массива = %.2f\n", P);
    for (i>0; i<max;i++)
    {
        scanf_s("%f",&a[i]);    
    do {
        S += a[i];
        }
        while(i < a[max]);
    }
    printf_s("Сумма положительных элементов массива = %.2f\n", S);
}
    _getch();
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.11.2017, 17:19
Ответы с готовыми решениями:

В одномерном массиве, состоящем из N действительных элементов, вычислить: • сумму отрицательных элементов массива; • про
В одномерном массиве, состоящем из N действительных элементов, вычислить: •...

В одномерном массиве, состоящем из n элементов, вычислить произведение элементов массива, расположенных между вторым и третьим равным 0
напишите пожалуйста

В одномерном массиве, состоящем из n вещественных элементов, вычислить сумму индексов нулевых элементов
В одномерном массиве, состоящем из n вещественных элементов, вычислить: сумму...

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

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

10
stake-k26
305 / 285 / 241
Регистрация: 25.04.2016
Сообщений: 844
08.11.2017, 17:41 #2
Цитата Сообщение от Karina29 Посмотреть сообщение
Как изменить код,чтобы если отрицательных элементов нет, выводилось произведение равно нулю?
Например, добавить дополнительную переменную-счетчик, и увеличивать ее на 1 при каждом найденном отрицательном, если в конце ее значение равно 0, то отрицательных не было и следовательно, произведение тоже равно 0.
1
DobroAlex
Модератор
378 / 323 / 161
Регистрация: 30.04.2016
Сообщений: 1,665
Завершенные тесты: 3
08.11.2017, 19:11 #3
stake-k26, проще сделать булев флаг
0
Karina29
0 / 0 / 0
Регистрация: 05.09.2017
Сообщений: 4
08.11.2017, 19:18  [ТС] #4
Много где встречала "flag", но нигде не могу найти в чем заключается смысл и как применять

Добавлено через 2 минуты
Я пробовала заменить на
C
1
2
3
if (a[i]<0) { 
P*=a[i]; } 
else P*=a[i]*0;
Тогда вообще всегда 0 выдает
0
DobroAlex
Модератор
378 / 323 / 161
Регистрация: 30.04.2016
Сообщений: 1,665
Завершенные тесты: 3
08.11.2017, 19:45 #5
Karina29, в последнем вашем цикле треш, водка, угар и содомия
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
int size;
scanf("%d", &size);
float * arr, ans=1.;
arr = malloc(size);
bool isNegativePresent = false;
for (int i = 0; i < size; i++) {
   scanf("%f",&arr[i]);
   if (arr[i]  < 0) {
      isNegativePresent = true;
      ans *= arr[i];
   }
}
if (isNegativePresent == false)  {
   printf ("O-oops");
}
else {
   printf("%f", ans);
}
1
stake-k26
305 / 285 / 241
Регистрация: 25.04.2016
Сообщений: 844
08.11.2017, 20:00 #6
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
#include <stdio.h>
/* находит произведение поступивших с клавиатуры отрицательных */
 
int main (void)
{
    int flag = 0;       //счетчик отрицательных
    int max = 5;        //длина последовательности чисел
    int num;            //число с клавиатуры
    int p = 1;          //произведение отрицательных
 
    for(int i=0; i<max; i++)
    {
        printf("num[%i] = ", i);    //получаем число с клавиатуры
        scanf("%d", &num);
        if (num < 0)
        {
            flag++;
            p *= num;
        }
    }
 
    (!flag) ? printf("\np = 0\n") : printf("\np = %i\n", p);
 
    return 0;
}
DobroAlex, предоставьте мне, пожалуйста, рабочий вариант этой программы (от начала и до конца) с логическим типом "попроще"...
0
DobroAlex
Модератор
378 / 323 / 161
Регистрация: 30.04.2016
Сообщений: 1,665
Завершенные тесты: 3
08.11.2017, 20:10 #7
stake-k26, "проще" в плане очевидности + существует вероятность 1/INT_MAX, что счётчик будет переполнен и покажет, что в массиве нет отрицательных
C
1
int max = 5;
Упадет на бо́льшей длине, стоит использовать динамическое выделение


C
1
int flag = 0
C
1
bool flag = false;
C
1
int num; int p
В задаче по крайней мере float

Кстати, как вы на множестве типов данных введёте отношение простоты,о котором я даже не упоминал?
0
stake-k26
305 / 285 / 241
Регистрация: 25.04.2016
Сообщений: 844
08.11.2017, 20:33 #8
Цитата Сообщение от DobroAlex Посмотреть сообщение
проще сделать булев флаг
Цитата Сообщение от stake-k26 Посмотреть сообщение
предоставьте мне, пожалуйста, рабочий вариант этой программы (от начала и до конца) с логическим типом "попроще"...
Не уходите от темы, все указанные минусы с переполнением решаются заменой flag++; на flag = 1; Речь идет о конкретной программе, я даже код ее вам привел. И где??? Жду.
0
DobroAlex
Модератор
378 / 323 / 161
Регистрация: 30.04.2016
Сообщений: 1,665
Завершенные тесты: 3
08.11.2017, 22:49 #9
stake-k26, #5 в этой веткеВ одномерном массиве, состоящем из n вещественных элементов, вычислить: - произведение отрицательных элементов массива;

Добавлено через 36 минут
И даже лучше
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
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
int main() {
   int size;
   scanf("%d", &size);
   float * arr, ans=1.;
   arr = malloc(size);
   assert(arr != NULL);
   bool isNegativePresent = false;
   for (int i = 0; i < size; i++) {
      scanf("%f",&arr[i]);
      if (arr[i]  < 0) {
         isNegativePresent = true;
         ans *= arr[i];
      }
   }
   if (isNegativePresent == false)  {
      printf ("O-oops");
   }
   else {
      printf("%f", ans);
   }
return 0;
1
stake-k26
305 / 285 / 241
Регистрация: 25.04.2016
Сообщений: 844
09.11.2017, 05:56 #10
Цитата Сообщение от DobroAlex Посмотреть сообщение
И даже лучше
if (size > 0)
arr = (float*) malloc(size*sizeof(float));
...
free(arr);
return 0;

а в остальном все супер.
0
DobroAlex
Модератор
378 / 323 / 161
Регистрация: 30.04.2016
Сообщений: 1,665
Завершенные тесты: 3
09.11.2017, 06:51 #11
stake-k26,
C
1
arr = (float*) malloc(size*sizeof(float));
Явное приведение не нужно в С, только в крестах
if (size > 0)
Assert бросит ошибку при захвате памяти и без этого
free(arr);
И да,и нет. Утечки не будет, т.к программа тут же завершается и ОС освободит ресурсы.

Приятная дискуссия
0
09.11.2017, 06:51
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.11.2017, 06:51

В одномерном массиве, состоящем из вещественных элементов, вычислить (Linux)
Привет! Помогите с заданием. (СИ) В одномерном массиве, состоящем из...

В одномерном массиве вычислить сумму отрицательных элементов массива и произведение положительных
Есть задание: В одномерном массиве, состоящем из n вещественных элементов,...

В одномерном массиве вычислить произведение отрицательных элементов
В одномерном массиве, состоящем из n вещественных элементов, вычислить:...


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

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

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