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