08 Zmienne

Zmienne to jeden z podstawowych rodzajów obiektów używanych podczas programowania. Służą one do przechowywania różnych, potrzebnych w trakcie obliczeń, wartości. Idea zaczerpnięta została z algebry, gdzie nikogo nie dziwi zapis postaci: $$y=ax^2+bx+c$$ W powyższym równaniu $a, b, c$ oraz $x$ i $y$ to zmienne „skalarne” (jednowymiarowe). Na ogół nie zastanawiamy się jakie wartości mogą one przyjmować, ale założenie, że są to wartości rzeczywiste nie ogranicza w żaden sposób rozważań. Przyzwyczajeni też jesteśmy dokonywać przekształceń takich wyrażeni, żeby wyliczyć wartość miejsca zerowego $x$ trzeba będzie policzyć: $$\Delta = b^2-4ac$$ a następnie wyliczyć $ x_1$ oraz $ x_2$ ze wzorów: $$x_1=\frac{-b-\sqrt{\Delta}}{2a}$$ i $$x_2=\frac{-b+\sqrt{\Delta}}{2a}$$ Rozważania „matematyczne” (prowadzone na odpowiednio wysokim poziomie ogólności) pozwalają zapomnieć o tym czy $\Delta$ jest dodatnie czy ujemne (jeżeli tylko cokolwiek wiemy o liczbach zespolonych). W obliczeniach praktycznych okazać się może, że interesują nas wyłącznie pierwiastki rzeczywiste, co sprawę może nieco skomplikować. Osobno trzeba będzie rozpatrzyć przypadek gdy $\Delta \le 0$, a osobno gdy $\Delta < 0$. Spróbujmy zaprojektować prostą aplikację, która najpierw pyta o wartości $ a, b$ i $ c$, a następnie dokonuje wszystkich wyliczeń i przedstawia wyniki. Z oczywistych względów (budowanie aplikacji okienkowych wymaga sporej wiedzy na temat funkcjonowania środowiska graficznego Systemu Operacyjnego) będzie to bardzo prosta aplikacja „tekstowa”. Zacznijmy od naszkicowania schematu blokowego:

Teraz możemy zacząć programować. Musimy rozstrzygnąć jakie zmienne będą nam potrzebne (i jakiego typu)? Zmienne to A, B, C, DELTA (odpowiednik $\Delta$) oraz X1 i X2. Wszystkie zmienne będą typu REAL (choć założenie, że będą one typu DOUBLE PRECISION wcale nie będzie karygodne).

1 PROGRAM PIERWIASTEK
2 REAL A, B, C, DELTA, X1, X2
3 WRITE(*,*) "Podaj A"
4 READ(*,*) A
5 WRITE(*,*) "Podaj B"
6 READ(*,*) B
7 WRITE(*,*) "Podaj C"
8 READ(*,*) C
9 DELTA = B * B - 4. * A * C
10 IF (DELTA < 0.) THEN
11   WRITE(*,*) "Nie ma pierwiastków rzeczywistych!"
12 ELSE
13   X1 = (-B - SQRT(DELTA))/(2. * A)
14   X2 = (-B + SQRT(DELTA))/(2. * A)
15   WRITE(*,*) "X1=", X1, " X2=", X2
16 END IF
17 END PROGRAM

Kilka słów objaśnienia

  • WRITE(*,*) “Tekst” to polecenie wypisania tekstu na konsoli, podobnie WRITE(*,*) “Tekst”, zmienna to polecenie wypisania najpierw tekstu i w tej samej linii wartości zmiennej.
  • READ(*,*) zmienna to polecenie powodujące „zatrzymanie” programu w oczekiwaniu na wprowadzenie przez użytkownika wartości rzeczywistej, która zostanie wczytana, zinterpretowana, skonwertowana do postaci dwójkowej i podstawiona jako wartość zmiennej.
  • Na koniec zostało polecenie IF (warunek) THEN polecenie1 ELSE polecenie2 END IF. Wydaje się być ono dosyć oczywiste: jeżeli warunek jest spełniony — wykonywane jest polecenie1, w przeciwnym razie — polecenie drugie. Pomiędzy IF a ELSE lub pomiędzy ELSE a END IF można umieścić, oczywiście, więcej niż jedno polecenie.
  • SQRT() to funkcja standardowa wyliczająca wartość pierwiastka kwadratowego z argumentu. argument (wartość lub wyrażenie podane w nawiasach) musi mieć wartość większą od zera; działa na wartościach rzeczywistych i podaje wyniki rzeczywiste.