Logo Море(!) аналитической информации!
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware
Архив форумов ЦИТФорума
Море(!) вопросов - Море(!) ответов
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 
Как правильно задавать вопросы

??swith??

 
Перейти:  
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Программирование
Предыдущая тема :: Следующая тема  
Автор Сообщение
satay



Зарегистрирован: 25.03.2005
Сообщения: 77
Откуда: Ukraine

СообщениеДобавлено: Сб Сен 03 2005 23:15    Заголовок сообщения: ??swith?? Ответить с цитатой

на Паскале есть такая штука
case a of
10..20:
....
и т.д. вообшем можно указать промежуток значений

ЕСТЬ ЛИ ТАКОЕ в Си?
_________________
Satay
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Aragaer



Зарегистрирован: 28.03.2005
Сообщения: 164

СообщениеДобавлено: Сб Сен 03 2005 23:36    Заголовок сообщения: Ответить с цитатой

Намного правильнее пользоваться не switch'ом, а else if'ами
Код:
if (условие1) {
   ...
} else if (условие2) {
   ...
} else if (условие3) {
   ...
} else {
   ...
}

_________________
Open your eyes.
And Awaken.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Wladimir



Зарегистрирован: 02.03.2005
Сообщения: 150
Откуда: Ставропольский край

СообщениеДобавлено: Вс Сен 04 2005 09:00    Заголовок сообщения: Ответить с цитатой

Нету. Можно либо пользоваться серией ifов, либо ставить несколько case подряд:

case 10:
case 11:
case 12:
тело;
break;
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
kolobok0



Зарегистрирован: 22.04.2005
Сообщения: 253
Откуда: Мсква

СообщениеДобавлено: Пн Сен 05 2005 11:44    Заголовок сообщения: Ответить с цитатой

Aragaer писал(а):
Намного правильнее пользоваться не switch'ом, а else if'ами.........


Правильней с какой кочки зрения то ?


Например с кочки зрения оптимизации по скорости на множестве ифов - Вы ГЛУБОКО ОШИБАЕТЕСЬ (и чем больше условий - тем больше погрешность) ! После 3, 4 ифов Вы будете писать уже тормозной код...


с уважением
(круглый)
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Aragaer



Зарегистрирован: 28.03.2005
Сообщения: 164

СообщениеДобавлено: Пн Сен 05 2005 15:08    Заголовок сообщения: Ответить с цитатой

С точки зрения гибкости.
В switch'е мы можем проверять только целые числа. Точнее различные значения одного целого числа. Последовательность else if'ов позволяет работать с любыми видами данных, не одной переменной, а несколькими, позволяет осуществлять short-circuit (как бы это по-русски... вобщем как операторы and и or в перле) вычисления.

И... мне например не очень понятно, почему последовательность else if'ов будет работать медленнее, чем switch.
_________________
Open your eyes.
And Awaken.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
kolobok0



Зарегистрирован: 22.04.2005
Сообщения: 253
Откуда: Мсква

СообщениеДобавлено: Вт Сен 06 2005 11:01    Заголовок сообщения: Ответить с цитатой

Aragaer писал(а):
....например не очень понятно, почему последовательность else if'ов будет работать медленнее, чем switch.


Если скомпилируете код с ифами и со свитчем (и там и там целые) то увидите нечто такое...
а) ифы..
cmp eax,00110033h
jc
бла...бла..бла
cmp eax,00000044h
jc
бла...бла..бла

б) со свитчами...
load edx,[TABLE_SWITCH + eax]
jmp [edx]

за точность до запятой не ручаюсь (тут опущено приведение к размерности таблице и т.д.) - давно не брал в руки шашек по азму 86 и иже... а вот смысл надеюсь передал...т.е. в первом случае Вы будете ДРУГ ЗА ДРУГОМ перебирать все варианты (до совпадения конечно же). Во втором будет ПРЯМОЙ переход к коду обрабатывающий данное равенство. Понятно, что второй вариант будет МЕДЛЕННЕЕ лишь в том случае, когда тактов для вычислений и переход к коду будет БОЛЬШЕ чем кол-во тактов при обработке несколько ифов (сколько - нуна точнее смотреть на код получаемый после компилятора). Посему рекомендация такая... Если ифов больше чем два-три и размерность элементов - целые, то лучше использовать свитч.

Отсюда кстати и понятно, почему размерность единиц сравнения не больше размерности регистра Smile

с уважением
(круглый)
ЗЫ
Понятие медленный и быстрый - это ессесвенно с оговоркой, что РАСПРЕДЕЛЕНИЕ комбинаций переходов будут РАВНОМЕРНЫ.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Aragaer



Зарегистрирован: 28.03.2005
Сообщения: 164

СообщениеДобавлено: Вт Сен 06 2005 23:25    Заголовок сообщения: Ответить с цитатой

Ну в таком случае для целых чисел можно провернуть совсем хитрую операцию: написать кучу мелких подпрограмм и указатели на них закинуть в какой-нибудь массив. Правда это уже изврат.
_________________
Open your eyes.
And Awaken.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
kolobok0



Зарегистрирован: 22.04.2005
Сообщения: 253
Откуда: Мсква

СообщениеДобавлено: Ср Сен 07 2005 11:02    Заголовок сообщения: Ответить с цитатой

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


это и есть SWITCH !

Laughing
(круглый)
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
DmitryShm



Зарегистрирован: 17.11.2003
Сообщения: 211
Откуда: Казань

СообщениеДобавлено: Ср Сен 07 2005 13:41    Заголовок сообщения: словоблуды Ответить с цитатой

словоблуды
_________________
love IT
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Aragaer



Зарегистрирован: 28.03.2005
Сообщения: 164

СообщениеДобавлено: Ср Сен 07 2005 15:29    Заголовок сообщения: Ответить с цитатой

kolobok0 писал(а):
это и есть SWITCH !

Laughing
(круглый)

Не совсем Cool
Во-первых, нет явного перескакивания между подпрограммами, кроме заданных явно (а-ля автоматически прописанные break'и).
Во-вторых, эти подпрограммы могут быть использованы неоднократно (я не представляю себе, насколько должен быть умным компилятор, чтобы несколько разных свичей слить вместе в тех местах, где выполняемые функции одинаковы).
В-третьих, есть возможность динамически менять соответствие значение переменной выбора - подпрограмма.
_________________
Open your eyes.
And Awaken.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
kolobok0



Зарегистрирован: 22.04.2005
Сообщения: 253
Откуда: Мсква

СообщениеДобавлено: Чт Сен 08 2005 13:19    Заголовок сообщения: Ответить с цитатой

Aragaer писал(а):
.....Во-первых....


Вы сами себе противоречите...Отличие подпрограммки, метода, функции от тупого перехода да, мона найти (и оно существует ессесвенно). Но предложенный Вами вариант создания таблицы и будет в своём корне свитч. А по поводу универсальности программ - круто, но тому что Вы написали выше - противоречит. Ведь обьеденив в таблицу подпрограммки с различными параметрами - Вам надо будет и специфицировать эти самые параметры до вызова, их кол-во...Так что экскурс в механизацию повторно используемого кода был мягко говоря не в тему... А сделать мона всё...если сильно захотеть...

Вопрос стоял о скорости выполнения. Я разьяснил. И как говорил один профессор математики выводя на память доказательство теорем - "Кто не верит, пусть проверит."

удачи Вам
(круглый)
ЗЫ
Считаю, что вопросов по теме оптимальности у Вас не осталось...
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Aragaer



Зарегистрирован: 28.03.2005
Сообщения: 164

СообщениеДобавлено: Чт Сен 08 2005 15:07    Заголовок сообщения: Ответить с цитатой

Сдаюсь. Пытался подвести какую-то логическую основу под то, что я не люблю switch'и и не умею ими пользоваться. В результате наговорил кучу ерунды Cool
_________________
Open your eyes.
And Awaken.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Программирование Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2002 phpBB Group
Русская поддержка phpBB

 

IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

Информация для рекламодателей PR-акции, размещение рекламы — adv@citforum.ru,
тел. +7 495 6608306, ICQ 232284597
Пресс-релизы — pr@citforum.ru
Послать комментарий
Информация для авторов
This Web server launched on February 24, 1997
Copyright © 1997-2000 CIT, © 2001-2006 CIT Forum
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...