Ir ao conteúdo
  • Cadastre-se
Eliton Gomes

Meu programa não funciona, parece estartudo certo

Recommended Posts

#include <stdio.h>
#include <math.h>
#include <stdlib.h>

int main(){
    // declaração de variaveis
    int i, j, L, n,start,ncfi,k1,k2,k3,k4;
    
    double magnet[5000],magnet_med, S[100][100],p,BJ,T,r, somaup[5000], somadown[5000];

    // constantes
    L=100;
    T=1.8;
    BJ=1/T;
    ncfi=5000;
    
    
    printf("start=?");    
    scanf("%d",&start);
     
     
    if(start==1){
        for(i=1;i<=L;i++){
            for(j=1;j<=L;j++){
                S[j]=1.0;
            }
        }
    }
    else {
        for(i=1;i<=L;i++){
            for(j=1;j<=L;j++){
                r=rand()%10;
                if(r<=5) S[j]=1.0;
                else S[j]=-1.0;
                
            }
        }
    }
        
    for(n=1;n<=ncfi;n++){
       somaup[n]=0.0;
       somadown[n]=0.0;
      
       for(i=0;i<=L;i++){ 
        printf("start=?");    
       
            for(j=1;j<=L;j++){          
               //condições de contorno          
               k1=i-1;
               if(i==1) k1=L; 
               
               k2=i+1;
               if(k2>L)  k2=k2-L;
               
               k3=j-1;
               if(j==1) k3=L;
               
               k4=j+1;
               if(k4>L) k4=k4-L;
          
    
        //calcula o probabilidade de mudar de configuração
        
        p=exp(-2*BJ*(S[k3]*S[j]+S[j]*S[k4]+S[k1][j]*S[j]+ S[j]*S[k2][j])); 
        
                if(n==1) S[j]=S[j];
             else if (p>=1) S[j]=-S[j];
             else{               
               r=(rand()%10)/10;
                if(r<=p) S[j]=-S[j];}
        // cálculo da somaup
        if(S[j]==1) somaup[n]=somaup[n]+1;
            
            // cálculo da somadown
        if(S[j]==-1) somaup[n]=somaup[n]+1;

         //cálculo da magnetização    
               
    magnet[n]=(1/pow(L,2))*(somaup[n]-somadown[n]);
  
                    
           }
           
         
       }
        
    }
    
    magnet_med=0;
         
         for(n=1;n<ncfi;n++){
             
          magnet_med=(magnet_med+magnet[n]);

             
         }  
         
           magnet_med=magnet_med/ncfi;
           
        printf("a media e : %e",magnet_med);
        
         
    
}

Compartilhar este post


Link para o post
Compartilhar em outros sites
42 minutos atrás, Gustavo.Loggin disse:

Cara, seu programa está com inúmeras falhas... Não chega nem a compilar. Sugiro que o refaça em uma IDE tipo o CodeBlocks que lhe auxilia com cada erro.

 

compila moço

não aponta nenhum erro somente não entra no 3 for

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se S é uma matriz (S[100][100]) como você está tentando fazer uma atribuição como se de um vetor se tratasse justo aqui:
 

//...
    if ( start == 1 ) {
        for ( i = 1; i <= L; i++ ) {
            for ( j = 1; j <= L; j++ ) {
                S[j] = 1.0; //<------vetor? é uma matriz
            }
        }
//...

O certo não seria s[j]= 1.0? Arrume isso e veja se funciona.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Algumas IDE's não mostram os não tão famosos warnings (alerta), onde é feito um apontamento para uma parte do código em que esta sendo feito de maneria incorreta e poderá produzir falhas indesejadas no futuro.

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Posta seu código usando a ferramente <> do post, seu código veio desconfigurado, retirando o da matriz S. Ou poste pelo pastebin.com

Compartilhar este post


Link para o post
Compartilhar em outros sites

#include <stdio.h>
#include <math.h>
#include <stdlib.h>
int main(){
    // declaração de variaveis
    int i, j, L, n,start,ncfi,k1,k2,k3,k4;
    
    double magnet[5000],magnet_med, S[100][100],p,BJ,T,r, somaup[5000], somadown[5000];
    // constantes
    L=100;
    T=1.8;
    BJ=1/T;
    ncfi=5000;
    
    
    printf("start=?");    
    scanf("%d",&start);
     
     
    if(start==1){
        for(i=1;i<=L;i++){
            for(j=1;j<=L;j++){
                S[j]=1.0;
            }
        }
    }
    else {
        for(i=1;i<=L;i++){
            for(j=1;j<=L;j++){
                r=rand()%10;
                if(r<=5) S[j]=1.0;
                else S[j]=-1.0;
                
            }
        }
    }
        
    for(n=1;n<=ncfi;n++){
       somaup[n]=0.0;
       somadown[n]=0.0;
      
       for(i=0;i<=L;i++){ 
        printf("start=?");    
       
            for(j=1;j<=L;j++){          
               //condições de contorno          
               k1=i-1;
               if(i==1) k1=L; 
               
               k2=i+1;
               if(k2>L)  k2=k2-L;
               
               k3=j-1;
               if(j==1) k3=L;
               
               k4=j+1;
               if(k4>L) k4=k4-L;
          
    
        //calcula o probabilidade de mudar de configuração
        
        p=exp(-2*BJ*(S[k3]*S[j]+S[j]*S[k4]+S[k1][j]*S[j]+ S[j]*S[k2][j])); 
        
                if(n==1) S[j]=S[j];
             else if (p>=1) S[j]=-S[j];
             else{               
               r=(rand()%10)/10;
                if(r<=p) S[j]=-S[j];}
        // cálculo da somaup
        if(S[j]==1) somaup[n]=somaup[n]+1;
            
            // cálculo da somadown
        if(S[j]==-1) somaup[n]=somaup[n]+1;
         //cálculo da magnetização    
               
    magnet[n]=(1/pow(L,2))*(somaup[n]-somadown[n]);
  
                    
           }
           
         
       }
        
    }
    
    magnet_med=0;
         
         for(n=1;n<ncfi;n++){
  
          magnet_med=(magnet_med+magnet[n]);
             
         }  
         
           magnet_med=magnet_med/ncfi;
           
        printf("a media e : %e",magnet_med);
       
         
    
}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

×