質問<2958>
「「pascalのプログラム」」
日付 2006/2/14
質問者 ゆう


次のプログラムで最後に出力される、u、vを数式(総和記号とnを用いる)で表せ。
program test(input,output);
var i,n,s,t:integer;
u,v:real;
begin
read(n);
s:=0;
t:=0;
i:=0;
while i<=n do
begin
s:=s+i;
t:=t+i*i;
i:=i+1
end;
u:=\(\frac{s}{n}\);
v:=\(\frac{t}{n}\);
writeln('n=',n,'のときu=',u);
writeln('n=',n,'のときv=',v)
end.

という問題です。
どうもpascalができなくわかりません。
どうか教えてください。よろしくお願いします。

★希望★完全解答★

お便り
日付 2006/2/17
回答者 naoya


久しぶりに来てみてみました・・・。

PASCALですが、特に難しい部分はないはずです。
とりあえず簡単に説明します。
・var
変数宣言。integerは整数型、realは実数型。
・read(dest)
inputから変数destに入力を読み込む。
・while [条件] do begin ... end;
[条件]が満たされている間は、begin...end間を実行し続ける。
・x:=y
代入です。xという変数に値yを代入します。
・writeln(...)
outputに1行書き出します。

さて、問題のプログラムですが、
iが0からnまでwhile doのbegin...endを繰り返してます。
sはもともと0のところにiを足していっているので、
n
s = 0 + 1 + 2 +…+ n = Σi
i=0
tはもともと0のところにi*iつまり\(i^{2}\)を足していっているので、
n
t = \(0^{2}\) + \(1^{2}\) + \(2^{2}\) +…+ \(n^{2}\) = Σ\(i^{2}\)
i=0
そして、whileループを抜けたあとで、
u,vはそれぞれs,tをnで割ったものになっているので、
n
u = Σ\(\frac{i}{n}\)
i=0

n
v = Σ(\(i^{2}\))/n
i=0

となります。