HOME»基本情報技術者試験掲示板»平成27年秋期午後問8 (b)
投稿する
そうです。
「PPat=1 か? 真偽を答えなさい」
という命令が実行されたと考えてください。
実行しないと真偽が出てきません。
平成27年秋期午後問8 (b) [2240]
koさん(No.1)
https://www.fe-siken.com/kakomon/27_aki/pm08.html
(b)の答えがPatLen-Iとなるのはどうしてですか?
本文のPatの例ACABを例に取ってもSkipの値がうまく決定されないんですが
(b)の答えがPatLen-Iとなるのはどうしてですか?
本文のPatの例ACABを例に取ってもSkipの値がうまく決定されないんですが
2020.03.23 14:56
koさん(No.2)
あと設問2の(d)が7となる理由もわからないです。
PPatが1になりときなんて、最後まで一致してる時だから
答えは1では無いんですか?
PPatが1になりときなんて、最後まで一致してる時だから
答えは1では無いんですか?
2020.03.23 15:36
QMさん(No.3)
★FE ゴールドマイスター
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回実行して終わり。
「その文字が、検索文字列の末尾から何文字目に現れるかを数えた文字数から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回分の実行がされたと
、という理解でよろしいですか?
ただ1点だけ、
条件式(今回の場合だと、PPat=1)が、真になっていなかったとしても、
条件式に対して偽の判断が行われたのだから、βは1回分の実行がされたと
、という理解でよろしいですか?
2020.03.23 18:23
QMさん(No.5)
★FE ゴールドマイスター
> 条件式(今回の場合だと、PPat=1)が、真になっていなかったとしても、
> 条件式に対して偽の判断が行われたのだから、βは1回分の実行がされたと
> 、という理解でよろしいですか?
そうです。
「PPat=1 か? 真偽を答えなさい」
という命令が実行されたと考えてください。
実行しないと真偽が出てきません。
2020.03.23 20:20
koさん(No.6)
ありがとうました
モヤモヤが晴れました(^^)
モヤモヤが晴れました(^^)
2020.03.24 09:00