プレイ日記
Soybeanman 2013niconico
このプログラム、もっと短くできないでしょうか。 案がありましたらどなたか教えてください。
6そうだね
プレイ済み
返信[1]
親投稿
/をDIVにすれば切り捨てになる IF文でELSEをつかう
0そうだね
プレイ済み
返信[2]
親投稿
すぎ field2050
DIM X[5],Y[5]でFOR文の前に1回でOK X[0]は作りたくないのかもしれないけどそれは無理です。
1そうだね
プレイ済み
返信[3]
親投稿
Soybeanman 2013niconico
コメントありがとうございます。 すぎさん>>そうするとエラーになるのですが・・・
1そうだね
プレイ済み
返信[4]
親投稿
otta777 otta777a
18~19行目を SPCHR SP,SC-((SX DIV 10)MOD 2!=0) としても同じ動作になります。
1そうだね
プレイ済み
返信[5]
親投稿
すぎ field2050
DIM文は1回でいいです。この場合5行目がいらないです。 エラー5行目になってません? あとCO$も配列にしてC0$[0]="アカ"とかにすれば短くできます。
2そうだね
プレイ済み
返信[6]
親投稿
MIKI ifconfig
てゆーか、これがエラーにならないとは!?!? 信じられない!! 久しぶりにビックリした!!
3そうだね
プレイ済み
返信[7]
親投稿
どんな挙動してるんだろうな… というより、変数で宣言する要素数決められること自体仕組みが分からん…
0そうだね
プレイ済み
返信[8]
親投稿
Godot orz_127
とりあえずやって見ましたが、行数は変わりませんでした orz
0そうだね
プレイ済み
返信[9]
親投稿
MIKI ifconfig
for i = 1 to 5 dim x[i] next コンパイルフェーズでは x という識別子だけ登録する。xの宣言は一箇所だけなので、エラーにならない。 x が配列になるのは実行フェーズで dim 文が実行されたとき。 dim x[1] -> dim x[2] -> ... -> dim x[5] という文が実行され、xはそれぞれその長さの配列になる。(メモリリークしてそうだな。) プチコン・・・恐ろしい子・・・
3そうだね
プレイ済み
返信[10]
親投稿
MIKI ifconfig
そういえば普通に def f for i = 1 to 5 var j for j = i to 6 var k = i*6+j next next end とか書いてるよな~ それの配列版と思えばいいのか・・・ でも j は最初だけ 0 に初期化されるが、配列は毎回初期化されるみたい。 一見 j k は for 内に局所化してるように見えるけど、実は end まで生きてだったりするのよね。VB も似たような仕様だったかな。
1そうだね
プレイ済み
返信[11]
親投稿
Godot orz_127
何か方向性が変わって来ましたが、短くなりましたw
1そうだね
プレイ済み
返信[12]
親投稿
Godot orz_127
右上が見えなかったので再提出。
1そうだね
プレイ済み
返信[13]
親投稿
otta777 otta777a
プチコン3号では同じ配列変数へのDIM命令の記述が複数ある場合は Duplicate variableを出しますがループに組み込んで1カ所しか 記述が無い場合はエラーになりませんね。 配列のサイズを小さくしても消費メモリーは減らないようですけど。
1そうだね
プレイ済み
返信[14]
親投稿
Godot orz_127
ちょっとだけ補足 18~19行目は結局、最後に2で割った時に端数がでるか、でないか、で決まっています。 端数が出る場合にSCの値-1となるかと。 なので前の otta777 さんの指摘通り MOD 2の結果が 0か、0でないかで判定して良さそうです。 最終的には 「SPCHR SP,SC-(SX MOD 2)」で 良さそうな気がします。
1そうだね
プレイ済み