• 締切済み

Visual Basic6.0を使ったプロファイル補正についてPart1

私はプログラムが苦手なのですが、測定した濃度プロファイルをプログラムにより補正する必要性にかられています。Part2にプログラムを示しました。しかし、これではうまく走りません(プログラム初心者(ただいま勉強中です。)) 私がしたいのはテキストファイルから数値列(一列400行程度で値は2.1523e+19など)を読み込み、 h = h + (Data(i + 1) * Exp(-((i - surface + 1) * step) / ramda) + g) * step / 2 g = Data(i + 1) * Exp(-((i - surface + 1) * step) / ramda) z = CSng(h / ramda * (1 - Exp(-(step * (l - surface) / ramda)))) という式をつかって計算し、その計算結果をテキストで出力することです。 いろいろ本を見て調べているのですが、なかなかうまくいきません。 まず分からないのがテキストファイルから数値を入力しそれを配列にして計算するってことがよく分かりません。そして、計算された出力値を出力する関数が分かりません。いろいろ試しているのですが、うまくいきません。 プログラムに詳しい方、どなたか以下のプログラムの間違ってるところを指摘し、訂正して頂けませんか?よろしくお願いします。 また、デバックの使い方がよく分かりません。教えていただけませんか。

みんなの回答

回答No.1

管理者より: 続きの質問があるのでそちらをご参照下さい

参考URL:
http://www.okweb.ne.jp/kotaeru.php3?q=89258
seikoinst
質問者

お礼

どうも手続き有難うございました。 ところで、自分がした質問を消去するにはどうしたらいいのでしょうか?

関連するQ&A

  • Visual Basic6.0を使ったプロファイル補正についてPart2

    Private Sub Command1_Click() step = 0.25 ←式の定数 ramda = 0.5 ←式の定数 Dim Data(0 To 399) ←400個値を持つ配列を定義 Open "C:\hosei1.txt" For Input As #1 ←開くファイルの指定 Data(399) = Input(400, #1) ←読み込んだ値を配列に指定(型が違うとエラーがでます)                      surface = 1 ←surfaceを初め1にする l = 400 ←値の数 Do While surface < l g = 0 h = 0 i = surface Do While i < l ←1未満まで繰り返し h = h + (Data(i + 1) * Exp(-((i - surface + 1) * step) / ramda) + g) * step / 2 g = Data(i + 1) * Exp(-((i - surface + 1) * step) / ramda) z = CSng(h / ramda * (1 - Exp(-(step * (l - surface) / ramda)))) i = i + 1 Loop Print (CSng(z)) ←計算値を出力 surface = surface + 1 Loop Listing1 = Array(List1, l) > output.txt ←計算値をテキストに出力 End Sub ←終了 以上です。お願いします。

  • ステップごとにファイル名を変えて出力する方法を教えてください(fortran)

    数値計算で初期から100ステップまで計算するとします。 ステップ10,20,30・・・のときの結果を見たいのでそれぞれステップ数でファイル名をつけてテキストに出力するようにしたいのですが,どうやったらいいのでしょうか? どなたか教えていただけませんか?

  • C++ファイルからデータ入力して計算、ファイル出力

    C++初心者です。 ファイルの数値データを入力して、それらを計算してからファイルに出力する方法がわかりません。 たとえば、 入力ファイル   出力ファイル 行数  x y z (1)  1 1 6   y(1)*exp(z(1)-x(1))+y(2)*exp(z(2)-x(1))+... (2)  3 5 2   y(1)*exp(z(1)-x(2))+y(2)*exp(z(2)-x(2))+... (3)  5 6 9  y(1)*exp(z(1)-x(3))+y(2)*exp(z(2)-x(3))+... (4)  9 1 3   y(1)*exp(z(1)-x(4))+y(2)*exp(z(2)-x(4))+… (5)  1 7 8   y(1)*exp(z(1)-x(5))+y(2)*exp(z(2)-x(5))+... 入力したデータを上記のように計算してから出力ファイルにしたいのですが、複雑なのでプログラムをどう組み立てれば良いのかわかりません。 ちょっとしたことでも結構です、参考になりそうなサイトや、ロジック、プログラムに関するアドバイスいただけませんか。

  • FORTRANでファイルへの出力

    FORTRAN77で,以下のような出力をしたいのですが,どうしたらいいかわかりません.何かいい案があれば,教えてください. 繰り返し処理の途中で計算を止めても,何ステップまで計算したかを第一行目に出力したいです. ex.)繰返し終値が1000として,456ステップで計算を止めたとき, ----------出力ファイル-------------- 456ステップまで計算されています. (↑何ステップまで計算されたかを   第一行に記入したいです.) step 1,データ step 2,データ : : step 456,データ ----(簡単ですが)考えてたプログラム------- OPEN(10,○) WRITE(10,○)  ←ここを悩んでいます. DO I=1,1000 WRITE(10,○)'step',I,データ CONTINUE

  • 伝達関数のステップ応答→グラフを書く

    伝達関数G(s)=50/(1+100S)(1+12S) のステップ応答h(t)を求め、コンピューターで数値計算を行いグラフを書くという問題で、計算を行うためのプログラムと、計算結果・グラフを提出しなければいけないのですが、その数値計算をするプログラムがかけません。 部分分数分解、ラプラス逆変換をしてステップ応答を求めることはできたのですが、コンピューターで数値計算をするには、どのようにプログラムを書けばいいのですか? ちなみにC言語で書こうと思っています。 ヒントだけでもいいので教えてもらえないでしょうか? よろしくお願いします。

  • 数値計算の特異点回避

    とある数値計算プログラムを書いてるんですが exp(ikx)/x の部分でx=0を代入してしまう特異点ができてしまいます。これを数値計算、近似計算で回避したいのですがプログラムに組み込みやすい手法があれば教えていただきたいです。(iは虚数、kは定数です)

  • 欲しいデータのみ出力する

    エクセルのVBA機能を使って繰り返し計算を行っています。 シート1には、初期条件値y0セルと、初期条件からhステップした値y0+hセル(計算式入れてます)があります。 hステップした値y0+hを初期条件のセルにコピー&ペーストすることで、y0+hからhステップした値y0+2*hの結果が出力されます。 上記の繰り返し作業を行うことで、指定したデータy0+n*hを得ています。 VBAのコードです↓(処理速度を早くするため画面描写OFFのコードも書いています。) Sub ファイル名1() Dim rngCell As Range Dim lngNum As Long Dim i As Long Application.ScreenUpdating = False Debug.Print "start=" & Time ingnum = 1 For i = 1 To 指定したデータy0+n*hを得るための計算回数n Range("初期条件からhステップした値y0+hのセル").Copy Range("初期条件セル").PasteSpecial (xlPasteValues) Range("T(yi)+h").Value = Range("T(yi)").Value + Range("h").Value Next i Debug.Print "end =" & Time Application.ScreenUpdating = Time End Sub 計算後は、下図のように、シート1で出力された指定データをコピーし、シート2にペーストしてまとめています。(手作業です。) y0+n1*h , y0+n2*h , y0+n3*h , ・・・ 以上のような作業で計算を行っていますが、指定したデータy0+n*hを得るための計算回数nが多く、出力したデータでグラフを作成するためシート2のように間のデータも必要になってきます。 指定データをシート2にコピー&ペーストする作業は手作業であり、まとめデータの作成に時間が掛かっています。 そこで、計算中にそれぞれのステップデータを出力しつつ最後のステップデータまで計算し出力できるようにしたい(手作業部分をVBAで書きたい)のですがどのようにすれば良いのでしょうか。 回答お願い致します。

  • C言語で複素数の計算を行いたいと思っております。

    C言語で複素数の計算を行いたいと思っております。 プログラミングソフトは、C言語を始めよう!を用いています。 しかし変数定義の仕方が分かりません。 複素計算とは具体的に、 exp( i π) (i は虚数単位)です 最初に#include<complex.h>を行いましたが 変数の定義の方法、exp( i π)の定義の方法が いまひとつわからない状態です。 保存するときに、Cファイルではなく、 拡張子をcppに変更してCPPファイルでコンパイルを行っています。 exp( i π)を計算可能なプログラムを 教えて頂ければ幸いです。 ご面倒かと思いますが 回答お願いします。

  • テキストのデータ型

    ある数式を計算しグラフを作るプログラムを作っていますが、テキストに数式をいれて、計算させようとすると、「型が一致しません」とでます。ソースは以下の通りです。 For x1 = xsta to xend y1=CSng(Text1.Text) Picture1.PSet (x1, y1) next x1 ここで、text1に「2*x1+1」みたいな数式を入れたいと考えています。 ちなみにxsta,xend,x1,y1ともにsingleです。CSngの使い方が間違っているのでしょうか?よろしくお願いします。

  • [C++]ifstreamのファイル読み込みで予期せぬ値が含まれていた場合について

    数値計算の結果が保存してあるテキストファイルについて、 それを読み込み、グラフ表示するプログラムを作成しているのですが、 数値計算の発散によりファイルに 0.003744 0.002482 -1.#IND00 0.000524 0.000701 のように"-1.#IND00"が紛れてしまった場合、 ifstream seeFile( "参照するファイル" ); while(!seeFile.eof()) {   seeFile >> data[i];//dataはdoubleの配列   i++;//int i=0からカウントしてます。 } とすると、whileを繰り返し続けてしまいます("-1.#IND00"の無い場合は問題ありません)。 "-1.#IND00"が紛れていた場合、それが入るはずの配列(ここではdata[2])に "-1.#IND00"もしくは代わりの値を代入して、data[3]以降はまたファイルの値を 入力できるようにしたいのですが、対処法をご存じの方がいましたらよろしく御願いします。

専門家に質問してみよう