大学のレポートで下のような課題が出て、実際プログラムを自分で作って実行してみたのですが、全く無反応でいくら考えても原因がわかりません(T_T)批判されそうな質問かもしれないですが、留年かかっているので親切な方、助言お願いします。。
●下の動作をするプログラム(a.rb)を作れ
%a.rb "+[1,20]
=>21
%a.rb "*[-1,25,4]
=>-100
●作ってみたプログラム↓
class Array
def list_ope
d=0 #最終的に返す値
s=0 #状態番号
x="" #一時的に数値を入れる
op="" #[+,-,*,/]
sgn=1 #マイナスの符号のあるなし
err=999999
self.each{|i|
case s #とりあえず、[+,-,*,/]をopに代入
when 0
op=i
s=1
when 1
if /\[/ =~ i
s=2
else
s=err; bleak
end
when 2
sgn=1; x=0;
if /[1-9]/ =~ i #1~9の時
x+=i; s=3
elsif /-/ =~ i #マイナスの時
sgn=-1; s=3
else
s=err; bleak
end
when 3
if /[0-9]/ =~ i #0~9の時
x+=i;
elsif /,/ =~ i #コンマの時
x=sgn*x.to_i; s=4
elsif /\]/ =~ i #]の時
x=sgn*x.to_i; s=5
else
s=err; bleak
end
when 4 #コンマの時の処理
if /\+/ =~op
d=d+x
elsif /-/ =~ op
d=d-x
elsif /\*/ =~ op
d=d*x
elsif / =~ op
d=d/x
end
s=2
when 5 #]のときの処理
if /\+/ =~op
d=d+x
elsif /-/ =~ op
d=d-x
elsif /\*/ =~ op
d=d*x
elsif / =~ op
d=d/x
end
s=6 #終了状態
end
}
if s==6
return d #dを返す
else
print "error!"
end
end
end
No.1
- 回答日時:
exp=ARGV[0]
op=exp[0,1]
len=exp.length
list=exp[1 .. len].delete!("[]").gsub!(",",op)
print eval(list), "\n"
とかは、ダメなんでしょうか?
ありがとうございました(*^^*)実行してみたのですが、例えば"+[2,5]"に対して"2+5"と返ってきました。計算まではどうやればいいのでしょうか。あと、私のプログラムは先生いわく「動きそうにもないプログラム」らしいので(笑)どこがダメなのかどなたか教えて下さい(なさけない・・)お願いします・・
No.2
- 回答日時:
>"2+5"と返ってきました。
計算まではどうやればいいのでしょうか変ですね
でも、そこまで来たらevalするだけなのですが…
ひょっとしてevalが使えないのでしょうか?
ついでにまた別のやり方
exp=ARGV[0]
op=exp[0,1]
list=exp[1 .. exp.length]
a=eval(list)
case op
when "+"
result=0
a.each{|x| result+=x }
when "-"
result=a[0]
a[1 .. a.length].each{|x|result-=x }
when "*"
result=1
a.each{|x| result*=x }
when "/"
result=a[0]
a[1 .. a.length].each{|x|result/=x }
end
print result, "\n"
No.3ベストアンサー
- 回答日時:
>私のプログラムのダメなとこ
どこから手を付けていいのかよくわからない(添削したら、ほとんど変わってしまうので)ですが、
気の付いた所を書いておきます。
まず、
・このスクリプトがエラー無しには通りません。
/ =~ op
とか
s=6 #終了状態
とか
すくなくとも、エラーがでないものをアップしましょう。(実行できているということなので、多分違うものなのでしょう)
・コマンドの引数になっているから"op[n1,n2,n3]"はStringなのに、Array Classでメソッド定義をしている。
"*[-1,25,4]".list_ope
などとしたら、当然エラーになるはず(無反応のはずがないと思う、ここでも多分、何かが違う)
・-0とか0始まりの数字が通ってしまう(まあ、いいけど)、-,みたいなのが通ってしまう(状態変移する)
・クラスがStringだとしたら、String#eachは、一文字を取り出さない。
・・・何から何までありがとうございました。BLUEPIXYさんに教えていただいたことをちょっと工夫したらすぐ実行できました!感謝感謝です。。単位取れそうです
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- JavaScript console.logがどうしても2つ機能しないのでアドバイスをくださいお願いします 2 2022/07/07 22:13
- Visual Basic(VBA) VBAの繰り返し処理について教えてください。 3 2022/08/02 13:21
- Visual Basic(VBA) ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています 17 2022/12/07 12:03
- JavaScript JavascriptからSQLへ繋ぎ方が分からない 3 2022/07/07 00:27
- Visual Basic(VBA) VBAで最新のデータを別シートに転記する方法をお教えください。 3 2022/04/07 19:20
- その他(プログラミング・Web制作) Rでのスクリプトのご相談 3 2022/12/08 16:22
- Visual Basic(VBA) [Excel VBA] このコードでは行の挿入や行の消去をすると13のエラーが出てしまう。 3 2022/12/09 00:29
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- Visual Basic(VBA) excel2021で実行できないマクロ。どこを直したらいいのか 2 2022/03/28 03:40
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルVBAついて ①if•••••the...
-
vb2010webページのリンクをクリ...
-
Verilogの文法
-
sublimit textっていうエディタ...
-
エクセルVBAでテキストボッ...
-
Excel VBAでsub,dimは何の略?
-
Functionの戻り値を配列にした...
-
プログラムの素朴な質問です 分...
-
VBA public変数はどのようなこ...
-
「ずっと憧れていました」は英...
-
Excel vba で複数のテキストの...
-
VBAでcallで呼び出したsubを終...
-
Matlabでsin波を使って矩形波を...
-
ClickとChangeイベントの違いは...
-
Can you text me your business...
-
共有フォルダの「共有のアクセ...
-
texで図と表を並べたい
-
FlexGridで文字色を変更。
-
String型の値にスラッシュをつ...
-
テキストボックスかラベル上の...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
レコードセットにnullの場合
-
タイムアウトする仕組みを作りたい
-
subsequentとnextの違いってな...
-
vbsのmsgboxランダム表示について
-
日付の重複
-
verilogのcase文
-
片方のみ成り立つif分岐
-
TreeViewのTag情報取得
-
【FPGA】VHDLのprocessとevent
-
Verilogの文法
-
なんで? cEn-P^-1AP=P^-1(cEn-AP)
-
[至急]Project Euler:#21Amicab...
-
直線検出のハフ変換プログラム(...
-
pascalでの二分探索(バイナリ...
-
パスカル言語
-
Pascal言語
-
EXCEL VBA 文字 アドレス 検...
-
エクセルVBAついて ①if•••••the...
-
delphi
-
sublimit textっていうエディタ...
おすすめ情報