Marcos Tanaka

Gráfico que mostra a probabilidade de duas pessoas fazerem aniversário no mesmo dia, conforme a quantidade de pessoas aumenta.
Fonte e mais informações (cálculos, rsrs): http://pt.wikipedia.org/wiki/Paradoxo_do_anivers%C3%A1rio

Gráfico que mostra a probabilidade de duas pessoas fazerem aniversário no mesmo dia, conforme a quantidade de pessoas aumenta.

Fonte e mais informações (cálculos, rsrs): http://pt.wikipedia.org/wiki/Paradoxo_do_anivers%C3%A1rio

Fechem a internet!

Junta e ordena duas listas ligadas varrendo-as apenas uma vez

Hoje estava tentando resolver um exercício que diz o seguinte:

Sejam A e B duas listas listas ligadas. Faça um algoritmo que receba A e B e devolva uma lista ligada C, ordenada, contendo os elementos de A e B (obs: tente fazer o exercício varrendo A e B somente uma vez).

Se estivesse trabalhando com vetores, isso seria fácil de fazer, porém, como são listas ligadas, a coisa fica um pouco mais complicada.

Depois de várias tentativas, consegui criar um algoritmo com dois procedimentos: um junta a lista A com a lista B (em uma lista C) e passa essa lista C para o segundo, que a ordena:

O algoritmo

Abaixo, temos a ilustração do que está acontecendo com algumas partes importantes do procedimento Junta Listas:

JuntaListas após a linha 2

JuntaListas - após linha 9

Do mesmo modo, abaixo estão algumas partes importantes do procedimento OrdenaLista:

OrdenaLista - após linha 17

OrdenaLista - após linha 24

No término da execução, a lista estará assim:

OrdenaLista - término da execução

anslmv:

♪ ooonlyyy yooooooooou… ♫

anslmv:

♪ ooonlyyy yooooooooou… ♫

(Source: 7hundredand77)

Criando aplicações em 64 bits no VB

Uso o Microsoft Visual Basic 2010 Express e essa versão não nos dá a opção de compilar o projeto para rodar em 64 bits. Pesquisando no Visual Studio Developer Center, encontrei uma maneira bem simples de como fazer isso:

  1. entre no diretório do projeto desejado e encontre o arquivo com a extensão .vbproj (abra-o no bloco de notas);
  2. dentro da tag <PropertyGroup>, insira a seguinte linha:

    <PlatformTarget>x64</PlatformTarget>
  3. salve o arquivo, abra o projeto no Microsoft Visual Basic 2010 Express e mande compilar.

Simples, não? :D

Comparando DirectoryInfo com String usando Like

Estou criando um aplicativo que insere em uma ListBox as pastas que estão dentro de uma pasta indicada pelo usuário (será usado para gerar arquivos de configuração dentro de cada pasta). Porém, queria que ele mostrasse nessa ListBox apenas pastas cujo nome tivesse a palavra “Pacotes”.

Antes de inserir no ListBox, tentei comparar uma variável do tipo DirectoryInfo com uma string usando o operador Like, porém sempre recebia mensagens de erro ao executar o programa. Para resolver, adicionei um .Name na variável que era do tipo DirectoryInfo:

Dim di As New DirectoryInfo(FolderBrowserDialog1.SelectedPath)
Dim diArr As DirectoryInfo() = di.GetDirectories()
Dim dri As DirectoryInfo
For Each dri In diArr
   If dri.Name Like “Pacotes” Then
      ListBox1.Items.Add(dri)
   End If
Next dri

Agora o problema é que ele só lista a pasta se o seu nome for exatamente “Pacotes”. Vou verificar o motivo e coloco aqui qual solução encontrei :D

[ATUALIZAÇÃO]

Consegui resolver o problema! Bastou adicionar um * depois de pacotes (“Pacotes*”). Assim o VB ignora tudo o que vêm depois de “Pacotes”, pegando exatamente as pastas que eu quero!

Removendo Environment.NewLine de uma string

No aplicativo em VB que estou escrevendo, em certo momento leio um arquivo .txt que contém uma palavra em cada linha. A seguir, exibo este conteúdo em um ListBox, onde cada linha será uma opção selecionável. O nome da opção escolhida pelo usuário (que na verdade é o que estava escrito em determinada linha do .txt) será passado para uma função.

O problema que acontecia é que, ao ler a linha do arquivo .txt e adicioná-la no ListBox, adicionei no final de cada linha a propriedade Environment.NewLine, para fazer a quebra de linha:

For Each line As String In System.IO.File.ReadLines(“C:\arquivo.txt”)
    ListBox1.Items.Add(line + Environment.NewLine)
Next line

Consequentemente, essa quebra de linha também estava sendo passada para a função, o que ocasionava um erro.

Para resolver, declarei duas variáveis, versao e versaosemcrlf. A primeira armazena o conteúdo da linha selecionada pelo usuário (a opção) e a segunda armazena a mesma coisa, porém removendo o Environment.NewLine:

Dim versao As String
versao = ListBox1.SelectedItem
Dim versaosemcrlf As String
versaosemcrlf = versao.Replace(Environment.NewLine, String.Empty)

Note que substituo o Environment.NewLine por vazio (String.Empty).

Assim, o problema foi resolvido :)

anslmv:

Eureka Tower Car Park Signage, Melbourne, Australia.

“’[…] Acho que precisamos de algum plano para provar que, embora Jobs tenha nos pegado de supresa de novo, podemos nos mobilizar rapidamente e tanto nos equiparar como fazer coisa melhor.’ Era uma espantosa confissão privada: a Microsoft havia sido novamente superada e pega de surpresa, e tentaria novamente se recuperar copiando a Apple. Mas, tal como a Sony, a Microsoft nunca faria isso acontecer, mesmo depois que Jobs mostrou o caminho.”
— (ISAACSON, 2011, p. 422,423)