• Matéria: Informática
  • Autor: DaniellyAraujo1990
  • Perguntado 6 anos atrás

Todo dispositivo digital, internamente, trabalha com dados formatados em estruturas específicas para resolver problemas particulares. Na vida profissional de um desenvolvedor, frequentemente, ele irá se deparar com situações nas quais é preciso identificar qual estrutura de dados é a mais adequada para determinada função.
Tomando por base as pilhas, pode-se realizar diversas operações para solucionar problemas. Uma dessas operações é a inversão dos dados de uma lista. Para se inverter a ordem dos dados de uma fila, vetor ou arquivo, basta desempilhar os seus valores e empilhá-los na ordem em que eles foram desempilhados. Ou seja, no mesmo momento em que se desempilha um elemento, deve-se empilha-lo em um novo local para que, ao final, repetindo esse processo, todos os elementos se invertam.
INSTRUÇÕES:
No caso das pilhas, as prerrogativas são as seguintes:
1 – A inserção de novos elementos é feita sempre ao final da pilha.
2 – A remoção de elementos também é feita somente no fim da pilha.
Assim, dizemos que a pilha opera ao estilho Last In, First Out (LIFO), ou seja, o último a entrar é o primeiro a sair.

Você deverá desenvolver um programa em Linguagem C que execute os seguintes passos:
1 - Preencher uma pilha com os números do seu R.A.;
2 - Imprimir a pilha na ordem em que os elementos foram inseridos (iniciando pela base, e finalizando pelo topo);
3 – Desempilhar todos os elementos, inserindo-os em uma segunda estrutura de dados do tipo pilha;
4 - Imprimir a nova pilha na ordem em que os elementos foram inseridos (iniciando pela base, e finalizando pelo topo).
Observação importante: seu código-fonte deve declara duas estruturas de dados tipo pilha distintas. A primeira impressão dos dados que seu programa deve fazer está relacionada ao conteúdo da primeira pilha (itens 1 e 2 do passo a passo apresentado acima). Já a segunda impressão dos dados que seu programa fará, está relacionada aos dados que foram inseridos na segunda pilha.
O resultado da execução do seu algoritmo, supondo que seu R.A. é igual ao número 12345678, deverá ser algo parecido com o seguinte:

Anexos:

Respostas

respondido por: evertonapolinario3l
1

Resposta:

//Código abaixo em DEV C++.

// A formatação aqui fica feia mas é só colar no DEV C que fica bom.

// 26/05/2020

//-----------------------------

// CRIA A ESTRUTURA DA PILHA

// ---------------------------  

struct pilha {

 int  elemento[101];  // vetor que irá armazenar os elementos da pilha

 int  elementos;  // indicador do tamanho da pilha  

};

//----------------------------

// DECLARA AS FUNÇÕES

// ---------------------------

bool empilha(int valor,pilha *mystack );   // insere elementos na pilha

int desempilha(struct pilha *mystack );   // retira elemento da pilha

void imprimepilha(pilha *mystack );    // imprime a pilha

//----------------------------

// INICIO DO PROGRAMA

// ---------------------------

int main( ) {

  pilha pilha1;        // Declara a primeira pilha

  pilha pilha2;        // Declara a segunda pilha

  pilha1.elementos = pilha2.elementos = 0; // inicializa as pilhas.

   

// ADICIONA ELEMENTOS À PILHA 1 - Para RA 12345678

empilha(1,&pilha1);   // Chama a função empilha

empilha(2,&pilha1);   // o primeiro argumento é o numero a adicionar

  empilha(3,&pilha1);   // o segundo argumento é o endereço da pilha

  empilha(4,&pilha1);

  empilha(5,&pilha1);

  empilha(6,&pilha1);

  empilha(7,&pilha1);

  empilha(8,&pilha1);

imprimepilha(&pilha1);  // Chama a função imprimepilha. Argumento é o endereço da pilha

 

// DESEMPILHA ELEMENTOS DA PILHA 1, PASSANDO PARA PILHA 2

empilha(desempilha(&pilha1),&pilha2);  // desempilha da pilha 1, e empilha na pilha 2

empilha(desempilha(&pilha1),&pilha2); // o primeiro argumento é a função desempilha, que

empilha(desempilha(&pilha1),&pilha2); // desempilha o numero da pilha 1

empilha(desempilha(&pilha1),&pilha2); // o segundo argumento é o endereço da pilha 2

empilha(desempilha(&pilha1),&pilha2); // seria possivel fazer isso usando uma variavel

empilha(desempilha(&pilha1),&pilha2); // intermediaria para armazenar o valor desempilhado

empilha(desempilha(&pilha1),&pilha2); // da pilha1 antes de empilhar na pilha2

empilha(desempilha(&pilha1),&pilha2); //  

  imprimepilha(&pilha2);   // Chama a função imprimepilha. Argumento é o endereço da pilha    

return 0;

}

//----------------------------

// LISTA DE FUNÇÕES

// ---------------------------

//--------------------------------------------

// FUNÇÃO EMPILHA - ADICIONA NUMERO A PILHA

// -------------------------------------------

bool empilha(int valor,pilha *mystack) { // retorna TRUE se adicionou, e FALSE se erro

 

if (mystack->elementos==100) // se já estiver no tamanho máximo da pilha: 100 elementos

{

 printf("Tamanho máximo da pilha excedido.\n"); // stack overflow

 return false; // Retorna mensagem de erro ao chamador da função

}

mystack->elemento[mystack->elementos]=valor; // adiciona o valor ao vetor da pilha

mystack->elementos++;      //  atualiza numero de elementos  

  //printf( "Elementos : %d\n", mystack->elementos);

  //printf( "Elemento incluido: %d\n\n", valor);

  return true; // retorna mensagem de sucesso  

}

//----------------------------------------------

// FUNÇÃO DESEMPILHA - RETIRA NUMERO A PILHA

// ---------------------------------------------

int desempilha(pilha *mystack ) { // retorna o valor retirado da pilha e -1 se erro.  

if (mystack->elementos==0) // pilha vazia  

{

 printf("Nao ha elementos na pilha.\n"); // pilha zerada

 return -1; // Retorna mensagem de erro ao chamador da função

}

mystack->elementos--; //  atualiza numero de elementos. Nao há necessidade de editar o vetor.

  //printf( "Elementos : %d\n", mystack->elementos);

  return mystack->elemento[mystack->elementos]; // retorna elemento desempilhado.  

}

// -----------------------------------------------------

// FUNÇÃO IMPRIMEPILHA - para gerar o output da tarefa.  

// -----------------------------------------------------

void imprimepilha(pilha *mystack )

{      

if (mystack->elementos==0) // pilha vazia  

{

 printf("Nao ha elementos na pilha.\n"); // pilha zerada, mensagem de erro

 return;         // retorna a main

}

for (int i=0;i<mystack->elementos;i++)  // Estrutura de repetição, corre os elementos do vetor

printf( "%d ", mystack->elemento[i]); // imprime o numero, e segue um espaço " ".

  printf("\n");        // enter no final

return;          // retorna a main

}

Explicação:

respondido por: oseiasboliveira
2

Resposta:

#include<stdio.h>  

struct pilha {    

 int  elemento[101];    

 int  elementos;

};

bool empilha(int valor,pilha*mystack);

int desempilha(struct pilha*mystack);

void imprimepilha(pilha*mystack);

int main( ){    

 pilha pilha1;    

 pilha pilha2;    

 pilha1.elementos=pilha2.elementos=0;    

 empilha(1,&pilha1);  

 empilha(2,&pilha1);    

 empilha(3,&pilha1);    

 empilha(4,&pilha1);    

 empilha(5,&pilha1);    

 empilha(6,&pilha1);    

 empilha(7,&pilha1);    

 empilha(8,&pilha1);  

 imprimepilha(&pilha1);

 empilha(desempilha(&pilha1),&pilha2);  

 empilha(desempilha(&pilha1),&pilha2);  

 empilha(desempilha(&pilha1),&pilha2);  

 empilha(desempilha(&pilha1),&pilha2);

 empilha(desempilha(&pilha1),&pilha2);  

 empilha(desempilha(&pilha1),&pilha2);  

 empilha(desempilha(&pilha1),&pilha2);  

 empilha(desempilha(&pilha1),&pilha2);      

 imprimepilha(&pilha2);      

 return 0;

}

bool empilha(int valor, pilha*mystack){  

 

 if (mystack->elementos==100)  

  {    

   printf("Tamanho máximo da pilha excedido.\n");    

   return false;  

  }  

 mystack->elemento[mystack->elementos]=valor;  

 mystack->elementos++;          

 return true;  

}

 

int desempilha(pilha*mystack){    

 if (mystack->elementos==0)    

  {    

   printf("Nao ha elementos na pilha.\n");    

   return -1;  

   }    

 mystack->elementos--;

 return mystack->elemento[mystack->elementos];  

}

void imprimepilha(pilha*mystack){        

 if (mystack->elementos==0)    

  {

   printf("Nao ha elementos na pilha.\n");    

   

  }  

 for (int i=0;i<mystack->elementos;i++)  

  printf("%d",mystack->elemento[i]);    

 printf("\n");

}

Explicação:


fellipems14: Cara, fiz parecido com o seu, mas na hora de imprimir a pilha, só imprime o primeiro numero da pilha e no desempilha o primeiro numero...
fellipems14: por exemplo Empilha 12345678 e desempilha 87654321, na hora de imprimir só imprimi o 1 e na linha abaixo do desempilha somente o 8...
Perguntas similares