2016-03-17 4 views
0

Я хочу найти все возможности перемещения этих чисел 1,2,3,4,5 с условиями, которые «4,3» невозможны, а 1 и 5 не могут быть в такое же решение. У меня есть этот код, но когда я его компилирую, он ничего мне не показывает.Откат не показывает ничего

var x:array[1..50] of integer; 
i,k:integer; 
avems,evalid:boolean; 

procedure init; 
begin 
    x[k]:=0; 
end; 

procedure succesor; 
begin 
    if x[k]<5 then avems:=true 
    else avems:=false; 
    if avems=true then x[k]:=x[k]+1; 
end; 

function solutie:boolean; 
begin 
    if k=3 then solutie:=true 
    else solutie:=false; 
end; 

procedure valid; 
begin 
    evalid:=true; 

    for i:=1 to k-1 do 
    if (x[i]=1) or (x[i]=5) and (x[k]=1) or (x[k]=5) then evalid:=false; 

    if (k>1) and (x[k-1]=4) and (x[k]=3) then evalid:=false; 
end; 

procedure tipar; 
begin 
    for i:=1 to 3 do 
    write(x[i],' '); 

    writeln; 
end; 

begin 
    k:=1; 
    init; 
    while k>0 do 
    begin 
    repeat 
     succesor; 
    until not(avems) or (avems and evalid); 

    if avems then 
     if solutie then tipar 
     else begin 
      k:=k+1; 
      init; 
     end 
     else k:=k-1; 
    end; 
end. 
+0

Просьба указать выходные данные программы при ее запуске и о том, как она отличается от ожидаемой. – Jolta

+0

Результат равен нулю, я ничего не получаю. – PascalGuy

+1

Итак, напишите дополнительную информацию, чтобы вы могли следить за потоком программы или отлаживать ее. Возможно, вы захотите также включить проверку диапазона. –

ответ

1

Что вы ожидаете от этого продукта? Ваш код увеличивает x[1] до достижения 5, затем устанавливает avems:=false;, а затем уменьшает k до нуля и выдает , а.

Помните, что Паскаль делает не использование отступов для блоков, таких как Python, так что ваши последних шагов написаны более ясно, как

if avems then begin 
    if solutie then tipar 
    else begin 
    k:=k+1; 
    init; 
    end 
end 
else k:=k-1; 

Если это не то, что вы хотите, вы должны кодировать некоторые begin/end.

Смежные вопросы