C Pad for Salford FTN77というコンパイラを使っております。
下記の様にOPENで開いてCLOSEでとじたTEXT文についてですが…
WRITE(*,*) '入力した数に1プラスされます。'
READ (*,*) A
B=A+1
OPEN(UNIT=10,FILE='C:\001.txt')
WRITE(10,100) '入力したのは',A
WRITE(10,100) '1たすと',B
100 FORMAT(A)
CLOSE(10)
STOP
…計算もされず、左寄せにもなりません。
仮に「100 FORMAT(A)」を消して(10,100)を(10,*)にすると左寄せにはなりませんが 計算して結果は表示されます。
計算して結果を左寄せにするにはどうすればよいでしょうか。
ご存知の方、アドバイスをお願いします。
No.3ベストアンサー
- 回答日時:
私が知っているfortranは77なのでもしかすると違っているかもしれませんが、
先ず変数Aは型宣言がないので実数扱いになります。
B=A+1(正確に記述するなら1ではなく1.)
が計算されることからもそういえます。
つぎに、FORMAT(A)の中のAは文字型を出力する際にし要するものですので、変数の型が一致していません。だから出力されないのだと思います。またAの後に桁数を示す数字が必要です。
実数に対してはFORMAT(F8.1)とかFORMAT(E8.3)とかのFやEを使用する必要があります。
また数値型の場合プラスマイナスの記号が入ることから、正値の場合+記号が省略されて、代わりにブランクが出力されたと思います。すなわち1つ目はブランクになります。
FORMAT(F1.0)等とすると桁オーバーを意味する*が出力されます。
整数型にしておけば1桁の場合FORMAT(I1)としておけば、左の1桁目に数字が出ますが、2桁以上やマイナス値のある数字の場合この方法は使用できません。
ブランクを取りたい場合、文字型で出力しなければなりませんが、たしかfortranには数値型データを文字型データに変換するコマンドがありません。
他の方法もあるかもしれませんが、そこで、一度数値データとしてファイルに出力して、そのファイルから文字型データとして1文字ずつ読み取るという方法で私自身は対処していました。
たしかこんな感じでした。
CHARACTER*1 H(8) 文字型と配列宣言
WRITE (10,601) A
601 FORMAT(F8.2)
BACKSPACE(10)
READ(10,602) (H(I),I=1,8)
602 FORMAT(8A1)
この後H(I)がブランクなら出力しない、ブランクでなければ出力するという判定作業を行って、ブランク以外の値が入っているI番目から後ろの値全部を文字型出力をします。
記憶が薄いので、上のとおりしてもうまくいきませんかもしれませんが、数値データを文字型データにうまく変換してやればできると思います。
アドバイスありがとうございます。
対処方法まで教えていただきまして感謝しております。
FORMAT(A)に対する認識が甘かったようです。
文字型データへの変換に対してもう少し勉強してみます。ありがとうございました。
No.4
- 回答日時:
ANSIのFORTRAN77の規定では(最新はわかりません)、FORMAT文では、A型は左寄せ、それ以外は右寄せとなっています。
ですから、プログラマが意識しないと(実際は文字変数に一度ENCODEして操作する)それ以外の変換は出来ません。
すでに指摘がありますが、このFORMATでは実数は出力できませんよ。F型かE型の変換を追加する必要があります。WRITE(10,*)はリスト型変換で、変数の型に従って変換するのでうまくいったのです。
あと、FORTRANには、長い歴史の中でのデファクトスタンダードがあり、UNIT=10には通常書き込みません(読み込みデータに使う)、ご自分の範囲では問題はないと思いますが、今後、実用として使う際には意識した方がよいですよ。
暗黙の型宣言には従うというのも含めて。
アドバイスありがとうございました。
いろいろ間違いがあったことに気づきました。
それとF型とE型のFORMATについて調べてみます。
ありがとうございました。
No.2
- 回答日時:
format が write の引数より少ないときには format の先頭から繰り返したような記憶があるので, 今の例だと各 write の 2つの引数をどちらも A (文字) で出力しようとするはずです. でも, 変数の A や B は文字 (列) じゃないのでうまく出力できないんじゃないかなぁ?
ちなみに FORTRAN で左詰めをするなら, 1回は文字 (列) 変数で受けないといけないような気がします. 少なくとも Fortran ではどうしようもなかったような.
アドバイスありがとうございます。
実際Bにあたる部分はもっと複雑な計算なので、どうしてもFORTRANでプログラムしたいのです。
引数は1つにできそうなので、もう少し自分でも考えて見ます。
No.1
- 回答日時:
> WRITE(10,100) '入力したのは',A
> WRITE(10,100) '1たすと',B
> 100 FORMAT(A)
write で引数を二つ渡しているのに、formatの指定には引数指定は一つしかないので
計算結果が出力されていないだけではないでしょうか?
またFortranのformatでは、整数や浮動小数点数を何桁で出力するかという
指定はできても、それを左寄せにするかどうかという指定はできなかったと
思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
カンパ〜イ!←最初の1杯目、なに頼む?
飲み会で最初に頼む1杯、自由に頼むとしたら何を頼みますか? 最初はビールという縛りは無しにして、好きなものを飲むとしたら何を飲みたいですか。
-
大人になっても苦手な食べ物、ありますか?
大人になっても、我慢してもどうしても食べれないほど苦手なものってありますよね。 あなたにとっての今でもどうしても苦手なものはなんですか?
-
これ何て呼びますか Part2
あなたのお住いの地域で、これ、何て呼びますか?
-
あなたは何にトキメキますか?
「きゅんとした〜♪」 と思う瞬間ってありますよね。 それは恋愛だったり、推し活だったり、映画のワンシーンだったり……。
-
好きな「お肉」は?
牛肉、豚肉、鶏肉、ラム肉、クマやシカの狩猟肉……。 いろ〜んな肉が食べられるようになりましたよね。 あなたがこれまで食べて「これはうまい!」とか「なんじゃこりゃ!」と好きになったお肉を教えてください。
-
FORTRANの出力データの左寄せができません。
その他(プログラミング・Web制作)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/12】 急に朝起こしてきた母親に言われた一言とは?
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・好きな「お肉」は?
- ・あなたは何にトキメキますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・チョコミントアイス
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・あなたの習慣について教えてください!!
- ・ハマっている「お菓子」を教えて!
- ・高校三年生の合唱祭で何を歌いましたか?
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・家の中でのこだわりスペースはどこですか?
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
PS4コントローラーをPCでゲーム...
-
MMDでavi出力が出来ない
-
COBOLのMOVEで桁数が異なる場合
-
cout と cerrの違い
-
4Kの外部モニターに出力すると...
-
VBAで有効数字の設定
-
Windows Formアプリからコンソ...
-
VBAでテキスト出力時のスペース...
-
printfとputcharの違いは
-
プログラムについての質問です...
-
CPUの温度を出力するプログラム...
-
ACCESS クエリ→フォーム...
-
ListViewの複数選択について
-
USB001にデータを送りたい(ポ...
-
エクセル マクロ 組み合わせ全...
-
アクセス2000→エクセル2010へエ...
-
コンセントの電力は入力と出力...
-
Excel VBAで値を変えながら、pd...
-
VBAのExecメソッドで画面を非表...
-
COBOLで可変長ファイルの出力に...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
PS4コントローラーをPCでゲーム...
-
4Kの外部モニターに出力すると...
-
プログラムについての質問です...
-
MMDでavi出力が出来ない
-
COBOLのMOVEで桁数が異なる場合
-
cout と cerrの違い
-
printfとputcharの違いは
-
アクセスでエクセルに出力する...
-
VBAのExecメソッドで画面を非表...
-
スマホのバッテリー消費につい...
-
Windows Formアプリからコンソ...
-
ACCESS クエリ→フォーム...
-
コンセントの電力は入力と出力...
-
Accessのテーブルからcsv出力す...
-
Excel VBAで値を変えながら、pd...
-
無線とかアンテナに関しの質問...
-
ListViewの複数選択について
-
KEYENCEのシーケンスプログラム...
-
センサーのタンパー出力について
-
VBAでテキスト出力時のスペース...
おすすめ情報