• 締切済み

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の解説付きだとありがたいです。

みんなの回答

回答No.5

始めの DIM A(I,J) は配列エリアの確保文なので、これ以前にi,jの代入分が無ければ、I=0 : J=0 です。したがって、A(0,0)しか存在しません。そこで、FOR文の始めは I=1:J=1 ですから、最初で「配列が存在しない」エラーとなります。 したがって、始めのDIMは DIM A(9,9)です。

回答No.4

間違ってます。 PRINT USING " #####";value[i,j] でもよいですが、本当は 間違ってます。 PRINT USING " #####";value(i,j)

wakivv
質問者

お礼

回答ありがとうございます。 問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) の行で 文法エラーが発生するのですが エラーの理由として何が考えられますか? 教えていただけないでしょうか。

  • buriburi3
  • ベストアンサー率44% (353/792)
回答No.3

>→PRINT USING " #####;value[i][j]" >書き方間違ってますか? 間違ってます。 PRINT USING " #####";value[i][j]

wakivv
質問者

お礼

ありがとうございます。 文法でわからないところはありましたが 問1と問3は出来ました。

  • buriburi3
  • ベストアンサー率44% (353/792)
回答No.2

>命令文の横に書いてある数字は 行番号です。 N88BASICはLEVEL3ベースのBASICインタプリタなので行番号が必要です。 >CASLだと掛け算できなかった気がしますが CASLはアセンブリ言語ですが? BASICはFORTRANを初心者向けに再編したインタプリタで 基本文法はFORTRANに酷似していますし、掛け算も勿論行えます。 >printf("%5d",value[i][j]); 5文字に揃えるにはPRINT USING文を使います。 BASICのPRINT文は ; で終わると改行しませんので ;は不要です。

wakivv
質問者

お礼

何度も回答ありがとうございます。 もう一度勉強し直したいと思います。 >printf("%5d",value[i][j]); は →PRINT USING " #####;value[i][j]" 書き方間違ってますか?

  • buriburi3
  • ベストアンサー率44% (353/792)
回答No.1

分からないのは構文だけでアルゴリズム他はわかっている事を前提に (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でも動くんじゃないかと思います。

wakivv
質問者

お礼

回答ありがとうございます。 急いで組んだのでよく見ればいろいろ間違ってました。 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の場合は掛け算は可能ですか?

関連するQ&A

  • プログラム作成が出来ません

    プログラム作成の課題でエラーが出て進めません (1)~(3)までだけなら作成できるのですがどうしても(4) を表示させることができません^^; (1)3~99までの奇数を7*7の2次元配列に読み込み表示 (2)(1)の配列の行と列を入れ替えたものを表示 (3)全要素の平均 (4)要素の中から9の倍数を選び出し表示 添削よろしくお願いします。 #include <stdio.h> main() { int a[7][7]; int i,j,ave,sum; int c; for(i=0; i<7; ++i) { for(j=0; j<7; ++j) { a[i][j] =3+(j*2)+(i*14); } } for(i=0; i<7; ++i) { for(j=0; j<7; ++j) { for(c=0; c<49; ++c) { if((3+(j*2)+(i*14))%9==0) { c=3+(j*2)+(i*14); } } } } sum=0; for(i=0; i<7; ++i) { for(j=0; j<7; ++j) { sum=sum+a[i][j]; } } ave=sum/7/7; for(i=0; i<7; ++i) { for(j=0; j<7; ++j) { printf( "%2d ", a[i][j] ); } printf( "\n" ); } printf("\n"); for(i=0; i<7; ++i) { for(j=0; j<7; ++j) { printf( "%2d ", a[j][i] ); } printf( "\n" ); } printf("\n"); printf("average=%d\n",ave); printf("\n"); for(c=0; c<49; ++c) { printf("%d",c); } } 長々と失礼しました・・・

  • 2次元配列を使ったC言語の九九表を作りたいんですが、方法がわかりません。

    C言語で、九九の表を作っているのですが2次配列を使わないでの方法なら出来るんですが、 2次配列を使うと出来なくなってします。 下記のように途中まで組んだのですが、どうしてもエラーがでてしまいます。 #include <stdio.h> int main(void) { int i,j,a[9][9]; printf(" "); for(i=1; i<=9; i++) printf("%3d", i); printf("\n"); for(i=0; i<9; i++){ for(j=0; j<9; j++) a[i][j]= {1,2,3,4,5,6,7,8,9},{2,4,6,8,10,12,14,16,18},{3,6,9,12,15,18,21,24,27},{4,8,12,16,20,24,28,32,36},{5,10,15,20,25,30,35,40,45,6,12,18,24,30,36,42,48,54,7,14,21,28,35,42,49,56,63},{8,16,24,32,40,48,56,64,72},{9,18,27,36,45,54,63,72,81} }; for(i=0; i<9; i++){ printf("%3d", i+1); for(j=0; j<9; j++) printf("%3d",a[9][9]); printf("\n"); } return 0; } とやったのですが…以下に書く部分が間違っているようで。 #include <stdio.h> int main(void) { int i,j,a[9][9]; printf(" "); for(i=1; i<=9; i++) printf("%3d", i); printf("\n"); for(i=0; i<9; i++){ for(j=0; j<9; j++) a[i][j]=□ } for(i=0; i<9; i++){ printf("%3d", i+1); for(j=0; j<9; j++) printf("%3d", □); printf("\n"); } return 0; } 色々調べたり、少しずつ変えながら試しているのですが、できません。 どなたかわかるかたいらっしゃいますか。間違いがわかりません… 配列を使用しなくても出来ることは、わかるのですが、配列を使うバージョンでもできるようになりたいんです。 私がしようとおもっているのは、81個分の値を先に計算し、9×9の2次元配列に格納し、次に81個の配列要素の値を出力したいのですが、 間違いと方法がわかる方いらっしゃいませんか。

  • ポインタ・構造体・並び替え

    http://www9.plala.or.jp/sgwr-t/c/Q/ens15-3.html ↑のページの問2のプログラムを #include <stdio.h> typedef struct data{ int number; int subject[4]; int sum; }data_t; int get_sum(data_t); int main(void) { data_t st[5]={{1001,85,74,63,90}, {1002,78,65,70,62}, {1003,89,92,88,76}, {1004,32,48,66,25}, {1005,92,76,81,98}, }; data_t *p; data_t q; int i,j; for(i=0;i<5;i++) { p=&st[i]; p->sum=get_sum(st[i]); } for(i=0;i<3;i++) { for(j=0;j<3-i;j++) { if((p+j)->sum<(p+j+1)->sum) { q=*(p+j); *(p+j)=*(p+j+1); *(p+j+1)=q; } } } for ( i = 0; i < 5; i++ ) { printf( "%4d ", ( p+i )->number ); for ( j = 0; j < 4; j++ ) printf("%4d ", ( p+i )->subject[j] ); printf( " %4d\n", ( p+i )->sum ); } return 0; } int get_sum(data_t data) { data_t *p=&data; int i,sum=0; for(i=0;i<4;i++) { sum+=p->subject[i]; } return sum; } と、作ってみたのですが、最高点の1005が一番上に来るけど、それ以外が正しく表示されません。 どこを直せばいいでしょうか? よろしくお願いします。

  • エラーの意味が…

    自分でプログラムを打ち、コンパイルしてみたんですけど 「c:10:警告:incompatible implicit declaration of built-in function 'printf'」とエラーが出てきました。 自分なりに10行目[ printf("%d :",b[i]); ]をいじってみたりは したのですが、上手くいきません。 いったいドコがおかしいのでしょうか? ご指導よろしくお願いします<(_ _)> ↓コレがそのプログラムです。 *************** int main(void){ int score[3][4]; int i,j,sum[3]={0}; score[0][0]=70; score[0][1]=80; score[0][2]=75; score[0][3]=60; score[1][0]=75; score[1][1]=83; score[1][2]=70; score[1][3]=70; score[2][0]=60; score[2][1]=76; score[2][2]=70; score[2][3]=55; char b[]="ABC"; for(i=0; i<3; i++){ printf("%d :",b[i]); for(j=0; j<4; j++){ printf("%3d",score[i][j]); sum[i]+=score[i][j];} printf(" : sum=%d, ave=%5.2f\n",sum[i],(float)sum[i]/4); } return 0; }

  • n個の要素を持つ配列xをシェルソートで昇順に整列

    穴埋め問題ですが、for文の j -= k の考えで立ち止まります。 #include <stdio.h> #define swap(X, Y) 【 1 】 ← X ^= Y, Y ^= X, X ^= Y void shell(int x[ ], int n); void main() {     int x[12] = {23, 67, 54, 82, 13, 28, 55, 61, 50, 32, 29, 44};     int n = 12, i ;     printf("配列(整列前)x => ");     for( i = 0; i < n - 1; i++ )         printf("%d, ",x[ i ]);     printf("%d\n",x[ i ]);       shell(x, n);     printf("配列(整列後)x => ");     for( i = 0; i < n - 1; i++ )         printf("%d, ",x[ i ]);     printf("%d\n",x[ i ]); } void shell(int x[ ], int n) {     int i, j, k = n ;     while( 【 2 】 ){ ← k > 0         【 3 】 ← k /= 2;         for( i = 0; 【 4 】; i++)             for( j = i; 【 5 】; j -= k)               swap(x[j], x[j + k]);     } } 【 1 】【 2 】は自信があるのですが【 3 】はあまり自信がないです。 【 4 】と【 5 】はどうすれば出来ますか教えてください。お願いします。

  • お願いします!!!プログラミングについて。

    お願いします!!!プログラミングについて。 次の文が実行されると何がどのようにプリントされるか。何もプリントされない時は「なし」と記せ。 また、途中に「ブランク」が入る場合は、”b”と記せ。 (1) printf("i=%d j=%lf\n", 1/2,1/3); (2) x = 0.5; y= 1e0/3e0; printf("x = %7.3f, y = %12.5e\n", x, y); */ (3) i = 2; j = 3; printf("%d", i==2); (4) int sum1(i){ int s = 0; return s += i; } int sum2(i){ static int s = 0; return s += i; } main(){ int s1, s2, i; for(i=1;i<=10;i++){ s1 =sum1(i); s2 = sum2(i);} printf("%d %d\n",s1,s2); } (5) int mtx[4][3] = {{1,2,3},{4,5,6},{7,8,9},{-1,-2,-3}}; int i,j,rtot,ctot[3]={0,0,0},stot=0; for(i=0,i<4,i++){ rtot = 0; for(j=0;j<3;j++){ rtot += mtx[i][j] ctot[j] += mtx[i][j]; stot += mtx[i][j]; printf("%3d ",mtx[i][j]); } printf(" %3d\n",rtot); } printf("\n"); for(j=0;j<3;j++) printf("%3d ",ctot[j]); printf(" %3d\n",rtot); この5問をプログラミングに詳しい方教えてください!切実です。。 一つだけでも構いません!よろしくお願いします。

  • お願いします!!!プログラミングについて。

    お願いします!!!プログラミングについて。 次の文が実行されると何がどのようにプリントされるか。何もプリントされない時は「なし」と記せ。 また、途中に「ブランク」が入る場合は、”b”と記せ。 (1) printf("i=%d j=%lf\n", 1/2,1/3); (2) x = 0.5; y= 1e0/3e0; printf("x = %7.3f, y = %12.5e\n", x, y); */ (3) i = 2; j = 3; printf("%d", i==2); (4) int sum1(i){ int s = 0; return s += i; } int sum2(i){ static int s = 0; return s += i; } main(){ int s1, s2, i; for(i=1;i<=10;i++){ s1 =sum1(i); s2 = sum2(i);} printf("%d %d\n",s1,s2); } (5) int mtx[4][3] = {{1,2,3},{4,5,6},{7,8,9},{-1,-2,-3}}; int i,j,rtot,ctot[3]={0,0,0},stot=0; for(i=0,i<4,i++){ rtot = 0; for(j=0;j<3;j++){ rtot += mtx[i][j] ctot[j] += mtx[i][j]; stot += mtx[i][j]; printf("%3d ",mtx[i][j]); } printf(" %3d\n",rtot); } printf("\n"); for(j=0;j<3;j++) printf("%3d ",ctot[j]); printf(" %3d\n",rtot); この5問をプログラミングに詳しい方教えてください!切実です。。1問だけでも構いませんのでよろしくお願いします。

  • C言語の配列について

    配列を20 定義し値を入力して合計値を出したいのですがどうすればよいのでしょうか 下のソースでエラーはおこりませんでした 何がちがうのでしょうか #include <stdio.h> int main() { int a[20]={}; int i, sum; printf("整数を入力してください:"); scanf("%d",&a); printf("\n"); for (i = 0; i < 10; i++) { sum += a[i]; } printf("sum= %d\n", sum); return 0; }

  • C言語で3次元配列の課題をしています。

    C言語で3次元配列の課題をしています。 5人の学生の3科目(国数英)の点数を前期と後期の2回分について三次元配列に入力し、各学生の前期と後期の合計と前・後期の合計を求めるプログラムです。 配列に数値を格納するあたりまでは分かったものの、そこから先がよくわからなくなってしまいました。どなたか解説とともに、成績の出力の仕方を教えていただけないでしょうか。for文を使えばいいというのはわかりますが・・・。 以下に出来た部分までのソースを載せておきます。まだ未熟な上、変なミスがあるかもしれません。 #include <stdio.h> main() { /*配列を宣言*/ int score[0][3][5],i,j,k; int total,sum[2][5]; /*配列に成績を入力*/ for(i=0;i<2;i++){ for(j=0;j<3;j++){ for(k=0;k<5;k++){ printf("score[%d][%d][%d] = ",i,j,k); scanf("%d", &score[i][j][k]); } } } /*合計を計算する*/ for(i=0;i<5;i++){ for(j=0;j<2;j++){ total=0; for(k=0;k<3;k++){ total = total + score[i][j][k]; } sum[i][k]=total; } sum[2][k]=sum[0][k]+sum[1][k]; } /*出力する*/ /*??*/ } ※三次元配列のscoreの始めの[]は、0が前期成績、1が後期成績を格納する部分です。

  • データのカウント方法について(C言語初心者です)

     二次元配列(10×10)の中のある特定のデータx[i][j][1]の総数を出力するというプログラムを作っています。  しかし、これだとデータがうまくカウントされません。x[i][j][1]は他の関数内で計算するようにしています。 int t, sum=0; for(t=0;t<=1000;t++){ for(i=0;i<N;i++){ for(j=0;j<N;j++){ sum=sum+x[i][j][1];      } } } printf("%d ?n", sum);  何が悪いのでしょうか?教えて頂けたら幸いです。

専門家に質問してみよう