Pascal/Turbo Pascal - ¿Como hago una permutacion de un arreglo (array) en pascal?

 
Vista:

¿Como hago una permutacion de un arreglo (array) en pascal?

Publicado por adi (4 intervenciones) el 13/07/2011 17:15:30
Hola estoy tratando hacer en pascal un programa que permute las letras o numero o lo que sea insertados por el usuario... yo por ejemplo declare una cadena y si inserto (hola) con algo asi
Tam es el tamaño de la cadena medido con un LENGTH

for i:=1 to tam do
perm[i]:=cadena[i];

pero no se como hacer para permutarlos... ejemplo si son 4 lentrs o numeros deberian ser 24 permutaciones...
abcd
abdc
adbc
adcb
acbd
bacd
badc
y asi

intente con algo asi

for i:=1 to totalp do
begin
x1:=x-1;
aux:=perm[x];
perm[x]:=perm[x1];
perm[x1]:=aux;
writeln(perm);
x:=x-1;

IF X<2 THEN
X:=TAM;

pero por la mitad ya se repiten u.u

si m pueden ayudar agradeceria
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

¿Como hago una permutacion de un arreglo (array) en pascal?

Publicado por ramon (2158 intervenciones) el 15/07/2011 19:06:04
{Espero esto te ayude en tus que aceres }

program permutac;
uses
Crt;
const
letras : array[1..4] of char = ('A','B','C','D');
var
permutacion : array [1..4] of byte;
nn, cont : Integer;

procedure presenta;
var
leta : byte;
begin
for leta := 1 to 4 do
case permutacion[leta] of
1 : write(letras[1]);
2 : write(letras[2]);
3 : write(letras[3]);
4 : write(letras[4]);
end;
write(' permutacion N§ : ',nn);
nn := nn + 1;
writeln;
end;

procedure colocamos(num : Integer);
var
paso : Integer;
begin
cont := cont + 1;
permutacion[num] := cont;
if cont = 4 then
presenta;
for paso := 1 to 4 do
if permutacion[paso] = 0 then
colocamos(paso);
cont := cont - 1;
permutacion[num] := 0;
end;

begin
clrscr;
textcolor(15);
cont := -1;
nn := 1;
FillChar(permutacion, sizeof(permutacion),0);
writeln;
writeln('Resultados');
writeln;
colocamos(0);
writeln;
writeln('<< PULSE UNA TECLA >>');
repeat until keypressed;
end.
[suerte}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

¿Como hago una permutacion de un arreglo (array) en pascal?

Publicado por adi (4 intervenciones) el 15/07/2011 23:53:35
HOla de nuevo.. bueno la idea era q fuera con cualquier cosa q se insertara y no solo de un conjunto de 4 como lo es el ABCD... si escribiera abcde me hiciera las 120 permutaciones???
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

¿Como hago una permutacion de un arreglo (array) en pascal?

Publicado por ramon (2158 intervenciones) el 16/07/2011 12:18:52
{Comprueba los cambios que te pongo y veras lo que quieres}

program permultar;
uses
Crt;
const
numr = 4; {aumentar o disminuir}
letras : array[1..numr] of char = ('A','B','C','D');{Aumentat a numr}
{Ejemplo : 'A' a la 'Z'}
var
permultacion : array [1..numr] of byte;
nn, cont : Integer;

procedure presenta;
var
leta : byte;
begin
for leta := 1 to numr do
{case permultacion[leta] of
1 : write(letras[1]);
2 : write(letras[2]);
3 : write(letras[3]);
4 : write(letras[4]);
end;}
{La misma cantidad que tetras para presentacion de letras}

write(permultacion[leta]); {esto si quieres numeros}
write(' permultacion N§ : ',nn);
nn := nn + 1;
writeln;
end;

procedure colocamos(num : Integer);
var
paso : Integer;
begin
cont := cont + 1;
permultacion[num] := cont;
if cont = numr then
presenta;
for paso := 1 to numr do
if permultacion[paso] = 0 then
colocamos(paso);
cont := cont - 1;
permultacion[num] := 0;
end;

begin
clrscr;
textcolor(15);
cont := -1;
nn := 1;
FillChar(permultacion, sizeof(permultacion),0);
writeln;
writeln('Resultados');
writeln;
colocamos(0);
writeln;
writeln('<< PULSE UNA TECLA >>');
repeat until keypressed;
end.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

¿Como hago una permutacion de un arreglo (array) en pascal?

Publicado por adi (4 intervenciones) el 16/07/2011 22:47:21
esta muy bien lo q haces y disculpa si molesto tanto... es q la idea no es tener una constante :) es q el usuario pueda insertar el conjunto y lo q sea q inserte el usuario es lo q se permutara... ejemplo que aparesca en pantalla....

escriba el conjunto
.......
a ese conjunto es el q se permutara, por eso lo declare cadena porq las permutaciones dependen del tamaño del conjunto la formula es N! n es el tamaño y lo q hice fue con length de la cadena decir q era n y con el para converti la cadena a arreglo... lo q no se aun con lo q m das es permutar ese arreglo. y no se q hace el fillchar
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

¿Como hago una permutacion de un arreglo (array) en pascal?

Publicado por adi (4 intervenciones) el 17/07/2011 03:55:36
ya esta
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar