• ベストアンサー

整数でないとき

10 INPUT X 20 IF X=0 THEN END 30 C=X-2*INT(X/2) 40 IF C=0 THEN PRINT”偶数” ELSE PRINT”奇数” 50 GOTO 10 というプログラムはXが整数でなければ奇数と判定してしまいます。20行と30行の間に命令を追加して、Xが整数でないときは”整数でない”と表示して、次の入力を待つように修正し、整数のときだけ奇数か偶数かを判定するようにするには、 25 IF X^2>INT(X^2) THEN PRINT”整数でない”:GOTO 10 を追加する。 でよいのでしょうか? ぜひ教えてください。 

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

  • ベストアンサー
  • oja
  • ベストアンサー率29% (78/261)
回答No.4

>で分かれ目になっているのでしょうか? 分かれ目と言う表現が何を云わんとしているのかちょっとわかりかねます。 do until x=0  ~ loop は繰り返しの構造です。xが0になる(xに0が代入される)まで繰り返しを行う。 この繰り返し構造の中にIF文の構造が階層的に含まれています。 if x = int(x) then  ~ else  ~ end if の構造の下に if c=0 then print "偶数" else print "奇数" のif文の構造が含まれる形です。  どうやら、プログラムの勉強をはじめたばかりの様で仕方ないのかもしれませんが、goto文を使った書き方というのは最近あまりしません。20年ぐらい前のBASICなどでは上記のような(構造化プログラミングの)書き方が出来なく、仕方なく使われてましたが。

norvill625
質問者

お礼

学校でBASICの実習をしているのですが、先生も今はほとんど使われていないと言っていました。 N88BASICと打ち込んでスタートさせてます。 もしかして20年前のベーシックかも・・・

その他の回答 (3)

  • oja
  • ベストアンサー率29% (78/261)
回答No.3

>いいと思いますが、なぜxの自乗で判断するのですか? if x <> int(x) then ... じゃいけないの?? <>, = を使うなら、2乗の必要はないですね。 2乗にしたのは、> で判断する場合負の値も考慮したんですよね。 という事で私も少し訂正。 rem x=999は仮の初期値 x=999 do until x=0  input x  if x = int(x) then   c=x-2*int(x/2)   if c=0 then print "偶数" else print "奇数"  else   print "整数でない"  end if loop end

norvill625
質問者

お礼

上記の内容は、 input x と if x = int(x) then c=x-2*int(x/2) と if c=0 then print "偶数" else print "奇数" else print "整数でない" と end if loop で分かれ目になっているのでしょうか?

  • bikkuri
  • ベストアンサー率33% (23/68)
回答No.2

いいと思いますが、なぜxの自乗で判断するのですか? if x <> int(x) then ... じゃいけないの?? もちろん、gotoで飛ばしまくるより#1の方のように記述する方がいいです。 (そう書けないbasic/演習ならしかたないですが)

norvill625
質問者

お礼

No.1の方のお礼にも書かせていただいたのですが、loopというのが分からないんですよ。 あとif x <> int(x) then なら負の数字の場合がダメな気がします。

  • oja
  • ベストアンサー率29% (78/261)
回答No.1

よろしいのではないでしょうか。 ただ、自分なら下のような感じで書きますけど。 rem x=999は仮の初期値 x=999 do until x=0  input x  if x^2 = int(x^2) then   c=x-2*int(x/2)   if c=0 then print "偶数" else print "奇数"  else   print "整数でない"  end if loop end

norvill625
質問者

お礼

do untilやloopはまだ習っていないので分かりません・・・  申し訳ないです。

関連する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  

  • プログラミングの問題

    整数nをキーボードから入力し、1からnまでの数のうち奇数だけを加えた和を計算し表示するプログラム ヒント ・変数xが奇数か偶数かは、MOD(x、2)が0か否かで判断できる。 ・FOR~NEXT構文のなかでも、 IF~THEN~ELSE~END IF 構文を使える。 という問題で、 input n let s=0 for i=1 to n までしかわかりませんでした。 いったいこのあとはどうなるのか、教えてください。 おねがいします。

  • srand(time(NULL))の使い方

    C言語の勉強中で「ランダムな整数値を作成し、その数値が偶数か奇数かを判定するプログラムをif~else 構文を使って作成」したいのですが下記のプログラムでやってみたのですがまだまだ知識不足で完成しません。知識をお借りできればと思っていますのでどなたか教えてください。 #include<stdio.h> #include<stdlib.h> #include<time.h> int main(void) { { int = i; i = rand(); srand((unsigned)time(NULL)); printf("%d\n",rand()); } if(i % 2 == 0) { printf("偶数である:\n",i); } else { printf("奇数である:\n",i); } return 0; }

  • 初歩なんですけど。。

    c machine を使ってやると下のやつが全部奇数になってしまいます。 学校のコマンドプロンプトのときは出来た気がするんですが、、 #include<stdio.h> void main(){ int a; printf("Input the Number please"); scanf(%d,&a); if(x%2==1){printf("奇数");} else{printf("偶数");} } どこかこのソースの間違いや、他の原因などあればお願いします。

  • 異なるn個の整数からr個の整数を取り出す組み合わせ

    異なるn個の整数からr個の整数を取り出す組み合わせの数 nCrを求める関数 int combination(int n, int r){ /* ・・・ */} を作成せよ。なおnCrは以下のように定義される。 nCr = n-1Cr-1 + n-1Cr (ただし nC0 = nCn =1、nC1 =n ) (新版 明解C言語 入門編(柴田望洋 著) P.197 演習8-6) というので答えが int combination(int n, int r) { if((n>r) && (r>0)){ return combination(n-1,r-1) + combination(n-1,r); } else if(n==r || r==0){ return 1; } } ・という風になると教えてもらったのですがなぜこうなるのかが分かりません。 ・else if(n==r || r==0){ というのは削っても正常に動きますが、必要な物なのでしょうか? ・またifを使うときは if→eise if →else の順に使って 2つの時は if→else と使っていたのですが 上のものはif→else ifと書いています。 加えてelse(n==r || r==0){ と書いたらコンパイルエラーになってしまいました なぜelse ifと書くのでしょうか? 以上3点について教えてください。よろしくお願いいたします。

  • 3つの整数が等しいかどうか調べるプログラム

    3つの整数が等しいかどうか調べるプログラムがよくわからないので、どなたか教えていただけないでしょうか?ちなみに、わからないながらに作ってみました。 #include <stdio.h> int main(void) { int x, y, z; puts("3つの整数を入力してください。"); printf("整数1:"); scanf("%d",&x); printf("整数2:"); scanf("%d",&y); printf("整数3:"); scanf("%d",&z); if (x==y==z) puts("3つの整数の値は同じです。"); else puts("3つの整数の値は違います。"); return (0); }

  • 間違いを指摘して頂けませんか?(切実)

    私は大学で春からプログラミングの基礎を学び始めたプログラミング初心者です。 今、if関数のネストについて習っていて、if関数のネストを利用したプログラム作成の課題が出て、一応書いてはみたのですがどうしても上手くいきません。下に課題の内容と私の書いたプログラムを書いておきますので、間違っている箇所を指摘、修正して貰えませんか?宜しくお願い致します。 【課題】 次の項目に従ってプログラムを作成せよ。 (1)整数型の変数noを宣言 (2)「整数を入力してください。」と表示して改行 (3)キーボードから入力された値を変数noに代入 (4)入力された値が ・偶数で4で割り切れる数なら「整数○は偶数で4で割り切れます。」 ・偶数で4で割り切れない数なら「整数○は偶数だけど4で割り切れません。」 ・奇数で3で割り切れる数なら「整数○は奇数で3で割り切れます。」 ・奇数で3で割り切れない数なら「整数○は奇数だけど3で割り切れません。」 の○の位置にnoの値を当てはめて表示した後、改行 #include <stdio.h> main(void) { int no; printf("整数を入力してください。\n"); scanf("%d",&no); if(no/2==0,no%4==0){ printf("整数%dは偶数で4で割り切れます。\n",no); }else{ if(no/2==0,no%4!==0){ printf("整数%dは偶数だけど4で割り切れません。\n",no); }else{ if(no/2!=0,no%3==0){ printf("整数%dは奇数で3で割り切れます。\n",no); }else{ printf("整数%dは奇数だけど3で割り切れません。\n",no); } } } } ※なお、上のプログラムは全て左詰めになってしまっていますが、質問する上で表示出来なかっただけですので…実際にはちゃんと然るべき箇所にTabキーによる余白は入れてあります。

  • BASIC言語で整数を素因数分解するプログラムを教えてください

    結果が表示されません。間違い箇所を教えてください 使用コマンドはbwbasicです 100 PRINT "N? (N>2)" 101 waru=2 102 kazuhantei=0 103 pastwaru=0 104 kaisu=1 105 hatsu=1 110 INPUT object 120 DO 130 IF object<2 THEN 140 PRINT "N? (N>2)" 150 INPUT object 160 ELSE 170 kazuhantei=1 180 END IF 190 IF kazuhantei<>0 THEN 200 GO TO 250 210 ELSE 220 GO TO 130 230 END IF 240 LOOP 250 PRINT "soinsubunkai suruto" 260 object=0 270 DO WHILE object<>1 280 IF object MOD waru=0 THEN 290 IF pastwaru=waru THEN 300 kaisu=kaisu+1 310 END IF 320 IF kaisu>1 THEN 330 PRINT "^";kaisu 335 END IF 340 kaisu=1 350 IF hatsu=0 THEN 360 PRINT "*";waru 370 pastwaru=waru 380 END IF 390 hatsu=0 400 object=object/waru 410 END IF 420 ELSE 430 waru=waru+1 440 object=object+1 445 LOOP 450 IF kaisu>1 THEN 460 PRINT "^";kaisu 465 END IF 470 END

  • C言語プログラミング。

    標準出力から整数を読み込んで、その整数が奇数か偶数かを判定して、判定結果を出力するプログラムをif文を用いて作りたいんです。剰余演算子を使ってなら作れるんですけど、剰余演算子を使わないで作るにはどうすればいいのでしょうか。 よろしくおねがいします。

  • 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

専門家に質問してみよう