From f0ca440371e3f50c4f91fdb2054b14332f8e21cb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADvian=20Machado?= <113874340+VivianMachado0@users.noreply.github.com> Date: Tue, 17 Jan 2023 08:45:25 -0300 Subject: [PATCH] Add files via upload --- .../exerc\303\255cios/Pilha.cpp" | 44 +++++++ .../exerc\303\255cios/Pilha.hpp" | 22 ++++ .../exerc\303\255cios/TPilha.cpp" | 118 ++++++++++++++++++ .../exerc\303\255cios/main.cpp" | 46 +++++++ 4 files changed, 230 insertions(+) create mode 100644 "Pilha com Arranjo/exerc\303\255cios/Pilha.cpp" create mode 100644 "Pilha com Arranjo/exerc\303\255cios/Pilha.hpp" create mode 100644 "Pilha com Arranjo/exerc\303\255cios/TPilha.cpp" create mode 100644 "Pilha com Arranjo/exerc\303\255cios/main.cpp" diff --git "a/Pilha com Arranjo/exerc\303\255cios/Pilha.cpp" "b/Pilha com Arranjo/exerc\303\255cios/Pilha.cpp" new file mode 100644 index 0000000..613872e --- /dev/null +++ "b/Pilha com Arranjo/exerc\303\255cios/Pilha.cpp" @@ -0,0 +1,44 @@ +#include +#include "Pilha.hpp" + +using namespace std; + +void FazPilhaVazia(TipoPilha *pilha) { + pilha->topo = 0; +} + +bool VerificaPilhaVazia(TipoPilha *pilha) { + if (pilha->topo == 0) { + return true; + } else return false; +} + +void Empilha(TipoPilha *pilha, TipoItem item) { + if (pilha->topo == MAXTAM) { + cout << "\nPilha cheia\n"; + } else { + pilha->itens[pilha->topo] = item; + pilha->topo++; + //cout << "\nItem empilhado com sucesso!\n"; + } +} + +void ExibePilha(TipoPilha *pilha) { + for (int i=pilha->topo-1; i>=0; i--) { + cout << pilha->itens[i].letra << "\n"; + } +} + +void Desempilha(TipoPilha *pilha, TipoItem *item) { + if (VerificaPilhaVazia(pilha)) { + cout << "\nPilha vazia.\n"; + return; + } + + pilha->topo--; + *item = pilha->itens[pilha->topo]; +} + +int Tamanho(TipoPilha *pilha) { + return pilha->topo; +} \ No newline at end of file diff --git "a/Pilha com Arranjo/exerc\303\255cios/Pilha.hpp" "b/Pilha com Arranjo/exerc\303\255cios/Pilha.hpp" new file mode 100644 index 0000000..27ab7db --- /dev/null +++ "b/Pilha com Arranjo/exerc\303\255cios/Pilha.hpp" @@ -0,0 +1,22 @@ +#ifndef PILHA_H +#define PILHA_H + +#define MAXTAM 5 + +typedef struct TipoItem { + char letra; +} TipoItem; + +typedef struct Pilha { + TipoItem itens[MAXTAM]; + int topo; +} TipoPilha; + +void FazPilhaVazia(TipoPilha *pilha); +bool VerificaPilhaVazia(TipoPilha *pilha); +void Empilha(TipoPilha *pilha, TipoItem item); +void Desempilha(TipoPilha *pilha, TipoItem *item); +void ExibePilha(TipoPilha *pilha); +int Tamanho(TipoPilha *pilha); + +#endif \ No newline at end of file diff --git "a/Pilha com Arranjo/exerc\303\255cios/TPilha.cpp" "b/Pilha com Arranjo/exerc\303\255cios/TPilha.cpp" new file mode 100644 index 0000000..5131ff1 --- /dev/null +++ "b/Pilha com Arranjo/exerc\303\255cios/TPilha.cpp" @@ -0,0 +1,118 @@ +#include +#include + +#define MAXTAM 10 + +using namespace std; + +typedef struct { + int Item[MAXTAM]; // i: 0, 1, 2, 3... 8, 9 + int Topo; +} TPilha; + +/* Funções básicas de verificação: + [x] Inicializar a pilha: necessária para criação da struct TPilha + [x] Verificar se a Pilha está Vazia: necessária ao Desempilhar um Item[i] + [x] Verificar se a Pilha está Cheia: necessária ao Empilhar um novo Item[i] +*/ + +void TPilha_Inicializa(TPilha *p) { + p->Topo = -1; // Indica que a pilha está inicializada e vazia +} + +int TPilha_Vazia(TPilha *p) { + if (p->Topo == -1) { + return 1; // Retorno verdadeiro, a pilha está vazia + } else { + return 0; // Retorno falso, a pilha não está vazia + } +} + +int TPilha_Cheia(TPilha *p) { + if (p->Topo == MAXTAM-1) { + return 1; // Retorno verdadeiro, a pilha está cheia: 0 a 9 preenchidos + } else { + return 0; // Retorno falso, a pilha não está cheia + } +} + +/* Funções básicas de manipulação: + [x] Empilhar um item no topo da pilha: necessário verificar se há espaço + [x] Desempilhar um item do topo da pilha: necessário verificar se há item na pilha +*/ + +void TPilha_Empilha(TPilha *p, int x) { + if (TPilha_Cheia(p) == 1) { + cout << "\nPilha cheia\n"; + } else { + p->Topo++; + p->Item[p->Topo] = x; + cout << "Valor empilhado: " << x << endl; + } +} + +int TPilha_Desempilha(TPilha *p) { + int aux; // Receber o valor da pilha que será desempilhado + if (TPilha_Vazia(p) == 1) { + cout << "\nImpossível desempilhar. Pilha vazia\n"; + } else { + aux = p->Item[p->Topo]; + p->Topo--; + return aux; + } +} + +/* Funções complementares: + [x] Imprimir a pilha + [x] Tamanho da pilha +*/ + +void TPilha_Imprime(TPilha *p) { + if (TPilha_Vazia(p) == 1) { + cout << "\nPilha vazia\n"; + return; + } + for (int i = p->Topo; i >= 0; i--) { + if (i == p->Topo) { + cout << "\nTopo -> " << p->Item[i] << "\n"; + } else { + cout << "\t " << p->Item[i] << "\n"; + } + } +} + +int TPilha_Tamanho(TPilha *p) { + return p->Topo+1; +} + +int main() { + UINT CPAGE_UTF8 = 65001; + UINT CPAGE_DEFAULT = GetConsoleOutputCP(); + SetConsoleOutputCP(CPAGE_UTF8); + system("cls"); + + TPilha p; + int aux, tam; + + TPilha_Inicializa(&p); + + TPilha_Empilha(&p, 5); + TPilha_Empilha(&p, 7); + TPilha_Empilha(&p, 11); + + /*aux = TPilha_Desempilha(&p); + cout << "\nValor desempilhado: " << aux << endl; + + aux = TPilha_Desempilha(&p); + cout << "Valor desempilhado: " << aux << endl; + + aux = TPilha_Desempilha(&p); + cout << "Valor desempilhado: " << aux << endl;*/ + + TPilha_Imprime(&p); + + tam = TPilha_Tamanho(&p); + cout << "\nTamanho da Pilha: " << tam << endl; + + return 0; +} \ No newline at end of file diff --git "a/Pilha com Arranjo/exerc\303\255cios/main.cpp" "b/Pilha com Arranjo/exerc\303\255cios/main.cpp" new file mode 100644 index 0000000..9bc27c8 --- /dev/null +++ "b/Pilha com Arranjo/exerc\303\255cios/main.cpp" @@ -0,0 +1,46 @@ +#include +#include +#include "Pilha.hpp" +#include "Pilha.cpp" + +#define MAXTAM 10 + +using namespace std; + +int main() +{ + UINT CPAGE_UTF8 = 65001; + UINT CPAGE_DEFAULT = GetConsoleOutputCP(); + SetConsoleOutputCP(CPAGE_UTF8); + system("cls"); + + TipoPilha p, q; + int tam; + + FazPilhaVazia(&p); + FazPilhaVazia(&q); + + Empilha(&p, 'R'); + Empilha(&p, 'O'); + Empilha(&p, 'M'); + Empilha(&p, 'A'); + + ExibePilha(&p); + + tam = Tamanho(&p); + cout << "\nTamanho da Pilha p: " << tam << endl + << endl; + + for (int i = 0; i < tam; i++) + { + char aux = Desempilha(&p); + Empilha(&q, aux); + } + + ExibePilha(&q); + + tam = Tamanho(&q); + cout << "\nTamanho da Pilha q: " << tam << endl; + + return 0; +} \ No newline at end of file