int main(void) {
    r[0] = 0;	//La primer recta siempre tendrá el punto nº0.
    p[0] = 1;	//La segunda recta siempre tendrá al punto nº1.
    for(i=0; i<=7; i++) {
        r[1] = v[i];
        for(j=i+1; j<=7; j++) {
            r[2] = v[j];
            for(k=j+1; k<=7; k++) {
                r[3] = v[k];
                for(m=k+1; m<=7; m++) {
                    r[4] = v[m];

                    if(verificarSiCumpleError(recta1) == -1)	//Si la funcion retorna 0, significa que su error es menor a 0,3
                        continue;								//El -1 ignifica error.

                    if (elOtroVectorVerifica () == -1)			//Si retorna 0, la 2da rectsa tambien tendrá error <0,3
                        continue;								//El -1 ignifica error.

                    imprimirMensaje();
                }
            }
        }
    }

    return 0; 		//Capricho mio, me gusta devolver 0 cuando las cosas son True :D
}
예제 #2
0
int main(int entradas, char* parametros[]) {
  bool quiereEncriptar = obtenerPeticion( parametros[1] );
  string mensajeDeVuelta;
  if ( quiereEncriptar ) {
    mensajeDeVuelta = encriptarMensaje( entradas , parametros );
  } else {
    mensajeDeVuelta = desencriptarMensaje( entradas , parametros );
  }
  imprimirMensaje( mensajeDeVuelta );
  return 0;
}
예제 #3
0
int main(int argc,char **argv)
{
	//CREO UN AREA DE MEMORIA COMPARTIDA
	if(argc > 1)
		idshm = atoi( argv[1] ); 
	else
		idshm = shmget(0XA,sizeof(struct mensaje),IPC_CREAT|IPC_EXCL|0600);
		
	printf("SHARED MEMORY ID %d \n",idshm );	
	
	mensaje * msn = (struct mensaje *) shmat(idshm,0,0);
	msn->estado = OCUPADO;
	strcpy((*msn).msn,"HOLA MUNDO LOCO");
	imprimirMensaje(msn);
	
	flagLectura = TRUE;	

	//CREO LISTA Y COLA DE MENSAJE
	lClientes = (lista *)createList();
	lIDClientesLectores = (lista *)	createList();
	cMensajes = (lista *)createList();	
	
	tCliente relleno;
	strcpy(relleno.Apodo,"TODOS");
	relleno.lugar = 0; 	
	push_back(lClientes,(void*) &relleno);	
	
	pthread_t Escritura,
		  Lectura,
		  Gestora;

	//HILO DE ESCRITURA		 
	pthread_create(&Escritura,NULL,(void*)hPrincipalEscritura,NULL);
	//HILO DE LECTURA
	pthread_create(&Lectura,NULL,(void*) hPrincipalLectura,NULL);
	//HILO DE GESTION
	pthread_create(&Gestora,NULL,(void*) hGestiona,NULL);

	pthread_join(Escritura,NULL);//TERMINO EL HILO DE ESCRITURA
	pthread_join(Lectura,NULL);  //TERMINO EL HILO DE LECTURA
	pthread_join(Gestora,NULL);  //TERMINO EL HILO DE GESTION

	shmdt(msn);
	return EXIT_SUCCESS;
}
예제 #4
0
void hEscritura(void * dato) 
{
		
	struct struct_idSockCliente sCliente;
	struct struct_idSockCliente * sAuxCliente;
	
	sAuxCliente = (struct struct_idSockCliente*)dato;
	sCliente.idSockCliente = (*sAuxCliente).idSockCliente;
	
	int id = sCliente.idSockCliente;

	char buffer[100];
	int finBuffer;
	
	mensaje * m =  (struct mensaje *) shmat(idshm,0,0);
	
	/////////////////////////////////////////////////////////
	//	HANDSHAKE CON EL CLIENTE		       //
	/////////////////////////////////////////////////////////
        
	tCliente Cliente;
	
	//RECIVO APODO DEL CLIENTE
	bzero(buffer,100);	
	finBuffer = read(id,&Cliente.Apodo,100);//buffer,100);
	//}while(finBuffer > 0 );
	//	Cliente.Apodo[finBuffer]='\0';
		
	int idLectura;
	Cliente.lugar = (*lClientes).length;//LUGAR ES IGUAL A ID,LUGAR EN LA LISTA
        
	//ENVIAR COD IDENTIFICADOR DEL CLIENTE  	
	snprintf(buffer,100,"%d",Cliente.lugar);
	write(id,buffer,100);

	push_back(lClientes,(void*)&Cliente);
	
	mensaje * mRecivido,maux;
	
	for(;;){
		mRecivido = (struct mensaje*) malloc(sizeof(mensaje));
		//RECIVO ID DEL DESTINATARIO		
		bzero(buffer,100);
		finBuffer = read(id,buffer,100);

		if(finBuffer > 0 )//SI NO HAY ERROR
		{
			//CASTING DE BUFFER A idLectura
			buffer[finBuffer]='\0';				
			idLectura = atoi(buffer);
				
			bzero(buffer,100);
			finBuffer = read(id,(*mRecivido).msn,80 );
			mRecivido->msn[finBuffer] ='\0';			
			
			(*mRecivido).estado = OCUPADO;
			strcpy(mRecivido->apodoDestinatario,Cliente.Apodo);
			(*mRecivido).destinatario = Cliente.lugar;
			(*mRecivido).destino = idLectura;
			
			///***///
			startNext(lClientes);
		 	punt r = NULL;
			r = next( lClientes);
			while( r != NULL )
			{	
				tCliente * aux = (struct tCliente *)r->data;
				if (aux->lugar == idLectura)			
					strcpy( mRecivido->apodoDestino , aux->Apodo);
				r = next(lClientes);
			}	

			/////////
			
			printf(" LOS VALORES SON %d %d \n",(*mRecivido).destino ,(*mRecivido).destinatario);fflush(stdout);
			imprimirMensaje(mRecivido);
			push_back(cMensajes,mRecivido);
			
		
			
		}
		usleep(100000);	
	}	
			
		
}
예제 #5
0
void hLectura(void * dato)
{
	struct struct_idSockCliente sCliente;
	struct struct_idSockCliente * sAuxCliente;
	sAuxCliente = (struct struct_idSockCliente*)dato;
	sCliente.idSockCliente = (*sAuxCliente).idSockCliente;
	fflush(stdout);	

	int id = sCliente.idSockCliente;
	int posicionEnLista = 0;
	
	char buffer[100];
	int finBuffer;
	
	mensaje * m =  (struct mensaje *) shmat(idshm,0,0) ;

	////////////////////////////////////////////////////
	//INICIO UN HANDSHAKE PARA IDENTIFICAR AL CLIENTE //
	////////////////////////////////////////////////////
	//RECIVO LA ID DEL CLIENTE
	bzero(buffer,100);	
	finBuffer = read(id,buffer,100);
	buffer[finBuffer]='\0';
	posicionEnLista = atoi(buffer); //ID DEL CLIENTE
	//printf("LA POSICION EN LISTA ES %d\n",posicionEnLista);fflush(stdout);
	
	////ENVIO EL APODO DEL CLIENTE
	write(id,m->apodoDestino,20);
	
	for(;;)
	{
		if( IDLECTOR == 0 && lClientes->length > 1 && lIDClientesLectores->length+1>= lClientes->length ) 
		{
			m->estado = DISPONIBLE;	
			clear(lIDClientesLectores);
		}

		

		if( ( m->destino == 0  || m->destino == posicionEnLista) && m->estado == OCUPADO && flagLectura == TRUE ) 		
		{			
		     if(IDLECTOR == 0)
		     {
			
			startNext(lIDClientesLectores);
		 	punt r = NULL;
			r = next( lIDClientesLectores);
			while( r!=NULL && (*(int*)r->data)!= m->destino)
			{	
				r = next(lClientes);
			}
			if(r ==NULL)
			{
				write(id,m->msn,100);		
				write(id,m->apodoDestinatario,20);	
				push_back(lIDClientesLectores,(void*)&m->apodoDestinatario);			
			}
					 
		     }
		     else				
		     {	
			write(id,m->msn,100);		
			write(id,m->apodoDestinatario,20);		
			m->estado = DISPONIBLE;		
		     }
		     imprimirMensaje(m);			
		}
		
		
		usleep(100000);
	}	
//	while( strcmp(buffer,"exit()") );
	
	close(id);
	pthread_exit(NULL);		
}