平成25年秋期午後問8の

吉田さん  
(No.1)
https://www.fe-siken.com/kakomon/25_aki/pm08.html

最初のループ  (Pindex<Plength) and (Pindex < 4) で、
Plaindata[0]にA、[1]にB、[2]にC、[3]にDが入るとします。
この時、Pindexの値は4ですよね。

その後、回答aのループをtrueで入り、
文字が一致するかどうか調べる  Plainddata[Pindex + Fitnum] ≠ b
のif文の時、Plaindata[Pindex + Fitnum]  は  4 + 0 で Plaindata[4]  になると思います。

 Plaindata[4]は何も値が入っていないのですが、falseでbreakで抜けるという流れで合っているのでしょうか。






2021.06.20 15:46
GinSanaさん 
FE・シルバーエキスパート
(No.2)
>この時、Pindexの値は4ですよね。
4なのはいいんですが、
while(Pindex < Plength){
どっちも4だから、falseでwhileループを抜けちゃって質問のルートまで話が進みません。

ま、ためしに抜けないために5文字にしてみましょう。
BEGIN{
    # Plaindata[0]にA、[1]にB、[2]にC、[3]にDが入るとします。
    Plaindata[0] = "A";
    Plaindata[1] = "B";
    Plaindata[2] = "C";
    Plaindata[3] = "D";
    Plaindata[4] = "E";
    Esym = "$";
    Plength = length(Plaindata);
    Pindex = 0;
    Cindex = 0;
    while(Pindex < Plength && Pindex < 4){
        Compresseddata[Cindex] = Plaindata[Pindex];
        Cindex++;
        Pindex++;
    }
    for(i in Compresseddata){
        print "Compresseddata["i"] : "Compresseddata[i];
    }
    for(i in Plaindata){
        print "Plaindata["i"] : "Plaindata[i];
    }
    print "Pindex : "Pindex;
    print "Plength : "Plength;
    while(Pindex < Plength){
        Maxfitnum = -1;
        Maxdistance = -1;
        Distance = 4;
        # a : Pindex-Distance≧0
        while(Distance <= 26 && Pindex - Distance >= 0){
            Fitnum = 0;
            # b : Plaindata[Pindex-Distance+Fitnum]
            print "Plaindata[Pindex + Fitnum] : Plaindata["Pindex" + "Fitnum"] : "Plaindata[Pindex + Fitnum];
            print "Plaindata[Pindex - Distance + Fitnum] : Plaindata["Pindex" - "Distance" + "Fitnum"] : "Plaindata[Pindex - Distance + Fitnum];
            if(Plaindata[Pindex + Fitnum] != Plaindata[Pindex - Distance + Fitnum]){
                print "break";
                break;
            }
            Fitnum++;
        }
        exit;
    }
}

このawkを実行すると

Compresseddata[0] : A
Compresseddata[1] : B
Compresseddata[2] : C
Compresseddata[3] : D
Plaindata[0] : A
Plaindata[1] : B
Plaindata[2] : C
Plaindata[3] : D
Plaindata[4] : E
Pindex : 4
Plength : 5
Plaindata[Pindex + Fitnum] : Plaindata[4 + 0] : E
Plaindata[Pindex - Distance + Fitnum] : Plaindata[4 - 4 + 0] : A
break

2021.06.20 17:21
吉田さん  
(No.3)
説明をしてくださったおかげで、勘違いをしていたことに気がつくことができました。

最初のループで、Plaindataにも[0][1][2][3]にデータが入っていくと勘違いしてました。
Plaindataには元からデータが入ってましたね。

GinSanaさん、ありがとうございます。
2021.06.21 23:23

返信投稿用フォーム

スパム防止のためにスレッド作成から30日以上経過したスレッドへの書き込みは禁止しています。

その他のスレッド


Pagetop