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

 

 


Tema destacado: Introducción a Git (Primera Parte)


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


Desconectado Desconectado

Mensajes: 551



Ver Perfil
modificacion codigo ???
« en: 13 Febrero 2014, 08:51 am »

Hola
este código me calcula o compara números y dice la distancia entre estos pero lo hace de izquierda a derechas o sea en horizontal

ejemplo

1 2 3 5 8 y me calcula que entre el 1 y  2  hay 1 entre 2 y 3 hay 1 entre 3 y 5 hay 2 y entre 5 y 8 hay 3

resultado
1  2  3  5  8 <--- muestra
  1  1  3   3 <----resultado


Bien lo que ahora busco es hacerlo pero en vertical  con los números hacia abajo

Código
  1. #include <stdio.h>
  2. int main()
  3. {
  4.    int i,x1=0, x2=0,x3=0,x4=0,x5=0,x6=0;
  5.    FILE* fichero,*fich;
  6.    fichero = fopen("combiLuis.txt", "r");
  7.    if (fichero == NULL)
  8.        {
  9.        printf("No existe el fichero!\n");
  10.        return 1;
  11.        }
  12.   fich = fopen("CombiDiferanciasLuis.txt", "wt");
  13.    if (fich == NULL)
  14.        {
  15.        printf("No existe el fichero!\n");
  16.        return 1;
  17.        }
  18.   while (! feof(fichero))
  19.            {
  20.                fscanf(fichero,"%d %d %d %d %d %d ", &x1,&x2,&x3,&x4,&x5,&x6);
  21.                fprintf(fich,"%d %d %d %d %d \n",x2- x1,x3-x2,x4-x3,x5-x4,x6-x5);
  22.            }
  23.    fclose(fichero);
  24.    fclose(fich);
  25.    return 0;
  26. }

Luis


se me olvido up
seria hacer lo mismo pero hacia abajo

1 2 3 4 5
2 5 4 7 8
4 2 1 8 9






« Última modificación: 13 Febrero 2014, 09:13 am por luis456 » En línea

Que tu sabiduria no sea motivo de Humillacion para los demas
eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: modificacion codigo ???
« Respuesta #1 en: 13 Febrero 2014, 09:56 am »

Pasos a seguir:

guarda x2-x1 en x1
guarda x3-x2 en x2
guarda x4-x3 en x3
...

tienes que tener en cuenta que en cada iteración vas a perder el último número, en tu caso, no puedes comparar la diferencia del 8 con el siguiente porque, directamente, no existe... ahí no se si vas a usar un número por defecto o directamente, a diezmar la secuencia.

Si eliminas el último número en cada paso deberías pasar a usar un vector en vez de variables sueltas, así te puedes permitir el lujo de gestionar los accesos de forma dinámica:

Código
  1. int x[6] = { 0, 0, 0 ,0, 0, 0 };
  2.  
  3. // ...
  4.  
  5. fscanf(fichero,"%d %d %d %d %d %d ", &x[0], &x[1], &x[2], &x[3], &x[4], &x[5] );
  6.  
  7. int tope = 5;
  8.  
  9. while ( tope > 0 )
  10. {
  11.  int i = 0;
  12.  for ( i=0; i<tope; i++ )
  13.  {
  14.    x[ i ] = x[ i + 1 ] - x[ i ];
  15.    fprintf( fich, "%d ", x[ i ] );
  16.  }
  17.  fprintf( fich, "\n" ); // Salto de linea al finalizar cada secuencia.
  18.  tope--;
  19. }
  20.  


En línea

leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: modificacion codigo ???
« Respuesta #2 en: 13 Febrero 2014, 20:57 pm »

Es decir, amigo Luis, además de las diferencias, digamos en horizontal de una línea, quieres las diferencias de una línea con la siguiente. Esto si sale nos forramos y no olvides que voy a un porcentaje en los beneficios de tu Empresa. ;)

Por si no lo he tenido claro te pongo lo que creo que pides.

En un texto están las líneas de números:


Código
  1. 17 21 23 32 39 40
  2. 13 16 21 22 25 34
  3. 19 20 25 27 39 49
  4. 15 24 33 37 45 46
  5. 13 21 22 30 32 49
  6. 11 17 21 24 25 26
  7. 10 14 18 20 27 43
  8. 13 14 25 36 43 49
  9. 10 12 20 21 28 32
  10. 13 19 20 27 28 32

y lo que tú quieres es ...¡¡¡tachán, tachán!!!:

Citar
* 17 21 23 32 39 40 * [1]
    1  1  1  1  1"  ==>dif_horizontal

* 13 16 21 22 25 34* [2]
    3  5  1  3  9  ==>dif_horizontal
 -4 -5 -2-10-14 -6  ==>dif_vertical

* 19 20 25 27 39 49* [3]
    1  5  2 12 10  ==>dif_horizontal
  6  4  4  5 14 15  ==>dif_vertical

* 15 24 33 37 45 46* [4]
    9  9  4  8  1  ==>dif_horizontal
 -4  4  8 10  6 -3  ==>dif_vertical

* 13 21 22 30 32 49* [5]
    8  1  8  2 17  ==>dif_horizontal
 -2 -3-11 -7-13  3  ==>dif_vertical

* 11 17 21 24 25 26* [6]
    6  4  3  1  1  ==>dif_horizontal
 -2 -4 -1 -6 -7-23  ==>dif_vertical

* 10 14 18 20 27 43* [7]
    4  4  2  7 16  ==>dif_horizontal
 -1 -3 -3 -4  2 17  ==>dif_vertical

* 13 14 25 36 43 49* [8]
    1 11 11  7  6  ==>dif_horizontal
  3  0  7 16 16  6  ==>dif_vertical

* 10 12 20 21 28 32* [9]
    2  8  1  7  4  ==>dif_horizontal
 -3 -2 -5-15-15-17  ==>dif_vertical

* 13 19 20 27 28 32* [10]
    6  1  7  1  4  ==>dif_horizontal
  3  7  0  6  0  0  ==>dif_vertical

Está visto que el destino no deja que nos separemos. :rolleyes: :rolleyes: :rolleyes:

Te recuerdo que el tema de ficheros no es mi fuerte así que espero que algún erudito en el tema lo mejore.

Lo que si te he dejado en el código son tanto los printf, para ver el resultado en pantalla, como los fprintf, para grabar el fichero. Por cierto, fíjate que los he renombrado con un cero al final de los mismos, así no perdía los anteriores.


Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int main()
  5. {
  6.  int i=0,j=0,k=0,y[2][6];
  7.  FILE* fichero,*fich;
  8.  fichero = fopen("combiLuis0.txt", "r");
  9.  if ((fichero = fopen("combiLuis0.txt", "r")) == NULL){
  10.    perror("combiLuis0.txt");
  11.    return EXIT_FAILURE;
  12.  }
  13.  fich = fopen("CombiDiferanciasLuis0.txt", "w");
  14.  if ((fich = fopen("CombiDiferanciasLuis0.txt", "w")) == NULL){
  15.    perror("CombiDiferanciasLuis0.txt");
  16.    return EXIT_FAILURE;
  17.  }
  18.  while (fscanf(fichero,"%d %d %d %d %d %d ", &y[i][0], &y[i][1], &y[i][2], &y[i][3], &y[i][4], &y[i][5] )==6){
  19.    i++;k++;
  20.    if (i==1){
  21.      printf("\n*");
  22.      fprintf(fich,"\n*");
  23.      for (j=0;j<6;j++){
  24.        printf ("%3d",y[0][j]) ;
  25.        fprintf (fich,"%3d",y[0][j]) ;
  26.      }
  27.      printf(" * [%d]\n  ",k);
  28.      fprintf(fich," * [%d]\n  ",k);
  29.      for (j=0;j<5;j++){
  30.        printf ("%3i",y[0][j+1]-y[0][j]);
  31.        fprintf (fich,"%3i",y[0][j]+1-y[0][j]);
  32.      }
  33.      printf("  ==>dif_horizontal\n");
  34.      fprintf(fich,"\"  ==>dif_horizontal\n");
  35.    }
  36.    else {
  37.      printf("\n*");
  38.      fprintf(fich,"\n*");
  39.      for (j=0;j<6;j++){
  40.        printf ("%3d",y[1][j]);
  41.        fprintf (fich,"%3d",y[1][j]);
  42.      }
  43.      printf("* [%d]\n  ",k);
  44.      fprintf(fich,"* [%d]\n  ",k);
  45.      for (j=0;j<5;j++){
  46.        printf ("%3i",y[1][j+1]-y[1][j]) ;
  47.        fprintf (fich,"%3i",y[1][j+1]-y[1][j]) ;
  48.      }
  49.      printf("  ==>dif_horizontal\n");
  50.      fprintf(fich,"  ==>dif_horizontal\n");
  51.      for (j=0;j<6;j++){
  52.        printf ("%3i",y[1][j]-y[0][j]);
  53.        fprintf (fich,"%3i",y[1][j]-y[0][j]);
  54.      }
  55.      printf("  ==>dif_vertical\n");
  56.      fprintf(fich,"  ==>dif_vertical\n");
  57.      for (j=0;j<6;j++){
  58.        y[0][j]=y[1][j];
  59.      }
  60.      i=1;
  61.    }
  62.  }
  63.  fclose(fichero);
  64.  fclose(fich);
  65.  return EXIT_SUCCESS;
  66. }

Espero que esto te de "vidilla" y sigas profundizando en el tema.

No obstante, te recuerdo que todos estos resultados parciales que vas obteniendo los tendrías que pasar por un programa estadístico que te de las medias, varianzas, desviaciones, intervalos de confianza, etc. Yo en particular te aconsejo el SPSS, es potente y relativamente claro ..... ¡¡¡pero no me lo pidas a mí!!!....., consulta con tus amigos matemáticos. ;)

Un fuerte abrazo de tu amigo León.



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



EDITO:Corregido. ;)
« Última modificación: 14 Febrero 2014, 06:23 am por leosansan » En línea

luis456


Desconectado Desconectado

Mensajes: 551



Ver Perfil
Re: modificacion codigo ???
« Respuesta #3 en: 14 Febrero 2014, 09:35 am »

Es decir, amigo Luis, además de las diferencias, digamos en horizontal de una línea, quieres las diferencias de una línea con la siguiente. Esto si sale nos forramos y no olvides que voy a un porcentaje en los beneficios de tu Empresa. ;)

Por si no lo he tenido claro te pongo lo que creo que pides.

Si creo que te has metido en mi mente jejejej ni yo hubiera pensado en hacerlo de estas dos formas " FUNCIONA " mejor de lo que esperaba


Y si estamos y estaremos unidos jejejej y gracias por aparecer de nuevo ya sabes :)

Luis
gracias también a los que respondieron al tema


En línea

Que tu sabiduria no sea motivo de Humillacion para los demas
leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: modificacion codigo ???
« Respuesta #4 en: 14 Febrero 2014, 21:25 pm »


Y si sólo se quieren las diferencias entre líneas sucesivas, tipo:

Citar
  4  5  2 10 14  6
 -6 -4 -4 -5-14-15
  4 -4 -8-10 -6  3
  2  3 11  7 13 -3
  2  4  1  6  7 23
  1  3  3  4 -2-17
 -3  0 -7-16-16 -6
  3  2  5 15 15 17
 -3 -7  0 -6  0  0

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int main()
  5. {
  6.  int i=0,j=0,k=0,y[2][6];
  7.  FILE* fichero,*fich;
  8.  fichero = fopen("combiLuis0.txt", "r");
  9.  if ((fichero = fopen("combiLuis0.txt", "r")) == NULL){
  10.    perror("combiLuis0.txt");
  11.    return EXIT_FAILURE;
  12.  }
  13.  fich = fopen("CombiDiferanciasLuis01.txt", "w");
  14.  if ((fich = fopen("CombiDiferanciasLuis01.txt", "w")) == NULL){
  15.    perror("CombiDiferanciasLuis01.txt");
  16.    return EXIT_FAILURE;
  17.  }
  18.  i = 0;
  19.  while (fscanf(fichero,"%d %d %d %d %d %d ", &y[i][0], &y[i][1], &y[i][2], &y[i][3], &y[i][4], &y[i][5] )==6){
  20.  
  21.    i++;k++;
  22.    if (i>1){
  23.      printf("\n");
  24.      fprintf(fich,"\n");
  25.      for (j=0;j<6;j++){
  26.        printf ("%3i",y[0][j]-y[1][j]);
  27.        fprintf (fich,"%3i",y[0][j]-y[1][j]);
  28.      }
  29.      for (j=0;j<6;j++)
  30.        y[0][j]=y[1][j];
  31.      i=1;
  32.    }
  33.  }
  34.  fclose(fichero);
  35.  fclose(fich);
  36.  return EXIT_SUCCESS;
  37. }
  38.  

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



En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Modificacion inocua de código con Olly
Ingeniería Inversa
TaU 7 4,197 Último mensaje 29 Abril 2004, 08:45 am
por Shaddy
modificacion de codigo para login
PHP
turion 0 2,011 Último mensaje 30 Septiembre 2009, 11:12 am
por turion
TUTORIAL: Modificación e inyección de código en ensamblados .NET
Ingeniería Inversa
karmany 1 2,866 Último mensaje 15 Febrero 2010, 20:20 pm
por Keyen Night
modificacion de codigo en C
Programación C/C++
DAOST420 1 2,997 Último mensaje 12 Noviembre 2020, 18:11 pm
por K-YreX
MODIFICACION DE CODIGO FUENTE
Ingeniería Inversa
jarvis123 1 2,129 Último mensaje 14 Septiembre 2022, 23:52 pm
por Danielㅤ
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines