Ir ao conteúdo
  • Cadastre-se

Monte Carlo em C (Dúvida)


insaneq

Posts recomendados

Olá,

 

Não sou nenhum programador experiente, porém fui solicitado em uma matéria da faculdade para implementar um código de Monte Carlo em qualquer linguagem à minha escolha, então fiz em C. 

O único problema é que o programa não está rodando direito. Um dos vetores assume alguns valores estranhos, e não sei como acontece isso. Alguém poderia por favor me ajudar?!

 

 

#include<stdio.h>
#include<time.h>
#include<stdlib.h>
 
int main ()
{
int N=0;
        int classes[N];
double atend[N];
double freq[N];
int freqtotal=0; 
double freqac[N];
int S[100];
int A=0,B=0;
int SIM=0;
double media=0;
int i,j;
 
 
printf("Bem-vindo! Comece o programa digitando quantia de classes utilizada:\n");
        scanf("%d",&N);
        
        printf("Bem-vindo! Comece o programa digitando a media das classes utilizadas:\n");
for(i=0;i<N;i++)
        {
        scanf("%d",&classes);
        }
 
        printf("Agora digite frequencia de cada classe:\n");
        for(i=0;i<N;i++)
        {
        scanf("%lf",&atend);
        }
 
        
        printf("Digite o numero de simulacoes desejadas:\n");
        scanf("%d",&SIM);
    
         for(i=0;i<N;i++) /*função para definir a frequencia total*/
        {
        freqtotal = freqtotal + atend;
        }
        
        
        for(i=0;i<N;i++) /*função para saber a % da quantia de atendimentos em cada classe*/
        {
        freq = (atend/freqtotal);
}
 
for(i=0;i<N;i++) /*função para conseguir frequencia acumulada*/
        {
        freqac = freqac[i-1] + freq;
}
 
 
for(j=0;j<5;j++) /*função para preencher o Vetor S que contém as médias das classes espalhadas de acordo com a frequencia acumulada*/
{
for(i=freqac[j];i<100;i++)
{
S=classes[j];
}
}
 
 
for(i=0;i<SIM;i++) /*serve para gerar um humero aleatorio de 0 a 99 e procurar sua posição no vetor S e adicionar a um número A, do qual será feita uma média no final para representar as amostras de cada simulação*/
{
B=0;
srand((unsigned)time(NULL));
B = rand() % 100;
A = A + S;
}
 
media = (A/SIM);
printf("A media e %lf",media);
return 0;
}
Link para o comentário
Compartilhar em outros sites

  • Membro VIP

@insaneq

Bom dia.

 

Lá no final, acredito que tenha que usar casting nessa divisão. A variável "A" é int e o resultado da divisão descarta o resto. 

 

Tente usar o printf do double assim, trocando %lf por %f:

printf("A media e %f",media);

Se não funcionar, tente usar float no lugar de double em todo o código.

Link para o comentário
Compartilhar em outros sites

Essas declarações devem vir após o scanf da quantidade.

int classes[N];double atend[N];double freq[N];double freqac[N];
Faça esses dois testes e veja a diferença:

1)

int main(){    int N = 0;    int v[N];    scanf("%d", &N);    printf("Tamanho: %d\n", sizeof(v) / sizeof(int));    return 0;}
2)

int main(){    int N = 0;    scanf("%d", &N);        int v[N];    printf("Tamanho: %d\n", sizeof(v) / sizeof(int));    return 0;}
  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...