Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 5.00/21: Рейтинг темы: голосов - 21, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 24.07.2018
Сообщений: 20

Как найти среднее значение массива?

24.07.2018, 09:11. Показов 4356. Ответов 30
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет замучался разбираться, надеюсь на вашу помощь

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
using System;
 
public class GrassHopper 
{
    
    GrassHopper.FindAverage({1,2,3,4});// Как правильно записать это выражение
                            
    Console.WriteLine(d);
    
    
    
    public static int FindAverage(int[] nums)
        {
        //int[] nums=new[] {1,2,3,4}; // Почему выдается ошибка
            int a=0;
            int s=0;
            int d=0;
            for(int i=0; i<nums.Length;i++){
            
                
            a=nums[i]+nums[i-1];
                s=i;
            }
                    
            d=a/s;
            return d;
    
        }
    }
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
24.07.2018, 09:11
Ответы с готовыми решениями:

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

Найти среднее значение положительных элементов массива
В C# найти среднее значение положительных элементов в массиве {a}^n

Найти среднее геометрическое значение четных элементов массива
1. Дан одномерный массив действительных чисел А(п). Найти сред¬нее геометрическое значение четных элементов массива. есть программа...

30
Эксперт .NET
 Аватар для Rius
13236 / 7731 / 1681
Регистрация: 25.05.2015
Сообщений: 23,551
Записей в блоге: 14
24.07.2018, 09:30
Цитата Сообщение от SlavenTyz Посмотреть сообщение
Почему выдается ошибка
Переменная уже определена, повторно нельзя.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
using System;
 
public class GrassHopper 
{
  public void Do()
  {
    int d = GrassHopper.FindAverage(new int[] {1,2,3,4});
    Console.WriteLine(d);
  }
 
  public static int FindAverage(int[] nums)
  {
    long a = 0;
 
    foreach (int n in nums){
      a += n;
    }
                    
    return Convert.ToInt32(a / nums.Length);
  }
}
0
 Аватар для Toros1992
899 / 554 / 275
Регистрация: 26.11.2015
Сообщений: 1,758
Записей в блоге: 2
24.07.2018, 09:30
1. GrassHopper.FindAverage(new[] {1,2,3,4});
2. Какая именно ошибка? Закомментированная строка хоть и бессмысленная, но синтаксически верная.
3. Ваш метод нахождения среднего работать не будет
0
Эксперт .NET
 Аватар для Rius
13236 / 7731 / 1681
Регистрация: 25.05.2015
Сообщений: 23,551
Записей в блоге: 14
24.07.2018, 09:31
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
using System;
 
public class GrassHopper 
{
  public void Do()
  {
    int d = GrassHopper.FindAverage(1, 2, 3, 4);
    Console.WriteLine(d);
  }
 
  public static int FindAverage(params int[] nums)
  {
    long a = 0;
 
    foreach (int n in nums){
      a += n;
    }
                    
    return Convert.ToInt32(a / nums.Length);
  }
}
0
0 / 0 / 0
Регистрация: 24.07.2018
Сообщений: 20
24.07.2018, 09:36  [ТС]
Почему работать не будет

Добавлено через 3 минуты
Подскажите данная конструкция верна???
C#
1
2
3
4
5
6
7
8
int a=0;
int s=0;
int d=0;
for(int i=0; i<nums.Length;i++){
   a=nums[i]+nums[i-1];
   s=i;
    }
    d=a/s
0
 Аватар для Toros1992
899 / 554 / 275
Регистрация: 26.11.2015
Сообщений: 1,758
Записей в блоге: 2
24.07.2018, 09:37
Цитата Сообщение от SlavenTyz Посмотреть сообщение
Почему работать не будет
Во-первых, первая итерация цикла вызовет исключение, потому что вы попытаетесь обратиться к индексу -1. А такого не существует в вашем массиве.
Во-вторых, вы делите сумму не всех элементов массива, а только последних двух.
В-третьих, вы делите эту сумму не на общее число элементов, а на общее число элементов минус один.
0
 Аватар для Wolflind
127 / 107 / 31
Регистрация: 17.03.2016
Сообщений: 445
Записей в блоге: 1
24.07.2018, 09:38
Цитата Сообщение от SlavenTyz Посмотреть сообщение
Как найти среднее значение массива
C#
1
2
int[] nums =  { 1, 2, 3, 4 };
int Average =  nums.Sum() / nums.Length;
или вот так
C#
1
2
3
4
public static int FindAverage(this int[] nums) =>
      nums.Sum() / nums.Length;
 
int Average =nums.FindAverage()
0
 Аватар для Toros1992
899 / 554 / 275
Регистрация: 26.11.2015
Сообщений: 1,758
Записей в блоге: 2
24.07.2018, 09:39
Ну и в-четвертых, надо из метода возвращать double, а не int. Иначе вы возвращаете не среднее, а только целую часть среднего
0
 Аватар для Wolflind
127 / 107 / 31
Регистрация: 17.03.2016
Сообщений: 445
Записей в блоге: 1
24.07.2018, 09:40
Rius,
а зачем преобразовывать он итак целое вернет так как
"a" и nums.Length целые

Цитата Сообщение от Rius Посмотреть сообщение
return Convert.ToInt32(a / nums.Length);
0
0 / 0 / 0
Регистрация: 24.07.2018
Сообщений: 20
24.07.2018, 09:41  [ТС]
А так будет работать

C#
1
2
3
4
5
6
7
8
9
10
11
12
                    int a=0;
            int s=0;
            double d=0;
            for(int i=0; i<nums.Length;i++){
            
                
            a+=nums[i];
                s=nums.Length;
            }
                    
            d=a/s;
            return d;
0
 Аватар для Wolflind
127 / 107 / 31
Регистрация: 17.03.2016
Сообщений: 445
Записей в блоге: 1
24.07.2018, 09:44
C#
1
s=nums.Length;
зачем в цикл?

Добавлено через 1 минуту
C#
1
2
int[] nums =  { 1, 2, 3, 4 };
double  Average =  (double )nums.Sum() / nums.Length;
0
0 / 0 / 0
Регистрация: 24.07.2018
Сообщений: 20
24.07.2018, 09:45  [ТС]
Опять ругается

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
using System;
 
public class GrassHopper 
{
    
 GrassHopper.FindAverage( new[] {1,2,3,4}); 
                            
Console.WriteLine(d);
    
    
    
    public static int FindAverage(int[] nums)
        {
        
        //Random rd=new Random();
        //int[] nums=new[] {1,2,3,4}; // Почему выдается ошибка
            int a=0;
            int s=0;
            double d=0;
            s=nums.Length; 
            for(int i=0; i<nums.Length;i++){
            
                
            a+=nums[i];
                
            }
                    
            d=a/s;
            return d;
    
        }
    }
0
 Аватар для Wolflind
127 / 107 / 31
Регистрация: 17.03.2016
Сообщений: 445
Записей в блоге: 1
24.07.2018, 09:46
SlavenTyz, [CSHARP] сюда код [/CSHARP]

C#
1
 сюда код
0
 Аватар для Toros1992
899 / 554 / 275
Регистрация: 26.11.2015
Сообщений: 1,758
Записей в блоге: 2
24.07.2018, 09:46
Цитата Сообщение от SlavenTyz Посмотреть сообщение
А так будет работать
Будет, но это немного неэффективно.
Не обязательно каждую итерацию цикла присваивать значение переменной s. Это можно сделать до или после цикла, а можно вообще не делать, а сразу поделить на nums.Length
И поменяв тип переменной d на double, вы не решили проблему отбрасывания целой части. Потому что a и s имеют тип int.
нужно например a тоже double сделать
0
 Аватар для Wolflind
127 / 107 / 31
Регистрация: 17.03.2016
Сообщений: 445
Записей в блоге: 1
24.07.2018, 09:46
или кнопка C#
0
 Аватар для Toros1992
899 / 554 / 275
Регистрация: 26.11.2015
Сообщений: 1,758
Записей в блоге: 2
24.07.2018, 09:49
Нельзя просто в любом месте класса писать код и думать, что именно он будет выполняться.
Это:
C#
1
2
3
double d = GrassHopper.FindAverage( new[] {1,2,3,4}); 
 
 Console.WriteLine(d);
Нужно писать в методе Main
0
Эксперт .NET
 Аватар для Rius
13236 / 7731 / 1681
Регистрация: 25.05.2015
Сообщений: 23,551
Записей в блоге: 14
24.07.2018, 09:51
Цитата Сообщение от Wolflind Посмотреть сообщение
а зачем преобразовывать он итак целое вернет так как
"a" и nums.Length целые
Целое целому - рознь.
Просуммировать даже 2 int32 в переменную типа int32 можно только в том случае, если точно известно, что их сумма не превысит 231-1. Иначе надо предполагать возникновение переполнения. Поэтому надо суммировать хотя бы в int64, а не int32, хотя через 232 операций и это можно переполнить.
А int64 в int32 само не преобразуется.
0
 Аватар для Wolflind
127 / 107 / 31
Регистрация: 17.03.2016
Сообщений: 445
Записей в блоге: 1
24.07.2018, 09:58
Rius,
Цитата Сообщение от Rius Посмотреть сообщение
Поэтому надо суммировать хотя бы в int64, а не int32, хотя через 232 операций и это можно переполнить.
но в итоге то преобразуется к int32 и и если даже посчитать в int64 то после преобразования в int32 оно не влезет и смысл тогда преобразовывать?

Добавлено через 1 минуту
да и как можно превысить int32 если мы делим int32 на int32 и оно только уменьшается
0
 Аватар для Toros1992
899 / 554 / 275
Регистрация: 26.11.2015
Сообщений: 1,758
Записей в блоге: 2
24.07.2018, 10:00
Цитата Сообщение от Wolflind Посмотреть сообщение
смысл тогда преобразовывать?
Посмотри внимательно
Цитата Сообщение от Wolflind Посмотреть сообщение
"a" и nums.Length целые
Там в коде а имеет тип long для того, чтобы сумма могла быть большой, но после деления она все равно точно будет в диапазоне int, но тип у нее будет long. Для этого и производится преобразование

Добавлено через 47 секунд
Цитата Сообщение от Wolflind Посмотреть сообщение
как можно превысить int32
Если тебе нужно найти среднее у массива в миллион элементов
0
0 / 0 / 0
Регистрация: 24.07.2018
Сообщений: 20
24.07.2018, 10:01  [ТС]
Все равно выдается ошибка

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
using System;
 
public class GrassHopper 
{
    GrassHopper.FindAverage( new[] {1,2,3,4}); 
    
  
Console.WriteLine(d);
    
    
    
    public static int FindAverage(double[] nums)
        {
        
        //Random rd=new Random();
        //int[] nums=new[] {1,2,3,4}; // Почему выдается ошибка
            double a=0;
            double s=0;
            double d=0;
            s=nums.Length; 
            for(int i=0; i<nums.Length;i++){
            
                
            a+=nums[i];
                
            }
                    
            d=a/s;
            return d;
    
        }
    }
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
24.07.2018, 10:01
Помогаю со студенческими работами здесь

Найти среднее арифметическое элементов массива, имеющих нечетное значение
Дан массив А(25) на промежутке -20, 10. Найти среднее арифметическое элементов, имеющих несет ное значение. Написать алгоритм к программе.

Найти среднее значение двумерного массива. Найти среднее значение каждой строки
#include &lt;cs50.h&gt; #include &lt;stdio.h&gt; int main(void){ FILE*f; f = fopen(&quot;file&quot;, &quot;w&quot;); int x=2; int y=6; int...

Как найти среднее арифметическое значение массива
1.Ввести массив А (N). Найти арифметическое значение массива. Четные элементы массива разделить на среднее арифметическое. Вывести...

Как найти среднее арифметическое значение массива
Ввести массив А (N). Найти арифметическое значение массива. Четные элементы массива разделить на среднее арифметическое. Вывести...

Как найти среднее значение элементов массива, которые больше 10-ти?
Определить среднее значение всех элементов массива, чьи факториалы больше 10.


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru