Entre o programa abaixo no editor do MATLAB:
O programa pede ao usuário informar o número de transações a serem efetuadas. Em seguida, ele lê a entrada, em reais, de cada transação e controla o valor total das transações. Ao final, ele apresenta a soma, em reais, dos valores de cada transação.
Crie breakpoints onde achar necessário e debugue o programa, corrigindo erros de sintaxe e de lógica.
Passo 1
O enunciado nos passou um código que intencionalmente tem erros e nos pede para corrigi-lo. Existem no programa erros de sintaxe e de lógica.
Erros de sintaxe em programação são erros 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.
Em programação, erros lógicos não impedem a execução do programa. Eles levam a uma saída diferente da desejada (às vezes incorreta) 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 nos é pedido para criar breakpoints e para debugar o programa.
Passo 2
Crie um script novo no MATLAB e copie o nele o programa do enunciado. O enunciado nos informou o que este programa deve fazer: ele pede para o usuário entrar com o número de transações que ele deseja fazer, para pedir, em seguida, o valor de cada transação. O programa controla o valor total das transações e informa ao final o valor total das transações.
Antes de rodarmos o programa e procurarmos eventuais erros, vamos ver o que cada linha significa para ver o que o programa faz para atingir seu objetivo:
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.
Uma variável chamada é criada na linha 4 e ela é igual a .
Na linha 5, pedimos ao usuário para informar o número de transações, por meio do comando . O número de transações é armazenado em .
Na linha 7, se inicia um laço . O bloco do laço é executado enquanto a condição for verdadeira. é uma variável de controle que conta quantas vezes o bloco do foi executado, isto é, conta o número de iterações.
Na linha 8, é pedido ao usuário para informar o valor de uma transação, também usando o comando . O valor da transação é armazenado na variável .
Na linha 9, o valor total das transações é atualizado, utilizando a variável criada na linha 4. A variável é atualizada considerando o valor informado pelo usuário na linha 8.
Na linha 10, a variável de controle é atualizada, adionando ao valor que tinha na iteração anterior.
A linha 11 indica que o bloco do se encerra ali.
A linha 13 imprime no Command Window o resultado da soma das transações, usando a função .
Agora que já sabemos o que cada linha faz, vamos rodar o programa pela primeira vez. Apaecerá no Command Window a seguinte mensagem:
O MATLAB exibiu a string do comando da linha 5, indicando que o programa foi executado. Isto significa que o programa não possui erros de sintaxe, já que o MATLAB conseguiu rodá-lo.
Passo 3
Vamos informar um número de transações para o programa continuar rodando, para vermos se não identificamos algum erro. Vou dizer que quero fazer duas transações, entrando o valor no Command Window. Desta forma, fica mais fácil de eu verificar se o resultado final estará certo.
Ao entrar o valor no Command Window, aparece a seguinte mensagem de erro:
O MATLAB nos informa que há um erro na linha 7, onde se inicia o . Ele não reconheceu a variável . Se olharmos o código atentamente de novo, percebemos que a variável não foi definida antes da linha 7 e é por isso que o MATLAB não a reconhece.
Para corrigirmos este erro, vamos definir a variável na linha 6 e dizer que ela é igual a :
Fizemos antes de iniciar o laço porque ele serve para contar quantas vezes o bloco foi executado. Perceba que na primeira iteração do while, vai ficar igual a ao passarmos pela linha 10, que diz que . Na segunda iteração, vai se transformar em pois a execução da linha 10 adicionar ao valor de da iteração anterior. Esse processo acontece a cada iteração do .
Passo 4
Vamos rodar o programa novamente para ver se achamos outro erro. Vamos informar novamente que queremos fazer transações, isto é, .
A mensagem de erro do passo anterior não aparece mais. O MATLAB nos pede o valor da transação, indicando que a linha 8 do código foi executada normalmente. Vamos dizer que queremos fazer uma transação de :
O MATLAB nos pede novamente para informar um valor de transação, já que pedimos para fazer duas transações. Vamos dizer que queremos fazer mais uma transação de :
Perceba que já há indícios que temos algum erro de lógica no código: o MATLAB pediu para entrarmos um terceiro valor de transação, sendo que nós dissemos que queríamos fazer somente duas transações. Vamos interromper a execução do código usando o atalho do teclado e criar um breakpoint para debugar o programa.
Crie um breakpoint na linha 10, onde a variável é atualizada, clicando na barra cinza à esquerda do código, no Editor do MATLAB:
A bolinha vermelha que apareceu é o brekpoint que definimos. Vamos rodar o programa novamente e ativar o modo debugger do MATLAB. O programa é executado até a linha 9 e é interrompido na linha 10:
Note que eu informer novamente que queremos fazer duas transações e já informei que a primeira transação é de . Na janela do Editor, apareceu uma flechinha verde na linha onde foi criado o breakpoint, indicando a interrupção do programa:
Antes de executar o programa linha por linha para identificarmos o erro, vamos ver como está nosso Workspace:
Perceba que, por enquanto, . Vamos executar a linha 10, usando o atalho do teclado F10 ou apertando o botão “Step”. Em seguida, olhe o Workspace novamente:
Agora, . Perceba que , por isso o bloco do será executado novamente. Continue executando o programa linha por linha até chegar na linha 10 novamente. Neste momento, seu Command Window estará assim:
O MATLAB nos pediu para informar o valor da segunda transação, novamente eu disse que quero fazer uma transação de . Vamos ver como está o Workspace:
ainda não foi atualizado e continua igual a porque ainda não executamos a linha 10. Ao fazermos isto, ele se tornará igual a :
Note que, neste momento, e se continuarmos executando o programa linha por linha, o bloco será rodado novamente, pois a condição dele é .
Contudo, não queremos que o bloco seja executado mais uma vez, pois isso significa que estaremos fazendo uma terceira transação, sendo que só queremos fazer duas.
Aqui percebemos um erro de lógica no código: o laço não pode ser executado quando , para não fazermos uma transação a mais do que a gente pediu. Para corrigirmos este erro, interrompa o debugger apertando o botão “Quit debugging” e mude a condição do na linha 7 para :
Desta forma, o bloco do não será executado quando .
Vamos testar novamente? Apague o breakpoint da linha 10, clicando nele, rode o programa e peça para fazer duas transações, uma de e outra de .
O seu Command Window deve ter ficado assim. Perceba que o problema de o MATLAB fazer uma transação a mais do que o pedido foi corrigido, pois ele pediu para informarmos o valor de uma transação duas vezes. Contudo, apareceu outra mensagem de erro, que diz que há um erro na linha 13.
Passo 5
A mensagem de erro diz que o MATLAB não reconheceu a variável ou função na linha 13. Se olharmos para o teclado de nossos computadores, descobrimos este erro se trata de um erro de digitação: quem escreveu o programa queria ter digitado em vez de , mas acabou apertando a tecla em vez da , que estão lado a lado no teclado.
Na linha 13, substitua por e rode o programa novamente, para vermos se não há mais algum erro. Novamente, vamos entrar com e pedir que a primeira transação seja de e a segunda, de . Seu Command Window deve ter ficado assim:
Oba! Nenhuma mensagem de erro! O programa foi executado até o final sem problemas!
Pera, mas viu o valor total das transações que o MATLAB nos informou? Ele disse que o valor total das transações é de , mas deveria ser de , não? Isto quer dizer que ainda há um erro lógico em nosso programa.
Passo 6
É na linha 13 que o valor total das transações é impresso no Command Window:
Veja que ela imprime primeiro uma string e, em seguida, a variável , que representa a soma de todas as transações.
Para identificar o erro, vamos ver o valor que assumiu ao final do programa:
Perceba que está igual à , qua assumiu ao final do programa o valor de . Contudo, deveria ser a soma da primeira e da segunda transação, logo, deveria ser igual a no final do programa.
O problema deve estar na linha 9, onde a variável é atualizada dentro do bloco . Vamos criar um breakpoint na linha 9 para vermos como a variável total está sendo atualizada. Para isto, clique na barra cinza à esquerda do código, na janela Editor do MATLAB, sobre a linha 9. O breakpoint aparece representado pela bolinha vermelha.
Vamos debugar o programa novamente. Rode-o e diga quer quer fazer duas transações novamente, sendo que a primeira é de . A execução do programa será interrompida na linha 9 e seu Command Window estará assim:
Vamos ver o Workspace? Por enquanto, pois a variável ainda não foi atualizada:
Vamos agora rodar o programa linha por linha. Execute a linha 9 apertando F10 ou o botão “Step” e veja o valor que assumiu no Workspace:
Agora, , que é igual ao valor da primeira transação que fizemos, que foi armazenado na variável . Por enquanto, está tudo certo.
Continue a executar o programa linha por linha, até atingir a linha 9 novamente. Não a execute ainda. Durante este processo, o MATLAB vai pedir o valor da segunda transação, de . Seu Command Window deve estar assim:
Vamos ver o Workspace:
A variável foi atualizada para e a variável ainda não foi atualizada. Vamos executar a linha 9 e observar o Workspace:
O ficou igual a , em vez de somar ao valor da primeira transação isto é, . Temos um problema no cálculo da atualização da variável .
Note que na linha 9, é atualizado pelo comando:
Que diz que é igual a . Mas não é isso que queremos, queremos que armazene a soma das transações. Para que isso seja feito, altere a linha 9 para:
Desta forma, é atualizada ao somar o valor que tinha na iteração anterior com o valor que a variável acabou de assumir.
Vamos ver se funcionou? Apague o breakpoint e rode o programa novamente.
Passo 7
De novo, diga que quer fazer duas transações, a primeira de e a segunda de . Seu Command Window deve estar assim:
Agora a soma dos valores das transações está correto: . Se olharmos o Wokspace, veremos que está diferente de e que :
Pronto! Programa corrigido! Se quiser, pode fazer mais alguns testes, mudando o número de transações e os valores das transações. Com as correções que fizemos, o programa vai rodar sem problemas.
Resposta
Ei, a resposta está no passo a passo :)