140 likes | 358 Views
Wyrażenia. Wyrażenie w Fortranie jest poprawną syntaktycznie kombinacją zmiennych, stałych, operatorów i funkcji. Wyrażenia są “jednozdaniowymi” przepisami na obliczanie/tworzenie jakichś wartości. Typy wyrażeń: arytmetyczne logiczne łańcuchowe. Przykłady wyrażeń:
E N D
Wyrażenia • Wyrażenie w Fortranie jest poprawną syntaktycznie kombinacją zmiennych, stałych, operatorów i funkcji. • Wyrażenia są “jednozdaniowymi” przepisami na obliczanie/tworzenie jakichś wartości. • Typy wyrażeń: • arytmetyczne • logiczne • łańcuchowe Przykłady wyrażeń: 2.0+sqrt(x**3)+log(x) ! Wyrażenie arytmetyczne A1 .GT. A2 .OR. DELTA .LT. 0 ! Wyrażenie logiczne 3HAla//1H //’ma kota’ ! Wyrażenie łańcuchowe
Operatory w Fortranie Operatory działają na operandy Unarne (jeden operand) Binarne (dwa operandy) Arytmetyczne (4 działania ) Relacyjne (dla liczb lub dla łańcuchów) Logiczne Bitowe Łańcuchowe
Wynik operacji binarnej ma zawsze typ najwyższy z typów operandów np. operandy typów REAL*8 i INTEGER dają REAL*8 W przypadku typów liczbowych mamy hierarchię INTEGER<REAL<COMPLEX Hierarchia operandu tego samego typu jest tym wyższa im więcej bajtów zajmuje operand np. INTEGER*1 < INTEGER*2 < INTEGER*4)
Operatory arytmetyczne (operandy muszą być INTEGER, REAL lub COMPLEX) Priorytet: **>*>+/->zmiana znaku
Użycie nazw funkcji podanych w tabelce jest na ogół bezpieczne ponieważ typ funkcji dostosowuje się do najwyższego typu argumentu; np. SIN(1.0d0) automatycznie zostanie obliczony dla argumentu podwójnen precyzji. Dla przejrzystości i przenaszalności warto jednak uwzględniać typ funkcji: • Obowiązuje reguła pierwszej litery, czyli MIN jest typu INTEGER a SIN REAL. • Jeżeli funkcja o nazwie zaczynającej się na [I-N] ma być REAL to dodajemy na początku “A”, np. AMIN. Podobnie, dodanie “I” na początku nazwy nie zaczynającej się na [I-N] implikuje typ INTEGER (np. IABS zamiast ABS). • Jeżeli funkcja ma być podwójnej precyzji, dodajemy “D”, np. DSQRT. • Dla COMPLEX lub DOUBLE COMPLEX dodajemy odpowiednio “C” lub “CD”, np. CSQRT lub CDSQRT.
Operatory relacyjne Operandy muszą być typów REAL lub INTEGER. Wynik działania operatora relacyjnego jest typu LOGICAL
Operatory logiczne Operandy muszą być typu LOGICAL. Priorytet: .NOT. > .AND. > OR. > .EQV. = .NEQV.
Instrukcja podstawienia (przypisania) zmienna=wyrażenie Typ zmiennej musi być zgodny z typem wyrażenia, którego wartość jest przypisywana do tej zmiennej. Jeżeli zmienna jest typu niższego, niż wartość wyrażenia następuje konwersja to typu niższego; w przeciwnym wypadku do typu wyższego, np: I=SQRT(2.0) wynik: 1 X=2*3 wynik: 6.0 X=(1.0,2.0) wynik: 1.0 Należy unikać pułapek, np.: X=2/3 wynik: 0.0 (bo dzielenie liczb całkowitych jest dzieleniem całkowitym)
Kompilacja programu przy użyciu g77 (Gnu Fortran) f77 [opcje] [-o plik_wynikowy] pliki_wejściowe g77 [opcje] [-o plik_wynikowy] pliki_wejściowe Pliki wejściowe: Pliki źródłowe w Fortranie 77 (rozszerzenie .f lub .for) Pliki źródłowe w Fortranie 77 zawierające metakomendy dla kompilatora (rozszerzenie .F) Pliki w języku c lub C++ (rozszerzenia .c lub .C) Pliki w języku asemblera (rozszerzenie .s) Pliki zawierające moduły relokowalne w kodzie maszynowym Pliki wejściowe wymienia się jednym ciągiem po odstępach.
Typy plików wynikowych: Bez opcji: moduł wykonywalny (z atrybutem x); jeżeli nie podamy jego nazwy po –o nazywa się a.out Przykład: f77 –o hello hello.f Z opcją –c: moduł relokowalny; domyślnie nazywa się plik.o jeżeli plik źródłowy nazywał się plik.f Przykład: f77 –c hello.f Z opcją –s: tłumaczenie na język asemblera; domyślnie nazywa się plik.s jeżeli plik źródłowy nazywał się plik.f Przykład: f77 –S hello.f
Użyteczne opcje: -g wstawiana jest informacja ułatwiająca odrobaczenie programu -fbounds-check sprawdzanie indeksów tablic -c tylko kompilacja i asemblowanie -s tylko kompilacja do języka asemblera -E tylko implementacja dyrektyw dla preprocesora --help wydruk krótkiego samouczka