IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Строки, извлечение числа из сроки
сообщение
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 16
Пол: Мужской

Репутация: -  0  +


Добрый день!!! Помогите пожалуйста решить такую задачу:
Допустим дана такая строка (13121123123-123123123). Как извлечь из нее число до первого знака опереции (*,-,/,+) b и поместить его в другую строку.
Конечно если знать что посли числа идет знак - то можно ипользовать эту реализацию.
function QWERTY(s : string):string;
var
i,p : byte;
sum : string;
begin
sum :='';
p := pos('-',s);
for i :=1 to p-1 do
sum := sum + s[i];
QWERTY := sum;
end;
begin
Writeln(Qwerty('100528749-300'));
end.
.
А если я не знаю, какой знак операции идет после числа. Как поступать в такой ситуации?????!!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #2


Новичок
*

Группа: Пользователи
Сообщений: 16
Пол: Мужской

Репутация: -  0  +


Malice, спасибо!!!Разобрался....Осталасась последняя ошибка..Она помойму связана с неправильным переводом числа (из стринг в реал).

Вот код программы. Проблемное место показано комментарием....Помогите пожалуйста. Мне во вторник нужно сдавать эту задачу!!!!!! (это калькулятор на базе польской записи);

 
const
max=1000;
type
STACK = record
top:integer;
elem:array [1..max] of char;
end;

STACK2 = record
top:integer;
elem:array [1..max] of real;
end;



var
s,s2:stack;
symv:char;
{---------------------------------------}
procedure MakeNull (var S:STACK);
begin
S.top:=max + 1;
end;
{---------------------------------------}
procedure MakeNullR (var S:STACK2);
begin
S.top:=max + 1;
end;

{---------------------------------------}
function Empty (S:Stack):boolean;
begin
if S.top > max then
Empty:=true
else
Empty:=false;
end;
{----------------------------------------}
function Top(s : stack) : char;
begin
if Empty(s) then exit
else
Top := s.elem[s.top];
end;
{---------------------------------------}
procedure OutStack (var s:stack; var symv:char);
begin
if Empty (s) then exit
else
begin
symv:= s.elem[s.top];
s.top:=S.top + 1;
end;
end;
{--------------------------------------}
procedure OutStackR (var s:stack2; var x:real);
begin
if Empty (s2) then exit
else
begin
x:= s.elem[s.top];
s.top:=S.top + 1;
end;
end;
{---------------------------------------}
procedure Instack (var S:Stack;x:char);
begin
if S.top = 1 then exit
else
begin
s.top:=s.top-1;
s.elem[s.top]:=x;
end;
end;

{---------------------------------------}
procedure InstackR (var S:Stack2;x:real);
begin
if S.top = 1 then exit
else
begin
s.top:=s.top-1;
s.elem[s.top]:=x;
end;
end;
{----------------------------------------}
function Prior(f : char) : Byte;
begin
case f of
'+','-' : prior := 2;
'*','/' : prior := 3;
'(' , ')' : prior := 1;
else
prior := 0;
end;
end;

{----------------------------------------}
procedure Dell(var s : stack);
begin
if Empty(s) then exit
else
s.top := s.top + 1;
end;
{----------------------------------------}
procedure opz (var out:string);
var
i: integer; inp:string;
t: boolean; out2:string;
begin
Makenull(s);
write ('INP = ');
readln (inp);
for i:=1 to length (inp) do
case inp[i] of
'0'..'9': begin
if (inp[i]>='0') and (inp[i]<='9') then
out:=out+inp[i];
end;

'+','-','*','/': begin
out:=out+' ';
while Prior(Top(s))>= Prior(inp[i]) do
begin
outstack(s,symv);
out:=out+symv+' ';
end;
instack (s,inp[i]);
end;


'(' : InStack(s,inp[i]);

')' : begin
while Prior(Top(s)) <> 1 do
begin
OutStack(s,symv);
out:=out+' '+symv;
end;
Dell(s);
end;
end;
for i:=max downto s.top do
out:=out+' '+s.elem[i];

writeln ('OPZ = ',out);

end;
{-----------------------------------------------------}
procedure Result (out:string;var res:real);
var
error:integer;
num,x,y:real;
s3:stack2;
estr:string;
i:integer;

begin
MakeNullR(s3);
for i := 1 to Length(out) do
case out[i] of
'0'..'9' : begin
if (out[i]>='0') and (out[i]<='9') then
begin
out:=out+out[i];
val(out,num,error);
InstackR(s3,num); {<--- TUTA GEMOROY}
end;
end;

' ': begin estr:=estr+out[i]; end;
'+': begin
OutStackR(s3,y);
OutStackR(s3,x);
res:=x+y;
end;
end;
writeln('mass:');

for i:=max downto s3.top do
writeln(s3.elem[i]);

writeln('----------');
writeln('RES = ',res);
writeln('----------');
end;



var
outp,inp:string; res:real;
begin
OPZ (outp);
Result(outp,res);


readln;
end.



Сообщение отредактировано: volvo -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 13.09.2025 17:04
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name