Страница 1 из 2

Как ввести выражение?

СообщениеДобавлено: 06.02.2012 21:12:22
Leontev
Вопрос может несколько примитивный, но как ввести в программу какое-либо выражение?

Мне нужно, чтобы после ввода с клавиатуры произвольного выражения производился его подсчет и вывод на экран.

Для примера такое
x+x*x

При этом известно значение x

Re: Как ввести выражение?

СообщениеДобавлено: 06.02.2012 22:19:36
Paster Fob
Шутка что ли?Любой учебник открой и прочитай.

Re: Как ввести выражение?

СообщениеДобавлено: 06.02.2012 22:35:12
Leontev
Знаете, я понимаю, конечно, что это просто.

Код: Выделить всё
program x;
var
x: real;
begin
readln (x);


это понятно. А вот как далее ввести с клавиатуры выражение, в котором бы использовалось бы это x, я не понимаю.

Re: Как ввести выражение?

СообщениеДобавлено: 06.02.2012 23:01:34
alex208210
var x:real;
begin
readln(x);
writeln(floattostr(x*x+x));
readln;
end.

Re: Как ввести выражение?

СообщениеДобавлено: 06.02.2012 23:10:15
Paster Fob
вот так можно:
Код: Выделить всё
program chisla;
var
x: integer;
begin
readln (x);
writeln(x,'+',x,'*',x,'=',x+x*x);
readln
end.

Re: Как ввести выражение?

СообщениеДобавлено: 06.02.2012 23:13:36
Little_Roo
alex208210 писал(а):writeln(floattostr(x*x+x))

Программа консольная? Тогда просто
writeln(x*x+x); :shock:

Или нужно строку разбирать на составляющие ее мат.операции?

Вот, опередили :D

Re: Как ввести выражение?

СообщениеДобавлено: 06.02.2012 23:14:51
Leontev
Мне кажется, вы меня немного не так поняли. Надо вычислить не конкретно выражение x*x+x.

Сначало вводится какое-то х. После этого вводится с клавиатуры же выражение.

x+2
x*x
x+<неважно_что>

И что бы потом оно вычислялось.

Re: Как ввести выражение?

СообщениеДобавлено: 06.02.2012 23:18:01
Little_Roo
Leontev писал(а):Сначало вводится какое-то х. После этого вводится с клавиатуры же выражение.

x+2
x*x
x+<неважно_что>


А это выражение, или несколько выражений, статические, или произвольно вводимые?
И какие возможные функции будут задействованы?

И, провокационный вопрос,- о на фига ЭТО нужно?

Re: Как ввести выражение?

СообщениеДобавлено: 06.02.2012 23:20:08
Leontev
Вводится одно выражение, состоящее из произвольно вводимых символов. И в нем нужно использовать переменную х.

Добавлено спустя 2 минуты 12 секунд:
Вообще, мне это нужно как часть программы, вычисляющей интеграл функции. Сначало вводится функция и интервал. И, соответственно, нужно, что бы потом эта введенная с клавиатуры функция вычислялась в цикле при различных Х.

Re: Как ввести выражение?

СообщениеДобавлено: 06.02.2012 23:37:54
Little_Roo
Leontev писал(а):водится одно выражение, состоящее из произвольно вводимых символов. И в нем нужно использовать переменную х.

Математику я уже подзабыл, сорри, но....вводить выражение из ПРОИЗВОЛЬНЫХ символов - это вроде %4№;;(7апGfe#%$3__} или я что-то не понял?
Leontev писал(а):Сначало вводится функция и интервал.

А почему функцию и интервал не разбить в разные переменные и потом их уже насиловать? :shock:
И снова вопрос - программа консольная?

Re: Как ввести выражение?

СообщениеДобавлено: 06.02.2012 23:40:21
Leontev
Да, программа консольная.

Добавлено спустя 2 минуты 51 секунду:
Little_Roo писал(а):Математику я уже подзабыл, сорри, но....вводить выражение из ПРОИЗВОЛЬНЫХ символов - это вроде %4№;;(7апGfe#%$3__} или я что-то не понял?


)) Естественно из математических знаков, цифр и того самого Х.

Little_Roo писал(а):А почему функцию и интервал не разбить в разные переменные и потом их уже насиловать?


Честно говоря не очень понял, что вы имеете в виду :(

Re: Как ввести выражение?

СообщениеДобавлено: 07.02.2012 00:08:19
Little_Roo
Leontev писал(а): Little_Roo писал(а):А почему функцию и интервал не разбить в разные переменные и потом их уже насиловать?
Честно говоря не очень понял, что вы имеете в виду

А имелось в виду, что если Вы, может быть, попытаетесь в одну строку паскалевого синтаксиса ввести ну НЕ очень большую математическую запись тройного интеграла по контуру.... :(
Так что, ИМХО,
1.вычисление введенной функции -> в функцию с посимвольным разбором строки на наличие матем. или тригонометрических и т.п. операций (не возьмусь, хоть стреляйте - ну, может, гуру подскажут)
2.Потом ввод интервала
3.Цикл

И долгий геморррррр по п.1

Re: Как ввести выражение?

СообщениеДобавлено: 07.02.2012 00:09:44
zub
Leontev
надо почитать чтонибудь наподобии http://delphikingdom.com/asp/viewitem.asp?catalogid=10
потом погуглить готовое решение, их мого всяких разных
ну и для закрепления написать свой круче всех остальных вместевзятых

Re: Как ввести выражение?

СообщениеДобавлено: 07.02.2012 00:11:22
alex208210
Код: Выделить всё
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.     


бугага.. давно я так не извращался))
Работу с цифрами больше одного знака а так же вещественные сам допиливай)

Re: Как ввести выражение?

СообщениеДобавлено: 07.02.2012 00:16:43
Little_Roo
alex208210 писал(а):бугага.. давно я так не извращался))

Хи...и тригонометрия, логарифмы, степени-корни-модули ??? :D :D :D
Изврату в программировании - ЖИТЬ !!!! :D