<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="gl">
	<id>http://web.iesrodeira.com/mediawiki/index.php?action=history&amp;feed=atom&amp;title=Fundamentos%3ASoluci%C3%B3ns%3AC%C3%A1lculo_de_Permutaci%C3%B3ns</id>
	<title>Fundamentos:Solucións:Cálculo de Permutacións - Historial de revisións</title>
	<link rel="self" type="application/atom+xml" href="http://web.iesrodeira.com/mediawiki/index.php?action=history&amp;feed=atom&amp;title=Fundamentos%3ASoluci%C3%B3ns%3AC%C3%A1lculo_de_Permutaci%C3%B3ns"/>
	<link rel="alternate" type="text/html" href="http://web.iesrodeira.com/mediawiki/index.php?title=Fundamentos:Soluci%C3%B3ns:C%C3%A1lculo_de_Permutaci%C3%B3ns&amp;action=history"/>
	<updated>2026-09-13T13:22:52Z</updated>
	<subtitle>Historial de revisións desta páxina no wiki</subtitle>
	<generator>MediaWiki 1.43.9</generator>
	<entry>
		<id>http://web.iesrodeira.com/mediawiki/index.php?title=Fundamentos:Soluci%C3%B3ns:C%C3%A1lculo_de_Permutaci%C3%B3ns&amp;diff=1926&amp;oldid=prev</id>
		<title>Xavi: Nova páxina: &quot;Escribir un programa que permita visualizar todas as permutacións dos elementos dunha taboa de caracteres suministrada la liña de comandos. ----  ==== Versión 1 ==== Esta imple...&quot;</title>
		<link rel="alternate" type="text/html" href="http://web.iesrodeira.com/mediawiki/index.php?title=Fundamentos:Soluci%C3%B3ns:C%C3%A1lculo_de_Permutaci%C3%B3ns&amp;diff=1926&amp;oldid=prev"/>
		<updated>2014-06-26T11:04:57Z</updated>

		<summary type="html">&lt;p&gt;Nova páxina: &amp;quot;Escribir un programa que permita visualizar todas as permutacións dos elementos dunha taboa de caracteres suministrada la liña de comandos. ----  ==== Versión 1 ==== Esta imple...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Páxina nova&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Escribir un programa que permita visualizar todas as permutacións dos elementos dunha taboa de caracteres suministrada la liña de comandos.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== Versión 1 ====&lt;br /&gt;
Esta implementación é recursiva e consiste en ir intercambiando o primeiro elemento da cadea e facendo as permutacións da cadea restante.&lt;br /&gt;
===== Pseudocódigo =====&lt;br /&gt;
Partimos da cadea &amp;#039;orixinal&amp;#039;, na que iremos intercambiando o primeiro elemento e aplicando a permutación recursiva a &amp;#039;cadea&amp;#039; restante:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;#039;text&amp;#039;&amp;gt;&lt;br /&gt;
 Si a Lonxitude da cadea a permutar é 1, visualizar a cadea orixinal&lt;br /&gt;
 Se Non&lt;br /&gt;
   permuta a cadea a partir de cadea[1]&lt;br /&gt;
   i=0&lt;br /&gt;
   Mentras que i&amp;lt; lonxitude da cadea a permutar - 1&lt;br /&gt;
      intercambia o elemento 0 da cadea co elemento i+1&lt;br /&gt;
      permuta a cadea a partir de cadea[1]&lt;br /&gt;
      intercambia o elemento 0 da cadea co elemento i+1, (para ter de novo a cadea anterior á permutación)&lt;br /&gt;
      i++;&lt;br /&gt;
   Fin-Mentras&lt;br /&gt;
 Fin-Se&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Implementación en C =====&lt;br /&gt;
&amp;lt;source lang=&amp;#039;C&amp;#039;&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#include &amp;lt;string.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
/* cambio&lt;br /&gt;
 *    Recibe: &lt;br /&gt;
 *      A cadea (c), e a posición do elemento a intercambiar co primeiro (i)&lt;br /&gt;
 *    Descripción:&lt;br /&gt;
 *      Intercambia c[0] con c[i]           &lt;br /&gt;
 */&lt;br /&gt;
void cambio(char *c,int i)&lt;br /&gt;
{&lt;br /&gt;
  char t;&lt;br /&gt;
&lt;br /&gt;
  t=c[0];&lt;br /&gt;
  c[0]=c[i];&lt;br /&gt;
  c[i]=t;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* permuta&lt;br /&gt;
 *    Recibe:&lt;br /&gt;
 *      A dirección da cadea orixinal (orix), para visualizar o resultado de cada permutación&lt;br /&gt;
 *      A dirección da cadea a permutar (cad)&lt;br /&gt;
 *    Descripción:&lt;br /&gt;
 *      Visualiza as distintas permutacións de cad. Como utiliza a recursión se precisa &lt;br /&gt;
 *      o principio da cadea orixinal para visualizar a secuencia completa.&lt;br /&gt;
 */&lt;br /&gt;
void permuta(char *orix,char *cad)&lt;br /&gt;
{&lt;br /&gt;
   int lon;&lt;br /&gt;
   int i;&lt;br /&gt;
 &lt;br /&gt;
   lon=strlen(cad);&lt;br /&gt;
   if (lon==1) printf(&amp;quot;%s\n&amp;quot;,orix);&lt;br /&gt;
   else {&lt;br /&gt;
     permuta(orix,&amp;amp;cad[1]); // Permutamos a cadea restante (o primeiro elemento é o orixinal)&lt;br /&gt;
     for(i=0;i&amp;lt;lon-1;i++) {&lt;br /&gt;
        cambio(cad,i+1);  // Intercambiamos o primeiro elemento&lt;br /&gt;
        permuta(orix,&amp;amp;cad[1]); // Permutamos a cadea restante&lt;br /&gt;
	cambio(cad,i+1);  // Desfacemos o intercambio&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Principal&lt;br /&gt;
 *&lt;br /&gt;
 */&lt;br /&gt;
int main(int argc,char *argv[])&lt;br /&gt;
{&lt;br /&gt;
  int c;&lt;br /&gt;
  char buffer[256];&lt;br /&gt;
&lt;br /&gt;
  if (argc!=2) printf(&amp;quot;USO: permuta cadenadeelementos\n&amp;quot;);&lt;br /&gt;
  else {&lt;br /&gt;
     permuta(argv[1],argv[1]);&lt;br /&gt;
  }&lt;br /&gt;
  return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Versión 2 ====&lt;br /&gt;
Esta implementación baséase no cálculo dunha permutación concreta baseada nunha serie ordeada de permutacións. Para visualizalas todas bastará visualizar as n! permutacións, sendo n o número de elementos da cadea.&lt;br /&gt;
Para calcular unha permutación concrete se irá calculando o resto de dividir o número entre 2,3,4,.. o que nos dará os intercambios que teremos que facer e en qué posicións da cadea.&lt;br /&gt;
===== Pseudocódigo =====&lt;br /&gt;
&amp;lt;source lang=&amp;#039;text&amp;#039;&amp;gt;&lt;br /&gt;
  n=factorial da lonxitude da cadea.&lt;br /&gt;
  i=0;&lt;br /&gt;
  Mentras (i&amp;lt;n)&lt;br /&gt;
    visualiza a permutación i&lt;br /&gt;
    i++&lt;br /&gt;
  Fin-Mentras&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
  &lt;br /&gt;
===== Implementación en C =====&lt;br /&gt;
&amp;lt;source lang=&amp;#039;C&amp;#039;&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#include &amp;lt;string.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#define MAXELEMS 50&lt;br /&gt;
&lt;br /&gt;
int p[MAXELEMS];&lt;br /&gt;
&lt;br /&gt;
int fac(int n)&lt;br /&gt;
{&lt;br /&gt;
  if (n==0) return 1;&lt;br /&gt;
  else return n*fac(n-1);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void inserta_p(char *c,int a,int b)&lt;br /&gt;
{&lt;br /&gt;
  char t;&lt;br /&gt;
&lt;br /&gt;
  t=c[b];&lt;br /&gt;
  memmove(&amp;amp;c[a+1],&amp;amp;c[a],b-a);&lt;br /&gt;
  c[a]=t;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void calcula_permuta(int num)&lt;br /&gt;
{&lt;br /&gt;
  int div=2;&lt;br /&gt;
  int x=0;&lt;br /&gt;
&lt;br /&gt;
  while(num&amp;gt;0) {&lt;br /&gt;
    p[x]=num%div;&lt;br /&gt;
    num=num/div;&lt;br /&gt;
    div++;&lt;br /&gt;
    x++;&lt;br /&gt;
  }&lt;br /&gt;
  p[x]=-1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
char *efectua_permuta(char *cad,char *cadp)&lt;br /&gt;
{&lt;br /&gt;
   int x,i;&lt;br /&gt;
   int len;&lt;br /&gt;
&lt;br /&gt;
   strcpy(cadp,cad);&lt;br /&gt;
   len=strlen(cadp)-1;&lt;br /&gt;
   for(x=0;p[x]&amp;gt;=0;x++);&lt;br /&gt;
   x--;&lt;br /&gt;
   while(x&amp;gt;=0) {&lt;br /&gt;
     inserta_p(cadp,len-(x+1),len-(x+1)+p[x]);&lt;br /&gt;
     x--;&lt;br /&gt;
   }&lt;br /&gt;
   return cadp;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
char *permuta_x(char *cad,char *cadp,int n)&lt;br /&gt;
{&lt;br /&gt;
   calcula_permuta(n);&lt;br /&gt;
   return efectua_permuta(cad,cadp);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void permuta2(char *cad)&lt;br /&gt;
{&lt;br /&gt;
  int i;&lt;br /&gt;
  int n=strlen(cad);&lt;br /&gt;
  char buffer[256];&lt;br /&gt;
  n=fac(n);&lt;br /&gt;
&lt;br /&gt;
  for(i=0;i&amp;lt;n;i++) printf(&amp;quot;%s\n&amp;quot;,permuta_x(cad,buffer,i));&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int main(int argc,char *argv[])&lt;br /&gt;
{&lt;br /&gt;
  int c;&lt;br /&gt;
  char buffer[256];&lt;br /&gt;
&lt;br /&gt;
  if (argc!=2) printf(&amp;quot;USO: permuta cadenadeelementos\n&amp;quot;);&lt;br /&gt;
  else {&lt;br /&gt;
     permuta2(argv[1]);&lt;br /&gt;
  }&lt;br /&gt;
  return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Xavi</name></author>
	</entry>
</feed>