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

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

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

Author24 — интернет-сервис помощи студентам
Добрый день.
На основе данных входного файла составить инвентарную ведомость игрушек, включив следующие данные: название игрушки, ее стоимость (в руб.), а также возрастные границы детей, для которых предназначена игрушка. Вывести в новый файл информацию о тех игрушках, которые предназначены для детей от 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)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.06.2018, 11:11
Ответы с готовыми решениями:

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

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

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

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

6
557 / 534 / 225
Регистрация: 02.11.2016
Сообщений: 1,538
02.06.2018, 23:48 2
Цитата Сообщение от 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  [ТС] 3
Спасибо за ответ, я просто не знаю что такое List<string>, поскольку мы не проходили этого, поэтому пытался решить задачу знаниями, которые давались в методички.
Можете подсказать как сделать преобразование? Я вроде бы его сделал, но оно всё никак не работает.
0
557 / 534 / 225
Регистрация: 02.11.2016
Сообщений: 1,538
03.06.2018, 09:55 4
Цитата Сообщение от GaGaReG Посмотреть сообщение
Можете подсказать как сделать преобразование?
Преобразование чего? Если речь о замене string[] на List<string>, так я уже показал в предыдущем посте.
0
3 / 3 / 0
Регистрация: 11.04.2014
Сообщений: 53
03.06.2018, 12:50  [ТС] 5
Я про вот это
Миниатюры
Файл:  Вывести в новый файл информацию о тех игрушках, которые предназначены для детей от N до M лет...  
0
557 / 534 / 225
Регистрация: 02.11.2016
Сообщений: 1,538
03.06.2018, 13:21 6
Лучший ответ Сообщение было отмечено 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  [ТС] 7
Теперь всё работает, большое спасибо. Конечный вариант, вдруг кому-то понадобиться.

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
03.06.2018, 20:31
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.06.2018, 20:31
Помогаю со студенческими работами здесь

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


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

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