お願いします。
fortran全くの初心者です。
今、他人が作ったプログラムに苦戦中です(ーー;)
どなたか助けてください。。

プログラムをコンパイル後、実行すると以下のメッセージが返ってきます。

exec(2):insufficient swap or memory available

そこで、以下のプログラムの一部を修正することで回避できました。

parameter
# (nxdm=10,nydm=5,nzdm=5,ipdim=4
# ,nxd6=nxdm+6,nyd6=nydm+6,nzd6=nzdm+6
# ,nvcdim=6*ipdim+4,iatdim=1
# ,nhfdim=nvcdim*(nvcdim+1)/2+3)

プログラム中のnxdm nydm nzdmの値を小さくすることで回避できました。
なんとなくの修正で回避していますが、メッセージとの関係がわかりません。
どこかを見たりすると定義する数字の限度とかわかるのでしょうか?

ほんの一部なのでわかりずらいと思いますが、こういうことがありえる!って
程度でもいいので教えてください。
お願いします。

このQ&Aに関連する最新のQ&A

配列 FORTRAN」に関するQ&A: fortran 配列実行結果

A 回答 (4件)

OSや処理系は何をお使いでしょうか?


私の数少ない経験では、大型計算機やワークステーションはメモリ管理がしっかりしているので、実行するたびにエラーメッセージが変わるというようなことは起きにくいのですが、RUN/FORTRANのような教育環境で使われるパソコン用の処理系ですと、少し大きなプログラムを作るとすぐにメモリを食い尽くしたり、プログラムを終了してもメモリリーク(メモリをつかんだまま解放しないこと)が発生したり、モニタモードなんてものがあったりして、初心者の場合、実行環境が裏で動いているにもかかわらず、それを知らずに新たにモニタを起動してしまったりしてメモリを食い尽くすことはあります。OSがWindowsなら、その可能性は大きいです。
こういうことは、あまりあってはいけないことなのですが、出来の悪いソフトを動かすと遭遇します。残念ながら。
    • good
    • 0

配列が(dimension文で)大きくとってあるのです。


コンパイル時は正常に済んでも、実行時に、他のウィンドウで別のプログラムが動作しているとかで、メモリ不足になったりならなかったりするのです。
    • good
    • 0
この回答へのお礼

ありがとうございます。

お礼日時:2001/11/26 11:56

たぶん、3次元配列を処理しているのだと思うのですが、そういうのは、メモリを大量に消費します。

エラーメッセージは、単にメモリが足りないということを意味しているので、配列を少なくすることでエラーを回避できるのは、道理にかなっていると思います。
ちなみに、使えるメモリの量というものは、OSやコンパイラに依存するものなので、ソースだけではなんともいえません。はい。

この回答への補足

ありがとうございます。

もうちょっと教えていただけますか?
初めの実行で正常に実行できて、実行を繰り返すたびに
配列を少なくしないと実行が出来なくなってしまう。
実行のたびに使えるメモリ数が減ってしまうというのも
普通のことなのでしょうか?

お願いします。

補足日時:2001/11/21 09:28
    • good
    • 0

確認していないのでわかりませんが,parameter文のなかで割り算は使えないのではないでしょうか?


つまり
nhfdim=nvcdim*(nvcdim+1)/2+3
の部分を変更すれば動くと思うのですが・・・.
    • good
    • 0
この回答へのお礼

ありがとうございます。
試してみます。

お礼日時:2001/11/21 13:13

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q${parameter:-word} と ${parameter:=word} の違い

bashのパラメータ展開で

${parameter:-word} と ${parameter:=word}

の違いが何なのかよく分らないのですが、何が違うのでしょうか?

http://www.linux.or.jp/JM/html/GNU_bash/man1/bash.1.html

Aベストアンサー

 :-の方は、parameterの値が変わりません。:=は変わります。どちらもparameterに既に値が入っている場合は何も起こりません。
 別の言い方をすると、:=の方はこの後bashが(子プロセスとして)起動するプロセスの環境変数にも$parameterがwordになりますし、:-はなりません。:=は何らかのプログラムを起動するスクリプト内で空っぽならデフォルト値を設定するというような用途に使用します。
 以下、bashですけど$が出てきまくると紛らわしいのでプロンプトを%とします。

% echo ${SAMURAI:=LAST}
LAST
% echo ${DORA:-YAKI}
YAKI
% echo $SAMURAI
LAST ←さっきのでSAMURAIにLASTが代入された
% echo $DORA
   ←さっきのでDORAにYAKIが代入されていない
%

QVBAのプログラムで、DIAG = 1# / A(L, L) や R(

VBAのプログラムで、DIAG = 1# / A(L, L) や R(I) = 0# の数字1、0の後についている番号記号#は何を意味しているものでしょうか?

http://www.index-press.co.jp/books/excel/excel-04.pdf

の記事内にあるプログラムで使用されていますが、解説がありません。
調べてみましたがシャープと読まないことぐらいしかわかりませんでした。

どうぞよろしくお願いします。

Aベストアンサー

Pdf拝見しました。
凄く読みづらいプログラムで、どうにか修正したい欲に
かられるわけですが。

ここでいう♯記号などは、「リテラル」というもので型を
暗黙に示すもので、#はDouble型を示すものだと思います。

言語が違いますが仕様が似てますので参考まで。
3-1 変数と定数
 http://msdn.microsoft.com/ja-jp/library/dd314343.aspx
 …真ん中のほう:
 …VB .NET はリテラルのデータ型に応じて、以下のような表記をします(表 3-2)。
 …の明示的な記述方法の列

1♯ はDouble型の1ということになります。
基本的に、Dim i as Double と宣言すれば i はDouble型に決まって
いますので♯は要りませんが。

稀に Dim i as Variant(何でも型)と宣言したとき、i=1#とすると
Double型として明示代入ができます。
とはいえ、変数の中身が訳がわからなくなるので、こんな書き方は
通常はしません。
プログラム文中を判りやすく見せているだけだと思います。


とはいえ、このプログラムは読みづらいです。
変数、配列のインデクサ、ループカウンタなど殆どが英字2文字以下の
意味のない単語変数なので、可読性のよいプログラムクォリティとしては
よろしくないと思います。

Pdf拝見しました。
凄く読みづらいプログラムで、どうにか修正したい欲に
かられるわけですが。

ここでいう♯記号などは、「リテラル」というもので型を
暗黙に示すもので、#はDouble型を示すものだと思います。

言語が違いますが仕様が似てますので参考まで。
3-1 変数と定数
 http://msdn.microsoft.com/ja-jp/library/dd314343.aspx
 …真ん中のほう:
 …VB .NET はリテラルのデータ型に応じて、以下のような表記をします(表 3-2)。
 …の明示的な記述方法の列

1♯ はDouble型の1ということになります。...続きを読む

Q変数使わない場合の言語プログラムとかエクセルで、=三+三は6とはでません。

「プログラム言語」では1 2 3 の数字は他の「文字・文字列」とは違い計算ができます。
しかし、「文字・文字列」は変数を与えない限り、計算はできません!

 数字はリテラルだからできる・・リテラルの意味がいまいちわかりません!
そんな特徴のことをリテラルというのでしょうか?
 よろしくお願いします。

Aベストアンサー

こんにちは。

リテラルというのは、変数を使わないで直接書き入れることを言います。
プログラミングでは、

「リテラルとは、コード中に、表現が定数として直接現れており、記号やリストで表現することができないものを指します。
  数値リテラルの例:  10(Integer型)
  文字列リテラルの例: "こんにちは。"
 
リテラルの使用は、コードの可読性・保守性を下げてしまいます。これを防ぐためには、定数を使用するようにしてください。
(出典『超図解 VB.NET ルールブック』エクスメディア)

プロクラミングでは、ちょい書きプログラム以外は、リテラルは基本的には、禁止なんだと覚えておけばよいと思うのです。そのことだけを頭に入れていればよいのですが、そういうことをごちゃ混ぜにしてしまうと、何かよいのか分からなくなってしまいます。

>数字はリテラルだからできる
うーん、そういう限定した意味ではないと思うのですが。'literal' コンピュータ用語では、直定数というものの、直に書くことだと思います。

それをまかり通していくと、データ型は、数値のままになっていくと思うのです。それが思わぬ結果にならないとも限らないような気がしているのです。なぜかというと、コンピュータは、2進ですから、数値がどこかで丸められている可能性もないとは言えません。

もちろん、文字を入れる時は、直にはなっても、入れる場所は決められていますから、やたらに入れることはありません。しかし、例えば、URLやFull Path ファイル名などは、直ではなく、変数を取って書くことが多いはずです。

こんにちは。

リテラルというのは、変数を使わないで直接書き入れることを言います。
プログラミングでは、

「リテラルとは、コード中に、表現が定数として直接現れており、記号やリストで表現することができないものを指します。
  数値リテラルの例:  10(Integer型)
  文字列リテラルの例: "こんにちは。"
 
リテラルの使用は、コードの可読性・保守性を下げてしまいます。これを防ぐためには、定数を使用するようにしてください。
(出典『超図解 VB.NET ルールブック』エクスメディア)

プロクラ...続きを読む

QVB6, VB2005,VC# どれを学習したらよいでしょうか。

VB6, VB2005,VC# どれを学習したらよいでしょうか。
やりたいことはデータベースやテキストファイル処理、インターネットコネクションのプログラミングです。

仕事でExcelVBAを時々使うので、以前から持っているVB6かと思ったのですが、なぜかMSDNがなくリファレンスがなく微妙です。本かウェブしか頼れない・・・。
ある程度の処理速度を求めていますのでExcelVBAではない方がいいのですが、これからのことを考えたらVB6よりもVB2005でしょうか?
それともどうせVB2005はexcelとは大幅に文法が変わってしまうのだからC#?
いろいろ調べるほどわからなくなってしまいました。
なおエクセルVBAも本に一通り書いてあることも満足にできない程度です・・・。(こちらにも役立てられるとさらにうれしいです)

Aベストアンサー

process9です。
>仕事上でVBAのマクロを書く機会がたまに(1週あたり50行ぐらい?)あるので、仕事面との相乗効果という観点からVB6との比較ではC#はどうでしょうか。

やりたいことが仕事に関係があるかどうかだと思います。
関係がある場合、仕事上での使用でVBAを使うとのことでしたので、VB6を私は押します。学習スピード、使用マシンのスペック、周りの方の環境などで当面作れればよいと思われますし、使える人が多数いるのでこういうQAでもレスポンスなどが早いし、正確。リファレンス自体はWEBで十分だと思われます。周りと自身の仕事環境が変化(バージョンUPなど)したときにVC#などに乗り換えた方が効率がよいかと思います。

仕事に関係ない(趣味で作成する)ということであれば、将来性、言語としての完成度からVC#をお勧めします。ただ、.NET系はまだ発展途上なので、動作の安定性、配布性に問題があります。でも、クライアントプログラムの世界では、将来的に(3~5年後くらい?)には標準の開発言語になりうると思われます。

QC#のプログラムで作業フォルダを取得できない (IIS5.1+.NET

C#のプログラムで作業フォルダを取得できない (IIS5.1+.NET 2005)

IIS5.1のサイトで、C#で作ったプログラムを実行します。
プログラムは同じフォルダーにあるiniファイルを読み込んで作業します。
問題は、正しい作業フォルダーを取得できないとのことです。
下記のメソッドの戻り値は「c:\windows\system32」になっています。
Directory.GetCurrentDirectory()
Environment.CurrentDirectory
しかし、それはEXEファイルのフォルダーではないです。
どうやって本当の作業フォルダーを取れますか?

ちなみに、当サイトでvb6で作ったプログラムもあります。
そちらは「App.Path」で本当の作業フォルダーを取れます。

Aベストアンサー

string path = System.Reflection.Assembly.GetEntryAssembly().Location;

これではだめでしょうか?


人気Q&Aランキング

おすすめ情報