Использование нескольких циклов For-Loop в C - PullRequest
0 голосов
/ 27 сентября 2018

Мое задание - симуляция с подбрасыванием монеты, которая должна выполнить 10, 100, 1000, 100 000 и 1 миллион испытаний.Другими словами, одно выполнение программы охватывает все шесть испытаний.Код для фактического броска монеты должен быть выполнен в другой функции.Мне интересно, возможно ли написать программу, которая имеет несколько не вложенных циклов, таких как:

for(unsigned int counter = 1; counter <= 10; counter++)

for(unsigned int counter = 1; counter <= 100; counter++)

и т. Д.

РЕДАКТИРОВАТЬ: Выходные данные должны сказать что-то вроде:

Trials: 10   Heads: 30% Tails 70%
Trials: 100 ….

И так далее.Забыл включить это, извините!

Очевидно, что писать это очень утомительно, и я не хочу вызывать мою функцию coinToss шесть раз;но я не уверен, как еще имитировать подбрасывание монет при каждом испытании (10 ... 1 миллион).

1 Ответ

0 голосов
/ 27 сентября 2018

Есть много способов сделать это.Вот некоторые из них.

1) Используйте внешний цикл для генерации количества испытаний.Хорошо работает, если количество испытаний следует легко генерируемому шаблону, как в вашем вопросе.

for (unsigned int trials = 10; trials <= 1000000; trials *= 10)
    for(unsigned int counter = 1; counter <= trials; counter++)
    {
        // do stuff
    }

2) Используйте таблицу с произвольными значениями, если шаблон не так просто сгенерировать.

unsigned int trials[] = { 15, 97, 1003, 10100, 100444, 999999, 0 };
for (int i = 0; trials[i] > 0; i++)
    for(unsigned int counter = 1; counter <= trials[i]; counter++)
    {
        // do stuff
    }

3) Поместите цикл в функцию и вызовите функцию несколько раз.

void foo(unsigned int trials)
{
    for(unsigned int counter = 1; counter <= trials; counter++)
    {
        // do stuff
    }
}

int main(void)
{
    foo(10);
    foo(100);
    foo(1000);
    foo(10000);
    foo(100000);
    foo(1000000);   
}

Вы также можете объединить 3) с 1) или 2).Например, объединение 3) с 1) выглядит следующим образом

void foo(unsigned int trials)
{
    for(unsigned int counter = 1; counter <= trials; counter++)
    {
        // do stuff
    }
}

int main(void)
{
    for (unsigned int trials = 10; trials <= 1000000; trials *= 10)
        foo(trials);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...