Мой код до сих пор:
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
#include <math.h>
#include <time.h>
int main()
{
int i;
int rollDice;
int firInp;
int secInp;
printf("Enter the amount of faces you want your dice to have (MAX=24, MIN=1): ");
scanf("%d", &firInp);
printf("Enter the amount of throws you want(MAX=499, MIN=1): ");
scanf("%d", &secInp);
srand ( time(NULL) );
if (((firInp < 25)&&(firInp > 1))&&((secInp < 500)&&(secInp > 1))){
for(i = 0; i < secInp; i++){
rollDice = (rand()%firInp) + 1;
printf("%d \n", rollDice);
}
}
else{
printf("Sorry, these numbers don't meet the parameters. Please enter a number in the right parameters.");
}
return 0;
}
Я хочу иметь проценты в моем коде. Я думаю, что способ сделать это - сначала ввести вывод моего кода в массив. Если есть другой способ, пожалуйста, дайте мне знать.
редактировать: я хочу, чтобы вывод был примерно таким:
1 3 4 4 4 5 появление 1: 16,6 процента появление 3: ..и так далее
Почему бы тебе не попробовать?
Вы можете создать массив, который может содержать не менее secInp
значений или максимум, который вы определили для secInp
. Инициализируйте все элементы массива с 0 и в цикле увеличьте элемент массива, который соответствует выброшенному числу, и увеличьте общее число. В конце можно рассчитать процент. (Я предлагаю использовать имена переменных, которые соответствуют смыслу, например, faces
вместо firInp
и throws
вместо secInp
.)
Вместо того, чтобы хранить все выходные данные в массиве, вы можете использовать массив счетчиков. Этот массив будет состоять из firImp
элементов (по одному счетчику на грань). Инициализируйте все счетчики на 0 и увеличивайте соответствующий элемент, когда вы бросаете число. (Поскольку номиналы начинаются с 1, а индексы массива начинаются с 0, вам нужно будет учесть смещение, вычитая 1 из номинала, чтобы получить индекс массива.)
Вместо того, чтобы вводить выходные данные случайной функции в массив, вы можете просто использовать этот массив в качестве счетчика и увеличивать массив в позиции rollDice
каждый раз, когда появляется число. Затем вы можете легко извлечь процент, просуммировав все элементы массива и разделив каждый элемент на эту сумму.
Вы можете создать массив целых чисел, размер которого равен количеству возможных значений, которые могут выдать ваши кости. Затем вы используете его как счетчик количества полученных вами вхождений, индекс массива будет представлять это выходное значение (вы можете использовать rollDice-1, так как 0 не является возможным результатом игры в кости), и значение в index будет количеством вхождений. После того, как вы закончите бросать кости, вам просто нужно распечатать процент следующим образом:
for (int i=0;i<firInp;i++) { // firInp: n_faces = n_possible_values
printf("Occurrence of %d: %.1f percent\n", i+1, ((float)array[i]*100)/(float)secInp);
}
Я приближаюсь, но еще не там. Сейчас значения как минимум ниже сотни. иногда, если есть одно "1" из 6 значений, я получаю процент от 1 как сто. когда должно быть 16.6
Для более точного значения вы должны привести к плаванию все элементы операции или определить их как плавающие с самого начала. Я исправил ответ, посмотрите. Теперь вы должны правильно увидеть 16,7 (16,66666 округляется до 16,7) процента, когда у вас есть только одно вхождение числа в примере с шестью бросками.
Разве
(firInp > 1)
не должно быть(firImp > 0)
(и то же самое дляsecImp
), если минимальное значение равно 1?