Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Метод пузырька С#

34K
22 мая 2011 года
Dinar1623
57 / / 14.11.2010
Задание:В анкете для каждого из пяти сотрудников приводятся данные: фамилия, зарплата, количество детей.Вывести отсортированный список сотрудников, отражающего доход в семье на человека.
Пользователь пишет в текст боксы фамилии, зарплату и количество детей сотрудников. Я рассчитываю минимальный доход на человека, который записывается в переменные d1...d5 и создаю из этих переменных массив, затем пытаюсь отсортировать его по методу пузырька.
Код:
float a1 = Convert.ToByte(TextBox4.Text);//зарплата 1-го сотрудника
        float b1 = Convert.ToByte(TextBox5.Text);//количество детей 1-го сотрудника
        float a2 = Convert.ToByte(TextBox7.Text);//зарплата 2-го сотрудника
        float b2 = Convert.ToByte(TextBox8.Text);//количество детей 2-го сотрудника
        float a3 = Convert.ToByte(TextBox10.Text);//зарплата 3-го сотрудника
        float b3 = Convert.ToByte(TextBox11.Text);//количество детей 3-го сотрудника
        float a4 = Convert.ToByte(TextBox13.Text);//зарплата 4-го сотрудника
        float b4 = Convert.ToByte(TextBox14.Text);//количество детей 4-го сотрудника
        float a5 = Convert.ToByte(TextBox16.Text);//зарплата 5-го сотрудника
        float b5 = Convert.ToByte(TextBox17.Text);//количество детей 5-го сотрудника
        //рассчитываю доход на человека
        float d1 = a1 / (b1 + 1);
        float d2 = a2 / (b2 + 1);
        float d3 = a3 / (b3 + 1);
        float d4 = a4 / (b4 + 1);
        float d5 = a5 / (b5 + 1);
        float tmp;
        //пытаюсь отсортировать список сотрудников методом пузырька
        float[] Array = new float[d1, d2, d3, d4, d5];
        for (int i = 0; i < Array.Length; ++i)
        {
            for (int j = 0; j < Array.Length - 1; ++j)
            {
                if (Array[j] > Array[j + 1])
                {
                    tmp = Array[j];
                    Array[j] = Array[j + 1];
                    Array[j + 1] = tmp;
                }
            }
        }
        //вывожу отсортированный список
        Label27.Text = "У сотрудника №" + Array[0] + "доход в семье на человека состовляет:" + d1;
        Label28.Text = "У сотрудника №" + Array[1] + "доход в семье на человека состовляет:" + d2;
        Label29.Text = "У сотрудника №" + Array[2] + "доход в семье на человека состовляет:" + d3;
        Label30.Text = "У сотрудника №" + Array[3] + "доход в семье на человека состовляет:" + d4;
        Label31.Text = "У сотрудника №" + Array[4] + "доход в семье на человека состовляет:" + d5;

Но вылезает ошибка:Неявное преобразование типа 'float' в 'int' невозможно. Существует явное преобразование (возможно, отсутствует приведение)
Подскажите пожалуйста из-за чего она может возникать?
278
22 мая 2011 года
Alexander92
1.1K / / 04.08.2008
[QUOTE=Dinar1623]
 
Код:
float a1 = Convert.ToByte(TextBox4.Text);

[/QUOTE]
Вот из-за этого (и подобных строк) и возникает. Convert.ToByte() возвращает целочисленное значение, которое вы пытаетесь присвоить переменной типа float. Замените Convert.ToByte() на Convert.ToDouble().
34K
22 мая 2011 года
Dinar1623
57 / / 14.11.2010
Цитата: Alexander92
Вот из-за этого (и подобных строк) и возникает. Convert.ToByte() возвращает целочисленное значение, которое вы пытаетесь присвоить переменной типа float. Замените Convert.ToByte() на Convert.ToDouble().



Я заменил и теперь пишет вот это: Неявное преобразование типа 'double' в 'float' невозможно. Существует явное преобразование (возможно, отсутствует приведение)
Почти ничего не изменилось(((

5
22 мая 2011 года
hardcase
4.5K / / 09.08.2005
Цитата: Dinar1623
Но вылезает ошибка:Неявное преобразование типа 'float' в 'int' невозможно. Существует явное преобразование (возможно, отсутствует приведение)

А разве компилятор утаивает от вас номер строки с ошибкой?

Цитата: Dinar1623
Подскажите пожалуйста из-за чего она может возникать?

Из-за того, что кто-то невнимателен и не желает читать книжки.

Исправьте

 
Код:
float[] Array = new float[d1, d2, d3, d4, d5];

на
 
Код:
float[] Array = new float[] { d1, d2, d3, d4, d5 };
278
22 мая 2011 года
Alexander92
1.1K / / 04.08.2008
hardcase, согласен, но первая ошибка раньше вылазит, все-таки. Если то исправление, о котором я говорил, изменяет наблюдаемый эффект, значит, там тоже глюк есть. Dinar1623, приведите типы явно.
 
Код:
float a1 = (float)Convert.ToDouble(TextBox4.Text);
5
22 мая 2011 года
hardcase
4.5K / / 09.08.2005
Цитата: Alexander92
hardcase, согласен, но первая ошибка раньше вылазит, все-таки. Если то исправление, о котором я говорил, изменяет наблюдаемый эффект, значит, там тоже глюк есть. Dinar1623, приведите типы явно.
 
Код:
float a1 = (float)Convert.ToDouble(TextBox4.Text);

В C# существует неявное приведение интегральных типов в типы с плавающей точкой. Потому ошибка не может возникать в коде ТС-а на строках вида:

 
Код:
float a1 = Convert.ToByte(TextBox4.Text);


В вашем примере явное приведение типов нужно, потому как множество значений System.Double мощнее System.Single. Посмотрите внимательно на код ТС-а и осмыслите мой первый ответ.
34K
22 мая 2011 года
Dinar1623
57 / / 14.11.2010
Спасибо за помощь. Все работает)
278
22 мая 2011 года
Alexander92
1.1K / / 04.08.2008
Цитата: hardcase
В C# существует неявное приведение интегральных типов в типы с плавающей точкой. Потому ошибка не может возникать в коде ТС-а на строках вида:
 
Код:
float a1 = Convert.ToByte(TextBox4.Text);


В вашем примере явное приведение типов нужно, потому как множество значений System.Double мощнее System.Single. Посмотрите внимательно на код ТС-а и осмыслите мой первый ответ.



Ok, согласился. Собственно, я ведь с вашим первом ответом и не спорил.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог