Copyright (C) IOI日本委員会 1996. All rights reserved.


問題2.

 下記のプログラムは、問題1のプログラムと同じ結果を出力する。
空欄に式を入れて、プログラムを完成させよ。 [1点]


QuickBASICプログラム(2)

DEFINT A-Z
DECLARE SUB compute (a, b, x, y, d)

    PRINT "a,b="; : INPUT a, b
    CALL compute((a), (b), x, y, d)
    PRINT a; "*";
    IF x >= 0 THEN PRINT x;  ELSE PRINT "("; x; ")";
    PRINT "+"; b; "*";
    IF y >= 0 THEN PRINT y;  ELSE PRINT "("; y; ")";
    PRINT "="; d
END

SUB compute (a, b, x, y, d)
    IF b = 0 THEN x = 1: y = 0: d = a: EXIT SUB
                  -------     -------
    CALL compute(| (a) |,  | (b) |, x1, y1, d)
                  -------     -------
    x = y1: y = x1 - INT(a / b) * y1
END SUB


Cプログラム(2)

#include <stdio.h>

void compute(int a, int b, int *x, int *y, int *d)
{
    int x1,y1;
   
    if (b==0) { *x = 1; *y = 0; *d = a; return; }
             -------   -------
    compute(| (a) |,| (b) |,&x1,&y1,d);
             -------   -------
    *x = y1; *y = x1-(a/b)*y1;
}

void main()
{
    int a,b,x,y,d;

    printf("a,b="); scanf("%d%d", &a,&b);
    compute(a,b,&x,&y,&d);
    printf("%d*", a);
    if (x>=0) printf("%d", x); else printf("(%d)", x);
    printf("+%d*", b);
    if (y>=0) printf("%d", y); else printf("(%d)", y);
    printf("=%d\n", d);
}


Pascalプログラム(2)

program problem2;
var a,b,x,y,d:integer;

    procedure compute(a,b:integer; var x,y,d:integer);
    var x1,y1:integer;
    begin
        if b=0 then begin x := 1; y := 0; d := a; exit end;
                 -------   -------
        compute(| (a) |,| (b) |,x1,y1,d);
                 -------   -------
        x := y1; y := x1-(a div b)*y1 
    end; {compute}

begin
    write('a,b='); readln(a,b);
    compute(a,b,x,y,d);
    write(a,'*');
    if x>=0 then write(x) else write('(',x,')');
    write('+',b,'*');
    if y>=0 then write(y) else write('(',y,')');
    writeln('=',d)
end.


JOI'96へ戻る

JOIホームページへ戻る