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

Принцип работы switch - C++

Восстановить пароль Регистрация
 
IntelCoreDuo
11 / 11 / 0
Регистрация: 09.11.2013
Сообщений: 52
19.11.2013, 15:43     Принцип работы switch #1
Всем доброго времени суток. Изучаю самостоятельно С++. Возник вопрос по поводу функции switch. Каким образом она работает на данном примере?
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
44
45
46
47
//частота выпадания одной из рёбер кости (бросок осущ. 6000 раз)
#include "stdafx.h"
#include <conio.h> 
#include <iostream>
#include <iomanip>
#include <math.h>
#include <stdlib.h>
 
using namespace std;
 
int main() {
  
    setlocale(LC_ALL, "Russian");
 
 int gran1(0), gran2(0), gran3(0), gran4(0), gran5(0), gran6(0);
 
  for (int roll = 1; roll <= 6000; roll++){// здесь цикл с количеством выполнения броска
      int face = 1 +rand() % 6;// генерирую число от 1 до 6
      switch (face){// Каким образом эти значения присваиваются? Как в итоге я получаю в конце частоту
                  case 1:// выпадания каждой грани?
          ++gran1;
          break;
            case 2:
          ++gran2;
          break;
            case 3:
          ++gran3;
          break;
            case 4:
          ++gran4;
          break;
            case 5:
          ++gran5;
          break;
            case 6:
          ++gran6;
          break;
      }
  }
 
  cout << gran1 << setw(10) << gran2 << setw(10) << gran3 << setw(10)
       << gran4 << setw(10) << gran5 << setw(10) << gran6;
       
    getch();
    return 0;
 
}
Как эта функция работает для подсчёта нажатий с клавиатуры - понимаю, а вот здесь, в случае с бросанием игральной кости - не совсем.

Добавлено через 11 минут
Или единица в case 1, например, это и есть то число, которое должно совпасть с face? Т.е. если рандомно выпадет единица, то тут же число 1 прибавится к gran1 и так же с другими числами? Я правильно понял?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.11.2013, 15:43     Принцип работы switch
Посмотрите здесь:

объсните принцип работы C++
C++ Объясните, пожалуйста, принцип работы.
C++ Принцип работы рекурсии
C++ LZSS принцип работы алгоритма
Принцип работы конструктора C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Folko
 Аватар для Folko
265 / 253 / 7
Регистрация: 27.09.2013
Сообщений: 877
Записей в блоге: 1
19.11.2013, 15:45     Принцип работы switch #2
IntelCoreDuo, она не присваивает. Она проверяет значение указанной в скобках переменной. Если х = 1, то она выполнит ветку case 1, если х = 80050, то будет выполняться case 80050.
То есть тут в цикле сначала выбрасывается случайное число, а потом увеличивается счетчик соответствующей грани. Как я понял, тут считается количество выпадений для каждой стороны кубика. Выпало 2, идем по case 2, то есть увеличиваем gran2 на 1
Max Dark
В поиске работы
 Аватар для Max Dark
1546 / 1399 / 501
Регистрация: 09.10.2013
Сообщений: 3,185
Записей в блоге: 8
Завершенные тесты: 2
19.11.2013, 15:57     Принцип работы switch #3
face в данном контексте номер грани
с помощью switch определяется какая грань выпала и увеличивается счетчик выпадений для соответствующей грани

Данный код можно переписать без switch, если использовать массив счетчиков вместо отдельных переменных
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
#include <stdlib.h>
 
using namespace std;
 
int main() {
 
  int grans[6] = {0};
  int roll;
 
  for (roll = 0; roll < 6000; roll++){// здесь цикл с количеством выполнения броска
      int face = rand() % 6;// генерирую число от 1 до 6
      grans[face]++;
  }
 
  for(roll=0; roll< 6; ++roll)
      cout << grans[roll] << setw(10);
       
  return 0;
 
}
Tulosba
19.11.2013, 16:10
  #4

Не по теме:

Цитата Сообщение от Cra3y Посмотреть сообщение
rand() % 6;// генерирую число от 1 до 6
от 0 до 5.
И не оч.хорошо использовать одну и ту же переменную (roll) в разных циклах.

Max Dark
19.11.2013, 16:12
  #5

Не по теме:

Tulosba, я комент забыл поправить)

Tulosba
19.11.2013, 16:13     Принцип работы switch
  #6

Не по теме:

Цитата Сообщение от Cra3y Посмотреть сообщение
я комент забыл поправить)
копипаста - зло

Yandex
Объявления
19.11.2013, 16:13     Принцип работы switch
Ответ Создать тему
Опции темы

Текущее время: 13:58. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru