Pobierz prezentację
Pobieranie prezentacji. Proszę czekać
OpublikowałKazimiera Panfil Został zmieniony 11 lat temu
1
Instrukcja skoku GO TO etykieta Np. GO TO 100 ….. 100WRITE (*,*) Przeskok do instrukcji 100 Uwaga! NIE WOLNO skakać do wnętrzna złożonych instrukcji warunkowych ani do wnętrza pętli. Instrukcja pusta CONTINUE Wprowadzono ją we wcześniejszych FORTRANach jako instrukcję, którą można było bezpiecznie etykietować (nie wolno było etykietować np. instrukcji pętli lub pustej linii).
2
Prosta instrukcja warunkowa (każdy FORTRAN) IF (wyrażenie_logiczne) instrukcja Instrukcja (zawsze jedna) jest wykonywana jeżeli wyrażenie_logiczne przyjmuje wartość.TRUE. Przykład: IF (DELTA.LT. 0.0) PRINT *,Brak pierwiastkow rzeczywistych
3
Blokowa instrukcja warunkowa (od FORTRANu 77) IF (wyrażenie_logiczne) THEN Instrukcja_1 Instrukcja_2 ….. Instrukcja_n ENDIF Blok instrukcji między IF and ENDIF jest wykonywany jeżeli wyrażenie_logiczne przymuje wartość.TRUE. Blok_instrukcji
4
Przykład: IF (DELTA.GT. 0.0) THEN X1=-0.5*(B+SQRT(DELTA))/A X2=-0.5*(B-SQRT(DELTA))/A ENDIF
5
Złożona instrukcja warunkowa (od FORTRANu 77) IF (wyrażenie_logiczne_1) THEN Blok_Instrukcji_1 ELSE IF (wyrażenie_logiczne_2) THEN Blok_Instrukcji_2 …… [ELSE] Blok_instrukcji_x ENDIF Dany blok instrukcji między IF and ELSE lub ENDIF jest wykonywany jeżeli odpowiednie przymuje wartość.TRUE.; wtedy pozostałe części instrukcji warunkowej są ignorowane. Blok następujący po ELSE bez wyrażenie logicznego (jeżeli występuje to jest zawsze ostatnie) jest wykonywany jeżeli wszystkie poprzednio napotkane wyrażenia logiczne mają wartość.FALSE.
6
Przykład: IF (DELTA.GT. 0.0) THEN X1=-0.5*(B+SQRT(DELTA))/A X2=-0.5*(B-SQRT(DELTA))/A ELSE IF (DELTA.EQ. 0.0) THEN X1=-0.5*B/A X2=X1 ELSE PRINT *,Brak pierwiastków rzeczywistych ENDIF
7
Tak sobie radzono z brakiem IF..THEN…ELSE…ENDIF w FORTRANie IV IF (DELTA.LE. 0.0) GOTO 10 X1=-0.5*(B+SQRT(DELTA))/A X2=-0.5*(B-SQRT(DELTA))/A GO TO 40 10 CONTINUE IF (DELTA.LT. 0.0) GO TO 20 X1=-0.5*B/A X2=X1 GO TO 40 20PRINT *,31HBrak pierwiastkow rzeczywistych 40CONTINUE Innym sposobem (ale mniej ogólnym) było użycie arytmetycznej instrukcji warunkowej.
8
Arytmetyczna instrukcja IF (każdy FORTRAN) IF (wyrażenie_arytmetyczne) etykieta_1,etykieta_2,etykieta_3 Do instrukcji oznaczonej odpowiednią etykietą skacze się gdy: etykieta_1: wyrażenie_arytmetyczne<0 etykieta_2: wyrażenie_arytmetyczne=0 etykieta_3: wyrażenie_arytmetyczne>0 wyrażenie_arytmetyczne nie może być typu COMPLEX (musimy umieć zdefiniować relację większości)
9
Przykład: IF (DELTA) 10,20,30 10PRINT *,Brak pierwiastków rzeczywistych GO TO 40 20X1=-0.5*B/A X2=X1 GO TO 40 30X1=-0.5*(B+SQRT(DELTA))/A X2=-0.5*(B-SQRT(DELTA))/A 40CONTINUE
10
Obliczona instrukcja skoku GO TO (etykieta_1,etykieta_2,…,etykieta_n), wyrażenie_arytmetyczne W starszych FORTRANach GO TO (etykieta_1,etykieta_2,…,etykieta_n), zmienna_sterująca Wartość wyrażenia arytmetycznego po prawej stronie jest zaokrąglana z dołu do najbliższej liczby całkowitej. Skok do odpowiedniej etykiety następuje jeżeli: wyrażenie_arytmetyczne 2: etykieta_1 2 wyrażenie_arytmetyczne 3: etykieta_2 ………. wyrażenie_arytmetyczne n: etykieta_n W starszych FORTRANach zmienna_sterująca musiała być całkowita
11
Przykład: READ (*,*) IFUN,X C W zależności od wartości IFUN obliczymy odpowiednią funkcję C trygonometryczną lub hiperboliczną zmiennej X GO TO (10,20,30,40),IFUN 10Y=SIN(X) GOTO 50 20Y=COS(X) GOTO 50 30Y=SINH(X) GOTO 50 40Y=COSH(X) 50PRINT *,F(,X,)=,Y
12
Wyznaczona instrukcja skoku ASSIGN etykieta TO zmienna ……….. GO TO zmienna,(etykieta_1,etykieta_2,…,etykieta_n) zmienna musi być zmienną całkowitą. Skok następuje do tej etykiety z listy, która została przypisana do zmiennej instrukcją ASSIGN. Jeżeli któraś z etykiet nie odpowiada żadnej instrukcji pojawia się błąd kompilacji.
13
Przykład: C Ten fragment programu czyta dwa razy jedną liczbę z klawiatury. C Za pierwszym razem oblicza jej sinus a za drugim sinus hiperboliczny ASSIGN 10 TO ISEL 40READ (*,*) X GOTO ISEL,(10,20) 10Y=SIN(X) PRINT *,SIN(,X,)=,Y ASSIGN 20 TO ISEL GOTO 40 20Y=SINH(X) PRINT *,SINH(,X,)=,Y
14
Instrukcja SELECT CASE identyfikator: SELRCT CASE(zmienna) CASE(wybór_1) blok_instrukcji_1 CASE(wybór_2) blok_instrukcji_2 CASE DEFAULT blok_instrukcji_default END SELECT
15
Przykład: i=1 nazwa: select case(i) case(1) print *,"i=1" case(2) print *,"i=2" case default print *,"i=?" end select nazwa
16
Instrukcja pętli z licznikiem FORTRAN77 i wyżej DO zmienna=start,koniec[,przyrost] instrukcja_1 instrukcja_2 ………. instrukcja_n ENDDO FORTRAN IV i niżej DO etykieta zmienna=start,koniec[,przyrost] instrukcja_1 instrukcja_2 ………. etykietainstrukcja_n Blok instrukcji pomiędzy DO a ENDDO lub pomiędzy DO a instrukcją etykietowaną jest wykonywany dla wartości zmiennej począwszy od start, przez start+przyrost, aż do momentu kiedy zmienna sterująca przekroczy koniec (z lewej lub prawej strony w zależności od znaku zmiennej krok). Jeżeli przyrost nie jest podany, jest przyjmowany jako 1.
17
Ważne uwagi: 1.W FORTRANie 77 instrukcje zawarte w pętli NIE SĄ wykonywane, jeżeli start>koniec dla krok>0 lub start<koniec dla krok<0. W FORTRANie IV i niżej instrukcje zawarte w pętli były ZAWSZE wykonywane przynajmniej raz. Kompilując źródła napisane w FORTRANie IV, dla zachowania kompatybilności musimy czasami włączyć opcję kompilatora, która wymusza przynajmniej jednokrotne wyknanie instrukcji zawartych w pętli. 2.Zmienna sterująca i krok mogą być typu REAL ale wtedy należy uważać na kumulację błędów sumowania przy obliczaniu kolejnych wartości zmiennej sterującej. Lepiej używać zmiennych sterujących I innych parametrów pętli typu INTEGER.
18
Przykład 1: C Wczytywanie N kolejnych elementów tablicy X z klawiatury, każdej C w oddzielnej linii DO I=1,N READ (*,*) X(I) ENDDO Przykład 2: C Drukowanie kolejnych liczb nieparzystych od 1 do N DO 40 I=1,N,2 40 PRINT *,I
19
Instrukcja pętli z warunkiem DO WHILE (wyrażenie_logiczne) instrukcja_1 instrukcja_2 ………….. instrukcja_n ENDDO Blok instrukcji między DO a ENDDO jest wykonywany, dopóki wyrażenie_logiczne przyjmuje wartość.TRUE.
20
Przykład: C Iteracyjna procedura obliczania pierwiastka kwadratowego metodą C Herona. Przybliżeniem początkowym jest połowa liczby X=0.5*A XX=X*X DO WHILE (ABS(XX-A).GT. 1.0E-4) X=0.5*(XX+A)/X XX=X*X ENDDO
Podobne prezentacje
© 2024 SlidePlayer.pl Inc.
All rights reserved.