質問<1021>2002/12/2
from=がっこの先生
「プログラム」


教えて下さい。

問1
次のプログラムは何をするものか説明せよ。

program test (input,output);
var   i,j,n,s:integer;
begin
  read(n);
  s:=0;
  i:=1;
  j:=1;
  while 1<=n do
    begin
      s:=s+j
      i:=i+1
      j:=j^*(-1)
    end;
  writeln('n=',n:3,'のときs=',s:5)
end.

問2
20桁の2つの正整数を与えると、加減乗算して印刷するプログラムをつくれ。
ただし、1つの20桁の正整数は配列に格納されるとする。

お願い致します。
※すいません。先ほどのプログラムの問題はbasicで書けと言う事です。


お便り2002/12/7
from=Tetsuya Kobayashi


(1) シンタックスエラー。何もしません。

(2) 恐ろしく汚いですが、動きます。

#include 

int main(int argc, char *argv[])
{
  int a[20], b[20], p[21], q1[21], q2[21], r[40], i, j;
  for (i=0; i<20; i++) { a[19-i]=argv[1][i]-48; b[19-i]=argv[2][i]-48; }
  printf("a = "); for (i=19; i>=0; i--) printf("%d", a[i]);
  printf("\nb = "); for (i=19; i>=0; i--) printf("%d", b[i]);
  for (i=0; i<=20; i++) { p[i]=0; q1[i]=0; q2[i]=0; }
  for (i=0; i<40; i++) r[i]=0;
  for (i=0; i<20; i++) {
    p[i]+=a[i]+b[i]; if (p[i]>=10) { p[i]-=10; p[i+1]++; }
    q1[i]+=a[i]-b[i]; if (q1[i]<0) { q1[i]+=10; q1[i+1]--; }
    q2[i]+=b[i]-a[i]; if (q2[i]<0) { q2[i]+=10; q2[i+1]--; }
  }
  printf("\na+b = "); for (i=20; i>=0; i--) printf("%d", p[i]); 
  printf("\na-b = ");
  if (q1[20]==0) { for (i=19; i>=0; i--) printf("%d", q1[i]); }
  else { printf("-"); for (i=19; i>=0; i--) printf("%d", q2[i]); }
  for (i=0; i<20; i++) { for (j=0; j<20; j++) { r[i+j]+=a[i]*b[j]; } }
  for (i=0; i<39; i++) { r[i+1]+=r[i]/10; r[i]=r[i]%10; }
  printf("\na*b = "); for (i=39; i>=0; i--) printf("%d", r[i]);
  printf("\n");
}

コンパイルして
./a (20桁) (20桁)
と叩いてみてください。ちゃんと計算してくれます。


お便り2003/1/21
from=phaos


数学の質問<1085>に問1の解答が載っています。