Fortran/Zmienne

Z Wikibooks, biblioteki wolnych podręczników.
Przejdź do nawigacji Przejdź do wyszukiwania

Czym jest i do czego służy zmienna?[edytuj]

Zmienną w programie komputerowym można rozumieć jako twór, który na 2 cechy:

  1. posiada unikalną nazwę (dzięki której można ją zidentyfikować)
  2. posiada wartość, czyli porcję informacji (niskopoziomowo jest to ciąg bitów).

typ zmiennej[edytuj]

Zmienna w pamięci komputera to ciąg bitów. Program musi wiedzieć, w jaki sposób ją traktować. Inaczej działa się na liczbach całkowitych a inaczej jest na liczbach zmiennoprzecinkowych. Ponadto zmienna może zawierać w sobie inne zmienne. Dlatego każda zmienna musi mieć zdefiniowany swój typ. Typ określa jaka jest długość zmiennej, jak np. dodawać do siebie zmienne, czy można porównać ze sobą 2 zmienne. Jeżeli zmienna zawiera w sobie inne zmienne - jaka jest struktura takiej zmiennej złożonej.

pamięć operacyjna w języku Fortran[edytuj]

Język Fortran jest językiem kompilowanym bezpośrednio do kodu maszynowego. Oznacza to, że nie posiada on żadnych mechanizmów, kontrolujących dostęp do pamięci (w przeciwieństwie np. do języka Java). Pamięć jest to nic innego, jak tylko ciąg bitów, które zależnie od interpretacji, mogą dla programu stanowić liczbę całkowitą, znak (jedną literkę), łańcuch (kilka literek) lub liczbę rzeczywistą (w notacji dziesiętnej z kropką). Aby wymusić interpretację ciągu bitów o określonej długości używamy tzw. typów zmiennej. Typ definiuje zwykle też długość zmiennej. Dzięki użyciu typów program wie, że np. zmienna x przechowuje jakąś liczbę całkowitą a zmienna y przechowuje liczbę rzeczywistą. Aby korzystać ze zmiennych musimy je uprzednio zadeklarować. W języku Fortran wykonuje się to w następujący sposób (według normy Fortran95):

  typ_zmiennej :: nazwa_zmiennej

lub (według normy Fortran77) :

  typ_zmiennej nazwa_zmiennej

nazwy zmiennych[edytuj]

Nazwa zmiennej musi jak najwierniej opisywać obiektu rzeczywistego, który ta zmienna opisuje.

Zalecane nazwy zmiennych zależą od typu zmiennej.

  1. zmienne liczbowej - można jej nadać formę orzekającą np. LICZBA_ELEKTRONOW, ZASIEG_RZUTU_KAMIENIA, PREDKOSC_SAMOLOTU_X.
  2. zmienne logiczne - można np. DANE_SA_POPRAWNE, KONTYNUUJ_OBLICZENIA

Każda zmienna musi mieć dobrze opisane swoje znaczenie. Najlepiej na początku programu. Pozwala to uniknąć późniejszego zgadywania znaczenia zmiennej.

Każda zmienna powinna być używana zgodnie ze swoim przeznaczeniem. Wykorzystywanie jednej zmiennej przez różne elementy programu nie związane ze sobą powoduje problemy ze zrozumieniem działania programu.

Typy zmiennej[edytuj]

Typ zmiennej może odnosić się do różnego rodzaju danych, które mają być przechowywane w zmiennej.

Liczby[edytuj]

Typ zmiennej Opis Przykładowe wartości
integer liczba całkowita 15, -6500, 200000000
real liczba zmiennoprzecinkowa pojedynczej precyzji 3.1415, -5.5, .7e3, 12.5E-5
double precision liczba zmiennoprzecinkowa podwójnej precyzji 3.1415D0, -5.5D0, .7d3, 12.5D-5
complex liczby zespolone (kombinacja części rzeczywistej i urojonej) (3.1415, -5.5), (1.4, 7.1E4)

Zmienne liczbowe mogą być podawane w różnych systemach liczbowych. Domyślnie przyjmowany jest dziesiętny, jednak, aby kompilator wiedział, że używasz innego systemu, przyjmuje się następujące założenia:

Zapis System
Z"liczba" lub Z'liczba' szesnastkowy
O"liczba" lub O'liczba' ósemkowy
B"liczba" lub B'liczba' binarny

Język Fortran dopuszcza także definiowanie przez programistę rozmiaru zmiennej. Uzyskuje się to poprzez dodanie w deklaracji zmiennej następującej konstrukcji:

real*4 nazwa_zmiennej
  lub
real   nazwa_zmiennej           -domyślny typ
  lub
real(kind=4)::nazwa_zmiennej

oznacza 4-bajtową liczbę rzeczywistą. Natomiast, aby uzyskać typ podwójnej precyzji używamy konstrukcji:

real*8 nazwa_zmiennej.
  lub
real(kind=8)::nazwa_zmiennej

w niektórych kompilatorach możemy uzyskać poczwórną precyzje.

real(kind=16)::nazwa_zmiennej

Wartości logiczne[edytuj]

Do przechowywania wartości logicznych także przeznaczono specjalny typ danych.

Typ Opis Możliwe wartości
logical Przechowywanie wartości logicznej .TRUE. lub .FALSE.

Znaki i łańcuchy[edytuj]

Przechowywanie pojedynczych znaków odbywa się przy pomocy typu CHARACTER. Natomiast deklarowanie łańcucha polega na dodaniu * oraz długości łańcucha (w znakach). Oznacza to, że aby przechować np. nazwę "pl.Wikibooks" musimy napisać tak:

character*12 :: nazwa="pl.Wikibooks"
print *, nazwa

Uwagi, dotyczące długości poszczególnych typów danych:

  • dla typu integer możliwe jest zaalokowanie 1, 2, 4 lub 8 bajtów
  • dla typu real odpowiednio 4 lub 8
  • dla typu Complex 8 lub 16
  • dla typu character nie ma ograniczeń długości

Stałe[edytuj]

Język Fortran umożliwia także deklarację zmiennych, których zawartości nie da się zmieniać. Są to tzw. stałe. Deklaruje się je podobnie do zmiennych, z tą jednak różnicą, że przy nazwie typu dodajemy słowo parameter. Dla standardu Fortran 95 wygląda to następująco:

   typ, parameter :: nazwa = wartość

Natomiast według Fortran 77 wygląda to tak:

  typ nazwa
  parameter (nazwa=wartość)

Uwaga: kompilator języka Fortran nie zasygnalizuje błędu, jeśli stałej w kodzie programu przypiszesz inną wartość! Np.

   integer, parameter :: p = 3
   print *, "p=",p
   parameter p = 9
   print *, "p=",p

Tablice[edytuj]

Czasami zdarza się, że potrzebujemy przechować więcej niż jedną wartość danego typu (np. real). Język Fortran umożliwia nam zestawianie kilku zmiennych w tzw. tablicę. Definiuje się ją następująco:

  typ zmienna(wymiar)

gdzie wymiar oznacza ilość zmiennych tego samego rodzaju. W tym przypadku będzie to tablica jednowymiarowa. Możemy jednak używać tablic wielowymiarowych, np. 2x2:

  real tablica(2,2)

Nie należy jednak definiować tablicy o zbyt dużej ilości wymiarów - niesie to ze sobą duże zużycie pamięci.

Sposoby deklaracji tablic[edytuj]

W przeciwieństwie do np. języka C, język Fortran umożliwia programiście deklarację tablicy na wiele różnych sposobów. Oto niektóre z nich:

Sposób pierwszy:

  real tablica(10)

Sposób drugi:

  real tablica 
  dimension tablica(10)

Sposób trzeci:

  integer index
  parameter (index=10)
  real tablica(index)

Sposób czwarty:

  real tablica(0:9)

W specyfikacji F95, deklaracja różni się tylko tym, że używany jest dwukropek (::).

Modyfikowanie zawartości tablicy[edytuj]

Aby zmodyfikować jakiś element tablicy, musimy znać jego położenie. Do tego celu służy tzw. indeks. Aby zmodyfikować pierwszy i drugi element tablicy piszemy:

  tablica(1) = 0.4
  tablica(2) = 0.3

Odczyt zawartości jakiegoś elementu tablicy dokonuje się w analogiczny sposób:

  print *, "Tablica[1]=", tablica(1)