アプリ版:「スタンプのみでお礼する」機能のリリースについて

fortranで下記の読み込みたいデータがあります。


j k R(j,k) L(j,k)

1 1 5 1
1 2 10 2
1 3 15 3
1 4 20 4
2 1 25 5
2 2 30 6

データが9000行あるので,

do i=1,9000
read(10,*) j(i) k(i)
enddo

のような読み込み方だと配列が大きすぎてだめなんです。

他の方法を知っている方、教えていただけませんか。

よろしくお願いします。

A 回答 (4件)

学校の宿題でなければ、


「配列が大きすぎてだめなんです。」は、配列ではなくデータベースを利用すれば取り扱うデータに事実上の制限はないです。

SQLiteという、無償・簡単・結構高性能なデータベースが使えますよ ^ ^
    • good
    • 0
この回答へのお礼

色々考えた結果、データの読み込みというよりは、計算過程でいらないデータを保持しすぎているような気がしてきました。

SQLITE...初心者なので結構未知な世界ですが、これからもプログラムは使用していくので、ぜひ利用してみたいと思います。

いろいろわかりづらくて申し訳ありませんでした。

また、よろしくお願い致します。

お礼日時:2010/11/20 10:13

質問をするときには, なるべく実際のものを書いてください. でないと, このように無駄なやりとりをしなければなりません.


そもそもそのプログラムは何をしたいのですか? データはどのくらい保持する必要があるのですか? 「i=9000ではなくてD(j,k,l,m)にしたい」とはどういうことですか?

この回答への補足

お手間おかけしてしまい申し訳ありません。

そもそも、やりたいのは、あるイベントが50年間に9000回起こるのですが、そのイベントで発生したものAを用いて(Aはデータとしてあります)、新たにBを計算し、2回目のイベントAに1回目で求めたBを使って、あらたなBを計算したいのです。それを繰り返します。ただし、年の一番初めだけBをある量C減らします。

なので、1イベント前のデータだけ保持していれば大丈夫です。

プログラムは長くて載せられないのですが、配列を小さくする必要があるみたいです。

今まではループを9000でまわしていて、D(i=9000,l,m)を用いてたのですが、D(j=YEAR,k=EVENT,l,m)にしたら、jは最大50でkも最大250なので、配列が小さくなるのかなと思ったのですが、今思ったら変わらないですね。。。すみません、これは忘れて下さい。。

おそらくデータをすべて保持しているからだめな気がします。

1イベント前のデータのみ残して、後は消すことをしたいのですが、どうしたらいいのでしょうか?

補足日時:2010/11/20 10:09
    • good
    • 0
この回答へのお礼

わかりづらい質問で申し訳ありませんでした。これからは気をつけます。
あと、もっと整理してから質問するようにします。

上記の悩みも解決致しましたので、締め切らせていただきます。

ご回答ありがとうごさいました。

お礼日時:2010/11/22 13:35

「配列が大きすぎてだめ」とは, 具体的にどういうことなんでしょうか?


まさか「配列が大きすぎてだめ」とまさにそのままのエラーメッセージが出ているわけではないですよね?
あと, 処理系もきちんと書いてください.

この回答への補足

説明不足ですみません。
もともとは配列D(i,l,m)だったのですが(i=9000,l,m=500でプログラムの中にこのような配列がいくつか登場します)大きすぎだったのです。

エラーメッセージは静的~が超えました、みたいなエラーでした。

そこで、i=9000ではなくて
D(j,k,l,m)にしたいのです。

詳しくいうと
jが年数、kがイベントの数で、j年のときにイベントが1,2,3,・・・kと増えていき、新しい年になったらまた1,2,3・・・とイベントが増えるようデータを読み込みたいのです。

ちなみに前まで使っていたiは総イベント数でした。

do j=1,year
do k=1,event

処理例
x(j,k)=R(j,k)*2

  end do
end do

みたいに使いたいです。

わかりにくかったらすみませんが、また質問してください。

補足日時:2010/11/19 16:58
    • good
    • 0

いまどき9,000行のデータで配列が「大きすぎてだめ」なんてないでしょう!



「普通に読んだらNGなデータをどう処理するか?」という学校の宿題でないですか?

この回答への補足

説明不足ですみません。
もともとは配列D(i,l,m)だったのですが(i=9000,l,m=500でプログラムの中にこのような配列がいくつか登場します)大きすぎだったのです。

そこで、i=9000ではなくて
D(j,k,l,m)にしたいのです。

詳しくいうと
jが年数、kがイベントの数で、j年のときにイベントが1,2,3,・・・kと増えていき、新しい年になったらまた1,2,3・・・とイベントが増えるようにしたいのです。

ちなみに前まで使っていたiは総イベント数でした。

わかりにくかったらすみませんが、また質問してください。

補足日時:2010/11/19 16:50
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!