No.1
- 回答日時:
キーになるのはwhile構文でしょう。
whileは繰り返しです。
この場合、while i<=n doですから、i≦nのとき以下のことを実行する、ということでしょう。
その他のところはお分かりでしょうか。
No.2
- 回答日時:
それは見るからに PASCAL (あるいは Windows の Delphi や Linux の
Kylix でコンパイル可能な言語) だと思うんですが、そうですよね?
で、そうだとして、PASCAL の文法はどこまでわかってますか?
たとえば i := i + 1; に関してはなにを意味するかわかってますか?
もしこのレベルがわからないとすると入門書を読んだ方が早いと
思います。そのレベルの事から全てをここで説明すると長くなり
過ぎると思うので、私には書く気力が起きません。
No.3
- 回答日時:
Pascalのプログラムですね、小生はパスカルは知りませんが、Cを長くやっていますので大体のことは分かりますので、各行の説明を書いておきます。
program test(input,output) プログラム名
var i,j,n:integer; 変数宣言:整数
begin プログラムの始まり
read(n); データnの読み込み
s:=0; sに0を代入(初期化)
i:=1; iに1を代入
j:=1; jに1を代入
while i <=n do iがn以下なら繰り返せ
begin 繰り返しの始まり
s:=s+j*i sにjとiを掛けてsに代入
i:=i+1; iを1増加させる
j:=j*(-1) jの符号を変える(正なら負へ、負なら正へ)
end 繰り返しの終わり
writeln('n=' ,n:3,' のときs=',s:5) 出力する。nは3桁、sは5桁で。
end プログラムの終わり
nに5を入力したときは、s、i、jは次のように変化していきます。nは変化しません。
s=0
i=1
j=+1
iは1つづつ増加していき、
jは-1と+1交互に変化します。
前の値がsの計算に使用されます。
s=s+j*i=0+1*1=1
i=i+1=1+1=2
j=j*(-1)=1*(-1)=-1
s=s+j*i=1+(-1)*2=-1
i=i+1=2+1=3
j=j*(-1)=(-1)*(-1)=+1
s=s+j*i=-1+(+1)*3=2
i=i+1=3+1=4
j=j*(-1)=(+1)*(-1)=-1
s=s+j*i=2+(-1)*4=-2
i=i+1=4+1=5
j=j*(-1)=(-1)*(-1)=1
s=s+j*i=-2+(-1)*(-2)=0
i=i+1=2+1=6
j=j*(-1)=(+1)*(-1)=1
iがn=5以下でないから繰り返しから脱出する。
writeln('n=' ,n:3,' のときs=',s:5)
これにより、次のように出力されます。
n= 5のときs= 0
パスカルは知りませんので、自信なしです。
No.4
- 回答日時:
入力したnに対して
S=1-2+3-4+5-....+((-1)^(n-1))*n
を出力させるプログラムでしょう
結果は、
1,-1,2,-2,3,-3,4,-4,5,-5....
となります。
No.5ベストアンサー
- 回答日時:
皆さんの回答が、ヒントだけ差し上げようというご配慮からだと思いますが、細切れになっちゃったみたいなので、僭越ながら。
Pascalにしちゃ、セミコロンが抜けてたりピリオドが無かったりしますけど、まいいか。
Assertionという考え方を使います。Assertionってのは「文と文の間で成り立っている論理式」のことです。
{nは自然数}
s:=0;
i:=1;
j:=1;
{s=0, i=1, j=1, nは自然数}
while i <=n do
{i≦n, nは自然数}
begin
s:=s+j*i
i:=i+1;
j:=j*(-1)
end
{i>n, nは自然数}
まずここまでは自明でしょう。
次にループの中では invariant assertion、つまり繰り返し中いつでも成り立つ論理式を考える。ここで、
i:=i+1;
のような代入は、繰り返しの回数を数えるカウンターmを追加して
i(m):=i(m-1)+1;
という意味だと解釈してやります。すると
s:=0;
i:=1;
j:=1;
m:=0;
{s(0)=0, i(0)=1, j(0)=1, m=0,nは自然数}
while i <=n do
{i(m)≦n,nは自然数}
begin
m:=m+1
s:=s+j*i
i:=i+1;
j:=j*(-1)
{nは自然数, s(m)=s(m-1)+j(m-1)*i(m-1), i(m)=i(m-1)+1, j(m)=-j(m-1)}
end
さて、
i(0)=1, i(m)=i(m-1)+1
より
i(m) = m+1
であることが分かります。
それから
j(m) = (-1)^m
も自明ですね。従って
{s(0)=0, i(0)=1, j(0)=1, m=0,nは自然数}
while i <=n do
{i(m)≦n,nは自然数}
begin
m:=m+1
s:=s+j*i
i:=i+1;
j:=j*(-1)
{nは自然数, s(m)=s(m-1)+((-1)^(m-1))*m, i(m)=m+1, j(m)= (-1)^m}
end
いよいよミソの部分ですが、
s(0)=0
s(m)=s(m-1)+((-1)^(m-1))*m
という漸化式ですから、
s(m)= Σ((-1)^(k-1))*k (Σはk=1,2,....,m)
です。だから、
{s(0)=0, i(0)=1, j(0)=1, m=0,nは自然数}
while i <=n do
{i(m)≦n,nは自然数}
begin
m:=m+1
s:=s+j*i
i:=i+1;
j:=j*(-1)
{nは自然数,s(m)= Σ((-1)^(k-1))*k (Σはk=1,2,....,m), i(m)=m+1, j(m)=(-1)^m}
end
そしてループを抜けた時には
i(m)>n
が初めて成り立った訳です。そしてnは自然数なので、m=n だと分かります。ゆえに、
end
{s(n)= Σ((-1)^(k-1))*k (Σはk=1,2,....,n), i(n)=n+1, j(n)=(-1)^n),}
writeln('n=' ,n:3,' のときs=',s:5)
ということ。で、writelnで使うのはnとsだけですんで、i,jはどうでも良い。かくて
nと、Σ((-1)^(k-1))*k(Σはk=1,2,....,n) が印刷されることになる。
さて次に、s(n)は
s(n)=Σ((-1)^(k-1))*k(Σはk=1,2,....,n)=1-2+3-4+......n
という和です。2項づつ組にしてみると
●nが偶数の時
s(n) = (1-2)+(3-4)+....+((n-1)-n) = (-1)+(-1)+....+(-1) = -(n/2)
●nが奇数の時
s(n) = 1+(-2+3)+(-4+5)+.....+(-(n-1)+n) = 1+1+....+1 = (n+1)/2
だから、
nが偶数ならs(n) = -(n/2)
nが奇数ならs(n) = (n+1)/2
このs(n)が印刷されるということ。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
おすすめ情報