Tudor Sorin-Fortran

13
[email protected] P S E U D O CO D Tudor Sorin 1 ! ! AMERICAN NATIONAL STANDARD FORTRAN 90 (ANSI X3.198-1992) ! AMERICAN NATIONAL STANDARD FORTRAN 95 (ANSI X3J3/96-007) ! ! ANSI X3.9-1978 ! ISO 1539-1980(E) ! ! PROGRAM TUDOR_SORIN_ALL C C SUBPROGRAMELE DE MAI JOS SUNT TRANSCRIEREA IN Fortran 90 C A PSEUDOCODULUI UTILIZAT DE: C TUDOR SORIN, INFORMATICA, VARIANTA PASCAL, RESPECTA NOUA PROGRAMA C VALABILA INCEPAND CU ANUL 2000 C APROBAT MEN cu ordinul nr. 3751 C EDITURA L&S INFOMAT C ISBN 973-99377-3-X C CAPITOLUL 5. PRINCIPIILE PROGRAMARII STRUCTURATE C C ANALIZA ATENTA A SUBROGRAMELOR ARATA CA pseudocodul utilizat ESTE C UN SUBSET DE FORTRAN 90. CU FOARTE PUTINE EXCEPTII PSEUDOCODUL C POATE FI DESCRIS SI IN F77 C CALITATEA PROGRAMELOR FORTRAN ESTE n e t SUPERIOARA PROGRAMELOR PASCAL C CORESPUNZATOARE SI CORESPUNDE TOTAL CU PSEUDOCODUL UTILIZAT. C CALL TUDOR_SORIN1 CALL TUDOR_SORIN2 CALL TUDOR_SORIN3 CALL TUDOR_SORIN4 CALL TUDOR_SORIN5 CALL TUDOR_SORIN6 CALL TUDOR_SORIN7 CALL TUDOR_SORIN8 CALL TUDOR_SORIN9 CALL TUDOR_SORIN10 CALL TUDOR_SORIN11 END SUBROUTINE TUDOR_SORIN1 INTEGER COMANDA,A,B,S1 REAL X,Y,S2 WRITE(*,1)'TUDOR_SORIN 1' 1 FORMAT(/,A,/) WRITE(*,*)'INTRODUCETI COMANDA' READ(*,*)COMANDA IF(COMANDA==0)THEN WRITE(*,*)'INTRODUCETI A SI B' READ(*,*)A,B S1=A+B WRITE(*,*)'S1=',S1 ELSE WRITE(*,*)'INTRODUCETI X SI Y' READ(*,*)X,Y S2=X+Y WRITE(*,*)'S2=',S2 ENDIF END

description

Carte Fortran

Transcript of Tudor Sorin-Fortran

Page 1: Tudor Sorin-Fortran

[email protected] P S E U D O CO D

Tudor Sorin

1

! ! AMERICAN NATIONAL STANDARD FORTRAN 90 (ANSI X3.19 8-1992) ! AMERICAN NATIONAL STANDARD FORTRAN 95 (ANSI X3J3/ 96-007) ! ! ANSI X3.9-1978 ! ISO 1539-1980(E) ! ! PROGRAM TUDOR_SORIN_ALL C C SUBPROGRAMELE DE MAI JOS SUNT TRANSCRIEREA IN Fo rtran 90 C A PSEUDOCODULUI UTILIZAT DE: C TUDOR SORIN, INFORMATICA, VARIANTA PASCAL, RESPE CTA NOUA PROGRAMA C VALABILA INCEPAND CU ANUL 2000 C APROBAT MEN cu ordinul nr. 3751 C EDITURA L&S INFOMAT C ISBN 973-99377-3-X C CAPITOLUL 5. PRINCIPIILE PROGRAMARII STRUCT URATE C C ANALIZA ATENTA A SUBROGRAMELOR ARATA CA pseudoco dul utilizat ESTE C UN SUBSET DE FORTRAN 90. CU FOARTE PUTIN E EXCEPTII PSEUDOCODUL C POATE FI DESCRIS SI IN F77 C CALITATEA PROGRAMELOR FORTRAN ESTE n e t SUPERIO ARA PROGRAMELOR PASCAL C CORESPUNZATOARE SI CORESPUNDE TOTAL CU P SEUDOCODUL UTILIZAT. C CALL TUDOR_SORIN1 CALL TUDOR_SORIN2 CALL TUDOR_SORIN3 CALL TUDOR_SORIN4 CALL TUDOR_SORIN5 CALL TUDOR_SORIN6 CALL TUDOR_SORIN7 CALL TUDOR_SORIN8 CALL TUDOR_SORIN9 CALL TUDOR_SORIN10 CALL TUDOR_SORIN11 END SUBROUTINE TUDOR_SORIN1 INTEGER COMANDA,A,B,S1 REAL X,Y,S2 WRITE(*,1)'TUDOR_SORIN 1' 1 FORMAT(/,A,/) WRITE(*,*)'INTRODUCETI COMANDA' READ(*,*)COMANDA IF(COMANDA==0)THEN WRITE(*,*)'INTRODUCETI A SI B' READ(*,*)A,B S1=A+B WRITE(*,*)'S1=',S1 ELSE WRITE(*,*)'INTRODUCETI X SI Y' READ(*,*)X,Y S2=X+Y WRITE(*,*)'S2=',S2 ENDIF END

Page 2: Tudor Sorin-Fortran

[email protected] P S E U D O CO D

Tudor Sorin

2

SUBROUTINE TUDOR_SORIN2 ! Pascal IX pag. 119 REAL X,F WRITE(*,1)'TUDOR_SORIN 2' 1 FORMAT(/,A,/) WRITE(*,*)'INTRODUCETI X' READ(*,*)X IF(X<0.)THEN F=X ELSEIF(X<10)THEN F=2*X ELSEIF(X<100.)THEN F=3.*X ELSE F=4.*X ENDIF WRITE(*,*)'X=',X,' F=',F END SUBROUTINE TUDOR_SORIN3 ! Pascal IX pag. 118 INTEGER A WRITE(*,1)'TUDOR_SORIN 3' 1 FORMAT(/,A,/) WRITE(*,'(A,\)')'7*8=' READ(*,*)a IF(a==56.)THEN WRITE(*,*)'Raspuns corect' ELSE WRITE(*,*)'Mai invata' ENDIF END SUBROUTINE TUDOR_SORIN4 ! Pascal IX pag. 121 INTEGER N1,N2,S,I WRITE(*,1)'TUDOR_SORIN 4' 1 FORMAT(/,A,/) WRITE(*,*)'introduceti n1 si n2' READ(*,*)N1,N2 S=0. I=1. DO WHILE(I<=N2) S=S+N1 I=I+1 ENDDO WRITE(*,*)'S=',S,' n1*n2=',N1*N2 END SUBROUTINE TUDOR_SORIN5 ! Pascal IX pag. 123 INTEGER N,I,S WRITE(*,1)'TUDOR SORIN 5' 1 FORMAT(/,A,/) WRITE(*,*)'introduceti n ' READ(*,*)N S=0. DO I=1,N S=S+I ENDDO WRITE(*,*)'s=',S,' n*(n+1)/2=',N*(N+1)/2 END

Page 3: Tudor Sorin-Fortran

[email protected] P S E U D O CO D

Tudor Sorin

3

SUBROUTINE TUDOR_SORIN6 ! Pascal IX pag. 125 INTEGER I,MAX,N,NR WRITE(*,1)'TUDOR SORIN 6' 1 FORMAT(/,A,/) WRITE(*,*)'introduceti n ' READ(*,*)N ! read n write(*,*)'introduceti nr' READ(*,*)MAX DO I=2,N ! for i:=2,n WRITE(*,*)'introduceti nr' READ(*,*)NR ! read nr IF(NR>MAX)THEN ! if nr>max MAX=NR ENDIF ENDDO WRITE(*,*)'max=',MAX END SUBROUTINE TUDOR_SORIN7 ! Pascal IX pag. 126 INTEGER I,N,S WRITE(*,1)'TUDOR SORIN 7' 1 FORMAT(/,A,/) WRITE(*,'(A,\)')'introduceti n: ' READ(*,*)N ! read n I=1 ! i:=1 S=0 ! s:=0 DO ! do S=S+I ! s:=s+i I=I+1 ! i:=i+1 IF(I>N)EXIT ! until i>n ENDDO WRITE(*,*)'s=',S,' n*(n+1)/2=',N*(N+1)/2 END

Page 4: Tudor Sorin-Fortran

[email protected] P S E U D O CO D

Tudor Sorin

4

SUBROUTINE TUDOR_SORIN8 ! Pascal IX PAG. 127 INTEGER A,B,C WRITE(*,1)'TUDOR SORIN 8' 1 FORMAT(/,A,/) WRITE(*,*)'INTRODUCETI A,B,C' READ(*,*)A,B,C IF(A<B)THEN ! IF(A<B)THEN IF(C<A)THEN ! IF(C<A)THEN WRITE C, A,B WRITE(*,*)C,A,B ELSE ! ELSE IF(C<B)THEN ! IF C<B THEN WRITE A,C,B WRITE(*,*)A,C,B ELSE ! ELSE WRITE A,B,C WRITE(*,*)A,B,C ENDIF ! ENDIF ENDIF ! ENDIF ELSE ! ELSE IF(C<B)THEN ! IF(C<B)THEN WRITE C,B ,A WRITE(*,*)C,B,A ELSE ! ELSE IF(C<B)THEN ! IF(C<B THEN WRITE B ,C,A WRITE(*,*)B,C,A ELSE ! ELSE WRITE B,A,C WRITE(*,*)B,A,C ENDIF ! ENDIF ENDIF ! ENDIF ENDIF ! ENDIF END

Page 5: Tudor Sorin-Fortran

[email protected] P S E U D O CO D

Tudor Sorin

5

SUBROUTINE TUDOR_SORIN9 ! P. 129 INTEGER N,I,ND LOGICAL PRIM WRITE(*,1)'TUDOR SORIN 9' 1 FORMAT(/,A,/) WRITE(*,*)'INTRODUCETI N' READ(*,*)N PRIM=.TRUE. ND=INT(SQRT(FLOAT(N))) ! Float conversie la real ! INT parte intreaga d in nr real WRITE(*,*)'Numarul de divizori=',ND DO I=2,ND IF((N/I)*I .EQ. N)THEN ! Impartirea intreag a se face cu trunchiere ! IF(MOD(N,I).EQ.0)THEN PRIM=.FALSE. ENDIF ENDDO IF(PRIM)THEN WRITE(*,*)'NUMARUL ESTE PRIM' ELSE WRITE(*,*)'NUMARUL NU ESTE PRIM' ENDIF END SUBROUTINE TUDOR_SORIN10 ! P. 131 INTEGER N,NR,MAX,I,J,I1,J1,I2,J2 WRITE(*,1)'TUDOR SORIN 10' 1 FORMAT(/,A,/) DO N=1,10000 MAX=INT(FLOAT(N)**(1./3.)) NR=0 DO I=1,MAX DO J=I,MAX IF(I*I*I+J*J*J .EQ.N)THEN IF(NR.EQ.0)THEN I1=I J1=J ELSE I2=I J2=J ENDIF NR=NR+1 ENDIF ENDDO ENDDO IF(NR.EQ.2)THEN WRITE(*,*)N,I1,J1,I2,J2 ENDIF ENDDO END

Page 6: Tudor Sorin-Fortran

[email protected] P S E U D O CO D

Tudor Sorin

6

SUBROUTINE TUDOR_SORIN11 ! P. 129 C C ACEST PROGRAM ESTE SCRIS CU INSTRUCTIUNILE FORTRAN 77 I.T.C.I. C CLUJ-NAPOCA 1988 C FORTRAN 77 PROGRAMARE C "Aceasta documentatie reprezinta manualul de prog ramare in limbajul C FORTRAN-77 pentru implementarile de sub sistemele de operare SIRIS-3, C HELIOS, MIX, MIX-PLUS si U-V2." C I.T.C.I. filiala Cluj-Napoca: C - Vuscan Teodor (coo rdonare) C - Cherata Sanda C - Dervesteanu Smaran da C - Enyedi Andrei C - Moldovan Lidia C - Vesa Ioan C SERIA "SOFTWARE" dr. ing. Dan Roman C dr. Emil Muntean C Tehnoredactare : Smaranda Dervesteanu C C FORTRAN 77 Standard X3J3 C C www.fortran.com/F77_std/rjcnf0001.html C C ANSI X3.9-1978 American National Standard Program ming Language FORTRAN C C ISO 1539-1980 C INTEGER*4 N,I,ND LOGICAL*4 PRIM WRITE(*,*)'INTRODUCETI N' READ(*,*)N PRIM=.TRUE. ND=INT(SQRT(FLOAT(N))) ! Float conversie la real ! INT parte intreaga d in nr real WRITE(*,*)'Numarul de divizori=',ND DO 10 I=2,ND IF((N/I)*I .EQ. N)THEN ! Impartirea intreaga se face cu trunchiere PRIM=.FALSE. ENDIF 10 CONTINUE ! FORTRAN 90 ACCEPTA ENDDO IF(PRIM)THEN WRITE(*,*)'NUMARUL ESTE PRIM' ELSE WRITE(*,*)'NUMARUL NU ESTE PRIM' ENDIF END

Page 7: Tudor Sorin-Fortran

[email protected] P S E U D O CO D

Tudor Sorin

7

! ! AMERICAN NATIONAL STANDARD FORTRAN 90 (ANSI X3.19 8-1992) ! AMERICAN NATIONAL STANDARD FORTRAN 95 (ANSI X3J3/ 96-007) ! ! ANSI X3.9-1978 ! ISO 1539-1980(E) ! ! program tudor_sorin_limbaj_c ! SUBPROGRAMELE DE MAI JOS SUNT TRANSCRIEREA IN Fo rtran 90 ! A PSEUDOCODULUI UTILIZAT DE: ! TUDOR SORIN, INFORMATICA, VARIANTA C++, RESPECTA NOUA PROGRAMA ! VALABILA INCEPAND CU ANUL 2000 ! APROBAT MEN cu ordinul nr. 3751 ! EDITURA L&S INFOMAT ! ISBN 973-99377-4-8 ! CAPITOLUL 5. PRINCIPIILE PROGRAMARII STRUCT URATE ! ! ANALIZA ATENTA A SUBROGRAMELOR ARATA CA pseudoco dul utilizat ESTE ! UN SUBSET DE FORTRAN 90. CU FOARTE PUTIN E EXCEPTII PSEUDOCODUL ! POATE FI DESCRIS SI IN F77 ! CALITATEA PROGRAMELOR FORTRAN ESTE n e t SUPERIO ARA PROGRAMELOR C++ ! CORESPUNZATOARE SI CORESPUNDE TOTAL CU P SEUDOCODUL UTILIZAT. ! write(*,'(/a,/)')'ts1 ' ; call ts1 ; pause write(*,'(/a,/)')'ts2 ' ; call ts2 ; pause write(*,'(/a,/)')'ts3 ' ; call ts3 ; pause write(*,'(/a,/)')'ts4 ' ; call ts4 ; pause write(*,'(/a,/)')'ts5 ' ; call ts5 ; pause write(*,'(/a,/)')'ts5F4 ' ; call ts5_fortran77 ; p ause write(*,'(/a,/)')'ts6 ' ; call ts6 ; pause write(*,'(/a,/)')'ts7 ' ; call ts7 ; pause write(*,'(/a,/)')'ts8 ' ; call ts8 ; pause write(*,'(/a,/)')'ts9 ' ; call ts9 ; pause write(*,'(/a,/)')'ts10' ; call ts10 ; pause write(*,'(/a,/)')'ts11' ; call ts11 ; pause write(*,'(/a,/)')'ts12' ; call ts12 ; pause write(*,'(/a,/)')'ts13' ; call ts13 ; pause write(*,'(/a,/)')'ts14' ; call ts14 ; pause write(*,'(/a,/)')'ts15' ; call ts15 ; pause write(*,'(/a,/)')'ts16' ; call ts16 ; pause write(*,'(/a,/)')'ts17' ; call ts17 ; pause write(*,'(/a,/)')'ts18' ; call ts18 ; pause write(*,'(/a,/)')'ts19' ; call ts19 ; pause end program tudor_sorin_limbaj_c subroutine ts1 ! p. 98 integer a,b a=5 ; b=7 write(*,*)'a=',a ! ; read(*,*)a write(*,*)'a=',b ! ; read(*,*)b if(a>b)then write(*,*)a else write(*,*)b endif end subroutine ts1

Page 8: Tudor Sorin-Fortran

[email protected] P S E U D O CO D

Tudor Sorin

8

subroutine ts2 ! p. 99 real a,b,c,d a=1. ; b=2. ; c=3. ; d=4. if(c+d>0.)then write(*,*)a+b else if(c+d==0.)then write(*,*)a-b else write(*,*)a*b endif endif end subroutine ts2 subroutine ts3 ! p.100 integer nr nr=6 write(*,*)'nr=',nr ! ; read(*,*)nr if(nr .eq. (nr/2)*2)then write(*,*)'am citit un numar par' endif end subroutine ts3 subroutine ts4 ! p. 100 real a,b,c,d a=1. ; b=2. ; c=3. ; d=4. if(c+d>0.)then write(*,*)a+b elseif(c+d==0.)then write(*,*)a-b else write(*,*)a*b endif end subroutine ts4

Page 9: Tudor Sorin-Fortran

[email protected] P S E U D O CO D

Tudor Sorin

9

subroutine ts5 ! FORTRAN 90 p. 101 real x x=9.65 write(*,*)'x=',x,' g(x)=',g(x),' f[g(x)]=',f(g(x)) contains real function f(x) real x if(x<=0.)then f=x elseif((x>0.).and.(x<=10.))then f=x**2 elseif((x>10).and.(x<=20.))then f=x**3 elseif(x>20.)then f=x**4 endif end function f real function g(x) real x if(x<0.)then g=1./x elseif(x==0.)then g=2. else g=x+int(x) endif end function g end subroutine ts5

Page 10: Tudor Sorin-Fortran

[email protected] P S E U D O CO D

Tudor Sorin

10

subroutine ts5_FORTRAN77 ! p. 101 real x x=9.65 write(*,*)'x=',x,' g(x)=',g(x),' f[g(x)]=',f(g(x)) end subroutine ts5_FORTRAN77 real function f(x) real x if(x<=0.)then f=x elseif((x>0.).and.(x<=10.))then f=x**2 elseif((x>10).and.(x<=20.))then f=x**3 elseif(x>20.)then f=x**4 endif end function f real function g(x) real x if(x<0.)then g=1./x elseif(x==0.)then g=2. else g=x+int(x) endif end function g

Page 11: Tudor Sorin-Fortran

[email protected] P S E U D O CO D

Tudor Sorin

11

subroutine ts6 ! p. 103 integer(8) s,i s=0 i=1 11 s=s+i i=i+1 if(i<=1000)goto 11 write(*,*)'s=',s end subroutine ts6 subroutine ts7 ! p.105 real a,b,man a=9. ; b=4.5 write(*,*)'a=',a,' b=',b, ' interschimbare' man=a ; a=b ; b=man write(*,*)'a=',a,' b=',b end subroutine ts7 subroutine ts8 ! p. 105 real a,b a=9.5 ; b=-9.52 write(*,*)a,b,' minim' if(a<b)then write(*,*)a else write(*,*)b endif end subroutine ts8 subroutine ts9 ! p. 105 integer a,b a=9.5 ; b=-9.52 a=9 ; b=-4 write(*,*)a,b,' interschimbare' a=a+b b=a-b a=a-b write(*,*)a,b end subroutine ts9 subroutine ts10 integer a,b real media a=8 ; b=7 write(*,*)a,b,' media' media=(a+b)/2 write(*,*)a,b,media end subroutine ts10 subroutine ts11 integer x,s x=125 write(*,*)'x=',x s=0 s=s+mod(x,10) x=x/10 s=s+mod(x,10) x=x/10 s=s+mod(x,10) write(*,*)'suma cifrelor=',s

Page 12: Tudor Sorin-Fortran

[email protected] P S E U D O CO D

Tudor Sorin

12

end subroutine ts11 subroutine ts12 integer s,nr s=9 ; nr=5 write(*,*)'s=',s,' nr=',nr write(*,*)s,s+nr,s+nr+nr end subroutine ts12 subroutine ts13 ! p. 108 integer comanda,a,b,s1 real x,y,s2 comanda =1 ! ; read(*,*)comanda if(comanda .eq. 0)then a=9 ; b=2 ! ; read(*,*)a,b write(*,*)'a=',a,' b=',b s1=a+b write(*,*)'a+b=',s1 else x=9.1 ; y =4.3 ! ; read(*,*)x,y write(*,*)'x=',x,' y=',y s2=x+y write(*,*)'x+y=',s2 endif end subroutine ts13 subroutine ts14 real a,b,x write(*,*)'ax+b=0' a=9.3 ; b=8.2 !write(*,*)'a,b=' ; read(*,*)a,b write(*,*)'a=',a,' b=',b if(a .ne.0.)then x=-b/a write(*,*)'x=',x else if(b .ne. 0)then write(*,*)'Impartire cu zero (fara solutii )' else write(*,*)'Nedeterminare (o infinitate de solutii)' endif endif end subroutine ts14 subroutine ts15 ! p. 111 integer i,n,s n=2481 ; ! write(*,*)'n=',n ; read(*,*)n write(*,*)'n=',n s=0 do while( n.ne.0) s=s+mod(n,10) n=n/10 enddo write(*,*)'suma cifrelor=',s end subroutine ts15

Page 13: Tudor Sorin-Fortran

[email protected] P S E U D O CO D

Tudor Sorin

13

subroutine ts16 ! p. 114 integer n,i,s n=7 write(*,*)'n=',n s=0 do i=1,n,1 s=s+i enddo write(*,*)'suma=',n*(n+1)/2 end subroutine ts16 subroutine ts17 real s s=0. do x=0.1,0.9001,0.1 s=s+x enddo write(*,*)'s=',s end subroutine ts17 subroutine ts18 ! p. 115 integer i,s,p,n n=3 ! ; write(*,*)'n=',n ; read(*,*)n write(*,*)'n=',n s=0 p=1 do i=1,n p=p*i s=s+p enddo write(*,*)'s=',s end subroutine ts18 subroutine ts19 real x x=15. do write(*,*)x,x**2 x=x-1.0 if(x<0.d0)exit enddo end subroutine ts19