Example #1
0
// moverTopo: move o bloco A para o topo
// onde o bloco B esta, remove todos
// os blocos sobre o bloco A, retornando-os
// as posições iniciais
void moverTopo(int a, int b, int retornoA, int retornoB, tPilha *p){	
	int valorA, valorB, valorAux;

	if(acessaTopo(&valorA, (p + retornoA)) && valorA == a){
		desempilhar(&valorA, (p + retornoA));
		empilhar(valorA, (p + retornoB));
	}else{
		//verifica o valor do topo do bloco A
		while(acessaTopo(&valorA, &p[retornoA]) && valorA != a){
			desempilhar(&valorAux, &p[retornoA]);
			empilhar(valorAux, (p + valorAux));
		}
		desempilhar(&valorA, (p + retornoA));
		empilhar(valorA, (p + retornoB));
	}
	printf("\n\t\tMOVER %d TOPO %d", a, b);
}
Example #2
0
// moverAcima: move o bloco A para o 
// acima do bloco B, retornando à
// posição inicial os demais blocos sobre
// o bloco B
void moverAcima(int a, int b, int retornoA, int retornoB, tPilha p[]){
	int valorA, valorB, valorAux;

	if(acessaTopo(&valorA, (p + retornoA)) && valorA == a){
		desempilhar(&valorA, (p + retornoA));
		//verifica o topo do bloco B
		if(acessaTopo(&valorB, (p + retornoB)) && valorB == b){
			empilhar(valorA, (p + retornoB));
		}else{
			while(acessaTopo(&valorB, (p + retornoB)) && valorB != b){
				desempilhar(&valorAux, (p + retornoB));
				empilhar(valorAux, (p + valorAux));
			}
			empilhar(valorA, (p + retornoB));
		}
	}else{
		while(acessaTopo(&valorA, (p + retornoA)) && valorA != a){
			desempilhar(&valorAux, (p + retornoA));
			empilhar(valorAux, (p + valorAux));
		}
		desempilhar(&valorA, &p[retornoA]);
		//verifica o topo do bloco B
		if(acessaTopo(&valorB, (p + retornoB)) && valorB == b){
			empilhar(valorA, (p + retornoB));
		}else{
			while(acessaTopo(&valorB, (p + retornoB)) && valorB != a){
				desempilhar(&valorAux, (p + retornoB));
				empilhar(valorAux, (p + valorAux));
			}
			empilhar(valorA, (p + retornoB));
		}
	}
	printf("\n\t\tMOVER %d ACIMA %d",a, b);
}
Example #3
0
int mover(Pilha * origem, Pilha * destino){    
    if(tamanho(origem) > 0 && (tamanho(destino) <= 0 || topo(origem) < topo(destino))){
        empilhar(destino,desempilhar(origem));
        return 1;
    }
    else {
        printf("Nao e possivel fazer este movimento.\n");
        return 0;
    }
}
Example #4
0
Pilha* empilharExpressaoOperador(Pilha* p, char* operador){
    if(tamanhoPilha(p) > 1){
        Arvore* primeiro, *segundo;
        Pilha* pilha;
        primeiro = getArvoreTopoPilha(p);
        p = desempilhar(p);
        segundo = getArvoreTopoPilha(p);
        p = desempilhar(p);
        Arvore* arvoreOperador = inicializaArvore(TIPO_LITERAL, operador, NULL, NULL);
        arvoreOperador = setFilhosEsquerdaCentroDireita(arvoreOperador, primeiro, segundo, NULL);
        p = empilhar(p, arvoreOperador);
    }
    return p;
}
Example #5
0
int inicializar(Pilha * pino1, int * discos){    
    printf("\nTorre de Hanoi, desenvolvido em C por Ryan Sampaio Filho.\n");
    printf("Voce quer jogar com quantos discos?\n");
    fflush(stdin);
    scanf("%d", discos);
    if(*discos < 0){
        return 1;
    }
    int aux = *discos;
    while(aux > 0){
        empilhar(pino1, aux);    
        aux = aux - 1;    
    }
    return 2;
}
int main( void )
{
	char word[ 50 ];

	printf( "Digite uma palavra : " );
	scanf( "%s", word );

    int i, j;

    printf( "Empilhando...\n" );
    for( i = strlen( word )-1, j = 0; i > -1; i-=1, j++ )
        empilhar( word[ i ], j );

    printf( "Desempilhando...\n" );
    for( i = 0; i < strlen( word ); i++ )
        desempilhar();
}
Example #7
0
// openFile: recebe com parâmetro o nome
// do arquivo a ser lido, imprime o dados
// do arquivo e retornar se foi possivel
// abrir ou não o arquivo
int openFile(char arquivo[], int escolha){
	FILE *fptr;
	int i = 0;
	char cha[MAX];	
	char ch[MAX];
	int	 a[MAX], b[MAX];
	tPilha p[MAX];
	cabecalho("LENDO ARQUIVO...");

	fptr = fopen(arquivo, "r");
	if(escolha){			
		if(fptr == NULL){
			printf("\t\t# ERRO: IMPOSSIVEL ABRIR O ARQUIVO. [ENTER]");
			fflush(stdin);
			getchar();
			return 0;
		}else{
			while(fscanf(fptr, "%s %d %d", ch, &a[i], &b[i]) != EOF){
				if(!i){
					// converte caracter para inteiro
					// pega o valor da primeira linha do arquivo
					int j = ch[0]-'0';
					// inicializa os blocos
					for(int i = 0; i < j; i++){
						inicializa(&p[i]);
						empilhar(i,&p[i]);
					}
				}
				filter(p, ch, a[i], b[i]);
				i++;			
			}
		}
		fflush(stdin);
		getchar();
	}else		
		if(fptr == NULL)
			return 0;	
		else
			while(fgets(cha,MAX, fptr) != NULL) 
				printf("\t\t%s", cha);

	fclose(fptr);
	return 1;
}
Example #8
0
Pilha* empilharElementoCriandoArvore(Pilha* p, int tipo, void* valorNo){
    Arvore* a = inicializaArvore(tipo, valorNo, NULL, NULL);
    p = empilhar(p, a);
    return p;
}
Example #9
0
File: main.c Project: streeck/ed1
int main(){
	int i;

	PILHA_DINAMICA pilha;

	for (i = 0; i < 5; i++){
		ITEM item;
		item.valor = i;
		
		if (empilhar(&pilha, &item)){
			printf("Entrou na pilha: %d", item.valor);
		}
		else {
			printf("%d: Erro na alocação.\n", item.valor);
		}
	}
	printf("\nPilha atual: ");
	imprime(&pilha);
	printf("\n");

	printf("Tamanho: %d\n--\n", contar(&pilha));

	ITEM item1;
	item1.valor = 100;

	if (empilhar(&pilha, &item1)){
		printf("Entrou na pilha: %d", item.valor);
	}
	else {
		printf("%d: Erro na alocação.\n", item.valor);
	}

	printf("\nPilha atual: ");
	imprime(&pilha);
	printf("\n");

	printf("Tamanho: %d\n--\n", contar(&pilha));

	frente(&pilha, &item1);

	printf("Elemento do topo: %d\n--\n, item1.valor");

	if (desempilhar(&pilha, &item1)){
		printf("Saiu na pilha: %d", item.valor);
	}
	else {
		printf("Pilha vazia.\n", item1.valor);
	}

	item1.valor = 9;
	if (empilhar(&pilha, &item1)){
		printf("Entrou na pilha: %d", item.valor);
	}
	else {
		printf("%d: Erro na alocação.\n", item.valor);
	}

	printf("\nPilha atual: ");
	imprime(&pilha);
	printf("\n");

	printf("Tamanho: %d\n--\n", contar(&pilha));

	return 0;
}