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

Реализовать обобщенный класс, включающий функцию вычисления максимального числа из массива чисел

06.12.2013, 18:39. Показов 2874. Ответов 9
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Помогите с заданием!!!Ни чего не могу придумать...

Реализовать обобщенный класс, включающий функцию вычисления максимального числа из массива чисел, переданного в параметре. В качестве параметров могут выступать только числа (float, double, int, byte).
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.12.2013, 18:39
Ответы с готовыми решениями:

Как правильно реализовать обобщённый класс?
хочу создать класс class MyGenericClass<T> Ругается на эту T. убрать не вариант,нужна дальше

Написать рекурсивную функцию для вычисления максимального элемента массива из n элементов
Не запускается программа, не понимаю почему. Задача и решение ниже. Написать рекурсивную...

Написать рекурсивную функцию для вычисления максимального элемента массива из n элементов
Добрый день, помогите пожалуйста, нужно написать рекурсивную функцию для вычисления максимального...

Написать рекурсивную функцию для вычисления максимального элемента массива из n элементов
Написать рекурсивную функцию для вычисления максимального элемента массива из n элементов На...

9
13 / 13 / 2
Регистрация: 21.08.2012
Сообщений: 66
06.12.2013, 21:26 2
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
 
using System.Linq;
 
....
 
public class ItShouldBeExtensionMethod<T> where T : struct
    {
        readonly static Type[] allowedTypes = new Type[]{typeof(float),typeof(double),typeof(int),typeof(byte)};
 
        public ItShouldBeExtensionMethod( )
        {
            T a = default(T);
            if (!allowedTypes.Contains( a.GetType() ))
                throw new Exception( "Недопустимый тип" );
        }
 
        public T GetMax<T> ( T[] array )
        {
            if(array.Length == 0)
                throw new Exception( "Пустой массив" );
            return array.Max();
        }
 
    }
Добавлено через 2 минуты
Блин, вот только тебя запалят с таким кодом!)
1
0 / 0 / 0
Регистрация: 15.11.2012
Сообщений: 20
06.12.2013, 23:25  [ТС] 3
Спасибо Огромное:-)
Дааааа, сразу поймут, что не я делал:-) я не могу до такого додуматься:-)
0
13 / 13 / 2
Регистрация: 21.08.2012
Сообщений: 66
06.12.2013, 23:32 4
C#
1
if(array.Length == 0)
замени это блок на этот
C#
1
if(array == null || array.Length == 0)
а то мало ли)
0
84 / 85 / 48
Регистрация: 12.10.2013
Сообщений: 1,079
07.12.2013, 22:54 5
Есть попроще вариант , но нужно отсеять в коде (float, double, int, byte).

Код:

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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
    
    class maximumNumber
    {
        private static int calculationOfTheMaximum(int[] ar)
        {        
          return ar.Max();
         
        }
 
        static void Main(string[] args)
        {
           int[] d = new int[20] { 1, 2, 3, 55, 5, 567, 45, 5, 44, 6, 45, 368, 44, 234, 66, 34, 98, 342, 66, 567 };
           int result = calculationOfTheMaximum(d);
           Console.Write("{0}",result);
           Console.ReadKey();
        }
    }
}
0
Master of Orion
Эксперт .NET
6098 / 4954 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
07.12.2013, 23:26 6
no.Oby, во-первых указывать T в дважды (в классе и в методе) не нужно, выбери что-то одно.
Во-вторых мб так, не ?
C#
1
2
3
4
5
6
7
    public static class ItShouldBeExtensionMethod
    {
        public static T GetMax<T>(this T[] array) where T:IComparable<T>
        {
            return array.Max();
        }
    }
0
13 / 13 / 2
Регистрация: 21.08.2012
Сообщений: 66
09.12.2013, 11:38 7
Я исходил из того что static нельзя, для меня обобщённый класс это не статический класс с обобщённым методом(хоть и спорно).
Ну и условие с фильтром типов почему то все упорно игнорируют)
Так то я намекнул, что всё вообще можно свести к extension методу который уже есть! только надо фильтр дописать.
0
Master of Orion
Эксперт .NET
6098 / 4954 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
09.12.2013, 13:42 8
no.Oby, ну фильтром выступает Where. На самом деле я не знаю, почему они его не встроили в сам метод Max, вместо того, чтобы бросать исключения в рантайме...

Добавлено через 56 секунд
Я исходил из того что static нельзя, для меня обобщённый класс это не статический класс с обобщённым методом(хоть и спорно).
тогда не нужно было делать метод генериком, то есть:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public class ItShouldBeExtensionMethod<T> where T : struct
    {
        readonly static Type[] allowedTypes = new Type[]{typeof(float),typeof(double),typeof(int),typeof(byte)};
 
        public ItShouldBeExtensionMethod( )
        {
            T a = default(T);
            if (!allowedTypes.Contains( a.GetType() ))
                throw new Exception( "Недопустимый тип" );
        }
 
        public T GetMax <T>/*<--Вот это <T> лишнее! */ ( T[] array )
        {
            if(array.Length == 0)
                throw new Exception( "Пустой массив" );
            return array.Max();
        }
 
    }
Добавлено через 54 секунды
да и ограничение на структуры странное. Вдруг я подставлю IComparable<T> класс, для него max посчитается нормально.
0
13 / 13 / 2
Регистрация: 21.08.2012
Сообщений: 66
09.12.2013, 13:45 9
Аааа) точно ну тут тупанул да)
Ну struct это аля where ValueType.
Если убрать generic из GetMax то всё будет по фен-шую)
0
Master of Orion
Эксперт .NET
6098 / 4954 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
09.12.2013, 13:47 10
no.Oby, эт тоже пушка
C#
1
2
3
T a = default(T);
            if (!allowedTypes.Contains( a.GetType() ))
                throw new Exception( "Недопустимый тип" );
может стоило просто так?
C#
1
2
            if (!allowedTypes.Contains(typeof(T)))
                throw new Exception( "Недопустимый тип" );
насколько я знаю, первый вариант вообще может свалиться... Хотя вы сделали ограничение только на структуры, не из-за этого ли? Потому что для класса a == null, вызов null-метода, сами знаете... )
0
09.12.2013, 13:47
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.12.2013, 13:47
Помогаю со студенческими работами здесь

Написать рекурсивную функцию для вычисления максимального элемента массива из n элементов.
Написать рекурсивную функцию для вычисления максимального элемента массива из n элементов.

Реализовать рекурсивную функцию вычисления степени из числа
Добрый день , помогите решить задачи :...

Реализовать функцию, находящую произведение индексов максимального и минимального элементов массива
Создать функцию, находящую произведение номеров максимального и минимального элементов одномерного...

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


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

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