Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 16.03.2011, 20:56
SandreS SandreS вне форума
Прохожий
 
Регистрация: 16.03.2011
Сообщения: 3
Репутация: 10
По умолчанию Символьные выражения взятые из строк

Надо так сделать чтобы можно было взять любую строку по типу '4 + 5' и чтоб вычислялось значение при этом, то есть в данном случае на выходе 9 должно быть. И в принципе всё понятно но одно но есть. Я не понимаю как взять первое число, до первого пробела, записать его в одну переменную, затем символ в другую, и второе число после второго пробела в третью. С остальным проблем нет. На ум приходит что то типа этого.
Код:
var s,str:string; a,i:integer; c:char;
begin
s:='6 + 3 ';
for i := 1 to length(s) do
while s[i]<>' ' do
begin
    if s[i] in ['0'..'9']  then
    str:=str+s[i];
end;
writeln(str);
readln;
end.
Он не должен записывать всё по разным переменным, но хотя бы должен брать первое число, но оно не работает.
Ответить с цитированием
  #2  
Старый 16.03.2011, 21:15
Snake22 Snake22 вне форума
Активный
 
Регистрация: 20.02.2011
Сообщения: 374
Репутация: 744
По умолчанию

можно через pos найти первый пробел,
добавь x,y:integer;
и потом
Код:
 x:=copy(s,1,pos(' ',s));
далее
Код:
s:=copy(s,pos('+',s)+1,length(s));//копируешь s с позиции,после знака+
y:=copy(s,pos(' ',s)+1,length(s)-1);//Y будет начиная с позиции после первого пробела который после плюса,и до последнего пробела
str:=inttostr(x+y);
но это както нечётко получиться,вдруг после числа не будет пробела?тогда pos будет равен нулю,либо другому первому пробелу.

Последний раз редактировалось Snake22, 16.03.2011 в 21:23.
Ответить с цитированием
  #3  
Старый 16.03.2011, 21:21
SandreS SandreS вне форума
Прохожий
 
Регистрация: 16.03.2011
Сообщения: 3
Репутация: 10
По умолчанию

Вот! Что то есть, спасибо!
Ответить с цитированием
  #4  
Старый 18.03.2011, 11:27
SandreS SandreS вне форума
Прохожий
 
Регистрация: 16.03.2011
Сообщения: 3
Репутация: 10
По умолчанию

Так, вот чего я добился, оно по замыслу должно считать сроки где используется +, -. Но оно не работает, во первых не вычисляет, хотя значение в переменную передаёт, это точно. Во вторых даже раньше как это успеет произойти появляется сообщение "Project Project1.exe raised exception class EConvertError with message "5'is not a valid integer value'. Process stopped. Use Step or Run to conyinue." Я впринципе понимаю о чём тут говориться, но не знаю как это всё реализовать. Вот код
Код:
var s,y,x,t:string; a,b,i,z:integer; c:char; mas:Array[1..100] of Integer; mas1:Array[1..100] of string;
begin
a:=1;
b:=1;
s:='5 + 3';

for i:= 1 to length(s) do
begin
if s[i] in ['0'..'9']  then
begin
x:=copy(s,i,pos(' ',s));
mas[a]:=StrToInt(x);
a:=a+1;
end;
end;

for i:= 1 to length(s) do
begin
if s[i] in ['+','-']  then
begin
y:=copy(s,i,pos(' ',s));
mas1[b]:=y;
b:=b+1;
end;
end;

z:=mas[1];
for i:=1 to length(s) do
begin
if mas1[i]='+' then
z:=z+mas[i+1]
else
if mas1[i]='-' then
z:=z-mas[i+1];
end;

for i:= 1 to length(s) do
writeln(z);

for i:= 1 to length(s) do
writeln(mas1[i]);

readln;
end.
Если кто может что посоветовать, буду благодарен.
Ответить с цитированием
  #5  
Старый 18.03.2011, 13:22
Assistant Assistant вне форума
Продвинутый
 
Регистрация: 20.02.2011
Адрес: там где правят идиоты
Сообщения: 603
Версия Delphi: 7
Репутация: выкл
По умолчанию

видимо где-то копируешь на 1 символ больше чем надо, поэтому и получаешь 5', проверяй pos(' ',s) и т.д., иногда нужно делать pos(' ',s)-1, смотря что именно происходит.
__________________
взялся из неоткуда, ничего не прошу, помогаю просто так
ICQ: 593977748 - стучать в случае КРАЙНЕЙ необходимости, ну, или если вы со Ставрополя
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 13:46.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025