トピック
[NM]night 12345yukinice

コードの短縮と謎の不具合

私はローマ字でひらがな入力ができるプログラムを作っています。 仕組みは単純で、ローマ字を入力しエンターキーを押すと、スロット1にそのひらがなが保存される仕組みなんですが… ・画像の通りプログラムがくそ長い ・そのせいか、なぜかどの文字にしても"あ"から"ん"までの五十音すべてが一列に表示されてしまう という重大な欠陥があります。 私の目標は、 「エンターキーを押すとスロット1の一行目に文字が並べられる」ようにすることです。 どなたか、この哀れなBASIC初心者に教えてくれませんか?
0そうだね
プレイ済み
返信[1]
親投稿
Villit nakahara1226
どうやらIFの書き方が間違っているようです。 例えば画像の「ROMA$==A」、これは、 「文字列変数ROMA$」と「数値変数A」が同じ時、という意味になってしまいます。 なので、右の「A」を「"(ダブルクォーテーション)」で囲んで、「ROMA$="A"」にしないと、正しい結果は得られません。
1そうだね
プレイ済み
返信[2]
親投稿
Villit nakahara1226
また、「あ」~「ん」までを全部並べるのもメンドイでしょう。 なので… 「母音と子音」はわかりますか? これをうまく活用すると、ある程度プログラムを短縮できます。 どう活用するかはあなた次第です。頑張ってください!
2そうだね
プレイ済み
返信[3]
親投稿
私もそれ作った事あるなぁー… 同じようにif の長い行になったけど(笑)
0そうだね
プレイ済み
返信[4]
親投稿
[NM]night 12345yukinice
ありがとうございます! 完成したら公開する予定なので、ぜひ使ってみてくださいね!←早いわ
0そうだね
プレイ済み
返信[5]
親投稿
しんしん manashi3
余計な突っ込みですが、42行目のTOでエラー吐かないのか気になります。 forがないとき、toは変数として認識するのだろうか?
1そうだね
プレイ済み
返信[6]
親投稿
SilverBlue Corei72630QM
DATA "A","あ" DATA "KA","か" 見たいにして、READしてIFで判定する。的なのも良いと思われ
3そうだね
プレイ済み
返信[7]
親投稿
おちゃめ ochame_nako
単に「プログラムを短くしたい」のであれば変換テーブルを用意するのが最も簡単です。 変換テーブルの作り方はいくつもありますが、DATAの形で記述していくのがポピュラーですね。 もちろん、子音+母音に分けて処理するという方法でも全く問題ありません。こちらの方がさらに短縮が可能だと思います。
2そうだね
プレイ済み
返信[8]
親投稿
おちゃめ ochame_nako
しんしんさんへ プチコン3号で変数として使用できない予約語は以下のものです。 IF THEN ELSE ENDIF GOTO GOSUB RETURN ON FOR NEXT WHILE WEND REPEAT UNTIL BREAK CONTINUE DEF END VAR DIM AND OR XOR NOT DATA READ RESTORE PRINT INPUT LINPUT CALL TRUE FALSE SWAP OUT COMMON USE EXEC この中に含まれてないTOは変数として使用可能となっています。
2そうだね
プレイ済み
返信[9]
親投稿
[NM]night 12345yukinice
公開しました。NRS4RED3 一応DATA化しました。が、肝心の使い方がわからなかった上に結構時間を食ってしまったので、それらを全部ひっくるめてプロジェクトにして投稿しました。宿題のために落ちます。 このトピックは開けっ放しにしておきます。おやすみなさい。
0そうだね
プレイ済み
返信[10]
親投稿
あきと SideBurnsM
INKEY$を使えばリアルタイム入力が作れますよ。
2そうだね
プレイ済み
返信[11]
親投稿
こちらも、RMG IMEから抜粋して簡易ローマ字入力ツールとしたものを 先日作りました INKEY対応しているので、どんな感じか気になる場合はプチコンBIGのコミュに投稿したプレイ日記を見てみてください 3号で動くはずなので動作確認も出来るはずです 後ほど、ナイトさんのもダウンロードさせていただきますね~(^^)
0そうだね
プレイ済み
返信[12]
親投稿
拝見しました。 DATAの使い方ですが配列などに格納せず繰り返し使う場合には DATAの前の行にラベルを追加しましょう(例:@ROMA) RESTORE @ROMA と、このように書くと必ず@ROMAの行から読み始めるようになります。 これを記述しないとREADを実行するたびに読み込む行がずれて行って 1つのローマ字は1回ずつしか変換できなくなってしまいます。 メインループ開始  文字を入力  RESTORE @ROMA  ローマ字判定用ループ開始   READ ROMA$, TO$ ←ここでROMA$に「A」 TO$に「あ」が入ります。   判定を行い 見つかったらTO$を書き出すなどしてBREAK  ローマ字判定用ループ修了 メインループ終了
0そうだね
プレイ済み
返信[13]
親投稿
↑は日本語でざっくりとプログラムを書いてみました。 繰り返しの中でDATAを読み込んでいくので ローマ字変換判定のIFは1回書くだけで済むようになります。 ちなみに、DATAの件数より多くREADするとエラーになってしまうので ループの回数を固定にするか終わりを判断できるデータを1件追加するかして制御しましょう。 終わりの例 DATA "",""←ROMA$==""ならループ終了 DATA "_EOD_",""←ROMA$=="_EOD_"なら終了など
0そうだね
プレイ済み
返信[14]
親投稿
しんしん manashi3
おちゃめさん toが予約語になっていないのは驚きでした。と言っても変数名にtoを使ったことはありませんが^^;
2そうだね
プレイ済み
返信[15]
親投稿
[NM]night 12345yukinice
みなさん丁寧な返信ありがとうございます! このコミュニティは他のコミュニティを家電量販店だとするなら、ここはパソコン専門店のようです(例え方が下手ですね(笑))
2そうだね
プレイ済み