Другие языки программирования и технологии

ПОМОГИТЕ С ПАСКАЛЕМ!!!

Уравнение для пятиклассников представляет собой строку длиной 5 символов. Второй символ строки является либо знаком '+' (плюс) либо '-' (минус), четвёртый символ — знак '=' (равно). Из первого, третьего и пятого символов ровно два являются цифрами из диапазона от 0 до 9, и один — буквой x, обозначающей неизвестное.

Требуется написать программу, которая позволит решить данное уравнение относительно x
uses
Crt;
var
S: String;
a,b,c,o: Char;
x: Integer;

function CharToInt(C:Char): Integer;
var
Res: Integer;
begin
Res:= ord(C) - ord('0');
if (Res<0) or (Res>9) then begin
writeln('Error: '+C+' is not numeric!');
ReadKey;
halt(2); { exit program: 2 - device error }
end else
CharToInt:= Res
end;

begin
ClrScr;

Write('String: ');
Readln(S);

a:= S[1]; b:= S[3]; c:= S[5];
o:= S[2];

if a = 'x' then
if o='-' then
x:= CharToInt(c) + CharToInt(b)
else
x:= CharToInt(c) - CharToInt(b)
else if b = 'x' then
if o='-' then
x:= CharToInt(a) - CharToInt(c)
else
x:= CharToInt(c) - CharToInt(a)
else if c = 'x' then
if o='-' then
x:= CharToInt(a) - CharToInt(b)
else
x:= CharToInt(a) + CharToInt(b);

Write('x= ', x);
ReadKey;
end.
Ниязов Абдуфаттох Ниязович
Ниязов Абдуфаттох Ниязович
11 614
Лучший ответ
примерно так

if expr[1]='x' then begin
if expr[2]='+' then writeln('x=',ord(expr[5])-ord(expr[3]));
....

итд
Пётр Балабан
Пётр Балабан
92 865
У нас 3 переменных 3 известных А и Б и одно неизвестное икс
и три вида уравнений
икс*B+А=Б (икс всегда положительный В=1 А положительное или отрицательное Б всегда положительное)
А+икс*B=Б (В=1/(-1) Б и А всегда положительное )
А+ Б=икс (Б положительное или отрицательное)
Вообще это противоречит свойству масштабируемости алгоритмов
чтобы не писать синтаксический анализатор можно просто написать введите коэффициэнты А Б и В
тут второе уравнение сводится к первому а второе к третьему так как от перестановки слагаемых или премене левой и правой части уравнения ничего не меняется.
Можно кстати сделать меню или 4 отдельные задачи
1 решение уравнений вида 1
2 решение уравнений вида 2
3 решение уравнений вида 3
4 решение любых линейных уравнений.
и еще навеяло можно сделать синтаксический анализатор и программу которая все типы уравнений написанные приводит к универсальному виду
В самой программе вовсе не обязательно вводить арифметическое выражение достаточно вводить коэффициенты.
А чтобы построить синтаксический анализатор нужно написать таблицу переходов.
Зы Зависит от цели тут можно по разному решать может цель стоит именно синтаксический анализатор построить. А может цель работать со строковыми функуцими например аски код цифры смещен на 48 от самой цифры иными словами аски код числа 9 равен 48+9=57
иными словами если у вас строка вида strExp:="x+9=5; то целое (аскикод (strExp[3]))- 48=9 тоже самое и с and 0F
не помню особо функций справку чиать надо
СС
Сергей Серов
73 067
а где твое решение что бы помочь?
Ivan Kushkin
Ivan Kushkin
94