Donar $20 Donar $50 Donar $100 Donar mensualmente
 


Enviar respuesta 
 
Calificación:
  • 0 votos - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
Buscar en el tema
Final del 20-12-16
Autor Mensaje
seebas Sin conexión
Empleado del buffet
ola k ase
*

Ing. Electrónica
Facultad Regional Buenos Aires

Mensajes: 8
Agradecimientos dados: 3
Agradecimientos: 8 en 3 posts
Registro en: Oct 2016
Mensaje: #1
Final del 20-12-16 Finales Informática I (Electrónica)
Adjunto el final con mi resolucion, disculpen la calidad de la imagen.



#include <stdlib.h>
#include <string.h>
#include <stdio.h>

#define OK 0
#define ERR_MEMORY -1
#define ERR_ITEM -2

int suscribir(sub_t **s, char *id, unsigned int *canales, int(*enviar)(char *));
int desuscribir(sub_t **s, char *id);
int publicar(sub_t *s, char *msg, unsigned int canal);

typedef struct sub_s
{
char id[100];
unsigned int *canales;
int (*enviar)(char *);
struct sub_s *sig;
}sub_t;


int main(int argc, char **argv)
{

return 0;
}

int suscribir(sub_t **s, char *id, unsigned int *canales, int(*enviar)(char *))
{
//reservo memoria
sub_t *nuevo, *aux=*s;
int i;

//pido memoria
if((nuevo = (sub_t *)malloc(sizeof(sub_t))) == NULL)
{
return ERR_MEMORY;
}

//cargo los datos a la estructura
strcpy(nuevo->id, id);
nuevo->enviar = enviar;
for(i = 0 ; canales[i] != 0 ; i++)
{
nuevo->canales[i] = canales[i];
}

//si es la primera
if((*s) == NULL)
{
nuevo->sig = NULL;
*s=nuevo;
}
//si no es la primera
else
{
while(aux != NULL)//verifico si ya estaba
{
if (strcmp(aux->id, nuevo->id) == 0)
{
free(nuevo);
return ERR_ITEM;
}
aux = aux->sig;
}
nuevo->sig = *s;
*s = nuevo;
}
return OK;

}
int desuscribir(sub_t **s, char *id)
{
//reservo memoria
sub_t *aux = *s, *aux1;

//si no se reservo memoria para la lista
if(s == NULL)
{
return ERR_MEMORY;
}
//si es el primer suscriptor el que hay que eliminar
if(strcmp(aux->id, id) == 0)
{
*s = aux->sig;
free(aux);
return OK;
}
else
{
//recorro la lista hasta el suscriptor, o hasta el final
while((strcmp(aux->sig->id, id) != 0) && (aux->sig != NULL))
{
aux = aux->sig;
}
//si encontre el suscriptor para eliminar
if(strcmp(aux->sig->id, id) != 0)
{
aux1 = aux->sig;
aux->sig = aux->sig->sig;
free(aux1);
return OK;
}
}
return ERR_ITEM;
}
int publicar(sub_t *s, char *msg, unsigned int canal)
{
//reservo memoria
int i, j, flag = 0;

//recorro la lista
while(s != NULL)
{
//recorro canales
for(i = 0 ; s->canales[i] != 0 ; i++)
{
//veo si coincide
if(s->canales[i] == canal)
{
j = s->enviar(msg);
flag = 1;//flag para que encontro al menos uno
//si hay error para mandar el mensaje
if(j != OK)
{
return j;
}
}
}
s = s->sig;
}
if(flag == 0)
{
return ERR_ITEM;
}
return OK;
}




Archivo(s) adjuntos Imagen(es)
       
12-02-2017 17:32
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
[-] seebas recibio 1 Gracias por este post
diegomsaiz (16-02-2017)
Buscar en el tema
Enviar respuesta 




Usuario(s) navegando en este tema: 1 invitado(s)



    This forum uses Lukasz Tkacz MyBB addons.