0 / 0 / 0
Регистрация: 05.10.2018
Сообщений: 27
1

Структура: Как используя структуры можно вывести информацию о самом молодом, легком, длинном коте?

17.10.2018, 12:30. Показов 3030. Ответов 11
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Есть задача про котов, у каждого кота есть вес, цвет, имя, возраст, рост(длина) кота.
Как используя структуры можно вывести информацию о самом молодом, легком, длинном коте?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.10.2018, 12:30
Ответы с готовыми решениями:

Вывести информацию о самом молодом, рослом и лёгком участнике
Условие:Вывести информацию о самом молодом, рослом и лёгком участнике. Нужно исользовать лямбда...

Вывести информацию о самом молодом студенте
Информация о группе студентов хранится в файле прямого доступа. Структура записи имеет следующий...

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

Найти информацию о самом молодом читателе библиотеки
помогите с задачкой: создать файл "Библиотека", включающий информацию: фамилия читателя, год...

11
Модератор
Эксперт .NET
15466 / 10712 / 2786
Регистрация: 21.04.2018
Сообщений: 31,536
Записей в блоге: 2
17.10.2018, 12:34 2
Цитата Сообщение от ITSSS Посмотреть сообщение
Есть задача про котов, у каждого кота есть вес, цвет, имя, возраст, рост(длина) кота.
Как используя структуры....
Дайте Вашу структуру и пример со списком из нескольких заполненных структур.
1
0 / 0 / 0
Регистрация: 05.10.2018
Сообщений: 27
17.10.2018, 12:41  [ТС] 3
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
using System;
 
struct Cats
{
    public string name;
    public short age;
    public ushort height;
    public short weight;
}
 
public class Program
{
    public static void Main(string[] args)
    {
 
        Cats one;
       
        one.name = "Barsik";
        one.age = 6;
        one.height = 35;
        one.weight = 4;
 
        Cats two;
 
        two.name = "Murzik";
        two.age = 4;
        two.height = 20;
        two.weight = 2;
 
        Cats three;
        three.name = "Snejock";
        three.age = 5;
        three.height = 25;
        three.weight = 3;
 
        Cats four;
        four.name = "Pushistick";
        four.age = 6;
        four.height = 30;
        four.weight = 5;
 
        }
    }
0
Модератор
Эксперт .NET
15466 / 10712 / 2786
Регистрация: 21.04.2018
Сообщений: 31,536
Записей в блоге: 2
17.10.2018, 13:22 4
Лучший ответ Сообщение было отмечено ITSSS как решение

Решение

Вы неправильно создаёте список структур. У Вас должен получится, допустим, List<Cats>. Название структуры тоже не соответствует смыслу. В одной структуре данные об одном коте, а не о многих.
По Вашему примеру надо примерно сделать так
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
using System;
 
struct Cat
{
    public string name;
    public int age;
    public int height;
    public int weight;
}
 
public class Program
{
    public static void Main(string[] args)
    {
 
       List <Cat> Cats = new List <Cat>();
       
        Cats.Add( new Cat()
                       {
                             name = "Barsik",
                             age = 6,
                             height = 35,
                             weight = 4
                         }
                      );
         Cats.Add( new Cat()
                       {
                             name = "Murzik",
                             age = 4,
                             height = 20,
                             weight = 2
                         }
                      );
          Cats.Add( new Cat()
                       {
                             name = "Murzik",
                             age = 4,
                             height = 20,
                             weight = 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
25
       List <Cat> Cats = new List <Cat>()
                  {
                       new Cat()
                       {
                             name = "Barsik",
                             age = 6,
                             height = 35,
                             weight = 4
                       },
                       new Cat()
                       {
                             name = "Murzik",
                             age = 4,
                             height = 20,
                             weight = 2
                       },
                       new Cat()
                       {
                             name = "Murzik",
                             age = 4,
                             height = 20,
                             weight = 2
                         },
 // Далее для других котов.
              };
Добавлено через 6 минут
В структуре все числовые значения заменил на int, чтобы избежать в дальнейшем излишних преобразований типов.
Теперь имея правильный список можно получить
C#
1
2
3
int МинимальныйВозраст = Cats.Select(cat => cat.age).Min();
int МинимальныйВес = Cats.Select(cat => cat.weight).Min();
int МаксимальныйРазмер = Cats.Select(cat => cat.height).Max();
Добавлено через 3 минуты
Имея эту информацию можно получить списки котов у которых этот параметр совпадает.
C#
1
2
3
List<Cat> СамыеМолодые =  Cats.Where(cat => cat.age == МинимальныйВозраст).ToList();
List<Cat> СамыеЛёгкие =  Cats.Where(cat => cat.weight == МинимальныйВес).ToList();
List<Cat> СамыеДлинные =  Cats.Where(cat => cat.height== МаксимальныйРазмер).ToList();
Добавлено через 1 минуту
Если в каком-то списке один кот, то значит с таким параметром имеется только один.
Если в списке ноль котов - значит где-то произошла ошибка. Надо перепроверить код.

Добавлено через 4 минуты
Так же не совсем концептуально верно создаёте структуру.
Если интересно почему - напишите.
1
0 / 0 / 0
Регистрация: 05.10.2018
Сообщений: 27
17.10.2018, 13:26  [ТС] 5
Почему?
По материалам учебного заведения, структуры объявляются как-то так:

C#
1
2
3
public struct PostalAddress{
// Fields, properties, methods and events go here...
}
ИЛИ

Вот простой пример структуры С#:// Вначале нам потребуется перечисление
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 enum EmpType: byte{
Manager = 10,
Grunt = 1,
Contractor = 100,
VP = 9
}
struct Employee {
publicEmpTypetitle;    // Одно из полей структуры –перечисление
public string name; 
public short deptID; 
}
class StructTester {
public static int Main(string[] args) {// Создаем и присваиваем значения работнику
Employeefred;
fred.deptID = 40;
fred.name = "Fred";
fred.title = EmpType.Grunt;
return 0;}}
0
Модератор
Эксперт .NET
15466 / 10712 / 2786
Регистрация: 21.04.2018
Сообщений: 31,536
Записей в блоге: 2
17.10.2018, 13:52 6
Лучший ответ Сообщение было отмечено ITSSS как решение

Решение

Цитата Сообщение от ITSSS Посмотреть сообщение
Почему?
По материалам учебного заведения, структуры объявляются как-то так:
Если Вы в дальнейшем будете программистом, то обязательно будете использовать сторонние классы, структуры. Хотя бы Net. Обратите внимание, что ни где для внешнего взаимодействия не используются поля. Это принципиально. Во многих случаях, Вы поля просто не сможете использовать или подключить к внешним классам. Допусти создавая структуру для источника данных, у Вас элементы окна просто не смогут отображать поля.
Поэтому структуру или класс надо создавать так (для Вашего случая)
C#
1
2
3
4
5
6
7
struct Cat
{
    public string Name {get; set;}
    public int Age {get; set;}
    public int Height {get; set;}
    public int Weight {get; set;}
}
Добавлено через 12 минут
Так же надо прописывать часто используемые приёмы для работы со структурой в методах структуру. Допустим в Вашем случае метод создания структуры из строки (без проверок на корректность)
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
struct Cat
{
    public string Name {get; set;}
    public int Age {get; set;}
    public int Height {get; set;}
    public int Weight {get; set;}
    // Создание из строки одного экземпляра
    static Cat CreateFromString (string DataString)
    {
        string[] str = DataString.Split(new char[]{' '},StringSplitOptions.RemoveEmptyEntries);
        return new Cat() {Name=str[0],  Age=int.Parse(str[1]), Height =int.Parse(str[2]), Weight =int.Parse(str[3])};
    }    
    // Создание из строки списка экземпляров
    static List<Cat> CreateListFromString (string DataString)
    {
        List<string> l_str = DataString.Split(new char[]{'\r','\n' ,'\\'},StringSplitOptions.RemoveEmptyEntries).ToList();
        return l_str.Select(str => Cat.CreateFromString(str.Trim())).ToList();
    }
}
Добавлено через 3 минуты
В таком случае новый экземпляр Вы можете создать так
C#
1
Cat MyCat = Cat.CreateFromString("Murzik 4 20 2")
А список так
C#
1
List<Cat> Cats = Cat.CreateListFromString ("Barsik 6 35 4 \\ Murzik 4 20 2")
Намного удобнее же такое использование?
1
0 / 0 / 0
Регистрация: 05.10.2018
Сообщений: 27
17.10.2018, 13:54  [ТС] 7
Спасибо
0
Модератор
Эксперт .NET
15466 / 10712 / 2786
Регистрация: 21.04.2018
Сообщений: 31,536
Записей в блоге: 2
17.10.2018, 13:56 8
Цитата Сообщение от ITSSS Посмотреть сообщение
Спасибо
Извиняюсь... Писал здесь - по запарке пропустил. В объявлениях методов перед static надо дописать public.
1
1123 / 794 / 219
Регистрация: 15.08.2010
Сообщений: 2,185
17.10.2018, 14:32 9
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Поэтому структуру или класс надо создавать так (для Вашего случая)
только сеттеры бы убрать) а то мутабельность
1
Модератор
Эксперт .NET
15466 / 10712 / 2786
Регистрация: 21.04.2018
Сообщений: 31,536
Записей в блоге: 2
17.10.2018, 15:36 10
Цитата Сообщение от КОП Посмотреть сообщение
только сеттеры бы убрать) а то мутабельность
Тогда конструктор объявлять надо.... и т.д.
1
0 / 0 / 0
Регистрация: 05.10.2018
Сообщений: 27
17.10.2018, 17:14  [ТС] 11
Применил полученные знания на задании, как теперь вывести всю информацию о самом молодом, самом высоком и самом легком спортсмене? Т.е. если есть Adam Smith и он самый молодой, то нужно всю информацию про него вывести.

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
using System;
using System.Collections.Generic;
using System.Linq;
 
struct Athlet
{
    public string country;
    public string team;
    public string fullname;
    public short id;
    public int age;
    public int height;
    public int weight;
}
 
public class Program
{
    public static void Main(string[] args)
    {
 
        List<Athlet> Athletes = new List<Athlet>();
 
        Athletes.Add(new Athlet()
        {
            country = "Russia",
            team = "Bear",
            fullname = "Volkov Alexand Daniilovich",
            id = 10,
            age = 29,
            height = 187,
            weight = 89
        }
                      );
        Athletes.Add(new Athlet()
        {
            country = "Russia",
            team = "Bear",
            fullname = "Kosyak Ustin Anatolievich",
            id = 17,
            age = 24,
            height = 167,
            weight = 73
        }
                      );
        Athletes.Add(new Athlet()
        {
            country = "japan",
            team = "Tree",
            fullname = "Murakami Yashimoto",
            id = 24,
            age = 27,
            height = 154,
            weight = 68
        }
                    );
        Athletes.Add(new Athlet()
        {
            country = "japan",
            team = "Tree",
            fullname = "Suzuki Miyato",
            id = 5,
            age = 35,
            height = 176,
            weight = 75
        }
                    );
        Athletes.Add(new Athlet()
        {
            country = "USA",
            team = "Bull",
            fullname = "Chris Brown",
            id = 3,
            age = 26,
            height = 183,
            weight = 81
        }
                    );
        Athletes.Add(new Athlet()
        {
            country = "USA",
            team = "Bull",
            fullname = "Adam Smith",
            id = 41,
            age = 19,
            height = 161,
            weight = 65
        }
                    );
 
        int MinAge = Athletes.Select(Athlet => Athlet.age).Min();
        int MaxHeight = Athletes.Select(Athlet => Athlet.height).Max();
        int MinWeight = Athletes.Select(Athlet => Athlet.weight).Min();
 
    }
}
0
Модератор
Эксперт .NET
15466 / 10712 / 2786
Регистрация: 21.04.2018
Сообщений: 31,536
Записей в блоге: 2
17.10.2018, 17:32 12
Лучший ответ Сообщение было отмечено ITSSS как решение

Решение

Цитата Сообщение от ITSSS Посмотреть сообщение
Т.е. если есть Adam Smith и он самый молодой, то нужно всю информацию про него вывести.
C#
1
2
3
4
5
List <Athlet> СамыеМолодые = Athletes.Where(ath => ath.age == MinAge).ToList();
foreach (Athlet athl in  СамыеМолодые)
{
     Console.WriteLine($"Имя {athl.fullname}, возраст {athl.age}, страна {athl.country}");
}
Добавлено через 1 минуту
Ещё короче
C#
1
2
3
4
foreach (Athlet athl in  Athletes.Where(ath => ath.age == MinAge))
{
     Console.WriteLine($"Имя {athl.fullname}, возраст {athl.age}, страна {athl.country}");
}
1
17.10.2018, 17:32
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.10.2018, 17:32
Помогаю со студенческими работами здесь

Написать friend функцию, которая выведет информацию о самом легком спортсмене в команде
Здравствуйте помогите написать функцию друг которая выводит информацию о самом легком спотсмене...

Получить информацию о самом молодом учителе среди тех, которые имеют наибольшее количество детей
Существует файл, содержащий сведения об учителях некоторой школы: фамилия учителя; семейное...

Вывести данные о самом молодом сотруднике
Помогите пожалуйста с программой Поля записи: Фамилия, Имя, Отчество, Должность, Зарплата, Дата...

Вывести сведения о самом молодом человеке
Для задания описано название структуры и та информация, которая содержится во входном файле. Вся...


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

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

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