Уравнение для пятиклассников представляет собой строку длиной 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.
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.
примерно так
if expr[1]='x' then begin
if expr[2]='+' then writeln('x=',ord(expr[5])-ord(expr[3]));
....
итд
if expr[1]='x' then begin
if expr[2]='+' then writeln('x=',ord(expr[5])-ord(expr[3]));
....
итд
У нас 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
не помню особо функций справку чиать надо
и три вида уравнений
икс*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
не помню особо функций справку чиать надо
а где твое решение что бы помочь?
Похожие вопросы
- Помогите с паскалем
- Ааааа....помогите с Паскалем (Pascal)!!!!Срочно!!!!
- Помогите с паскалем пожалуйста!!!!
- помогите с паскалем!!! ужас а не задание!!
- Помогите с Паскалем
- Помогите с паскалем. Помогите написать программу переводящую из 10-ой в 16-ую систему счисления на паскале
- Помогите с паскалем!
- Ребят помогите пожалуйста. Паскаль, Paskal
- Помогите на паскале умоляю
- Помогите по паскалю