94137


簡単なコードなのですが、上手くいかない部分がありましたので投稿しました。

下記の②が正解で、常に左端だけに8を出力して、  
それに続くように0～119まで120個が8列毎に改行して出力するものです。

③が作成したコード結果ですが、最初だけ8が出て改行されますが、  
その後、8が追加されず最後まで行ってしまいます。

①のコードで次の部分に問題があると思います。

[code]

    write(10,"(9i5)") N8, (Nd(i4),i4=1, NDOF)
    
[/code]

もし修正法が分かりましたら教えて頂きたく存じます。

### ソースコード等

①777.f90

[code]

    i1=0
    
    do i3=1, NDOF
    
    Nd(i3)=i1
    
    i1=i1+1
    
    end do
    
    
    N8=8
    
    write(10,"(9i5)") N8, (Nd(i4),i4=1, NDOF)
    
[/code]

②

[code]

    8 0 1 2 3 4 5 6 7
    8 8 9 10 11 12 13 14 15
    8 16 17 18 19 20 21 22 23
    8 24 25 26 27 28 29 30 31
    8 32 33 34 35 36 37 38 39
    8 40 41 42 43 44 45 46 47
    8 48 49 50 51 52 53 54 55
    8 56 57 58 59 60 61 62 63
    8 64 65 66 67 68 69 70 71
    8 72 73 74 75 76 77 78 79
    8 80 81 82 83 84 85 86 87
    8 88 89 90 91 92 93 94 95
    8 96 97 98 99 100 101 102 103
    8 104 105 106 107 108 109 110 111
    8 112 113 114 115 116 117 118 119
    
[/code]

③

[code]

    8 0 1 2 3 4 5 6 7
    8 9 10 11 12 13 14 15 16
    17 18 19 20 21 22 23 24 25
    26 27 28 29 30 31 32 33 34
    35 36 37 38 39 40 41 42 43
    44 45 46 47 48 49 50 51 52
    53 54 55 56 57 58 59 60 61
    62 63 64 65 66 67 68 69 70
    71 72 73 74 75 76 77 78 79
    80 81 82 83 84 85 86 87 88
    89 90 91 92 93 94 95 96 97
    98 99 100 101 102 103 104 105 106
    107 108 109 110 111 112 113 114 115
    116 117 118 119
    
[/code]


CC BY-SA 4.0
2023-03-08T22:06:49.913
94107
2023-03-13T10:57:37.150
2023-03-09T00:48:12.223
3060
50731
question
fortran
Fortranの改行出力について


左端に表示したい`8`をデータではなく書式に含めれば望みの結果になります。

[code]

          write(ss, '(i5)') N8   ! N8を文字列に変換
          s = '("'//ss//'",8i5)' ! 書式文字列を編集
          write(10,s) (Nd(i4),i4=1, NDOF)
    
[/code]

動作確認に使用したコード

[code]

          program sample
          integer Nd(120)
          character (32) s ! 書式文字列
          character (5) ss ! N8の文字列
          NDOF = 120
          i1=0
          do i3=1, NDOF
            Nd(i3)=i1
            i1=i1+1
          end do
          N8=8
          write(ss, '(i5)') N8   ! N8を文字列に変換
          s = '("'//ss//'",8i5)' ! 書式文字列を編集
          write(10,s) (Nd(i4),i4=1, NDOF)
          stop
          end program sample
    
[/code]

実行結果

[code]

        8    0    1    2    3    4    5    6    7
        8    8    9   10   11   12   13   14   15
        8   16   17   18   19   20   21   22   23
        8   24   25   26   27   28   29   30   31
        8   32   33   34   35   36   37   38   39
        8   40   41   42   43   44   45   46   47
        8   48   49   50   51   52   53   54   55
        8   56   57   58   59   60   61   62   63
        8   64   65   66   67   68   69   70   71
        8   72   73   74   75   76   77   78   79
        8   80   81   82   83   84   85   86   87
        8   88   89   90   91   92   93   94   95
        8   96   97   98   99  100  101  102  103
        8  104  105  106  107  108  109  110  111
        8  112  113  114  115  116  117  118  119
    
[/code]

動作確認に使用したFortran  
`GNU Fortran (Ubuntu 11.3.0-1ubuntu1~22.04) 11.3.0`


CC BY-SA 4.0
2023-03-12T01:34:48.157
94137
2023-03-13T10:57:37.150
2023-03-13T10:57:37.150
35558
35558
94107
answer