a b c d e=r (здесь 0<a,b,c,d,e,r=<100) вместо пробелов надо подставить знаки операций +,-,* скобок нету поэтому все решение идет по приоритету сперва * а потом все остальное . задание напишите функцию которая подобрала знаки операции чтобы пример былбы правильный, если можно пару вариантов то достаточно найти один вариант, а если ненашли нечего то тогда результат (невозможно). алгоритм долженбыть описан в функции которая запись
function sprendimas(a, b, c, d, e, r: integer): string;
начальные данные a = 1 b = 2 c = 3 d = 4 e = 5 r = 27 результат 1+2*3+4*5=27
все так ясно понятно но я столкнулся с проблемами немогу цифру в формат string зделать точнене незнаю как сделать и потом чтобы тип данных k:char; k:='+'; чтобы записать как простой плюс 5k6=11
немогу цифру в формат string зделать точнене незнаю как сделать и потом чтобы тип данных k:char; k:='+'; чтобы записать как простой плюс 5k6=11
Ничего не понял, но по-моему, то, что ты хочешь сделать не получится, Паскаль все-таки компилятор, а не интерпретатор. Придется делать по-другому. Меня сейчас больше интересует, чем то решение, которое было приведено по ссылке (для тебя же, заметь) тебе не подходит?
andriano
27.12.2009 17:47
Число переводится в строку процедурой str. Дальше - тоже не понял, что тебе нужно.
Если мои телепатические способности восстановились, то, вероятно:
const op : string = '+-*/';
...
writeln(a,op[k],b,'=',r);
Здесь операциям приписаны коды: + 1 - 2 * 3 / 4
maksimla
28.12.2009 14:21
а да точно а я и забыл о том задании уже чего то. а как сделать это все обратным методом?
program Bevarde0;
var a, b, c, d, e, r:integer;
function sprendimas(a, b, c, d, e, r: integer): string;
const
nPar=5;
nOper=3;
Opers: array[0..nOper-1]ofstring=('+','-','*');
var
Par,Par0: array[0..nPar-1]of Integer;
Oper,Oper0: array[0..nPar]of integer;
r0,t,i,m: Integer;
s:string;
begin
Par0[0] := a;
Par0[1] := b;
Par0[2] := c;
Par0[3] := d;
Par0[4] := e;
r0:=r;
for i:=0to nPar do Oper0[i]:=0;
repeat
Par:=Par0;
Oper:=Oper0;
for i:=1to nPar-1docase Oper[i] of2: begin
Par[i]:=Par[i-1] * Par[i];
Par[i-1]:=0;
Oper[i]:=Oper[i-1]
end;
end;
r:=Par[0];
for i:=1to nPar-1docase Oper[i] of0: r:=r+Par[i];
1: r:=r-Par[i]
end;
if r=r0 thenbegin
str(Par0[0],s);
sprendimas:=s;
for i:=1to nPar-1dobegin sprendimas:=sprendimas+Opers[Oper0[i]]; str(Par0[i],s); sprendimas:=sprendimas+s; end;
str(r,s);
sprendimas:=sprendimas+'='+s;
end;
t:=1;
for i:=1to nPar dobegin
t:=Oper0[i]+t;
Oper0[i]:=t mod nOper;
t:=t div nOper;
enduntil Oper0[nPar]=1;
if sprendimas=''then sprendimas:='nevozmozen';
end;
begin
WriteLn('v vedite 5 cisel i potom otvet po vasemu primeru');
write('1 cislo = ');
Readln(a);
write('2 cislo = ');
Readln(b);
write('3 cislo = ');
Readln(c);
write('4 cislo = ');
Readln(d);
write('5 cislo = ');
Readln(e);
write('i skolko polucitse po vasemu primeru = ');
Readln(r);
writeln('vot rezultal');
writeln(sprendimas(a, b, c, d, e, r));
readln;
end.
я чегото некак непредумал
andriano
29.12.2009 10:46
Ты все-таки напиши условие задачи, ибо по неправильно написанной программе можно лишь установить, что она делает, но никак не что она далала бы, если бы была написана правильно.
maksimla
29.12.2009 12:08
эта все задачка вводим чисел 5 и одно число это ответ и мы должны найти знаки + - и * чтобы подставить между 5 числами эта программка работает правильно но надо обратным методом написать( возвратным методом может так) это метод когда идешь в перед и попал в тупик неправильное решение то тогда возвращаешься на один шаг назад и идешь дальше
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.