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

Форум для изучающих FPC и их учителей.

Модератор: Модераторы

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

Сообщение Leontev » 06.02.2012 21:12:22

Вопрос может несколько примитивный, но как ввести в программу какое-либо выражение?

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

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

При этом известно значение x
Leontev
новенький
 
Сообщения: 30
Зарегистрирован: 16.01.2012 20:56:32
Откуда: Санкт-Петербург

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

Сообщение Paster Fob » 06.02.2012 22:19:36

Шутка что ли?Любой учебник открой и прочитай.
Аватара пользователя
Paster Fob
постоялец
 
Сообщения: 188
Зарегистрирован: 22.02.2011 21:53:36
Откуда: Новосибирск.

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

Сообщение Leontev » 06.02.2012 22:35:12

Знаете, я понимаю, конечно, что это просто.

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


это понятно. А вот как далее ввести с клавиатуры выражение, в котором бы использовалось бы это x, я не понимаю.
Leontev
новенький
 
Сообщения: 30
Зарегистрирован: 16.01.2012 20:56:32
Откуда: Санкт-Петербург

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

Сообщение alex208210 » 06.02.2012 23:01:34

var x:real;
begin
readln(x);
writeln(floattostr(x*x+x));
readln;
end.
alex208210
постоялец
 
Сообщения: 207
Зарегистрирован: 12.05.2010 13:16:51

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

Сообщение Paster Fob » 06.02.2012 23:10:15

вот так можно:
Код: Выделить всё
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 раз.
Аватара пользователя
Paster Fob
постоялец
 
Сообщения: 188
Зарегистрирован: 22.02.2011 21:53:36
Откуда: Новосибирск.

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

Сообщение Little_Roo » 06.02.2012 23:13:36

alex208210 писал(а):writeln(floattostr(x*x+x))

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

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

Вот, опередили :D
Последний раз редактировалось Little_Roo 06.02.2012 23:14:57, всего редактировалось 1 раз.
Аватара пользователя
Little_Roo
энтузиаст
 
Сообщения: 639
Зарегистрирован: 27.02.2009 19:56:36
Откуда: Санкт-Петербург

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

Сообщение Leontev » 06.02.2012 23:14:51

Мне кажется, вы меня немного не так поняли. Надо вычислить не конкретно выражение x*x+x.

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

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

И что бы потом оно вычислялось.
Leontev
новенький
 
Сообщения: 30
Зарегистрирован: 16.01.2012 20:56:32
Откуда: Санкт-Петербург

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

Сообщение Little_Roo » 06.02.2012 23:18:01

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

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


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

И, провокационный вопрос,- о на фига ЭТО нужно?
Последний раз редактировалось Little_Roo 06.02.2012 23:21:00, всего редактировалось 1 раз.
Аватара пользователя
Little_Roo
энтузиаст
 
Сообщения: 639
Зарегистрирован: 27.02.2009 19:56:36
Откуда: Санкт-Петербург

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

Сообщение Leontev » 06.02.2012 23:20:08

Вводится одно выражение, состоящее из произвольно вводимых символов. И в нем нужно использовать переменную х.

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

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

Сообщение Little_Roo » 06.02.2012 23:37:54

Leontev писал(а):водится одно выражение, состоящее из произвольно вводимых символов. И в нем нужно использовать переменную х.

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

А почему функцию и интервал не разбить в разные переменные и потом их уже насиловать? :shock:
И снова вопрос - программа консольная?
Аватара пользователя
Little_Roo
энтузиаст
 
Сообщения: 639
Зарегистрирован: 27.02.2009 19:56:36
Откуда: Санкт-Петербург

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

Сообщение Leontev » 06.02.2012 23:40:21

Да, программа консольная.

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


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

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


Честно говоря не очень понял, что вы имеете в виду :(
Leontev
новенький
 
Сообщения: 30
Зарегистрирован: 16.01.2012 20:56:32
Откуда: Санкт-Петербург

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

Сообщение Little_Roo » 07.02.2012 00:08:19

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

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

И долгий геморррррр по п.1
Аватара пользователя
Little_Roo
энтузиаст
 
Сообщения: 639
Зарегистрирован: 27.02.2009 19:56:36
Откуда: Санкт-Петербург

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

Сообщение zub » 07.02.2012 00:09:44

Leontev
надо почитать чтонибудь наподобии http://delphikingdom.com/asp/viewitem.asp?catalogid=10
потом погуглить готовое решение, их мого всяких разных
ну и для закрепления написать свой круче всех остальных вместевзятых
zub
долгожитель
 
Сообщения: 2886
Зарегистрирован: 14.11.2005 23:51:26

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

Сообщение alex208210 » 07.02.2012 00:11:22

Код: Выделить всё
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 раз.
alex208210
постоялец
 
Сообщения: 207
Зарегистрирован: 12.05.2010 13:16:51

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

Сообщение Little_Roo » 07.02.2012 00:16:43

alex208210 писал(а):бугага.. давно я так не извращался))

Хи...и тригонометрия, логарифмы, степени-корни-модули ??? :D :D :D
Изврату в программировании - ЖИТЬ !!!! :D
Аватара пользователя
Little_Roo
энтузиаст
 
Сообщения: 639
Зарегистрирован: 27.02.2009 19:56:36
Откуда: Санкт-Петербург

След.

Вернуться в Обучение Free Pascal

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex [Bot] и гости: 5

Рейтинг@Mail.ru