| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны |  Справка по форуму | Файлообменник |

Вернуться   Форум 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
Просмотров: 170
Размер:	2.9 Кб
ID:	176683  

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

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


Есть. Берешь все и выбираешь большее. Еще большой вопрос откуда там эти значения появились - может еще оттуда можно взять более эффективно.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Автор темы   Непрочитано 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,840


Либо взять все значения и найти максимум, либо в итерацию заполнения добавить сверку значения с максимальным полученным и сохранять его в случае превышения.
з.ы. Ваш код выдаст "неожиданный" результат при отрицательном 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,840


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


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


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

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


Приблизительно так...
Код:
[Выделить все]
 
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,000


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

----- добавлено через ~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,000


на 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,000


Цитата:
Сообщение от 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,588


Попробую и я свои 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
Просмотров: 919
Размер:	13.3 Кб
ID:	176732  
andrejjerdna вне форума  
 
Непрочитано 26.09.2016, 11:25
1 | #18
Boxa

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


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


ЗЫ
Зачем Вы пересчитываете константы в теле цикла, они как то меняются? Посмотрите внимательно код из 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,588


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

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

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

Последний раз редактировалось Кулик Алексей aka kpblc, 26.09.2016 в 14:51. Причина: Добавил формулу
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