Нужно сделать программу, которая бы сопоставляла введённой математической формуле её название...
Я смог сделать только проверку на корректность введённой формулы, а что делать дальше - не знаю...
Вот что я пока что имею:
Код:
Код: Выделить всё
function proverka (s:ShortString): byte;
//функция проверяет правильность ввода функции
//kolvoskobok может быть отрицательным поэтому шотинт
var kolvoskobok:shortint;
i:byte;
begin
//проверяем первый символ
if s[1]='(' then kolvoskobok:=1 else
begin
kolvoskobok:=0;
if ( not (s[1] in ['a'..'z', '!', '0', '1']) ) then begin proverka:=1; exit; end;
end;
//проверяем последний символ
if s[length(s)] in ['&','+','-','~','@','|','/','!','('] then begin proverka:=length(s); exit; end;
proverka:=0;
//проверяем оставшиеся символы
for i:=2 to length(s) do
begin
if s[i]='(' then begin inc(kolvoskobok); if (s[i-1] in ['a'..'z',')','0','1']) then begin proverka:=i; exit; end; end
else if s[i]=')'then begin dec(kolvoskobok); if (s[i-1] in ['&','+','-','~','@','|','/','!','(']) then begin proverka:=i; exit; end; end
else if (s[i] in ['a'..'z','0','1']) then begin if (s[i-1] in ['a'..'z',')','0','1']) then begin proverka:=i; exit; end; end
else if (s[i] in ['&','+','-','~','@','|','/']) then begin if (s[i-1] in ['&','+','-','~','@','|','/','!','(']) then begin proverka:=i; exit; end; end
else if s[i]='!' then begin if (s[i-1] in ['a'..'z',')','!','0','1']) then begin proverka:=i; exit; end; end
else begin proverka:=i; exit; end;
end;
//проверяем количество скобок
if kolvoskobok 0 then proverka:=255;
end;Подскажите, пожалуйста, в каком направлении мне копать дальше?

Но если он через неделю сможет вслух воспроизвести идею алгоритма и ответить на каверзные вопросы про подбор функции сравнения - ставь зачёт не думая 