Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/29: Рейтинг темы: голосов - 29, средняя оценка - 4.83
3 / 3 / 0
Регистрация: 11.04.2014
Сообщений: 53

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

02.06.2018, 11:11. Показов 6099. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день.
На основе данных входного файла составить инвентарную ведомость игрушек, включив следующие данные: название игрушки, ее стоимость (в руб.), а также возрастные границы детей, для которых предназначена игрушка. Вывести в новый файл информацию о тех игрушках, которые предназначены для детей от N до M лет, отсортировав записи по стоимости.

Задание почти сделано, но не могу вывести все это в файл.

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
namespace Задание_2
{
    struct Toy
    {
        private string name;
        public int Price { get; }
        public int Up { get; }
        public int Down { get; }
       
 
        public Toy(string name, int price, int down, int up)
        {
            this.name = name;
            Price = price;
            Up = up;
            Down = down;
        }
        public void Show()
        {
            Console.WriteLine("Имя:{0} Цена:{1} от {2} до {3} лет/годов", name, Price, Down, Up);
        }
    }
 
    class Program
    {
        static public Toy[] Input()
        {
            string[] allLines = File.ReadAllLines("input.txt");
            Toy[] array = new Toy[allLines.Length];
            for (int index = 0; index < allLines.Length; index++)
            {
                string line = allLines[index];
                string[] fields = line.Split(';');
                Toy student = new Toy(fields[0], Convert.ToInt32(fields[1]), Convert.ToInt32(fields[2]), Convert.ToInt32(fields[3]));
                array[index] = student;
            }
            return array;
        }
 
        static void Sort(Toy[] a) //Сортировка пузырьком
        {
            Toy temp;
            for (int i = 0; i < a.Length - 1; i++)
            {
                for (int j = a.Length - 1; j > i; j--)
                {
                    if (a[j].Price < a[j - 1].Price) 
                    {
                        temp = a[j];
                        a[j] = a[j - 1];
                        a[j - 1] = temp;
                    }
                }
            }
        }
 
        //неявное преобразование типа
        public static implicit operator string[] (Toy[] array)
        {
            string[] temp = new string[array.Length];
            for (int i = 0; i < array.Length; i++)
            {
                temp[i] = array[i];
            }
            return temp;
        }
 
        static void Main()
        {
            Toy[] array = Input();
            Console.WriteLine("от ");
            int n = int.Parse(Console.ReadLine());
            Console.WriteLine("до ");
            int m = int.Parse(Console.ReadLine());
            Sort(array);
            //Print(array);
            for (int i = 0; i < array.Length; i++)
            {
                if (array[i].Down >= n && array[i].Up <= m)
                {
                    //array[i].Show();
                    string[] linesToSave = new string[array.Length];
                    linesToSave[i] = array[i]; //здесь необходимо преобразование или можно сделать иначе?
                    File.WriteAllLines("output.txt", linesToSave);
                }
            }
            Console.ReadKey();
 
        }
 
 
    }
}
input.txt

misha; 2000; 3; 7;
masha; 2500; 4; 10;
pasha; 1000; 2; 5;
raptor; 12000; 7; 10;
car; 5000; 5; 8;
helicopter; 25000; 10;20;
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
02.06.2018, 11:11
Ответы с готовыми решениями:

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

Файл Assort, содержащий сведения об игрушках. Для детей какого возраста предназначается конструктор?
Дан файл Assort, содержащий сведения об игрушках: указывается название игрушки, ее стоимость в рублях и возрастные границы (например,...

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

6
 Аватар для Shogun31337
557 / 534 / 225
Регистрация: 02.11.2016
Сообщений: 1,538
02.06.2018, 23:48
Цитата Сообщение от GaGaReG Посмотреть сообщение
но не могу вывести все это в файл
Вы создаете выходной массив внутри цикла и фактически в него попадает только последняя строка. Чтобы сохранялись все строки нужно вынести за пределы цикла создание массива и сохранение в файл. Т.е. так:
C#
1
2
3
4
5
6
7
8
9
10
11
12
            string[] linesToSave = new string[array.Length];
            for (int i = 0; i < array.Length; i++)
            {
                if (array[i].Down >= n && array[i].Up <= m)
                {
                    //array[i].Show();
                    
                    linesToSave[i] = array[i]; //здесь необходимо преобразование или можно сделать иначе?
                    
                }
            }
            File.WriteAllLines("output.txt", linesToSave);
Также, учитывая, что выходной массив будет меньше исходного, то смысла создавать массив такого же размера нет. Правильнее будет использовать List<string> вместо string[]. Т.е. так:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
            List<string> linesToSave = new List<string>();
            for (int i = 0; i < array.Length; i++)
            {
                if (array[i].Down >= n && array[i].Up <= m)
                {
                    //array[i].Show();
                    
                    linesToSave.Add(array[i]);
                    
                }
            }
            //Тут не помню можно ли передавать список или обязательно преобразовывать в массив...
            File.WriteAllLines("output.txt", linesToSave.ToArray());
В итоге, в отличие от Вашего варианта, Вы получите файл без пустых строк
1
3 / 3 / 0
Регистрация: 11.04.2014
Сообщений: 53
03.06.2018, 09:32  [ТС]
Спасибо за ответ, я просто не знаю что такое List<string>, поскольку мы не проходили этого, поэтому пытался решить задачу знаниями, которые давались в методички.
Можете подсказать как сделать преобразование? Я вроде бы его сделал, но оно всё никак не работает.
0
 Аватар для Shogun31337
557 / 534 / 225
Регистрация: 02.11.2016
Сообщений: 1,538
03.06.2018, 09:55
Цитата Сообщение от GaGaReG Посмотреть сообщение
Можете подсказать как сделать преобразование?
Преобразование чего? Если речь о замене string[] на List<string>, так я уже показал в предыдущем посте.
0
3 / 3 / 0
Регистрация: 11.04.2014
Сообщений: 53
03.06.2018, 12:50  [ТС]
Я про вот это
Миниатюры
Файл:  Вывести в новый файл информацию о тех игрушках, которые предназначены для детей от N до M лет...  
0
 Аватар для Shogun31337
557 / 534 / 225
Регистрация: 02.11.2016
Сообщений: 1,538
03.06.2018, 13:21
Лучший ответ Сообщение было отмечено GaGaReG как решение

Решение

Цитата Сообщение от GaGaReG Посмотреть сообщение
Я про вот это
Аааа! Ну, в таком случае и Ваш код с массивами бы не сработал... Я то даже не обратил внимания какого типа массив array и думал, что это массив строк.
В таком случае Вам нужно в класс Toy добавить метод ToString(), который будет преобразовывать экземпляр класса в строку. Т.е. что то вроде такого должно получиться:
C#
1
2
3
4
5
6
public string ToString()
{
    return string.Format("Имя:{0} Цена:{1} от {2} до {3} лет/годов", name, Price, Down, Up);
    //Или, если пишите на C# v7, можно в таком виде:
    //return $"Имя:{name} Цена:{Price} от {Down} до {Up} лет/годов";
}
И уже далее использовать этот метод:
C#
1
linesToSave.Add(array[i].ToString());
1
3 / 3 / 0
Регистрация: 11.04.2014
Сообщений: 53
03.06.2018, 20:31  [ТС]
Теперь всё работает, большое спасибо. Конечный вариант, вдруг кому-то понадобиться.

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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
 
//На основе данных входного файла составить инвентарную ведомость игрушек, включив
//следующие данные: название игрушки, ее стоимость(в руб.), а также возрастные границы
//детей, для которых предназначена игрушка.Вывести в новый файл информацию о тех
//игрушках, которые предназначены для детей от N до M лет, отсортировав записи по
//стоимости
namespace Задание_2
{
    struct Toy
    {
        private string name;
        public int Price { get; }
        public int Up { get; }
        public int Down { get; }
       
 
        public Toy(string name, int price, int down, int up)
        {
            this.name = name;
            Price = price;
            Up = up;
            Down = down;
        }
        public void Show()
        {
            Console.WriteLine("Имя:{0} Цена:{1} от {2} до {3} лет/годов", name, Price, Down, Up);
        }
        public override string ToString()
        {
            return string.Format("Имя:{0} Цена:{1} от {2} до {3} лет/годов", name, Price, Down, Up);
        }
    }
 
    class Program
    {
        static public Toy[] Input()
        {
            string[] allLines = File.ReadAllLines("input.txt");
            Toy[] array = new Toy[allLines.Length];
            for (int index = 0; index < allLines.Length; index++)
            {
                string line = allLines[index];
                string[] fields = line.Split(';');
                Toy student = new Toy(fields[0], Convert.ToInt32(fields[1]), Convert.ToInt32(fields[2]), Convert.ToInt32(fields[3]));
                array[index] = student;
            }
            return array;
        }
 
        static void Sort(Toy[] a) //Сортировка пузырьком
        {
            Toy temp;
            for (int i = 0; i < a.Length - 1; i++)
            {
                for (int j = a.Length - 1; j > i; j--)
                {
                    if (a[j].Price < a[j - 1].Price) 
                    {
                        temp = a[j];
                        a[j] = a[j - 1];
                        a[j - 1] = temp;
                    }
                }
            }
        }
 
        static void Main()
        {
            Toy[] array = Input();
            Console.WriteLine("от ");
            int n = int.Parse(Console.ReadLine());
            Console.WriteLine("до ");
            int m = int.Parse(Console.ReadLine());
            Sort(array);
            List<string> linesToSave = new List<string>();
            for (int i = 0; i < array.Length; i++)
            {
                if (array[i].Down >= n && array[i].Up <= m)
                {
                    linesToSave.Add(array[i].ToString());
                }
            }
            File.WriteAllLines("output.txt", linesToSave.ToArray());
            Console.ReadKey();
        }
    }
}
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
03.06.2018, 20:31
Помогаю со студенческими работами здесь

Сформировать файл, который содержит название игрушек, ценв которых не превышают 20грн подходит для детей до 5 лет
Создать файл, который имеет ведомости о игрушках:название игрушки, стоимость, возрастные ограничения,. Используя эти даные сформировать...

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


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
Программный отбор значений справочника
Maks 21.03.2026
Установка программного отбора значений справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит предопределенное значение перечислений. Процедура. . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru