![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
FORTRANについて質問です。
年 月 日 降水量
1976 1 1 0
1976 1 2 2.1
1976 1 3 0.2
1976 1 4 0
1976 1 5 0
1976 1 7 1.3
1976 1 8 5.1
1976 1 10 0
1976 3 1 2.3
1976 3 2 0
1976 3 3 0
1976 3 4 1.3
1976 3 6 0
:
というデータが2008年12月31日まであります。
FORTRANでこのデータを、1日~5日を1旬、6日~10日を2旬、…としていきたんですが、26日以降は、28日でも29日でも、30日でも、31日でも6旬と定義します。
降水量は、それぞれ読んだ数での平均としたいんです。6旬の場合だと、28日なら26日と27日と28日の降水量を足して3で割、29日までの月なら26日、27日、28日、29日のを足して4で割る。
年 月 旬 降水量
1976 1 1 (0+2.1+0.2+0+0)/5
1976 1 2 (1.3+5.1+0)/3
1976 1 3 ’空欄’ or ’欠損値’
: :
1976 3 1 (2.3+0+0+1.2)/4
:
と出力したいんですが、欠損値が多いため、どう書けばいいかわからないのですが、アドバイスくれませんか??
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
大規模計算でも「配列にデータが入っているかどうか」という判定は、行列計算の際の必要メモリを減らすため等に使うようです。
このような計算に対するアルゴリズム一例。
---
・「配列にデータが入っているかどうか」を示す整数型配列を用意する。
・(年,月,日)の降水量を示す実数型配列を用意する。
-これらの配列次元は(年,月,日)。
・まず、整数型配列と実数型配列を0に初期化する。
・データ入力では、年,月,日,降水量をreadする。
-読み込んだ(年,月,日)に関し整数型配列の要素を1にする。
-読み込んだ(年,月,日)に関し実数型配列の要素に降水量を代入する。
・出力では(年,月,旬)に関しループを回す。
-旬全体で整数型配列の和がゼロなら「空欄」と出力する。
-旬全体で整数型配列の和がゼロでないなら(実数型配列の和)/(整数型配列の和)を出力する。
---
試しに書いてみたら38行でした。
値がない、または存在しない日付の場合常に値にはゼロが入るので、月による日数の違いの複雑な場合分けは実は必要ないです。6旬だけ31日まであるので場合わけが必要そうに思えますが、それも実は回避できます。
上の書き方ではメモリの節約にならないので、メモリを節約する書き方を検討してみるのもいいかもしれません。もちろん実用上は必要ありませんが。
No.1
- 回答日時:
最初に学んだFORTRAN言語が懐かしくて応答します。
まず、旬番号を求める自作の関数を紹介します。
integer function jun6(hi)
integer hi
integer jun
if ( hi > 25 ) then
jun = 6
else
jun = int( ( hi + 4 ) / 5 )
end if
jun6 = jun
end function
データを読んだら以上のコードで即座に何巡に当たるかを決定します。
そして、グループトータルのアルゴリズムで、読んだ日付の旬番号が切り替わったタイミングで、降水量の小合計と人数で割った各旬の降水量平均を計算して出力します。保存旬番号と旬内人数と旬内合計を足し込んでいく変数を用意してプログラミングすれば完成します。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセルの数式で教えてください。 2 2023/01/10 09:15
- Visual Basic(VBA) 列 A に同じ日が2つが必要です。 1 2023/03/28 07:25
- 野球 プロ野球の話 1 2022/12/04 00:36
- 野球 北海道日本ハムファイターズの話 1 2022/06/02 15:35
- 野球 北海道日本ハムファイターズの話 3 2022/12/12 17:56
- MySQL SQLです。下記の問合せを行うクエリを、PhpMyAdminで作成して実行せよ。 「昨年の各月の総降 1 2023/07/01 00:32
- 新年・正月・大晦日 寅の日の大安と友引の話 1 2022/05/30 14:57
- 野球 北海道日本ハムファイターズの話 3 2022/12/11 19:52
- その他(エンターテインメント・スポーツ) ニートは、過去へ戻るしかないですよね? 1 2023/02/19 22:06
- 地球科学 太陽系の惑星と週(日曜日~土曜日)、月(1月~12月)に付いての質問です。 太陽系には、8つの惑星が 3 2022/10/08 22:32
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBA ReDim と ReDim Preserve ...
-
ReDim PreserveよりもReDimが遅い
-
EXCEL VBAの課題です
-
配列をランダムに並び替えても...
-
VB6のメモリ解放に関して
-
Excelのメモリ(配列)の上限は2G...
-
DBから取得した値を配列へ代入する
-
C#でbyte配列から画像を表示さ...
-
構造体配列の特定のメンバーをF...
-
デバイスマネージャーの一覧取得
-
VBScriptでCSVファイルを読み出...
-
FORTRANについて質問です。
-
Redim とEraseの違いは?
-
VBA 変数名に変数を使用したい。
-
エクセルの列一括書き込み
-
配列からのCSVファイルの作...
-
2次元配列の初期値
-
c言語で自分のホームディレク...
-
VBAのstrConv関数のUNICODE変換...
-
C++ 文字列変数と16進数の比較
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBA 変数名に変数を使用したい。
-
C#でbyte配列から画像を表示さ...
-
vba フィルター 複数条件 3つ以...
-
Dir関数で読み取り順を操作でき...
-
Excel2010のinputboxで複数デー...
-
配列の中の最大値とそのインデ...
-
構造体配列の特定のメンバーをF...
-
COBOLの基本的な事なので...
-
構造体配列内の文字列検索のよ...
-
コンボボックスのインデックス...
-
エクセルでXY座標に並べられた...
-
エクセル(VBA)の空白配列の削除...
-
Redim とEraseの違いは?
-
定数配列の書き方
-
VB6のメモリ解放に関して
-
CheckBoxの配列化
-
複数のtextboxの処理を一括で行...
-
Excelのメモリ(配列)の上限は2G...
-
大量の変数を定義するにはどう...
-
OutOfMemoryExceptionの回避策...
おすすめ情報