{ projeto numbers - 2024 (fragmento) Projeto de estudo de algoritmos Esta obra está licenciado sob Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional. Veja os termos desta licença na página https://creativecommons.org/licenses/by-sa/4.0/deed.pt_BR Copyleft 2024-1 - Evandro Guglielmeli versão 0.0.0 } program numbers; // declarações prévias da MV do programa type placa = array [1..4] of integer; const MAXDIG = 4; var arrplaca : array [1..24] of string; linha : integer; // rotina para embaralhar os dígitos dados pelo operador procedure mistura(input : placa; index : integer); // parâmetro // input tem a série de digitos da placa // index indica a posição que inicia o arranjo var output : placa; p, i : integer; keep, c : string; begin if index=MAXDIG then begin keep := ''; c :=''; p := 0; for i := 1 to MAXDIG do p := p * 10 + input[i]; str(p,keep); keep := '000' + keep; p := length(keep)-3; c := copy(keep,p,4); arrplaca[linha] := c; linha := linha + 1; end else begin output := input; for p := index to MAXDIG do begin output[index] := input[p]; for i := index to p - 1 do output[i + 1] := input[i]; for i := p + 1 to MAXDIG do output[i] := input[i]; mistura(output,index + 1); // argumento end; end; end; // o programa principal // versão 0.0.0 var entrada : string; input : placa; v, w, //para uso no procedimento val() p, i : integer; //para controle de laços begin // iniciar a iteração do algoritmo repeat write('Entre o número da placa, na forma de uma sequência de quatro dígitos: '); readln(entrada); if entrada='fim' then break; { se compr(entrada) = MAXDIG então executa o abaixo } if length(entrada) = MAXDIG then begin for i := 1 to MAXDIG do begin val(entrada[i],v,w); if (w=0) then input[i] := v else break; end; if (w<>0) then begin writeln; writeln('Apenas dígitos de 0 a 9 são aceitos...'); end else begin linha := 1; mistura(input,1); // argumentos for p := 1 to 24 do begin //for i := 1 to MAXDIG do //write(arrplaca[p,i]:1); //writeln; writeln(arrplaca[p]); end; end; end; until FALSE; end.