Форум программистов, компьютерный форум, киберфорум
Наши страницы

C# для начинающих

Войти
Регистрация
Восстановить пароль
 
g1gs
0 / 0 / 0
Регистрация: 15.11.2012
Сообщений: 20
#1

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

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

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

Реализовать обобщенный класс, включающий функцию вычисления максимального числа из массива чисел, переданного в параметре. В качестве параметров могут выступать только числа (float, double, int, byte).
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.12.2013, 18:39
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Реализовать обобщенный класс, включающий функцию вычисления максимального числа из массива чисел (C#):

Обобщенный и не обобщенный класс с одинаковым именем - C#
Добрый день! Task<int> task = Task.Run(() => { Console.WriteLine("Foo"); return 3; }); Как такое возможно? Метод Run Возвращает тип...

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

Реализовать функцию вычисления суммы двух целых чисел - C#
Имеется задача: Реализовать функцию вычисления суммы двух целых чисел. Как её реализовать на C#? Напишите плз, а там я сам буду...

Реализовать функцию вычисления суммы двух вещественных чисел - C#
Реализовать функцию вычисления суммы двух вещественных чисел.Исходные данные вводятся с клавиатуры.

Реализовать функцию вычисления суммы и разности двух вещественных чисел - C#
Реализовать функцию вычисления суммы и разности двух вещественных чисел Кому не сложно напишите программу пожайлуста.

Создать класс дерева, содержащего числа. Реализовать в этом классе функцию, определяющую количество листьев в дереве - C#
Нужно написать такую программку: Создать класс дерева, содержащего числа. Реализовать в этом классе функцию, определяющую количество...

9
no.Oby
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
g1gs
0 / 0 / 0
Регистрация: 15.11.2012
Сообщений: 20
06.12.2013, 23:25  [ТС] #3
Спасибо Огромное:-)
Дааааа, сразу поймут, что не я делал:-) я не могу до такого додуматься:-)
0
no.Oby
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
Веселый
48 / 56 / 7
Регистрация: 12.10.2013
Сообщений: 817
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
Psilon
Master of Orion
Эксперт .NET
5932 / 4831 / 636
Регистрация: 10.07.2011
Сообщений: 14,439
Записей в блоге: 5
Завершенные тесты: 4
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
no.Oby
13 / 13 / 2
Регистрация: 21.08.2012
Сообщений: 66
09.12.2013, 11:38 #7
Я исходил из того что static нельзя, для меня обобщённый класс это не статический класс с обобщённым методом(хоть и спорно).
Ну и условие с фильтром типов почему то все упорно игнорируют)
Так то я намекнул, что всё вообще можно свести к extension методу который уже есть! только надо фильтр дописать.
0
Psilon
Master of Orion
Эксперт .NET
5932 / 4831 / 636
Регистрация: 10.07.2011
Сообщений: 14,439
Записей в блоге: 5
Завершенные тесты: 4
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
no.Oby
13 / 13 / 2
Регистрация: 21.08.2012
Сообщений: 66
09.12.2013, 13:45 #9
Аааа) точно ну тут тупанул да)
Ну struct это аля where ValueType.
Если убрать generic из GetMax то всё будет по фен-шую)
0
Psilon
Master of Orion
Эксперт .NET
5932 / 4831 / 636
Регистрация: 10.07.2011
Сообщений: 14,439
Записей в блоге: 5
Завершенные тесты: 4
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
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.12.2013, 13:47
Привет! Вот еще темы с ответами:

Создать класс дерева, содержащего числа. Реализовать функцию, определяющую количество уровней дерева - C#
Нужна программа: Создать класс дерева, содержащего числа. Реализовать в этом классе функцию, определяющую количество уровней дерева, то...

Обобщенный класс - C#
Задание: Создать обобщенный класс для хранения объектов-исключений. Тип исключения задается при построении класса. Перекрыть в создаваемом...

обобщенный класс для чисел - C++
Всем привет. Написал тип numb для целых и дробных чисел, но не смог написать перегрузку оператора &lt;&lt; для вывода через cout. Вот что пишу в...

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


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

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

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