Как ввести выражение?
Модератор: Модераторы
Как ввести выражение?
Вопрос может несколько примитивный, но как ввести в программу какое-либо выражение?
Мне нужно, чтобы после ввода с клавиатуры произвольного выражения производился его подсчет и вывод на экран.
Для примера такое
x+x*x
При этом известно значение x
Мне нужно, чтобы после ввода с клавиатуры произвольного выражения производился его подсчет и вывод на экран.
Для примера такое
x+x*x
При этом известно значение x
- Paster Fob
- постоялец
- Сообщения: 188
- Зарегистрирован: 22.02.2011 20:53:36
- Откуда: Новосибирск.
Шутка что ли?Любой учебник открой и прочитай.
Знаете, я понимаю, конечно, что это просто.
это понятно. А вот как далее ввести с клавиатуры выражение, в котором бы использовалось бы это x, я не понимаю.
Код: Выделить всё
program x;
var
x: real;
begin
readln (x);
это понятно. А вот как далее ввести с клавиатуры выражение, в котором бы использовалось бы это x, я не понимаю.
-
alex208210
- постоялец
- Сообщения: 207
- Зарегистрирован: 12.05.2010 13:16:51
var x:real;
begin
readln(x);
writeln(floattostr(x*x+x));
readln;
end.
begin
readln(x);
writeln(floattostr(x*x+x));
readln;
end.
- Paster Fob
- постоялец
- Сообщения: 188
- Зарегистрирован: 22.02.2011 20:53:36
- Откуда: Новосибирск.
вот так можно:
Код: Выделить всё
program chisla;
var
x: integer;
begin
readln (x);
writeln(x,'+',x,'*',x,'=',x+x*x);
readln
end.
Последний раз редактировалось Paster Fob 06.02.2012 23:15:24, всего редактировалось 1 раз.
- Little_Roo
- энтузиаст
- Сообщения: 639
- Зарегистрирован: 27.02.2009 18:56:36
- Откуда: Санкт-Петербург
alex208210 писал(а):writeln(floattostr(x*x+x))
Программа консольная? Тогда просто
writeln(x*x+x);
Или нужно строку разбирать на составляющие ее мат.операции?
Вот, опередили
Последний раз редактировалось Little_Roo 06.02.2012 23:14:57, всего редактировалось 1 раз.
Мне кажется, вы меня немного не так поняли. Надо вычислить не конкретно выражение x*x+x.
Сначало вводится какое-то х. После этого вводится с клавиатуры же выражение.
x+2
x*x
x+<неважно_что>
И что бы потом оно вычислялось.
Сначало вводится какое-то х. После этого вводится с клавиатуры же выражение.
x+2
x*x
x+<неважно_что>
И что бы потом оно вычислялось.
- Little_Roo
- энтузиаст
- Сообщения: 639
- Зарегистрирован: 27.02.2009 18:56:36
- Откуда: Санкт-Петербург
Leontev писал(а):Сначало вводится какое-то х. После этого вводится с клавиатуры же выражение.
x+2
x*x
x+<неважно_что>
А это выражение, или несколько выражений, статические, или произвольно вводимые?
И какие возможные функции будут задействованы?
И, провокационный вопрос,- о на фига ЭТО нужно?
Последний раз редактировалось Little_Roo 06.02.2012 23:21:00, всего редактировалось 1 раз.
Вводится одно выражение, состоящее из произвольно вводимых символов. И в нем нужно использовать переменную х.
Добавлено спустя 2 минуты 12 секунд:
Вообще, мне это нужно как часть программы, вычисляющей интеграл функции. Сначало вводится функция и интервал. И, соответственно, нужно, что бы потом эта введенная с клавиатуры функция вычислялась в цикле при различных Х.
Добавлено спустя 2 минуты 12 секунд:
Вообще, мне это нужно как часть программы, вычисляющей интеграл функции. Сначало вводится функция и интервал. И, соответственно, нужно, что бы потом эта введенная с клавиатуры функция вычислялась в цикле при различных Х.
- Little_Roo
- энтузиаст
- Сообщения: 639
- Зарегистрирован: 27.02.2009 18:56:36
- Откуда: Санкт-Петербург
Leontev писал(а):водится одно выражение, состоящее из произвольно вводимых символов. И в нем нужно использовать переменную х.
Математику я уже подзабыл, сорри, но....вводить выражение из ПРОИЗВОЛЬНЫХ символов - это вроде %4№;;(7апGfe#%$3__} или я что-то не понял?
Leontev писал(а):Сначало вводится функция и интервал.
А почему функцию и интервал не разбить в разные переменные и потом их уже насиловать?
И снова вопрос - программа консольная?
Да, программа консольная.
Добавлено спустя 2 минуты 51 секунду:
)) Естественно из математических знаков, цифр и того самого Х.
Честно говоря не очень понял, что вы имеете в виду
Добавлено спустя 2 минуты 51 секунду:
Little_Roo писал(а):Математику я уже подзабыл, сорри, но....вводить выражение из ПРОИЗВОЛЬНЫХ символов - это вроде %4№;;(7апGfe#%$3__} или я что-то не понял?
)) Естественно из математических знаков, цифр и того самого Х.
Little_Roo писал(а):А почему функцию и интервал не разбить в разные переменные и потом их уже насиловать?
Честно говоря не очень понял, что вы имеете в виду
- Little_Roo
- энтузиаст
- Сообщения: 639
- Зарегистрирован: 27.02.2009 18:56:36
- Откуда: Санкт-Петербург
Leontev писал(а): Little_Roo писал(а):А почему функцию и интервал не разбить в разные переменные и потом их уже насиловать?
Честно говоря не очень понял, что вы имеете в виду
А имелось в виду, что если Вы, может быть, попытаетесь в одну строку паскалевого синтаксиса ввести ну НЕ очень большую математическую запись тройного интеграла по контуру....
Так что, ИМХО,
1.вычисление введенной функции -> в функцию с посимвольным разбором строки на наличие матем. или тригонометрических и т.п. операций (не возьмусь, хоть стреляйте - ну, может, гуру подскажут)
2.Потом ввод интервала
3.Цикл
И долгий геморррррр по п.1
Leontev
надо почитать чтонибудь наподобии http://delphikingdom.com/asp/viewitem.asp?catalogid=10
потом погуглить готовое решение, их мого всяких разных
ну и для закрепления написать свой круче всех остальных вместевзятых
надо почитать чтонибудь наподобии http://delphikingdom.com/asp/viewitem.asp?catalogid=10
потом погуглить готовое решение, их мого всяких разных
ну и для закрепления написать свой круче всех остальных вместевзятых
-
alex208210
- постоялец
- Сообщения: 207
- Зарегистрирован: 12.05.2010 13:16:51
Код: Выделить всё
uses sysutils;
var
i:integer;
ch,otv:integer;
s,zn:string;
chisla: array[1..100] of integer;
begin
zn:='';
writeln('Vvedite chislo');
readln(ch);
Writeln('vvedite virajenie gde x eto ranee vvodimoe chislo');
Readln(s);
if pos('x',s)<>0 then
begin
for i:=1 to length(s) do
begin
if strtointdef(s[i],-1)<>-1 then chisla[i]:=strtoint(s[i]) else if s[i]='x' then chisla[i]:=ch else chisla[i]:=0;
end;
otv:=chisla[1];
for i:=1 to length(s) do
begin
if chisla[i]<>0 then
begin
if zn='+' then otv:=otv+chisla[i];
if zn='-' then otv:=otv-chisla[i];
if zn='*' then otv:=otv*chisla[i];
if zn='/' then otv:=otv div chisla[i];
end else
begin
if s[i]='+' then zn:='+';
if s[i]='-' then zn:='-';
if s[i]='*' then zn:='*';
if s[i]='/' then zn:='/';
end;
end;
end else writeln('vi ne vveli x');
writeln(otv);
readln;
end.
бугага.. давно я так не извращался))
Работу с цифрами больше одного знака а так же вещественные сам допиливай)
Последний раз редактировалось alex208210 07.02.2012 00:36:34, всего редактировалось 1 раз.
- Little_Roo
- энтузиаст
- Сообщения: 639
- Зарегистрирован: 27.02.2009 18:56:36
- Откуда: Санкт-Петербург
alex208210 писал(а):бугага.. давно я так не извращался))
Хи...и тригонометрия, логарифмы, степени-корни-модули ???
Изврату в программировании - ЖИТЬ !!!!
