|
0 / 0 / 0
Регистрация: 25.11.2018
Сообщений: 65
|
||||||
Структура ветвления Select Case05.12.2019, 17:25. Показов 2522. Ответов 31
Метки нет (Все метки)
Доброго времени суток, есть задание:
Запрограммировать диалог с пользователем, в котором пользователь может отвечать на ваши вопросы по-русски (да, Да, ДА, Нет, НЕТ, нет) или по-английски (no, NO, No, YES, n, N, Y, y, Yes, yes, yES, yeS). В случае согласия (в любой доступной форме) выполняются одни действия, в случае отказа (также в одной из допустимых форм) выполняются другие действия. Я реализовал это так:
0
|
||||||
| 05.12.2019, 17:25 | |
|
Ответы с готовыми решениями:
31
Как использовать цикл ветвления select case Написать программу для вычисления значения функции с использованием операторов ветвления If и выбора Select Case |
|
3566 / 2507 / 1174
Регистрация: 14.08.2016
Сообщений: 8,219
|
||||||
| 05.12.2019, 17:28 | ||||||
1
|
||||||
|
Модератор
|
||||||
| 05.12.2019, 17:33 | ||||||
|
ttssooyy, может это вам так по заданию надо - не знаю.
Но это очень плохой код. Посмотрите такой пример
0
|
||||||
|
14289 / 9375 / 1351
Регистрация: 21.01.2016
Сообщений: 35,330
|
||||||
| 05.12.2019, 17:35 | ||||||
|
Diamante, Элд Хасп, можно поэффективней:
1
|
||||||
|
3566 / 2507 / 1174
Регистрация: 14.08.2016
Сообщений: 8,219
|
|
| 05.12.2019, 17:39 | |
|
Usaga, согласен, но, кмк, ТСу нужно что-то попроще, а проще массива некуда, разве что 100500 кейсов
0
|
|
|
14289 / 9375 / 1351
Регистрация: 21.01.2016
Сообщений: 35,330
|
|
| 05.12.2019, 17:42 | |
|
Элд Хасп, поэффективней в двух моментах:
1) Работает со строками в любом регистре: не нужно создание временной строки через ToLower(); 2) Хеш-таблица, поиск очень быстрый (имеет смысл при большем, чем несколько элементов массиве); Основной мой косёрн - ToLower().
0
|
|
|
3566 / 2507 / 1174
Регистрация: 14.08.2016
Сообщений: 8,219
|
|
| 05.12.2019, 17:42 | |
|
как минимум, не создается дополнительная строка
да хешсет быстрее вроде как...
0
|
|
|
Модератор
|
|
| 05.12.2019, 17:53 | |
|
Diamante, быстрее только если хотя бы несколько десятков элементов.
Границу эффективности надо определять тестом. Если не лень - сделайте тест. Самому интересно, но я пока без компа. Добавлено через 2 минуты Usaga, экономия промежуточной строки при пользовательском вводе на форме? Даже не знаю сколько и с какой скоростью надо вводить чтобы это стало существенным.
0
|
|
|
14289 / 9375 / 1351
Регистрация: 21.01.2016
Сообщений: 35,330
|
||
| 05.12.2019, 17:57 | ||
|
Элд Хасп, где-то в недрах .NET таится древний HybridDictionary, который опирается на значение 10-15 (если амнезия не изменяет) элементов перед сменой внутреннего списка на хеш-таблицу. Но, как я уже ранее сказал, основной выигрышь не в скорости поиска, а в отказе от мусора генерируемого методом ToLower().
Добавлено через 3 минуты
0
|
||
|
Модератор
|
|
| 05.12.2019, 18:06 | |
|
Usaga, но это же совсем иная задача.
Для такой задачи, конечно, нужно иное решение. Но имеет ли смысл для простых, элементарных разовых задач создавать обобщёные методы на все случаи жизни? Добавлено через 3 минуты Usaga, и если для постоянных списков, по-моему, бинарный поиск быстрее хеш поиска?
0
|
|
|
14289 / 9375 / 1351
Регистрация: 21.01.2016
Сообщений: 35,330
|
|||
| 05.12.2019, 18:12 | |||
|
0
|
|||
|
68 / 38 / 11
Регистрация: 07.11.2019
Сообщений: 136
|
|||||||
| 05.12.2019, 18:16 | |||||||
|
Какие хэш-таблицы...
0
|
|||||||
|
68 / 38 / 11
Регистрация: 07.11.2019
Сообщений: 136
|
||
| 05.12.2019, 18:27 | ||
|
0
|
||
|
68 / 38 / 11
Регистрация: 07.11.2019
Сообщений: 136
|
|
| 05.12.2019, 20:28 | |
|
Элд Хасп,
тогда я бы добавил к обсуждению принципов читаемость и поддерживаемость кода, и наверно некоторый прагматизм. Вот есть например такой класс List. Мы же понимаем, что под капотом у него не список, а массив с реализованным набором операций над этим массивом. Но есть же LinkedList - настоящий список, у которого есть вставки, удаления элементов не посредством копирования частей массива. Но LinkedList не так часто можно увидеть в коде. И не потому что программисты плохие - есть сформированная культура, привычки, примеры, которые даются в статьях и книгах - как итог List популярен. И вставляешь его механически в те места, где тебе нужен set данных. И тут вдруг в коде появляется LinkedList или HashTable - а код написан кем-то другим, со своей логикой, подходами и извращениями и ты начинаешь думать - а зачем - наверное есть веская причина, чтобы использовать LinkedList, а не обычный List. Так вот, когда такая причина реально есть, мне, как человеку, разбирающемся в чужом коде, становится намного легче и понятнее. А когда такой причины нет, а ее ведь не будет не только в List'е или HashTable, но и в ненужных фабриках, цепочках делегатов и еще в массе других вещей, которые можно использовать не по назначению - и такого к сожалению на практике много. Поэтому я немного против того, чтобы на таких примерах, как этот, у человека, который учится программировать, возникало ошибочное представление о перформансе, сфере применений хэш таблиц итд
0
|
|
|
Модератор
|
|
| 05.12.2019, 20:59 | |
|
Ourn, не понял о чем вы.
Ответ на задачу в теме дан до четвертого поста. Дальнейшее обсуждение по сути к задаче темы не относится. Обсуждается что и где будет эффективнее использовать. И совсем новичкам-новичкам это не нужно. Им бы обычные массивы и списки освоить. Нужно это тем кто продвинулся чуть дальше. Я сам начинающий и для меня такое обсуждение полезно. Возможно ТС тоже захочет кроме самого простого решения получить больше информации о возможных вариантах. Добавлено через 7 минут Ourn, и LinkedList ни как не может заменить List. В нём нет индексатора. А это очень важный и часто используемый способ работы со списком. List более правильно называть не списком, а списочным массивом или массивом списочного типа.
0
|
|
|
68 / 38 / 11
Регистрация: 07.11.2019
Сообщений: 136
|
|||
| 05.12.2019, 22:16 | |||
|
List в C# - это враппер над одномерным массивом (вектором на уровне IL определений), называть его списочным массивом или массивом списочного типа неправильно. Это обычный массив, элементы которого размещены в памяти подряд и доступны с помощью перемещения указателей на заданное число байт в режиме unsafe. Так работает индексатор. Когда ему нужно достать элемент с индексом i, он обращается к ссылке на нулевой элемент в памяти и прибавляет к нему i*колво_байт_типа_элементов_массива. LinkedList в С# - реализует двухсвязный список из элементов LinkedListNode<T> с круговым замыканием на уровне вершины head. Это реальный список, который хранит в себе, как поле данных, так и поля, содержащие ссылки на предыщие, следующие элементы. Что дает структура данных список? В первую очередь скорость добавления, вставки, удаления элементов, отдельных видов сортировки. И я как раз писал о том, что даже там, где LinkedList может выглядеть предпочтительнее, в основном привыкли использовать обычный массив List. Потому что разница в перформансе незначительная. И когда есть задача на хэш-таблицы - хорошо, когда она реальная, а не выдуманная из гипотетических соображений, как можно улучшить свитч из трех элементов. PS надеюсь, никого не обидел, это из благих побуждений.
0
|
|||
|
Модератор
|
|
| 05.12.2019, 22:26 | |
|
Ourn, я всё это знаю.
List во всех учебниках, документациях называют списком. И этот не изменишь! Просто массивом его никак не назовёшь независимо от того что там под оболочкой. И сути это не меняет. Изменится реализация под оболочкой - надо будет менять название типа? Главное он представляет методы которые ожидаются от списка List. От обычных последовательных списков его отличает возможность получения элементов по индексу. Поэтому, и предлагаю как-то в названии связать список и массив. Добавлено через 3 минуты В остальном, да вы правы. Для понимания начинающим нужны не выдуманные примеры, а близкие к реальности. Но в данном обсуждении участвовали те ценнику достаточно объяснения в каких ситуациях следует какой тип использовать. Если бы TC стал уточнять, то ему бы объяснили.
0
|
|
| 05.12.2019, 22:26 | |
|
Помогаю со студенческими работами здесь
20
Ошибки при работе с ComboBox (Case without Select Case) Как оформить условие на попадание в диапазон в конструкции Select Case ... End Select? Структура ветвления выбор - иначе Структура ветвления, периодическая функция
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога
Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
|
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование
. \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json>
Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом.
# Check if. . .
|
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так:
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347
Основана на STM32F303RBT6.
На борту пять. . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|