• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:エラーがでて困っています。)

エラーが出て困っています。デジタイザーを使ってグラフを数値化するプログラムを作成したい

Takochuの回答

  • Takochu
  • ベストアンサー率53% (82/154)
回答No.4

こんばんは。またまた、Takochu です。 > この関数 > DEF FNWX(X)=100+X*(500-100)/(3880*CHANGE-40) > DEF FNWY(Y)= 40+Y*(300- 40)/(3860 -40) > はどこで使えばいいのでしょうか? この関数は擬似的に "WINDOW" 文と、"VIEW" 文を 実現させるために考えてみました。 (前回の関数は少し間違っていました。忘れて下さい。) こういうふうに使用して下さい。 4580 DEF FNWX(X)=100+INT((X-40)*(500-100+1)/(3880*CHANGE-40+1)) 4590 DEF FNWY(Y)= 40+INT((Y-40)*(300- 40+1)/(3860 -40+1))      ・      ・      ・      ・      ・      ・ 4620 LINE(FNWX(40+I*500*CHANGE),FNWY(3860))-(FNWX(40+I*500*CHANGE),FNWY(3700)),5 使用方法は、それぞれ次のように対応しています。 WINDOW(wx0,wy0)-(wx1,wy1) VIEW(vx0,vy0)-(vx1,vy1) DEF FNWX(X)=vx0+INT((X-wx0)*(vx1-vx0+1)/(wx1-wx0+1)) DEF FNWY(Y)=vy0+INT((Y-wy0)*(vy1-vy0+1)/(wy1-wy0+1)) プログラムの方を修正可能であれば、 処理速度も考え、もっとスマートに記述できるかもしれません。 また、この方法では、相対座標("CIRCLE" 文の半径など)は 利用できませんので、プログラムの方で工夫して下さい。 あと、ファイルに関してですが、 データが1行だけ出力されるということは、 少なくとも、ループを一回は回っているわけですから、 2回目以降の、デジタイザーの制御方法に 誤りはないでしょうか? 誤りがあって、通信が止まっているのかもしれません。 それとも、COMポートの通信が全く出来ていないと仮定した場合、 ひょっとしたら、以前のデータが 更新されていないだけかもしれません。 一度、"*.DAT"ファイルを削除してみてはいかがですか? いずれにしても、"PRINT I" を色々な所に付け足してみて、 変数 I の値を追跡してみて下さい。 エラーを特定できると思います。 デジタイザーなんて、使ったことありませんので、 (というか、ぜんぜん分かりません。) 私が答えられるのは、これくらいが限界です。

YukkeVer3
質問者

補足

Takochu師匠、毎回本当に助かります。 デジタイザーですが、ついにクリックした所の数値化に成功しました。 PCとデジタイザー本体、そしてプログラムの設定をもう一回確認し、 PCとデジタイザー再起動させたら出来ました。 これで、グラフの数値化ができます。 これもTakochu師匠のおかげだと思います。 ですが、プロットの表示がまだなのです。 最後に指摘していただいた、ユーザー定義による WINDOW,VIEW文の代用は、見事にグラフにメモリを振ることが出来ました。 このプログラムは有効読み取り範囲が縦横共に約38cmの大型デジタイザー用 でして、今回Windowsに接続したのは有効読み取りサイズが A4サイズ(297×210cm)のものです。これは、教えて貰ったユーザー定義の 応用で何とかなるとしまして、 クリックした点がグラフ内にプロットされるプログラムがどうしようか 迷っています。CIRCLE文をうまく操ればできるのでしょうか? こうなったら師匠だけが頼りです。 どうぞ、宜しくお願い致します。

関連するQ&A

  • BASICからC言語に

    BASICで for I=1 to 5:line input #2,w$:next I line input #2,COMMENT$ と書かれているプログラムをC言語に書き直したいのですがどのようにしたらいいのでしょうか?

  • 「パスが見つかりません」というエラー

    data.txtにセルの入力内容を出力したくて下記のようなプログラムを書きました。 ところが Open StrFN For Output As #IntFlNo のところで パスが見つかりません というエラーが出てしまいます。原因はわかりますでしょうか。 Sub test() Dim StrFN As String Dim i As Long Dim IntFlNo As Integer StrFN = "c\data.txt" IntFlNo = FreeFile Open StrFN For Output As #IntFlNo For i = 2 To 400000 Write #IntFlNo, Cells(i, 1) & "$" & Cells(i, 2) Next i Close #IntFlNo End Sub

  • BASICでの波形合成

    学校でのBASICの宿題で、複数のSIN波を合成する問題で 100 CLS 3:LINE(0,240)-(640,240),7 110 INPUT"基本波の周期は";C 120 INPUT"基本波の振幅は";W 130 INPUT"基本波の移送は";F 140 INPUT"第何倍音まで計算する";N:DIM A(N),B(N) 150 FOR I=1 TO N 160 PRINT I;:INPUT "番目の倍音の振幅は";A(I) 170 PRINT I;:INPUT "番目の倍音の移送は";B(I) 180 NEXT I 190 FOR K=0 TO 360/C*2*3.14159# STEP 3.14159#/90 200 X=C*K-F:Y=-(W*SIN(K))+240:LINE-(X,Y),4 210 NEXT K 220 FOR G=1 TO N:PSET(0,240),3 230 FOR H=0 TO 360/C*2*3.14159# STEP 3.14159#/90 240 X=C/(G+1)*H-B(G):Y=-((A(G))*SIN(H))+240:LINE-(X,Y),3 250 NEXT H,G ここで描いたSIN波を合成した波を描く方法が分からない状態です。 どうにも解決できないのでここに質問しました。どなたか分かる方がいたら教えてください。

  • N88互換BASICで「メッセージの定義されてないエラーです」と出ます

    N88互換BASICで「メッセージの定義されてないエラーです」と出ます… 最近プログラミングを始めた初心者です。 プログラムでエラーが出て困っています、どこが問題なのか改善方法を教えてください。 10 DIM A(100,100,100) 20 INPUT "B=";B 40 FOR i=1 to 100 step 1 50 FOR j=1 to 100 step 1 60 FOR k=1 to 100 step 1 70 A(i,j,k)=B 80 print A(i,j,k) 90 NEXT k 100 NEXT j 110 NEXT i こんな感じのものです。 配列変数を作って、Bの数値を全ての配列変数に代入したいです。 宜しくお願致します。

  • プログラムの見本を示してください!!

    数学プログラムの授業をしています。:プログラム言語は「Basic」です。 今から問題と、少しやれたものについては、プログラムを記してみました。 問題の最後の 「※」部分が質問したいところです。ない場合は、何もわからないところです。 (1)DIMを用いて 5つの値をキーボードから入力して、そのうち最大の値を表示するプログラム ※90行目以降の「最大値」の表示の仕方がいまいちわかりません。   10:DIM (5) 20:FOR I=0 TO 4 30:INPUT I 40:NEXT I 50:S=0 60:FOR L=0 TO 4 70:S=S+A 80:NEXT L 90:PRINT ??? (2)FOR,NEXT分を使い、 S=2+(2+3)+(2+3+4)+ ........+(2+4+5+6+7+8+9+10) の計算をして Sを表示するプログラムを作りたい。 以上お願いいたします。

  • basicでの三角関数のグラフの書き方??

    active basicを使って、sinxのグラフを書こうとしたのですが、出来ません。以下のようにやってみたのですが、x軸と平行な点線が描かれるだけ…。 100 cls3 110 line(50,550)-(1050,550) 120 line(550,50)-(550,1050) 130 for i=0 to 360 140 x=i/360:y=sinx 150 xw=500*x+550:yw=500*y+550 160 pset (xw,yw) 170 line -(xw,yw) 180 next i 990 end どこを直せばいいのか分かりません。初心者なので…。 どなたか分かる方がいらっしゃったら、教えてください。 宜しくお願いします。

  • 【至急】文字を点滅させる方法は?

    質問します。 下記のプログラムにおいて、 13 PRINT "只今、計算中です。少々お待ち下さい。" 14 PRINT "計算終了後、下記に結果を表示します。" の部分だけを点滅させたいのですが、色が変わる変化しかしません。COLOR 2と書けば点滅するはずですよね? 1 CLS 2 REM 乱数を用いてサイコロ(6面体ダイス)を再現。12000回振って各自がほぼ2000回ずつ出るようなサイコロを目指す。 10 INPUT "乱数系列の値をいくつに設定しますか" ;X 13 PRINT "只今、計算中です。少々お待ち下さい。" 14 PRINT "計算終了後、下記に結果を表示します。" 20 RANDOMIZE X 30 DIM DICE(6) 40 FOR T=1 TO X 50 LET N=1+INT(6*RND) 60 FOR I=1 TO 6 70 IF N=I THEN LET DICE(I)=DICE(I)+1 80 NEXT I 90 NEXT T 100 PRINT 110 FOR J=1 TO 6 120 PRINT J;"の目は"; DICE(J);"回出ました。" 130 NEXT J 140 END よろしくお願いします。

  • Basicでのプログラムなのですが・・・

    配列変数についてなのですが、 『20個のデータを入力し、大きい順に並べて表示するプログラム。』 なのですが… 言語:【BASIC】 ソフト:【N88】 を使用しています。 とりあえず、 10 DIM A(20) 20 FOR I=1 TO 20 30 INPUT A(I) 40 NEXT I まではわかるのですが、ここから先がわかりません。 ここから先はどのようにすればいいでしょうか。 どなたかご教授いただけると幸いです。

  • N88相互Basic for Windows95でのプログラム

    初めて質問いたします。 ただいまN88相互Basic for Windows95というソフトを使用して「1~45の数字をランダムに並べて表示する」というプログラムを作成してみたのですが、どうしても数字が重複してしまうのです。どこが間違っているのか教えてください。 下記に自分の作成したプログラムを記入します。又、より効率のいい書き方があれば教えてください。よろしくお願いしますm(_ _)m 10 cls 20 input "今日は何月";tuki 30 input "何日";niti 40 for a=0 to tuki 50 for b=0 to niti 60 seki=rnd 70 next b 80 next a 90 cls 100 dim x(50) 110 x(0)=0 120 for s=1 to 45 130 x(s)=int(rnd*45) 140 for c=0 to s-1 150 if x(s)=x(c) or x(s)<1 then x(s)=int(rnd*45):goto 150 160 next c 170 if s=10+e then e=e+10:q=q+1 180 locate q*3,s-e:print x(s) 190 next s 一応流れとしましては、 「月と日を入力してランダムさを出す」 ↓ 「1~50のデータ数があるのを定義する」 ↓ 「今決めているデータの数字と今まで決めたデータの数字を比較して一緒か1未満なら決めなおす」 ↓     ↑ 「今までのと比較して、一緒じゃないなら数字を表示して次のデータへ」 という流れにしている予定ですが、どうやっても数字が重なってしまうので改善点があれば教えてください。お願いしますm(_ _)m

  • n88basicのプログラムを十進ベーシックに翻訳してください。

    n88basicの次のプログラムを十1進ベーシックではどうなるのか教えてください。 10 cls 20 p=1000 30 for n=1 to 1000:next n 40 p=p-1 50 if p=-1 then end 60 locate 10,10:print p 70 goto 30