Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
Entre para seguir isso  
Modelamento

Código c para Fortran 90

Recommended Posts

Boa tarde, preciso de ajuda para passar este código em c para fortran 90. Já montei o programa em fortran, porém não consigo o mesmo resultado, por favor, preciso de ajuda.

 

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
 
/* if you don't have drand48 uncomment the following two lines */
/*    #define drand48 1.0/RAND_MAX*rand  
      #define srand48 srand                */                    
       
#define max 40000                        /* number of iterations  */
#define size 401                         /* size of grid array  */
#define PI 3.1415926535897932385E0
#define seed 68111             /* seed for number generator */
 
main()
{
   double angle, rad = 180.0;
   int i,j, x, y, dist, dir, step, trav;
   int grid, hit;
   int gauss_ran();            /* gaussian random number */
    
   FILE *output;            /* save data in dla.dat */
   output = fopen("dla.dat","w");    
    
   for(i=0; i<size; i++)        /* clear grid */
   {
      for(j=0; j<size; j++) grid[j] = 0;
   }
   grid[200][200] = 1;            /* one particle at the center */  
   srand48(seed);            /* seed number generator */
    
   for(i=0; i<max; i++)                 /* choose starting point  */
   {
      hit   = 0;
      angle = (2*PI*drand48());        /* random angle */
      x     = (200+rad*cos(angle));     /* coordinates */
      y     = (200+rad*sin(angle));
       
      dist = gauss_ran();     /* random number gaussian dist. */
      if (dist<0) step=-1;    /* move forwards or backwards */
      else step=1;
          
      trav=0;
      while((hit==0)&&(x<399)&&(x>1)&&(y<399)&&(y>1)&&(trav<abs(dist)))
      {
         if(grid[x+1][y]+grid[x-1][y]+grid[x][y+1]+grid[x][y-1]>=1)
         {
             hit = 1;              /* one neighbor is occupied */
             grid[x][y] = 1;        /* particle sticks, walk is over */
         }
         else if(drand48() < 0.5) x+=step;      /* move horizontally */
              else                y+=step;      /* move vertically */
       
         trav++;
      }   
   }
    
   for(i=0; i<size; i++)             /*  print resulting grid  */
   {
      for(j=0; j<size; j++)
      {
         if(grid[j]==1) fprintf(output,"%d\t%d\n", i, j);
      }
   }
   printf("data stored in dla.dat\n");
   fclose(output);
}
/*--------------------------end of main program-----------------------*/
 
/* generates random numbers with gaussian distribution using the */
/* Box-Mueller method */
int gauss_ran()
{
   double fac, rr, r1, r2;
   static int old=0;        /* have to be static so information */
   static int mem;        /* survives between function calls */
    
   if (old==0)            /* no random number left from */
   {                /* previous function call */
      do
      {
         r1= 2.0*drand48()-1.0;      /* choose random point in */      
         r2= 2.0*drand48()-1.0;         /* the unit circle */
         rr= r1*r1+r2*r2;               
      }while ((rr>=1)||(rr==0));     
    
      fac=sqrt(-2*log(rr)/rr);
      mem=5000*r1*fac;             /* save for next call */
      old=1;                 /* set flag */
       
      return((int)(5000*r2*fac));    
   }
   else                     /* return second number */
   {                     /* from last call */
      old=0;                 /* unset flag */
      return mem;                /* return number from last call */
   }
}  

 

Editado por dif
usar a tag CODE

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

Entre para seguir isso  





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

×