Ошибка в Fortran 77, чтение чисел из файла с использованием 2d массивов - PullRequest
1 голос
/ 31 января 2020

Я пишу эту программу на Фортране 77, и я просто пытаюсь прочитать матрицу 3х3 с простыми числами

1 2 3
4 5 6
7 8 9

и затем распечатать их в другой файл.

       program filoIO_2darray
       dimension a(3,3)

       open(7,file="text.txt",status="old")
       open(8,file="test1.txt",status="unknown")

       do i=1,3
       do j=1,3
       read(7,*,end=50)a(i,j)
       end do
       end do

50     write(*,"(20(""*****""))")

       do i=1,3
       do j=1,3
       write(*,"(3x,i10)")a(i,j)
       end do
       end do


       pause
       end

вывод на экране очень большие числа, такие как

1065353216
1073741824
1077936168
   ...

, и если я положу вывод в файл, то

    **
    **
    **
    .0
    .0
    .0
    **
    .0
    .0

1 Ответ

0 голосов
/ 07 февраля 2020

Вы можете прочитать ваш 2d массив из text.txt, используя неявные циклы do в Фортране:

      program fileIO_2darray
      dimension k(3,3)

      open(7,file="text.txt",status="old")
      open(8,file="test1.txt",status="unknown")

      read(7,*,end=50) ((k(i,j),j=1,3),i=1,3)

50    write(*,"(20(""*****""))")

      write(*,"(3x,i10)")((k(i,j),j=1,3),i=1,3)

      pause
      end

Вывод выглядит так:

****************************************************************************************************
            1
            2
            3
            4
            5
            6
            7
            8
            9

Если вы хотите использовать неявные переменные в Фортране вам нужно позаботиться о значении первой буквы имени переменной:

a ... h и o ... z типа real

i ... n типа integer

Обратите внимание, что Fortran нечувствителен к регистру.

Как вы хотите прочитать матрица, состоящая из integer значений, переменная поля должна начинаться с i ... n. Я выбрал k, так как i и j уже приняты за петли.

Надеюсь, это поможет?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...