コード例 #1
0
int firstFit(Memory *mem, LIS_tppLista lisProntos)
{	
	Processo *aux;
	int cnt = 0, fail = 0,i;
	IrInicioLista(lisProntos);
	aux = (Processo*)LIS_ObterValor(lisProntos);
	cnt = LIS_ObterTamanho(lisProntos);
	fail = 1;
	while(cnt > 0)
	{
		for(i = 0; i < 5; i++)
		{
			if((aux->tamanho <= mem->s[i].tam) && (mem->s[i].proc == NULL) && (aux->naMemoria == 0)) // se o tamanho do process é menor q o segmento da memoria
			{
				InsereProcessosMem(mem, aux, mem->s[i].tam);
				fail = 0;
				break;
			}
		}
		LIS_AvancarElementoCorrente(lisProntos, 1);
		aux = (Processo*)LIS_ObterValor(lisProntos);
		cnt--;
	}
	return fail;
}
コード例 #2
0
ファイル: MATRIZ.C プロジェクト: teffyhart/inf1301
MTZ_tpCondRet MTZ_DestruirMatriz ( LIS_tppLista Tab )
{
	
	LIS_tppLista Col;
	PLH_tppPilha p;

	while ( Tab != NULL) {
			
			IrFinalLista( Tab );
			Col = (LIS_tppLista) LIS_ObterValor( Tab );
			
		while (Col != NULL) {
				IrFinalLista( Col );
				p = (PLH_tppPilha) LIS_ObterValor( Col );
				PLH_Libera( p );
				LIS_ExcluirElemento( Col );
				IrInicioLista( Col );			
		}

			LIS_ExcluirElemento( Tab );
			IrInicioLista( Tab );
	}		

		free ( Tab );

		return MTZ_CondRetOK;
}
コード例 #3
0
   int ListaDePassosSaoIguais(LIS_tppLista pPassos1, LIS_tppLista pPassos2)
   {
      PAS_tppPasso pPasso1;
      PAS_tppPasso pPasso2;
      LIS_tpCondRet ret1 = LIS_CondRetOK;
      LIS_tpCondRet ret2 = LIS_CondRetOK;

      LIS_IrInicioLista(pPassos1);
      LIS_IrInicioLista(pPassos2);

      while (ret1 == LIS_CondRetOK && ret2 == LIS_CondRetOK)
      {
         int saoIguais;
         LIS_ObterValor(pPassos1, (void **) &pPasso1);
         LIS_ObterValor(pPassos2, (void **) &pPasso2);

         PAS_CompararPassos(pPasso1, pPasso2, &saoIguais);
         if (!saoIguais)
         {
            return FALSE;
         }
         
         ret1 = LIS_AvancarElementoCorrente(pPassos1, 1);
         ret2 = LIS_AvancarElementoCorrente(pPassos2, 1);
      }

      if (ret1 != ret2)
      {
         return FALSE;
      }

      return TRUE;
   }
コード例 #4
0
TAB_tpCondRet TAB_setarCasa(Tabuleiro *tabuleiro, int linha, char coluna, Peca *peca, int limpar)
{
    LIS_tppLista lista;
    Peca *antiga;

    --linha;
    coluna = tolower(coluna) - 'a';

    if(LIS_IrIndice(tabuleiro->lista, linha) != LIS_CondRetOK)
        return TAB_CondRetLinhaInexistente;
    lista = (LIS_tppLista)LIS_ObterValor(tabuleiro->lista);
    if(!lista)
        return TAB_CondRetLinhaInexistente;
    
    if(LIS_IrIndice(lista, coluna) != LIS_CondRetOK)
        return TAB_CondRetColunaInexistente;

    if(limpar) {
        antiga = LIS_ObterValor(lista);
        if(antiga)
            ListaExcluirPeca(antiga);
    }

    LIS_SetarValor(lista, peca);
    return TAB_CondRetOK;
}/* Fim função: TAB  &Setar valor de uma peça no tabuleiro */
コード例 #5
0
ファイル: GRAFO.c プロジェクト: daniloanp/TRAB-INF1301
void get_pair_by_id(GRA_tppGrafo pGrafo, int idAresta, tpVertice ** u, tpVertice ** v){
    tpAresta * aresta = NULL;
    tpVertice * vertice = NULL;

    LIS_IrInicioLista( pGrafo->vertices );

    // Para cada vértice
    do{
        vertice = (tpVertice*)LIS_ObterValor( pGrafo->vertices ) ;
        if(vertice == NULL) break;
        LIS_IrInicioLista( vertice->pNode->arestas ) ;
        // Procura em todos os seus vizinhos
        do{
            aresta = (tpAresta*)LIS_ObterValor( vertice->pNode->arestas ) ;
            
            if(aresta == NULL){
                continue;
            }
         
            if ( aresta->id == idAresta ){
                *u = vertice ;
                *v = aresta->pVizinho ;
                break;
            }
        }while(LIS_AvancarElementoCorrente( vertice->pNode->arestas , 1) == LIS_CondRetOK );
    }while ( LIS_AvancarElementoCorrente( pGrafo->vertices , 1) == LIS_CondRetOK ) ;
}
コード例 #6
0
/***************************************************************************
*
*  Função: TAB  &Imprimir estado atual de um tabuleiro
*  ****/
void TAB_imprimir(Tabuleiro *tabuleiro)
{
    int x, y;
    //Assertivas de entrada
#ifdef _DEBUG
    if(tabuleiro == NULL)
        printf("\n Não foi possível imprimir o tabuleiro (não existe) \n");
#endif

    LIS_IrFinalLista(tabuleiro->lista);
    for(y = TabuleiroAltura - 1; y >= 0; --y) {
        LIS_tppLista lista;
        printf("%d|", y+1);

        lista = (LIS_tppLista)LIS_ObterValor(tabuleiro->lista);
        LIS_IrInicioLista(lista);
        for(x = 0; x < TabuleiroLargura; ++x) {
            Peca *peca = LIS_ObterValor(lista);
            if(peca)
                PEC_imprimir(peca);
            else
                printf(" |");

            LIS_AvancarElementoCorrente(lista, 1);
        }
        printf("\n");
        LIS_AvancarElementoCorrente(tabuleiro->lista, -1);
    }
    printf(" |A|B|C|D|E|F|G|H|\n");
}/* Fim função: TAB  &Imprimir estado atual de um tabuleiro */
コード例 #7
0
int WorstFit (Memory *mem, LIS_tppLista lisProntos){
	Processo *aux;
	int cnt = 0, fail = 0, i;
	IrInicioLista(lisProntos);
	aux = (Processo*)LIS_ObterValor(lisProntos);
	cnt = LIS_ObterTamanho(lisProntos);
	fail = 1;
	while (cnt > 0)
	{
		int diferenca = 0;
		int BestInd = -1;
		for (i = 0; i < 5; i++)
		{
			if ((aux->tamanho <= mem->s[i].tam) && (mem->s[i].proc == NULL) && (aux->naMemoria == 0)) // se o tamanho do process é menor q o segmento da memoria
			{
				if (mem->s[i].tam - aux->tamanho >= diferenca){
					BestInd = i;
					diferenca = mem->s[i].tam - aux->tamanho;
				}
			}
		}
		if (BestInd != -1){
			InsereProcessosMem(mem, aux, mem->s[BestInd].tam);
			fail = 0;
		}
		LIS_AvancarElementoCorrente(lisProntos, 1);
		aux = (Processo*)LIS_ObterValor(lisProntos);
		cnt--;
	}
	return fail;
}
コード例 #8
0
ファイル: graph.c プロジェクト: rbertoche/t2
void GRA_DelNode (Graph *g)
{
	Node *n;
#ifdef _DEBUG
	int nOfNodesAntigo = g->nOfNodes;
	AssertGraph(g);
#endif /* _DEBUG */

    CNT_CONTAR("GRA_delNode - Inicializao");
	assert(g->currentNode);
	n = (Node *) LIS_ObterValor(g->currentNode);
	assert( n!=NULL );
#ifdef _DEBUG
	AssertNode(n,g);
#endif /* _DEBUG */

    CNT_CONTAR("GRA_delNode - Deletando no");
	delNode(g,n);
	LIS_ExcluirElemento(g->nodes);
	g->currentNode = LIS_ObterValor(g->nodes);
#ifdef _DEBUG
	g->nOfNodes--;
	assert ( g->nOfNodes == (nOfNodesAntigo - 1) );
	AssertGraph(g);
#endif /* _DEBUG */
}
コード例 #9
0
ファイル: graph.c プロジェクト: rbertoche/t2
void *GRA_NodesGetNext (Graph *g)
{
	void *ret;
	LIS_tppLista l;
    CNT_CONTAR("GRA_NodesGetNext - inicio");
#ifdef _DEBUG
	AssertGraph(g);
#endif /* _DEBUG */
	if (!g->currentNode){
		return NULL;
    }
    CNT_CONTAR("GRA_NodesGetNext - guardando g->nodes");
	l = g->nodes;
	if (!l){
        CNT_CONTAR("GRA_NodesGetNext - Nao existe g->nodes");
		return NULL;
    }
    CNT_CONTAR("GRA_NodesGetNext - Obtendo dado");
	ret = ((Node*)LIS_ObterValor (LIS_ObterValor(l)))->data;
	if (g->nodesOld == ret){ /* Se esse dado ja' repitiu, ja terminou a lista */
	    CNT_CONTAR("GRA_NodesGetNext - Dado repetido, fim da lista");
		return NULL;
	}
	CNT_CONTAR("GRA_NodesGetNext - Avanando elemento corrente");
	g->nodesOld = ret;
	LIS_AvancarElementoCorrente (l, 1);
#ifdef _DEBUG
	AssertGraph(g);
#endif /* _DEBUG */
    CNT_CONTAR("GRA_NodesGetNext - Finalizando");
	return ret;
}
コード例 #10
0
void getNext(LIS_tppLista lisProc)
{
	Processo *aux;
	IrInicioLista(lisProc);
	aux = (Processo*)LIS_ObterValor(lisProc);
	while(aux->naMemoria == 0)
	{
		LIS_AvancarElementoCorrente(lisProc, 1);
		aux = (Processo*)LIS_ObterValor(lisProc);
	}
}
コード例 #11
0
ファイル: GRAFO.c プロジェクト: daniloanp/TRAB-INF1301
    static int BFS(tpVertice* v, tpVertice* u) {
        LIS_tppLista V = NULL; // LISTA VERTICE VISITADOS
        LIS_tppLista Q = NULL; //FILA
        LIS_tppLista arestas = NULL;
        tpVertice* t = NULL;
        tpVertice* s = NULL;
        tpAresta* a = NULL;
        int achou = 0;
        int achou_V = 0;

        V = LIS_CriarLista(NULL); // dados são referenciados por outros, não devem ser apagados
        Q = LIS_CriarLista(NULL); // dados são referenciados por outros, não devem ser apagados

        LIS_InserirElementoApos(V, v);
        LIS_InserirElementoApos(Q, v); //Usado como uma Fila.
        while (LIS_NumeroDeElementos(Q) > 0) {
            LIS_IrInicioLista(Q);
            t = (tpVertice *)LIS_ObterValor(Q);
            LIS_ExcluirElemento(Q);
            if (t == u) {
                achou = 1; 
                break;
            }
            arestas = t->pNode->arestas;
            LIS_IrInicioLista(arestas);
            do {
                a = (tpAresta *)LIS_ObterValor(arestas);
                if(a == NULL) continue;
                s = a->pVizinho;
                
                LIS_IrInicioLista(V);
                achou_V = 0;
                do {
                    tpVertice * re = (tpVertice *)LIS_ObterValor(V);
                    if (re == NULL) {
                        continue;
                    }
                    if(re == s) achou_V = 1;
                } while(LIS_AvancarElementoCorrente(V, 1) == LIS_CondRetOK);
            
                if (!achou_V) {
                    if(LIS_InserirElementoApos(V, s)!= LIS_CondRetOK){ achou = -1;break;}
                    if(LIS_InserirElementoApos(Q, s)!= LIS_CondRetOK){ achou = -1;break;}
                }
            } while(LIS_AvancarElementoCorrente(arestas, 1) == LIS_CondRetOK);
        }

        LIS_DestruirLista(V);
        LIS_DestruirLista(Q);

        return achou;
    }
コード例 #12
0
ファイル: GRAFO.c プロジェクト: daniloanp/TRAB-INF1301
    GRA_tpCondRet GRA_BuscarVertice( GRA_tppGrafo pGrafo , int* idVertice , int predicado(void* pDado, void* _parametro), void* parametro )
    {
        LIS_tppLista vertices;
        tpVertice* vertice;
        vertices = pGrafo->vertices;

        if(LIS_NumeroDeElementos(vertices) == 0){
            *idVertice = -1;
            return GRA_CondRetGrafoVazio;
        }

        LIS_IrInicioLista(vertices);
        do
        {
            vertice = (tpVertice*)LIS_ObterValor(vertices);
            
            if (predicado(vertice->pNode->pValor, parametro))
            {
                *idVertice = vertice->id;
                return GRA_CondRetOK;
            }
        }
        while (LIS_AvancarElementoCorrente(vertices, 1) == LIS_CondRetOK);

        return GRA_CondRetNaoEhVertice;
    }
コード例 #13
0
ファイル: graph.c プロジェクト: rbertoche/t2
void GRA_Del (Graph *g)
{
#ifdef _DEBUG
	AssertGraph(g);
#endif /* _DEBUG */
    CNT_CONTAR("GRA_Del - Inicializao");
	IrInicioLista ( g->nodes );
	if ( !g->currentNode || !LIS_AvancarElementoCorrente ( g->nodes , 1)){
	CNT_CONTAR("GRA_Del - Grafo vazio");
		return;
	}
	IrInicioLista ( g->nodes );
	do {
        CNT_CONTAR("GRA_Del - Deletando nos");
		g->currentNode = LIS_ObterValor( g->nodes );
		GRA_DelNode( g );
	} while ( LIS_AvancarElementoCorrente ( g->nodes , 1)
	== LIS_CondRetOK );
/*		== 0 ); */

    CNT_CONTAR("GRA_Del - Destruindo, finalizao");
	LIS_DestruirLista( g->nodes );

	free(g);
	return;
}
コード例 #14
0
ファイル: GRAFO.C プロジェクト: ferlief/Fer-ArcaboucoTesteC
int GRA_comparaVerticeConteudo( void * pVerticeO , void * pValorO )
{

	int ret = 0;
	char * Corrente ;
	char * Buscado ;
	tpVerticeGrafo * pValorVert ;
    LIS_tppLista pVerticeLista ;

	Corrente = "";
	Buscado  = "";
	
	pVerticeLista = ( LIS_tppLista ) pVerticeO ;
    
	LIS_ObterValor (pVerticeLista , (void**)&pValorVert);


	VER_RetornaValor ((VER_tppVerticeCont)pValorVert->pConteudo , Corrente) ;

	VER_RetornaValor ((VER_tppVerticeCont)pValorO , Buscado) ;
	
	if(strcmp(Corrente , Buscado) == 0){

		return 0;
	}

	return 1;


} /* Fim função: GRA  &Compara valores */
コード例 #15
0
ファイル: GRAFO.C プロジェクト: ferlief/Fer-ArcaboucoTesteC
GRA_tpCondRet GRA_DefinirCorrente(GRA_tppGrafo pGrafo, char IdVert)
{

	tpVerticeGrafo * pVerticeBusca ;

	ListaRet = LIS_IrInicioLista(pGrafo->pListaVertices);

	while(ListaRet == LIS_CondRetOK || ListaRet == LIS_CondRetFimLista){

		LIS_ObterValor (pGrafo->pListaVertices , (void**)&pVerticeBusca);

		if(pVerticeBusca->pIdVertice == IdVert){
			pGrafo->pCorrente = pVerticeBusca;
			return GRA_CondRetOK;
		} /* if */

		if(ListaRet==LIS_CondRetFimLista){
			break;
		} /* if */

		ListaRet = LIS_AvancarElementoCorrente(pGrafo->pListaVertices, 1);

	} /* while */

	return GRA_CondRetNaoAchou ;
}
コード例 #16
0
void TAB_Deturpar(Tabuleiro *tabuleiro, TAB_tpModosDeturpacao ModoDeturpar, int linha, char coluna, TAB_tpModosDeturpacaoLista ModoDeturparLista)
{
    LIS_tppLista lista, lista2;
    if(!tabuleiro)
        return;

    linha--;
    coluna = tolower(coluna) - 'a';
    lista = tabuleiro->lista;

    switch(ModoDeturpar) {
    case TAB_DeturpaTipoTabuleiro:
    {
        CED_DefinirTipoEspaco(tabuleiro, CED_ID_TIPO_VALOR_NULO);
        break;
    }
    case TAB_DeturparListaPrimaria:
    {
        LIS_IrIndice(lista, linha);
        LIS_Deturpar(lista, ModoDeturparLista);
        break;
    }
    case TAB_DeturparListaSecundaria:
    {
        LIS_IrIndice(lista, linha);
        lista2 = (LIS_tppLista)LIS_ObterValor(lista);
        LIS_IrIndice(lista2, coluna);
        LIS_Deturpar(lista2, ModoDeturparLista);
        break;
    }
    }
}
コード例 #17
0
ファイル: GRAFO.C プロジェクト: ferlief/Fer-ArcaboucoTesteC
int ChecaArestaExiste(tpVerticeGrafo * pVertice , char * String, char Dest)
{
	tpArestaGrafo * pAres ;

	if(pVertice==NULL){
		return 0;
	} /* if */

	ListaRetCaminho=LIS_IrInicioLista(pVertice->pVerSuc);

	
	while(ListaRetCaminho==LIS_CondRetOK || ListaRetCaminho==LIS_CondRetFimLista){

		LIS_ObterValor(pVertice->pVerSuc , (void**)&pAres);

		if(strcmp(pAres->Nome , String)==0 && pAres->pVerticeDest->pIdVertice == Dest){

			return 1;

		} /* if */

		if(ListaRetCaminho == LIS_CondRetFimLista){
			return 0;
		} /* if */
		ListaRetCaminho = LIS_AvancarElementoCorrente(pVertice->pVerSuc, 1);

	} /* while */

	pAres = NULL;

	return 0;
} /* Fim função: GRA &Checa se aresta existe */
コード例 #18
0
LIS_tpCondRet LIS_InserirElementoOrdenado( LIS_tppLista pLista ,
        void *pValor,
        int (*pComp) (void *a, void *b))
{
    LIS_tpElemLista *pElem ;

#ifdef _DEBUG
    assert( pLista != NULL ) ;
#endif

    /* Criar elemento a inserir antes */
    pElem = CriarElemento( pLista , pValor ) ;
    if ( pElem == NULL )
    {
        return LIS_CondRetFaltouMemoria ;
    } /* if */
    /* Ir para o comeco da lista */
    IrInicioLista (pLista);
    /* Percorrer a lista até encontrar um valor superior ou igual */
    while (LIS_AvancarElementoCorrente(pLista, 1) != LIS_CondRetFimLista)
    {
        if (pComp(LIS_ObterValor(pLista), pValor) > 0)
        {
            break ;
        } /* if */
    } /* while */
    /* Encadear o elemento antes do elemento superior */
    return LIS_InserirElementoAntes(pLista, pValor);

} /* Fim funcao: LIS  &Inserir elemento antes */
コード例 #19
0
ファイル: GRAFO.c プロジェクト: daniloanp/TRAB-INF1301
    static tpVertice* ObterOrigem (GRA_tppGrafo grafo, tpVertice* v) {
        tpVertice** us = NULL; //Vetor com componentes a iterar;
        tpVertice* u = NULL;
        LIS_tppLista origens = grafo->componentes;
        int i = 0;
        
        LIS_IrInicioLista(grafo->vertices);
        LIS_IrInicioLista(origens);
        if (LIS_ProcurarValor(origens, v) == LIS_CondRetOK) {
            return v; //é a origem da própria componente
        }
        if(LIS_NumeroDeElementos(origens) > 0) {
            us = (tpVertice**) calloc(LIS_NumeroDeElementos(origens), sizeof(tpVertice*));

            LIS_IrInicioLista(origens);
            do {
                u = (tpVertice *)LIS_ObterValor(origens);
                if(u == NULL) break;
                us[i] = u;
                i++;
            } while(LIS_AvancarElementoCorrente(origens, 1) == LIS_CondRetOK);


            for ( i;i; i--) {
                if (BFS(us[i-1],v) == 1) {
                    u =  us[i-1];
                }
            }
            free(us);
        }

        return u;
    }
コード例 #20
0
ファイル: GRAFO.c プロジェクト: daniloanp/TRAB-INF1301
     GRA_tpCondRet GRA_DestruirGrafo( GRA_tppGrafo pGrafo )
     {
            tpVertice* pVertice = NULL;
            #ifdef _DEBUG
                 assert( pGrafo != NULL ) ;
            #endif
            
            LIS_DestruirLista(pGrafo->componentes); //Lista que não mexe com "ninguém"

            LIS_IrInicioLista(pGrafo->vertices);
            do {
                pVertice = (tpVertice *)LIS_ObterValor(pGrafo->vertices);
                if(pVertice == NULL) continue;

                if (pVertice->pNode->pValor != NULL && pGrafo->ExcluirValor != NULL) {
                    pGrafo->ExcluirValor(pVertice->pNode->pValor);
                }
                LIS_DestruirLista(pVertice->pNode->arestas);
                free(pVertice->pNode);
            } 
            while(LIS_AvancarElementoCorrente(pGrafo->vertices, 1) == LIS_CondRetOK);

            LIS_DestruirLista(pGrafo->vertices);
            
            free( pGrafo ) ;
            
            return GRA_CondRetOK;
     } 
コード例 #21
0
ファイル: graph.c プロジェクト: rbertoche/t2
/* Essa funcao e' responsavel por criar e compor 2 links ligando
 * 2 nos.
 */
enum GRA_Ret linkTwoNodes(Node *node1, Node *node2)
{
	Link *link1, *link2, *link;
	IrInicioLista(node1->links);
	CNT_CONTAR("linkTwoNodes - Inicializacao");
	do{ /* Assertiva: Nao repetir links */
	    CNT_CONTAR("linkTwoNodes - Procurando link igual");
		link = LIS_ObterValor(node1->links);
		if( link && link->n2 == node2 ){
            CNT_CONTAR("linkTwoNodes - Links iguais");
			return GRA_InvalidLink;
		}
	}while (LIS_CondRetOK == LIS_AvancarElementoCorrente (node1->links,1));

    CNT_CONTAR("linkTwoNodes - Compondo Links");
	link1 = (Link*) malloc (sizeof(Link));
	if (!link1){
	CNT_CONTAR("linkTwoNodes - Alocacao de link1 falhou");
		return GRA_MemoryError;
	}
	link2 = (Link*) malloc (sizeof(Link));
	if (!link2){
		/* Muito improvavel de cair aqui num teste
	CNT_CNTAR("linkTwoNodes - Alocacao de link2 falhou"); */
		free (link1);
		return GRA_MemoryError;
	}

	/* Compoe os dois links */
	link1->n1 = node1;
	link1->n2 = node2;
	link1->brother = link2;
	link2->n1 = node2;
	link2->n2 = node1;
	link2->brother = link1;

	IrFinalLista(node1->links);
	IrFinalLista(node2->links);

	/* Tenta inserir cada link em uma lista, limpa se nao der certo */

	CNT_CONTAR("linkTwoNodes - Inserindo link 1 na lista");
	if( LIS_CondRetOK != LIS_InserirElementoApos(node1->links, link1) ){
        CNT_CONTAR("linkTwoNodes - Nao inseriu link 1 na lista");
		return GRA_MemoryError;
    }

    CNT_CONTAR("linkTwoNodes - Inserindo link 2 na lista");
	if( LIS_CondRetOK != LIS_InserirElementoApos(node2->links, link2) ){
        CNT_CONTAR("linkTwoNodes - Nao inseriu link 2 na lista");
		LIS_ExcluirElemento(node1->links);
		return GRA_MemoryError;
	}
#ifdef _DEBUG
	AssertLink(link1);
	AssertLink(link2);
#endif /* _DEBUG */
    CNT_CONTAR("linkTwoNodes - Finalizando");
	return GRA_Ok;
}
コード例 #22
0
ファイル: GRAFO.C プロジェクト: ferlief/Fer-ArcaboucoTesteC
int ChecaVerticeExiste(GRA_tppGrafo pGrafo, char Vert)
{
	tpVerticeGrafo * pVertice;

	if(pGrafo==NULL){
		return 0;
	} /* if */

	ListaRetCaminho=LIS_IrInicioLista(pGrafo->pListaVertices);
	
	while(ListaRetCaminho==LIS_CondRetOK || ListaRetCaminho==LIS_CondRetFimLista){

		LIS_ObterValor(pGrafo->pListaVertices , (void**)&pVertice);

		if(pVertice->pIdVertice == Vert){

			return 1;

		} /* if */

		if(ListaRetCaminho == LIS_CondRetFimLista){
			return 0;
		} /* if */
		ListaRetCaminho = LIS_AvancarElementoCorrente(pGrafo->pListaVertices, 1);

	} /* while */

	pVertice = NULL;

	return 0;
} /* Fim função: GRA &Checa se vertice existe */
コード例 #23
0
   PIL_tpCondRet PIL_VerCarta( PIL_tppPilha pPilha , CAR_tppCarta * pCarta , int posicao )
   {
	LIS_tpCondRet Ret ;

	*pCarta = NULL ;
	
	if ( posicao < 0 )
	{
		return PIL_CondRetParamIncorreto ;	
	}

	LIS_IrFinalLista( pPilha->pListaCartas ) ; 

	Ret = LIS_AvancarElementoCorrente( pPilha->pListaCartas , - posicao ) ;

	if ( Ret == LIS_CondRetFimLista )
	{
		return PIL_CondRetFimPilha ;
	}

	if ( Ret == LIS_CondRetListaVazia )
	{
		return PIL_CondRetPilhaVazia ;
	}
	
    LIS_ObterValor( pPilha->pListaCartas , pCarta ) ;

	return PIL_CondRetOK ; 	

   }/* Fim função: PIL VerCarta */
コード例 #24
0
void TAB_inicializar(Tabuleiro *tabuleiro, char idJogador1, char idJogador2)
{
    int x, y;
    //Assertivas de entrada
#ifdef _DEBUG
    if(tabuleiro == NULL){
        printf("\n tabuleiro não existe \n");
        return;
    }
    if(idJogador1 != 'x' || idJogador2 != 'o'){
        printf("\n Erro na associação de caracteres correspondentes ao jogador1 e/ou jogador2 \n");
        return;
    }
#endif
    LIS_IrInicioLista(tabuleiro->lista);
    for(y = 0; y < TabuleiroAltura; ++y) {
        LIS_tppLista lista = (LIS_tppLista)LIS_ObterValor(tabuleiro->lista);
        LIS_IrInicioLista(lista);
        for(x = 0; x < TabuleiroLargura; ++x) {
            Peca *peca = NULL;
            if(y < 2 && (x + y) % 2 == 1)
                peca = PEC_criar(PecaNormal, idJogador1);
            else if(y > TabuleiroAltura - 3 && (x + y) % 2 == 1)
                peca = PEC_criar(PecaNormal, idJogador2);

            LIS_SetarValor(lista, peca);
            LIS_AvancarElementoCorrente(lista, 1);
        }
        LIS_AvancarElementoCorrente(tabuleiro->lista, 1);
    }
}/* Fim função: TAB  &Inicializar tabuleiro para início de uma partida */
コード例 #25
0
Peca *TAB_obterCasa(Tabuleiro *tabuleiro, int linha, char coluna)
{
    LIS_tppLista lista;

    --linha;
    coluna = tolower(coluna) - 'a';

    if(LIS_IrIndice(tabuleiro->lista, linha) != LIS_CondRetOK)
        return NULL;
    lista = (LIS_tppLista)LIS_ObterValor(tabuleiro->lista);
    if(!lista)
        return NULL;
    if(LIS_IrIndice(lista, coluna) != LIS_CondRetOK)
        return NULL;

    return LIS_ObterValor(lista);
}/* Fim função: TAB  &Obter valor de uma peça no tabuleiro */
コード例 #26
0
/***************************************************************************
*
*  Função: TAB  &mover uma peça no tabuleiro
*  ****/
int TAB_verificaVencedor(Tabuleiro *tabuleiro, char idJogador1, char idJogador2)
{
    int x, y;
    int existe1 = 0, existe2 = 0;

    //Assertivas de entrada
#ifdef _DEBUG
    if(!tabuleiro)
        printf("\n  tabuleiro não existe \n");
    if(idJogador1 != 'x' || idJogador2 != 'o')
        printf("\n Erro na associação de caracteres correspondentes ao jogador1 e/ou jogador2 \n");
#endif

    LIS_IrFinalLista(tabuleiro->lista);
    for(y = TabuleiroAltura - 1; y >= 0; --y) {
        LIS_tppLista lista = (LIS_tppLista)LIS_ObterValor(tabuleiro->lista);
        LIS_IrInicioLista(lista);
        for(x = 0; x < TabuleiroLargura; ++x) {
            Peca *peca = LIS_ObterValor(lista);
            if(peca) {
                if(PEC_obterCaracter(peca) == idJogador1)
                    existe1 = 1;
                else if(PEC_obterCaracter(peca) == idJogador2)
                    existe2 = 1;

                if(existe1 && existe2) // existe peca dos 2 jogadores no tabuleiro. jogo continua
                    return -1;
            }

            LIS_AvancarElementoCorrente(lista, 1);
        }
        LIS_AvancarElementoCorrente(tabuleiro->lista, -1);
    }

    if(existe1 && !existe2) // so ha pecas do jogador 1 presentes. ele ganhou
        return 0;
    if(!existe1 && existe2) // so ha pecas do jogador 2 presentes. ele ganhou
        return 1;

    //Assertivas de saida
#ifdef _DEBUG
    printf("Caso indefinido em  TAB_verificaVencedor");
#endif

    return -2;
}/* Fim função: TAB verifica vencedor */
コード例 #27
0
ファイル: graph.c プロジェクト: rbertoche/t2
enum GRA_Ret searchData(LIS_tppLista l, void *data)
{
	Node* n;

	CNT_CONTAR("searchData - Inicializao");
	IrInicioLista(l);
	do{
        CNT_CONTAR("searchData - Procurando dado");
		n = LIS_ObterValor(LIS_ObterValor(l));
		if(data == n->data){
            CNT_CONTAR("searchData - Achou o dado");
			return GRA_Ok;
		}
	} while(LIS_CondRetOK == LIS_AvancarElementoCorrente (l, 1));
	CNT_CONTAR("searchData - Finalizacao");
	return GRA_InvalidArgNode;
}
コード例 #28
0
ファイル: graph.c プロジェクト: rbertoche/t2
void AssertNode(Node *n, Graph *g)
{
    CNT_CONTAR("AssertNode - Verificando assertivas");
	IrInicioLista(g->nodes);
	do{
        CNT_CONTAR("AssertNode - Procurando valor");
		if (n == LIS_ObterValor(LIS_ObterValor( g->nodes ))){
            CNT_CONTAR("AssertNode - Valor encontrado");
			assert( n->delData == g->delData );
			return;
		}
	} while(LIS_CondRetOK == LIS_AvancarElementoCorrente ( g->nodes , 1));
	/* Nao deveria cruzar esse ponto: Significa que nao foi encontrado
	 * n na lista g->nodes
	 */
	assert( 0 );
}
コード例 #29
0
ファイル: graph.c プロジェクト: rbertoche/t2
enum GRA_Ret GRA_AddLink (Graph *g, void *n)
{
	Node *n1, *n2;
	enum GRA_Ret ret;
    CNT_CONTAR("GRA_AddLink - Inicio");
#ifdef _DEBUG
	AssertGraph(g);
#endif /* _DEBUG */
	if (!n){
	    CNT_CONTAR("GRA_AddLink - Nao existe n");
		return GRA_NullData;
    }
	if (!g->currentNode){
        CNT_CONTAR("GRA_AddLink - Nao existe g->currentNode");
		return GRA_InvalidCurrentNode;
    }
	n1 = LIS_ObterValor(g->currentNode);
	assert(n1);

    CNT_CONTAR("GRA_AddLink - Procurando no");
	if (searchData (g->nodes, n) != GRA_Ok){
        CNT_CONTAR("GRA_AddLink - Nao encontrou no");
		return GRA_InvalidArgNode;
    }
	n2 = LIS_ObterValor(LIS_ObterValor(g->nodes));
	if (n2 == n1){
        CNT_CONTAR("GRA_AddLink - Tentando criar link de n1 pra n1");
		return GRA_InvalidArgNode;
	}
#ifdef _DEBUG
	AssertNode(n1,g);
	AssertNode(n2,g);
#endif /* _DEBUG */
    CNT_CONTAR("GRA_AddLink - Ligando 2 nos");
	ret = linkTwoNodes(n1, n2);
#ifdef _DEBUG
	if (ret == GRA_Ok){
        CNT_CONTAR("GRA_AddLink - Ligou os nos");
		g->nOfLinks += 2;
    }
		AssertNode(n1,g);
		AssertNode(n2,g);
		AssertGraph(g);
#endif /* _DEBUG */
	return ret;
}
コード例 #30
0
ファイル: graph.c プロジェクト: rbertoche/t2
enum GRA_Ret GRA_RemLink (Graph *g, void *d)
{
	Node *curr;
	Link *l;
    CNT_CONTAR("GRA_RemLink - Inicio");
	if (!d){
        CNT_CONTAR("GRA_RemLink - Nao existe d");
		return GRA_NullData;
    }
	if (!g->currentNode){
        CNT_CONTAR("GRA_RemLink - Nao existe g->currentNode");
		return GRA_InvalidCurrentNode;
    }
#ifdef _DEBUG
	AssertGraph(g);
#endif /* _DEBUG */
	curr = LIS_ObterValor (g->currentNode);
#ifdef _DEBUG
	AssertNode(curr,g);
#endif /* _DEBUG */

    CNT_CONTAR("GRA_RemLink - Procurando elemento");
	IrInicioLista (curr->links);
	do{
        CNT_CONTAR("GRA_RemLink - Avanando na lista");
		l = (Link*)LIS_ObterValor (curr->links);
		#ifdef _DEBUG
		AssertLink(l);
		#endif /* _DEBUG */
		if (l->n2->data == d){
             CNT_CONTAR("GRA_RemLink - Deletando elemento");
			/* deleta de curr -> n2 */
			LIS_ExcluirElemento(curr->links);
				/* isso deleta link e link->brother */
			#ifdef _DEBUG
			g->nOfLinks -= 2 ;
			AssertGraph(g);
			#endif /* _DEBUG */
			return GRA_Ok;
		}
	}while (LIS_AvancarElementoCorrente(curr->links, 1)
			== LIS_CondRetOK);

    CNT_CONTAR("GRA_RemLink - Finalizando");
	return GRA_InvalidArgNode;
}