Jump to content
СофтФорум - всё о компьютерах и не только

Обработка символьной информации Язык - Паскаль


Recommended Posts

Дан текст, элементы которого числа, разделенные арифметическими знаками «+» и «-». Обработать этот текст с получением значения исходного арифметического выражения.

Текст:

2+7, 6-4, 5+2, 56+57, 34-78, 23-3, 34-6, 19-3, 4-56.

Link to comment
Share on other sites

Ну вот так в виде процедуры

procedure SimpleCalc;varS_in,S_out,OpNow,Sa:String;j,k,kmax,N,N1:Integer;Sop:Array[1..2] of String;beginS_in:='2+7, 6-4, 5+2, 56+57, 34-78, 23-3, 34-6, 19-3, 4-56.';kmax:=Length(S_in);Sop[1]:='';Sop[2]:='';j:=1;OpNow:='';for k:=1 to kmax do begin Sa:=Copy(S_in,k,1); try  N:=StrToInt(Sa);   except  N:=-1; end; if N>0 then begin   Sop[j]:=Sop[j]+Sa; end; if ((Sa='+') or (Sa='-')) then begin   OpNow:=Sa;   j:=2; end; if (Sa<>'+') and (Sa<>'-') and (N=-1) and (j=2) then begin   if OpNow='+' then begin    N1:=StrToInt(Sop[1])+StrToInt(Sop[2]);  end else begin    N1:=StrToInt(Sop[1])-StrToInt(Sop[2]);   end;   j:=1;   Sop[1]:='';   Sop[2]:='';   if S_out='' then begin    S_out:=IntToStr(N1);  end else begin    S_out:=S_out+', '+IntToStr(N1);   end; end;end;end;

Ввод-вывод сам придумай.

Edited by Teddy_Bear
  • Upvote 1
Link to comment
Share on other sites

Дан текст, элементы которого числа, разделенные арифметическими знаками «+» и «-». Обработать этот текст с получением значения исходного арифметического выражения.

Текст:

2+7, 6-4, 5+2, 56+57, 34-78, 23-3, 34-6, 19-3, 4-56.

FreePascal.

program SimpleCalc;uses SysUtils, StrUtils;constSource = '1+1, 2+2, 3-1, 100+999';WordDelim = [ ',' ];ExprDelim = [ '+', '-' ];varExpr, Op: string;L_Operand, R_Operand, Result, i: integer;begini := 1;while True dobegin	Expr := (i, Source, WordDelim);	if Expr = '' then break;	L_Operand := StrToInt(Trim(ExtractWord(1, Expr, ExprDelim)));	R_Operand := StrToInt(Trim(ExtractWord(2, Expr, ExprDelim)));	Op := Expr[LastDelimiter('+-', Expr)];	case Op of		'+': Result := L_Operand + R_Operand;		'-': Result := L_Operand - R_Operand;	end;	WriteLn(Trim(Expr) + ' = ' + IntToStr(Result));	inc(i);end;end.

ExtractWord

LastDelimiter

  • Upvote 1
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...