|
|
ru.algorithms- RU.ALGORITHMS ---------------------------------------------------------------- From : Serg Belyaev 2:5020/400 25 Feb 2002 20:39:46 To : Oleg I. Khovayko Subject : Re: imho нелегкий алгоритм, но нужен... -------------------------------------------------------------------------------- Привет! > Обалдели совсем! Чем физиков мучают! > Я понимаю - будущих программеров, но физикам то оно зачем? > Мда, преп явно хочет тебя завалить... Круто заворачиваешь! Полный перебор и школьники могут делать. Школьный вариант: ---------------------с---------------------- const ops:array[1..4] of char='+-*/'; var x:integer;s,ss:string; procedure err; begin writeln('Error!');halt end; function solv(sum,term:real;op:char;s:string;var ss:string):boolean; var i,j,y,c:integer;s2,s3:string;ssum,sterm:real; begin for i:=1 to length(s) do begin ss:=copy(s,1,i);s2:=copy(s,i+1,length(s)-i); val(ss,y,c);if c<>0 then err; solv:=true; if op='+' then begin ssum:=sum+term;sterm:=y end else if op='-' then begin ssum:=sum+term;sterm:=-y end else if op='*' then begin ssum:=sum;sterm:=term*y end else if (op='/')and(y<>0) then begin ssum:=sum;sterm:=term/y end; if i<length(s) then for j:=1 to 4 do if solv(ssum,sterm,ops[j],s2,s3) then begin ss:=ss+ops[j]+s3;exit end else else if (ssum+sterm)=0 then exit end; solv:=false;ss:='нет решения'; end; begin write('Введи число и строку: ');readln(x,s); while s[1]=' ' do delete(s,1,1); while s[length(s)]=' ' do dec(s[0]); solv(-x,0,'+',s,ss);writeln(x,'=',ss); end. ---------------------с---------------------- А потом можно избавляться от очевидных недостатков приведенного алгоритма. -- <SVB> --- ifmail v.2.15dev5 * Origin: Gamma NNTP server Moscow Russia (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.algorithms/75918b63d257.html, оценка из 5, голосов 10
|