Exemple #1
0
void IesireDinWaiting5()
{
	if(GetNrX()==0)
	{
		sleep(1);
		test("Verifica4",Verifica(1,0,1,0,0,1)==0);
		IncNrX();
		Signal(m,1);
		sleep(1);
		test("Verifica5",Verifica(1,0,2,1,0,0)==0);
		Leave(m);
		return;
	}
	if(GetNrX()==1)
	{
		sleep(1);
		test("Verifica6",Verifica(1,0,1,1,0,0)==0);
		IncNrX();
		Leave(m);
		return;
	}
	if(GetNrX()==2)
	{
		sleep(1);
		test("Verifica7",Verifica(1,0,0,2,0,0)==0);
		IncNrX();
		Leave(m);
		return;
	}
}
Exemple #2
0
void* Functie5D(void *params)
{
	sleep(2);
	Enter(m);
	sleep(1);
	test("Verifica8",Verifica(0,0,0,3,0,0)==0);
	Signal(m,1);
	sleep(1);
	test("Verifica9",Verifica(0,0,0,3,0,0)==0);
	Leave(m);
	
	return NULL;
}
Exemple #3
0
void* Functie6E(void *params)
{
	sleep(2);
	Enter(m);
	sleep(1);
	test("Verifica9",Verifica(0,0,0,5,0,0)==0);
	Broadcast(m,0);
	sleep(1);
	test("Verifica10",Verifica(0,0,0,5,0,0)==0);
	Leave(m);
			
	return NULL;
}
Exemple #4
0
void* Functie6D(void *params)
{
	sleep(1);
	Enter(m);
	sleep(2);
	test("Verifica1",Verifica(1,0,0,0,3,0)==0);
	Broadcast(m,0);
	sleep(1);
	test("Verifica2",Verifica(1,0,3,0,0,0)==0);
	Wait(m,0);	
	IesireDinWait6();
			
	return NULL;
}
Exemple #5
0
void* Functie5C(void *params)
{
	sleep(1);
	Enter(m);
	sleep(2);
	test("Verifica1",Verifica(1,0,0,0,1,1)==0);
	Signal(m,0);
	sleep(1);
	test("Verifica2",Verifica(1,0,1,0,0,1)==0);
	Signal(m,1);
	sleep(1);
	test("Verifica3",Verifica(1,0,2,0,0,0)==0);
	Wait(m,1);
	IesireDinWaiting5();
			
	return NULL;
}
Exemple #6
0
void IesireDinSignal4()
{
	if(GetNrX()==4)
	{
		sleep(1);
		test("Verifica6",Verifica(1,1,0,4,0,0)==0);
		IncNrX();
		Leave(m);
		return;
	}
	if(GetNrX()==5)
	{
		sleep(1);
		test("Verifica7",Verifica(1,0,0,5,0,0)==0);
		IncNrX();
		Leave(m);
		return;
	}
}
Exemple #7
0
/*-------------------------------------------------------------------------------*/
int Checa_bipartido ( lista *lista_adjacente, int qtd_vertices ) {

	int v, 
	*A = malloc ( sizeof (int)*qtd_vertices ),
	*B = malloc ( sizeof (int)*qtd_vertices );
	no *	bloquinho = lista_adjacente->primeiro;
	v = bloquinho[0].vertice;
	
	return Verifica ( lista_adjacente, bloquinho[0], A, B, v, 1, 0, 0 );	

}
Exemple #8
0
void* Functie4D(void *params)
{
	sleep(1);
	Enter(m);
	sleep(2);
	test("Verifica1",Verifica(1,0,0,0,3,0)==0);
	Broadcast(m,0);
	IesireDinSignal4();	
		
	return NULL;
}
Exemple #9
0
void IesireDinWait4()
{
	if(GetNrX()==0)
	{
		sleep(1);
		test("Verifica2",Verifica(1,1,2,0,0,0)==0);
		IncNrX();
		Wait(m,0);
		IesireDinWait4();
		return;
	}
	if(GetNrX()==1)
	{
		sleep(1);
		test("Verifica3",Verifica(1,1,1,1,1,0)==0);
		IncNrX();
		Signal(m,0);
		IesireDinSignal4();
		return;
	}
	if(GetNrX()==2)
	{
		sleep(1);
		test("Verifica4",Verifica(1,2,1,2,0,0)==0);
		IncNrX();
		Leave(m);
		return;
	}
	if(GetNrX()==3)
	{
		sleep(1);
		test("Verifica5",Verifica(1,2,0,3,0,0)==0);
		IncNrX();
		Leave(m);
		return;
	}
}
Exemple #10
0
/*-------------------------------------------------------------------------------*/
int Verifica ( lista *lista_adjacente, no bloquinho, int *A, int *B, int v, int conj1ou2 , int Acount, int Bcount ) {

	// Se 1 insere no conjunto 1 (A)
	if ( conj1ou2 == 1 ) {
		A[ Acount ] = v;
		// muda de conjunto
		conj1ou2 = 2;
		Acount++;
	}
	// Senao se 2 insere no conjunto 2 (B)
	else {
		if ( conj1ou2 == 2 ) {
			B[ Bcount ] = v;
			// muda de conjunto
			conj1ou2 = 1;
			Bcount++;
		}
	}	

	int achou;
	no bloquinho_aux;
	sub_no *bloco = bloquinho.proximo;	

	// percorre os vertices que formam aresta com (u)
	while ( bloco != NULL ) {
		achou = Procura_nos_conj ( A, B, bloco->vertice, conj1ou2, Acount, Bcount );
		// Se 2 e que o grafo nao e bipartido
		if ( achou == 2 ) return 0;
		// Se 0 insere o vertice no outro conjunto
		if ( achou == 0 ) {
			bloquinho_aux = Procura_endereco ( lista_adjacente, bloco->vertice );
			// Se o retorno da funcao for 0 e que o grafo nao e bipartido
			if ( Verifica ( lista_adjacente, bloquinho_aux, A, B, bloco->vertice, conj1ou2, Acount, Bcount ) == 0 ) {

				return 0;

			} 	
		}
		bloco = bloco->mais;
		
	}

	return 1;

}
Exemple #11
0
void IesireDinWait6()
{
	if(GetNrX()==0)
	{
		sleep(1);
		test("Verifica3",Verifica(1,0,2,0,1,0)==0);
		IncNrX();
		Wait(m,0);
		IesireDinWait6();
		return;
	}
	if(GetNrX()==1)
	{
		sleep(1);
		test("Verifica4",Verifica(1,0,1,1,2,0)==0);
		IncNrX();
		Broadcast(m,0);
		sleep(1);
		test("Verifica5",Verifica(1,0,3,2,0,0)==0);
		Leave(m);
		return;
	}
	if(GetNrX()==2)
	{
		sleep(1);
		test("Verifica6",Verifica(1,0,2,2,0,0)==0);
		IncNrX();
		Leave(m);
		return;
	}
	if(GetNrX()==3)
	{
		sleep(1);
		test("Verifica7",Verifica(1,0,1,3,0,0)==0);
		IncNrX();
		Leave(m);
		return;
	}
	if(GetNrX()==4)
	{
		sleep(1);
		test("Verifica8",Verifica(1,0,0,4,0,0)==0);
		IncNrX();
		Leave(m);
		return;
	}
	
}
Exemple #12
0
int main()
{
    int i;
    char strEntrada[200000];
    No *Raiz;
    pilha Pilha[10000];
    OP = (No*) malloc(sizeof(No));
    FILE *arq = fopen("string.in", "r");
    fscanf(arq,"%s",strEntrada);

    criaNo('@', &Raiz);
    Raiz = criaGrafo(strEntrada, Raiz);
    DecodificaOperacao(Raiz, Pilha);

    //for(i = 0; i<1; i++)
    while(Fim == 0 && Raiz->c != ':' && Raiz->c != '$')
    {
        OP = pop(Pilha);
        switch (OP->c)
        {
        case 'S':
            if(Verifica(3,Pilha, &Raiz))
            {
                S(Pilha, &Raiz);
                #ifdef CONT_FLAG
                    cont_S++;
                #endif
            }
            break;
        case 'K':
            K(Pilha, &Raiz);
            #ifdef CONT_FLAG
                cont_K++;
            #endif
            break;
        case 'B':
            if(Verifica(3,Pilha, &Raiz))
            {
                B(Pilha, &Raiz);
                #ifdef CONT_FLAG
                    cont_B++;
                #endif
            }
            break;
        case 'b':
            if(Verifica(3,Pilha, &Raiz))
            {
                BL(Pilha, &Raiz);
                #ifdef CONT_FLAG
                    cont_BL++;
                #endif
            }
            break;
        case 'P':
            if(Verifica(3,Pilha, &Raiz))
            {
                CL(Pilha, &Raiz);
                #ifdef CONT_FLAG
                    cont_CL++;
                #endif
            }
            break;
        case 'I':
            I(Pilha, &Raiz);
            #ifdef CONT_FLAG
                cont_I++;
            #endif
            break;
        case 'W':
            if(Verifica(3,Pilha, &Raiz))
            {
                SL(Pilha, &Raiz);
                #ifdef CONT_FLAG
                    cont_SL++;
                #endif
            }
            break;
        case 'C':
            if(Verifica(3,Pilha, &Raiz))
            {
                C(Pilha, &Raiz);
                #ifdef CONT_FLAG
                    cont_C++;
                #endif
            }
            break;
        case 'H': //Hd
            Hd(Pilha, &Raiz);
            break;
        case 'T': //Tl
            Tl(Pilha, &Raiz);
            break;
        case '*':
            MULT(Pilha, &Raiz);
            break;
        case '/':
            DIV(Pilha, &Raiz);
            break;
        case '-':
            SUB(Pilha, &Raiz);
            break;
        case '+':
            ADD(Pilha, &Raiz);
            break;
        case '^':
            POT(Pilha, &Raiz);
            break;
        default:
            Fim = 1;
            break;
        }
    }
    printf("Saida: ");
    printaGrafo(Raiz);
    printf("\n");
    printf("\nChamadas ao GC:%d\n", garbage);

#ifdef CONT_FLAG
    printf("S: %d\n",cont_S);
    printf("K: %d\n",cont_K);
    printf("I: %d\n",cont_I);
    printf("C: %d\n",cont_C);
    printf("B: %d\n",cont_B);
    printf("S': %d\n",cont_SL);
    printf("C': %d\n",cont_CL);
    printf("B': %d\n",cont_BL);
#endif

    return 0;
}