インホテックサーブ問29

午前試験免除制度対応!基本情報技術者試験のeラーニング【独習ゼミ】
まきさん  
(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}

これでトレースはあっているのでしょうか?
分かる方教えてください
2024.08.18 09:09
まきさん  
(No.2)
問題は素数を格納するプログラムです
2024.08.18 09:10
jjon-comさん 
FE ゴールドマイスター
(No.3)
いいえ,間違っています。
i=3 のとき,
flg←1
j←3
whlie ((flg=1) and (j≦(i/2))
3≦(3/2) が False ですからこのwhile内部はいっさい実行されず,endwhileへと進み,
endwhile
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
2024.08.19 02:04
jjon-comさん 
FE ゴールドマイスター
(No.4)
ちなみに。
インホテックサーブ ではなく インフォテック・サーブ が正しいです。
ローマ字入力で日本語変換しているなら,
HO ではなく FO とキータイプすることで フォ と日本語入力できます。
2024.08.19 02:11
jjon-comさん 
FE ゴールドマイスター
(No.5)
No.1に登場する次の ※ の箇所,表記が間違っています。
whlie ((flg=1) and (j<=(i/2))
       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))の部分が穴埋め箇所だったのですが、
なぜこれが適解なのとお聞きします。
よろしくお願いいたします。
2024.08.19 06:35
boyonboyonさん 
FE シルバーマイスター
(No.8)
横から失礼します。
>(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さん 
FE ゴールドマイスター
(No.10)
No.8の件,電卓を持ち出すのが面倒なら,
「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

返信投稿用フォーム

スパム防止のためにスレッド作成日から30日経過したスレッドへの投稿はできません。

その他のスレッド


Pagetop