Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
35 / 35 / 4
Регистрация: 27.05.2012
Сообщений: 173
Записей в блоге: 5
1

Вывести названия моделей машин, если их максимальная скорость больше 180 кмч

07.06.2012, 23:35. Просмотров 2094. Ответов 20
Метки нет (Все метки)

Недавно озадачился избыточностью кода, сейчас стал пытаться над этим активно работать. В связи с этим, решил посравнивать свои коды с другими участниками.
Итак, есть детская задачка (возможно она не очень подходит под данную тему из-за своей простоты, просто недавно пытался ее красиво написать, т.е. готовое решение есть), итак, задача:

"Известны максимальные скорости 10-ти моделей машин. Вывести названия моделей если их максимальная скорость больше 180 кмч."
(Простое консольное приложение, модели машин пользователь вбивает вручную, макс скорость генерится классом рандом. После, выводится весь список моделей с отметкой моделей, чья скорость больше 180.)

Свой код не хочу выкладывать первым, выложу например вторым))...еще, большая просьба тем кто будет, выкладывать свой умственный труд, не смотреть предыдущие работы, прочитать задание - написать - выложить - а потом сравнить с другими.

И еще, может кто нибудь предложить какую-нить интересную задачку, которая хорошо подходит для такого рода баттла?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.06.2012, 23:35
Ответы с готовыми решениями:

Напечатать названия моделей,у которых максимальная скорость превышает 180 км/ч
Известны максимальные скорости 20-ти моделей легковых автомобилей.Все значения выражены в...

Напечатать названия моделей авто, у которых максимальная скорость больше 180 км/ч
Известны максимальные скорости 20 моделей легковых автомобилей. Все значения выражены в км/ч....

Напечатать названия моделей авто, у которых максимальная скорость превышает 180 км/ч
Известны максимальные скорости 20-ти моделей легковых автомобилей.Все значения выражены в...

Напечатать названия моделей автомобилей, у которых максимальная скорость превышает 180 км/ч
Известны максимальные скорости 20-ти моделей легковых автомобилей.Все значения выражены в...

20
Эксперт С++
1750 / 1621 / 232
Регистрация: 03.05.2011
Сообщений: 3,612
Записей в блоге: 6
07.06.2012, 23:54 2
Цитата Сообщение от vladimir8686 Посмотреть сообщение
Известны максимальные скорости
Цитата Сообщение от vladimir8686 Посмотреть сообщение
макс скорость генерится классом рандом
так известны или генерируются? Лично я понимаю под словом "известно" постоянное число - константа. 10 машин, у 6 скорость меньше 180 км\ч, через if выводите их, решение в несколько строк.
0
35 / 35 / 4
Регистрация: 27.05.2012
Сообщений: 173
Записей в блоге: 5
08.06.2012, 00:00  [ТС] 3
Цитата Сообщение от _lunar_ Посмотреть сообщение
так известны или генерируются? Лично я понимаю под словом "известно" постоянное число - константа. 10 машин, у 6 скорость меньше 180 км\ч, через if выводите их, решение в несколько строк.
генерируются, а то было бы совсем не интересно...
у меня получилось 50 строк)
0
184 / 184 / 53
Регистрация: 10.04.2009
Сообщений: 491
08.06.2012, 00:13 4
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
    class Program
    {
        class Car
        {
            public int Speed { get; set; }
            public string Name { get; set; }
        }
        static void Main(string[] args)
        {
            var randomer = new Random();
            Enumerable.Range(0, 9)
            .Select(s => new Car() { Speed = randomer.Next(100, 300), Name = string.Format("Car - {0}", Guid.NewGuid().ToString()) })
            .Where(w => w.Speed > 180).ToList()
            .ForEach(each => Console.WriteLine(string.Format("Car: {0} with speed {1}", each.Name, each.Speed)));
        }
    }
1
35 / 35 / 4
Регистрация: 27.05.2012
Сообщений: 173
Записей в блоге: 5
08.06.2012, 00:31  [ТС] 5
Цитата Сообщение от andrii Посмотреть сообщение
C#
1
2
3
4
5
    class Program
    {
        class Car
       ....
    }
Класс! Есть конечно некоторые недоработки, но код все равно суперский!
Мой по сравнению с ним будет выглядеть просто детским, хотя сейчас, по сравнению с моим предыдущим, смотрится не плохо)
Выкладываю вторым, как и обещал:
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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace TestApplication
{
    class Mass_Class
    {
        Mass_Class[] _myMass = new Mass_Class[10];
        static Random r = new Random();
        string _model;
        int _speed;
 
        public Mass_Class() { }
 
        public Mass_Class(string model, int speed)
        {
            _model = model;
            _speed = speed;
        }
 
        public void Create_Model()
        {
            for (int i = 0; i < _myMass.Length; i++)
            {
                Console.WriteLine("Enter the model name: ");
                _myMass[i] = new Mass_Class(Console.ReadLine(), r.Next(220));
                Console.Clear();
            }
        }
 
        public void Show_Models()
        {
            Console.WriteLine("All models:\n");
            for (int i = 0; i < _myMass.Length; i++)
            {
                Console.Write((i + 1) + ": " + _myMass[i]._model);
                if (_myMass[i]._speed > 180)
                {
                    Console.Write(" | has max speed: " + _myMass[i]._speed + "\n");
                }
                else Console.Write("\n");
            }
            Console.ReadLine();
        }
    }
}
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace TestApplication
{
    class Program
    {
        static void Main(string[] args)
        {
            Mass_Class mc = new Mass_Class();
            mc.Create_Model();
            mc.Show_Models();
        }
    }
}
Критика приветствуется..
Так же хочется видеть, другие работы..
0
6009 / 3416 / 335
Регистрация: 14.06.2009
Сообщений: 8,136
Записей в блоге: 2
08.06.2012, 00:43 6
Цитата Сообщение от vladimir8686 Посмотреть сообщение
у меня получилось 50 строк)
дело ведь не в количестве строк
Любой дурак может написать программу, которую поймет компилятор.
Хорошие программисты пишут программы, которые смогут понять другие программисты.

© Мартин Фаулер
Вот мой код
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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Введите названия моделей через пробел и нажмите ввод");
            string[] mas = Console.ReadLine().TrimEnd().Split(' ');
            List<Car> cars = new List<Car>();
            Random r = new Random();
 
            foreach (var m in mas)
                cars.Add(new Car { Name = m, MaxSpeed = r.Next(100, 300) });
 
            var newList = cars.Where(c => c.MaxSpeed > 180).OrderBy(c => c.MaxSpeed);
            foreach (var n in newList)
                Console.WriteLine("{0} - {1}", n.Name, n.MaxSpeed);
            Console.ReadLine();
        }
    }
    class Car
    {
        public string Name { get; set; }
        public int MaxSpeed { get; set; }
    }
}
0
Злой няш
1521 / 1185 / 407
Регистрация: 05.04.2010
Сообщений: 2,081
08.06.2012, 00:44 7
Code
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
using System.Linq;
 
internal class Program
{
    private static void Main()
    {
        var models = new[] {"Bentley", "Mazda", "Caribbean", "Nissan", "Ferrari", "Studebaker", "ClassicBus", "BMW", "Mercedes", "Trabant"};
        var random = new System.Random();
        var cars = Enumerable.Range(0, models.Length).Select(x =>
                                                                 {
                                                                     var car = new {Model = models[x], Speed = random.NextDouble() * 100 + 100};
                                                                     System.Console.WriteLine("{0} - {1:0.00}", car.Model, car.Speed);
                                                                     return car;
                                                                 }).Where(car => car.Speed > 180).ToList();
        System.Console.WriteLine("\nРезультат:");
        cars.ForEach(x => System.Console.WriteLine("{0} - {1:0.00}", x.Model, x.Speed));
    }
}
0
6009 / 3416 / 335
Регистрация: 14.06.2009
Сообщений: 8,136
Записей в блоге: 2
08.06.2012, 01:09 8
andrii, твой код элегантен (+1), но не организован ввод машин вручную.
Поражает схожесть мыслей по поводу ввода скорости и создания класса

Добавлено через 23 минуты
Цитата Сообщение от vladimir8686 Посмотреть сообщение
Критика приветствуется
Ну коли уж шла речь о лаконичности, рекомендую обратить взор на Linq. Как видно из примеров выше код от этого сокращается в разы

метод Show_Models() работает как-то странно: выводит все машины, но скорость показывает только, если она больше 180. Даже с циклом лучше сделать так
C#
1
2
3
4
5
6
7
8
        public void Show_Models()
        {
            Console.WriteLine("All models:");
            for (int i = 0; i < _myMass.Length; i++)                            
                if (_myMass[i]._speed > 180)                
                    Console.WriteLine("{0}: {1} | has max speed: {2}",i + 1, _myMass[i]._model, _myMass[i]._speed);                                            
            Console.ReadLine();
        }
Смущает использование Console.Write("\n"), а не Console.WriteLine()
1
Каратель
Эксперт С++
6586 / 4007 / 400
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
08.06.2012, 01:18 9
а почему бы не сделать Car структурой?
0
35 / 35 / 4
Регистрация: 27.05.2012
Сообщений: 173
Записей в блоге: 5
08.06.2012, 01:43  [ТС] 10
Цитата Сообщение от nio Посмотреть сообщение
Ну коли уж шла речь о лаконичности, рекомендую обратить взор на Linq. Как видно из примеров выше код от этого сокращается в разы
Я на главе Linq как раз остановился))...просто когда полистал ее, показалось , что это такие дебри, и решил чтобы окончательно не запутаться, пока закрепить пройденную теорию.. Я как раз хотел спросить, что это за штука такая модная "=>", теперь понимаю, что это из той оперы))

Цитата Сообщение от nio Посмотреть сообщение
метод Show_Models() работает как-то странно: выводит все машины, но скорость показывает только, если она больше 180
Так было специально задумано, чтобы сразу в глаза бросались искомые результаты..

Цитата Сообщение от nio Посмотреть сообщение
"{0}: {1} | has max speed: {2}",i + 1, _myMass[i]._model,
Вот эта строчка, мне очень нравиться, спасибо, возьму на заметку..


Цитата Сообщение от nio Посмотреть сообщение
Смущает использование Console.Write("\n"), а не Console.WriteLine()
Вот это я действительно лажанул, аж стыдно))..Я так-то наоборот Write никогда не использую, просто когда пытался правильный вывод в цикле организовать с дополнительным выводом в строке от условия, видимо сильно увлекся, и Write("\n") засунул))

Добавлено через 1 минуту
Цитата Сообщение от Jupiter Посмотреть сообщение
а почему бы не сделать Car структурой?
А что это дает? можно пример кода?

Добавлено через 6 минут
Еще несколько вопросов появилось:

1. Что важнее при собеседовании на работу, понятность кода или эффект его профессионализма (т.е. выглядит классно, но надо чуть подумать чтобы в него вникнуть)?

2. И еще, почему все сплошь и рядом используют тип var?? По теории которой я учился, везде пишут, что использование var не желательно, или это фишка Linq такая??
0
Jupiter
08.06.2012, 01:54
  #11

Не по теме:

Цитата Сообщение от Jupiter Посмотреть сообщение
а почему бы не сделать Car структурой?
сел писать, вопрос отпал:)

0
101 / 101 / 12
Регистрация: 21.11.2011
Сообщений: 169
08.06.2012, 08:14 12

Не по теме:

Цитата Сообщение от vladimir8686 Посмотреть сообщение
Я как раз хотел спросить, что это за штука такая модная "=>", теперь понимаю, что это из той оперы))
Не из этой. Это отдельное понятие.
http://msdn.microsoft.com/ru-r... 97687.aspx
Цитата Сообщение от vladimir8686 Посмотреть сообщение
По теории которой я учился, везде пишут, что использование var не желательно....
Еще одна жертва безмозглых писак/преподов :facepalm:
Выкинте эту теорию и возмите нормальную.



Добавлено через 33 минуты
C#
1
2
3
4
5
6
7
8
9
10
11
static void Main(string[] args) 
{
    var rnd = new Random(2);
    Console.WriteLine("Введите наименования моделей разделенные пробелом");
    var models = System.Console.ReadLine().Split(new char[] {' '}, StringSplitOptions.RemoveEmptyEntries);
    Console.WriteLine("-------------------");
    foreach (var s in (from model in models
                        let speed = rnd.Next(100, 300)
                        where speed > 180
                        select String.Format("{0}\t{1}", model, speed))) Console.WriteLine(s);
}
0
29 / 31 / 2
Регистрация: 14.04.2012
Сообщений: 152
08.06.2012, 10:03 13
var позволяет компилятору самому определить тип переменной,в linq она может быть просто неизвестна.Насколько я знаю,нежелтельным является использование только типа dynamic.
0
6009 / 3416 / 335
Регистрация: 14.06.2009
Сообщений: 8,136
Записей в блоге: 2
08.06.2012, 10:10 14
Цитата Сообщение от vladimir8686 Посмотреть сообщение
Что важнее при собеседовании на работу, понятность кода или эффект его профессионализма (т.е. выглядит классно, но надо чуть подумать чтобы в него вникнуть)?
На собеседованиях не всегда просят написать код, но уж если попросили, то значение будет иметь и то, и другое. Профессионализм подразумевает понятность (читай цитату выше) и не всегда означает сокращение количества строк.

Цитата Сообщение от vladimir8686 Посмотреть сообщение
почему все сплошь и рядом используют тип var?? По теории которой я учился, везде пишут, что использование var не желательно, или это фишка Linq такая??
Использовать var можно и нужно, но делать нужно это грамотно, главное условие - не должна страдать читабельность кода. Простой пример
C#
1
2
var i = 10;//так делать не желательно
int y = 10;//так правильнее
var - не является частью Linq
0
24 / 24 / 8
Регистрация: 27.02.2010
Сообщений: 74
08.06.2012, 14:58 15
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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
class Program
{
 
    static void Main()
    {
        Random rnd=new Random();
        List<Car> cars = new List<Car>() {new Car("Ваз2101", rnd.Next(150, 190)),
                                          new Car("Субару", rnd.Next(160, 200)),
                                          new Car("Хонда",rnd.Next(160,200)),
                                          new Car("ЗАЗ",rnd.Next(170,190))};
 
        for (int i = 0; i < cars.Count; i++)
        {
            if (cars[i].Speed >= 180)
                Console.WriteLine(cars[i].Name+" "+cars[i].Speed);
        }
       Console.ReadLine();
    }
}
 
class Car
{
    string name;
    int speed;
 
    public string Name
    {
        get { return name; }
    }
 
    public int Speed
    {
        get { return speed; }
    }
 
    public Car(string name, int speed)
    {
        this.name = name;
        this.speed = speed;
    }
}
0
184 / 184 / 53
Регистрация: 10.04.2009
Сообщений: 491
08.06.2012, 15:48 16
Цитата Сообщение от nio Посмотреть сообщение
Использовать var можно и нужно, но делать нужно это грамотно, главное условие - не должна страдать читабельность кода. Простой пример
имхо
C#
1
var value = default(int);
0
35 / 35 / 4
Регистрация: 27.05.2012
Сообщений: 173
Записей в блоге: 5
09.06.2012, 12:25  [ТС] 17
Это понятно, что var надо использовать когда возвращаемое значение не известно, но нафига здесь это использовать?...итак понятно, что машины будут обджект, названия стринг и скорость инт, зачем тратить драгоценные ресурсы компьютера еще и на автоматическое вычисление типа переменной?
Причем все поголовно через var написали, наверно я чего-то не понимаю...

"var rnd = new Random(2);" - вообще не понимаю смысла этой строки..
0
Эксперт .NET
13697 / 10588 / 2788
Регистрация: 17.09.2011
Сообщений: 17,964
09.06.2012, 12:34 18
Цитата Сообщение от vladimir8686 Посмотреть сообщение
нафига здесь это использовать?...итак понятно, что машины будут
Написать var быстрее, чем Car (шифт давить не надо).

Цитата Сообщение от vladimir8686 Посмотреть сообщение
зачем тратить драгоценные ресурсы компьютера еще и на автоматическое вычисление типа переменной?
Вычисление типа переменной происходит на стадии компиляции.
Вам не все равно, сколько времени она будет занимать?
0
48 / 48 / 5
Регистрация: 11.07.2011
Сообщений: 272
09.06.2012, 12:57 19
Цитата Сообщение от vladimir8686 Посмотреть сообщение
"var rnd = new Random(2);" - вообще не понимаю смысла этой строки..
Дело в том, что кому то было лень написать
C#
1
Random rnd = new Random(2);
.
Вот и все. Здесь это не смысла не имеет, зависит от личных предпочтений. Но все же в таких случаях рекомендуется указывать явно.
Если необходимо записать
C#
1
IEnumerable<string> name = names.Where(..........);
То, очевидно, гораздо удобнее будет записать вот так:
C#
1
var name = names.Where(..........);
0
kolorotur
09.06.2012, 13:21     Вывести названия моделей машин, если их максимальная скорость больше 180 кмч
  #20

Не по теме:

Цитата Сообщение от Dimblch Посмотреть сообщение
в таких случаях рекомендуется указывать явно.
Явно рекомендуется указывать тогда, когда из правой части присваивания невозможно сделать вывод о присваиваемом типе (улучшает читаемость) или тогда, когда необходимо воспользоваться свойствами полиморфизма.
В строке var random = new Random() из правой части ясно и четко понятно какого типа создается объект, потому дублировать тип, в общем-то, нет смысла.
Особенно в тех случаях, когда один раз используется класс из какого-нибудь хитрого пространства и нет смысла прописывать это пространство в using, чтобы не засорять шапку.
Сравните:
C#
1
2
Company.Tools.Specialized.Monitoring.Shared.Monitor monitor = new Company.Tools.Specialized.Monitoring.Shared.Monitor();
var monitor = new Company.Tools.Specialized.Monitoring.Shared.Monitor();
Здесь var только улучшает читаемость.

0
09.06.2012, 13:21
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.06.2012, 13:21
Привет! Вот еще темы с ответами:

Напечатать названия моделей, у которых максимальная скорость превышает 180км/ч
Известны максимальные скорости 20-ти моделей легковых автомобилей. Все значения выражены в км/ч....

Если старшая цифра семеричного числа больше в три раза, чем младшая, вывести названия цифр на русском
C#(Дано целое двузначное положительное число в семеричной системе счисления. Написать программу,...

Вывести названия машин, цена которых ниже средней
ввод &lt;марка&gt;,&lt;цена&gt; нескольких машин. вывести названия машин,цена которых ниже средней как это...

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

На сколько процентов увеличится максимальная высота подъема камня, если скорость бросания увеличить на 10 %?
Камень брошен вертикально вверх с некоторой скоростью. На сколько процентов увеличится максимальная...

Скорость распространения волны и максимальная скорость колебаний частиц воздуха
Добрый вечер уважаемые участники форума. Применять уравнение звуковой волны для решения этой...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.