Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Информатика (экзамен билеты) Э-4 / Информатика.Задачи на экзамен

.doc
Скачиваний:
17
Добавлен:
31.03.2015
Размер:
24.37 Mб
Скачать

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

(главный модуль)

класс

Имя

Смысл

Тип

Структура

входные

A

Имя матрицы

Цел

{A}6,6

c

Заданное число

Цел

Прос пер

выходные

k

Кол-во четных эл-ов

Цел

Пп

jm

№столбца с наиб сред арифм

Цел

Пп

промеж

I

№ текущей строки

цел

Пп

J

№текущего столбца

цел

Пп

q

флажок

лог

Пп

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

класс

Имя

Смысл

Тип

Струк

вх

A

Имя матрицы

Цел

{A}6,10

c

Задан число

Цел

п/п

вых

im

№макс эл-та столбца

Цел

п/п

h

Число кратных зад числу элов

Цел

п/п

проме

I

№ тек строки

цел

п/п

J

№тек столбца

цел

п/п

q

флажок

лог

п/п

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.primr25 и т.п.

Существуют три основных типа величин, с которыми работает компьютер:

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.

Соседние файлы в папке Информатика (экзамен билеты) Э-4