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

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

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

Menu con do-while y switch en C

Imagen
Plantilla de menu basico, mediante do-while y un switch. Video en Youtube Funcionando Parte relevante del codigo Descargar codigo desde aqui: menu.c