powered by simpleCommunicator - 2.0.55     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как накормить животных в зоопарке? - задача
22 сообщений из 47, страница 2 из 2
Как накормить животных в зоопарке? - задача
    #38736140
Marina222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
уточнение проблемы:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
        List<FoodName> randomizedFoodsLambda = RandomizedFoodsLambda<FoodName>();

        ...

        public static List<TClass> RandomizedFoodsLambda<TClass>(int amountOfFood = 40)
        {
            var rand = new Random(DateTime.Now.Millisecond);
            var randomizedFoods = new List<TClass>((IEnumerable<TClass>)Enumerable.
                    Range(0, amountOfFood).Select(i => (FoodName)(rand).Next(0, 4)));  // не могу убрать FoodName
            return randomizedFoods;
        }
...
Рейтинг: 0 / 0
Как накормить животных в зоопарке? - задача
    #38736156
Berd.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где-то в степиMarina222,
наверное животных наследовать от базового еды.
создать сласс еда в конструкторе предавать список еды
инкапсулировать дистинговый список наличия еды от переданного ( легче работать)
Ну и функцию кормления в параметре передаем животное
что там будет вам решать, можете ловить исключение снаружи и добавлять в список исключений ( еда этого типа кончилась)
ну и естественно ( еда для животного кончилась тварь осталась не накомленной)
после кормления или в процессе смотреть результаты этих списков.
ну можете добавить функцию отчета, и пополнения еды..


Как вариант - если еду сделать базовым классом и животных наследовать от еды - то можно сделать, чтобы животные могли есть друхих животных.
...
Рейтинг: 0 / 0
Как накормить животных в зоопарке? - задача
    #38736183
Marina222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Berd.Как вариант - если еду сделать базовым классом и животных наследовать от еды - то можно сделать, чтобы животные могли есть друхих животных.

Просто на всякий случай, правильно ли я поняла, что если я захочу реализовать подход, что зверей из зоопарка - можно кормить другими зверьми?

1. Создать интерфейс: IEatable.
2. Поменять перечисление Еда на абстрактный пустой класс и дочерние классы Молоко, Мясо, Сыр и Сухари, которые реализуют IEatable.
3. Сделать так, чтобы Кошка и Мышка реализуют интерфейс IEatable.
4. Добавить в ConsumableFoodList для Собаки - Кошку, а для Кошки - Мышку.
5. Опционально: сокращать список животных на количество съеденных кошек и мышей.
...
Рейтинг: 0 / 0
Как накормить животных в зоопарке? - задача
    #38736203
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Marina222, вот теперь понятно.

Я не встречал такого: "Подобные задания со списками литературы раздают все крупные компании, по крайней мере, на Украине, по заявке через e-mail и связным объяснением желания заниматься."
Для меня курсы - это курсы. Есть группа, есть программа, есть домашние задания, есть обсуждения решений участников с преподавателем. Всё это онлайн.
Причём преподаватели крайне негативно относятся к тому, что решения тащат из интернета.

Перешлите задание мне на почту, постараюсь посмотреть сегодня вечером и ответить Вам и выложить сюда решение. Если конечно Вам нужны такая помощь.
...
Рейтинг: 0 / 0
Как накормить животных в зоопарке? - задача
    #38736211
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Marina222по поводу "небылиц"... Antonariy, не желаете подумайть о своей карме после обвинений во лжи...не отвечать на неудобные вопросы это ваше личное или национальное?
вопрос был следующим, напоминаю: каким образом skyANA должен был угадать ваш ничем не подтвержденный статус?
...
Рейтинг: 0 / 0
Как накормить животных в зоопарке? - задача
    #38736227
Marina222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
skyANAMarina222, вот теперь понятно.

Я не встречал такого: "Подобные задания со списками литературы раздают все крупные компании, по крайней мере, на Украине, по заявке через e-mail и связным объяснением желания заниматься."
Для меня курсы - это курсы. Есть группа, есть программа, есть домашние задания, есть обсуждения решений участников с преподавателем. Всё это онлайн.
Причём преподаватели крайне негативно относятся к тому, что решения тащат из интернета.

Перешлите задание мне на почту, постараюсь посмотреть сегодня вечером и ответить Вам и выложить сюда решение. Если конечно Вам нужны такая помощь.skyANA, это у них называется заочный курс обучения - для тех кто со стороны без опыта либо не прошёл интервью. Конечно, на таких как я не очень хотят тратить время, и уж точно "ставят на заметку" на будущее.

За предложение помощи, большое спасибо, но я не могу её принять, потому что хочу сама выполнить задания. Поэтому и обощала вопросы. В принципе, того кода, что есть в ветке - достаточно. Если можете, помогите мне, пожалуйста с вопросом, почему у меня не работает рефакторинг метода. И это не первый раз.

Код: 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.
        List<FoodName> randomizedFoodsStandard = RandomizedFoodsStandard<FoodName>(); // работает 

        ...

        public static List<TClass> RandomizedFoodsStandard<TClass>(int amountOfFood = 40) // Всё обобщено
        {
            List<TClass> randomizedFoods = new List<TClass>();
            var rand = new Random();
            int enumerationSize = Enum.GetNames(typeof(TClass)).Length;
            for (int i = 0; i < amountOfFood; i++)
            {
                randomizedFoods.Add((TClass)Enum.Parse(typeof(TClass), rand.Next(enumerationSize).ToString()));
            }
            return randomizedFoods;
        }


        List<FoodName> randomizedFoodsLambda = RandomizedFoodsLambda<FoodName>(); // не до конца обобщение в методе

        ...

        public static List<TClass> RandomizedFoodsLambda<TClass>(int amountOfFood = 40)
        {
            var rand = new Random(DateTime.Now.Millisecond);
            var randomizedFoods2 = new List<TClass>((IEnumerable<TClass>)Enumerable.
                Range(0, amountOfFood).Select(i => (FoodName)(rand).Next(0, 4)));   // не могу избавиться от FoodName
               // если меняю FoodName на TClass, to ошибка "Cannot convert type 'int' to 'TClass'"
            return randomizedFoods2;
        }



Заранее, большое спасибо!!!
...
Рейтинг: 0 / 0
Как накормить животных в зоопарке? - задача
    #38736244
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Marina222За предложение помощи, большое спасибо, но я не могу её принять, потому что хочу сама выполнить задания.Тогда советую внимательно посмотреть на задание и подумать над тем,а где у Вас:

1. Класс зоопарк с клетками и запасом еды?
2. Как у Вас реализованы желудки животных и перемещение еды в них из запасов зоопарка?
3. 10 животных и 40 единиц еды: как Вы предусмотрели то, что животные не могут разом всё съесть? То есть если желудок заполнен, то не надо пихать в животное еду насильно.

Лямбды - это конечно круто, но думаю вряд-ли кого-то впечатлит их наличие при плохо спроектированных классах.
...
Рейтинг: 0 / 0
Как накормить животных в зоопарке? - задача
    #38736346
refreg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Marina222,

По-моему задача поменялась... Вместо решения первоначальной задачи, занялись рефакторингом
Код, который вы пытаетесь рефакторить, просто перегружен лямбдами. Зачем вообще, в этом коде сделаны три разных класса? В вашем первоначальном варианте было больше смысла в трех классах, которые наследовались от животного.
Вам же не надо делать реальный проект, и покрывать его тестами...

Повторю, если задача учебная - то скорее всего надо воспользоваться виртуальными методами.

Примерно так:

Каждое животное ест (просто ест, абстрактно)
Кошка ест то-то и то-то
Собака ест то-то и то-то

Как накормить? Пройтись по животным и заставить есть (абстрактно)
Вот и всё...
...
Рейтинг: 0 / 0
Как накормить животных в зоопарке? - задача
    #38736419
Marina222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
refregMarina222,

По-моему задача поменялась... Вместо решения первоначальной задачи, занялись рефакторингом
Код, который вы пытаетесь рефакторить, просто перегружен лямбдами. Зачем вообще, в этом коде сделаны три разных класса? В вашем первоначальном варианте было больше смысла в трех классах, которые наследовались от животного.
Вам же не надо делать реальный проект, и покрывать его тестами...

Повторю, если задача учебная - то скорее всего надо воспользоваться виртуальными методами.

Примерно так:

Каждое животное ест (просто ест, абстрактно)
Кошка ест то-то и то-то
Собака ест то-то и то-то

Как накормить? Пройтись по животным и заставить есть (абстрактно)
Вот и всё...refreg, спасибо! Вы правильно изложили задачу. С лямбдами я тоже не поняла ещё. Пришлось переделывать под LINQ для животных так:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
    var animalsCount = from animal in randomizedAnimals
        group animal by animal.Name into g
        select new { AnimalCategory = g.Key, CategoryCount = g.Count() };

    foreach (var groupedAnimal in animalsCount)
    {
        Console.WriteLine("{0} = {1}", groupedAnimal.AnimalCategory, groupedAnimal.CategoryCount);
    }


Моя главная проблема в этой задаче:
я не понимаю, как реализовать "Пройтись по животным" и как их "заставить есть (абстрактно)"
...
Рейтинг: 0 / 0
Как накормить животных в зоопарке? - задача
    #38736440
refreg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Marina222 Моя главная проблема в этой задаче:
я не понимаю, как реализовать "Пройтись по животным" и как их "заставить есть (абстрактно)"

Это элементарно:
Код: c#
1.
2.
3.
foreach (Animal myAnimal in myAnimals) {
                myAnimal.Eats();
            }



Весь фокус в том, что надо реализовать метод Eats() в подклассах. А в анимал сделать его абстрактным
...
Рейтинг: 0 / 0
Как накормить животных в зоопарке? - задача
    #38736442
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Marina222, за время работы зоопарка в нём могут размещать новых животных, вывозить оттуда животных на волю или в другие зоопарки. Поставлять в него еду.

То, что в начале программы инициализируется какой-то случайный набор животных и еды, с самим классом зоопарка никак не связано.
То есть внутри этого класса не должно быть никаких randomizedAnimals и RandomizedFoodsLambda.
Смотреть будут на то, как Вы спроектируете классы Zoo, Animal, Food, а не на то, как виртуозно Вы инициализируете начальные условия, используя линк и лямбды.
...
Рейтинг: 0 / 0
Как накормить животных в зоопарке? - задача
    #38736446
Tamozhnya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не запускал, но как-то так:
Код: 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.
    public class Animal {
        public Animal() {
            AnimalType = (AnimalType)AnimalTypeValues.GetValue(Random.Next(AnimalTypeValues.Length));
            EatenFood = new List<FoodType>();
        }
        public AnimalType AnimalType { get; set; }
        public List<FoodType> EatenFood { get; set; }
        private static readonly Array AnimalTypeValues = Enum.GetValues(typeof(AnimalType));
        private static readonly Random Random = new Random();
        public static readonly Dictionary<AnimalType, List<FoodType>> AnimalFoods = new Dictionary<AnimalType, List<FoodType>> {
            { AnimalType.Mouse, new List<FoodType> { FoodType.Cheese, FoodType.Rusk } },
            { AnimalType.Cat, new List<FoodType> { FoodType.Milk, FoodType.Meat } },
            { AnimalType.Dog, new List<FoodType> { FoodType.Meat, FoodType.Rusk } },
        };
    }
    public enum AnimalType { Unknown, Mouse, Cat, Dog }
    public enum FoodType { Unknown, Milk, Meat, Cheese, Rusk }
    public static class Prog {
        public static void Main() {
            Console.WriteLine("Foods before feed: " + String.Join(",", Foods));
            FeedAnimals();
            Console.WriteLine("Foods after feed: " + String.Join(",", Foods));

            Console.WriteLine("Feed results: ");
            foreach(Animal animal in Animals) {
                Console.WriteLine(animal.AnimalType + " ate: " + String.Join(",", animal.EatenFood));
            }
        }
        private static readonly Array FoodTypeValues = Enum.GetValues(typeof(FoodType));
        private static readonly Random Random = new Random();
        private static readonly List<Animal> Animals = Enumerable.Repeat(new Animal(), 10).ToList();
        private static readonly List<FoodType> Foods = Enumerable.Repeat((FoodType)FoodTypeValues.GetValue(Random.Next(FoodTypeValues.Length)), 50).ToList();
        private static void FeedAnimals() {
            Animals.ForEach(x => {
                FoodType food = Foods.FirstOrDefault(y => Animal.AnimalFoods[x.AnimalType].Contains(y));
                if(food != FoodType.Unknown) {
                    x.EatenFood.Add(food);
                    Foods.Remove(food);
                }
            });
        }
    }



Не уверен в выводе в консоль, работаю на ASP :)
...
Рейтинг: 0 / 0
Как накормить животных в зоопарке? - задача
    #38736452
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tamozhnya, боюсь, что Ваше решение потенциальный работодатель закроет, даже не запустив.
...
Рейтинг: 0 / 0
Как накормить животных в зоопарке? - задача
    #38736506
Tamozhnya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Random.Next(FoodTypeValues.Length) надо поправить на Random.Next(1, FoodTypeValues.Length)
и Random.Next(AnimalTypeValues.Length) на Random.Next(1, AnimalTypeValues.Length)
...
Рейтинг: 0 / 0
Как накормить животных в зоопарке? - задача
    #38736523
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tamozhnya, ИМХО задание дано, чтобы посмотреть, как кандидат усвоил основные принципы ООП, а не на то как он может компактно писать код, используя линк и лямбды
...
Рейтинг: 0 / 0
Как накормить животных в зоопарке? - задача
    #38736551
Tamozhnya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
С тех пор, как пришел в .net на asp, сижу на довольно крупном (по объему кода) проекте автоматизации колцентров, плюс
вёб часть.
И по моему опыту, при программировании таких бизнес приложений наследование почти не используется (у меня только
персистные сущности наследуются от базовой для работы с БД).
А наоборот, используется линейный код, очень хорошо читаемый.

Этот проект был написан до меня, и из рук вон плохо (говнокод короче), так что за голову часто хватаешься от реализации.
В том числе наследование используется там, где оно совсем не нужно, так что кажется, что как раз студенты
тренировались применять ООП.

От этого надо предостерегать.
...
Рейтинг: 0 / 0
Как накормить животных в зоопарке? - задача
    #38736577
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tamozhnya, Вы задание-то вообще читали?

"создана коллекция Животные (список)... 10 разных животных из классов: кошки, мыши и собаки"

Вы можете сколько угодно рассуждать про крупные проекты, линейный код и т.п. Но тут явно ожидают увидеть базовый класс Animal (или интерфейс IAnimal) и реализации в виде Cat, Mouse, и Dog.
Также помимо наследования ожидают увидеть инкапсуляцию и полиморфизм, которыми в Вашем линейном коде и не пахнет.
...
Рейтинг: 0 / 0
Как накормить животных в зоопарке? - задача
    #38736584
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всё таки автоматизация колцентров и зоопарк - это несколько разные предметные области
...
Рейтинг: 0 / 0
Как накормить животных в зоопарке? - задача
    #38736596
Tamozhnya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я задание читал, и очень доволен, что для решения не нужны ни наследование, ни полиморфизм.

Лишние сущности очень усложняют код и его понимание, поэтому не плодите их там, где они не нужны.
И все вам скажут спасибо.
(Это я ко всему народу обратился :)
...
Рейтинг: 0 / 0
Как накормить животных в зоопарке? - задача
    #38736610
Tamozhnya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А кстати, да, есть вопрос, ведь мой код решает задачу? По моему, да.
Он максимально прост.
А теперь давайте введём в него наследование - лишние классы; методы какие-нибудь и т.д.
Всё резко усложнится, и возникнет вопрос: зачем всё это лишнее?

Потом можно сравнить полученный код с исходным, и крепко задуматься (над смыслом жизни :)
...
Рейтинг: 0 / 0
Как накормить животных в зоопарке? - задача
    #38736623
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tamozhnya, тут не надо задумываться над смыслом жизни.

ТСу выдали литературу, по котрой она скорее всего изучает ООП на C#, а не линейное программирование на C#.
И задание, чтобы проверить, как она усвоила материал (принципы ООП), а не как принято писать код в относительно крупном проекте автоматизации коллцентра.
...
Рейтинг: 0 / 0
Как накормить животных в зоопарке? - задача
    #38736817
Pallaris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как грамотно организовать колцентр в зоопарке - вот задача
...
Рейтинг: 0 / 0
22 сообщений из 47, страница 2 из 2
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как накормить животных в зоопарке? - задача
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]