Sistemas

Disponível somente no TrabalhosFeitos
  • Páginas : 7 (1532 palavras )
  • Download(s) : 0
  • Publicado : 16 de abril de 2012
Ler documento completo
Amostra do texto
Faculdade Anhanguera de Belo
Horizonte



Atps Estrutura de Dados


Professora. Juliana Santiago Teixeira


ATIVIDADES PRÁTICAS SUPERVISIONADAS
Analise e desenvolvimento de Sistema
3ª Série Estrutura de Dados





Alunos:

Definam as funções necessárias para a implementação dos quatro primeiros comandos definidos no desafio e o “sair”, utilizando as estruturas de dados comalocação estática de memória definida na Etapa 1.


Função Move A acima B

void  MoveAacimaB(TBloco* bloco , int a , int b)
{
     Apontador pA, pB, pAntA , pAntB;
     int listaA ;
     int listaB ;
     if(a != b) //Compara se os blocos são diferentes 
     {
          //Procura os blocos 
          pA = ProcuraBloco(bloco, &pAntA, &listaA, a);
          pB = ProcuraBloco(bloco,&pAntB, &listaB, b);
          if(listaA != listaB) //Compara se os blocos já não estão na mesma lista
          {
                    if(pA != NULL && pB != NULL && pB->pProx != pA) //Compara se há algum bloco em cima da mesa 
                    {
                          if(pA->pProx != NULL) //Compara se há algum bloco em cima do que vai ser movimentado 
                          {                                       Original(bloco, pA->pProx); //Retorna o bloco a posição original 
                                       pA->pProx = NULL; //Faz o ultimo apontar para NULL
                          }
                          if(pB->pProx != NULL) //Compara se há algum bloco em cima do que vai ser movimentado 
                          {
                                      Original(bloco, pB->pProx); //Retorna o bloco a posição original 
                                       pB->pProx = NULL; //Faz o ultimo apontar para NULL
                          }
                          pB->pProx = pA; //Coloca o bloco A em cima do bloco B
                          (pAntA)->pProx = NULL; //Faz a mesa na posição correpondente ao bloco A apontar para NULL                          bloco->lista[listaA].pUltimo = NULL; //Faz o ultimo da lista vazia apontar para NULL
                          bloco->lista[listaB].pUltimo = pA; //Faz o ultimo da lista B receber o novo ultimo da lista 
                    }
          }
     }
}












Função Move A topo B

//Coloca o bloco a no topo retornando blocos que já estiverem sobre a às suas posições originais.
voidMoveAtopoB(TBloco* bloco, int a, int b)
{
     Apontador pA, pB, pAntA , pAntB;
     int listaA;
     int listaB;
     if(a != b) //Compara se os blocos são diferentes 
     {
          //Procura os blocos 
          pA = ProcuraBloco(bloco, &pAntA, &listaA, a);
          pB = ProcuraBloco(bloco, &pAntB, &listaB, b);
          if(listaA != listaB) //Compara se os blocos já não estão na mesma lista           {
                    if(pA != NULL && pB != NULL) //Compara se há algum bloco em cima da mesa
                    {
                          if(pA->pProx != NULL) //Compara se há algum bloco em cima do que vai ser movimentado 
                          {
                                       Original(bloco, pA->pProx); //Retorna o bloco a posição original                                        pA->pProx = NULL; //Faz o ultimo apontar para NULL
                          }
                          while (pB->pProx != NULL) // Percorre até chegar no ultimo da lista 
                          {
                                pB = pB->pProx;
                          }
                          pB->pProx = pA; //Coloca o bloco A em cima da lista de blocos em cima de B
                         (pAntA)->pProx = NULL; //Faz a mesa na posição correpondente ao bloco A apontar para NULL
                          bloco->lista[listaB].pUltimo = pA; //Faz o ultimo da lista B receber o novo ultimo da lista 
                    }
          }
     }
}





















Função Empilhar A acima B



void...
tracking img