- 締切済み
n88 basic
現在、独学でbasicの勉強をしています。 今までにCやC++を少しかじった程度なんですが、 n88 basicの構文、書き方がわかりません。 問2と問3は一応自分なりに考えたC言語のソースを貼っておきます。 (問1はよくわかりませんでした。) 問1. 「秒」を入力すると「時:分:秒」に変換するプログラム。 (例:3850を入力すると、”3850秒は1時間4分10秒です。”と出力する) 問2. 配列を使い、九九の計算を行う ・FOR文命令を使って、1の段から九の段まで計算する ・各段を配列に格納する ・画面への表示にはPRINT USINGを利用し桁を揃えて配列の内容を順に表示する 表示例: 99 1 2 3 4 5 6 7 8 9 1 1 2 3 4 5 6 7 8 9 //一の段 2 2 4 … 18 //二の段 3 3 6 9 12 4 4 8 12 5 5 10 15 6 6 7 7 8 8 //八の段 9 9 18 27 … 81 //九の段 【C言語】 #include<stdio.h> int main(void) { int i,j,yoko; //i=行,j=列,yoko=配列 int value[10][10]; for(yoko=1;yoko<=9;yoko++) { printf("%5d",yoko); } for(i=0;i<9;i++) //行ループ { for(j=0;j<9;j++) //列ループ { value[i][j]=(i+1)*(j+1); printf("%5d",value[i][j]); } printf("\n"); } return 0; } 問3. キーボードから4つの数値を入力し、それらを足し算した結果が 100より大きい→”100より大きい。” 100より小さい→”100より小さい。” ちょうど100→”計算結果は100です” と出力するプログラムを作成し、またフローチャートを作成する 【C言語】 #include<stdio.h> int main(void) { int d1,d2,d3,d4,sum; printf("input in1,in2,in3,in4 ->"); scanf("%d,%d",&in1,&in2,&in3,&in4) sum=in1+in2+in3+in4; if(sum=100) { printf("ちょうど"); } if(sum>100) { printf(""100より大きい"); } else { printf(""100より小さい"); } return 0; } どうかお願いします。 n88 basicの解説付きだとありがたいです。
- みんなの回答 (5)
- 専門家の回答
みんなの回答
- endlessriver
- ベストアンサー率31% (218/696)
始めの DIM A(I,J) は配列エリアの確保文なので、これ以前にi,jの代入分が無ければ、I=0 : J=0 です。したがって、A(0,0)しか存在しません。そこで、FOR文の始めは I=1:J=1 ですから、最初で「配列が存在しない」エラーとなります。 したがって、始めのDIMは DIM A(9,9)です。
- endlessriver
- ベストアンサー率31% (218/696)
間違ってます。 PRINT USING " #####";value[i,j] でもよいですが、本当は 間違ってます。 PRINT USING " #####";value(i,j)
- buriburi3
- ベストアンサー率44% (353/792)
>→PRINT USING " #####;value[i][j]" >書き方間違ってますか? 間違ってます。 PRINT USING " #####";value[i][j]
お礼
ありがとうございます。 文法でわからないところはありましたが 問1と問3は出来ました。
- buriburi3
- ベストアンサー率44% (353/792)
>命令文の横に書いてある数字は 行番号です。 N88BASICはLEVEL3ベースのBASICインタプリタなので行番号が必要です。 >CASLだと掛け算できなかった気がしますが CASLはアセンブリ言語ですが? BASICはFORTRANを初心者向けに再編したインタプリタで 基本文法はFORTRANに酷似していますし、掛け算も勿論行えます。 >printf("%5d",value[i][j]); 5文字に揃えるにはPRINT USING文を使います。 BASICのPRINT文は ; で終わると改行しませんので ;は不要です。
お礼
何度も回答ありがとうございます。 もう一度勉強し直したいと思います。 >printf("%5d",value[i][j]); は →PRINT USING " #####;value[i][j]" 書き方間違ってますか?
- buriburi3
- ベストアンサー率44% (353/792)
分からないのは構文だけでアルゴリズム他はわかっている事を前提に (1) print文の複数変数時の結合方法 3850秒は1時間4分10秒です。の場合 PRINT byou;"秒は";hh;"時間";mm;"分";ss;"秒です。" (2) PRINT USING文 #を使って出力桁数を揃える方法 10 FOR I=1 TO 9 20 PRINT USING " ##;I; 30 NEXT とすれば、1~9の数字がブランクを空けて二桁で表示されます。 (3) 入力 scanf("%d,%d",&in1,&in2,&in3,&in4) これ、C言語としても間違ってますが… 整数値 in1,in2,in3,in4を入力居したい場合。 INPUT in1,in2,in3,in4 入力する際には 1,2,3,4 のようにカンマ区切りに入力 文法解説は99BASICのヘルプとかを参考にすればよいと思いますよ。 http://www.sagami.ne.jp/tadaka/99Basic/ ※VISTAでも動きます。Windows7でも動くんじゃないかと思います。
お礼
回答ありがとうございます。 急いで組んだのでよく見ればいろいろ間違ってました。 scanf("%d %d %d %d",&in1,&in2,&in3,&in4); if(sum=100) { printf("ちょうど"); } else if(sum>100) { printf(""100より大きい"); } else { printf(""100より小さい"); } vistaでダウンロードしようとしたんですが、 アクセス拒否されました。 基本だとは思うので聞くのも恥ずかしいですが、 命令文の横に書いてある数字は どういう意味があるのでしょうか? あと、問2の >value[i][j]=(i+1)*(j+1); >printf("%5d",value[i][j]); この部分はn88 basicだとどう書けばいいのでしょうか? CASLだと掛け算できなかった気がしますが、 n88 basicの場合は掛け算は可能ですか?
お礼
回答ありがとうございます。 問2の問題で詰まっていて DIM A(i,j) PRINT "99 1 2 3 4 5 6 7 8 9" FOR I=1 TO 9 FOR J=1 TO 9 a(i,j)=(i+1)*(j+1) PRINT USING "##";A(i,j) NEXT J NEXT I これを実行すると a(i,j)=(i+1)*(j+1) の行で 文法エラーが発生するのですが エラーの理由として何が考えられますか? 教えていただけないでしょうか。