Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ в пример надо подставить знаки + - * и все обратным методом

Автор: maksimla 27.12.2009 20:37

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

Автор: volvo 27.12.2009 21:39

Ну вот тут же было практически то же самое: http://forum.pascal.net.ru/index.php?s=&showtopic=23852&view=findpost&p=131546

Цитата
немогу цифру в формат string зделать точнене незнаю как сделать и потом чтобы тип данных k:char;
k:='+';
чтобы записать как простой плюс 5k6=11
blink.gif Ничего не понял, но по-моему, то, что ты хочешь сделать не получится, Паскаль все-таки компилятор, а не интерпретатор. Придется делать по-другому. Меня сейчас больше интересует, чем то решение, которое было приведено по ссылке (для тебя же, заметь) тебе не подходит?

Автор: andriano 27.12.2009 21:47

Число переводится в строку процедурой str.
Дальше - тоже не понял, что тебе нужно.

Если мои телепатические способности восстановились, то, вероятно:

const op : string = '+-*/';
...
writeln(a,op[k],b,'=',r);
Здесь операциям приписаны коды:
+ 1
- 2
* 3
/ 4

Автор: maksimla 28.12.2009 18: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]of string=('+','-','*');

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:=0 to nPar do Oper0[i]:=0;
repeat
Par:=Par0;
Oper:=Oper0;

for i:=1 to nPar-1 do case Oper[i] of
2: begin
Par[i]:=Par[i-1] * Par[i];
Par[i-1]:=0;
Oper[i]:=Oper[i-1]
end;
end;
r:=Par[0];
for i:=1 to nPar-1 do case Oper[i] of
0: r:=r+Par[i];
1: r:=r-Par[i]
end;
if r=r0 then begin
str(Par0[0],s);
sprendimas:=s;
for i:=1 to nPar-1 do begin sprendimas:=sprendimas+Opers[Oper0[i]]; str(Par0[i],s); sprendimas:=sprendimas+s; end;
str(r,s);
sprendimas:=sprendimas+'='+s;
end;
t:=1;
for i:=1 to nPar do begin
t:=Oper0[i]+t;
Oper0[i]:=t mod nOper;
t:=t div nOper;
end
until 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©;
write('4 cislo = ');
Readln(d);
write('5 cislo = ');
Readln(e);
write('i skolko polucitse po vasemu primeru = ');
Readln®;
writeln('vot rezultal');
writeln(sprendimas(a, b, c, d, e, r));
readln;
end.

я чегото некак непредумал

Автор: andriano 29.12.2009 14:46

Ты все-таки напиши условие задачи, ибо по неправильно написанной программе можно лишь установить, что она делает, но никак не что она далала бы, если бы была написана правильно.

Автор: maksimla 29.12.2009 16:08

эта все задачка вводим чисел 5 и одно число это ответ и мы должны найти знаки + - и * чтобы подставить между 5 числами эта программка работает правильно но надо обратным методом написать( возвратным методом может так)
это метод когда идешь в перед и попал в тупик неправильное решение то тогда возвращаешься на один шаг назад и идешь дальше