Информатика (экзамен билеты) Э-4 / Информатика.Задачи на экзамен
.doc
program pppp dimension a(4,5) integer a,i,j,im,h logical q,pp1 data a/ 54, -2, 33, 19, 55, 11, 92, -3, 94, 95, 16, 22, 33, -4, 10, 11, -2, 33, 44, 55/ !Write(*,*)'vvedite matricy 4 na 5 po formaty XX' !read(*,31) ((A(I,j),j=1,5),i=1,4) write(*,*)'matrica A' write(*,31)((A(i,j),j=1,5),i=1,4) 31 format((1x,5(i2,1x))) q=pp1(a,4,5) if (q) then call pp2(a,4,5,im,jm) 45 format (1x,' indexi min pologitelnogo elemeta ',i1,1x,i1) write(*,45)im,jm else call pp3(a,4,5,h) 35 format (1x,'4islo ne4etnih elementov matrici ',i2) write(*,35)h endif end
3 |
Pp1 logical function pp1 (x,n,m) dimension x(n,m) integer x,n,m,i,j logical p p=.false. j=1 do while (j.le.m.and..not.p) p=.true. i=1 do while (i.le.n.and.p) if (x(i,j).lt.0) then p=.false. endif i=i+1 enddo j=j+1 enddo pp1=p end subroutine pp2 (x,n,m,im,jm) dimension x(n,m) integer i,j,x,n,m,jm,im,xm im=0 jm=0 i=1 do while (i.le.n.and.im.eq.0) j=1 do while (j.le.m.and.jm.eq.0) if (x(i,j).gt.0) then xm=x(i,j) im=i jm=j endif j=j+1 enddo i=i+1 enddo i=i-1 do while (i.le.n) j=1 do while (j.le.m) if (x(i,j).gt.0.and.x(i,j).le.xm) then xm=x(i,j)
integer function PP1 (A,N) dimension A(N,N) real A integer k1, k2, i, j, R k1=0 k2=0 do i=1,N,1 do j=1,N,1 if (A(i,j)<=0) then k1=k1+1 else k2=k2+1 end if end do end do R=k2-k1 PP1=R end
subroutine PP2 (A,N,imin,jmin) dimension A(N,N) real A integer imin, jmin imin=0 jmin=0 min=A(2,1) do i=2,N,1 do j=1,i-1,1 if (A(i,j)< min) then min=A(i,j) imin=i jmin=j end if end do end do end
subroutine PP3 (A,N) dimension A(N,N) real A integer i,j do i=2,N,1 do j=1,i-1,1 C=A(i,j) A(i,j)=A(j,i) A(j,i)=C end do end do end
dimension A (6,6),B(8,8) real A,B integer R1, R2, imin,jmin,PP1 read (*,*) ((A(i,j),j=1,6),i=1,6) read (*,*) ((B(i,j),j=1,8),i=1,8) R1=PP1(A,6) R2=PP1(B,8) if (R1>R2) then call PP2(A,6,imin,jmin) call PP3 (B,8) write (*,*) imin,jmin write (*,*) ((B(i,j),j=1,8),i=1,8) else call PP2 (B,8,imin,jmin) call PP3 (A,6) write (*,*) imin,jmin write (*,*)((A(i,j),j=1,6),i=1,6) end if end |
subroutine pp3 (x,n,m,k) dimension x(n,m) integer x,n,m,i,j,k k=0 do i=1,n do j=1,m if (x(i,j)/2*2.ne.x(i,j)) then k=k+1 endif enddo enddo end |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
subroutine PP1 (A,N,F,imax) dimension A(N,N) integer A,max,imax,i,j logical F max=A(1,1) imax=1 do i=1,N,1 do j=1,N,1 if (A(i,j)>max)then max=A(i,j) imax=i jmax=j end if end do end do
if (imax<jmax) then F=.true. else F=.false. end if end
subroutine PP2 (A,N,imax) dimension A(N,N) integer A,imax,j do j=1,N,1 C=A(imax,j) A(imax,j)=A(1,j) A(1,j)=C end do end
logical function PP3 (A,N) dimension A(N,N) integer A,i logical F F=.true. i=1 do while (i<=N-1 .and. F) if (A(i,i)<A(i+1,i+1)) then F=.false. end if i=i+1 end do PP3=F end
dimension A(4,4) integer A, imax logical F,P,PP3 read (*,*) ((A(i,j),j=1,4),i=1,4) call PP1 (A,4,F,imax) if (F) then call PP2 (A,4,imax) write (*,*) ((A(i,j),j=1,4),i=1,4) else P=PP3(A,4) write (*,*) P end if end |
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Задача 3
(главный модуль)
program pppp dimension a(6,6) integer a,i,j,jm,h,c logical q,pp1 data c/199/,a/ 14, -2, 33, 19, 15, 11, 92, -3, 24, 45, 16, 22, 33, -2, 10, 11, -2, 33, 44, 55, 55, 11, 92, -3, 94, 95, 96, 92, 93, -4, 10, 11, -2, 33, 44, 55/ !Write(*,*)'vvedite matricy 6 na 6 po formaty XX' !read(*,30) ((A(I,j),j=1,6),i=1,6) write(*,*)'matrica A' write(*,30)((A(i,j),j=1,6),i=1,6) 30 format((1x,6(i2,1x))) !write(*,*)' vvedite zadannoe 4islo po formaty XXX' !read(*,20)c write(*,*)'zadannoe 4islo' write(*,20)c 20 format (1x,i3) q=pp1(a,6,6,c) if (q) then call pp2(a,6,6,h) 40 format (1x,' koli4estvo 4etnih elementov ',i2) write(*,40)h else call pp3(a,6,6,jm) 31 format (1x,'stolbec s max SA ',i1) write(*,31)jm endif end
|
logical function pp1 (x,n,m,c) dimension x(n,m) integer x,n,m,i,j,c xmin=x(1,1) xmax=x(1,1) do i=1,n do j=1,m if (x(i,j).lt.xmin) then xmin=x(i,j) else if(x(i,j).gt.xmax) then xmax=x(i,j) endif endif enddo enddo if (xmax-xmin.lt.c) then pp1=.true. else pp1=.false. endif end
subroutine pp3 (x,n,m,jm) dimension x(n,m) real sa,sm integer i,j,x,n,m,jm jm=1 do i=1,n sm=sm+x(i,1) enddo sm=sm/n do j=2,m sa=0 do i=1,n sa=sa+x(i,j) enddo sa=sa/n if (sa.gt.sm) then sm=sa jm=j endif enddo
|
subroutine pp2 (x,n,m,k) dimension x(n,m) integer x,n,m,i,j,k k=0 do i=1,n do j=1,m if (x(i,j)/2*2.eq.x(i,j)) then k=k+1 endif enddo enddo end |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Задача 6
program pppp dimension a(6,10) integer a,i,j,im,h,c logical q,pp1 data c/4/,a/ 11, -2, 33, 19, 55, 11, 92, -3, 94, 95, 11, -2, 33, 44, 55, 11, -2, 33, 44, 55, 11, 22, 33, 44, 55,94, 95, 11, -2, 36, 44, -5, 12, -2, 36, 44, 55, 11, 22, 33, 44, 55, 19, 55, 11, 92, -3, 94, 95, 11, -2, 33, 44, 55, 11, -2, 33, 44, 55, 11/ !Write(*,*)'vvedite matricy 6 na 10 po formaty XX' !read(*,36) ((A(I,j),j=1,10),i=1,6) !write(*,*)' vvedite zadannoe 4islo po formaty XX' !read(*,20)c write(*,*)'matrica A' write(*,36)((A(i,j),j=1,10),i=1,6) 36 format((1x,10(i2,1x))) write(*,*)'zadannoe 4islo' write(*,20)c 20 format (1x,i2) do j=1,10,2 q=pp1(a,6,10,j) if (q) then call pp2(a,6,10,j+1,c,h) 30 format (1x,'4islo elementov kratnih ',i2,' v ',i2,' stolbce ravno ',i1) write(*,30)c,j+1,h else call pp3(a,6,10,j+1,im) 40 format (1x,' nomer max elementa v ',i2,' stolbce : ',i1) write(*,40)j+1,im endif enddo end |
Класс Имя Смысл
Тип
Струк вход x Имя
матрицы Цел {X}n,m
n Колво
строк Цел п/п
m Колво
столбцов Цел п/п
J Заданный
столбец Цел п/п рез p флажок лог п/п Промеж I № текущ
строки Цел п/п logical function pp1 (x,n,m,j) dimension x(n,m) integer x,n,m,i,j logical p p=.true. i=1 do while (i.le.n/2.and.p) if (x(i,j).lt.0) then p=.false. endif i=i+1 enddo pp1=p end
subroutine pp2 (x,n,m,j,c,k) dimension x(n,m) integer x,n,m,i,j,k,c k=0 do i=1,n if (x(i,j)/c*c.eq.x(i,j)) then k=k+1 endif enddo end |
subroutine pp3 (x,n,m,j,jm) dimension x(n,m) integer i,j,x,n,m,jm,xm xm=x(1,j) jm=1 do i=2,n if (x(i,j).gt.xm) then jm=i xm=x(i,j) endif enddo end |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
10
|
11
|
12
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
16
|
Dimension A(7,8) Real A Integer I,J,k,PP2 Logical P,PP1 Write (*,*) 'vvedite metricu A' Read (*,*) ((A(I,J),J=1,8),I=1,7) P=PP1 (A,7,8) If (P) Then Write (*,*) 'yclovie vipolnaetca' k=PP2 (A,7,8) write (*,*) 'kol-vo polojitelnih elementov:' Write (*,16) k 16 format (3x,'k=',I3) else Call PP3 (A,7,8) write (*,*) 'yclovie ne vipolnaetca' write (*,*) 'izmenen matrica:' Write (*,26) ((A(I,J),J=1,8),I=1,7)
logical function PP1 (A,N,M) Dimension A(N,M) Real min,A Integer I,J,Jmin Logical P P=.false. min=A(1,1) Jmin=1 do I=1,N do J=1,M if (A(I,J)<min) then min=A(I,J) Jmin=J end if end do end do if (Jmin>M/2) then P=.true. end if PP1=P end
Integer function PP2 (A,N,M) Dimension A(N,M) Real A Integer I,J,k k=0 do I=1,N do J=1,M/2 If (A(I,J)>0) Then k=k+1 end if end do end do PP2=k end
Subroutine PP3 (A,N,M) Dimension A(N,M) Real C, A Integer I,J do I=1,N do J=1,M/2 C=A(I,J) A(I,J)=A(I,M+1-J) A(I,M+1-J)=C end do end do end
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
19
|
DIMENSION A(4,5), B(6,7) INTEGER K,PP3,A,B,S1,S2,L,T,PP1 WRITE (*,*) 'VVEDITE MATRIZU A' READ(*,*) ((A(I,J),J=1,5),I=1,4) WRITE (*,*) 'VVEDITE MATRIZU B' READ(*,*) ((B(I,J),J=1,7),I=1,6) WRITE(*,*) 'VVEDITE NACHALO GRANIZI' READ(*,*) L WRITE(*,*) 'VVEDITE KONEC GRANIZI' READ(*,*) T S1=PP1(A,4,5) S2=PP1(B,6,7) IF (S1>S2) THEN CALL PP2(A,4,5,Im,Jm) WRITE(*,*) 'INDEKSI ISKOMIX ELEMENTOW A(',Im,',',Jm,')' K=PP3(B,6,7,L,T) WRITE(*,*) 'KOLICHESTWO ISKOMIX ELEMENTOW V MATRIZE B, K=',K ELSE CALL PP2(B,6,7,Im,Jm) WRITE(*,*) 'INDEKSI ISKOMIX ELEMENTOW B(',Im,',',Jm,')' K=PP3(A,4,5,L,T) WRITE(*,*) 'KOLICHESTWO ISKOMIX ELEMENTOW V MATRIZE A, K=',K END IF END
INTEGER FUNCTION PP1(C,N,M) DIMENSION C(N,M) INTEGER N,M,I,J,S,C DO I=1,N,1 DO J=1,M,1 IF ((C(I,J)/2*2)==C(I,J)) THEN S=S+C(I,J) END IF END DO END DO PP1=S END
SUBROUTINE PP2(C,N,M,Im,Jm) DIMENSION C(N,M) INTEGER N,M,Im,Jm,I,J,C,MIN Im=1 Jm=1 MIN=C(1,1) DO I=1,N,1 DO J=1,M,1 IF (C(I,J)>0) THEN IF (C(I,J)<MIN) THEN MIN=C(I,J) Im=I Jm=J END IF END IF END DO END DO END
INTEGER FUNCTION PP3(C,M,N,L,T) DIMENSION C(N,M) INTEGER M,N,L,T,C K=0 DO I=1,N,1 DO J=1,M,1 IF ((C(I,J)>=L).AND.(C(I,J)<=T)) THEN K=K+1 END IF END DO END DO PP3=K END
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
20
|
DIMENSION A(4,3) REAL A,B INTEGER Im,Jm,W,PP3 LOGICAL P WRITE (*,*) 'VVEDITE MATRIZU A' READ(*,*) ((A(I,J),J=1,3),I=1,4) WRITE(*,*) 'VVEDITE ZADANNII ELEMENT' READ (*,*) B CALL PP1(A,4,3,B,Im,Jm,P) IF (P) THEN CALL PP2(A,8,9,Im) WRITE (*,*) 'IZMENNENNAYA MATRIZA A' WRITE (*,16) ((A(I,J),J=1,),I=1,4) 16 FORMAT ((1X,4(F3.1,1X))) ELSE W=PP3(A,8,9,Jm) WRITE (*,17) 'NOMER ISKOMOGO ELEMENTA V STOLBCE A(',W,',',Jm,')' 17 FORMAT (2(I2)) END IF END
SUBROUTINE PP1(A,N,M,B,Im,Jm,P) DIMENSION A(N,M) REAL A,B,MAX INTEGER N,M,Im,Jm LOGICAL P P=.FALSE. MAX=A(1,1) DO I=1,N,1 DO J=1,M,1 IF (MAX<A(I,J)) THEN MAX=A(I,J) Im=I Jm=J END IF END DO END DO IF (MAX>B) THEN P=.TRUE. END IF END
SUBROUTINE PP2(A,N,M,Im) DIMENSION A(N,M) REAL A,G INTEGER Im,J,N,M LOGICAL P P=.TRUE. DO WHILE (P) P=.FALSE. DO J=1,M,1 IF (A(Im,J)>A(Im,J+1)) THEN G=A(Im,J) A(Im,J)=A(Im,J+1) A(Im,J+1)=G P=.TRUE. END IF END DO END DO END
INTEGER FUNCTION PP3(A,N,M,Jm) DIMENSION A(N,M) REAL A INTEGER W,I LOGICAL P W=0 P=.TRUE. I=1 DO WHILE ((I<=N).AND.(P)) IF (A(I,Jm)>0) THEN W=I P=.FALSE. END IF I=I+1 END DO IF (P) THEN WRITE(*,*) 'OTRIZ ELEMENTOW V MATRIZE NET' END IF PP3=W END
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
27
|
Dimension A(4,6) Real A,SA Integer I,J,kp,ko Logical P,PP1 Write (*,*) 'vvedite matricy A' Read (*,*) ((A(I,J),J=1,6),I=1,4) P=PP1 (A,4,6) If (P) then Write (*,*) 'yclovie vipolnaetca' Call PP2 (A,4,6,SA) else Write (*,*) 'yclovie ne vipolnaetca' Call PP3 (A,4,6,kp,ko) end if end logical function PP1 (A,N,M) Dimension A(N,M) Real A, S, Smax Integer I,J,Jmax Logical P P=.true. do J=1,M S=0 do I=1,N if (A(I,J)>0) then S=S+A(I,J) end if end do if (P) then Smax=S Jmax=J P=.false. else if (S>Smax) then Smax=S Jmax=J end if end if end do if (Jmax<=M/2) then P=.true. end if PP1=P end Subroutine PP2 (A,N,M,SA) Dimension A(N,M) Real A,SA,S Integer I,J,K logical P do I=2,N,2 K=0 S=0 P=.false. J=1 do while (J<=M .and..not. P) if (A(I,J)>=0) Then S=S+A(I,J) K=K+1 else P=.true. end if J=J+1 end do SA=S/K Write (*,6) I 6 format (2x,'Srednee arifmeticheskoe ',I1,' stroki:') write (*,16) SA 16 format (2x,'SA=',F5.2) end do end Subroutine PP3 (A,N,M,kp,ko) Dimension A(N,M) Real A Integer I,J,kp,ko do I=1,N,2 kp=0 ko=0 do J=1,M if (A(I,J)>0) then kp=kp+1 else ko=ko+1 end if end do write (*,26) I 26 format (2x,'v ',I1,' stroke:') Write (*,*) 'kol-vo polojit=',kp write (*,*) 'kol-vo otricatel=',ko end do end
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
21 Logical function PP1 (A,N,M,k) Dimension A(N,M) Integer A,N,M, min, max, I, J, k Logical P P=.false. min=A(1,1) max=A(2,1) Do I=1,N,1 Do J=1,M,1 If (A(I,J)<min) then min=A(I,J) else If (A(I,J)>max) then max=A(I,J) end if end if end do end do If ((max-min)>k) then P=.true. end if PP1=P end
Integer function PP2 (A,N,M) Dimension A(N,M) Integer A,N,M,I,J,kol kol=0 Do I=1,N,1 Do J=1,M,1 If ((A(I,J)/2*2)/=(A(I,J))) then kol=kol+1 end if end do end do PP2=kol end
Real function PP3 (A,N,M) Dimension A(N,M) Integer A,N,M,S,kl, I,J Real Sa kl=0 S=0 Do I=1,N,1 Do J=1,M,1 If (A(I,J)/2*2==A(I,J)) then kl=kl+1 S=S+A(I,J) end if end do end do Sa=s/kl PP3=Sa end
Dimension A(7,8) Real Sa,PP3 Integer A,kol,PP2 Logical P, PP1 Write(*,*) 'vvedite matr A' Read (*,*) ((A(I,J), J=1,8), I=1,7) P=PP1(A,7,8,58) If (P) then kol=PP2(A,7,8) Write(*,16) kol 16 format (1x,'kol-vo nechetnih el-tov-',I3) else Sa=PP3(A,7,8) Write(*,17) Sa 17 format (1x,'sred ar chetnih el-tov-', F5.1) end if end |
22 Logical function PP1 (A,N,M) Dimension A(N,M) Integer A,N,M, I, J Logical P J=1 P=.false. Do while (J<=M.and..not.P) P=.true. I=1 Do while (I<=N.and.P) If (A(I,J)<0) then P=.false. end if I=I+1 end do J=J+1 end do PP1=P end
Subroutine PP2 (A,N,M,Imin,Jmin) Dimension A(N,M) Integer A,N,M,I,J,min, Imin, Jmin min=A(1,1) Imin=1 Jmin=1 Do I=1,N,1 Do J=1,M,1 If (A(I,J)<min) then min=A(I,J) Imin=I Jmin=J end if end do end do end
Integer function PP3 (A,N,M,c,b) Dimension A(N,M) Integer A,N,M,I,J,kol,c,b kol=0 Do I=1,N,1 Do J=1,M,1 If (A(I,J)<=b.and.A(I,J)>=c ) then kol=kol+1 end if end do end do PP3=kol end
Dimension A(4,5) Integer A,kol,PP3,Imin,Jmin Logical P, PP1 Write(*,*) 'vvedite matr A' Read (*,*) ((A(I,J), J=1,5), I=1,4) P=PP1(A,4,5) If (P) then Call PP2(A,4,5,Imin,Jmin) Write(*,16) Imin Write(*,16) Jmin 16 format (1x,'index',I3) else kol=PP3(A,4,5,-5,7) Write(*,17) kol 17 format (1x,'kol-vo el-tov-', I3) end if end |
25 Logical function PP1 (A,N,M,k) Dimension A(N,M) Integer A,N,M, I, k Logical P P=.true. Do I=1,N,1 If (A(I,k)>A(I+1,k)) then P=.false. end if end do PP1=P end
Subroutine PP2 (A,N,M,k,max,Imax) Dimension A(N,M) Integer A,N,M,I,k,max,Imax Logical P P=.false. Do I=1,N,1 If (A(I,k)<0) then If (.not.P) then max=A(I,k) Imax=I P=.true. else If (A(I,k)>max) then max=A(I,k) Imax=I end if end if end if end do end
Integer function PP3 (A,N,M,k) Dimension A(N,M) Integer A,N,M,ch, ne, raz, k, I ch=0 ne=0 Do I=1,N,1 If (A(I,k)/2*2==A(I,k)) then ch=ch+1 else ne=ne+1 end if end do raz=abs(ch-ne) PP3=raz end
Dimension A(4,6) Integer A,J,Raz, Imax, max, PP3 Logical P, PP1 Write(*,*) 'vvedite matr A' Read (*,*) ((A(I,J), J=1,6), I=1,4) Do J=1,6,2 P=PP1(A,4,6, J) If (P) then Call PP2(A,4,6,J,max,Imax) Write(*,16) max Write(*,16) Imax 16 format (1x,'index',I3) else Raz=PP3(A,4,6,J+1) Write(*,17) raz 17 format (1x,'raznost el-tov-', I3) end if end do end |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
26 Logical function PP1 (A,N,M,k) Dimension A(N,M) Integer A,N,M, J, k Logical P P=.false. J=1 Do while (J<=M.and..not.P) If (A(k,J)<0) then P=.true. nd if J=J+1 end do PP1=P end
Integer Function PP2 (A,N,M,k) Dimension A(N,M) Integer A,N,M,J,k,max,Jmax max=A(1,1) Jmax=1 Do J=1,M,1 If (A(k,J)>max) then max=A(k,J) Jmax=J end if end do PP2=Jmax end
Integer function PP3 (A,N,M,k) Dimension A(N,M) Integer A,N,M,Jotr, J, k Logical P P=.false. Jotr=0 J=1 Do while (J<=M.and..not.P) If (A(k,J)<0) then P=.true. Jotr=J end if J=J+1 end do PP3=Jotr end
Dimension A(4,6) Integer A,I, Jotr, Jmax,PP3,PP2 Logical P, PP1 Write(*,*) 'vvedite matr A' Read (*,*) ((A(I,J), J=1,6), I=1,4) Do I=1,4,2 P=PP1(A,4,6, I) If (.not.P) then Jmax=PP2(A,4,6,I+1) Write(*,16) Jmax 16 format (1x,'index',I3) else Jotr=PP3(A,4,6,I+1) Write(*,17) Jotr 17 format (1x,'index otr el-ta-', I3) end if end do end |
6
8 |
7
9 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
12
11
|
13
14
|
15
16 29 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
20
26 |
28
|
24,25
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
10 Типичная неструктурность: более одного блока анализа на выход из цикла.
|
17 Модуль - отдельный файл в составе проекта, отдельно компилируется от главной программы. Обычно используются для организации библиотек./ Структура модуля MODULE module-name [ spec-statements] [ CONTAINS module-subprogram] END [MODULE [module-name] ] Пример MODULE mod1 REAL(8) a,b,c,d INTEGER(4) Int1, Int2, Int3 CONTAINS function fun1(x) .... end function fun1 END MODULE В прогу линкуется с помощью USE USE mod1 Это означает, что у проги есть доступ ко всем объектам данного модуля, кроме имеющих атрибут private. Save - сохраняет текущие значения объектов модуля при выходе из него Особые виды модулей: 1. Модуль с глобальными данными. 2. Интерфейсный модуль (со всеми интерфейсами к библиотеке).
|
4 Величины в программировании, так же, как и математические величины, делятся на переменные и константы (постоянные). Например, в формуле (a2-2ab+b2) а, Ь — переменные, 2 — константа. Константы записываются в алгоритмах своими десятичными значениями, например: 23, 3.5,34. Значение константы хранится в выделенной под нее ячейке памяти и остается неизменным в течение работы программы. Переменные в программировании, как и в математике, обозначаются символическими именами. Эти имена называют идентификаторами (от глагола «идентифицировать», что значит обозначать, символизировать). Идентификатор может быть одной буквой, множеством букв, сочетанием букв и цифр. Как правило, употребляются буквы только латинского алфавита и первый символ в идентификаторе — буква. Примеры идентификаторов: А, X, BS.prim, r25 и т.п. Существуют три основных типа величин, с которыми работает компьютер: 1)числовой – целые и вещественные числа, 2) символьный – текст, который может содержать буквы (русские и латинские), числа, знаки препинания, служебные символы и т.д., 3)логический – принимает два значения: True (истина) и False (ложь). Команда присваивания — одна из основных команд в алгоритмах работы с величинами. Записывать ее мы будем так: <переменная> = < выражение> Значок «=» читается «присвоить». Например: Z :=X+Y. Компьютер сначала вычисляет выражение, затем результат присваивает переменной, стоящей слева от знака «= Если до выполнения этой команды содержимое ячеек, соответствующих переменным X, Y, Z, было таким:
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
5 ВСПОМОГАТЕЛЬНЫЕ АЛГОРИТМЫ Технология алгоритмического программирования базируется на методе последовательной детализации. Сначала формулируется основной алгоритм, который состоит из крупных блоков, часть которых может быть не понятна исполнителю. Затем происходит детализация, т.е. эти блоки подробно расписываются с использованием команд понятных исполнителю Сложный алгоритм при разработке можно разбивать.Виды алгоритмов: Линейный алгоритм Циклический алгоритм: Разветвляющийся алгоритм Вспомогательный алгоритм (процедура) - инструмент, который позволяет:1)сократить текст основного алгоритма (за счет отсутствия многократных описаний одних и тех же повторяющихся действий);2)облегчить понимание текста программы, делая его похожим на текст на естественном языке, при условии, конечно, использования содержательных имен процедур; 3)"обучать" исполнителя новым предписаниям, т.е. "расширять", приспосабливая к конкретной задаче, его СКИ;4)свести новую задачу к уже решенным, используя уже написанные алгоритмы как вспомогательные (метод программирования снизу вверх);5)писать, проверять и отлаживать большуюпрограмму почастям;6)переделывать программы и исправлять в них ошибки, не затрагивая тех частей алгоритма, которые остаются без изменения;7)в сочетании с методом последовательного уточнения решить "трудную" задачу, разбивая ее на более мелкие и "легкие" подзадачи.
|
18 Главная программа заканчивается командами STOP (остановиться) и END(конец модуля). Подпрограмма должна обязательно содержать команду.RETURN (вернуться в точку вызова модуля), причем эта команда может располагаться не обязательно в конце, и модуль может иметь несколько команд возврата. Команды STOP и RETURN транслируются в соответствующие машинные команды, оператор END служит указанием компилятору, что запись на Фортране окончена. Рассмотрим пример программы на Фортране вычисления площади треугольника по трем сторонам, используя формулу Герона: Где Значения длин сторон считываются с терминала, результат вычислений выводится на экран дисплея READ 1, А, В, С 1 FORMAT (3F 5.2) Р = (А + В + С) / 2 S = SQRT (Р*(Р — А)*(Р – В)*(Р — С)) PRINT 2, S 2 FORMAT (‘S =\ F 8.3’) STOP END
|
19 Данные – это переменные или константы. Данные могут быть организованы в виде скалярных объектов и объектов, обладающих внутренней структурой: массивов, записей и файлов. Переменные, константы, программа, подпрограммы и другие программные компоненты имеют имя. Имена – это последовательности латинских букв, цифр и символов подчеркивания, причем первым символом должна быть буква. Число символов в имени не должно превышать 65. Каждая величина, используемая в тексте программы, может быть либо константой, либо переменной. Константа – это величина, значение которой задается в тексте программы в явном виде и в дальнейшем не изменяется. Переменная – это величина, к которой обращаются в программе, используя соответствующее имя. Переменная может быть определенной и неопределенной. Переменная становится определенной после того, как она получит значение. Значения переменных могут изменяться в процессе исполнения программы. 1)целый (INTEGER),2)вещественный (REAL),3)комплексный (COMPLEX),4)логический (LOGICAL). ) Вещественная константа без порядка, т.е. число, записанное с десятичной точкой: 888.55 -327.751 0.0 +60. 8.93 0.00099 Вещественная константа с порядком, которая записывается в виде nЕm. Здесь мантисса n – вещественная константа, порядок тпредставляется как однозначное или двузначное целое число со знаком или без знака -0.001441Е2 ! число -0.01441 102, 67.54Е+11 ! число 67.54 1011, -8.E-36 ! число -8.0 10-36 , 0.03Е-5 ! число 0.03 10-5.
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
21 Оператор присваивания заменяет текущее значение переменной новым значением, которое определяется выражением, или определяет выражение, значение которого должно возвращаться функцией.
------------¬ ---¬ ----------¬ оператор -----T-->¦ссылка на +------>¦:=+-->¦выражение+--> присваивания ¦ ¦переменную ¦ ^ L--- L---------- ¦ L------------ ¦ ¦ --------------¬ ¦ L-->¦идентификатор+-- ¦ функции ¦ L-------------- Выражение должно быть совместимо по присваиванию с типом переменной или типом значения, возвращаемого функцией в качестве результата (см. раздел "Совместимость типов" в Главе 4)Приведем некоторые примеры операторов присваивания:X := Y + Z Done := (I >= 1) and (I < 100); Huel := [blue, Succ(C)]; I := Sqr(J) - I * K; Присваивания объектного типа.Правила совместимости по присваиванию объектных типов позволяют присваивать экземпляру объекта экземпляр любого из его дочерних типов. Такое присваивание представляет собой проекцию потомка на пространство его предка. В примере исходного кода в Главе 4 с учетом экземпляра F типа TField и экземпляра Z типа TZipField присваивание F := Z копирует только поля X, Y, Len и Name. Присваивание экземпляру объектного типа не инициализирует экземпляр. Например, в предыдущем примере присваивание F := Z означает, что вызов конструктора для F можно опустить.
|
22 Операторы обеспечивают ряд функций, таких как вычисления, запоминание результатов вычислений, формирование управления, чтение и запись файлов и обеспечение информации для компилятора.Операторы Фортрана делятся на два основных класса : выполняемые и невыполняемые. Выполняемые операторы, будучи употребленными, вызывают действие. Невыполняемые операторы сами по себе действий не вызывают. Вместо этого они определяют, описывают или классифицируют элементы программ, такие как входные точки, данные или программные единицы. К невыполняемым операторам относятся следующие : 1. Операторы PROGRAM, SUBROUTINE, FUNCTION и BLOCK DATA 2. Операторы описаний 3. Оператор DATA 4. Оператор FORMAT Выполняемые операторы могут быть разделены на следующие категории : 1. Операторы присвоения 2. Операторы управления 3. Операторы ввода/вывода. 2.1.Oпepaтop DATA. Oпepaтop DATA зaдaeт нaчaльнoe знaчeниe пepeмeнным. Oпepaтop DATA являeтcя нeoбязaтeльным, нeвыпoлняeмым oпepaтopoм. Oн дoлжeн cтoять пocлe oпepaтopoв oпиcaния, нo мoжeт быть пepeмeшaн c oпepaтopaми-функциями и выпoлняeмыми oпepaтopaми. 2.2.Oпepaтop FORMAT. Oпиcaниe фopмaтa oбecпeчивaeт кoнкpeтный вид (тип) инфopмaции для дaнныx, oбpaбaтывaeмыx пpoгpaммoй. Oпиcaниe фopмaтa мoжeт быть зaдaнo oпepaтopoм FORMAT, a тaк жe кoнкpeтным видoм кoнcтaнт (cмoтpитe глaву 4 гдe ecть дoпoлнитeльнaя инфopмaция пo зaдaнию фopмaтa дaнныx) 2.3.Oпepaтop пpиcвaивaния. Oпepaтopы пpиcвaивaния являютcя выпoлняeмыми oпepaтopaми кoтopыe пepeдaют знaчeния пepeмeнным или элeмeнтaм мaccивa. Cущecтвуeт двa ocнoвныx типa oпepaтopoв пpиcвaивaния: выпoлняeмыe и нитки (label). 2.4.Oпepaтopы упpaвлeния. Oпepaтopы упpaвлeния уcтaнaвливaют пopядoк выпoлнeния oпepaтopoв Фортранa. Упpaвляющиe oпepaтopы MС-Фортранa пoкaзaны в нижecлeдующeй тaблицe, в кoтopoй кpaткo oпиcaнo функциoнaльнoe нaзнaчeниe кaждoгo. CALL - Bызывaeт и выпoлняeт пoдпpoгpaммы subroutine из дpугиx пpoгpaммныx eдиниц. CONTINUE- Иcпoльзуeтcя пpeимущecтвeннo для пpoдoл пути c тoгo мecтa,гдe cтoят нaмeчeнныe oператopы,в чacтнocти иcпoльзуeтcя в кaчecтвe кoнeчнoгo oпepaтopa в oпepaтope циклa DO. DO Opгaнизoвывaeт пoвтopнoe выпoлнeниe oпepaторов следующих за DO и вплоть до конечного оператора. ELSE Относится к блоку ELSE. ELSEIF Oтносится к блоку ELSEIF. END Зaвepшaeт выпoлнeниe пpoгpaммoй eдиницы. ENDIF Укaзывaeт кoнeц нaбopa cepии oпepaтopoв,cлeдующиx зa блоком оператора IF. GO TO Пepeдaeт упpaвлeниe в кaкoe-либo мecтoпрограммы,включает следующие разновидности:присваиваемый,вычисляемый и безусловный. IF Opгaнизoвывaeт выпoлнeниe пo уcлoвию дpугих oпepaтopoв,зaвиcящиx oт знaчeний oпределенного выpaжeния.PAUSE Ocтaнaвливaeт выпoлнeниe пpoгpaммы,дo тex нe будeт нaжaтa клaвишa RETURN. Boзвpaщaeт упpaвлeниe в пpoгpaммную eдини RETURN ца из которой была вызвана данная программа или функция. STOP | Oкoнчaниe пpoгpaммы |
23 Параметрический цикл – такой, в котором числом происхождений цикла управляет переменная называется параметром цикла т.е. должно быть известно её начальное значение (VH)n1, конечное (Vk)n2 и шаг (Vm)n3. Существует возможность организовать цикл внутри тела другого цикла. Такой цикл будет называться вложенным циклом. Полное число исполнений тела внутреннего цикла не превышает произведения числа итераций внутреннего и всех внешних циклов. Одна из проблем, связанных с вложенными циклами — организация досрочного выхода из них. Во многих языках программирования есть оператор досрочного завершения цикла, но он, как правило, обеспечивает выход только из цикла того уровня, откуда вызван. Вызов его из вложенного цикла приведёт к завершению только этого внутреннего цикла, внешний же цикл продолжит выполняться. Кратный цикл Если тело цикла содержит структуру, которая является циклом, то такой цикл называется кратным. В языках программирования существует только один оператор параметрического цикла, который реализует либо цикл ПОКА либо цикл ДО
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
27 Оператор FORMAT Служебый оператор, связанный с каким-либо оператором ввода или вывода. Этот оператор не может быть без метки (m) Si – спецификация формата S1)Основные 2) Служебные
мантисса 1) цел. 2)вещ. порядок xx 3) двойной точности. Dn.m 4) логические .True. Ln False. в самой правой позиции
5) символьные An Условный переход
If (u) goto.m Rnext
|
31 Объектно-ориентированное программирование (ООП) – это современная методология программирования. ООП позволяет не только использовать встроенные абстракции (как в традиционном программировании), но и определять собственные абстракции и тем самым позволяет описать программу в терминах близких к прикладной области. . При разработке больших систем обычно использовались дополнительные инструментальные средства или такие методы, как наборы правил и соглашений, которые должны выполняться членами группы / Что касается современного Фортрана, отметим, что в описании стандарта явно не указывается, какие средства обеспечивают поддержку тех или иных элементов ООП (это и не требуется в официальном документе). Однако, как показали проведенные исследования, такие средства имеются, и эти средства весьма полезны не только в связи с ООП. Расширяемость типов, т.е. возможность добавлять определяемые пользователем типы. Расширяемость операций, т.е. возможность описывать новые операции.1)Возможность статического контроля соответствия типов и соответствия формальных и фактических аргументов при вызове процедур.2)Механизм инкапсуляции для реализации абстрактных типов данных.3)Наследование, т.е. возможность для порожденного объекта наследовать свойства (описание типа и операций) порождающего (родительского) объекта.4)Статический полиморфизм, т.е. возможность для программиста использовать какой-либо объект более чем одним способом, причем конкретизация способа использования выполняется на этапе компиляции.5)Динамический полиморфизм (динамическое связывание), т.е. конкретизация способа использования объекта реализуется на этапе выполнения.
|
33
В Фортрфне существует два вида общих областей одна неименована и несколько именнованых. Для того чтобы переменная была размещена в общей области, её надо записать в операторе COMMON /@01/S1/@02/S2@Oi - имя i-ой общей области Si - список объектов, размещаемых в Oi. Если в операторе COMMON гспользуется неименнованая область, то в слэше указывается пробел. Если же первый в операторе COMMON стоит неименнованая область, то сслєша с именем можно не указывать.Правило использования оператора COMMON: 1. В каждом п/модуле переменные массивы размещаемые в общей области, начинают заполнять её с первой ячейки, то обьекты размещаемые в общей области в одном п/модуле будут занимать те же ячейки, что и объекты размещаемые в этой области в том же порядке другом п/модуле.
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
32 Процедура или функция может содержать вызов других процедур или функций. В том числе процедура может вызвать саму себя. Никакого парадокса здесь нет – компьютер лишь последовательно выполняет встретившиеся ему в программе команды и, если встречается вызов процедуры, просто начинает выполнять эту процедуру procedure Rec(a: integer); begin if a>0 then Rec(a-1); writeln(a); end Выполнение процедуры Rec с параметром 3 состоит из выполнения процедуры Rec с параметром 2 и печати числа 3. В свою очередь выполнение процедуры Rec с параметром 2 состоит из выполнения процедуры Rec с параметром 1 и печати числа procedure Rec2(a: integer); begin writeln(a); if a>0 then Rec2(a-1); End. Сложная рекурсия Возможна чуть более сложная схема: функция A вызывает функцию B, а та в свою очередь вызывает A. Это называется сложной рекурсией. При этом оказывается, что описываемая первой процедура должна вызывать еще не описанную 1. procedure A(n: integer); {Опережающее описание (заголовок) первой процедуры} 2. procedure B(n: integer); {Опережающее описание второй процедуры} 4.procedure A(n: integer); {Полное описание процедуры A} 5.begin 6. writeln(n); 7. B(n-1); 8. end; 9. procedure B(n: integer); {Полное описание процедуры B} 10. begin 11. writeln(n); 12. if n<10 then 13. A(n+2); 14. end; Опережающее описание процедуры B позволяет вызывать ее из процедуры A.
|
|
|