Tiny Basic日本語を利用した文字列の後ろから表示

このQ&Aのポイント
  • Tiny Basic for Windows v1.21を利用して、入力した日本語を後ろから表示するプログラムを作成したいです。
  • 行番号130の処理では、アルファベットを後ろから表示することができましたが、ひらがなや漢字はうまく表示できません。
  • アルファベット以外の文字についても後ろから表示する方法を教えてください。
回答を見る
  • ベストアンサー

Tiny Basic 日本語

Tiny Basic for Windows v1.21を利用しているものです。 入力した日本語を後ろから表示したいです。あいうと入力したら、ういあと出力したいです。 以下が実行したプログラムです。 10 INPUT "お名前は?: ", U$ 20 PRINT "こんにちは "; U$ ;" さん" 25 REM 30 INPUT "丸がいくつ欲しいですか?: "; N 35 S$ = "" 40 FOR I = 1 TO N 50' S$ = S$ + "○" print "○" 55 NEXT I 60 'PRINT S$ 65 REM 70 INPUT "もう一度やりますか(Y/N)? "; A$ 80 IF LEN(A$) = 0 THEN GOTO 70 90 A$ = LEFT$(A$, 1) 100 IF (A$ = "Y") OR (A$ = "y") THEN GOTO 30 110 PRINT "さようなら " 111 INPUT "挨拶はなん回: "; N2 120 FOR I = 1 TO N2 130 PRINT RIGHT$(U$,6); "さん "; 140 NEXT I 150 PRINT 160 PRINT "さようなら " 170 END 行番号130の処理では、アルファベットを後ろから表示できました。ひらがなや漢字はそうなりません。 御指摘お願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • Prome_Lin
  • ベストアンサー率42% (201/470)
回答No.1

質問のプログラムでは、名前で入力した文字が逆順にはならないですよ。 アルファベットで入力しても、このプログラムではなりません。 下記のプログラムでは「125」~「140」のように、お名前の文字数「LEN(U$)」から、最初の1文字目までを、1文字ずつ取り出しています「MID$(U$,J,1)」。 FOR J = LEN(U$) TO 1 STEP -1で、逆順にしています。例えば、U$が6文字の場合、「LEN(U$)」の値は「6」、STEP -1なので、1つずつ「6」から「1」まで減って行きます。 そして、そのお名前を1文字ずつ、逆順に表示したのち、すなわち、「NEXT J」のあとに「PRINT "さん ";」を置くことで、お名前を出力したのち、「さん 」が出力されます。 10 INPUT "お名前は?: ", U$ 20 PRINT "こんにちは "; U$ ;" さん" 30 INPUT "丸がいくつ欲しいですか?: "; N 35 S$ = "" 40 FOR I = 1 TO N 50 print "○" 55 NEXT I 70 INPUT "もう一度やりますか(Y/N)? "; A$ 80 IF LEN(A$) = 0 THEN GOTO 70 90 A$ = LEFT$(A$, 1) 100 IF (A$ = "Y") OR (A$ = "y") THEN GOTO 30 110 PRINT "さようなら " 111 INPUT "挨拶はなん回: "; N2 120 FOR I = 1 TO N2 125 FOR J = LEN(U$) TO 1 STEP -1 130 PRINT MID$(U$,J,1); 135 NEXT J 140 PRINT "さん "; 145 NEXT I 150 PRINT 160 PRINT "さようなら" 170 END 以上でどうでしょうか?

situmonn9876
質問者

お礼

実行結果の間違いの指摘と、プログラムありがとうございます。

関連するQ&A

  • サブルーチン

    下は身長の平均を求めるプログラムですけど、身長の高い順、低い順に並び替えしたいんですがどうしたらいいかわからないので、よかったら誰か教えていただけませんか                   REM プログラム     10            DIM A(12) 20 PRINT "メニュー” 30 PRINT "身長入力...1" 40 PRINT "身長出力...2" 50 PRINT "終了" 60 PRINT "どれにしますか" 70 INPUT B 80 IF B=1 THEN GOSUB300 ELSE 110 90 GOTO 30 100 IF B=2 THEN GOSUB500 ELSE 130 110 GOTO 30 120 IF B=3 THEN GOSUB700 ELSE 30 130 END 140 A(11)=B 300 FOR I=1 TO 10 310 PRINT i;: PRINT "人目" 315 INPUT C 320 A(I)=C 330 PRINT "これでいいですか?" 340 PRINT "1.YES 2.NO" 345 INPUT D 350 IF D=1 THEN 380 ELSE 370 360 IF D=2 THEN 315 ELSE 340 370 A(11)=A(11)+A(I) 380 NEXT I 390 RETURN 400 IF C=1 THEN 520 500 PRINT "先に入力してください" 510 GOTO 30 515 FOR I=1 TO 12 520 PRINT A(I) 530 NEXT I 540 RETURN 550 PRINT "これで身長の平均を求めるのを終わります"700 RETURN 710  

  • N88 basicプログラムの質問(ノルム計算)1

    N88 basicプログラムにおいて鉱物のノルム計算ができるようにしたいのですが、プログラムを打ち込んだのですが、うまく動きません。どなたかわかる方がいればご教授頂きたく願います。 かなり長くなりますが、ぜひともお願い致します。 下記、打ち込んだプログラムとなります。 長いので、質問を分けて入力します。 10 ' 20 '***** normative calculation program for clay minerals ***** by T,Igarashi,1983 30 ' 40 OPTION BASE 1 50 CONSOLE 0,25,0,1 60 WIDTH 40,25 70 ' 80 ' 90 DIM A$(22),DMY$(22),AA$(22),B1$(31),M$(8),L$(8) 100 DIM A(8,22),A1(22),A2(22),B(31),B0(8,31),C9(31),TOTAL(2,8) 110 GOSUB *INIT.1 120 ON ERROR GOTO 5000 130 GOSUB *ENTER 140 FOR QQ=1 TO NN 150 GOSUB *INIT.2 160 IF KORF=1 THEN GOSUB *FILE ELSE GOSUB *KEYBOARD 170 GOSUB *STORE 180 GOSUB *CALC 190 GOSUB *OUTPUT 200 NEXT QQ 210 GOSUB *PRINTOUT 220 GOTO 130 230 ' 240 ' 250 ' 260 *INIT.1 270 RESTORE 290 280 FOR I=1 TO 22 : READ AA$(I) : READ A2(I) : NEXT 290 DATA SIO2,60.085,TiO2,79.899,Al2O3,101.961,Fe2O3,159.692,FeO,71.846,MnO,70.937,MgO,40.304,CaO,56.079,Na2O,61.979,K2O,94.195 300 DATA P2O5,141.943,Cl,35.453,SO3,80.57,S,32.6,Cr2O3,151.989,ZrO2,123.218,F,18.99,CO2,44.9,H2O+,18,H2O-,1,Ig.LOSS,1,Others,1 310 RESTORE 330 320 FOR I=1 TO 31 : READ B1$(I) : NEXT 330 DATA Q,C,ad,mi,ab,an,ka,se,ch,gi,mo,pp,dp,al,Z,hl,th,cc,mg,sd,li,mt,he,cm,pr,il,ru,ap,fr,en,ot 340 C9(1)=A2(1) : C9(2)=A2(3) : C9(3)=A2(1)+A2(3) : C9(4)=A2(10)+A2(3)+A2(1)*6 : C9(5)=A2(9)+A2(3)+A2(1)*6 : C9(6)=A2(8)+A2(3)+A2(1)*2 : C9(7)=A2(3)+A2(1)*2+A2(19)*2 350 C9(8)=A2(10)+A2(3)*3+A2(1)*6+A2(19)*2 : C9(9)=A2(7)*5+A2(3)+A2(1)*3+A2(19)*4 : C9(10)=A2(3)+A2(19)*3 : C9(11)=A2(9)*33+A2(3)+A2(7)+A2(1)*4+A2(19)*4 : C9(12)=A2(3)+A2(1)*4+A2(19) 360 C9(13)=A2(3)+A2(19) : C9(14)=A2(10)+A2(3)*3+A2(13)*4+A2(19)*6 : C9(15)=A2(1)+A2(16) : C9(16)=(A2(9)-16)/2+A2(12) : C9(17)=A2(9)+A2(13) : C9(18)=A2(8)+A2(18) : C9(19)=A2(7)+A2(18) : C9(20)=A2(5)+A2(18) 370 C9(21)=A2(4)+A2(19) : C9(22)=A2(4)+A2(5) : C9(23)=A2(4) : C9(24)=A2(5)+A2(15) : C9(25)=A2(5)-16+A2(14)*2 : C9(26)=A2(2)+A2(5) : C9(27)=A2(2) : C9(28)=A2(8)*10+A2(11)*3+A2(19) 380 C9(29)=A2(8)-A2(17)*2 : C9(30)=A2(1)+A2(7) : C9(31)=1 : DD=0 390 FOR I=1 TO 31 : B(I)=0 : NEXT 400 RETURN 410 ' 420 ' 430 ' 440 *ENTER 450 C=0 : KORF=0 : SCREEN 3,3 : CLS 3 : SCREEN 3,0 : LINE(0,0)-(639,199),6,BF : COLOR 2 460 LOCATE 0,5 : PRINT "How many samples (Max 8 samples)";: INPUT NN 470 IF NN>8 THEN CLS 1 : GOTO 460 480 IF NN=0 THEN GOTO *PROEND 490 COLOR 2 : LOCATE 0,8 : PRINT "Input data from Keyboard or File or End : K/F/E" 500 Y$=INKEY$ 510 IF Y$="" THEN 490 520 IF Y$="e" OR Y$="E" THEN GOTO *PROEND 530 IF Y$="k" OR Y$="K" THEN KORF=0 : RETURN 540 IF Y$<>"f" AND Y$<>"F" THEN 490 550 KORF=1 560 RETURN 570 ' 580 ' 590 ' 600 *INIT.2 610 CLS 1 620 FOR I=1 TO 22 : A(QQ,I)=0 : NEXT I 630 FOR I=1 TO 31 : B(I)=0 : B0(QQ,I)=0 : NEXT I 640 RETURN 650 ' 660 ' 670 ' 680 *FILE 690 OPEN "data.1" AS #1 700 FIELD #1,40 AS MINERAL$,40 AS L1$ 710 FOR I=1 TO 22 : FIELD #1,(I-1)*4+80 AS DMY$(I),4 AS A$(I) : NEXT 720 MAX=LOF(1) : IF MAX=0 THEN RETURN 440 730 LOCATE 1,2 : PRINT MAX;"records are filing." 740 IF DD=1 THEN 800 750 LOCATE 2,5 : PRINT "You need list (Y/N)?": Y$=INKEY$ 760 IF Y$"" THEN 750 770 IF Y$="N" OR Y$="n" OR Y$="ミ" THEN 800 780 IF Y$="Y" OR Y$="y" OR Y$="ン" THEN GOSUB *NAME.LIST : GOTO 800 790 GOTO 750 800 LOCATE 2,10 : INPUT "Record No.";N 810 IF N>MAX THEN CLS 1 : GOTO 730 820 GET #1,N 830 M$=MINERAL$ : L$=L1$ 840 FOR I=1 TO 11 : A(QQ,I)=CVS(A$(I)) : A(QQ,I+11)=CVS(A$(I+11)) : NEXT 850 CLOSE #1 : DD=1 860 LOCATE 2,15 : PRINT "Correct data : Y/N"; : Y$=INKEY$ 870 IF Y$="" THEN 860 880 IF Y$="Y" OR Y$="y" THEN C=1 : GOTO 1120 890 IF Y$="N" OR Y$="n" THEN RETURN 180 900 GOTO 860 910 ' 920 ' 930 ' 940 *NAME.LIST 950 LPRINT 960 LPRINT CHR$(27) ; "V0960" ;CHR$(&H8) 970 LPRINT "Sample Name" ; TAB(40); "Locality" 980 LPRINT CHR$(27);"V0960";CHR$(&H8) 990 FOR II=1 TO MAX 1000 GET #1, II 1010 M$=MINERAL$ : L$=L1$ 1020 LPRINT M$; TAB(40); L$ 1030 NEXT 1040 LPRINT CHR$(27) ; "V0960";CHR$(&H8) 1050 LPRINT CHR$(12) 1060 RETURN 1070 ' 1080 ' 1090 ' 1100 *KEYBOARD 1110 M$="" : L$="" : FOR I=1 TO 22 : A(QQ,I)=0 : NEXT I

  • 空欄に不等号が入るのですが・・・

    添付の図のようなフローチャートをbasicでプログラムすると次のようになる 130行目の空欄を等号ないし不等号ないし等号つき不等号で埋め 条件式を完成させよという問題がありました。 100 INPUT N 110 FOR I=1 TO N 120 LET A=I 130 IF (A+1)^2 (空欄) N THEN GOTO 190 140 NEXT I 150 IF A<=1 THEN GOTO 190 160 PRINT A 170 LET N=N-A^2 180 IF N>=1 THEN GOTO 110 190 END ここで入れるべきものはA^2がNを「超えない」なので>=ですよね? 解答を見ると>となっているのですが 解答の条件式でN=4として実行すると2が出力されるのでおかしな気がします。 解答が正しいのでしょうか?それとも間違っているのでしょうか?

  • CORDICによるSIN/COSの計算

    題目のアルゴリズムの計算をプログラムしましたが、期待値と 計算値が合いません。 誤りを指摘してください。 REM calculation of sin and cos by CORDIC k = 1 / .60725 z = .65 GOSUB 1000 PRINT "cos(z)="; x PRINT "sin(z)="; y END 1000 REM sin(z) , cos(z) x = 1 / k y = 0 i = 0 1010 IF z >= 0 THEN 1200 u = x + y * 2 ^ (-i) y = y - x * 2 ^ (-i) z = z + atan(2 ^ (-i)) x = u GOTO 1400 1200 u = x - y * 2 ^ (-i) y = y + x * 2 ^ (-i) z = z - atan(2 ^ (-i)) x = u 1400 i = i + 1 IF i < n THEN 1010 RETURN アルゴリズムの出展は ディジタル信号による通信システム設計 P138 図3-36 CQ出版社

  • 行列に関するプログラムについて

     『m×n 型行列Aの最大成分と最小成分を捜し、それぞれの行番号と列番号を出力するプログラムを作れ』という問題です。  以下のようにBACICで考えたのですが、うまく行番号と列番号を出力するプログラムを作れません。アドバイスいただければと思います。宜しくお願い致します。 100 INPUT m 110 INPUT n 120 DIM A(m,n) 130 MAT INPUT A 140 FOR i=1 TO m 150 FOR j=1 TO n-1 160 LET s=A(i,j) 170 LET t=A(i,j) 180 IF A(i,j)<A(i,j+1) THEN LET s=A(i,j+1) 190 IF A(i,j)>A(i,j+1) THEN LET t=A(i,j+1) 200 NEXT j 210 NEXT i 220 PRINT "最大成分は";s,"最小成分は";t

  • BASICのPRINT#命令

    必要にかられ、ベーシックでプログラムを記載していま す。ファイルに書き出す命令で「PRINT #」を使ってる のですが、最終のレコードを書き出した一番最後の位置に 化け文字がついてしまいます。 以下のようにコーディングしています。 ================================================== 20 OPEN "a" FOR INPUT AS #1 30 OPEN "b" FOR OUTPUT AS #2 32 INCNT=0 40 IF EOF(1)=-1 THEN 100 51 D128A$=INPUT$(128,1):D128B$=INPUT$(128,1):CRLF$=INPUT$(2,1) 52 IF LEFT$(D128A$,1)="S" THEN PRINT #2,LEFT$(D128A$,128); 57 IF LEFT$(D128B$,1)="E" THEN PRINT #2,LEFT$(D128B$,128); 58 INCNT=INCNT+1 90 GOTO 40 100 CLOSE #1,#2 ================================================== バイナリエディタで内容を見ると「1A」となっています。 これをつけたくないのですが、、、、 簡単に言えば、INPUTのファイルから128バイトずつの データを抜き出し、横一列に並べたいのです。 古い人の作成したもので、資料が手元になくて困って います。 ご存知の方がいれば教えてください。

  • 十進ベーシックのプログラムの間違いを教えてください。

    誰か次のプログラムの間違いを直してください。入力を間違えても次に進めるようにするにはどこをどう変えたらよいのですか? RESTORE 30 READ a$ 40 INPUT b$ IF a$=b$ THEN IF a$<>b$ THEN GOTO 40 PRINT a$ GOTO 30 DATA i,x,d,k,k,h,end END IF END

  • MS-DOSの起動ディスクでループする?

    どうにもいきづまってしまいましたのでお力を貸して下さい。 WindowsXPからMS-DOSの起動ディスクをフロッピーディスクで作成してAUTOEXEC.BATに下のように書いたのですがメニューから入力するところで止まらずうまくいきません。 Windowsのコマンドプロンプト上ではうまくいくのですが、調べてみたらコマンドプロンプトとMS-DOSが別ものということはわかったのですがどのように直していいかわかりません。 すみませんがご教授いただけないでしょうかよろしくお願いします。 環境 OS:Windows XP Pro PC:NEC VersaPro :Main cls @echo off rem メニュー echo キー入力後、エンターで決定して下さい echo [0] 処理 echo [E] 終了 rem 入力値の取得 set /p input= if defined input set input=%input:"=% rem 入力値判断 if /i "%input%" == "0" (goto KAKUNIN) if /i "%input%" == "E" (goto exit) else goto Main goto main :KAKUNIN cls echo 処理をしていいですか? Y/N set /p input= if defined input set input=%input:"=% if /i "%input%" == "Y" (goto SYORI) if /i "%input%" == "N" (goto Main) else goto KAKUNIN :SYORI 処理をする pause :exit

  • N88互換BASICのプログラムについて。

    私は機械科3年ですが、今年からBASICを勉強しています。次のプログラムのエラー(行番号190にてopenしたファイルに出力できないです)がどうしても解決できないです。N88互換BASICやられている方でどなたか私にアドバイスをしていただけると助かります。 110 REM EX1B by E/F on 2006/04/25 120 PI=3.14159:PHI=30:Y0=.5 130 '************ Output into File ************ 140 CLOSE #1:OPEN "C:\WINBASIC\EX1B_OUT.TXT" FOR OUTPUT AS #1 150 FOR X=0 TO 360 STEP 45 160 A=.2 :Y1=A*SIN((X-PHI))+Y0 170 A=1.2 :Y2=A*SIN((X-PHI))+Y0 180 A=2 :Y3=A*SIN((X-PHI))+Y0 190 PRINT #1,X;",";Y1;",";Y2;",";Y3" 200 PRINT"Out:";X;",";Y1;",";Y2;",";Y3 210 NEXT X 220 CLOSE #1 230 '************ Input from File ************** 240 CLOSE #2:OPEN "C:\WINBASIC\EX1B_OUT.TXT" FOR INPUT AS #2 250 IF EOF(2)<>0 THEN GOTO 190 260 INPUT #2,X,Y1,Y2,Y3 270 PRINT"Inp:x=";X;" y1=";Y1;" y2=";Y2;" y3=";Y3;" 280 GOTO 150 290 CLOSE #2 300 '***** Close All Files and Computer Stop***** 310 CLOSE 320 END

  • N88-日本語 BASIC ASCII ファイル

    N88-日本語 BASIC ASCII ファイルにするのにはどうしたら、宜しいのでしょうか。 ・MS-DOS 6.20 に付属されている、「Fileconv」を使ってみました。 MS-DOS → N88BASIC ドライブ名は、「C」ですが、Cと打つと、弾かれてしまって、入力が不可能です。 ・因みに、MS-DOSのファイル形式になっている、現在は、以下の記述名です。 ----- 10 width 80,20                         '10~96行まで初期設定 20 cls:beep 30 print "KEY操作 1 左 2 右 3 ミサイル発射" 40 print "自機 <T> を操り 敵 = を撃つゲーム" 50 for i=0 to 40 60 locate i,5:print "-" 70 next 80 locate 19,5:print "-<T>-" 90 x=19: m=0:mx=0:my=0              'x、y 自機の座標  mx、my ミサイル座標 95 randomize(val(right$(time$,2)))         'ex,ey 敵座標  96 ey=int(rnd(1)*10)+6:ex=5 100 gosub 200                    '100~130 メインルーチン 110 if m=1 then gosub 300  'm=0 ミサイル未発射。この時は300行(ミサイル移動ルーチン                     'にはいかない m=1 ミサイル発射中は300行へ   120 gosub 400 130 goto 100 200 b$=""                       '自機の移動、ミサイル発射 202 a$=inkey$ 205 if a$<>"" then b$=a$:goto 202 210 if b$="1" and x>1 then x=x-1 215 if b$="2" and x<37 then x=x+1 220 if b$="3" and m=0 then mx=x+2:my=5:m=1:beep 230 locate x,5 :print"-<T>-" 240 return 300 locate mx,my:print " "              'ミサイル移動ルーチン 310 my=my+1 320 if mx=ex and my=ey then gosub 600: end   '当たり判定  330 if my>15 then mx=0:my=0:m=0:return     '下までいったらミサイル終了。m=0に戻す 340 locate mx,my:print "V":return 400 locate ex,ey:print " "               '敵移動ルーチン           410 ex=ex+1 420 if ex=mx and ey=my then gosub 600 :end   '当たり判定 430 if ex>39 then ex=0: ey=int(rnd(1)*10)+6    '端までいったら新座標 440 locate ex,ey:print"=" 450 return 600 beep                          '当たりの時の処理 610 locate mx,my:color 4:print "*" 620 print "大当たり THE END": color 7 630 print "HIT ANY KEY" 640 a$=input$(1):return