令和元年秋期午後問8
Yuさん
(No.1)
すみません。質問なのですが、設問3のiについてのトレースで、AC[B[AB]AC]Aの、何故Bの部分のPatLenが+1されないのかがよく理解できませんでした。
新制度の擬似言語勉強の練習にと、旧制度の擬似言語をやるのは初めてで慣れていないので、まだ理解不十分なところがあるからなのでしょうが、分かりやすくお手柔らかに教えていただけると幸いです。
よろしくお願いいたします。
新制度の擬似言語勉強の練習にと、旧制度の擬似言語をやるのは初めてで慣れていないので、まだ理解不十分なところがあるからなのでしょうが、分かりやすくお手柔らかに教えていただけると幸いです。
よろしくお願いいたします。
2025.06.05 21:55
電タックさん
★FE ブロンズマイスター
(No.2)
疑似言語の文脈を無視して日本語的に書くと
1.英字を見つけた場合にはPatLenを1増やす。
ただし、開けカッコを見つけた以降の英字である場合には閉じカッコを見つけるまで増やさない。
2.開けカッコを見つけた場合にはPatLenを1増やす。
という感じになります。
「〜」までの間に英字を見つけても増やさないという条件(フラグ)を担っているのがModeという変数になります。
・Modeが1の間はカッコ内
・Modeが0の間はカッコ外
1.英字を見つけた場合にはPatLenを1増やす。
ただし、開けカッコを見つけた以降の英字である場合には閉じカッコを見つけるまで増やさない。
2.開けカッコを見つけた場合にはPatLenを1増やす。
という感じになります。
「〜」までの間に英字を見つけても増やさないという条件(フラグ)を担っているのがModeという変数になります。
・Modeが1の間はカッコ内
・Modeが0の間はカッコ外
2025.06.05 23:08
jjon-comさん
★FE プラチナマイスター
(No.3)
基本情報 令和元年 秋期 午後 問8
https://www.fe-siken.com/kakomon/01_aki/pm08.html
以下、No.2の内容をひたすら書き下すだけなのですけれど。
■i: 1, i≦OriginalPatLen, 1のループにより、
変数iは単調に1~13と変化して Pat[] を順に指していく。
しかし、設問3では特別な記号 '['と']' が使えるよう仕様拡張された。
文字配列 Pat[] の内容が "AC[BA]A[ABC]A" という13文字であるとき、
それは、Text[1]~Text[13] の13文字と照合するのではなく、
次のような Text[1]~Text[6] の6文字と照合する意味になる。
Text[1]が 'A'か?
Text[2]が 'C'か?
Text[3]が 'B'か'A'か?
Text[4]が 'A'か?
Text[5]が 'A'か'B'か'C'か?
Text[6]が 'A'か?
〔プログラム3〕の
■i: 1, i≦OriginalPatLen, 1のループの意味を日本語で書き下すと次のようになる。
変数Modeは、0のときは「[]の外」、1のときは「[]の内側」を意味している。
・PatLen←0
・Mode←0
i=1 'A' Mode=0なのでPatLenは増え 1に。「Text[1]が'A'か?」
i=2 'C' Mode=0なのでPatLenは増え 2に。「Text[2]が'C'か?」
i=3 '[' Mode=0なのでPatLenは増え 3に。Mode←1 にする
i=4 'B' Mode≠0なのでPatLenは増えない。「Text[3]が'B'か?」
i=5 'A' Mode≠0なのでPatLenは増えない。「Text[3]が'A'か?」
i=6 ']' Mode≠0なのでPatLenは増えない。Mode←0 に戻す
i=7 'A' Mode=0なのでPatLenは増え 4に。「Text[4]が'A'か?」
i=8 '[' Mode=0なのでPatLenは増え 5に。Mode←1 にする
i=9 'A' Mode≠0なのでPatLenは増えない。「Text[5]が'A'か?」
i=10 'B' Mode≠0なのでPatLenは増えない。「Text[5]が'B'か?」
i=11 'C' Mode≠0なのでPatLenは増えない。「Text[5]が'C'か?」
i=12 ']' Mode≠0なのでPatLenは増えない。Mode←0 に戻す
i=13 'A' Mode=0なのでPatLenは増え 6に。「Text[6]が'A'か?」
https://www.fe-siken.com/kakomon/01_aki/pm08.html
以下、No.2の内容をひたすら書き下すだけなのですけれど。
■i: 1, i≦OriginalPatLen, 1のループにより、
変数iは単調に1~13と変化して Pat[] を順に指していく。
しかし、設問3では特別な記号 '['と']' が使えるよう仕様拡張された。
文字配列 Pat[] の内容が "AC[BA]A[ABC]A" という13文字であるとき、
それは、Text[1]~Text[13] の13文字と照合するのではなく、
次のような Text[1]~Text[6] の6文字と照合する意味になる。
Text[1]が 'A'か?
Text[2]が 'C'か?
Text[3]が 'B'か'A'か?
Text[4]が 'A'か?
Text[5]が 'A'か'B'か'C'か?
Text[6]が 'A'か?
〔プログラム3〕の
■i: 1, i≦OriginalPatLen, 1のループの意味を日本語で書き下すと次のようになる。
変数Modeは、0のときは「[]の外」、1のときは「[]の内側」を意味している。
・PatLen←0
・Mode←0
i=1 'A' Mode=0なのでPatLenは増え 1に。「Text[1]が'A'か?」
i=2 'C' Mode=0なのでPatLenは増え 2に。「Text[2]が'C'か?」
i=3 '[' Mode=0なのでPatLenは増え 3に。Mode←1 にする
i=4 'B' Mode≠0なのでPatLenは増えない。「Text[3]が'B'か?」
i=5 'A' Mode≠0なのでPatLenは増えない。「Text[3]が'A'か?」
i=6 ']' Mode≠0なのでPatLenは増えない。Mode←0 に戻す
i=7 'A' Mode=0なのでPatLenは増え 4に。「Text[4]が'A'か?」
i=8 '[' Mode=0なのでPatLenは増え 5に。Mode←1 にする
i=9 'A' Mode≠0なのでPatLenは増えない。「Text[5]が'A'か?」
i=10 'B' Mode≠0なのでPatLenは増えない。「Text[5]が'B'か?」
i=11 'C' Mode≠0なのでPatLenは増えない。「Text[5]が'C'か?」
i=12 ']' Mode≠0なのでPatLenは増えない。Mode←0 に戻す
i=13 'A' Mode=0なのでPatLenは増え 6に。「Text[6]が'A'か?」
2025.06.06 18:25
Yuさん
(No.4)
自分なりに見直してみたりしましたら、理解することができました。
返信して答えていただいた方々は本当にありがとうございました。
返信して答えていただいた方々は本当にありがとうございました。
2025.06.12 09:36
広告
返信投稿用フォーム
スパム防止のためにスレッド作成日から40日経過したスレッドへの投稿はできません。
広告