Sua situação, na verdade, corresponde à maioria das pessoas que fazem o teste sem nenhum conhecimento prévio de linguagens de programação de baixo nível e/ou toria da computação e/ou arquitetura de computadores.
Para facilitar a sua vida vou fazer algo bem fora de moda hoje em dia: um teste de mesa. Vamos simular (por escrito) a execução passo a passo do programa e verificar se o efeito produzido corresponde ao que se pede.
Cada passo do programa será representado da seginte forma:
Vamos começar. Esta é a situação inicial (válida para todos os casos): cabeçotes de leitura e gravação posicionados no início da mídia e primeira instrução a executar no endereço de memória 0.
Após a execução da instrução T, como o caracter lido na mídia foi um *, a próxima instução a executar estará no endereço de memória 0 + 2 = 2. Observe a nova posição do cabeçote de leitura.
Agora a instrução executada é H, que grava um - na mídia e reposiciona o cabeçote de gravação. Próxima instrução a executar está no endereço de memória 3.
Voltamos à instrução T. Após execução o cabeçote de leitura é reposicionado e, como o caraccter lido foi um -, a próxima instrução a executar está no endereço de memória 0 + 1 = 1.
Desvio incondicional para a instução no endereço de memória 4.
Executa a instrução A, que grava um * na mídia e reposiciona o cabeçote de gravação. Próxima instrução a executar está no endereço 5.
O desvio para a instrução na posição de memória 0 voltará a executar a instrução T. A esta altura já dá para perceber toda a mecânica de execução do programa, que vai percorrer toda a mídia (supostamente de comprimento infinito) substituindo os caracteres * por -, e vice versa, como pedido.
Se ainda assim você não consegue entender como escrever os programas para solucionar os problemas propostos, então realmente é melhor você se dedicar a linguagens com sintaxe mais abstrata.
Nenhum comentário:
Postar um comentário