Implementando resolução do problema das 100 portas

Hoje mostrarei como implementar a resolução do problema das 100 portas em Visual Basic .NET. Enquanto navegava na grande rede de computadores internet, encontrei esse problema e achei que seria interessante mostrá-lo aqui.

O que é o problema das 100 portas

O problema das 100 portas cria a seguinte situação: você tem 100 portas em linha e todas as portas estão inicialmente fechadas. Você deve passar por cada porta 100 vezes. A cada vez que você passa pela porta, você deve fechá-la se estiver aberta, ou abri-la se estiver fechada. Na primeira vez você deve passar por todas as portas. Na segunda vez deve passar somente nas portas que são múltiplo de 2 (2, 4, 6, …). Na terceira vez, somente pelas portas que são múltiplos de 3 (3, 6, 9, …). Faça isso até a porta 100.

A pergunta: Ao final, quando passar por todas as portas, quais estarão abertas e quais estarão fechadas?

Resolvendo o problema

Nesse primeiro modelo que faremos para resolver o problema, levaremos o enunciado ao pé da letra e passaremos por todas as portas.

Para os exemplos, utilizarei uma Console Application do Visual Basic .NET.

Resolvendo com um For dentro de outro

    Sub Main()
        Dim portas(100) As Boolean

        For pass = 1 To 100
            For porta = pass - 1 To 99 Step pass
                portas(porta) = Not portas(porta)
            Next
        Next

        For porta = 0 To 99
            Console.WriteLine("Porta " & (porta + 1) & " está " & If(portas(porta), "Aberta", "Fechada"))
        Next
        Console.Read()
    End Sub

No código acima, temos a situação onde o código segue o que o enunciado pede.

Primeiro fazemos um laço de repetição For que passa por todas as portas e dentro do laço fazemos outro, que passa somente pelos múltiplos dessa porta; isso é possível porque cada interação do segundo For, “pula” os número das portas com o auxilio da variável pass, que é o número da porta do primeiro laço.

Dentro do segundo laço, falamos que cada porta deve ficar no status contrário ao que está, executando o código = Not portas(door).
No final fazemos um laço exibindo o status da porta ao fim das iterações. Aqui temos um trecho interessante, o condicional If está montado em linha (If(portas(porta), "Aberta", "Fechada")). Essa é uma ótima maneira de mostrarmos um valor mesmo que haja uma condição para a exibição. Essa forma segue a seguinte estrutura:

If (condição booleana, valor verdadeiro, valor falso)

Resolvendo o problema de outra forma

Quadrado PerfeitoNo próximo exemplo, o código é um pouco menor, porque só será necessário um laço de repetição. Dessa vez é utilizada a matemática para resolver o problema.

Segundo discursarão sobre a resolução do problema (ver fonte ao final do texto), somente as portas com números que são quadrados perfeitos ficam abertas.

Quadrado perfeito em matemática, é um número inteiro não negativo que pode ser expresso como o quadrado de um outro número inteiro.

Fonte: Wikipédia

Dito isso, vamos ao código:

    Sub Main()
        Dim portas(100) As Boolean

        For i = 1 To 10
            portas(i ^ 2 - 1) = True
        Next
        For porta = 0 To 99
            Console.WriteLine("Porta " & (porta + 1) & " está " & If(portas(porta), "Aberta", "Fechada"))
        Next

        Console.ReadLine()
    End Sub

Para conseguirmos somente os quadrados perfeitos, utilizamos a expressão i ^ 2, onde i é o número da iteração e o símbolo ^ (circunflexo) indica que o número (i) está sendo elevado a potencia (2). Seria o equivalente a i2.

Fazemos isso dentro do laço que vai de 1 a 10, porque a porta máxima é a 100 e 102. = 100. Para sabermos qual porta do array portas será aberta, devemos passar o índice do array, por isso a expressão i ^ 2 – 1. Como dito antes, sabemos o quadrado perfeito com o i ^2, o -1 da expressão é para ‘acertar’ o cálculo para o array que é baseado em zero (inicia em zero). Dessa forma quando i = 2, o resultado do quadrado seria 4, mas na verdade a porta 4 está na posição 3 do array.

Por hoje é só galera, espero que tenha gostado e entendido.

Fonte sobre problema das 100 portas.

Desenvolvendo um aplicativo para Windows 8

O que pensei em fazer aqui, é trazer o que eu precisei para desenvolver um aplicativo para Windows 8[bb]. Como nunca desenvolvi algo para esse plataforma utilizando os moldes estabelecidos pela Microsoft, achei que seria bacana compartilhar o que estou aprendendo.

A escolha da plataforma

Como já desenvolvo para Windows, fiquei curioso quanto a criação de aplicativo para o novo sistema da Microsoft. Apesar de poder utilizar os conhecimentos que tenho em desenvolvimento de software, percebi de cara, que tinha que mudar um pouco a forma de pensar. Não o pensamento lógico para criação do código, mas como a aplicação se comporta perante o sistema operacional e como o usuário interage. Isso inclusive fica bem claro nas documentações iniciais que a Microsoft disponibiliza para quem está começando a desenvolver para Windows 8.

Modelo de app rodando em simulador do Windows 8

Os passos iniciais que segui para criar o aplicativo para Windows 8

A primeira coisa que surgiu, foi a vontade de criar um aplicativo sem saber o que iria criar. Em seguida pensei o que eu poderia criar; sobre o que seria o aplicativo.

O aplicativo consiste em acessar os dados de um serviço via API* disponibilizada por este e exibir os dados ao usuário, permitindo que ele interaja com o serviço de forma amigável por meio de interface baseada no Windows 8.
Logo em seguida defini que linguagem de programação utilizaria. Escolhi o Javascript, uma nova maneira para criar aplicativos para Windows (desktop). Utilizando juntamente com o CSS e o HTML 5, é possível criar aplicativos que rodam sobre uma base de navegador (IE 10), mas que para o usuário, não tem diferença entre este ou um criado em VB .NET ou C#. Escolhi o Javascript porque a empresa do serviço que acesso, já disponibiliza uma SDK** para facilitar o desenvolvimento com essa linguagem.

Na próxima postagem, vou abordar a parte que estudei para começar o desenvolvimento do aplicativo.

* API (Application Programming Interface) é formada por uma série de funções acessíveis somente por programação, e que permitem utilizar características do software (Wikipédia). Imagine uma caixa fechada, simbolizando um serviço, e para ter acesso ao que está dentro da caixa, você entrega um bilhete dizendo o que você quer para alguém. Essa pessoa sabe exatamente como estão as coisas dentro da caixa, então, ela pega o que você pediu no bilhete, e te entrega; essa pessoa é a API (Eu).

* SDK, é a sigla de Software Development Kit. São disponibilizados por empresas ou projectos opensource para que programadores externos tenham uma melhor integração com o software proposto (Wikipédia).

[ASP .NET] Instalando e utilizando Ajax Toolkit

Veja a seguir, como instalar o Ajax Toolkit no Visual Studio 2010[bb] e como utilizar o que há de mais interessante nesse poderoso conjunto de controles.

Com Ajax Toolkit é possível, por exemplo, adicionar de forma muito rápida calendários, upload de arquivo de foma dinâmica e até mesmo implementar a exibição de foto via gravatar, somente arrastando um objeto da toolbar.

Instalando o Ajax Toolkit

A instalação dos controles na toolbar do Visual Studio 2010 é tão simples quanto sua utilização. São 3 passos simples.

  1. Faça o download na página do projeto no codeplex (verifique a versão do .NET Framework) e descompacte o arquivo .zip.
  2. Com o Visual Studio aberto, clique como botão direito do mouse sobre a toolbar e clique no menu “Add Tab”, como mostra a imagem abaixo. Dê um nome amigável como “AjaxToolkit”
  3. Adicionar seção a toolbarAgora clique com o botão direito do mouse sobre a seção que criou na toolbar e clique no menu “Choose Items…”. Na janela que se abrir confira se a aba “.NET Framework Components” está seleciona, clique em “Browse…”, encontre o local onde extraiu os arquivos que baixou e selecione o arquivo “AjaxControlToolkit.dll”; por último clique em “Ok”. Pronto, agora todos os componentes do Ajax Toolkit estão na seção que você criou.Adicionando controle do Ajax Toolkit

Utilizando controles do Ajax Toolkit

Se você criou alguma página em ASP .NET utilizando o VS 2010, verá que o funcionamento para os novos controles será o mesmo. Basta arrastar um item da toolbar para a página e configurá-lo da maneira que desejar.

Abaixo mostro a utilização de dos controle do Ajax Toolkit: ConfirmButtonExtender e Gravatar. Veja o código abaixo.

<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Default.aspx.vb" Inherits="_Default" %>

<%@ Register assembly="AjaxControlToolkit" namespace="AjaxControlToolkit" tagprefix="asp" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
        <asp:Gravatar ID="Gravatar1" runat="server" Email="EMAIL QUE DESEJA EXIBIR IMAGEM" />

        <asp:Button ID="Button1" runat="server" Text="Button" />
        <asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>
        <asp:ConfirmButtonExtender ID="ConfirmButtonExtender1" runat="server" ConfirmText="Continuar com a ação?" TargetControlID="Button1"></asp:ConfirmButtonExtender>
    </form>
</body>
</html>

No exemplo acima, somente adicionei os controles, sem que estes executem alguma ação.

O primeiro controle, o asp:Gravatar, perceba que a implementação é muito fácil, sendo necessário somente, informar qual o Email que está vinculado ao Gravatar, que o avatar será exibido. Simples assim!
O segundo e meu preferido, asp:ConfirmButtonExtender, vinculado à um asp:Button, cria uma janela de confirmação quando o usuário clica sobre o botão. Chamo a atenção para as duas principais propriedades desse objeto:

  • TargetControlID: indica com qual o botão que o controle será vinculado
  • ConfirmText: qual mensagem será exibida ao usuário na janela de confirmação

Observação: o objeto “asp:ScriptManager” é necessário para o funcionamento do “ConfirmButtonExtender”.

Veja o resultado da página que criamos (para o teste, adicionei o meu email na propriedade doasp:Gravatar).

Algo que deve ser observado, é a chamada a biblioteca do Ajax Toolkit no inicio da página:

<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="asp" %>

Repare que na propriedade TagPrefix foi colado “asp”, isso permite que os controles sejam declarados como “<asp:”. Caso não queira colocar essa declaração em cada página do site, altere o arquivo “web.config” do site e adicione as tags conforme exemplo. Observe que no exemplo abaixo não estão todas as tags que normalmente fazem parte no arquivo, as retirei para evidenciar as linhas referentes ao Ajax Toolkit. No seu arquivo somente adicione as linhas mostradas.

<configuration>
	<system.web>
  <compilation>
    <assemblies>
      <add assembly="AjaxControlToolkit, Version=3.5.40412.0, Culture=neutral, PublicKeyToken=28f01b0e84b6d53e"/>
    </assemblies>
  </compilation>
  <pages>
    <controls>
      <add assembly="AjaxControlToolkit" namespace="AjaxControlToolkit" tagPrefix="asp" />
    </controls>
  </pages>
	</system.web>
</configuration>

Muita atenção na propriedade “Version“, confira qual o versão do Ajax Toolkit que você baixou.

E por hoje é só galera. Espero que tenham ajudado!

Aniversário do Site!

Não exatamente hoje, mas no mês de Julho, o  HinfOS faz aniversário. E este ano ele faz…

5 ANOS!

Isso mesmo, o site está completando 5 anos. Desde o  primeiro post em meados de 2008 ainda no WordPress.com, foram muitas indas e vindas, sendo que no ano passado (2012), foi o ano mais triste para o site, foram apenas 5 posts feitos nos primeiro meses do ano. Infelizmente devido a faculdade (TCC sinistro cara) não pude fazer posts.

Primeiro visual do site

Primeiro visual do site

Entretanto, nem tudo é tristeza. Em Fevereiro de 2010 o HinfOS ganhou o domínio .com. Consegui finalmente (na época entrei no meu primeiro emprego – leia-se estágio) dar um RG para o site. Nesse post lanço a conquista do domínio e trago o novo layout, que na época achava o máximo.

Crie o blog em meados de 2008 porque na época estava no final do primeiro semestre do curso de Técnico em Informática. (É necessário colocar aqui, que não fazia ideia do que seria o curso quando entrei.) Fiquei maluco com o fato de estar escrevendo um programa que poderia rodar nas máquinas. Estava de certa forma, conversando com o computador. Para min, isso ainda  é o máximo! Porém, o conteúdo online para quem estava começando, como era meu caso e dos colegas de classe, não era de tão fácil entendimento, e por isso, resolvi criar um local onde poderia compartilhar o que estava aprendendo. Me lembro que assim que tinha aula de programação, chegava em casa treinava e já imaginava o que faria para postar no blog.

Aparência do site em 2011

Aparência do site em 2011

Nesse tempo, algumas coisas me chamaram a atenção. Por exemplo, usuário de outros países que falam a língua portuguesa, já recebi mensagens de Angola e as visitas de Portugal e Moçambique são consideráveis. Outra coisas, certa vez, um visitante do site precisava de ajuda (se não me engano no trabalho) e por tê-lo ajudado ele fez questão de me enviar um HD. Acredito que o nome dele era Cezar, e esse foi o primeiro retorno que o HinfOS me deu, esse HD está sendo utilizado até hoje inclusive.

Aparência do site em 2011

Aparência do site em 2011

E com o intuito de ajudar aqueles que estão iniciando, o HinfOS continua até hoje, gratuito e feito com um cuidado de quem já procurou alguma coisa e esbarrou em soluções mega elaboradas para algo simples. São aproximadamente 20 vídeo aulas exclusivas para o HinfOS e mais algumas que estão em outros sites que colaborei.

É isso galera, espero que por mais 5 anos possa trazer conteúdo original e segundo os comentários, de qualidade. Até a próxima!

Novidades do Windows 8.1

No mês passado (Junho), a Microsoft liberou a versão beta do Windows 8.1, a mais nova versão do Windows 8. Essa versão está liberada no site da empresa na forma de ISO, podendo ser instalada diretamente, ou como instalação via Loja do Windows 8. A última, só é possível após a instalação de uma atualização. Abaixo o link para as duas versões.

No caso do ISO, é necessário ter algum conhecimento na instalação de sistemas operacionais. Caso tenha instalado algum outro S.O. não terá problemas para tal tarefa. Já a versão instalada vida Loja do Windows é bem mais fácil, porém, demorada. Bem demorada!

Lembrando que como essa é uma versão de teste, é altamente recomendável que a instale em uma máquina virtual, ou em um computador secundário. Não faça como eu! 🙂

Novidades!

Nessa versão de teste, a Microsoft trouxe algumas coisas que gostaria de dividir em duas categorias: Bem vinda e Tanto faz. A primeira abrange a maioria das coisas, já a segunda, lista o que Paul poderia ter guardado os recursos.

Bem vinda

Nova versão do aplicativo de Música, que também pode ser chamado de Xbox Music. Agora o aplicativo leva o nome do servido de música via stream da Microsoft. Mas, não foi somente o nome do aplicativo que mudou, a cara do aplicativo também mudou, ficou um pouco mais organizado e a função SmartDJ agora se chama Rádio.

Novo aplicativo de Música do Windows 8.1

Agora as multitarefas podem ser feitas com a tela divida na proporção que você quiser. Hoje, no Windows 8, só é possível utiliza a proporção 1 /3 para um aplicativo e 2 / 3 para outra. Ainda há notícias de que será possível adicionar até quatro aplicações dividindo a tela, porém na versão que estou utilizando, esta opção não está habilitada.

Divisão de tela no Windows 8.1

Nova pesquisa. Para min uma das grandes mudanças e mais bem vinda, foi a alteração na forma como a pesquisa funciona. A partir de agora, os resultados aparecem logo abaixo da caixa de pesquisa, sem ir para uma tela onde eram exibidos os resultados e ocultava o que estava sendo feito. Como podem ver na imagem abaixo, também foi alterado o que é mostrado nos resultados. Diferente na versão anterior, todos os resultados são exibidos, Configurações, Arquivos e Aplicativos dividem a lista de resultado.

Nova Pesquisa do Windows 8.1

Tanto Faz

Botão Iniciar. Uma das coisas que as pessoas estranharam no Windows 8, foi a falta do tão famoso botão iniciar, que dava acesso aos programas e tudo mais nas versões anteriores do Windows. No Windows 8.1 eles voltaram o botão, porém a única coisa que ele faz, além de ocupar espaço na barra de tarefas, é levar para a tela principal do sistema os aplicativos estão em forma de tiles. Para não falarem que sou maldoso, quando pressionado com o botão direito do mouse, ele exibe um menu com opções interessantes.
Menu Iniciar Windows 8.1
No Windows 8.1 é possível adicionar título no Iniciar. Para algumas pessoas isso pareceu bacana, porém, é realmente necessário? Não vejo como isso pode ajudar no dia a dia, já que os tiles já são organizados pelo usuário, de uma forma que os mais utilizados estavam sempre a mão enquanto os outros ficam em segundo plano.
Título das seções no Windows 8.1

Vale menção

Os tiles agora tem três tamanhos, assim como nos Windows Phone 7.8 e 8. Além do médio e do largo, fora adicionado o tamanho pequeno, isso adiciona novas possibilidades para organizar os aplicativos.

Acesso fácil a todos os aplicativos, uma coisa bem simples, mas que ajuda bastante. O acesso a área ondem são exibidos todos os aplicativos instalados, pode ser feito por uma seta para baixo exibida no Iniciar.

Novos aplicativos. Como pode ser visto na imagem que mostro a nova forma de redimensionamento das aplicações, há novos aplicativos no Windows 8.1, além da nova calculadora e do alarme, mostrados na imagem, foi adicionado também, um aplicativo para gravação de voz, entre outros.

A Microsoft ouve os usuários

Essa nova versão do Windows como dito, ainda está em fase de teste, ou seja, pode vir muita coisa por ai, como outras podem não estar na versão definitiva. De qualquer maneira, a Microsoft, mostrou que ouve os usuários, já que algumas mudanças vieram graças a queixas de quem utiliza o Windows 8.

Continuarei utilizando o Windows 8.1, já que contrariando as sugestões por ser tratar de uma versão de teste, instalei no meu notebook que também utilizo normalmente (seja dito que bem menos que no desktop). Então, havendo novas descobertas dessa nova versão, trago as novidades aqui no HinfOS, seja como post ou vídeo.