Помощь - Поиск - Пользователи - Календарь
Полная версия: Шаблоны
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Domen
В первой строке вводятся два шаблона через пробел
*abb*c? ab?cd
требуется вывести любую минимальную подcтроку - решение.
* - любое количество символов или пусто
? - любой один символ
Длина одного шаблона - до 100 символов
Если в ответе возникла ситуация что надо вывести ? то выводить символ 'a'
Если решений нет - то 'Impossible'
Пример 1:
Ввод:
a? ?b
Вывод:
ab
Пример 2:
Ввод:
a?f*b ab?gtb
Вывод:
abfgtb
mega_chok.gif Как решить не используя Units & Procedure.
мисс_граффити
Вот так нельзя? Осталось только процедуры засунуть непосредственно в программу.
А можно по их алгоритму и без процедур написать.
klem4
Вот что я наваял, надо проверять ...

Эти 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
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.