Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - nanto

#1
Okey, perfecto ya te entiendo.  Tomare tu consejo en C e intentare modificar el algoritmo de Ordenamiento de Burbuja. Gracias... Saludos...
#2
Holaaa.... Nunca he dicho lo contrario Gh057, pero creo que era necesario fomentar este punto ( Porque no se debe colocar funciones dentro del programa principal?). Es distinto decir, no se debe a no se puede!

Efectivamente, se estaba contando de más. Si las longitudes L1 y L2 son 3 y 2 respectivamente. El contador i va de 0 a 2 (antes de 0 a 3) y el otro i de 3 a 4.

for(i=0; i<l1; i++){
     S3[i]=S1[i];
}
j=0;
for(i=l1; i<l3; i++){
    S3[i]=S2[j];
    j++;
}

Ahora, no se a que te refieres ivancea96,  con que sobran 5 caracteres en L3 (longitud del string 5).
#3
Eso es irrelevante al problema.. puede estar afuera o adentro...  Te entiendo!  Es una función y por ende puede ser usado por otros programas. Porque? Para su mejor  aprovechamiento es recomendable que este afuera.
#4
Holaaaa. Gracias!
Seré más claro... Supongamos que abc y wz son dos palabras o cadenas de eventos generados por dos componentes independientes de un Sistema (respectivamente). Según las condiciones del sistemas el ordenamiento no es cualquier ordenamiento... Al comenzar con la concatenacion abcwz yo espero esto.
abwcz
awbcz
wabcz
wabzc
wazbc
wzabc
guardando los resultados anteriores para reusarlos podría generar estos otros (pero los pierdo, y me imprime wzabc)
awbzc
awzbc
abwzc
Algo de memoria perdida... El código es este

#include <stdio.h>
#include <stdlib.h>
int l3,l1,l2,i,j,s,k,t;

int main(void){
printf("Programa que concatena dos segmentos\n\n");  
printf("Introduzca la longitud del primer segmento:");
scanf("%i",&l1);/*Se piden los datos*/
printf("Introduzca el primer segmento:");
char S1[l1];
scanf("%s", S1);
printf("\nIntroduzca la longitud del segundo segmento:");
scanf("%i", &l2);
char S2[l2];
printf("Introduzca  segundo segmento:");
scanf("%s",S2);
l3=l1+l2;  
int cant;
cant=factorial(l3)/(factorial(l2)*factorial(l1));
printf("\n\n El numero de permutaciones es:%d",cant);
char S3[l3];
for(i=0; i<l1; i++){
 S3[i]=S1[i];
}
j=0;
for(i=l1; i<l3; i++){
 S3[i]=S2[j];
  j++;
}
printf("\n\n El segmento es:%s",S3);

fflush(stdin);

//dato = (char*)malloc(cant);

char aux1; /*Tamaño maximo de 100*/
char *arreglo[cant];  
//char* dato;    
s=0;
arreglo[0]=S3;
printf("\n\n OjO es:%s",arreglo[s]);
for(i=l1; i<=l3-1; i++){
  t=0;
  for(j=i-1; j>=0; j--){
    s++;
    aux1=S3[j];
    S3[j]=S3[j+1];
    S3[j+1]=aux1;
    arreglo[s]=S3;
    printf("\n\n Permutacion %i en ciclo %i es:%s y Arreglo es %s",s,t,S3,arreglo[s]);
//   t=0;
//   while(abs(i+1-j)>1){
// aux1=S3[j+1];
//      S3[j+1]=S3[i+1];
//      S3[i+1]=aux1;
//      s++; t++;
// arreglo[s]=S3;
// printf("\n\n Permutacion %i en ciclo %i es:%s y arreglo es %s",s,t,S3,arreglo[s]);
//   }      
  }        
}
//printf("\n\n Permuta DOS es:%s",arreglo[2]);
for(j=0;j<=cant;j++){
  printf("\n\n Permuta %d es:%s",j,arreglo[j]);
}

return EXIT_SUCCESS;
}

#5
Buenas noches.. Espero puedan ayudarme o prestarme alguna idea. Mi duda surge cuando al generar una cierta cantidad de arrays de tipo char de forma iterativa (obtengo los resultados esperados), cumpliendo ciertas condiciones de ordenamientos entre sus componentes

for(i=l1; i<=l3-1; i++){
t=0;
for(j=i-1; j>=0; j--){
  s++;
  aux1=S3[j];
  S3[j]=S3[j+1];
  S3[j+1]=aux1;
  arreglo[s]=S3;
  printf("\n\n Permuta %i en ciclo %i es:%s y Arreglo es %s",s,t,S3,arreglo[s]);
}
}

Pero al terminas  e  imprimirlos nuevamente de esta forma

for(j=0;j<=cant;j++){
  printf("\n\n Permuta %i es:%s",j, arreglo[j]);
}

solo arroja en las tantas iteraciones el ultimo arrays generado, y requiero guardar todos los resultados para generar otras permutaciones. Nota:

char *arreglo, S3, aux1;

Gracias