I made a code to simulate the Monty Hall paradox, so that I can simulate 1000 times the results and write the statistics. However, I can not divide an element from an 'array' of 'int' by an 'int', every time I run the program, when it arrives in the room, the program hangs and has to be closed:
void main(){
int PORTAS [] = {0, 0, 0};
int CAR, ESC, NUM, DECISAO, AUX;
float VIT, DER;
int ESTAT [] = {0, 0, 0}; // {Tentativas, vitórias, derrotas}
VIT = ( ESTAT[2] / NUM ) * 100; // Porcentagem de vitórias *ERRO*
DER = ( ESTAT[3] / NUM ) * 100; // Porcentagem de derrotas *ERRO*
}
I also tried writing as:
VIT = ESTAT[2]/ESTAT[1]*100;
DER = ESTAT[3]/ESTAT[1]*100;
But in this way, the result always gives 0.
If necessary to help me, I will put the complete code, which includes at the beginning a brief explanation of the game. If you feel you do not need to ignore the code below:
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
#include <math.h>
/*Paradoxo de Monty Hall
*Atrás de uma porta, de três no total, é escondido um carro
*e nas outras duas, uma cabra. No jogo, o jogador escolhe uma
*porta e então é revelada outra porta que contenha uma cabra.
*O jogador tem então a opção de escolher entre manter a escolha
*ou trocar de porta. Esse programa simula esse jogo, de modo que
*a porta seja mantida ou trocada em todas as tentativas, para
*motivos estatísticos.*/
void main(){
setlocale (LC_ALL, "");
int PORTAS [] = {0, 0, 0}; // 0 - a porta contém uma cabra; 1 - a porta contém o carro
int CAR, ESC, NUM, DECISAO, AUX;
float VIT, DER;
int ESTAT [] = {0, 0, 0}; // {Tentativas, vitórias, derrotas}
printf("1 para trocar todas, 0 para manter todas: ");
scanf ("%d", &DECISAO);
printf ("Digite o número de repetições: "); // Recomendável 10, 100 ou 1000.
scanf ("%d", &NUM);
do{
CAR = rand () %3; // Randomiza a porta que recebe o carro.
PORTAS [CAR] = 1;
ESC = rand () %3; // Randomiza a escolha da porta.
if ( DECISAO == 1 ){ // Se foi escolhido trocar todas as vezes.
if ( PORTAS [ESC] == 1 ){ // Porta escolhida contém o carro.
for ( AUX = 0; AUX < 3 ; AUX++ ){
if ( PORTAS [AUX] != 1 && AUX != ESC ){
ESC = AUX; //Mudança de porta
AUX = 3; // Para quebrar o 'For'
ESTAT [3] += 1;
}
}
}
if ( PORTAS [ESC] == 0){ //Porta escolhida contém uma cabra.
ESC = CAR; // Pois sendo a porta errada, e tendo a outra errada sido revelada, só sobrou a correta.
ESTAT [2] += 1;
}
}
if ( DECISAO == 0){ //Caso tenha sido escolhido manter todas as vezes.
if ( ESC = CAR ){
ESTAT [2] += 1;
}
else{
ESTAT [3] += 1;
}
}
NUM--;
ESTAT [1] += 1;
} while ( NUM > 0);
VIT = ( ESTAT[2] / NUM ) * 100; // Porcentagem de vitórias *ERRO*
DER = ( ESTAT[3] / NUM ) * 100; // Porcentagem de derrotas *ERRO*
( DECISAO == 1 ) ? printf ("\n\n\n\tTrocando de porta todas as vezes: \n\n") : printf ("\n\n\n\tMantendo a porta todas as vezes: \n\n");
printf ("Número de tentativas: %d\n", ESTAT [1]);
printf ("Número de vitórias: %d, %d%% do total.\n", ESTAT [2], VIT);
printf ("Número de derrotas: %d, %d%% do total.", ESTAT [3], DER);
getch();
}