|
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 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? #include <stdio.h> int main(void){ printf("Ingresar cantidad de elementos: "); int r; int i = 0; int array[r],A[r]; do { array[r - 1] = r; A[i] = r; r = r- 1; ++i; } while (r > 0); for(r = 0; r < i; ++r) for(r = 0; r < i; ++r) return 0; }
|
|
|
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
|
|
|
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: int valores[101], numeros[101], solucion[101]; //.. for (i = 0; i <= 100; i = i + 1) { valores[i] = 0; numeros[i] = 0; solucion[i] = 0; }
Por int valores[101]= {0}, numeros[101] = {0}, solucion[101] = {0};
O int valores[101], numeros[101], solucion[101]; memset(valores ,0,101*sizeof(int); memset(numeros ,0,101*sizeof(int); memset(solucion ,0,101*sizeof(int);
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 + switchDescargar Menu_do_while_switch.c/* Twitter: @albertobsd email: alberto.bsd@gmail.com Buscame tambien en: web: https://programaciontrabajosescolares.blogspot.com/ e-mail: ProgramacionTrabajosEscolares@gmail.com facebook: https://www.facebook.com/ProgramacionTrabajosEscolares */ #include<stdio.h> #include<stdlib.h> int main() { int opcion; int entrar =1; char temp[10]; do { do{ opcion = strtol(temp ,NULL ,10); }while(opcion < 0); switch(opcion) { case 1: printf("Usted selecciono %i\n",opcion ); break; case 2: printf("Usted selecciono %i\n",opcion ); break; case 3: printf("Usted selecciono %i\n",opcion ); break; case 4: printf("Usted selecciono %i\n",opcion ); entrar = 0; break; default: printf("Opcion incorrecta - Mensaje de Error\n"); break; } }while(entrar == 1); //Se puede dejar como "}while(entrar);" return 0; }
Fuente: Plantilla de para Capturar Datos y MostrarlosPlantilla de para Capturar Datos y MostrarlosUsando estructura de datos y memoria dinámica para los datos almacenados. Descarga plantilla_capturar_mostrar_datos.c/* Twitter: @albertobsd email: alberto.bsd@gmail.com Buscame tambien en: web: https://programaciontrabajosescolares.blogspot.com/ e-mail: ProgramacionTrabajosEscolares@gmail.com facebook: https://www.facebook.com/ProgramacionTrabajosEscolares */ #include<stdio.h> //Funciones printf, fgets #include<stdlib.h> //realloc #include<string.h> //strcspn #include<ctype.h> //tolower #define MAX_LEN_ALFANUMERICA_1 100 #define MAX_LEN_ALFANUMERICA_2 50 #define MAX_LEN_ALFANUMERICA_3 20 typedef struct plantilla_struct { char variable_alfanumerica_1[MAX_LEN_ALFANUMERICA_1]; char variable_alfanumerica_2[MAX_LEN_ALFANUMERICA_2]; char variable_alfanumerica_3[MAX_LEN_ALFANUMERICA_3]; int variable_entera_1; int variable_entera_2; int variable_entera_3; float variable_flotante_1; }TIPO; int funcion_ingreso_de_datos(); int funcion_imprimir_datos(); TIPO *tipos = NULL; int contador_tipos = 0; int main() { int opcion; int entrar =1; char temp[10]; do { printf("1) funcion_ingreso_de_datos\n"); printf("2) funcion_imprimir_datos\n"); do{ printf("Ingrese una opcion: "); opcion = strtol(temp ,NULL ,10); }while(opcion <= 0); //Mientras sea menor o igual que 0 switch(opcion) { case 1: printf("Usted selecciono %i\n",opcion ); funcion_ingreso_de_datos(); break; case 2: printf("Usted selecciono %i\n",opcion ); funcion_imprimir_datos(); break; case 3: printf("Usted selecciono %i\n",opcion ); entrar = 0; break; default: printf("Opcion incorrecta - Mensaje de Error\n"); break; } }while(entrar == 1); //Se puede dejar como "}while(entrar);" return 0; } int funcion_ingreso_de_datos() { int opcion; int entrar =1,entrar_opcion_si_no; char temp[10]; do { tipos = realloc(tipos ,(contador_tipos +1)*sizeof(struct plantilla_struct )); //Incrementamos el espacio para 1 Variable TIPO mas en el arreglo //Capturamos variable_alfanumerica_1 printf("Capture variable_alfanumerica_1: "); fgets(tipos [contador_tipos ]. variable_alfanumerica_1,MAX_LEN_ALFANUMERICA_1 ,stdin ); 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 //Capturamos variable_alfanumerica_2 printf("Capture variable_alfanumerica_2: "); fgets(tipos [contador_tipos ]. variable_alfanumerica_2,MAX_LEN_ALFANUMERICA_2 ,stdin ); 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 //Capturamos variable_alfanumerica_3 printf("Capture variable_alfanumerica_3: "); fgets(tipos [contador_tipos ]. variable_alfanumerica_3,MAX_LEN_ALFANUMERICA_3 ,stdin ); 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 //Capturamos variable_entera_1 do { printf("Capture variable_entera_1: (Solo mayores que 0) "); tipos [contador_tipos ]. variable_entera_1 = strtol(temp ,NULL ,10); //Solo procesamos numeros BASE 10 }while(tipos[contador_tipos].variable_entera_1 <= 0); // Salimos del DO solo si el valore leido es mayor o igual a 1 //Capturamos variable_entera_2 do { printf("Capture variable_entera_2: (Solo mayores o iguales que 0) "); tipos [contador_tipos ]. variable_entera_2 = strtol(temp ,NULL ,10); //Solo procesamos numeros BASE 10 }while(tipos[contador_tipos].variable_entera_2 < 0); // Salimos del DO solo si el valore leido es mayor o igual a 0 //Capturamos variable_entera_3 do { printf("Capture variable_entera_3: (Solo Negativos) "); tipos [contador_tipos ]. variable_entera_3 = strtol(temp ,NULL ,10); //Solo procesamos numeros BASE 10 }while(tipos[contador_tipos].variable_entera_3 >= 0); // Salimos del DO solo si el valor leido es negativo //Capturamos variable_flotante_1 do { printf("Capture variable_flotante_1: (Solo distintos que 0) "); tipos[contador_tipos].variable_flotante_1 = strtof(temp,NULL); }while(tipos[contador_tipos].variable_flotante_1 == 0.0); // Salimos del DO solo si el valor leido distinto de 0 entrar_opcion_si_no = 1; do{ printf("Desea segir ingresando mas datos? (s/n)\n"); case 's': entrar_opcion_si_no = 0; break; case 'n': entrar_opcion_si_no = 0; entrar = 0; // Se cambia la variable para salir del menu principal break; default: printf("opcion incorrecta, solo 's' o 'n'\n"); break; } opcion = strtol(temp ,NULL ,10); }while(entrar_opcion_si_no == 1); contador_tipos++; //Aqui incrementamos el contador_tipos que indica cuantos valores completos tenemos de la estructura plantilla_struct }while(entrar == 1); //Se puede dejar como "}while(entrar);" } int funcion_imprimir_datos() { //Imprimir los datos no tiene mucho sentido, solo hay que recorrer correctamente la cantidad de registros previamente capturados int i = 0; while(i < contador_tipos) { printf("Datos del registro %i\n",(i +1)); printf("variable_alfanumerica_1: %s\n",tipos [i ]. variable_alfanumerica_1); printf("variable_alfanumerica_2: %s\n",tipos [i ]. variable_alfanumerica_2); printf("variable_alfanumerica_3: %s\n",tipos [i ]. variable_alfanumerica_3); printf("variable_entera_1: %i\n",tipos [i ]. variable_entera_1); printf("variable_entera_2: %i\n",tipos [i ]. variable_entera_2); printf("variable_entera_3: %i\n",tipos [i ]. variable_entera_3); printf("variable_flotante_1: %f\n",tipos [i ]. variable_flotante_1); printf("\n");//Enter adicional i++; } }
|
|
|
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. 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: #include<stdlib.h> #include<stdio.h> int main() { int *lista = NULL; int i = 0; printf("Lista apunta a %p\n",lista ); do { lista = realloc(lista ,(i +1)*sizeof(int));//Lista solo es NULL en la primera llamada de Realloc printf("Lista apunta a %p\n",lista ); i++; }while( i < 10); free(lista );//Aqui liberamos el apuntador -- }
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. #include<stdlib.h> unsigned int N_ptr = 0; unsigned int test_result() { return N_ptr; } void *test_realloc(void *ptr,size_t size) { void *ptr_new = NULL; if(ptr == NULL && ptr_new != NULL){ N_ptr++; } return ptr_new; } void *test_calloc(size_t nmemb,size_t size) { void *ptr = NULL; if(ptr != NULL) { N_ptr++; } return ptr; } void *test_malloc(size_t size) { void *ptr = NULL; if(ptr != NULL) { N_ptr++; } return ptr; } int test_free(void *ptr) { N_ptr--; }
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 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
|
|
|
|
|
|
|