Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/18: Рейтинг темы: голосов - 18, средняя оценка - 4.89
0 / 0 / 0
Регистрация: 24.10.2018
Сообщений: 1
1

Найти среднее арифметическое положительных чисел массива и количество отрицательных до последнего нулевого значения

24.10.2018, 10:20. Показов 3600. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
В массиве М[0..N-1] найти среднее арифметическое положительных чисел и
количество отрицательных до последнего нулевого значения. Если отрицательные
нашлись, то удалить первое отрицательное.

Среднее арифметическое нашла
Как быть дальше не знаю

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 <stdio.h> 
#include <conio.h> 
 
int main() 
 
{ 
int N[10], i; 
float result, sum; 
 
//vvod massiva 
printf("Vvedite chisla\n"); 
for (i = 0; i < 10; i++) 
scanf_s("%d", &N[i]); 
 
//summa vseh elementov 
sum = 0; 
for (i = 0; i < 10; i++) 
sum = sum + N[i]; 
 
//delim sum na kolvo elementov 
result = sum / 10; 
 
printf("%f ", result); 
 
 
 
_getch(); 
return 0; 
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.10.2018, 10:20
Ответы с готовыми решениями:

Найти среднее арифметическое положительных и среднее арифметическое отрицательных чисел
Дана последовательность из n (n ≤ 20) вещественных чисел, содержащая как положительные, так и...

Найти среднее арифметическое отрицательных элементов до max значения и количество нулей после него
Здравствуйте,пишу пограмку на Си, помогите сделать так,чтобы она рассчитывала среднее...

Вычислить среднее геометрическое и среднее арифметическое значения положительных элементов массива
Помогите пожалуйста. До 24 мая и до 14:00 надо сделать программу, всю голову изломал уже ничего не...

Найти среднее арифметическое положительных чисел
Условие задачи: Произвести следующую обработку 15 вещественных чисел: найти среднее арифметическое...

7
Диссидент
Эксперт C
27709 / 17325 / 3811
Регистрация: 24.12.2010
Сообщений: 38,979
24.10.2018, 17:07 3
Как-то так
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
sum = 0; 
iLastNol = -1;
KolNegativ = 0;
iFirstNegativ = -1;
for (i = 0; i < 10; i++) {
 sum = sum + N[i]; 
 if (N[i]==0) iLastNol = i;
 if (N[i] < 0 && iFirstNegativ < 0) iFirstNegativ = i;
}
for(i=0; i<iLast0; i++)
  if (N[i] < 0) KolNeativ++;
if (iFirstNegativ >= 0) {
  // Попробуйте сами его удалить
}
Не проверял. Ошибки возможны. Отнеситесь к моему коду критически. Рассматривайте как идею.
0
2487 / 1145 / 707
Регистрация: 25.04.2016
Сообщений: 3,291
24.10.2018, 17:37 4
а дальше, можно найти позицию последнего нулевого.. это будет первый нулевой с конца, и посчитать количество отрицательных, начиная с этой позиции, как это можно сделать?

C
1
2
3
4
5
6
int count = 0;    // количество отрицательных
int first = 0;    // встретился ноль в массиве? (1 - да)
for (i=n-1; i>-1; i--) {
    if (!first && a[i] == 0) first = 1;
    if (first && a[i] < 0) count++;
}
А вот что значит удалить из массива первое отрицательное.. тут я рекомендую вооружиться паяльником и пытать преподавателя, пока он не признается, что это значит.

P.S. Если под удалением подразумевается создать аналогичный массив на 1 меньше и переписать в него все значения исходного массива, кроме первого отрицательного.. то рекомендую сунуть паяльник поглубже, и оставить включенным.
1
Диссидент
Эксперт C
27709 / 17325 / 3811
Регистрация: 24.12.2010
Сообщений: 38,979
24.10.2018, 18:00 5
stake-k26, Спасибо вам за прекрасную метафору!
А по поводу цикла с конца, конечно, вы и тут правы. Просто уж ежели есть цикл с начала, я хотел его на всю катушку использовать. Не получилось, однако. Это вовсе не значит, что это невозможно, просто "покумекать надо", как говаривал мой знакомый плотник. Хотя и для подсчета суммы вполне можно циклевать с конца, сложение - штука коммутативная.
0
2487 / 1145 / 707
Регистрация: 25.04.2016
Сообщений: 3,291
24.10.2018, 21:45 6
Цитата Сообщение от Байт Посмотреть сообщение
Не получилось, однако.
Почему не получилось? По-моему вполне рабочий вариант. Я просто предложил немного другой вариант решения, как один из возможных.
0
Диссидент
Эксперт C
27709 / 17325 / 3811
Регистрация: 24.12.2010
Сообщений: 38,979
24.10.2018, 22:30 7
Цитата Сообщение от stake-k26 Посмотреть сообщение
Почему не получилось?
А вот почему
C
1
2
for(i=0; i<iLast0; i++)
  if (N[i] < 0) KolNeativ++;
Такие задачки надо бы решать одним проходом, а у меня вышло их два. В принципе, можно было бы и одним. Но не охота время тратить.
0
2487 / 1145 / 707
Регистрация: 25.04.2016
Сообщений: 3,291
24.10.2018, 23:10 8
Ну тут да, с конца можно одним циклом сразу все считать: и сумму найти, и позицию первого отрицательного запомнить, и число отрицательных до последнего нуля определить.

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
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
66
67
68
69
70
#include <stdio.h>
#include <conio.h>
#define N 10        // размер массива
#define M 9         // размер массива -1
int main()
{
    int a[N], i;
 
    //vvod massiva
    printf("Vvedite chisla\n");
    for (i = 0; i < N; i++)
        scanf_s("%d", &a[i]);
 
    int iFirstNegativ = -1;     // порядковый номер первого отрицательного
    int KolNegativ = 0;         // сколько отрицательных в массиве
    int first = 0;              // встретился ноль в массиве? (1 - да)
    int sum = 0;                // сумма элементов
    for (i = N-1; i > -1; i--)
    {
        sum += a[i];            // находим сумму всех элементов
 
        if (!first && !a[i])    // if (first == 0 && a[i] == 0)
            first = 1;          // находим последний ноль
 
        if (first && a[i] < 0)  // if (first != 0 && a[i] < 0)
        {
            KolNegativ++;       // считаем количество отрицательных
            iFirstNegativ = i;  // запоминаем позицию первого отрицательного
        }
    }
 
    //delim sum na kolvo elementov
    printf("Average = %f\n", (float) sum / N);
 
    //количество отрицательных
    if (KolNegativ > 0)
        printf("%d negative elements\n", KolNegativ);
    else
        printf("The array hasn't negative elements\n");
 
    /* ***************************************************************
     * Если количество отрицательных больше 0, то создаем новый массив
     * и переписываем в него все значения массива a[], кроме первого
     * отрицательного. Таким образом мы "удаляем" первый отрицательный
     * элемент. *************************************************** */
 
    if (KolNegativ > 0)
    {
        int k, b[M];
        for (i=k=0; i<N; i++)
            if (i == iFirstNegativ)
                continue;
            else
                b[k++] = a[i];
 
        /* и теперь мы можем что-то сделать с новым массивом b[] */
 
        //выведем оба массива на экран, к примеру, для наглядности
        printf("\n");
        for (i=0; i<N; i++)
            printf("% 4d", a[i]);
        printf("\n");
 
        for (i=0; i<M; i++)
            printf("% 4d", b[i]);
        printf("\n");
    }
    _getch();
    return 0;
}
Добавлено через 7 минут
Думаю вместо огромного блока if в 47 строке, лучше поставить другую проверку, вроде
if (KolNegativ == 0) return 0;

и потом уже спокойно возиться со вторым массивом, не загоняя весь код в скобки. Хотя, как по мне, второй массив тут даром не нужен.
0
24.10.2018, 23:10
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.10.2018, 23:10
Помогаю со студенческими работами здесь

Массив: Найти среднее арифметическое положительных чисел
Дан массив целых чисел. Найти среднее арифметическое положительных чисел

Найти среднее арифметическое отрицательных чисел и среднее геометрическое положительных элементов массива
Дан массив Х(20) с целыми числами диапазон (-25 +25) Найти среднее арифметическое отрицательных...

Определить количество отрицательных, положительных чисел и среднее арифметическое всех чисел массива
Задан одномерный массив размером N. Определить количество отрицательных чисел, количество...

Определить среднее арифметическое положительных чисел, находящихся до первого нулевого значения
решите такую задачу В массиве N чисел. Определить сред. ариф положительных чисел находящегося до...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru