![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Надо так сделать чтобы можно было взять любую строку по типу '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
|
|||
|
|||
|
можно через 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);Последний раз редактировалось Snake22, 16.03.2011 в 21:23. |
|
#3
|
|||
|
|||
|
Вот! Что то есть, спасибо!
|
|
#4
|
|||
|
|||
|
Так, вот чего я добился, оно по замыслу должно считать сроки где используется +, -. Но оно не работает, во первых не вычисляет, хотя значение в переменную передаёт, это точно. Во вторых даже раньше как это успеет произойти появляется сообщение "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
|
|||
|
|||
|
видимо где-то копируешь на 1 символ больше чем надо, поэтому и получаешь 5', проверяй pos(' ',s) и т.д., иногда нужно делать pos(' ',s)-1, смотря что именно происходит.
|