- ベストアンサー
プログラムの変更
「http://www12.plala.or.jp/ksp/qumtam/squarewall-simu/squarewall-simu.html」このサイトに井戸型ポテンシャルの数値解に関してをグラフに表すプログラムが掲載されているのですが、このプログラムでグラフを表示するにはCPGPLOTライブラリが必要なんです。 そうではなくて、CPGPLOTをインストールしなくてもエクセルに出力して、エクセルでこのサイトの下に載っているようなグラフを表したい場合、どのようなプログラムに変更すればよいのでしょうか?多少の変更で済むと思うのですが、プログラムに関しては知識ないので宜しくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
ワーニングが鬱陶しいようなら、以下のように全部にvoidの指定をして下さい。 void cpgsci(int i){}; -- > 自分のですとsquarewall-simu[Enter]の部分が無く、最初からParity = ? という事は、VisualC++などで[F5]の実行をしているのでしょうか? DOS,unixどちらでもの書き方をしていたつもりですが、やはりお使いのOS,コンパイラを書いてもらった方が良いかも。 VC++と仮定して、対処法を2つ、 1) コマンドプロンプト [スタート]-[アクセサリ]-[コマンドプロンプト]でDOS窓を起動。 cd[スペース]まで打ち込む。 プログラムのあるフォルダ(squarewall-simu.cの場所にあるDebugフォルダ?)をDOS窓にドラッグ&ドロップ、パスが表示されたら[Enter] メッセージ#2の手順を実行。 2) VC++のオプション変更 VC++メニュー[プロジェクト]-[設定] 「設定」ダイアログ 「デバッグ」タブ 「プログラムの引数」に、 > out.txt を入力。 F5で実行。 (ただし、表示が出なくなるので、1[Enter]2.0[Enter]と打ち込んでしばらく待つ。) -- いずれにせよ、コンパイルした結果、 squarewall-simu.exe や a.out のような実行形式が作成されているはずですので、そのファイルの場所でコマンドラインから1)の手順を実行すればよいハズ。Cインタプリタで無ければ…。
その他の回答 (2)
- neKo_deux
- ベストアンサー率44% (5541/12319)
まず、コンパイルと通常の実行はOKだったのでしょうか? プログラムは紹介されたページにあった、"squarewall-simu.c"と、新たに作った、"cpgplot.h"だけです。 -- 通常、 squarewall-simu[Enter] Parity = ? 1[Enter] E = ? 1.083600[Enter] とする代わりに、「>」を使ってテキストファイルにリダイレクトします。 squarewall-simu > out.txt[Enter] 1[Enter] 1.083600[Enter] (表示が行われないので注意!) とすると、通常画面に出力されていた内容がout.txtというファイルに出力されます。 エクセルに読み込んで、[データ]-[区切り位置]などでx,y座標に分割してください。 -- よくよく見ると、グラフのサンプルが載っていましたね。 曲線となる部分だけを描きたいのでしたら、 cpgmove(double x,double y){printf("mv,%lf,%lf\n",x,y);}; ↓ cpgmove(double x,double y){}; と変更してしまって問題ないようです。
お礼
コンパイルした際エラーは無かったのですが、ヘッダーファイルに以下のような警告が出ました。 「\cpgplot.h(2) : warning C4508: 'cpgsci' : 関数に戻り値の型が指定されていません。戻り値を void 型と見なします。 \cpgplot.h(3) : warning C4508: 'cpgslw' : 関数に戻り値の型が指定されていません。戻り値を void 型と見なします。 \cpgplot.h(4) : warning C4508: 'cpgmove' : 関数に戻り値の型が指定されていません。戻り値を void 型と見なします。 \cpgplot.h(5) : warning C4508: 'cpgdraw' : 関数に戻り値の型が指定されていません。戻り値を void 型と見なします。 \cpgplot.h(6) : warning C4508: 'cpgopen' : 関数に戻り値の型が指定されていません。戻り値を void 型と見なします。 \cpgplot.h(7) : warning C4508: 'cpgpap' : 関数に戻り値の型が指定されていません。戻り値を void 型と見なします。 \cpgplot.h(8) : warning C4508: 'cpgenv' : 関数に戻り値の型が指定されていません。戻り値を void 型と見なします。 \cpgplot.h(9) : warning C4508: 'cpgclos' : 関数に戻り値の型が指定されていません。戻り値を void 型と見なします。」 >通常、 squarewall-simu[Enter] Parity = ? 1[Enter] E = ? 1.083600[Enter] とありますが、自分のですとsquarewall-simu[Enter]の部分が無く、最初からParity = ? になってしまうので上記の方法は出来ないのですが・・・。
- neKo_deux
- ベストアンサー率44% (5541/12319)
cpgmove, cpgdrawが描画のための処理っぽいので、 ----ファイル cpgplot.h----- #include<stdio.h> cpgsci(int i){}; cpgslw(int i){}; cpgmove(double x,double y){printf("mv,%lf,%lf\n",x,y);}; cpgdraw(double x,double y){printf("dr,%lf,%lf\n",x,y);}; cpgopen(char* s){}; cpgpap(double x,double y){}; cpgenv(double x1,double y1,double x2,double y2,int i,int j){}; cpgclos(){}; ----- のようなものを作れば、描画情報は取得できます。 但し、出力は mv,5.992000,-0.037224 dr,5.993000,-0.037228 mv,-5.992000,-0.074447 dr,-5.993000,-0.074456 のようになり、移動、描画(draw)を組み合わせて、 (5.992000,-0.037224)から(5.993000,-0.037228)まで線を引く (-5.992000,-0.074447)から(,-5.993000,-0.074456 )まで線を引く とやっているようです。 Excelの標準の散布図では全部のプロット点を繋ぐが、全く繋がないかしかできません。 個別のデータ点の書式設定で線を引く/引かないを設定できますが、こちらでもマクロが必要かも。 -- > 井戸型ポテンシャル 私はこっちの方がわからないので、合ってるかどうか検証できませんが(^^;
お礼
早くのご回答、有難う御座いました。さっそく上記のヘッダーファイルを作り試してみました。しかし、どうやらエクセルへの出力が上手く出来ないようです・・・。 申し訳ないのですが、エクセルへの出力の仕方も教えて頂けないでしょうか?出来ればプログラム全体を載せてもらえると幸いです。宜しくお願いしますm(__)m
お礼
お返事が遅くなり申し訳ありませんでした。上記の(2)の方法にて無事エクセルへ出力することが出来ました。深く感謝しています。今後も似たような質問をすると思いますので、その際も宜しくお願いします。 ちなみに自分の環境は、OSはXP、コンパイラはVBC++です。