Entradas

Mostrando entradas de 2018

FIFO en C Primero en Entrar, primero en salir, Cola o Fila

Imagen
No es lo mas eficiente, hay muchas cosas se podrian mejorar, en especifico la forma en la que se organizan  el arreglo de elementos actuales en la Fila,  sin embargo funciono para el proposito. Yo se que la mayoría de estas estructuras ya están implementadas. Pero no se puede decir que eres programador si no sabes implementarlas por tu cuenta. Codigo: /*  El tipo de dato se puede cambiar dependiendo de la implementacion que se le quiera dar, tambien se tendrian que cambiar los tipos de datos devueltos por las funciones  En este caso yo queria un arreglo de apuntadores char* por lo cual el contenedor es char**  */ typedef struct str_queue    {     char **queue;     int len; }Queue; Queue *create_queue(); void free_queue(Queue *q); char *de_queue(Queue *q); void en_queue(Queue *q, char *ptr);     Queue *create_queue()    {     Queue *r = malloc(sizeof(struct str_queue));     r->len = 0;     r->queue = NULL;     return r; } void free_queue(Queue *q)    {     if(q)    {

C socket siempre me devuelve -1 [Winsock]

El problema de este post es que al momento de programar un miniservidor WEB Este me marcaba lo siguiente: Valor -1 socket: No error   El codigo de prueba es: #include<winsock2.h> #include<stdio.h> #include<errno.h> int main()    {     int s;     if ((s = socket(AF_INET, SOCK_STREAM, 0)) < 0) {         printf("Valor %i\n",s);         perror("socket");         return 1;     } } Se compila de la siguiente manera: gcc -o test.exe test.c -lws2_32  Al parecer los pendejos de Micro$oft siempre saliendose de lo estandar para poder utilizar socket, necesitas inicializar el Winsock de la siguiente manera. #include<winsock2.h> #include<stdio.h> #include<errno.h> WSADATA *wsaData; int main()    {     int s,iResult;     wsaData = calloc(1,sizeof(WSADATA));     iResult = WSAStartup(MAKEWORD(2,2), wsaData);     if (iResult != 0) {         printf("WSAStartup failed: %d\n", iResult);         return 1;     }     if ((s

¿Queda algo en el Buffer de Entrada stdin?

Imagen
Muy buen dia aun que la pregunta en el titulo de este post parece una pregunta totalmente N00b. No lo es. El objetivo de post Deja de utilizar fflush Código fflush ( stdin ) ; Yo no lo utilizo, o por lo menos trato de nunca recomendarlo, solo que ayer se lo recomendé a alguien y no me convence su implementación.  La verdad es que quiero dar por terminado el tema de la función fflush para el Buffer de entrada. Todo esto en Lenguaje C  La idea de este post viene de preguntas hechas en el foro similares a ¿Como filtrar todo tipo de datos de entrada en un programa? Revisando algunas links en internet me encuentro con: https://es.stackoverflow.com/questions/82431/saber-si-el-b%C3%BAfer-de-entrada-stdin-est%C3%A1-vac%C3%ADo-en-c-est%C3%A1ndar http://man7.org/linux/man-pages/man3/fflush.3.html http://www.cplusplus.com/reference/cstdio/fflush/ Sin embargo en todos ellos hablan de que el comportamiento de fflush para el stdin es Inesperado, por lo cual repetidamente dicen que no se

full between wire connectors

Imagen
Now

Mini grafo con nodos aleatorios

#include<stdio.h> #include<stdlib.h> #include<time.h> typedef struct str_nodo *Nodo; typedef struct str_nodo    {     int valor;     Nodo *nodos;    //Nodos con los que esta unido el nodo actual     int n_nodos; }*Grafo; Nodo crear_nodo(int valor); void agregar_nodo(Nodo inicial,Nodo final);    //Esta funcion une ambos nodos int main()    {     int i,j;     Grafo grafo,temp;     srand(time(NULL));     grafo  = crear_nodo(rand());     i = 0;     while(i < 1000000)    {         agregar_nodo(grafo,crear_nodo(rand()));         i++;     }        i = 0;     while(i < 1000)    {         temp = grafo->nodos[rand() % grafo->n_nodos];         j = 0;         while(j < 200)    {             agregar_nodo(temp,crear_nodo(rand()));             j++;         }         i++;     }     getc(stdin);// Solo para que no se cierre el programa pero no me gusta usar getc     return 0;   } Nodo crear_nodo(int valor)    {     Nodo nodo;     nodo = calloc(1,sizeof(struct str_nodo))

Plantilla de para Capturar Datos y Mostrarlos

Usando estructura de datos y memoria dinamica 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_flotant

¿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. Codigo: #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;     ptr_new = realloc(ptr,size);     if(ptr == NULL && ptr_new != NULL){         N

Me hackearon - Investigando un intento de Extorción

Imagen
Recientemente revisando el SPAM encontré un correo interesante.   No me juzguen el SPAM a veces tiene cosas interesantes. Básicamente el correo indicaba que Yo había sido hackeado, obviamente un intento de estafa, decía tener datos privados de navegación y fotos desde la webcam del sistema, adicionalmente un supuesto virus/troyano/bomba lógica que automáticamente estallaría en 2 dias apartir del momento en el que abri el correo. Indicaba que queria recibir 848 Dolares en Bitcoin y dejaba una dirección. Código: <Bloqueado por Google> Lo que me sorprendió al investigar un poco mas es que la cuenta, si a recibido depósitos de Bitcoin en días recientes. No se como hay gente que si cae en estas estafas Actualmente la cuenta tiene un total de Código: 0.36282302 BTC Pero a recibido mas, ya que a hecho retiros parciales, movimientos totales por: Código: 1.67353487 BTC Otra cuenta de Bitcoin usando el mismo esquema, posiblemente la misma persona Sin movimien

Efectos retro con Canvas HTML5

Imagen
Personalmente si hago algo me gusta automatizarlo y hacerlo desde 0, actualmente estoy haciendo algunos videos, y para ello planeo utilizar efectos retro. Muchos de los cuales puedo realizar y animar mediante el eso de un Canvas de HTML5. SMPTE color bars Distorsión de televisión

Elementary - Recopilación Hilarante

Imagen
Elementary es una serie que me engancho desde el primer capitulo. La personalidad de Sherlock interpretada por Jonny Lee Miller le da un toque cómico pero sin perder su seriedad. Realmente los escritores hacen muy buen trabajo buscando haciéndonos reír, aquí voy a ir dejando una lista de los mejores chistes que he logrado encontrar dentro de la serie. Existe una cancion que me atrae como detective, es un misterio sobre perros y quien los dejo salir pic.twitter.com/CTnKMfbOor — Alberto (@albertobsd) 6 de noviembre de 2018

Bondia de Cetesdirecto - ¿Como funciona?

Imagen
Realmente me he vuelto fan del instrumento de inversión llamado Bondia, ofrecido como método de liquides de la pagina de Cetesdirecto a sus usuarios. Bondia antes conocido como nafdia, es un instrumento de Liquides diara de Lunes a viernes, esto es puede ser retirado cualquier dia de entre semana, realizando la orden en linea y se entrega el mismo dia hábil si la instrucción fue girada antes de las 13 hrs. Bondia un nombre mas amigable que nafdia podría derivarse de la palabra Bonos de un día, esto es cada dia tienen liquidez y cada día generan un interés para el poseedor de estos títulos de inversión. Actualmente al dia de hoy según esta captura de la pagina principal de Cetesdirecto los títulos general un rendimiento anual del 7.69% Rendimiento 7.69% Anual Pero a todo esto ¿Como funciona Bondia? Cada vez que inviertes en Cetes en la pagina de Cetesdirecto es posible que algunos cuantos pesos y/o centavos no puedan ser invertidos por la diferencia del monto invertido y