Максимальное значение из listBox (C#).
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > .NET > Максимальное значение из listBox (C#).

Максимальное значение из listBox (C#).

Ответ
Поиск в этой теме
Непрочитано 24.09.2016, 23:51 #1
Максимальное значение из listBox (C#).
andrejjerdna
 
Борьба с пустотой
 
Владимир
Регистрация: 30.01.2014
Сообщений: 558

Суть вопроса в том, что получаю список значений в listBox (см. вложенный файл).
Есть ли возможность вытащить их этого списка максимальное значение?

Миниатюры
Нажмите на изображение для увеличения
Название: Скриншот 24-09-2016 234810.png
Просмотров: 173
Размер:	2.9 Кб
ID:	176683  

Просмотров: 21399
 
Непрочитано 24.09.2016, 23:59
1 | #2
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,839


Есть. Берешь все и выбираешь большее. Еще большой вопрос откуда там эти значения появились - может еще оттуда можно взять более эффективно.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Автор темы   Непрочитано 25.09.2016, 00:04
#3
andrejjerdna

Борьба с пустотой
 
Блог
 
Регистрация: 30.01.2014
Владимир
Сообщений: 558
Отправить сообщение для andrejjerdna с помощью Skype™


Цитата:
Сообщение от Дима_ Посмотреть сообщение
Есть. Берешь все и выбираешь большее. Еще большой вопрос откуда там эти значения появились - может еще оттуда можно взять более эффективно.
Значения беру цикла.
Код будет принципиально такого плана:
Код:
[Выделить все]
            for (double c = h0; c <= 2*h0; c+=0.005)
            {
                double Qb = c;
                listBox.Items.Add(Qb);
            }
Если есть возможность вытащит максимальное значение переменной Qb отсюда, буду очень признателен за подсказку.
п.с. Qb будет вычисляться по ряду уравнений, поэтому его максимально значение не очевидно зависит от значения c.
andrejjerdna вне форума  
 
Непрочитано 25.09.2016, 00:22
#4
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,839


Либо взять все значения и найти максимум, либо в итерацию заполнения добавить сверку значения с максимальным полученным и сохранять его в случае превышения.
з.ы. Ваш код выдаст "неожиданный" результат при отрицательном h0.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Автор темы   Непрочитано 25.09.2016, 00:34
#5
andrejjerdna

Борьба с пустотой
 
Блог
 
Регистрация: 30.01.2014
Владимир
Сообщений: 558
Отправить сообщение для andrejjerdna с помощью Skype™


Цитата:
Сообщение от Дима_ Посмотреть сообщение
Либо взять все значения и найти максимум, либо в итерацию заполнения добавить сверку значения с максимальным полученным и сохранять его в случае превышения.
з.ы. Ваш код выдаст "неожиданный" результат при отрицательном h0.
Я понимаю выражение "взять все значения и найти максимум", но не по понимаю как это реализовать. Сейчас беру все значения и записываю в listbox, оттуда пытаюсь получить это максимальное значение. Но видимо это не совсем верный путь...
Второе ваше предложение интересное, не сможете дать небольшую наводку на решение в такой постановке?
andrejjerdna вне форума  
 
Непрочитано 25.09.2016, 00:58
#6
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,839


Скажу прямо - Вам не хватает базовых знаний.
ИХМО представленное Вами решение и состав вопросов оставляют желать лучшего. Не пытайтесь по подсказкам на форумах научиться основам - тут Вам насоветуют. Даже если в отдельности все ответы будут правильными - они будут не "из одной бочки" - и это только прибавит каши в голове. Скачайте самоучитель по близкой Вам теме и вначале решите пару задач по нему.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 25.09.2016, 08:59
#7
csp


 
Регистрация: 03.04.2013
Сообщений: 1,484


Скачайте самоучитель по близкой Вам теме и вначале решите пару задач по нему.
Этот совет надо в девиз форума включить
csp вне форума  
 
Непрочитано 25.09.2016, 10:14
1 | #8
Boxa

КЖ; C#
 
Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,611


Приблизительно так...
Код:
[Выделить все]
 
int[] anArray = { 1, 5, 2, 7 };
int maxValue = anArray.Max();
Можно так (LINQ):
Код:
[Выделить все]
 var max = anArray.Select((value, index) => new {value, index})
                 .OrderByDescending(vi => vi.value)
                 .First();
Но Вам действительно стоит прочитать самоучитель по базовым вопросам.
Впрочем, поиском Ваш вопрос решается за пару кликов, было бы желание...
Boxa вне форума  
 
Автор темы   Непрочитано 25.09.2016, 17:53
#9
andrejjerdna

Борьба с пустотой
 
Блог
 
Регистрация: 30.01.2014
Владимир
Сообщений: 558
Отправить сообщение для andrejjerdna с помощью Skype™


Всем спасибо кто отписался. Не судите строго, читаю Троелсена, но многое не понятно...
Цитата:
Сообщение от Boxa Посмотреть сообщение
Приблизительно так...
Код:
[Выделить все]
1
int[] anArray = { 1, 5, 2, 7 };
2
int maxValue = anArray.Max();
Этот код понятен, мне тут не понятно как заполнить значения массива, в вашем коде они заранее известны { 1, 5, 2, 7 }, я не соображу как задать значения массива которые получаются каждый раз разными...
Еще раз приношу извинения, если мои вопросы кого-то шокируют
andrejjerdna вне форума  
 
Непрочитано 25.09.2016, 18:04
#10
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,499


а откуда заполняется выпадающий список?

----- добавлено через ~12 мин. -----
Как вариант - отсортировать выпадающий список и взять последний элемент с конвертацией в число)
Сергей812 вне форума  
 
Автор темы   Непрочитано 25.09.2016, 18:18
#11
andrejjerdna

Борьба с пустотой
 
Блог
 
Регистрация: 30.01.2014
Владимир
Сообщений: 558
Отправить сообщение для andrejjerdna с помощью Skype™


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
а откуда заполняется выпадающий список?

----- добавлено через ~12 мин. -----
Как вариант - отсортировать выпадающий список и взять последний элемент с конвертацией в число)
Значения записывались из цикла (код был выше).
В принципе подумал, и вышел на решение моей задачи вот через такой подход:
Код:
[Выделить все]
             ///Цикл поиска минимального значения Q.
            double temp = 0;
            for (double c = h0; c <= 2 * h0; c += 0.001)
            {
                double Qb = c;
                double Qsw = 10 / c;
                double Q_1 = Qb + Qsw;
                listBox.Items.Add(Q_1);

                if (temp == 0)//Проверка значения параметра temp.
                {
                    temp = Q_1;
                }
                else
                if (temp > Q_1)
                {
                    temp = Q_1;
                }
            }

            C_.Text = Convert.ToString(temp);
andrejjerdna вне форума  
 
Непрочитано 25.09.2016, 18:25
1 | #12
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,499


на Windows Forms диалог пишете скорее всего?
Если так, то включите сортировку в списке (listbox.sorted=true или прямо в дизайнере), и возьмите по listBox.Items[listBox.Items.Count-1] последнее значение - оно и будет наибольшим

----- добавлено через ~5 мин. -----
Код:
[Выделить все]
///Цикл поиска минимального значения Q.

    if (temp == 0)//Проверка значения параметра temp.
    {
        temp = Q_1;
    }
    else
    if (temp > Q_1)
    {
        temp = Q_1;
    }
заменяете на
Код:
[Выделить все]
temp=System.Math.Max(temp, Q_1)
----- добавлено через ~10 мин. -----
и тогда уж temp инициализируете как
Код:
[Выделить все]
double temp = double.MinValue
Сергей812 вне форума  
 
Автор темы   Непрочитано 25.09.2016, 18:37
#13
andrejjerdna

Борьба с пустотой
 
Блог
 
Регистрация: 30.01.2014
Владимир
Сообщений: 558
Отправить сообщение для andrejjerdna с помощью Skype™


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
на Windows Forms диалог пишете скорее всего?
Если так, то включите сортировку в списке (listbox.sorted=true или прямо в дизайнере), и возьмите по listBox.Items[listBox.Items.Count-1] последнее значение - оно и будет наибольшим

----- добавлено через ~5 мин. -----
Код:
[Выделить все]
///Цикл поиска минимального значения Q.

    if (temp == 0)//Проверка значения параметра temp.
    {
        temp = Q_1;
    }
    else
    if (temp > Q_1)
    {
        temp = Q_1;
    }
заменяете на
Код:
[Выделить все]
temp=System.Math.Max(temp, Q_1)
Спасибо за ответ!
Тогда код получается вообще миниатюрным:
Код:
[Выделить все]
             ///Цикл поиска минимального значения Q.
            double temp = 1000000000;
            for (double c = h0; c <= 2 * h0; c += 0.001)
            {
                double Qb = 0.3*Rb*b*h0;
                double Qsw = 0.75*Rsw*Asw*c/sw;
                double Q_1 = Qb + Qsw;
                temp = System.Math.Min(temp, Q_1);
            }
----- добавлено через ~2 мин. -----
Приложение у меня Windows Presentation Foundation (WPF).
andrejjerdna вне форума  
 
Непрочитано 25.09.2016, 18:45
#14
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,499


Цитата:
Сообщение от andrejjerdna Посмотреть сообщение
double temp = 1000000000;
так максимальное или минимальное значение ищете?)
тогда
Код:
[Выделить все]
double temp = double.MaxValue
а в Net код и должен быть небольшим - поскольку основная часть кода спрятана внутри Фреймворка и уже любезно написана за нас Майкрософтом. А вы пытаетесь Net использовать как обычный С++
Сергей812 вне форума  
 
Автор темы   Непрочитано 25.09.2016, 18:53
#15
andrejjerdna

Борьба с пустотой
 
Блог
 
Регистрация: 30.01.2014
Владимир
Сообщений: 558
Отправить сообщение для andrejjerdna с помощью Skype™


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
так максимальное или минимальное значение ищете?)
тогда
Код:
[Выделить все]
double temp = double.MaxValue
а в Net код и должен быть небольшим - поскольку основная часть кода спрятана внутри Фреймворка и уже любезно написана за нас Майкрософтом. А вы пытаетесь Net использовать как обычный С++
Уже минимальное. В процессе понял ошибку свою. Ввел немного в заблуждение заголовком темы.
Да, temp инициализировал в соответствии с вашим советом. Все замечательно получилось.
Еще раз огромное спасибо за подсказку!
andrejjerdna вне форума  
 
Непрочитано 26.09.2016, 08:19
#16
Boxa

КЖ; C#
 
Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,611


Попробую и я свои 5 копеек добавить...
Сначала хотел несколько отрефакторить Ваш код, получилось как то так:
Код:
[Выделить все]
 //Цикл поиска минимального значения Q.
double Qsw = double.MaxValue;
double Qb = 0.3*Rb*b*h0;
int count = (int)h0/0.001
for (int i = 0; i < count ; i += 1)
    Qsw = System.Math.Min(Qsw, 0.75*Rsw*Asw*(h0+i*0.001)/sw);

double Q_1 = Qb + Qsw;
и после этого стало совсем очевидно, что цикл вообще не нужен, т.к. минимальное значение Qsw Вы получите при минимальном значении с (в моем случае (h0+i*0.001) ), а минимальное значение и так известно, соответственно:
Код:
[Выделить все]
 double Qb = 0.3*Rb*b*h0;
double Qsw = 0.75*Rsw*Asw*h0/sw;
double Q_1 = Qb + Qsw;
Как то так...
Boxa вне форума  
 
Автор темы   Непрочитано 26.09.2016, 10:17
#17
andrejjerdna

Борьба с пустотой
 
Блог
 
Регистрация: 30.01.2014
Владимир
Сообщений: 558
Отправить сообщение для andrejjerdna с помощью Skype™


Цитата:
Сообщение от Boxa Посмотреть сообщение
Попробую и я свои 5 копеек добавить...
Я тут решаю задачу с расчетом наклонных сечений по СП 63.
Там по сути образуется система уравнений:
Qb = (fb2*Rbt*b*h0^2) / C; (8.57)

Qsw = fsw*qsw*C. (8.58)

где С в формуле 8.58 принимается не менее h0 и не более 2*h0.

Собственно в СП почему-то не сказано, но С в формуле 8.57 и 8.58 немного разные величины. Если верить Габрусенко "Основы расчета железобетона в вопросах и ответах", то тут можно разделить на несколько случаев:

в случае б) эти величины раздельны в случае а) они совпадают.

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

Код:
[Выделить все]
 ///Цикл поиска минимального значения Q.
            double temp = double.MaxValue;
            for (double c = h0; c <= (2 * h0); c += 0.001)
            {
                double Qb = 1.5*Rbt*b*h0*h0/c;
                if (Qb > 2.5*Rbt*b*h0)
                {
                    Qb = 2.5 * Rbt * b * h0;
                }
                else
                if (Qb < 0.5 * Rbt * b * h0)
                {
                    Qb = 0.5 * Rbt * b * h0;
                }
                double qsw = Rsw * Asw / sw;
                double Qsw = 0.75 * qsw * c;
                double Q_1 = Qb + Qsw;
                listBox.Items.Add(Q_1); /// Просто для визуального контроля.
                temp = System.Math.Min(temp,Q_1);
            }
Поэтому вот для случая а) получается приблизительно такой код пока.
Могу конечно ошибаться.
Миниатюры
Нажмите на изображение для увеличения
Название: Скриншот 26-09-2016 101027.png
Просмотров: 936
Размер:	13.3 Кб
ID:	176732  
andrejjerdna вне форума  
 
Непрочитано 26.09.2016, 11:25
1 | #18
Boxa

КЖ; C#
 
Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,611


Для случая а) зачем брутфорсить? Чем аналитическое решение не подходит?
Цифры и размерности с потолка (перемешал см и МПа), только для того, что бы показать решение.


ЗЫ
Зачем Вы пересчитываете константы в теле цикла, они как то меняются? Посмотрите внимательно код из 16 сообщения и прикиньте, какие расчеты в Вашем коде можно убрать из тела цикла, это позволит повысить скорость работы Вашего приложения и сделает код более понятным.

Последний раз редактировалось Boxa, 26.09.2016 в 11:35.
Boxa вне форума  
 
Автор темы   Непрочитано 26.09.2016, 13:57
#19
andrejjerdna

Борьба с пустотой
 
Блог
 
Регистрация: 30.01.2014
Владимир
Сообщений: 558
Отправить сообщение для andrejjerdna с помощью Skype™


Цитата:
Сообщение от Boxa Посмотреть сообщение
Для случая а) зачем брутфорсить? Чем аналитическое решение не подходит?
Цифры и размерности с потолка (перемешал см и МПа), только для того, что бы показать решение.


ЗЫ
Зачем Вы пересчитываете константы в теле цикла, они как то меняются? Посмотрите внимательно код из 16 сообщения и прикиньте, какие расчеты в Вашем коде можно убрать из тела цикла, это позволит повысить скорость работы Вашего приложения и сделает код более понятным.
А разве не способ решения для способа а) в том числе? Тоже думаю вынести постоянные из цикла, но пока если честно не заметил никаких задержек в работе программы, хотя наверное вынести было бы верно хотя бы для упрощения кода.
Про аналитическое решение немного не понял. У меня не получатся чисто аналитический решить эти уравнения, так как есть 2 уравнения и 3 неизвестных.
andrejjerdna вне форума  
 
Непрочитано 26.09.2016, 14:18
#20
Boxa

КЖ; C#
 
Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,611


Цитата:
Сообщение от andrejjerdna Посмотреть сообщение
Про аналитическое решение немного не понял. У меня не получатся чисто аналитический решить эти уравнения, так как есть 2 уравнения и 3 неизвестных.
Посмотрите внимательно свою же картинку:

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

Формулы брал из Вашего кода...

Последний раз редактировалось Кулик Алексей aka kpblc, 26.09.2016 в 14:51. Причина: Добавил формулу
Boxa вне форума  
 
Автор темы   Непрочитано 26.09.2016, 14:31
#21
andrejjerdna

Борьба с пустотой
 
Блог
 
Регистрация: 30.01.2014
Владимир
Сообщений: 558
Отправить сообщение для andrejjerdna с помощью Skype™


Цитата:
Сообщение от Boxa Посмотреть сообщение
Посмотрите внимательно свою же картинку:

и окажется, что у Вас для схемы а) две неизвестных, при двух уравнениях.
Qb = (fb2*Rbt*b*h0^2) / C; (8.57)

Qsw = fsw*qsw*C. (8.58)

Вроде как эти значения не известны. Можно конечно из уравнений выразить С, приравнять, и тогда решит так, из трех уравнений.
Но почему считаете что просто перебором эту задачу решать не логично?
andrejjerdna вне форума  
 
Непрочитано 26.09.2016, 14:37
#22
Boxa

КЖ; C#
 
Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,611


Предвидя Ваш вопрос, стал обновлять сообщение, добавлять еще пару строчек. Попробую еще раз тут, на словах.
Посмотрите график рис42 а) Вы ищите точку пересечения двух заданных функций в координатах С и Q,
ищите С при одинаковых Q, т.е. Qb = Qsw. соответственно приравняв формулы и выразив С, получите решение.

Offtop:
PS/
Грустно, на форуме для взрослых дядек и тётек, объяснять математику пятого класса.

Последний раз редактировалось Boxa, 26.09.2016 в 14:47.
Boxa вне форума  
 
Автор темы   Непрочитано 26.09.2016, 14:47
#23
andrejjerdna

Борьба с пустотой
 
Блог
 
Регистрация: 30.01.2014
Владимир
Сообщений: 558
Отправить сообщение для andrejjerdna с помощью Skype™


Цитата:
Сообщение от Boxa Посмотреть сообщение
Предвидя Ваш вопрос, стал обновлять сообщение, добавлять еще пару строчек. Попробую еще раз тут, на словах.
Посмотрите график рис42 а) Вы ищите точку пересечения двух заданных функций в координатах С и Q,
ищите С при одинаковых Q, т.е. Qb = Qsw. соответственно приравняв формулы и выразив С, получите решение.
Но разве это значение С будет опасным? Не факт.
andrejjerdna вне форума  
 
Непрочитано 26.09.2016, 15:07
1 | #24
Boxa

КЖ; C#
 
Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,611


Цитата:
Сообщение от andrejjerdna Посмотреть сообщение
Но разве это значение С будет опасным? Не факт.
Это уже совсем не смешно. При этом значении С, сумма Qb+Qsw будет минимальной.
Опасно это или нет, решать проектировщику.


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

ЗЫ.
В виду того, что общение в данной теме становиться похоже на троллинг, со стороны топикстартера, я пожалуй помолчу.
В любом случае, удачи.
Boxa вне форума  
 
Автор темы   Непрочитано 26.09.2016, 16:21
#25
andrejjerdna

Борьба с пустотой
 
Блог
 
Регистрация: 30.01.2014
Владимир
Сообщений: 558
Отправить сообщение для andrejjerdna с помощью Skype™


Цитата:
Сообщение от Boxa Посмотреть сообщение
Это уже совсем не смешно. При этом значении С, сумма Qb+Qsw будет минимальной.
Опасно это или нет, решать проектировщику.


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

ЗЫ.
В виду того, что общение в данной теме становиться похоже на троллинг, со стороны топикстартера, я пожалуй помолчу.
В любом случае, удачи.
Спасибо ВАМ за советы.
andrejjerdna вне форума  
 
Непрочитано 09.11.2017, 12:12
#26
Modis


 
Регистрация: 12.06.2010
Липецк, Москва
Сообщений: 534


А где указание на то - это WPF или WinForms?
Если заполняли так:
Цитата:
for (double c = h0; c <= 2*h0; c+=0.005)
{
double Qb = c;
listBox.Items.Add(Qb);
}
То также и получайте:

var maxValue = listBox.Items.Cast<double>().Max();
Modis вне форума  
 
Непрочитано 09.11.2017, 13:00
#27
Boxa

КЖ; C#
 
Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,611


Modis, суть топика - нахождение вершины параболы с помощью брутфорса. Так что совершенно не важно WPF или WinForm, тут сам подход менять нужно было.
Offtop: некропостинг?
Boxa вне форума  
 
Непрочитано 09.11.2017, 13:02
#28
Modis


 
Регистрация: 12.06.2010
Липецк, Москва
Сообщений: 534


Цитата:
Сообщение от Boxa Посмотреть сообщение
суть топика - нахождение вершины параболы с помощью брутфорса
Суть топика, цитирую:
Цитата:
Суть вопроса в том, что получаю список значений в listBox (см. вложенный файл).
Есть ли возможность вытащить их этого списка максимальное значение?
Все остальное - это нарушение правила Один вопрос - одна тема!
Modis вне форума  
 
Непрочитано 09.11.2017, 15:26
#29
Boxa

КЖ; C#
 
Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,611


Modis, А прочитать весь топик? Понять что же в итоге хотел получить автор и что получил?

Цитата:
Сообщение от Modis Посмотреть сообщение
А где указание на то - это WPF или WinForms?
Цитата:
Сообщение от andrejjerdna Посмотреть сообщение
Приложение у меня Windows Presentation Foundation (WPF).
А использовать LINQ предлагалось еще на первой странице, но автору не понятен этот синтаксис и потому LINQ не канает =о)
Boxa вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > .NET > Максимальное значение из listBox (C#).



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Какой язык перспективен для инженера-конструктора с условием The_Mercy_Seat Программирование 705 17.03.2021 14:19
Максимальное значение воздушного зазора в вент.фасаде St-renegat Конструкции зданий и сооружений 25 27.02.2015 09:53
Можно ли заставить AutoCad выбрать максимальное значение из выделенного диапазона таблицы? RNB AutoCAD 2 15.09.2014 05:35
Максимальное значение защитного слоя для опоры моста Маккс Автомобильные и железные дороги, мосты, тоннели и организация движения 6 24.03.2014 12:24