質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
FORTRAN

FORTRAN(フォートラン)は科学時術計算に向いた手続き型プログラミング言語です。 並列計算の最適化が行いやすい特性上、数値予報および気候モデルなどの大規模な計算を行う分野のスーパーコンピュータで使われています。

Q&A

解決済

2回答

1129閲覧

全要素が1の2次元配列を作りたい

astromelt0416

総合スコア15

FORTRAN

FORTRAN(フォートラン)は科学時術計算に向いた手続き型プログラミング言語です。 並列計算の最適化が行いやすい特性上、数値予報および気候モデルなどの大規模な計算を行う分野のスーパーコンピュータで使われています。

0グッド

0クリップ

投稿2019/04/09 01:09

編集2019/04/09 03:45

表題にあります通り、Fortranで全要素が1の2次元配列を出力したいと考えています。以下のようにコードを書いてみたのですがうまく行きません。どこにミスがあるのかわからないので、ご指摘お願いいたします。また、現在は8*8の配列なのですが、整数Nをinputして同じくN*Nの配列を出力するのが目標となっておりますので、その道標もいただけると助かります。

Fortran

1program mat1 2 implicit none 3 integer i,j 4 real(8) a(8,8) 5 do i = 1,8 6 do j = 1,8 7 a(i,j) = 1 8 enddo 9 enddo 10 write(*,*) a(i,j) 11end program mat1

output

16.9526904807491663E-310

outputで出ている結果が何から出てきているのかがそもそもわかりません。

実際にほしい結果
(1,1,1,1,・・・
・・・・・・・
・・・・・・・・・
・・

・・1,1,1,1,1)
という感じの全要素が1の8*8行列がほしいです。

追記

以下のようにwrite(,)の部分をループにすると要素はすべて1になりました。しかし、上に書いたような配列の形では出力されず困っています。

Fortran

1program mat1 2 implicit none 3 integer i,j 4 real(8) a(8,8) 5 do i = 1,8 6 do j = 1,8 7 a(i,j) = 1 8 enddo 9 enddo 10 do i = 1,8 11 do j = 1,8 12 write(*,*) a(i,j) 13 enddo 14 enddo 15end program mat1 16

output2

1 1.00000000 2 1.00000000 3 1.00000000 4 1.00000000 5 1.00000000 6 1.00000000 7 1.00000000 8 1.00000000 9 1.00000000 10 1.00000000 11 1.00000000 12 1.00000000 13 1.00000000 14 1.00000000 15 1.00000000 16 1.00000000 17 1.00000000 18 1.00000000 19 1.00000000 20 1.00000000 21 1.00000000 22 1.00000000 23 1.00000000 24 1.00000000 25 1.00000000 26 1.00000000 27 1.00000000 28 1.00000000 29 1.00000000 30 1.00000000 31 1.00000000 32 1.00000000 33 1.00000000 34 1.00000000 35 1.00000000 36 1.00000000 37 1.00000000 38 1.00000000 39 1.00000000 40 1.00000000 41 1.00000000 42 1.00000000 43 1.00000000 44 1.00000000 45 1.00000000 46 1.00000000 47 1.00000000 48 1.00000000 49 1.00000000 50 1.00000000 51 1.00000000 52 1.00000000 53 1.00000000 54 1.00000000 55 1.00000000 56 1.00000000 57 1.00000000 58 1.00000000 59 1.00000000 60 1.00000000 61 1.00000000 62 1.00000000 63 1.00000000 64 1.00000000 65

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mather

2019/04/09 02:22

「うまく行きません」という部分が質問として曖昧です。 どんな結果を期待していたのに、実際に出力された結果はどうなっていて、何が問題だと思うのかを書いてください。
guest

回答2

0

outputで出ている結果が何から出てきているのかがそもそもわかりません。

この時点で、ijは何だと思っていたのでしょうか?
write(*,*) a(i,j)を実行する時点で、ijの値はどちらも9です。なので、a(9,9)と有効な添え字の範囲外を参照するので、たまたまそのアドレスのメモリに入っていたゴミを表示する事になります。

配列の形では出力されず

writeは実行する毎に改行します。
なので、1行に書きたい物は1つのwriteで書きます。

投稿2019/04/09 05:22

otn

総合スコア84555

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

こちらの「リストを書き込み: writelines()」と書いているところが参考になると思います。

こちらの予想では、**write(,) a(i,j)**と書くと毎回勝手に改行が入る為、そのような形になるのだと思います。使い方を考えれば非常に便利な関数です。
このように書くといいかと思います。

Python

1do i = 1,8 2 文字列型のKを初期化 3 do j = 1,8 4 if(j <= 1): 5 Kにa(i,j)の値を挿入 6 else: 7 Kに','を挿入しつつa(i,j)の値を挿入 8 enddo 9 Kをwrite関数でファイルに保存 10enddo

投稿2019/04/09 05:01

stdio

総合スコア3307

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問