Название: Информатика. Алгоритмический язык Фортран - учебное пособие (Худяков Д.С., Саблина Г.В.)

Жанр: Информатика

Просмотров: 3092


3. задачи и решения

 

1. Дан одномерный массив с количеством элементов N £ 100. Найти сумму положительных элементов этого массива и количество отрицательных элементов.

Р е ш е н и е:

DIMENSION A(100)

READ(*,*)N,(A(I),I=1,N)

S=0

KOL=0

DO 10 I=1,N

IF(A(I).GT.0.0)S=S+A(I)

IF(A(I).LT.0.0)KOL=KOL+1

         10 CONTINUE

WRITE(*,1)S,KOL

          1 FORMAT(5X,'S=',E12.5,2X,'KOL=',I3)

STOP

END

2. Дан одномерный массив с количеством элементов N £ 200. Напечатать все элементы этого массива в файле RESULT.DAT с указанием индекса элемента.

Р е ш е н и е:

DIMENSION А(200)

READ (*,*) N, (А(I), I=1, N)

OPEN (1, FILE=' RESULT.DAT')

DO 5 I=1,N

WRITE (1,25) I, A(I)

          5 CONTINUE

         25 FORMAT (5X, 'A(',I3,')=',E12.5)

STOP

END

 

3. Напечатать в файле NUMBER.DAT все простые числа, не превосходящие заданного положительного целого числа N.

Р е ш е н и е:

OPEN(10,FILE='NUMBER.DAT')

WRITE(*,25)

READ(*,*)N

IF(N.LE.1)THEN

WRITE (10,1)

          1 FORMAT (5X,' Простых чисел нет')

STOP

END IF

WRITE(10,*)'2'

IF(N.EQ.2)STOP

WRITE (10,*)'3'

IF(N.EQ.3)STOP

DO 10 I=4,N

AI=I

N1=SQRT(AI)+1

DO 15 J=2,N1

IF(I/J*J.EQ.I)GOTO 10

        

         15 CONTINUE

WRITE (10,*) I

         10 CONTINUE

STOP

         25 FORMAT(5X,'N=')

END

4. Дан одномерный массив с количеством элементов N £ 1000. Найти максимальный элемент этого массива и его индекс.

Р е ш е н и е:

REAL MAX

DIMENTION A(1000)

READ(*,*)N,(A(I),I=1,N)

МАХ=А(1)

IND=1

DO 5 I=1,N

IF(A(I).LE.MAX) GOTO 5

MAX=A(I)

IND=I

          5 CONTINUE

WRITE (*,1) MAX, I

          1 FORMAT (5X,'MAX=',E12.5,2X,'IND=',I4)

STOP

END

5. Пусть функция f(x) задана выражением

f(x)

Написать программу, которая для заданных параметров N и М вычисляет значение функции для любого аргумента х.

Р е ш е н и е:

RЕАD(*,*)N,М,X

IF(X.LE.0.0) THEN

F=0

FACT=1.0

U=X

DO 5 I=1,N

F=U/FACT+F

U=U*X

FACT=FACT*(I+1)

     5 CONTINUE

ELSE

F=0

V=SIN(X)**2

U=SIN(X)

D0 10 I=1,2*M+1,2

F=F+U

U=U*V

        10 CONTINUE

END IF

WRITE(*,1)F

         1 FORMAT(5X,'F=',E12.5)

STOP

END

6. Дан одномерный массив с количеством элементов N £ 200. Сформировать два массива, один из которых состоит только из положительных элементов заданного массива, а другой – только из отрицательных элементов.

Р е ш е н и е:

DIMENSION A(200),B(200),C(200)

READ(*,*)N,(A(I),I=1,N)

NO=0

NP=0

DO 10 I=1,N

IF(A(I).GT.0) THEN

NP=NP+1

B(NP)=A(I)

END IF

IF(A(I).LT.0) THEN

NO=NO+1

C(NO)=A(I)

END IF

   10 CONTINUE

IF(NP.GT.0) THEN

WRITE(*,1)

    1 FORMAT(5X,'MACCИB ИЗ ПОЛОЖИТЕЛЬНЫХ ЭЛЕМЕНТОВ')

WRITE(*,*)(B(I),I=1,NP)

 END IF

 IF(NO.LT.0)THEN

 WRITE(*,2)

 2 FORMAT(5X,'MACCИB ИЗ ОТРИЦАТЕЛЬНЫХ ЭЛЕМЕНТОВ')

 WRITE(*,*)(C(I),I=1,NO)

 END IF

 STOP

 END

7. Дан двумерный массив с количеством строк N £ 20 и количеством столбцов М £ 15. Определить количество строк, целиком состоящих из отрицательных элементов, и найти среднее арифметическое положительных элементов массива.

 

Р е ш е н и е:

PROGRAM MATRIX

DIMENSION A(20,15)

READ(*,*) N,M,((A(I,J),I=1,N),J=1,M)

KOL=0

SP=0.0

LP=0

DO 10 I=1,N

L=0

DO 5 J=1,M

IF(A(I,J).LT.0)L=L+1

IF(A(I,J).GT.0)THEN

SP=SP+A(I,J)

LP=LP+1

END IF

    5 CONTINUE

 IF(L.EQ.M) KOL=KOL+1

   10 CONTINUE

 WRITE(*,1)KOL

    1 FORMAT(5X,'KOЛИЧECTBO СТРОК ИЗ ОТРИЦАТЕЛЬНЫХ

            *ЭЛЕМЕНТОВ =',I2)

 IF(LP.GT.0)THEN

 SP=SP/LP

 WRITE(*,2)SP

    2 FORMAT(5X,'CPEДHEE АРИФМЕТИЧЕСКОЕ ПОЛОЖИТЕЛЬНЫХ

     *ЭЛЕМЕНТОВ=',E12.5)

 ELSE

 

      WRITE(*,3)

    3 FORMAT(5X,'ПОЛОЖИТЕЛЬНЫХ ЭЛЕМЕНТОВ В МАССИВЕ НЕТ')

 END IF

 STOP

 END

 

8. Дан трехмерный массив с количеством элементов не более чем 10´20´30. Первый индекс массива определяет номер строки, второй индекс – номер столбца, третий индекс – номер страницы. Определить номер страницы, сумма элементов которой является максимальной среди сумм элементов всех других страниц данного массива, вывести на экран максимальную сумму.

Указание: решить задачу, используя подпрограмму-процедуру для определения искомого номера страницы. Произвести чтение исходных данных из файла.

Р е ш е н и е:

PROGRAM MAIN

INTEGER A(10,20,30),B(30),S

OPEN(1,FILE='DAN.DAT')

READ(1,1)L,M,N

READ(1,2)(((A(I,J,K),I=1,L),J=1,M),K=1,N)

DO 5 K=1,N

S=0

DO 10 J=1,M

DO 15 I=1,L

S=S+A(I,J,K)

  15 CONTINUE

  10 CONTINUE

B(K)=S

   5 CONTINUE

CALL MODULE(B,N,INDEX)

WRITE(*,*)' НОМЕР СТРАНИЦЫ = ',INDEX

WRITE(*,*)' МАКСИМАЛЬНАЯ СУММА ЭЛЕМЕНТОВ = ',

    *B(INDEX)

CLOSE(1)

   1 FORMAT(3I2)

   2 FORMAT(I4)

STOP

END

 

SUBROUTINE MODULE(A,N,INDEX)

INTEGER A(N)

INDEX=1

DO 5 I=1,N

IF(A(I).GT.A(INDEX)) INDEX=I

   5 CONTINUE

RETURN

END

9. Дан одномерный массив четырехзначных целых чисел с количеством элементов не более ста. Определить, сколько различных чисел в этом массиве.

Р е ш е н и е:

INTEGER А(100),В(100)

OPEN(10,FILE='DAN.DAT')

READ(10,1)N

READ(10,2)(A(I),I=l,N)

   1 FORMAT(I3)

   2 FORMAT(I4)

K=l

B(1)=А(1)

DO 5 I=1,N

DO 10 J=1,K

IF(A(I)).EQ.B(J))GOTO 5

  10 CONTINUE

K=K+1

B(K)=A(I)

   5 CONTINUE

WRITE(*,20)K

  20 FORMAT(2X,'КОЛИЧЕСТВО РАЗНЫХ ЧИСЕЛ =',I3)

STOP

END