HOME»基本情報技術者試験掲示板»インホテックサーブ問29
投稿する
いつも詳しい解説ありがとうございます。
細かい点までご指摘ありがとうございます。
※の所はご指摘の通りです。ありがとうございます。
whlie ((flg=1) and (j<=(i/2))
flg=1 ※ 3 3/2(1余り1) (False)
解説ありがとうございます。流れが分かりました。
あとインフォテック・サーブ気を付けます
いつも解説ありがとうございます。
確かめてみます。ありがとうございます。
具体例みて
最大5000ですもんね。良く分かりました。ありがとうございます。
インホテックサーブ問29 [5565]
まきさん(No.1)
calcPrime(整数型:num)
整数型の配列:Prime←{}/要素数0の配列/
整数型:i,j,flg
primeの末尾に2を追加する
for(i,3~num,1)
if((i mod 2≠0))
flg←1
j←3
whlie((flg=1)and (a))
(if(i mod j =0))
flg←0
endif
(b)
endwhile
if(flg=1)
primeの末尾にiの値を追加する
endif
endif
endfor
return prime
答え
a(j(i<=i/2))
b j←j+2
トレース(3の場合)
calcPrime(整数型:num)
整数型の配列:Prime←{}/要素数0の配列/
整数型:i,j,flg
primeの末尾に2を追加する {2}
for(i,3~num,1)
if((i mod 2≠0))
3 2=1余り1 (True)
flg←1
j←3
whlie((flg=1)and (j<=(i/2))
flg←1 3 3/2(1余り1) (False)
(if(i mod j =0))
3 2 =1余り1 (False)
flg←0
endif
j←j+2
5 3+2
endwhile
if(flg=1)
flg←1(True)
primeの末尾にiの値を追加する
{2,3}
これでトレースはあっているのでしょうか?
分かる方教えてください
整数型の配列:Prime←{}/要素数0の配列/
整数型:i,j,flg
primeの末尾に2を追加する
for(i,3~num,1)
if((i mod 2≠0))
flg←1
j←3
whlie((flg=1)and (a))
(if(i mod j =0))
flg←0
endif
(b)
endwhile
if(flg=1)
primeの末尾にiの値を追加する
endif
endif
endfor
return prime
答え
a(j(i<=i/2))
b j←j+2
トレース(3の場合)
calcPrime(整数型:num)
整数型の配列:Prime←{}/要素数0の配列/
整数型:i,j,flg
primeの末尾に2を追加する {2}
for(i,3~num,1)
if((i mod 2≠0))
3 2=1余り1 (True)
flg←1
j←3
whlie((flg=1)and (j<=(i/2))
flg←1 3 3/2(1余り1) (False)
(if(i mod j =0))
3 2 =1余り1 (False)
flg←0
endif
j←j+2
5 3+2
endwhile
if(flg=1)
flg←1(True)
primeの末尾にiの値を追加する
{2,3}
これでトレースはあっているのでしょうか?
分かる方教えてください
2024.08.18 09:09
まきさん(No.2)
問題は素数を格納するプログラムです
2024.08.18 09:10
jjon-comさん(No.3)
★FE ゴールドマイスター
いいえ,間違っています。
i=3 のとき,
つまり,i=3 のときに次の箇所はトレースに登場しません。
i=3 のとき,
flg←1
j←3
whlie ((flg=1) and (j≦(i/2))
3≦(3/2) が False ですからこのwhile内部はいっさい実行されず,endwhileへと進み,j←3
whlie ((flg=1) and (j≦(i/2))
endwhile
if (flg=1)
primeの末尾にiの値を追加する{2,3}
endif
となります。if (flg=1)
primeの末尾にiの値を追加する{2,3}
endif
つまり,i=3 のときに次の箇所はトレースに登場しません。
flg←1 3 3/2(1余り1) (False)
(if(i mod j =0))
3 2 =1余り1 (False)
flg←0
endif
j←j+2
5 3+2
(if(i mod j =0))
3 2 =1余り1 (False)
flg←0
endif
j←j+2
5 3+2
2024.08.19 02:04
jjon-comさん(No.4)
★FE ゴールドマイスター
ちなみに。
インホテックサーブ ではなく インフォテック・サーブ が正しいです。
ローマ字入力で日本語変換しているなら,
HO ではなく FO とキータイプすることで フォ と日本語入力できます。
インホテックサーブ ではなく インフォテック・サーブ が正しいです。
ローマ字入力で日本語変換しているなら,
HO ではなく FO とキータイプすることで フォ と日本語入力できます。
2024.08.19 02:11
jjon-comさん(No.5)
★FE ゴールドマイスター
No.1に登場する次の ※ の箇所,表記が間違っています。
flg=1
変数flgの中身が1と等しいか? という判定。結果はTrueまたはFalse。
flg←1
変数flgに1を代入する。変数flgの中身を1で上書きする。True/Falseは設定しない。
と両者は意味が異なります。
質問者による他の箇所のトレース表記に倣うのなら,
上記の ※ の箇所は(変数flgの中身が1なので)
1=1 (True) のように表記すべきでしょう。
whlie ((flg=1) and (j<=(i/2))
flg←1 ※ 3 3/2(1余り1) (False)
if (flg=1)
flg←1(True) ※
flg←1 ※ 3 3/2(1余り1) (False)
if (flg=1)
flg←1(True) ※
flg=1
変数flgの中身が1と等しいか? という判定。結果はTrueまたはFalse。
flg←1
変数flgに1を代入する。変数flgの中身を1で上書きする。True/Falseは設定しない。
と両者は意味が異なります。
質問者による他の箇所のトレース表記に倣うのなら,
上記の ※ の箇所は(変数flgの中身が1なので)
1=1 (True) のように表記すべきでしょう。
2024.08.19 02:32
まきさん(No.6)
>jjon-comさん
いつも詳しい解説ありがとうございます。
細かい点までご指摘ありがとうございます。
※の所はご指摘の通りです。ありがとうございます。
whlie ((flg=1) and (j<=(i/2))
flg=1 ※ 3 3/2(1余り1) (False)
解説ありがとうございます。流れが分かりました。
あとインフォテック・サーブ気を付けます
2024.08.19 06:25
まきさん(No.7)
もうひとつ質問があります
whlie((flg=1)and (j<=(i/2))のところで
(j<=(i/2))の部分が穴埋め箇所だったのですが、
なぜこれが適解なのとお聞きします。
よろしくお願いいたします。
whlie((flg=1)and (j<=(i/2))のところで
(j<=(i/2))の部分が穴埋め箇所だったのですが、
なぜこれが適解なのとお聞きします。
よろしくお願いいたします。
2024.08.19 06:35
boyonboyonさん(No.8)
★FE シルバーマイスター
横から失礼します。
ですが、iの約数はi/2より大きくなることはないからです。(i自身は除く)
だから、i/2まで調べれば十分なのでj<=(i/2)となります。
>(j<=(i/2))の部分が穴埋め箇所だったのですが、
>なぜこれが適解なのとお聞きします。
ですが、iの約数はi/2より大きくなることはないからです。(i自身は除く)
だから、i/2まで調べれば十分なのでj<=(i/2)となります。
2024.08.19 09:12
まきさん(No.9)
>boyonboyonさん
いつも解説ありがとうございます。
確かめてみます。ありがとうございます。
2024.08.19 10:01
jjon-comさん(No.10)
★FE ゴールドマイスター
No.8の件,電卓を持ち出すのが面倒なら,
「10000の約数は」といったキーワードでGoogle検索すれば
の実例が分かります。
「10000の約数は」といったキーワードでGoogle検索すれば
> iの約数はi/2より大きくなることはない(i自身は除く)
の実例が分かります。
2024.08.19 14:01
まきさん(No.11)
>jjon-comさん
具体例みて
> iの約数はi/2より大きくなることはない(i自身は除く)
最大5000ですもんね。良く分かりました。ありがとうございます。
2024.08.19 19:11
まきさん(No.12)
少しずつでも進めていきます
2024.08.20 21:02