Skip to content

Commit

Permalink
Add files via upload
Browse files Browse the repository at this point in the history
  • Loading branch information
VivianMachado0 authored Jan 17, 2023
1 parent d27c7a7 commit 9952c5f
Show file tree
Hide file tree
Showing 4 changed files with 247 additions and 0 deletions.
112 changes: 112 additions & 0 deletions Pilha com Ponteiro/exercícios2/Pilha.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,112 @@
#include <iostream>
#include "Pilha.hpp"

using namespace std;

void FazPilhaVazia(TipoPilha *pilha)
{
pilha->topo = NULL;
pilha->tamanho = 0;
}

bool VerificaPilhaVazia(TipoPilha *pilha)
{
return (pilha->topo == NULL);
}

void Empilha(TipoPilha *pilha, TipoItem item)
{
Apontador aux;

aux = new TipoElemento; // Aloca memória para o novo elemento (célula)
aux->item = item;
aux->prox = pilha->topo;
pilha->topo = aux;
pilha->tamanho++;
}

void Desempilha(TipoPilha *pilha, TipoItem *item)
{
Apontador aux;

if (VerificaPilhaVazia(pilha))
{
cout << "Pilha vazia!" << endl;
return;
}

aux = pilha->topo;
*item = aux->item;
pilha->topo = aux->prox;
delete aux;
pilha->tamanho--;
}

void ExibePilha(TipoPilha *pilha)
{
Apontador aux;

if (VerificaPilhaVazia(pilha))
{
cout << "Pilha vazia!" << endl;
return;
}

aux = pilha->topo;
while (aux != NULL)
{
cout << aux->item.id << " - " << aux->item.nome << endl;
aux = aux->prox;
}
}

int Tamanho(TipoPilha *pilha)
{
return pilha->tamanho;
}

void ConsultaPorID(TipoPilha *pilha, int id)
{
Apontador aux;

if (VerificaPilhaVazia(pilha))
{
cout << "Pilha vazia!" << endl;
return;
}

aux = pilha->topo;
while (aux != NULL)
{
if (aux->item.id == id)
{
cout << "ID: " << aux->item.id << " - Nome: " << aux->item.nome << endl;
return;
}
aux = aux->prox;
}
cout << "ID não encontrado!" << endl;
}

void ConsultaPorNome(TipoPilha *pilha, char nome[50])
{
Apontador aux;

if (VerificaPilhaVazia(pilha))
{
cout << "Pilha vazia!" << endl;
return;
}

aux = pilha->topo;
while (aux != NULL)
{
if (strcmp(aux->item.nome, nome) == 0)
{
cout << "ID: " << aux->item.id << " - Nome: " << aux->item.nome << endl;
return;
}
aux = aux->prox;
}
cout << "Nome não encontrado!" << endl;
}
38 changes: 38 additions & 0 deletions Pilha com Ponteiro/exercícios2/Pilha.hpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
#ifndef PILHA_H
#define PILHA_H

// Item para armazenar os dados contidos na pilha
typedef struct TipoItem
{
int id;
char nome[50];
} TipoItem;

// Ponteiro para o elemento da pilha
typedef struct TipoElemento *Apontador;

// Elemento (célula) da pilha
typedef struct TipoElemento
{
TipoItem item;
Apontador prox;
} TipoElemento;

// Estrutura da pilha
typedef struct TipoPilha
{
Apontador topo;
int tamanho;
} TipoPilha;

// Funções da pilha
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);
void ConsultaPorID(TipoPilha *pilha, int id);
void ConsultaPorNome(TipoPilha *pilha, char nome[50]);

#endif
74 changes: 74 additions & 0 deletions Pilha com Ponteiro/exercícios2/main.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
#include <iostream>
#include <cstring>
#include "Pilha.cpp"

using namespace std;

void Menu()
{
cout << "1. Exibe Pilha" << endl;
cout << "2. Consulta por ID" << endl;
cout << "3. Consulta por Nome" << endl;
cout << "4. Sair" << endl;
cout << "\nOpcao: ";
}

int main()
{
TipoItem item;
TipoPilha pilha;
int opcao, id;

FazPilhaVazia(&pilha);

item.id = 1;
strcpy(item.nome, "Joao");
Empilha(&pilha, item);

item.id = 2;
strcpy(item.nome, "Maria");
Empilha(&pilha, item);

item.id = 3;
strcpy(item.nome, "Jose");
Empilha(&pilha, item);

do
{
system("cls");
Menu();
cin >> opcao;

switch (opcao)
{
case 1:
cout << endl;
ExibePilha(&pilha);
cout << endl;
system("PAUSE");
break;
case 2:
cout << "Digite o ID: ";
cin >> id;
cout << endl;
ConsultaPorID(&pilha, id);
cout << endl;
system("PAUSE");
break;
case 3:
cout << "Digite o Nome: ";
cin.ignore();
cin.getline(item.nome, 50);
cout << endl;
ConsultaPorNome(&pilha, item.nome);
cout << endl;
system("PAUSE");
break;
case 4:
cout << "Saindo..." << endl;
break;
}
} while (opcao != 4);

return 0;
}
23 changes: 23 additions & 0 deletions Pilha com Ponteiro/exercícios2/readme.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
## Atividades Práticas

1. Utilizando a TAD de Pilha com Ponteiro, escreva uma função para converter um número decimal para binário. Lembre-se de:

- Dividir por 2 e anotar o resto (da direita para a esquerda);
- Pegar a parte inteira;
- Dividir por 2 e anotar o resto.

Exemplo:

* 13/2 = 6 Resto **1**
* 6/2 = 3 Resto **0**
* 3/2 = 1 Resto **1**
* 1/2 = 0 Resto **1**
* 0 **Fim**

Resultado: **1101**

2. Elabore duas funções para consultar em uma pilha dinâmica a existência de um item. Considere que o item possa ser pesquisado por id (primeira função) ou nome (segunda função), utilizando a TAD vista em aula.

void ConsultaPorID(TipoPilha *pilha, int id);

void ConsultaPorNome(TipoPilha *pilha, char nome[]);

0 comments on commit 9952c5f

Please sign in to comment.