elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Ayuda con arrays y punteros
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Ayuda con arrays y punteros  (Leído 4,823 veces)
nanto

Desconectado Desconectado

Mensajes: 5



Ver Perfil
Ayuda con arrays y punteros
« en: 4 Marzo 2014, 07:46 am »

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
Código
  1. for(i=l1; i<=l3-1; i++){
  2. t=0;
  3. for(j=i-1; j>=0; j--){
  4.   s++;
  5.   aux1=S3[j];
  6.   S3[j]=S3[j+1];
  7.   S3[j+1]=aux1;
  8.   arreglo[s]=S3;
  9.   printf("\n\n Permuta %i en ciclo %i es:%s y Arreglo es %s",s,t,S3,arreglo[s]);
  10. }
  11. }
  12.  
Pero al terminas  e  imprimirlos nuevamente de esta forma
Código
  1. for(j=0;j<=cant;j++){
  2.   printf("\n\n Permuta %i es:%s",j, arreglo[j]);
  3. }
  4.  
solo arroja en las tantas iteraciones el ultimo arrays generado, y requiero guardar todos los resultados para generar otras permutaciones. Nota:
Código
  1. char *arreglo, S3, aux1;
  2.  

Gracias


En línea

eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: Ayuda con arrays y punteros
« Respuesta #1 en: 4 Marzo 2014, 08:28 am »

Si he entendido bien... lo que necesitas es guardar los resultados intermedios... cierto??

Si es así necesitarás crear tantos arrays como resultados intermedios quieras guardar ... lo suyo entonces es meter tu algoritmo en una función que admita dos arrays... uno que contiene los valores iniciales y otro para almacenar los resultados tras la permutación. Lo único que tienes que hacer entonces es ir pasando los arrays de forma ordenada para almacenar los resultados intermedios.

Código
  1. void permutacion( char* origen, char* destino );
  2.  
  3. // Lo de void main () lo pongo para escribir menos, al fin y al cabo es solo
  4. // un ejemplo
  5. void main( )
  6. {
  7.  char* inicio;
  8.  char* permutacion1;
  9.  char* permutacion2;
  10.  char* permutacion3;
  11.  char* final;
  12.  
  13.  // Inicializacion de los arrays
  14.  // ...
  15.  
  16.  permutacion( inicio, permutacion1 );
  17.  permutacion( permutacion1, permutacion2 );
  18.  permutacion( permutacion2, permutacion3 );
  19.  permutacion( permutacion3, final );
  20.  
  21.  // Liberación de recursos
  22.  // ...
  23. }


En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: Ayuda con arrays y punteros
« Respuesta #2 en: 4 Marzo 2014, 16:16 pm »

Espero puedan ayudarme o prestarme alguna idea. Mi duda surge cuando al generar una cierta cantidad de arrays de tipo char de forma iterativa
Con esta sentencia:
Código
  1. char *arreglo, S3, aux1;
El otro fragmento que pones no es valido, supongo en realidad la declaracion de las variables es:
Código
  1. char **arreglo, *S3, *aux1;

Para evitar confusiones mejor publica el código fuente completo.

Un saludo
En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
Yoel Alejandro

Desconectado Desconectado

Mensajes: 254



Ver Perfil WWW
Re: Ayuda con arrays y punteros
« Respuesta #3 en: 4 Marzo 2014, 18:46 pm »

Para ayudarte mejor creo que debes darnos más información sobre el contexto de tu trabajo. Pareciera que quisieras ordenar un arreglo de cadenas, .... ahora no le veo sentido a guardar los resultados de las permutaciones.

Ten en cuenta que el número de permutaciones puede ser mayor a la cantidad de elementos del arreglo, o sea que no sabrás de antemano cuántas cadenas intermedias debes guardas. Quizá se requiera dimensionamiento dinámico (aumento de la longitud del vector en tiempo de ejecución).

Por otra parte, si tratas de implementar un algoritmo de ordenamiento, ¿por qué la permutación de los elementos se realiza incondicionalmente, es decir, sin verificar ninguna condición de orden entre los elementos?

Debes aclararnos mejor sobre el trabajo que se quiere realizar ...
En línea

Saludos, Yoel.
P.D..-   Para mayores dudas, puedes enviarme un mensaje personal (M.P.)
nanto

Desconectado Desconectado

Mensajes: 5



Ver Perfil
Re: Ayuda con arrays y punteros
« Respuesta #4 en: 4 Marzo 2014, 20:42 pm »

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
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int l3,l1,l2,i,j,s,k,t;
  4.  
  5. int main(void){
  6. printf("Programa que concatena dos segmentos\n\n");  
  7. printf("Introduzca la longitud del primer segmento:");
  8. scanf("%i",&l1);/*Se piden los datos*/
  9. printf("Introduzca el primer segmento:");
  10. char S1[l1];
  11. scanf("%s", S1);
  12. printf("\nIntroduzca la longitud del segundo segmento:");
  13. scanf("%i", &l2);
  14. char S2[l2];
  15. printf("Introduzca  segundo segmento:");
  16. scanf("%s",S2);
  17. l3=l1+l2;  
  18. int cant;
  19. cant=factorial(l3)/(factorial(l2)*factorial(l1));
  20. printf("\n\n El numero de permutaciones es:%d",cant);
  21. char S3[l3];
  22. for(i=0; i<l1; i++){
  23.  S3[i]=S1[i];
  24. }
  25. j=0;
  26. for(i=l1; i<l3; i++){
  27.  S3[i]=S2[j];
  28.   j++;
  29. }
  30. printf("\n\n El segmento es:%s",S3);
  31.  
  32. fflush(stdin);
  33.  
  34. //dato = (char*)malloc(cant);
  35.  
  36. char aux1; /*Tamaño maximo de 100*/
  37. char *arreglo[cant];  
  38. //char* dato;    
  39. s=0;
  40. arreglo[0]=S3;
  41. printf("\n\n OjO es:%s",arreglo[s]);
  42. for(i=l1; i<=l3-1; i++){
  43.   t=0;
  44.   for(j=i-1; j>=0; j--){
  45.     s++;
  46.     aux1=S3[j];
  47.     S3[j]=S3[j+1];
  48.     S3[j+1]=aux1;
  49.     arreglo[s]=S3;
  50.     printf("\n\n Permutacion %i en ciclo %i es:%s y Arreglo es %s",s,t,S3,arreglo[s]);
  51. //   t=0;
  52. //   while(abs(i+1-j)>1){
  53. // aux1=S3[j+1];
  54. //      S3[j+1]=S3[i+1];
  55. //      S3[i+1]=aux1;
  56. //      s++; t++;
  57. // arreglo[s]=S3;
  58. // printf("\n\n Permutacion %i en ciclo %i es:%s y arreglo es %s",s,t,S3,arreglo[s]);
  59. //   }      
  60.   }        
  61. }
  62. //printf("\n\n Permuta DOS es:%s",arreglo[2]);
  63. for(j=0;j<=cant;j++){
  64.   printf("\n\n Permuta %d es:%s",j,arreglo[j]);
  65. }
  66.  
  67. return EXIT_SUCCESS;
  68. }
  69.  
  70.  
« Última modificación: 5 Marzo 2014, 05:29 am por nanto » En línea

leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: Ayuda con arrays y punteros
« Respuesta #5 en: 4 Marzo 2014, 23:22 pm »


¡¡¡Tienes definida la función factorial dentro de la función main!!!. Debe estar fuera.

Ya nos dirás lo que sucede después.


¡¡¡¡ Saluditos! ..... !!!!


En línea

nanto

Desconectado Desconectado

Mensajes: 5



Ver Perfil
Re: Ayuda con arrays y punteros
« Respuesta #6 en: 5 Marzo 2014, 00:07 am »

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.
« Última modificación: 5 Marzo 2014, 00:15 am por nanto » En línea

ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: Ayuda con arrays y punteros
« Respuesta #7 en: 5 Marzo 2014, 01:28 am »

No se ponen funciones dentro de otras funciones.

PD:
Código
  1. for(i=0; i<=l1; i++){
  2.  
  3.  S3[i]=S1[i];
  4.  
  5. }
  6.  
  7. j=0;
  8.  
  9. for(i=l1; i<l3; i++){
  10.  
  11.  S3[i]=S2[j];
  12.  
  13.   j++;
  14.  
  15. }

Después de eso, en el caso de por ejemplo, l1=2 y l2=3, sobrarán 5 caracteres en l3.
« Última modificación: 5 Marzo 2014, 01:32 am por ivancea96 » En línea

Gh057


Desconectado Desconectado

Mensajes: 1.190



Ver Perfil
Re: Ayuda con arrays y punteros
« Respuesta #8 en: 5 Marzo 2014, 02:08 am »

es cierto lo que comenta ivancea96, estás generando una alta dependencia, aparte que el código se transforma poco a poco en un delirio; es uno de los puntos centrales del paradigma de la programación estructurada, separar código en funciones cortas y auto suficentes, que hagan una sola tarea, y que te permita abstraer el problema de "como lo hace" (se inicia el concepto de encapsulación).

en este momento no encuentro un buen link para orientarte sobre el concepto de la programación estructurada o modular, y formas de crear un función de manera correcta, pero con más o menos detalles en cualquier buen libro de lenguaje C se explica lo anteriormente dicho, igualmente ya te han indicado ese punto ivancea96 como leosansan.
En línea

4 d0nd3 1r4 3l gh057? l4 r3d 3s 74n v4s74 3 1nf1n1t4...
nanto

Desconectado Desconectado

Mensajes: 5



Ver Perfil
Re: Ayuda con arrays y punteros
« Respuesta #9 en: 5 Marzo 2014, 02:37 am »

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.
Código
  1. for(i=0; i<l1; i++){
  2.     S3[i]=S1[i];
  3. }
  4. j=0;
  5. for(i=l1; i<l3; i++){
  6.    S3[i]=S2[j];
  7.    j++;
  8. }
  9.  
Ahora, no se a que te refieres ivancea96,  con que sobran 5 caracteres en L3 (longitud del string 5).
En línea

Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Punteros y arrays
Programación C/C++
cazagavilan 4 2,278 Último mensaje 14 Abril 2012, 19:32 pm
por cazagavilan
Algun Documentos para Punteros y arrays?
Programación C/C++
x64core 4 1,968 Último mensaje 25 Julio 2012, 01:17 am
por david_BS
arrays y punteros.
Programación C/C++
4dr14n31t0r 1 1,510 Último mensaje 24 Septiembre 2016, 04:59 am
por geeke
Ayuda con los arrays y punteros y palabras reservadas de C++?
Programación C/C++
Sty16 2 2,737 Último mensaje 23 Junio 2017, 23:38 pm
por MAFUS
ejercicios de arrays y punteros
Programación C/C++
luis9829 0 1,615 Último mensaje 27 Agosto 2017, 03:00 am
por luis9829
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines