Archive for setembro, 2010

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");

        }

    }

Instalar Fontes do Windows no Ubuntu 10.04

Por um motivo ou outro você pode precisar usar uma fonte como Times New Roman ou Arial – talvez um trabalho acadêmico – e essas fontes não estão disponíveis originalmente no Ubuntu 10.04. Porém, com apenas um comando é possível instalá-las.

As fontes que vêm no pacote são:

  • Andale Mono
  • Arial Black
  • Arial (Bold, Italic, Bold Italic)
  • Comic Sans MS (Bold)
  • Courier New (Bold, Italic, Bold Italic)
  • Georgia (Bold, Italic, Bold Italic)
  • Impact
  • Times New Roman (Bold, Italic, Bold Italic)
  • Trebuchet (Bold, Italic, Bold Italic)
  • Verdana (Bold, Italic, Bold Italic)
  • Webdings

Para instalar, abra o Terminal (Aplicativos -> Acessórios -> Terminal) e digite o seguinte:

sudo apt-get install msttcorefonts

Digite sua senha de root, e pronto!

PS: Talvez seja necessário deslogar e logar novamente para que as fontes estejam disponíveis para uso.


Configurar Vídeo no Lenovo G450 2949-79U com Linux Debian Lenny

Instalei o Debian Lenny (5.5) 64-bit no meu notebook Lenovo G450 2949-79U que possui placa de vídeo Intel Graphics Media Accelerator (GMA) 4500M e logo de cara tive um pequeno problema com a resolução: só carregava 1024 x 768, sendo que o monitor é widescreen de 14″. Impossível de usar.

Dei uma pesquisada e encontrei uma solução bem simples. Talvez sirva pra outros modelos de notebook que usem a placa de vídeo Intel GMA 4500M. Para resolver, faça o seguinte:

Abra o Terminal (Aplicações/Acessórios/Terminal). Digite su para entrar como root. Depois abra o arquivo xorg.conf com o seguinte comando:

gedit /etc/X11/xorg.conf

Edite a seguinte área do arquivo:

Section "Device"
 Identifier    "Configured Video Device"

Para que fique da seguinte forma:

Section "Device"
 Identifier    "Configured Video Device"
 Driver          "intel"

Reinicie, e pronto!

PS: É recomendável fazer uma cópia do arquivo antes de salvar. Se der algum problema, você tem como recuperar! 🙂


O som dos algorítmos de ordenação

O som dos algorítmos de ordenação

Vídeo interessante que mostra uma representação sonora dos diferentes tipos de ordenação.

Fonte: http://eupodiatamatando.com/2010/08/19/som-da-ordenacao/


Mosaico dos sites mais acessados na internet

O site nmap cria um mosaico a partir dos sites mais acessados na internet. O sistema criado utiliza os favicons (ícones que aparecem ao lado da barra de endereços) para demonstrar o “tamanho” de cada site. Os dados que foram utilizados foram os fornecidos pelo site Alexa.


Incrível filme em stop-motion feito com o Nokia N8

O lançamento do aguardado Nokia N8 estava se aproximando e a gigante finlandesa, para promover sua chegada ao mercado, criou um belíssimo vídeo utilizando a técnica de stop-motion a partir da câmera do aparelho.

No vídeo, entitulado “Dot”, o Nokia N8 é transformado em um poderoso microscópio com o CellScope acoplado à câmera do aparelho para a filmagem. A bonequinha protagonista do vídeo mede apenas 9 mm.

Veja também o making of:

Fonte: http://www.tudocelular.com/Curiosidade/noticias/n23279/filme-stop-motion-nokia-n8.html


Passar uma string pela URL com PHP

As vezes você precisa passar uma frase com acentos, espaços e pontuação, mas não pode simplesmente colocar esses caracteres na URL, porque pode dar alguns erros em alguns navegadores (browsers).

No PHP existe uma função que faz essa conversão. Chama-se urlencode. E você pode usar dessa forma:

<?php echo urlencode("Este é o texto que você quer converter!"); ?>

Ele vai retornar o seguinte:

Este+%C3%A9+o+texto+que+voc%C3%AA+quer+converter%21

Dessa forma você pode passar a string pela URL sem problemas.

Se você precisar fazer o contrário (converter o texto codificado para o texto normal), você pode utilizar a função urldecode. Assim:


Acessando máquina rodando Windows com o Linux Ubuntu 9.04

No caso de você precisar copiar arquivos que estão em uma máquina rodando Windows (no caso foi utilizado o Windows 7, mas deve funcionar no XP e no Vista também), através do Ubuntu, os dois computadores devem estar na mesma faixa de IP. Por exemplo: um computador não pode ter IP 10.1.1.1 e outro 192.168.254.1. Mas você pode colocar 192.168.254.1 pra um e 192.168.254.2 pra outro.

Pra garantir que os dois se acessarem, modifique o IP. Se um tiver 192.168.254.1, é interessante que o outro tenha um IP como 192.168.254.2, ou 192.168.254.10 etc.

Se os dois não estiverem na mesma faixa, você pode modificar o IP do computador rodando Ubuntu da seguinte forma:

Abra o Terminal (Aplicativos / Acessórios / Terminal) e digite:

sudo ifconfig

eth0 = Primeira placa de rede
eth1 = Segunda placa de rede
wlan0 = Placa Wireless

Se você quizer modificar a eth0, digite o seguinte:

ifconfig eth0 down

Depois modifique o IP dela da seguinte forma:

ifconfig eth0 192.168.254.100 netmask 255.255.255.0 up

Se você não souber qual o ip da máquina que roda Windows, abra o prompt de comando (cmd) e digite ipcofig.

O endereço é o que está na linha “Endereço IPv4”.

Pra estar se as máquinas estão se enxergando, você pode dar tanto no Terminal do Linux, quanto no Prompt do Windows um ping na outra máquina. Ex.: ping 192.168.254.100

Pronto. Agora você pode acessar a máquina windows pelo ambiente gráfico do Ubuntu. Vá em Locais, Pasta Pessoal. Clique em Rede, Rede Windows, Escolha o grupo, e máquina deverá estar visível. Quando pedir uma senha, digite sua senha de usuário do Windows.


Tetris e Pacman humanos!

Uma câmera, 111 pessoas e muitas camisetas coloridas. O vídeo abaixo faz parte do projeto “Game Over” do artista Guillaume Reymond que transforma pessoas em pixels e personagens de jogos.

O projeto, com foco em games dos anos 1980, recria marcos do entretenimento eletrônico com vídeos feitos em stop motion.

Para produzir a filmagem abaixo, os participantes gravaram durante quatro horas seguidas em um cinema na Suíça.


Como criar uma conta no Dropbox

Imagine que você acessa diariamente seu desktop, seu notebook, o computador da sua empresa e seu Smart Phone (iPhone, celular com Android ou BlackBerry) ou iPad. Organizar seus arquivos deve ser um problema, certo? Agora imagine que você está viajando e percebeu que precisa urgentemente de um arquivo que está no seu computador, em casa, mas não tem ninguém em casa. O que você faz?

Agora imagine uma terceira situação: deu problema em seu computador, e tinha um arquivo importantíssimo que estava só nele e você perdeu. Como se resolve isso?

O Dropbox é um sistema multi-plataforma (funciona em Linux, Windows, Mac, iPad e Smart Phones) e com ele você pode resolver todos esses problemas. Você pode deixar todos os seus arquivos na nuvem. Mas como funciona isso na prática?

Pra que o Dropbox funcione, você tem que instalar ele em cada computador ou Smart Phone que deseja ter os arquivos sincronizados. A partir do momento que você instala, uma pasta é criada com o nome de Dropbox. No Windows ela ficará na pasta Meus Documentos. No Linux, na sua pasta home.

A partir dalí, tudo que você jogar nessa pasta será mandado automaticamente para o servidor do Dropbox, e assim que esse arquivo tiver sido enviado, todos os outros dispositivos onde você instalou o Dropbox começarão a baixar esse arquivo. Tudo automaticamente. Legal né?

Dessa forma você tem seus arquivos importantes sempre compartilhados entre todos os seus dispositivos!

O serviço disponibiliza gratuitamente 2GB para você armzenar seus arquivos, mas se você precisar de mais espaço, existem contas pagas de 50GB e 100GB. Mas tem um presentinho do Dropbox pra você!

Quando você se inscreve, você recebe um link que pode enviar para seus amigos. Cada vez que alguem se inscreve e começa a usar o Dropbox através desse link, você ganha 250MB. Sua conta pode ficar com até 10GB! Se inscrevendo por esse link, você já ganha 250MB.

Informação adicionada em 06/06/2011: Depois de utilizar o Dropbox por alguns anos, hoje estou utilizando o SpiderOak.com. Clique aqui e saiba o motivo. Se mesmo assim você quer usar o Dropbox, siga os passos abaixo para criar sua conta.

Abaixo vou mostrar telas de como se inscrever no Dropbox. Se você não tem dificuldades com inglês, o site é bastante intuitivo. Basta clicar aqui.

 

Se você se interessou pela receita de bolo de caneca que eu esqueci de tirar da minha barra de favoritos antes de tirar os prints da tela, ela tá aqui: http://comidinhasdamiss.blogspot.com/2008/01/bolo-da-caneca-3-minutos.html 😛


  • 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