W kompilatorach: g77 i f95 sa dostępne dwie funkcje:
IARGC integer iargc() - pobranie liczby argumentow eg. ./a.out ala ma kota -< 3 GETARG call getarg(i,arg) - pobranie i-tego argumentu < character*(*) arg i=0,iargc
Program testowy wygląda tak:
program test_arg
integer iargc
integer argc
character*50 argv(10)
argc=iargc()
write (*,*) 'Liczba argumentow:', argc
do i=1,min(argc,10)
call getarg(i,argv(i))
write (*,*) 'Argument numer',i,'=',argv(i)
enddo
end
Jeśli ktoś lubi notacje XY, to o tablicach Fortranowych, bedzie myślał tak:
dimension tablica(4,10)
tablica(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
W pamięci: __ tab(1,3)
/
/
0 1 2 3 -1 0 1 2 -2 -1 0 1 -3 -2 -1 0 ...
\ / \ / \ / \ /
1 wiersz 2 wiersz 3 wiersz 4 wiersz
j=1 j=2 j=3 j=4
tablica(1,j) --- poczatek j-tego wiersza
Przykład użycia:
subroutine test(tab)
dimension tab(4)
print *,(tab(i),i=1,4)
end
call test(tablica(1,j))
przekaże j-ty wiersz do wypisującej procedury
Jeśli ktoś woli zapis wskaźników w kolejności macierzowej, będzie mówił o kolumnach zamiast wierszy. Prócz tej nomenklatury, nic się nie zmieni.
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