Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
IntelCoreDuo
11 / 11 / 0
Регистрация: 09.11.2013
Сообщений: 52
#1

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

19.11.2013, 15:43. Просмотров 720. Ответов 5
Метки нет (Все метки)

Всем доброго времени суток. Изучаю самостоятельно С++. Возник вопрос по поводу функции 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 и так же с другими числами? Я правильно понял?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.11.2013, 15:43
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Принцип работы switch (C++):

Принцип работы функции - C++
Помогите, пожалуйста, разобраться в принципе работы функции //Функция находит самую длинную неубывающую подпоследовательность void...

Getline принцип работы - C++
Не совсем понимаю как влияет цикл. Да, выводится все сообщение, каждая срока с новой строки. Но, как тут происходит взаимодействие с...

Принцип работы программы - C++
Смысл программы: подсчет количества слов и предложений из подключенного файла. Код есть, только не понимаю, почему подсчет слов (s) идет...

объсните принцип работы - C++
Объясните кому не сложно принцип работы данной программы Планируется переписывание на паскале #include &lt;fstream&gt; using namespace ...

Принцип работы конструктора - C++
Объясните пожалуйста на простом примере принцип работы конструктора в С++. Я сейчас начал их изучать и никак не могу въехать. Спасибо.

Принцип работы pthread_join - C++
Есть код функции pthread_join из glibc. Подскажите: 1) Номер строки и что происходит, если для потока уже вызвали pthread_join? Тут...

5
Folko
265 / 253 / 7
Регистрация: 27.09.2013
Сообщений: 877
Записей в блоге: 1
19.11.2013, 15:45 #2
IntelCoreDuo, она не присваивает. Она проверяет значение указанной в скобках переменной. Если х = 1, то она выполнит ветку case 1, если х = 80050, то будет выполняться case 80050.
То есть тут в цикле сначала выбрасывается случайное число, а потом увеличивается счетчик соответствующей грани. Как я понял, тут считается количество выпадений для каждой стороны кубика. Выпало 2, идем по case 2, то есть увеличиваем gran2 на 1
1
Max Dark
шКодер самоучка
1851 / 1651 / 603
Регистрация: 09.10.2013
Сообщений: 3,678
Записей в блоге: 6
Завершенные тесты: 2
19.11.2013, 15:57 #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;
 
}
0
Tulosba
19.11.2013, 16:10
  #4

Не по теме:

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

0
Max Dark
19.11.2013, 16:12
  #5

Не по теме:

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

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

Не по теме:

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

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.11.2013, 16:13
Привет! Вот еще темы с ответами:

Принцип работы рекурсии - C++
Искал в инете и в поиске, но никак не могу понять принцип работы рекурсии программно. Допустим есть функция int f(int n) { if(0 ==...

Принцип работы fstream - C++
Допустим у нас есть файл из четырех чисел, например: 453 32 43 54. Я создаю экземпляр класса ifstream и инициализирую массив из четырех...

Принцип работы strpbrk - C++
Изначально я думал, что он возвращает только 1ый символ, но эта функция _string operator*(_string &amp;a){ _string t; ...

Объясните, пожалуйста, принцип работы. - C++
Есть прога, считает сумму ряда, но ряд - знакочередующийся (-1,1,-1,...). При подсчете программа заканчивае работу на 1023 члене. Но чем...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
19.11.2013, 16:13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru