平成27年秋期午後問8  (b)

午前試験免除制度対応!基本情報技術者試験のeラーニング【独習ゼミ】
koさん  
(No.1)
https://www.fe-siken.com/kakomon/27_aki/pm08.html
(b)の答えがPatLen-Iとなるのはどうしてですか?
本文のPatの例ACABを例に取ってもSkipの値がうまく決定されないんですが
2020.03.23 14:56
koさん  
(No.2)
あと設問2の(d)が7となる理由もわからないです。
PPatが1になりときなんて、最後まで一致してる時だから
答えは1では無いんですか?
2020.03.23 15:36
QMさん 
FE ゴールドマイスター
(No.3)
b は、プログラムの説明の、(2)の②に対応する処理です。
「その文字が、検索文字列の末尾から何文字目に現れるかを数えた文字数から1を引いた値」

長さPatLenの文字列の、前からI文字目は、末尾から数えると何文字目か。
前から1文字目なら、末尾からだと PatLen
2文字目なら PatLen-1
3文字目なら PatLen-2
  ・・・
I文字目なら PatLen-I+1

ここから1を引くので PatLen-I です。


d は、βの部分ですね。
PPatが1になるのは一致した1回ですが、問題は条件が成立した回数ではなく、
成立しなかった回も含めて「1になっているかどうかの確認」をした回数を聞いています。

Text[PText] = Pat[PPat] つまり文字が一致した場合に、
Patの先頭まで来た(全部一致した)かどうかを確認しています。

動作をトレースすると。
まず Textの 1~4と比較。
4 がいきなり不一致なので、4文字ずらして5~8へ。
8, 7, 6 と一致するので、ここでβは 3回実行。
5が一致しないので、末尾のCのskip値を使って、4文字ずらして9~12へ。
ここで4文字一致するので、βを 4回実行して終わり。
2020.03.23 16:56
koさん  
(No.4)
回答していただき大変助かります。ありがとうございます!!
ただ1点だけ、
条件式(今回の場合だと、PPat=1)が、真になっていなかったとしても、
条件式に対して偽の判断が行われたのだから、βは1回分の実行がされたと
、という理解でよろしいですか?
2020.03.23 18:23
QMさん 
FE ゴールドマイスター
(No.5)
> 条件式(今回の場合だと、PPat=1)が、真になっていなかったとしても、
> 条件式に対して偽の判断が行われたのだから、βは1回分の実行がされたと
> 、という理解でよろしいですか? 

そうです。
「PPat=1 か? 真偽を答えなさい」
という命令が実行されたと考えてください。
実行しないと真偽が出てきません。
2020.03.23 20:20
koさん  
(No.6)
ありがとうました
モヤモヤが晴れました(^^)
2020.03.24 09:00

返信投稿用フォーム

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

その他のスレッド


Pagetop