Documentação
  • Bem-vindo
  • Biblioteca Padrão
  • Características da linguagem
  • Comentários
  • Declaração e inicialização de variáveis
    • Inferência automática de tipos
  • Tipos de dados
    • Valores numéricos
    • Estruturas e Uniões de dados
      • Acessando os valores dos campos de estruturas
    • Strings e caracteres
      • Subtextos
      • Percorredores
    • Listas duplamente vinculadas
    • Conversão de tipos
  • Laços e Desvios condicionais
    • Lidando com vazamentos de memória em laços
  • Operadores
    • Precedência e Ordem de avaliação de operadores
  • Rotinas, Parâmetros e Funções
  • Trabalhando com Bibliotecas externas
  • Trabalhando com Instruções Hexadecimais
  • Callbacks
  • Introduzindo as palavras-chave "Preserve" e "original"
  • Usando a preposição "de"
  • Cores
  • Gráficos de Tartaruga (Turtle Graphics)
  • Algoritmos de Exemplo
    • Olá Mundo
    • A + B
    • Agenda Telefônica
    • Animação de sprites
    • Fatorial
    • 100 Portas
    • Dó Ré Mi Fá
    • API Win32 - GdipImageRotateFlip
    • Pintando como Claude Monet
    • Exemplo de interface
    • Evitando problemas de cintilação (Flickering)
    • Desenhando e pintando retângulos e caixas
    • Cofrinho Virtual
Fornecido por GitBook
Nesta página

Isto foi útil?

Editar no GitLab
  1. Algoritmos de Exemplo

100 Portas

Há 100 portas em uma fileira que estão todas inicialmente fechadas. Você faz 100 passagens pelas portas.

Na primeira vez, visite todas as portas e alterne a porta (se a porta estiver fechada, abra-a; se estiver aberta, feche-a).

Na segunda vez, visite apenas cada 2ª porta (porta nº 2, nº 4, nº 6, ...) e ative-a.

Na terceira vez, visite cada 3ª porta (porta nº 3, nº 6, nº 9, ...), etc., até visitar apenas a 100ª porta .

Tarefa

Responda à pergunta: em que estado estão as portas após a última passagem? Quais estão abertas, quais estão fechadas?

Uma passada é um número.
Uma porta é uma lista booleana.
Uma lista booleana é uma lista com um sinalizador.


Rotina para que se execute o programa:
  Inicialize os componentes.
  Passe através das portas usando 100 [portas] e 100 passadas.
  Feche o programa.

Rotina para que se passe através das portas usando um contagem e umas passadas:
  Crie umas portas usando a contagem.
  Itere.
    Adicione 1 para um contador.
    Se o contador for maior do que as passadas, pare.
    Vá através de as portas usando o contador e as passadas.
  Reitere.
  Transcreva o status de as portas.
  Destrua as portas.

Rotina para que se crie umas portas usando uma contagem:
  Itere.
    Adicione 1 para um contador.
    Se o contador for maior do que a contagem, retorne.
    Aloque memória para uma porta.
    Zere o sinalizador desta porta.
    Acrescente a porta para as portas.
  Reitere.  

Rotina para que se vá através de umas portas usando um número e umas passadas:
  Atribua 0 para um contador.
  Itere.
    Adicione o número para o contador.
    Se o contador for maior do que as passadas, retorne.
    Escolha uma porta desde as portas usando o número.
    Inverta o sinalizador desta porta.
  Reitere.

Rotina para que se escolha uma porta desde umas portas usando um número:
  Itere.
    Adicione 1 para um contador.
    Se o contador for maior do que o número, retorne.
    Obtenha a porta desde as portas.
    Se a porta for inexistente, retorne.
  Reitere.

Rotina para que se transcreva o status de umas portas:
  Itere.
    Incremente um contador.
    Obtenha uma porta desde as portas.
    Se a porta for inexistente, retorne.
    Se o sinalizador desta porta estiver ativo,
      Escreva "A porta " junto com o contador seguido de " está aberta." junto com o texto CRLF para STDOUT.\; Reitere.
  Reitere.
AnteriorFatorialPróximoDó Ré Mi Fá

Atualizado há 6 meses

Isto foi útil?