Servidor dedicado (VM) por US$5 ao mês!
Saiba mais sobre a DigitanOcean: Adeus Amazon (AWS)... Olá DigitalOcean!

Faça uma recarga de celular e ganhe R$10 de volta!

Tag: exemplo

Controle Acadêmico: Banco de Dados PostgreSQL para Estudo/Treinamento com Estrutura em Português

Algum tempo atrás postei um artigo com um banco de dados de exemplo para MySQL. Agora resolvi postar um para PostgreSQL. Tem uma estrutura bem diferente: é um controle acadêmico (simplificado, é claro). É bastante útil se você estiver estudando o PostgreSQL ou ministrando um treinamento básico.

Para fazer o download da base de dados, clique aqui.

Caso você precise da base de dados para algum trabalho acadêmico ou qualquer outro uso, fique à vontade para usar!


Exemplo de Pilha – Estrutura de Dados

As pilhas são estruturas baseadas no princípio LIFO (last in, first out), na qual os dados que foram inseridos por último na pilha serão os primeiros a serem removidos. Existem duas funções que se aplicam a todas as pilhas: PUSH, que insere um dado no topo da pilha, e PULL, que remove o item no topo da pilha.

Neste artigo coloco um exemplo de aplicação de pilha. Trata-se de uma sacola de correspondências, onde deve se colocar um número limite para poder inserir, remover, retornar o ítem que está no topo etc. No exemplo utilizaremos o método POP, ao invés de PULL para remover um ítem do topo da pilha. Usaremos a biblioteca JOptionPane para ilustrar melhor o exemplo.

Você deve compilar o arquivo CartaApp para poder visualizar o exemplo funcionando.

Aqui vai a descrição do problema:

Faça um programa, em Java, que implemente as tarefas de um entregador de correspondências postais. Leve em consideração que as correspondências são empilhadas na sacola e devem ser entregues levando-se sempre em consideração a que encontra-se no topo. O programa deve permitir:

– Inserir correspondência na sacola (empilhar);
– Remover correspondência da sacola (desempilhar);
– Verificar se a sacola está cheia ou vazia;
– Verificar a próxima correspondência a ser entregue;
– Informar quantas correspondências existem na sacola.

A pilha deverá armazenar objetos com os dados de cada correspondência

Se preferir, baixe os arquivos aqui.

StackX.java

//StackX.java

/**
 * Essa é a classe principal, onde temos todos os métodos para inserir,
 * remover, retornar os dados etc.
 */
class StackX {
       private int maxSize;        // tamanho do array (vetor)
       private Carta[] stackArray;
       private int top;            // topo da pilha
    //--------------------------------------------------------------
       public StackX(int s)         // construtor
          {
          maxSize = s;             // define tamanho do array
          stackArray = new Carta[maxSize];  // cria array
          top = -1;                // sem itens
          }
    //--------------------------------------------------------------
       public void push(Carta stackAux)    // coloca no topo da pilha
          {
          stackArray[++top] = stackAux;     // incrementa topo, insere item
          }
    //--------------------------------------------------------------
       public Carta pop()           // tira item do topo da pilha
          {
          return stackArray[top--];  // acessa o item, decrementa o topo
          }
    //--------------------------------------------------------------
       public Carta peek()          // retorna o item do topo da pilha
          {
          return stackArray[top];
          }
    //--------------------------------------------------------------
       public boolean isEmpty()    // retorna true se a pilha estiver vazia
          {
          return (top == -1);
          }
    //--------------------------------------------------------------
       public boolean isFull()     // retorna true se a pilha estiver cheia
          {
          return (top == maxSize-1);
          }
    public int getTop() {
        return top;
    }

}

Carta.java

//Carta.java
/**
 * Nessa classe estão todos os atributos do objeto
 */
public class Carta {

    private String nome; // nome do remetente
    private String logra; // nome do logradouro
    private int num; // numero do lugradourou

    public Carta(String nome,String logra,int num) {

        this.nome = nome;
        this.logra = logra;
        this.num = num;

    }

    public String displayCarta() {

        return ("Remetente: "+nome+
                "\nLogradouro: "+logra+", "+num);

    }

    public String getNome() {
        return nome;
    }

}

CartaApp.java

//CartaApp.java
//Aplicação que deve ser compilada
import javax.swing.JOptionPane;

/**
 * Faça um programa, em Java, que implemente as tarefas de
 * um entregador de correspondências postais. Leve em
 * consideração que as correspondências são empilhadas na
 * sacola e devem ser entregues levando-se sempre em
 * consideração a que encontra-se no topo. O programa
 * deve permitir:
 *
 * - Inserir correspondência na sacola (empilhar);
 * - Remover correspondência da sacola (desempilhar);
 * - Verificar se a sacola está cheia ou vazia;
 * - Verificar a próxima correspondência a ser entregue;
 * - Informar quantas correspondências existem na sacola.
 *
 * A pilha deverá armazenar objetos com os dados de cada correspondência
 *
 * @author Tiago Passos - http://tiagopassos.com)
 *
 */

public class CartaApp {

    public static void main(String[] args) {

        StackX Pilha = new StackX(Integer.parseInt(JOptionPane
                .showInputDialog("Quantas cartas deseja colocar na sacola:")));
        Carta temp; // Declara variavel temporaria

        int op = Integer.parseInt(JOptionPane.showInputDialog("MENU"
                + "\n1 - Inserir correspondência na sacola"
                + "\n2 - Remover correspondência da sacola"
                + "\n3 - Verificar se a sacola está cheia ou vazia"
                + "\n4 - Verificar a próxima correspondência a ser entregue"
                + "\n5 - Informar quantas correspondências existem na sacola"
                + "\n6 - Sair" + "\n\nDigite a opção desejada:"));

        while (op != 6){

            if (op == 1) {

                // INSERE
                String nome = JOptionPane
                        .showInputDialog("Digite o nome do remetente:");
                String logra = JOptionPane
                        .showInputDialog("Digite o nome do logradouro:");
                int num = Integer.parseInt(JOptionPane
                        .showInputDialog("Digite o numero:"));

                Carta cartaAux = new Carta(nome, logra, num);

                if (!Pilha.isFull()) {

                    Pilha.push(cartaAux);
                    JOptionPane.showMessageDialog(null,
                            "Carta colocada na sacola");

                } else {

                    JOptionPane.showMessageDialog(null,
                            "Desculpe. A sacola está cheia");

                }

            }

            else if (op == 2) {

                // REMOVE CORRESPONDECIA DA SACOLA
                if (!Pilha.isEmpty()) {

                    temp = Pilha.pop();
                    JOptionPane.showMessageDialog(null, "Carta removida:\n"
                            + temp.displayCarta());
                    temp.displayCarta();

                } else {

                    JOptionPane.showMessageDialog(null, "A sacola está vazia");

                }

            }

            else if (op == 3) {

                // REMOVE CORRESPONDECIA DA SACOLA
                if (Pilha.isEmpty()) {

                    JOptionPane.showMessageDialog(null, "A sacola está vazia");

                } else if (Pilha.isFull()) {

                    JOptionPane.showMessageDialog(null, "A sacola está cheia");

                } else {

                    int qtd_cartas = Pilha.getTop();
                    qtd_cartas++;
                    JOptionPane.showMessageDialog(null,
                            "A sacola não está cheia nem vazia. " + "Possui "
                                    + qtd_cartas + " carta(s)");

                }

            }

            else if (op == 4) {

                // VERIFICA A PROXIMA CARTA A SER ENTREGUE

                if (!Pilha.isEmpty()) { // VERIFICA SE A PILHA ESTA VAZIA

                    temp = Pilha.peek();
                    JOptionPane.showMessageDialog(null,
                            "Próxima carta a ser entregue:\n"
                                    + temp.displayCarta());

                } else {

                    JOptionPane.showMessageDialog(null,
                            "Não foi cadastrada nenhuma carta");

                }

            }

            else if (op == 5) {

                // INFORMA QUANTAS CARTAS EXISTEM NA SACOLA
                // getTop informa o ultimo indice inserido
                // A contagem começa de 0, por isso soma 1
                int qtd_cartas = Pilha.getTop();
                qtd_cartas++;
                JOptionPane.showMessageDialog(null,
                        "Quantidade de cartas na sacola: " + qtd_cartas);

            }

            op = Integer
                    .parseInt(JOptionPane
                            .showInputDialog("MENU"
                                    + "\n1 - Inserir correspondência na sacola"
                                    + "\n2 - Remover correspondência da sacola"
                                    + "\n3 - Verificar se a sacola está cheia ou vazia"
                                    + "\n4 - Verificar a próxima correspondência a ser entregue"
                                    + "\n5 - Informar quantas correspondências existem na sacola"
                                    + "\n6 - Sair"
                                    + "\n\nDigite a opção desejada:"));

            }

            JOptionPane.showMessageDialog(null, "Você saiu do programa");

        }

    }

  • Publicidade

  • Redes Sociais

    Facebook  Twitter
  • Estatísticas

    Page Views (desde março de 2010):

    Estatísticas detalhadas
  • Novidades por e-mail!

    Digite seu e-mail:


    Fique tranquilo. Seu e-mail não será usado para outros fins, e você poderá se descadastrar quando quizer.

    Eu!

    Tiago Passos
    Todo o conteúdo desse site esta licenciado sob a licença Creative Commons 3.0 (CC BY 3.0). Você pode copiar e modificar o conteúdo desde que cite o autor.
    iDream theme by Templates Next | Powered by WordPress