Notas de aula
- Lembrando que a linguagem Pascal é uma ferramenta de programação de computadores projetada para o ensino de lógica de programação, por isso ela reflete todas as estruturas básicas que um algoritmo computacional pode apresentar na sua estrutura.
Análise do código fonte disponível nessa página (link abaixo).
- Declaração program : é opcional, não tem função na lógica do algoritmo, apenas identifica o programa de uma forma inteligível em linguagem humana.
- Nesse algoritmo a declaração program está na linha 9.
- Declaração type : inicia uma seção onde o programador enuncia os tipos de dados especiais (tipos do usuário) que o algoritmo vai tratar durante a sua execução.
- Nesse algoritmo, essa seção type se extende das linhas 11 até 18.
- Declaração const : inicia uma seção onde o programador enuncia valores constantes (que não mudam de valor em todo escopo do algoritmo) que o algoritmo irá considerar desde a compilação até a execução.
- Ness algoritmo, essa seção const está na linha 20.
- Declaração var : inicia uma seção onde o programador enuncia os valores variáveis (que mudam de valor conforme o algoritmo é executado, e em virtude dessa execução) que o algoritmo irá considerar durante sua execução.
- Nesse algoritmo, essa seção var se extende pelas linhas 22, 23 e 24.
- Como as variáveis dessa seção var estão declaradas fora da declaração de qualquer procedimento ou função, elas tem escopo global (são válidas em todo o programa) e visibilidade até a declaração do fim do programa (end.)
- Em linguagens tipadas, como o Pascal, uma declaração var deve indicar um tipo de dado para a variável, e esse tipo deve ser básico ou previamente declarado:
- A variável a43num (linha 22) é declarada como um vetor de 24 posições do tipo placa que foi declarado na linha 11
- As variáveis control e linha (nas linhas 23 e 24) são declaradas como sendo do tipo básico integer (número inteiro)
- Uma seção inicia onde é declarada e se extende até a declaração de uma outra seção:
- A declaração type (linha 11) termina na...
- declarção const (linha 20) que termina na...
- declaração var (linha 22) que termina na...
- declaração procedure que aparece na linha 26.
- A declaração procedure (linha 26) inicia a série de declarações de um procedimento, identificado por mistura, que recebe uma placa (como declarado na linha 11) e um integer (número inteiro - tipo básico da linguagem).
- A declaração do procedimento mistura se extende da linha 26 até a linha 54;
- um procedimento (procedure) realiza uma série de operações no âmbito do algoritmo, mas não retorna nenhum valor ao ponto de chamada (quando uma instrução do programa chama a execução do procedimento);
- a contraparte de um procedure é uma function (função), o código distribuido no link abaixo não tem ainda nenhuma função declarada (as function serão discutidas em uma aula futura).
- Dentro da declaração da procedure mistura() nós temos as declarações de:
- parâmetros (input e index, dentro dos parenteses) que levam os valores que o procedimento vai receber e considerar quando for chamado;
- uma declaração var (nas linhas 29 e 30) que identifica as variáveis locais (output, p e i) que serão usadas na execução do procedimento
- essas variáveis só são visiveis dentro do procedimento, não faz mal se elas são identificadas com nomes de outras variáveis declaradas globalmente (mas as locais "escondem" as outras de mesmo nome - ou identificador).
- um bloco de comandos (começando no begin da linha 32 e terminando no end; da linha 54)
- blocos begin-end podem ser aninhados uns dentro de outros e indicam que todos os comandos dentro do bloco devem ser executados em sequência, de acordo com a lógica que eles expressam, como se fossem um único comando.
- blocos begin-end têm apenas uma entrada e uma saída.
- existem comando que quebram a execução de um bloco begin-end; eles poderão ser estudados oportunamente.
- as instruções da linha 33 até 53 embaralham as posições dos 4 dígitos da placa para definir as 24 permutações (o que é permutação) possíveis.
- Este procedimento é recursivo, ele chama a si mesmo para poder concluir o processamento que ele executa.
- Algoritmos recursivos serão discutidos numa próxima aula.
- A declaração do procedimento mistura se extende da linha 26 até a linha 54;
- As declarações const e procedure da linha 58 até a 64 se destinam a testar e verificar a lógica do algoritmo; elas serão comentadas no futuro.
- A partir da linha 70, a listagem declara as variáveis (var) e o bloco de instruções (begin-end.) principais do algoritmo.
- É a partir desse begin (linha 74) que o algoritmo começa a ser executado quando mandamos rodar o programa.
- As linhas de 76 até 79 preparam a primeira linha de a4num para que o procedure mistura, declarado na linha 26 e chamado na linha 79 seja executado e produza as 24 permutações possíveis com os 4 dígitos dados.
- As linhas de 83 até 90 apenas mostram na tela as 24 permutações feitas na procedure mistura. Esse trecho do código será removido na próxima versão de desenvolvimento do programa numbers.
Escopo e visibilidade das declarações em um algoritmo
- Uma declaração feita em um algoritmo, de qualquer tipo, tem um escopo que determina onde ela é válida dentro do algoritmo.
- Declarações como as feitas nas linhas de 11 até 24, isso é, fora de qualquer procedure, function ou bloco, tem escopo global e podem ser usadas em qualquer ponto do algoritmo (após a declaração).
- Declarações como as das linhas 29 e 30, isso é, dentro da declaração da procedure mistura() tem escopo local e só serão válidas dentro deste procedimento (elas não são válidas fora do procedure onde foram declaradas).
- Uma declaração, respeitando o escopo de onde ela aparece no algoritmo, será visível após sua declaração.
- A declaração de uma variável (var) local com o mesmo nome de outra variável global "esconde" esta última dentro do escopo local; isso é, quando usamos um identificador declarado localmente com o mesmo nome de um identificador declarado globalmente, estaremos nos referindo ao objeto declarado localmente.
- Usar um identificador, declarado dentro de um procedure, e que não existe fora desse procedure, mesmo após a sua declaração no algoritmo, irá produzir um erro devido ao escopo do identificador ser localizado em uma área diferente do algoritmo.
Falha na gravação da aula
- O vídeo produzido durante a aula ficou sem som (não sei por que) então ele é inútil para nós. Vamos contar apenas com as explicações dessa página.
Atividade
- Digite este algoritmo para usar na próxima aula (em 17 de março de 2026).
- Ele deverá ser enviado para avaliação a partir do dia 18 de março.
Comentários