(* * * jmeno: pos * popis: paskalovska fce pos(sub, s) * level: 2 * * zadani: * Na vstupu jsou dva retezce A, B, najdete pozici prvniho * vyskytu retezce A v retezci B, pokud se A v B nevyskytuje, * vystup bude 0. Nepouzivejte pascalskou fci pos(); * * * input: * jedno zadani na dvou radcich radku, zadani ma tvar: *. Z: *. Z: * kde Z je cislo zadani. Posledni zadani ma cislo 0. * * output: *. Z:[pozice] * * soubory: * pos.pas, pos.out, pos.in * * au: vitas@popelka.ms.mff.cuni.cz * cp: gpl * *) var { cislo zadani } Z: Integer; { dvojtecka } dt: Char; A, B: String; a_len, b_len: Integer; i: Integer; res: Integer; {* * funkce zkontroluje jestli retezec x od pozice x_beg neni stejny jako y *} function je_stejne(var y, x: String; x_beg: Integer): Boolean; var i: Integer; begin { optimizmus: je to stejne, pokud ne tak :( } je_stejne := True; for i := 1 to length(y) do begin if y[i] <> x[x_beg + i - 1] then begin {* predcasne ukonceni cyklu: dal hledat * netreba, stejne se lisi. *} je_stejne := False; break; end end end; begin repeat read(Z, dt, dt, A); read(Z, dt, dt, B); a_len := length(A); b_len := length(B); {pesimisticky: nenasli jsme nic} res := 0; i := 1; {* dokud se a vleze do kocne b, a nebo jsme nenali * reseni *} while (i + a_len - 1 <= b_len) and (res = 0) do begin if B[i] = A[1] then {prvni pismeno sedi: to je nadejne} if je_stejne(A, B, i) then {sedi cele slovo} res := i; Inc(i); end; writeln(Z, ': ', res); until Z = 0; end.