Карасик Posted April 2, 2012 Report Share Posted April 2, 2012 Дан текст, элементы которого числа, разделенные арифметическими знаками «+» и «-». Обработать этот текст с получением значения исходного арифметического выражения. Текст: 2+7, 6-4, 5+2, 56+57, 34-78, 23-3, 34-6, 19-3, 4-56. Quote Link to comment Share on other sites More sharing options...
Teddy_Bear Posted April 2, 2012 Report Share Posted April 2, 2012 (edited) Числа строго парами? А ввод - вывод? Edited April 2, 2012 by Teddy_Bear Quote Link to comment Share on other sites More sharing options...
Teddy_Bear Posted April 2, 2012 Report Share Posted April 2, 2012 (edited) Ну вот так в виде процедуры 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 April 2, 2012 by Teddy_Bear 1 Quote Link to comment Share on other sites More sharing options...
Ego Drama Posted April 2, 2012 Report Share Posted April 2, 2012 Дан текст, элементы которого числа, разделенные арифметическими знаками «+» и «-». Обработать этот текст с получением значения исходного арифметического выражения. Текст: 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 1 Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.