Pular para o conteúdo principal
CTIT 2025

Navegação principal

  • Início
  • ALG 2026
  • RC2 2026
  • PMM 2026
  • Antes disso...
Menu de conta de usuário
  • Entrar

Trilha de navegação

  1. Início

ALG 2026-04-13

Por evandro, 13 Abril, 2026
  • Efetue login ou registre-se para postar comentários

Links de passagem do livro para ALG 2026-04-13

  • ALG 2026-04-07
  • Para cima
  • ALG 2026-04-28

Notas de aula

  • Essa análise é feita com base nos arquivos (do professor):
    • numbers.pas (versão 0.0) : define a estrutura geral do algoritmo; é expandido para a forma do arquivo numbers05.pas com a inclusão dos 3 arquivos numbers02{a, b e c}.pas
    • o arquivo numbers02a.pas já foi analisado na aula anterior
    • numbers02b.pas : define as lógicas de execução e controle de testes de igualdade nas provas definidas pela permutação; 42 linhas, da linha 166 até 207 do arquivo numbers05.pas
    • numbers02c.pas : define a lógica de preparação e controle das provas para testes de igualdades das permutações; 37 linhas, da linha 223 até 259 do arquivo numbers05.pas
  • Atenção! Vale lembrar que qualquer definição em um algoritmo deve ser feita antes que ela possa ser usada, seja um tipo de dados, uma constante ou variável, um procedimento ou uma função. Por isso o ponto de inserção do arquivo de fonte numbers02b precede o do arquivo numbers02c na estrutura geral do fonte numbers.pas. 

 

  • Arquivo numbers02c.pas
  • já foi analisado, na aula anterior, até a linha 15
  • linhas 16 até 28: seguindo a lista de permutações já preparada, busca igualdades se não houver erro na entrada da placa (if/then na linha 16, testa se a variável control não indica nenhum erro ou exceção na placa informada)
    • linhas 18 até 26: iniciando na linha 1; prepara a prova segundo a linha indicada da lista de permutações, enquanto for pertinente, testa a verificação de igualdades com dois dígitos de cada lado (chamada ao procedimento test2by2 na linha 24), e move indicador para a próxima linha pertinente.
    • as linhas consideradas pertinentes para testagem são definidas pelo laço while na linha 19, em conjunto com a estrutura if/then da linha 26
      • os comandos das linhas 25 e 26, na listagem, determinam a próxima linha que deve ser testada
  • linhas 32 até 35: depois de percorrida a lista de permutações para testagem, verifica se (if/then/else) há sinalização de algum erro (mostra a mensagem do erro, se houver)
  • linha 36: termina o laço que começou na linha 3 da listagem (repeat/until)
    • como repeat / until repete até que a condição seja verdadeira, o comando until FALSE da linha 36 gera uma repetição infinita, que só é quebrada pelo if/then das linhas 6 e 7
    • essa estrutura de repetição (repeat/until) foi analisada na aula anterior e, naquela análise, se encontra nas linhas 225 (repeat) e 258 (until) da listagem numbers05.pas
  • finda a repetição da linha 225 até 258, a execução do algoritmo termina

 

  • Arquivo numbers2b.pas
  • o procedure test2by2() chamado na linha 24 do arquivo numbers02c.pas está declarado no arquivo numbers2b.pas (linhas 20 até 41) e faz a testagem de possíveis igualdades com dois dígitos de cada lado do sinal de igual, considerando a placa fornecida pelo usuário.
  • a linha 20 declara o procedimento e especifica que ele recebe um vetor de 4 expressões (inp : a4exp) para testar a existência de igualdades
  • linhas 21 e 22: declara variáveis locais para uso no procedimento; 
    • eleft e eright (expressões numéricas para os lados esquerdo e direito da igualdade), e 
    • cleft e cright (inteiros para controlar qual operação deve ser usada na montagem e avaliação da expressão numérica para os lados esquerdo e direito)
  • a lógica do procedimento test2by2 é descrita nas linhas 24 até 41 (begin/end)
  • linha 26: inicia o controle do lado esquerdo, cleft, com 0 (zero)
  • linhas 27 até 40: repete os cálculos de operações possíveis para o lado esquerdo (eleft) até que cleft retorne a zero (0)
    • linha 28: chama a função eval2e() para calcular uma expressão no lado esquerdo do sinal de igual
    • linhas 30 até 39: para cada eleft calculado faz todos os cálculos possíveis para o lado direito da igualdade
      • linha 30: inicia o controle do lado direito, cright, com 0 (zero)
      • linhas 31 até 39: repete os cálculos de operações possíveis para o lado direito (eright) até que cright retorne a zero (0)
        • linha 32: chama a função eval2e() para calcular uma expressão do lado direito do sinal de igual
        • linhas 34 até 38: para cada eright calculado verifica se encontrou alguma igualdade entre os dois lados 
          • linha 34: verifica se (if) cleft e cright maiores que zero (0) e eleft.valor igual a eright.valor
            • se VERDADE então (then) tem uma igualdade a mostrar
            • senão (else) testa se (if) o código control maior que zero (0) indica algum erro ou exceção
              • se VERDADE então (then) mostra a mensagem indicada pelo código - sherror(control)
      • linha 39: termina a repetição de avaliações para o lado direito  (until cright = 0)
    • linha 40: termina a repetição de avaliações para o lado esquerdo (until cleft = 0)
  • linha 41: termina a execução do procedimento test2by2()

 

  • function eval2e() está declarado nas linhas 4 até 12 do arquivo numbers02b.pas: ele é chamado nas linhas 28 e 32  do mesmo arquivo (de dentro do procedimento test2by2) e retorna uma expressão numérica (exprn) a partir de duas exprn e do valor inteiro de controle fornecidos na chamada
    • essa função serve para avaliar as duas expressões, esquerda e direita, da igualdade
      • note que eval2e não faz distinção de qual parte da placa fornecida está sendo enviada para sua execução, ela responde da mesma forma em qualquer condição
    • ela age como um concentrador para direcionar a avaliação para a função que implementa a operação correta considerando o valor do argumento ctl enviado na chamada 
      • ctl é considerado como argumento variável, permitindo que ele seja modificado dentro da função para retornar o novo valor para o ponto de chamada
  • linha 6: incrementa ctl para indicar a próxima operação a realizar; como antes da primeira chamada o valor de controle é definido como zero (0) então esse argumento, no teste de seleção case/of, vai valer 1 na primeira execução
  • linhas 7 até 11: seleciona (case/of) a operação a ser aplicada ao par de expressões i1 e i2, considerando ctl, ou (else) volta ao valor 0 (zero) para indicar que não existem mais operações a executar
    • a estrutura de seleção (case/of) funciona como um concentrador que direciona a execução para a operação correta 
    • desde que cada operação tenha uma chave única e sucessiva (sem saltos), eval2e vai chamar todas as operações em sequência, uma de cada vez
      • se o valor de ctl definido na linha 6 não for encontrado na lista de opções da estrutura case, ctl recebe o valor 0 informando que não existem mais operações para executar com as duas expressões fornecidas e a expressão (exprn) devolvida pela função deve ser ignorada
Mídia

Comentários

Navegação do livro

  • ALG 2026-02-10
  • ALG 2026-02-24
  • ALG 2026-03-03
  • ALG 2026-03-10
  • ALG 2026-03-20
  • ALG 2026-03-24
  • ALG 2026-03-31
  • ALG 2026-04-07
  • ALG 2026-04-13
  • ALG 2026-04-28
  • ALG 2026-05/05
Feed RSS
Distribuído por Drupal