Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Шаблоны

Автор: Domen 10.11.2006 19:44

В первой строке вводятся два шаблона через пробел
*abb*c? ab?cd
требуется вывести любую минимальную подcтроку - решение.
* - любое количество символов или пусто
? - любой один символ
Длина одного шаблона - до 100 символов
Если в ответе возникла ситуация что надо вывести ? то выводить символ 'a'
Если решений нет - то 'Impossible'
Пример 1:
Ввод:
a? ?b
Вывод:
ab
Пример 2:
Ввод:
a?f*b ab?gtb
Вывод:
abfgtb
mega_chok.gif Как решить не используя Units & Procedure.

Автор: мисс_граффити 10.11.2006 20:11

http://homepages.compuserve.de/chasluebeck/practic_info8.htm Осталось только процедуры засунуть непосредственно в программу.
А можно по их алгоритму и без процедур написать.

Автор: klem4 10.11.2006 20:22

Вот что я наваял, надо проверять ...

Эти 2 теста прошла :

uses crt;

const

letters = ['a'..'z'];

a = 'a?f*b';
b = 'ab?gtb';


function GetResult: String;
var
i, j: Integer;
result: String;
begin

result := '';

i := 1;
j := 1;

while (i <= Length(a)) and (j <= length(b)) do begin

if (a[i] in letters) then begin

if ((b[j] in letters) and (a[i] = b[j])) or (b[j] = '?') then begin
result := result + a[i];
inc(i);
inc(j);
end

else if (b[j] = '*') then begin

while (a[i] in letters) and (i <= length(a)) do begin
result := result + a[i];
inc(i);
end;

inc(j);

end
else begin
inc(i);
inc(j);
end;

end // a in letters
else begin

if (a[i] = '?') and (b[j] in letters) then begin
result := result + b[j];
inc(i);
inc(j);
end
else begin
while (b[j] in letters) and (j <= length(b)) do begin
result := result + b[j];
inc(j);
end;
inc(i);
end;

end; // a not in letters

end;

GetResult := result;

end;

begin
clrscr;
writeln(GetResult);
readln;
end.



единственное по поводу 'Impossible' надо подумать. Если етсь еще тесты, давай, сочинять лень smile.gif