симулятор броска игральной кости - выходная частота каждого броска в гистограмме

У меня есть весь код, где пользователь может выбрать number of sides из двух игральных костей, total number of rolls, и он печатает histogram of the values rolled. Я не могу понять, как сделать так, чтобы frequency каждого значения отображались на гистограмме рядом с соответствующими номерами. У меня есть, как мне кажется, весь соответствующий код, если нет, я добавлю еще. Я просмотрел этот сайт и нашел в основном matlab code.

 case 2:
     printf("\nEnter number of trials: ");
     fgets(runinput, sizeof(runinput), stdin);
     sscanf(runinput,"%d",&n);
     if (n > nmax){
         printf("Your choice of %d has exceeded the max value of trials. Value set to max of %d.",n,nmax);
         n = nmax;
         printf("\nRolling dice...");
         tried++;
     }
     else{
         printf("\nRolling dice...");
     }
     for (i=0; i <= s; i++){
         a[i] = 0;
     }
     for (i=0; i <=n-1 ; i++){
         d1 = rand()%s;
         d2 = rand()%s;
         result = d1+d2;
         x = random()%(2*s-1);
         a[result]++;
         results[i] = a;
     }
     break;
 case 3:
     if (tried != 0){
         printf("\nPrinting histogram...\n");
         for (i=0; i <= 2*s-2; i++){
             freq = results[i];
             printf("%5i|  %10i  - ", i+2, freq);
             for (j=0; j < a[i]+2; j++){
                 while (a[i] > 0){
                     if (a[i] >= 100){
                         printf("X");
                         a[i]=a[i]-100;
                     }
                     else if (a[i]>=10){
                         printf("x");
                         a[i]=a[i]-10;
                     }
                     else {
                         printf("*");
                         a[i]=a[i]-1;
                     }
                  }
              }
              printf("\n");
          }
      puts("X = 100, x = 10, * = 1\n");
      break;

Все, что я пытаюсь добавить, это частота появления каждого числа на гистограмме, любая помощь и объяснение приветствуются, я только в CS239, поэтому я все еще учусь. Заранее спасибо!

РЕДАКТИРОВАТЬ: какой код мне нужен, чтобы использовать массив для вычисления частоты каждого числа, которым управляют? Иногда я нахожу людей, которые делают похожие вещи, но с гораздо более продвинутыми методами программирования, чем я знаю, как их использовать или которые будут приняты моим инструктором.


person Mr. F    schedule 28.10.2014    source источник


Ответы (1)


Сохраните все результаты в одном массиве, а затем выполните итерацию по массиву. В конце дня вы получаете еще один массив, и вы также можете перебирать его, чтобы напечатать любое значение.

$array = [1, 6, 6, 6, 8, 9, 0,];
$counter = [];

foreach ($array as $value) {
   $counter[$value] ++;
}

print_r($counter);

Каждый ключ второго массива ($counter) имеет значение броска кубика, а $value этого ключа имеет частоту.

EDIT (неправильный язык): Ну, я написал PHP вместо C; мне жаль :(

Вы можете попробовать что-то близкое к исходной идее, вы можете проверить этот пост о том, как итерировать массив C, а затем просто добавляйте числа по мере нахождения повторяющихся чисел в новый массив и вуаля!

Я надеюсь, что это поможет, снова я сожалею о том, что испортил языки: P

person Solrac    schedule 28.10.2014
comment
Хорошо, спасибо. Я никогда раньше не использовал $ или функцию foreach(), и я не совсем понимаю, как это будет реализовано, но я попробую. - person Mr. F; 28.10.2014
comment
Мальчик, я облажался!! :( - person Solrac; 28.10.2014
comment
ха-ха, я думал, что это выглядит запутанным! Не беспокойтесь, я ценю, что вы нашли время, чтобы попытаться помочь новичку. - person Mr. F; 29.10.2014