Форум программистов, компьютерный форум CyberForum.ru

Проверьте себя. А хорошо ли вы знакомы со switch'ом? - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Massey-Omura http://www.cyberforum.ru/cpp/thread29744.html
Люди добрые! Помогите кто чем может в написании прграммы, выполняющей этот алгоритм на С (желательно)...
C++ Case клавиш Подскажите пожалуйста, как мне узнать какие case у клавиш: w, a, s, d и пробела. Заранее спасибо. http://www.cyberforum.ru/cpp/thread29692.html
C++ Здраствуйте мои будущие колеги
я не могу решить эту задачу помогите, если не трудно: Ребенок нарисовал кружки, и некоторые из них соединил отрезками. Кружки он пометил целыми числами от 1 до N, а на каждом отрезке поставил стрелочку. Затем он приписал каждому кружочку вес в виде некоторого целого числа и определил начальный и конечный кружочки. Из первого он должен выйти, а во второй попасть. Ребенок решил для себя набрать...
C++ Окно с активной областью?
Написал прогу на С++,рисует в окошке фигуры,работа с классами,перегрузкой операций и так далее...(не суть как важно)....возникли проблемы...надо как то привязать область случайной генерации координат фигур и размерами окна...кажется через RectClient чтоли...чтобы за пределы окна не выходило....помогите кто в курсе плиз.... Добавлено через 15 минут 4 секунды Работа c MFC приложениями.....
C++ Я хочу начать самостоятельно учить C/C++ http://www.cyberforum.ru/cpp/thread29550.html
Я хочу начать самостоятельно учить C/C++. Но не знаю с чего начать(перед этим я учил Delphi)!!! Посоветуйте ПЛЗ. И если можно обьясните - чем отличается C от С++ и C++ Builder от Visual C++... СПС
C++ Нахождение самого короткого слова в строке Помогите пожалуйста решить задачу на С. Ввести массив строк символов (текст). В каждой строке найти длину самого ко-роткого слова. Словами считать группы символов, разделённые одним или несколь-кими пробелами. подробнее

Показать сообщение отдельно
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16937 / 5342 / 328
Регистрация: 30.03.2009
Сообщений: 14,366
Записей в блоге: 26
10.06.2009, 11:38  [ТС]     Проверьте себя. А хорошо ли вы знакомы со switch'ом?
Цитата Сообщение от Patch Посмотреть сообщение
Evg, ты пишешь как ДОЛЖЕН работать switch по логике, а не как он работает в реальных компиляторах.
Поясни конкретнее, что ты имеешь ввиду. Как ДОЛЖЕН работать switch написано в стандарте. Если ты имеешь в виду, что я пишу, как должен строить код switch'а компилятор, но я не пишу, что компилятор обязан что-то делать, а пишу о том, как хороший компилятор должен строит switch, чтобы он рабоал эффективно

Цитата Сообщение от Patch Посмотреть сообщение
просто программисты компиляторов все случаи предусмотреть не могут, и, в итоге, нередко все работает совсем не так как задумано.
Опять-таки, в хорошем компиляторе должно быть предусмотрено 99% случаев. Есть граничные случаи (например, 5 альтернатив, где более эффективным оказывается не тот вариант, где просчитано математическое количество операций, а тот, где состояние кэша команд или кэша данных в конкретный момент исполнения более способствует быстрому исполнению). "Хорошие" варианты (большое количество альтернатив, лежащих плотно), нормальный компилятор построит на таблице переходов

Цитата Сообщение от Patch Посмотреть сообщение
могу подкинуть еще идею все интересующимя:
попробуйте разработать код(алгоритм) с минимальным числом переходов.
посмотрим, что у вас получится.
потом напишу, что делал я.
Опять-таки, алгоритм чего?

Добавлено через 48 секунд
Цитата Сообщение от Eternal-Thunder Посмотреть сообщение
Evg, интересно было бы, для себя, увидеть код с отступами или {}. Проверить как бы, правильно ли я понял.
Здесь тоже вопроса не осилил

Добавлено через 25 минут 50 секунд
Eternal-Thunder, долшло, что ты имел ввиду. Вот такой код. При этом считай, что case'ы и default - это обычные метки, а операция switch - это динамический goto на одну из этих меток

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#include <stdio.h>
 
int main (void)
{
  int i,j;
 
  for (i = 0; i < 5; i++)
  {
    j=0;
 
    switch (i)
    {
      if (i != 1)
      {
        j = 11;
      } else
      {
    default:
        if (i != 2)
        {
    case 1:
          j = 22;
        } else
        {
    case 2:
          if (i != 3)
          {
    case 3:
            break;
          } else
          {
    case 4:
            j = 33;
          }
        }
      }
    }
 
    printf ("i=%d, j=%d\n", i, j);
  }
 
  return 0;
}
 
Текущее время: 12:13. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru