![]() |
|
|
Регистрация | << Правила форума >> | 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, смотря что именно происходит.
взялся из неоткуда, ничего не прошу, помогаю просто так ICQ: 593977748 - стучать в случае КРАЙНЕЙ необходимости, ну, или если вы со Ставрополя ![]() |