There are 2 functions avialable in g77 and f95 compilers:
IARGC integer iargc() - gives number of program arguments eg. ./a.out ala ma kota -< 3 GETARG call getarg(i,arg) - to obtain value of i-th argument < character*(*) arg i=0,iargc
Test program looks as folows:
program test_arg integer iargc integer argc character*50 argv(10) argc=iargc() write (*,*) 'Number of arguments:', argc do i=1,min(argc,10) call getarg(i,argv(i)) write (*,*) 'Argument no',i,'=',argv(i) enddo end
If someone likes XY notation he will be thinking about Fortran arrays in this way:
dimension table(4,10) table(i,j) = i - j i ----> j | | \|/ 0 1 2 3 -1 0 1 2 -2 -1 0 1 -3 -2 -1 0 -4 -3 -2 -1 -5 -4 -3 -2 -6 -5 -4 -3 -7 -6 -5 -4 -8 -7 -6 -5 -9 -8 -7 -6 In memory: __ tab(1,3) / / 0 1 2 3 -1 0 1 2 -2 -1 0 1 -3 -2 -1 0 ... \ / \ / \ / \ / row 1 row 2 row 3 row 4 j=1 j=2 j=3 j=4 table(1,j) --- it is the begining of j-th row Example usage: subroutine test(tab) dimension tab(4) print *,(tab(i),i=1,4) end call test(table(1,j)) will pass j-th row to printing subroutine
If someone likes different order of indices, he should change names row>-<columns only, in memory it will stay as is.
W Fortranie 77 nie ma standartu dotyczącego generatorów liczb pseudo-losowych, dlatego każdy kompilator ma własne funkcje i wlasny ich sposób wywoływania. Poniżej przedstawiam dwa sposoby na otrzymanie liczb pseudo-losowych działające w kompilatorze GNU:
1. Inicjalizujemy generator podając ziarno za pomocą procedury srand
program random_test1 implicit none real a,b,c,d call srand(22231) a=rand(0) b=rand(0) c=rand(0) d=rand(0) print *, "first 4 numbers:", a, b, c, d end
2. Inicjalizujemy generator podając ziarno w pierwszym wywołaniu funkcji rand
program random_test2 implicit none real a,b,c,d a=rand(22231) b=rand(0) c=rand(0) d=rand(0) print *, "first 4 numbers:", a, b, c, d end
Uwaga, program wywołany z tym samym ziarnem da te same wyniki!
Do prawdziwych obliczeń należy ziarno zaczerpnąć z jakiegos niezależnego żródła. Polecam czytanie z urządzenia /dev/random, ale najłatwiejszym i najszybszym sposobem jest pobranie czasu systemowego i użycie jego jako ziarna generatora. Ciekawostką jest to, że programy uruchomione w tej samej sekundzie, dadzą te same wyniki.
program random_test3 implicit none real a,b,c,d integer seed c get system time as seed (number of seconds from 1970) seed=time() c start generator with seed call srand(seed) c take successive numbers a=rand(0) b=rand(0) c=rand(0) d=rand(0) print *, "first 4 numbers:", a, b, c, d print *, "with seed=",seed end