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


Tema destacado: Tutorial básico de Quickjs


  Mostrar Mensajes
Páginas: 1 ... 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 [51] 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 ... 235
501  Programación / Programación C/C++ / Re: [C] Elementos de un array en: 22 Noviembre 2018, 04:04 am
La verdad tenia duda de si realmente esto es lo que buscabas ya que el termino

Citar
Esto en el caso de haber ingresado 10 por teclado.

Era un poco confuso.


Si es rara la forma de capturar los datos

Ya que si ingresas 0, el programa da errores con do-while

Saludos

502  Programación / Programación C/C++ / Re: [C] Elementos de un array en: 22 Noviembre 2018, 03:47 am
Por que no hacerlo al mismo tiempo?

Código
  1.  
  2. #include <stdio.h>
  3.  
  4. int main(void){
  5.    printf("Ingresar cantidad de elementos: ");
  6.    int r;
  7.    scanf("%d", &r);
  8.    int i = 0;
  9.    int array[r],A[r];
  10.  
  11.    do {
  12.        array[r - 1] = r;
  13. A[i] = r;
  14.        r = r- 1;
  15.        ++i;
  16.    } while (r > 0);
  17.    printf("Lista: \n");
  18.    for(r = 0; r < i; ++r)
  19.        printf("%d \t", array[r]);
  20.    printf("\nLista: \n");
  21.    for(r = 0; r < i; ++r)
  22.        printf("%d \t", A[r]);
  23.    return 0;
  24. }
  25.  
503  Seguridad Informática / Seguridad / Re: Investigando un intento de Extorción en: 22 Noviembre 2018, 01:07 am
Reportados a las autoridades ya estan.
504  Seguridad Informática / Seguridad / Re: Investigando un intento de Extorción en: 22 Noviembre 2018, 00:58 am
Si, la verdad, es increible ver que la gente se asuste tan facil con ese tipo de correos.

Y la verdad aqui, que si hackearon el sitio donde estaba registrado y el imbecil del programador no pudo hashear los passwords o incluso los guarda en texto plano, yo no se, ni me moleste en ver.

El punto es que la mayoria de la gente usa el mismo password en cualquier lado y pues en determinados casos si les sacan información comprometedora.

Saludos

PD. Usen un password diferente para cada WEB en la que se registren.
505  Programación / Programación C/C++ / Re: Cómo leer número de un txt. en: 22 Noviembre 2018, 00:42 am
Hay que tener varias consideraciones, para empezar saber distinguir si el archivo esta guardado como texto o en formato binario.

Apartir de ahi hay varias cosas que ver.

Si es modo texto, buscar la estrucura y orden de los datos guardados y leerlos en formato de texto y convertir los necesarios a  datos enteros, flotantes etc. ejemplo fgets + strtol, strtof etc...

Si es modo binario, lo mismo buscar la estrucura y orden de los datos guardados, y leerlo en formato directo a una estrucutra de datos ejemplo fread(&dato1,...

Si me mandas los archivos yo te escribo el programa para leer los datos y mostrarlos en pantalla.

Saludos
506  Seguridad Informática / Análisis y Diseño de Malware / Re: ¿Que provecho se le puede sacar a una Botnet? en: 22 Noviembre 2018, 00:38 am
Podrias hacer minen criptomonedas. o si gustas algo mas tangible puedes obtener premios en efectivo por reportar numeros primos Extremadamente grandes que cumplan ciertas caracteristicas.


https://www.bbc.com/mundo/noticias-42579464

Saludos
507  Programación / Programación C/C++ / Re: Programa C++ Tengo una duda con respecto a este programa. en: 22 Noviembre 2018, 00:10 am
El siguiente fragmento del codigo puede ser optimizado:

Código
  1. int valores[101], numeros[101], solucion[101];
  2. //..
  3.  
  4. for (i = 0; i <= 100; i = i + 1)
  5. {
  6.  valores[i] = 0;
  7.  numeros[i] = 0;
  8.  solucion[i] = 0;
  9. }
  10.  
  11.  

Por

Código
  1. int valores[101]= {0}, numeros[101] = {0}, solucion[101] = {0};
  2.  


O

Código
  1. int valores[101], numeros[101], solucion[101];
  2. memset(valores,0,101*sizeof(int);
  3. memset(numeros,0,101*sizeof(int);
  4. memset(solucion,0,101*sizeof(int);
  5.  


Asi todos los elementos del arreglo se inicializan con valores 0.

Saludos
508  Programación / Programación C/C++ / Plantillas programas escolares en C en: 21 Noviembre 2018, 23:59 pm
El siguiente post muestra  fragmentos de código en C que seguido son utilizados en los programas pedidos de Tareas en las escuelas.

Plantilla de un Menu de opciones usando do-while + switch

Descargar Menu_do_while_switch.c

Código
  1. /*
  2. Twitter: @albertobsd
  3. email: alberto.bsd@gmail.com
  4.  
  5. Buscame tambien en:
  6. web: https://programaciontrabajosescolares.blogspot.com/
  7. e-mail: ProgramacionTrabajosEscolares@gmail.com
  8. facebook: https://www.facebook.com/ProgramacionTrabajosEscolares
  9. */
  10.  
  11. #include<stdio.h>
  12. #include<stdlib.h>
  13.  
  14. int main() {
  15. int opcion;
  16. int entrar =1;
  17. char temp[10];
  18. do {
  19. printf("1) Opcion 1\n");
  20. printf("2) Opcion 2\n");
  21. printf("3) Opcion 3\n");
  22. printf("4) Salir\n");
  23. do{
  24. printf("Ingrese una opcion");
  25. fgets(temp,10,stdin);
  26. opcion  = strtol(temp,NULL,10);
  27. }while(opcion < 0);
  28. switch(opcion) {
  29. case 1:
  30. printf("Usted selecciono %i\n",opcion);
  31. break;
  32. case 2:
  33. printf("Usted selecciono %i\n",opcion);
  34. break;
  35. case 3:
  36. printf("Usted selecciono %i\n",opcion);
  37. break;
  38. case 4:
  39. printf("Usted selecciono %i\n",opcion);
  40. entrar = 0;
  41. break;
  42. default:
  43. printf("Opcion incorrecta - Mensaje de Error\n");
  44. break;
  45. }
  46. }while(entrar == 1); //Se puede dejar como  "}while(entrar);"
  47. return 0;
  48. }
  49.  



Fuente: Plantilla de para Capturar Datos y Mostrarlos


Plantilla de para Capturar Datos y Mostrarlos

Usando estructura de datos y memoria dinámica para los datos almacenados.

Descarga plantilla_capturar_mostrar_datos.c

Código
  1. /*
  2. Twitter: @albertobsd
  3. email: alberto.bsd@gmail.com
  4.  
  5. Buscame tambien en:
  6. web: https://programaciontrabajosescolares.blogspot.com/
  7. e-mail: ProgramacionTrabajosEscolares@gmail.com
  8. facebook: https://www.facebook.com/ProgramacionTrabajosEscolares
  9. */
  10.  
  11. #include<stdio.h> //Funciones printf, fgets
  12. #include<stdlib.h> //realloc
  13. #include<string.h> //strcspn
  14. #include<ctype.h> //tolower
  15.  
  16. #define MAX_LEN_ALFANUMERICA_1 100
  17. #define MAX_LEN_ALFANUMERICA_2 50
  18. #define MAX_LEN_ALFANUMERICA_3 20
  19.  
  20. typedef struct plantilla_struct {
  21. char variable_alfanumerica_1[MAX_LEN_ALFANUMERICA_1];
  22. char variable_alfanumerica_2[MAX_LEN_ALFANUMERICA_2];
  23. char variable_alfanumerica_3[MAX_LEN_ALFANUMERICA_3];
  24. int variable_entera_1;
  25. int variable_entera_2;
  26. int variable_entera_3;
  27. float variable_flotante_1;
  28. }TIPO;
  29.  
  30. int funcion_ingreso_de_datos();
  31. int funcion_imprimir_datos();
  32.  
  33.  
  34. TIPO *tipos = NULL;
  35. int contador_tipos = 0;
  36.  
  37. int main() {
  38. int opcion;
  39. int entrar =1;
  40. char temp[10];
  41. do {
  42. printf("1) funcion_ingreso_de_datos\n");
  43. printf("2) funcion_imprimir_datos\n");
  44. printf("3) Salir\n");
  45. do{
  46. printf("Ingrese una opcion: ");
  47. fgets(temp,10,stdin);
  48. opcion  = strtol(temp,NULL,10);
  49. }while(opcion <= 0); //Mientras sea menor o igual que 0
  50.  
  51. switch(opcion) {
  52. case 1:
  53. printf("Usted selecciono %i\n",opcion);
  54. funcion_ingreso_de_datos();
  55. break;
  56. case 2:
  57. printf("Usted selecciono %i\n",opcion);
  58. funcion_imprimir_datos();
  59. break;
  60. case 3:
  61. printf("Usted selecciono %i\n",opcion);
  62. entrar = 0;
  63. break;
  64. default:
  65. printf("Opcion incorrecta - Mensaje de Error\n");
  66. break;
  67. }
  68. }while(entrar == 1); //Se puede dejar como  "}while(entrar);"
  69. return 0;
  70. }
  71.  
  72. int funcion_ingreso_de_datos() {
  73. int opcion;
  74. int entrar =1,entrar_opcion_si_no;
  75. char temp[10];
  76. do {
  77.  
  78. tipos = realloc(tipos,(contador_tipos+1)*sizeof(struct plantilla_struct)); //Incrementamos el espacio para 1 Variable TIPO mas en el arreglo
  79.  
  80. //Capturamos variable_alfanumerica_1
  81. printf("Capture variable_alfanumerica_1: ");
  82. fgets(tipos[contador_tipos].variable_alfanumerica_1,MAX_LEN_ALFANUMERICA_1,stdin);
  83. tipos[contador_tipos].variable_alfanumerica_1[strcspn(tipos[contador_tipos].variable_alfanumerica_1,"\n\r")] = '\0'; //Reemplazamos los retornos de linea con caracrer nulo, terminador de cadena
  84.  
  85. //Capturamos variable_alfanumerica_2
  86. printf("Capture variable_alfanumerica_2: ");
  87. fgets(tipos[contador_tipos].variable_alfanumerica_2,MAX_LEN_ALFANUMERICA_2,stdin);
  88. tipos[contador_tipos].variable_alfanumerica_2[strcspn(tipos[contador_tipos].variable_alfanumerica_2,"\n\r")] = '\0'; //Reemplazamos los retornos de linea con caracrer nulo, terminador de cadena
  89.  
  90. //Capturamos variable_alfanumerica_3
  91. printf("Capture variable_alfanumerica_3: ");
  92. fgets(tipos[contador_tipos].variable_alfanumerica_3,MAX_LEN_ALFANUMERICA_3,stdin);
  93. tipos[contador_tipos].variable_alfanumerica_3[strcspn(tipos[contador_tipos].variable_alfanumerica_3,"\n\r")] = '\0'; //Reemplazamos los retornos de linea con caracrer nulo, terminador de cadena
  94.  
  95.  
  96. //Capturamos variable_entera_1
  97. do {
  98. printf("Capture variable_entera_1: (Solo mayores que 0) ");
  99. fgets(temp,10,stdin);
  100. tipos[contador_tipos].variable_entera_1 = strtol(temp,NULL,10); //Solo procesamos numeros BASE 10
  101.  
  102. }while(tipos[contador_tipos].variable_entera_1 <= 0); // Salimos del DO solo si el valore leido es mayor o igual a 1
  103.  
  104. //Capturamos variable_entera_2
  105. do {
  106. printf("Capture variable_entera_2: (Solo mayores o iguales que 0) ");
  107. fgets(temp,10,stdin);
  108. tipos[contador_tipos].variable_entera_2 = strtol(temp,NULL,10); //Solo procesamos numeros BASE 10
  109. }while(tipos[contador_tipos].variable_entera_2 < 0); // Salimos del DO solo si el valore leido es mayor o igual a 0
  110.  
  111.  
  112. //Capturamos variable_entera_3
  113. do {
  114. printf("Capture variable_entera_3: (Solo Negativos) ");
  115. fgets(temp,10,stdin);
  116. tipos[contador_tipos].variable_entera_3 = strtol(temp,NULL,10); //Solo procesamos numeros BASE 10
  117. }while(tipos[contador_tipos].variable_entera_3 >= 0); // Salimos del DO solo si el valor leido es negativo
  118.  
  119. //Capturamos variable_flotante_1
  120. do {
  121. printf("Capture variable_flotante_1: (Solo distintos que 0) ");
  122. fgets(temp,10,stdin);
  123. tipos[contador_tipos].variable_flotante_1 = strtof(temp,NULL);
  124. }while(tipos[contador_tipos].variable_flotante_1 == 0.0); // Salimos del DO solo si el valor leido distinto de 0
  125.  
  126. entrar_opcion_si_no = 1;
  127. do{
  128. printf("Desea segir ingresando mas datos? (s/n)\n");
  129. fgets(temp,10,stdin);
  130. switch(tolower(temp[0])) {
  131. case 's':
  132. entrar_opcion_si_no = 0;
  133. printf("Selecciono SI\n");
  134. break;
  135. case 'n':
  136. entrar_opcion_si_no = 0;
  137. printf("Selecciono NO\n");
  138. entrar = 0; // Se cambia la variable para salir del menu principal
  139. break;
  140. default:
  141. printf("opcion incorrecta, solo 's' o 'n'\n");
  142. break;
  143. }
  144. opcion  = strtol(temp,NULL,10);
  145. }while(entrar_opcion_si_no == 1);
  146.  
  147. contador_tipos++; //Aqui incrementamos el contador_tipos que indica cuantos valores completos tenemos de la estructura plantilla_struct
  148. }while(entrar == 1); //Se puede dejar como  "}while(entrar);"
  149. }
  150.  
  151. int funcion_imprimir_datos() { //Imprimir los datos no tiene mucho sentido, solo hay que recorrer correctamente la cantidad de registros previamente capturados
  152. int i = 0;
  153. while(i < contador_tipos) {
  154. printf("Datos del registro %i\n",(i+1));
  155. printf("variable_alfanumerica_1: %s\n",tipos[i].variable_alfanumerica_1);
  156. printf("variable_alfanumerica_2: %s\n",tipos[i].variable_alfanumerica_2);
  157. printf("variable_alfanumerica_3: %s\n",tipos[i].variable_alfanumerica_3);
  158. printf("variable_entera_1: %i\n",tipos[i].variable_entera_1);
  159. printf("variable_entera_2: %i\n",tipos[i].variable_entera_2);
  160. printf("variable_entera_3: %i\n",tipos[i].variable_entera_3);
  161. printf("variable_flotante_1: %f\n",tipos[i].variable_flotante_1);
  162. printf("\n");//Enter adicional
  163. i++;
  164. }
  165. }
  166.  
509  Programación / Programación C/C++ / Re: ¿He liberado todos los apuntadores? en: 21 Noviembre 2018, 01:35 am
- test_calloc incrementa 2 veces N_ptr, por que?

Si se me paso ese detalle, muchas gracias. Ya lo he editado

Lo que comentas de la linea 12, es para el caso donde Realloc fuera llamado con un apuntador a NULL, en este caso realloc funciona como malloc.

Citar
If ptr is NULL, the behavior is the same as calling malloc(new_size).

Que en la unica ocacion donde se tiene que incrementar el contador de apuntadores.

Para ese ejemplo el siguiente codigo:

Código
  1. #include<stdlib.h>
  2. #include<stdio.h>
  3.  
  4. int main() {
  5. int *lista = NULL;
  6. int i = 0;
  7. printf("Lista apunta a %p\n",lista);
  8. do {
  9. lista = realloc(lista,(i+1)*sizeof(int));//Lista solo es NULL en la primera llamada de Realloc
  10. printf("Lista apunta a %p\n",lista);
  11. lista[i] = rand();
  12. i++;
  13. }while( i < 10);
  14. free(lista);//Aqui liberamos el apuntador --
  15. }
  16.  

En caso constrario donde el ptr de parametro es distinto de NULL, no hacemos nada, ya que el apuntador ya esta contabilizado.
510  Programación / Programación C/C++ / ¿He liberado todos los apuntadores? en: 20 Noviembre 2018, 23:20 pm
Fuente: ¿He liberado todos los apuntadores?


Para aquellos que les guste programar con memoria dinamica en C, frecuentemente se encontraran en ocasiones tener la sensacion de no haber liberado un apuntador, esto puede ser cuando tambien trabajamos con arreglos (longitud variable) de apuntadores.

Para facilitar esta tarea se pueden programa sus propias implementaciones que lleven un conteo de cuantos apuntadores se han creado y de cuantos se han liberado.

Si al final del programa el resultado es 0, entonces pueden estar tranquilos de que todo se libero correctamente.

Esta sencilla implementacion, solo lleva dicho conteo, NO lleva conteo de memoria utilizada y/o control de cuales apuntadores ya fueron liberados, eso ya es harina de otro costal.

Código
  1. #include<stdlib.h>
  2.  
  3. unsigned int N_ptr = 0;
  4.  
  5. unsigned int test_result() {
  6. return N_ptr;
  7. }
  8.  
  9. void *test_realloc(void *ptr,size_t size) {
  10. void *ptr_new = NULL;
  11. ptr_new = realloc(ptr,size);
  12. if(ptr == NULL && ptr_new != NULL){
  13. N_ptr++;
  14. }
  15. return ptr_new;
  16. }
  17.  
  18. void *test_calloc(size_t nmemb,size_t size) {
  19. void *ptr = NULL;
  20. ptr = calloc(nmemb,size);
  21. if(ptr != NULL) {
  22. N_ptr++;
  23. }
  24. return ptr;
  25. }
  26.  
  27. void *test_malloc(size_t size) {
  28. void *ptr = NULL;
  29. ptr = malloc(size);
  30. if(ptr != NULL) {
  31. N_ptr++;
  32. }
  33. return ptr;
  34. }
  35.  
  36. int test_free(void *ptr) {
  37. N_ptr--;
  38. free(ptr);
  39. }
  40.  

Se podrian sustituir las funciones malloc, calloc, realloc y free en nuestro programa hacia estas funciones para testear y exclusivamente para prueba. posteriormente volver a dejarlas llamadas originales.

Al final del main despues de liberar todo podremos colocar esta linea

Código:
printf("Valor %i",test_result());
Si en nuestra salida del progrma el resultado es 0, significa que todo esta bien.

En caso contrareo, deberemos depurar en nuestras subfunciones el antes y el despues de cada llamada para validar en que función esta el problema.

Saludos
Páginas: 1 ... 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 [51] 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 ... 235
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines