Entre o programa abaixo no editor do MATLAB:
Lembre de adicionar os comandos e no começo do programa.
- Rode o programa e corrija os erros de sintaxe;
- Crie um breakpoint na linha: ;
- Debugue o programa avançando linha por linha do programa e observe o Workspace e o Command Window, procurando algum erro. Corrija os erros lógicos.
- Limpe o breakpoint da letra b e rode o programa corrigido, observando o Workspace e o Command Window.
Passo 1
O enunciado nos deu um código que contém alguns erros e pede para nos o corrigirmos. A intenção do código é mostrar cada elemento do vetor no Command Window.
Na letra a, é pedido para corrigirmos erros de sintaxe. Erros de sintaxe em programação são causados quando não seguimos as regras da linguagem que estamos utilizando, no nosso caso, o MATLAB. Os erros de sintaxe impedem a execução do programa.
A letra b pede para criarmos um breakpoint, para ajudar a responder a letra c. Na letra c, nos é pedido para corrigir erros lógicos. Em programação, erros lógicos não impedem a execução do programa. Eles levam a uma saída diferente da desejada e só podem ser detectados pelo programador ou pela programadora. O debugger do MATLAB nos ajuda a encontrar erros lógicos e a corrigi-los, por isso o usaremos para responder à letra c.
Finalmente, a letra d pede para tirarmos o breakpoint criado na letra b e para rodar o programa por completo.
Passo 2
Crie um script novo no MATLAB e copie o nele o programa do enunciado. Antes de rodarmos o programa e procurarmos eventuais erros, vamos ver o que cada linha significa e o que o programa faz, pelo menos na intenção:
Na linha 1, temos o comando . Este comando limpa o Workspace do MATLAB cada vez que o programa é rodado. Como procuramos erros no código e teremos que rodá-lo várias vezes para ver se corrigimos alguma coisa, é importante limpar o Workspace a cada tentativa.
Na linha 2, o comando limpa o Command Window do MATLAB cada vez que o programa é executado. Novamente, como vamos rodar o código diversas vezes, é importante limpar o Command Window a cada tentativa, para ficar mais fácil de ver qual erro foi corrigido e qual é o erro a ser corrigido na sequência, caso exista.
Na linha 4, criamos um vetor chamado , com 6 elementos.
Na linha 6, começamos um laço , com a intenção de mostrar no Command Window cada elemento de , um de cada vez.
A linha 7 imprime no Command Window o elemento da iteração corrente.
Finalmente, a linha 8 encerra o laço .
Resumindo, o programa deveria imprimir um elemento de a cada iteração do laço .
Agora que já sabemos qual é a intenção do programa, vamos rodá-lo para identificar problemas de sintaxe e resolver a letra a.
Ao tentarmos executar o programa, aparece a seguinte mensagem de erro:
Ela diz que há um erro de sintaxe na linha 6 do programa, no início do laço . Isto faz com que o programa nem seja executado.
Queremos que o MATLAB varra cada elemento de values usando o laço for. Para isto, devemos alterar a linha 6 para:
Na nova linha 6, criamos uma variável de controle , que vai de 1 até o número de elementos de , isto é, 6. O número de elementos de é dado pela função que dá o número de elementos de um vetor.
Rode o programa novamente. A saída no Command Window deve ter sido esta:
A correção que fizemos na linha 6 eliminou o erro de sintaxe e o MATLAB conseguiu rodar o programa. Portanto, a letra a está resolvida. Contudo, a saída não foi exatamente o que queríamos: o vetor foi impresso seis vezes, em vez de um elemento de ser impresso a cada iteração.
Passo 3
Para conseguirmos a saída que queremos, vamos começar pela letra b: criar um breakpoint na linha , isto é, na linha 7. Para criar o breakpoint, clique na barra cinza à esquerda do código, no Editor do MATLAB, na linha onde se deseja criá-lo:
Pronto, letra b feita :) Bora fazer a letra c.
Passo 4
A letra c pede para debugar o programa, avançando linha por linha. Enquanto executamos linha por linha, devemos observar o Workspace e o Command Window, para achar o erro no código.
Para ativar o modo debugger do MATLAB, mande rodar o programa. O programa vai ser executado até a linha 7, onde ele será interrompido. A linha onde o programa foi interrompido é indicada por uma flechinha verde:
Olhe o seu Workspace, ele deve estar assim:
Foi criada a variável de controle e ela por enquanto é igual a 1.
Vamos executar o programa linha por linha como o enunciado mandou. Para isso, aperte o botão “Step” ou use o atalho do teclado F10. Com isto, a flechinha verde desceu para a linha 8, indicando que a linha 7 foi executada:
A execução da linha 7 fez com que a função exibisse o vetor values no Command Window:
Vamos continuar avançando linha por linha. Aperte F10 novamente ou o botão “Step”. Como iniciamos um laço , a flechinha verde voltou para a linha 7.
Vamos ver novamente o Workspace:
Repare que o valor de foi atualizado para 2, devido ao laço .
Aperte F10 novamente ou o botão “Step”. A linha 7 é executada novamente e o vetor é impresso no Command Window pela segunda vez:
Percebeu o padrão? Cada vez que avançamos uma iteração no laço , o valor de é atualizado e o vetor é impresso novamente. Como neste laço o vai de 1 a 6, após debugarmos, será igual a 6 e será impresso seis vezes no Command Window.
Isto está longe do que queremos, que é imprimir um elemento de a cada iteração do laço . Este é o erro lógico do programa.
Passo 5
Para corrigi-lo, altere a linha 7 para:
Em vez de , usamos , para indicar o elemento de que deve ser impresso. Por exemplo, no laço , inicialmente , logo, na primeira iteração, o comando da linha 7 será na prática . Isto fará com que o primeiro elemento do vetor , 23, seja impresso. Na iteração seguinte, e o comando da da linha 7 será na prática . Isto fará com que o número 17 seja impresso no Comand Window, pois ele é o segundo elemento de . Isto acontecerá para todos os elementos de até .
Vamos visualizar este processo debugando. Repare que nem tinha apagado ainda o nosso breakpoint.
Rode o programa novamente para o MATLAB entrar em modo debugger:
Vamos ver o Workspace:
Temos . Vamos apertar F10 ou o botão “Step” para executar a linha 7. Ao fazermos isso, o Command Window imprime :
Note que é o primeiro elemento de e ele foi impresso na primeira iteração do laço .
Aperte F10 novamente ou o botão “Step” e repare no valor de no Workspace:
Temos . Ao executarmos a linha 7 novamente, o Command Window imprime :
Que é o segundo elemento de , impresso na segunda iteração.
Percebeu a diferença entre e ? Ao incluirmos o , um elemento de é impresso a cada iteração do laço . Sem o , o vetor inteiro é impresso a cada iteração.
Após terminar de debugar, executando linha por linha, o resultado será todos os elementos de impressos no Command Window, sendo que um elemento é impresso por vez:
No Workspace, estará igual 6:
O erro lógico está corrigido, portanto, a letra c está respondida.
Passo 6
A letra d para eliminar o breakpoint e rodar o programa normalmente. Ela pede também para ver o Command Window e o Workspace.
Apague o breakpoint clicando nele e rode o programa. O seu Command Window deve ter ficado assim:
E o Workspace, assim:
Eles estão da mesma forma que ficaram ao terminarmos de debugar. Isto ocorre pois não pedimos ao MATLAB para executar e avaliar linha por linha nosso código, nós pedimos para o MATLAB executá-lo de uma vez, chegando diretamente ao resultado final.
Resposta
Ei, a resposta está no passo a passo :)