powered by simpleCommunicator - 2.0.55     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как накормить животных в зоопарке? - задача
47 сообщений из 47, показаны все 2 страниц
Как накормить животных в зоопарке? - задача
    #38734854
Marina222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет!

Есть задача:
1. Животные - кошки, мыши и собаки живут в клетках зоопарка. Т.е. создана коллекция Животные (список), в которой случайным образом задано 10 разных животных из классов: кошки, мыши и собаки.
2. Еда - молоко, мясо, сыр и сухари. Это просто перечисление. Но создана коллекция Еда (список), в которой случайным образом помещены 40 экземпляров перечисления еда.
3. Рацион питания - кошка может есть молоко или мясо, собака - мясо или сухари, а мышь - сухари или сыр. Для простоты задачи - предполагается, что животные едят что-то одно и требуется единица еды, чтобы накормить животное.

Вопросы:
1. Как накормить животных - т.е. как отразить то средствами C#, что еда из коллекции Еда переместилась (уменьшилась) в желудки животных, если известно, ЧТО едят животные?
2. Как составить отчёт о наличии еды (т.е. состоянии "до") и результатах кормления - сколько животных не-/накормлено и сколько еды осталось (т.е. состояние "после").

Заранее благодарю за Ваши время и внимание!!! Если у Вас будет время написать код, то это будет просто супер!!!
...
Рейтинг: 0 / 0
Как накормить животных в зоопарке? - задача
    #38734877
Alex Kuznetsov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Marina222 Вопросы:
1. Как накормить животных - т.е. как отразить то средствами C#, что еда из коллекции Еда переместилась (уменьшилась) в желудки животных, если известно, ЧТО едят животные?В коллекцию вести не только что за еда, но и признак передана животному или нет
Marina2222. Как составить отчёт о наличии еды (т.е. состоянии "до") и результатах кормления - сколько животных не-/накормлено и сколько еды осталось (т.е. состояние "после").Пробежать по коллекции, посмотреть признак и изменять счётчик
Marina222...Если у Вас будет время написать код, то это будет просто супер!!! Сколько денег готовы заплатить за эту работу?
...
Рейтинг: 0 / 0
Как накормить животных в зоопарке? - задача
    #38734934
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Marina222,
наверное животных наследовать от базового еды.
создать сласс еда в конструкторе предавать список еды
инкапсулировать дистинговый список наличия еды от переданного ( легче работать)
Ну и функцию кормления в параметре передаем животное
что там будет вам решать, можете ловить исключение снаружи и добавлять в список исключений ( еда этого типа кончилась)
ну и естественно ( еда для животного кончилась тварь осталась не накомленной)
после кормления или в процессе смотреть результаты этих списков.
ну можете добавить функцию отчета, и пополнения еды..
...
Рейтинг: 0 / 0
Как накормить животных в зоопарке? - задача
    #38734948
Marina222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Большое спасибо всем отозвавшимся!!! К сожалению, я хожу на курсы и не располагаю средствами, чтобы оплатить написание программы :(

Вот мои классы

Код: 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.
    public class Animal
    {
        public string Name { get; set; }
        public bool IsFed { get; set; }
        public List<FoodName> ConsumableFoodList;
    }

    public class Cat : Animal
    {
        public Cat()
        {
            this.IsFed = false;
            ConsumableFoodList=new List<FoodName> { FoodName.Milk, FoodName.Meat };
        }
    }

    public class Dog : Animal
    {
        public Dog()
        {
            this.IsFed = false;
            this.ConsumableFoodList = new List<FoodName> { FoodName.Crackers, FoodName.Meat };
        }
    }

    public class Mouse : Animal
    {
        public Mouse()
        {
            this.IsFed = false;
            ConsumableFoodList = new List<FoodName> { FoodName.Crackers, FoodName.Cheese };
        }
    }

    public enum FoodName
    {
        Crackers,
        Cheese,
        Meat,
        Milk
    }



Если есть, для простоты

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
static void Main(string[] args)
        {
            List <Animal> myAnimals = new List<Animal>();
            myAnimals.Add(new Cat());
            myAnimals.Add(new Cat());
            myAnimals.Add(new Cat());
            myAnimals.Add(new Dog());
            myAnimals.Add(new Dog());
            myAnimals.Add(new Mouse());
            myAnimals.Add(new Mouse());
            myAnimals.Add(new Mouse());
            myAnimals.Add(new Mouse());
            myAnimals.Add(new Mouse());

            foreach (Animal myAnimal in myAnimals)
            {
                Console.WriteLine(myAnimal);
            }
        }



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

я учусь заочно. Мне дали список литературы и задание, которое надо решить. Всё! А ещё я беженка из ЮВ Украины. Так что как вы думаете, сколько у меня денег на то, чтобы нанимать репетиторов и учиться и платить преподавателям за консультации.

А Вам, skyANA, желаю много счастья!
...
Рейтинг: 0 / 0
Как накормить животных в зоопарке? - задача
    #38735350
Pallaris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Марина, дополни свою прогу чем-то таким.
Код: 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.
public class Zoo
{
     List<Animal> _animals = new List<Animal>();
     List<Food> _foodBank = new List<Food>();

     public void FeedAnimal(Animal animal, Food food)
     {
          if (food == null || animal == null)
              return;
          animal.IsFed = true;
          _foodBank.Remove(food);
     }

     public Food PickFoodForAnimal(Animal animal)
     {
         foreach (Food food in _foodBank)
         {
              if (animal.CanEat(food))
                  return food;

         }
         return null;
     }

     public void FeedAll()
     {
          foreach (Animal animal in _animals)
          {
                FeedAnimal(animal, PickFoodForAnimal(animal));
          }
     }
}



ну и дальше через класс Zoo работаем
...
Рейтинг: 0 / 0
Как накормить животных в зоопарке? - задача
    #38735385
Dim2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
02.09.2014 19:44, Marina222 пишет:

> сколько у меня денег на то, чтобы нанимать репетиторов

Не поверишь, но учиться без репетиторов вполне реально ;).
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как накормить животных в зоопарке? - задача
    #38735406
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Marina222,
Marina222беженка из ЮВ Украины
дак вроде каждому по собщению Российской прессы на каждого выделили по 1 500 000 руб?
...
Рейтинг: 0 / 0
Как накормить животных в зоопарке? - задача
    #38735426
netivan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Marina222,

а где учитесь?
...
Рейтинг: 0 / 0
Как накормить животных в зоопарке? - задача
    #38735429
Alex Kuznetsov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PallarisМарина, дополни свою прогу чем-то таким.
Код: 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.
public class Zoo
{
     List<Animal> _animals = new List<Animal>();
     List<Food> _foodBank = new List<Food>();

     public void FeedAnimal(Animal animal, Food food)
     {
          if (food == null || animal == null)
              return;
          animal.IsFed = true;
          _foodBank.Remove(food);
     }

     public Food PickFoodForAnimal(Animal animal)
     {
         foreach (Food food in _foodBank)
         {
              if (animal.CanEat(food))
                  return food;

         }
         return null;
     }

     public void FeedAll()
     {
          foreach (Animal animal in _animals)
          {
                FeedAnimal(animal, PickFoodForAnimal(animal));
          }
     }
}



ну и дальше через класс Zoo работаем
Садись, два... Отгадай почему...
...
Рейтинг: 0 / 0
Как накормить животных в зоопарке? - задача
    #38735449
Pallaris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex KuznetsovСадись, два... Отгадай почему...

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

а где учитесь?Пособия ещё не оформляла. И уж конечно же не столько сколько в России. Туда выехать не получилось. Я нахожусь на Украине. Здесь и учусь в лесу. Здесь была раньше турбаза, а теперь беженцы. Так что даже компьютер не всегда свободный, где мне разрешили установить Visual Studio. Так что пользуюсь онлайн-компиляторами... если к интернету доступ есть. И вот skyANA меня учил жизни учиться skyANAMarina222, если Вы ходите на курсы, то должны задавать вопросы и разбирать не понятные моменты с преподавателем, а не просить решить домашнее задание на форуме.Большое ему спасибо за такой полезный совет! Как раз то, чего мне не хватало... Наверно потом он пошёл домой, принял душ, уселся в уютное кресло в чистом мягком халате и решил посмотреть новый фильм в кругу семьи... и совсем без "Градов"... Да, skyANA, большое спасибо за твои бесценные слова мудрости! Буду помнить всегда! Удачи тебе! И всем говори, что ты человечище с "душевным" сердцем"!

Остальным ребяткам - ОГРОМНОЕ Вам спасибо за ваши ценные комментарии!!! Я постараюсь обязательно посмотреть!!! Видела, что были дискуссии по предложенному коду - постараюсь найти ошибки :) Если у кого-то будут конструктивные комментарии - всегда буду рада посмотреть код!!!
...
Рейтинг: 0 / 0
Как накормить животных в зоопарке? - задача
    #38735574
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Marina222И вот skyANA меня учил жизни учиться skyANAMarina222, если Вы ходите на курсы, то должны задавать вопросы и разбирать не понятные моменты с преподавателем, а не просить решить домашнее задание на форуме.Большое ему спасибо за такой полезный совет! Как раз то, чего мне не хватало... Наверно потом он пошёл домой, принял душ, уселся в уютное кресло в чистом мягком халате и решил посмотреть новый фильм в кругу семьи... и совсем без "Градов"... Да, skyANA, большое спасибо за твои бесценные слова мудрости! Буду помнить всегда! Удачи тебе! И всем говори, что ты человечище с "душевным" сердцем"!

можно вопрос?
каким образом skyANA должен был угадать
авторЯ нахожусь на Украине. Здесь и учусь в лесу. Здесь была раньше турбаза, а теперь беженцы. Так что даже компьютер не всегда свободный, где мне разрешили установить Visual Studio.и прочие небылицы перипетии жизни, чтобы воздержаться от столь возмутительного и циничного совета, как обратиться к преподавателю? который, к слову, ОБЯЗАН помогать, используя тот же интернет.
...
Рейтинг: 0 / 0
Как накормить животных в зоопарке? - задача
    #38735662
Alex Kuznetsov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PallarisОтгадал уже?Давай по пунктам:
Код: c#
1.
2.
3.
4.
5.
6.
7.
     public void FeedAnimal(Animal animal, Food food)
     {
          if (food == null || animal == null) //<--Проверка на animal == null не нужна, т.к. он априори не null, потому что для вызова этой функции проходим по коллекции _animals
              return;
          animal.IsFed = true;
          _foodBank.Remove(food);
     }



Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
     public Food PickFoodForAnimal(Animal animal)
     {
         foreach (Food food in _foodBank)
         {
              if (animal.CanEat(food))
                  return food;

         }
         return null;
     }

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


Marina222, нужно уточнение по процессу "кормления"...

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

Скорее всего, задача на виртуальные методы...

PS. Вообще, когда учишься, порой, важнее не текст задачи, а из какого раздела задчника
...
Рейтинг: 0 / 0
Как накормить животных в зоопарке? - задача
    #38735677
Pallaris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex KuznetsovДавай по пунктам:
Код: c#
1.
2.
3.
4.
5.
6.
7.
     public void FeedAnimal(Animal animal, Food food)
     {
          if (food == null || animal == null) //<--Проверка на animal == null не нужна, т.к. он априори не null, потому что для вызова этой функции проходим по коллекции _animals
              return;
          animal.IsFed = true;
          _foodBank.Remove(food);
     }



Ага
Код: c#
1.
2.
3.
4.
5.
6.
7.
public class DrunkenVisitor
{
     public void FeedNothing()
     {
           _zoo.FeedAnimal(null, vodka)
     }
}



В условии задачи чётко не указано, что мы можем "пробегать" по коллекции еды, чтобы накормить животное, таким образом крутить цикл foreach каждый раз для поиска еды не совсем целесообразно.


Ну тогда что-то типа
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
class Food
{
     public FoodType {set;get;}
     public Amount {set;get;}
}

class Zoo
{
     private Dictionary<FoodType, Food> _foodBank;
}



Я например, понял так, что мы можем взять первые десять видов еды из коллекции и ими попытаться "накормить" животных.


Такая вот зоопарковая коллективизация.

PS. Pallaris, шутки надо адекватно воспринимать


Оформляй шутки юмором, тогда я сразу!
...
Рейтинг: 0 / 0
Как накормить животных в зоопарке? - задача
    #38735686
Alex Kuznetsov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PallarisАга
Код: c#
1.
2.
3.
4.
5.
6.
7.
public class DrunkenVisitor
{
     public void FeedNothing()
     {
           _zoo.FeedAnimal(null, vodka)
     }
}


Для того, чтобы DrunkenVisitor не сделал FeedAnimal нужно, чтобы FeedAnimal был private.
Тогда и на null не нужно проверять, а только на IsAlive...
...
Рейтинг: 0 / 0
Как накормить животных в зоопарке? - задача
    #38735699
Pallaris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex KuznetsovДля того, чтобы DrunkenVisitor не сделал FeedAnimal нужно, чтобы FeedAnimal был private.


Есть зоопарки, где в принципе кормить можно животных из спец-пакетов. Перекладывать реализацию кормежки на посетителя? Так на следующий день слона не досчитаешься.

Alex KuznetsovТогда и на null не нужно проверять, а только на IsAlive...

Проверка аргумента на null лишней не бывает - такое мое мнение. Завтра полезут NullReferenceException, когда из соседних зоопарков чужие руки полезут за продуктами.
...
Рейтинг: 0 / 0
Как накормить животных в зоопарке? - задача
    #38735702
Alex Kuznetsov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pallaris...
Проверка аргумента на null лишней не бывает - такое мое мнение. Завтра полезут NullReferenceException, когда из соседних зоопарков чужие руки полезут за продуктами.Это конечно правильно, даже больше сказать - верно, потому что в оценке кода такой пункт имеется...
Ну да ладно, пущай будет, уболтал красноречивый
...
Рейтинг: 0 / 0
Как накормить животных в зоопарке? - задача
    #38735788
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Marina222, да я учу Вас учиться. По примерам из интернета Вы толком не освоити программирование за короткий срок курсов.
Только в группе, только разбирая задачи с другими учениками и преподавателем, что ответит на вопросы и объяснит почему данное решение не работает, или не правильное, хоть и работает.

А беженцам с ЮВ мы с женой собрали гуманитарную помощь и отнесли в ближайший пункт приёма. Вот такие мы недочеловечищи бездушные.

Если объясните толком, что Вы там учите, и к какому разделу относится задача, то я готов Вам помочь и объяснить как правильно.
Ещё раз: по кускам кода из инета толка не выйдет.

Это моё мнение, каким бы циничным оно Вам не казалось.
...
Рейтинг: 0 / 0
Как накормить животных в зоопарке? - задача
    #38735818
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На скорую руку склепал:

Код
Код: 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.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
using System;
using System.Collections.Generic;
using System.Linq;

namespace ConsoleApplication3
{
    public enum FoodType
    {
        None,       // default(FoodType)
        Milk,       // =1
        Meat,       // =2
        Cheese,     // =3 
        Cracker     // =4
    }

    public interface IAnimalVisitor
    {
        void Visit(Animal animal);
    }

    public class BreadwinnerVisitor : IAnimalVisitor
    {
        private readonly IList<FoodType> _foodList;

        public BreadwinnerVisitor(IList<FoodType> foodList)
        {
            _foodList = foodList;
        }

        public void Visit(Animal animal)
        {
            switch (animal.GetType().Name)
            {
                case "Dog":
                    Feed(animal, _foodList.FirstOrDefault(i => i == FoodType.Meat || i == FoodType.Cracker));
                    break;
                case "Cat":
                    Feed(animal, _foodList.FirstOrDefault(i => i == FoodType.Meat || i == FoodType.Milk));
                    break;
                case "Mouse":
                    Feed(animal, _foodList.FirstOrDefault(i => i == FoodType.Cheese || i == FoodType.Cracker));
                    break;
            }
        }

        private void Feed(Animal animal, FoodType food)
        {
            if (default(FoodType) != food)
            {
                animal.IsFed = true;
                animal.IsFedBy = food.ToString();
                _foodList.Remove(food);
            }
        }
    }

    public abstract class Animal
    {
        public String Name { get; set; }
        public bool IsFed { get; set; }
        public string IsFedBy { get; set; }

        public void AcceptVisit(IAnimalVisitor visitor)
        {
            visitor.Visit(this);
        }
    }

    public class Dog : Animal
    {

    }

    public class Cat : Animal
    {

    }

    public class Mouse : Animal
    {

    }

    class Program
    {
        static void Main(string[] args)
        {
            var rnd = new Random(DateTime.Now.Millisecond);

            var animalList = new List<Animal>(new Animal[]
                {
                    new Cat() { Name = "Васька" }, 
                    new Cat() { Name = "Мурка" }, 
                    new Dog() { Name = "Бобик" }, 
                    new Dog() { Name = "Шарик" }, 
                    new Dog() { Name = "Барбос" }, 
                    new Mouse() { Name = "Мышаня" }
                });
            var foodList = new List<FoodType>(Enumerable.Range(0, 40).Select(i => (FoodType)(rnd).Next(1, 5)));

            Console.WriteLine("Present Food:");
            foodList.GroupBy(type => type)
                    .Select(g => new {Food = g.Key, Count = foodList.Count(i => i == g.Key)})
                    .ToList()
                    .ForEach(e => Console.Write("{0} = {1}, ", e.Food, e.Count));
            Console.WriteLine("\r\n\r\nAnimals:");
            animalList.ForEach(a => Console.WriteLine("{0} {1} is {2}", a.GetType().Name, a.Name, a.IsFed ? "fed": "hungry"));
            Console.WriteLine();

            var visitor = new BreadwinnerVisitor(foodList);
            foreach (var animal in animalList)
            {
               visitor.Visit(animal); 
            }

            Console.WriteLine("Remain Food:");
            foodList.GroupBy(type => type)
                    .Select(g => new {Food = g.Key, Count = foodList.Count(i => i == g.Key)})
                    .ToList()
                    .ForEach(e => Console.Write("{0} = {1}, ", e.Food, e.Count));
            Console.WriteLine("\r\n\r\nAnimals:");
            animalList.ForEach(a => Console.WriteLine("{0} {1} is {2}", a.GetType().Name, a.Name, a.IsFed ? "fed by " + a.IsFedBy : "hungry"));

            Console.ReadLine();
        }
    }
}

...
Рейтинг: 0 / 0
Как накормить животных в зоопарке? - задача
    #38736067
Т-Миронов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
        
public void Visit(Animal animal)
        {
            switch (animal.GetType().Name)
            {
                case "Dog":
                    Feed(animal, _foodList.FirstOrDefault(i => i == FoodType.Meat || i == FoodType.Cracker));
                    break;
                case "Cat":
                    Feed(animal, _foodList.FirstOrDefault(i => i == FoodType.Meat || i == FoodType.Milk));
                    break;
                case "Mouse":
                    Feed(animal, _foodList.FirstOrDefault(i => i == FoodType.Cheese || i == FoodType.Cracker));
                    break;
            }
        }



Зато Visit!
...
Рейтинг: 0 / 0
Как накормить животных в зоопарке? - задача
    #38736112
Marina222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сначала офф-топ:Antonariyможно вопрос?
каким образом skyANA должен был угадать
авторЯ нахожусь на Украине. Здесь и учусь в лесу. Здесь была раньше турбаза, а теперь беженцы. Так что даже компьютер не всегда свободный, где мне разрешили установить Visual Studio.и прочие небылицы перипетии жизни,
по поводу "небылиц"... Antonariy, не желаете подумайть о своей карме после обвинений во лжи...

skyANAMarina222, да я учу Вас учиться. По примерам из интернета Вы толком не освоити программирование за короткий срок курсов.
Только в группе, только разбирая задачи с другими учениками и преподавателем, что ответит на вопросы и объяснит почему данное решение не работает, или не правильное, хоть и работает.

А беженцам с ЮВ мы с женой собрали гуманитарную помощь и отнесли в ближайший пункт приёма. Вот такие мы недочеловечищи бездушные.

Если объясните толком, что Вы там учите, и к какому разделу относится задача, то я готов Вам помочь и объяснить как правильно.
Ещё раз: по кускам кода из инета толка не выйдет.

Это моё мнение, каким бы циничным оно Вам не казалось.Подобные задания со списками литературы раздают все крупные компании, по крайней мере, на Украине, по заявке через e-mail и связным объяснением желания заниматься. Естественно, что никаких преподавателей, тем более ОБЯЗАННЫХ что-то делать и meet-up групп для обсуждения заданий нет. Ценится умение работать с литературой и собственное развитие. Так что кроме форумов, "скорой" помощи мне брать не откуда. А если писать вопросы в компанию, то может это какой-то простой вопрос, который был плохо сформулирован... Тогда после нескольких писем на меня "забьют" и даже не станут смотреть задание.

А решения задания, я не собираюсь тупо переписывать, потому что не смогу их объяснить. Поэтому делаю их рефакторинг - до того уровня, пока понятно мне. Также я упрощаю вопросы на форум, чтобы была одна задача, а не несколько. Например, я не указала в задании, что сделала рефлексию родительского класса Animal и список животных сам генерируется случайным образом с возможеностью дополнять новых животных. Чтобы потом подставить откорректированное решение, полученное на форуме в своё задание, потому что я хочу получить удочку, а не рыбу.

Что касается циничности или нет Ваших заявлений, то если человек сам их считает циничными, значит он осознанно делаете мир более циничным и это скорее раньше, чем позже вернётся обраткой. Особенно на форуме.

По поводу предложений помощи - я рада любой помощи. Особенно по существу задаваемого вопроса. Поэтому огромное спасибо всем ответившим и принявшим участие в обсуждении с примерами и комментариями, особенно Arm79, Pallaris, Alex Kuznetsov !!!! Очень благодарна Вам! Дай бог Вам здоровья и счастья!

Честно скажу, что само решение пока несколько сложно для меня. Но я буду разбираться. Также у меня в функционале есть некоторые вопросы и я буду Вам очень благодарна, если Вы подскажете, в чём проблема:
я сделала рефакторинг кода и почему-то без lambda у меня работает метод, а с lambda - не до конца могу сделать рефакторинг:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
        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;
        }



а в этом не могу убрать FoodName
Код: 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)));
            return randomizedFoods;
        }
...
Рейтинг: 0 / 0
Как накормить животных в зоопарке? - задача
    #38736116
Marina222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Т-МироновЗато Visit!
Большое спасибо и Вам, Т-Миронов! :)
...
Рейтинг: 0 / 0
Как накормить животных в зоопарке? - задача
    #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
47 сообщений из 47, показаны все 2 страниц
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как накормить животных в зоопарке? - задача
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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