ÍNDICE DE CONTEÚDO
- Conceitos básicos de algoritmos
- Tipos de dados para uso em algoritmos
- Variáveis e Constantes
- Operações Aritméticas
- Operações relacionais e lógicas
- Expressões matemáticas
- Representação de Algoritmos
- Pseudocódigo
- Comando de Controle IF
- Comando de Controle While
- Comando de Controle Switch Case
- Comando de Controle For
- Comando de Controle Do-While
- Funções e Procedimentos – Parte 1
- Funções e Procedimentos – Parte 2
- Funções e Procedimentos – Parte 3
- Funções e Procedimentos – Parte 4
- Funções e Procedimentos – Modularização
- Recursividade
- Algoritmos: Resolução dos Exercícios Parte 1
- Algoritmos: Resolução dos Exercícios Parte 2
- Algoritmos: Resolução de Exercícios Parte 3
Oi pessoal! Tudo bem com todos? No último artigo eu apresentei a vocês o recurso de PSEUDOCÓDIGO, e também o VisuAlg. Bom, agora que já sabemos usar esses dois recursos, podemos continuar muito tranquilamente.
Novos comandos serão introduzidos nos próximos artigos, portanto, fiquem atentos! A nossa construção está sendo progressiva e crescente, quando chegar ao final da série vocês verão o quanto puderam aprender de pouco em pouco.
Mas chega de blá blá blá né?! Vamos ao que interessa!
Comando de Controle de Programa
Comandos de Controle de Programa são comandos que podemos usar em nossos programas para direcionar o fluxo de sua execução. Vou explicar a seguir, não se preocupe.
Um programa pode ser dividido em partes, como pudemos notar no artigo anterior. Primeiro temos que escrever o nome do programa, depois temos um espaço reservado para declaração de variáveis, aí entra o programa principal, com os comandos que queremos que sejam executados.
Um comando de controle de programa é então um comando que desvia de uma parte do programa, executa determinada ação, e volta para onde estava. Normalmente, o programa principal está sendo executado e então, ao chegar em uma linha que contém um comando desse tipo, o controle do programa passa a não ser mais do programa principal, mas sim daquele bloco de código que está sendo executado. Está difícil ainda de entender? Vamos exemplificar essa situação usando o comando de controle IF.
Desvio Condicional: IF
Um comando de desvio condicional faz exatamente o que o próprio nome diz, desvia o programa pela avaliação de uma condição. IF-THEN-ELSE e Switch/Case são comandos deste tipo e hoje vamos falar só sobre o IF.
O comando SE (IF) deve ser utilizado sempre quando precisamos analisar uma situação e decidir o que vamos fazer em seguida. Simplificadamente, funciona mais ou menos assim: Se tal condição for verdadeira, faça tal coisa, caso contrário, faça outra coisa.
Esse comando é implementado também no Excel, é bem provável que vocês já tenham feito algo assim antes. Darei um exemplo clássico. Queremos desenvolver um programa que:
- Solicite as notas das duas provas bimestrais dos estudantes;
- Calcule a média dessas notas;
- Verifique a situação do estudante:
- Aprovado se a média for maior ou igual a 7;
- Recuperação se a média for menor que 7 e maior que 4;
- Reprovado se a média for menor que 4.
- Apresente na tela os resultados.
O comando SE vai resolver esse problema da média pra gente. Portanto, antes de fazermos o pseudocódigo, vamos entender como funciona o comando SE, por meio de um fluxograma. Pra facilitar, vou diminuir o escopo do problema. Por hora, vamos apenas verificar se a média do estudante o qualifica como Aprovado.
Comando IF Simples
Recordando: o Losango no Fluxograma indica uma AVALIAÇÃO, os Retângulos indicam um PROCESSAMENTO, os Retângulos Arredondados indicam o início e o fim do Algoritmo, e as Setas indicam o fluxo da execução do programa.
O Fluxograma apresentado na Figura 1 mostra o início do comando SE direcionando-se para uma condição, que em nosso caso é avaliar se a média do estudante é maior ou igual a 7. Se a resposta que o programa obtiver for Verdadeira, então, observe que o fluxograma segue para o lado esquerdo, onde os comandos específicos para essa condição serão executados. Após a execução de todos os comandos deste bloco, o programa segue para o fim, retornando o comando de controle para o programa principal. Se a resposta da avaliação da condição for Falsa, então, o bloco de comandos do IF é encerrado (fim) e o controle volta para o programa principal. Então, o comando Se Simples pode ser generalizado como:
SE a condição avaliada for Verdadeira, ENTÃO, execute os comandos deste bloco. SE a condição avaliada for Falsa, ENTÃO saia deste bloco e retorne ao programa principal.
A sintaxe é:
1 2 3 |
Se condição Então comandos fimSe |
O Pseudocódigo correspondente é apresentado na Listagem 1:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
algoritmo "se_simples" var n1, n2, media : real inicio escreva(" Digite a nota da primeira prova: ") leia(n1) escreva(" Digite a nota da segunda prova: ") leia(n2) media <- (n1+n2)/2 se media >= 7 entao escreval(" A nota da primeira prova do estudante é: ", n1:5:2) escreval(" A nota da segunda prova do estudante é: ", n2:5:2) escreval(" A média do estudante é: ", media:5:2) escreval(" O estudante está APROVADO ") fimse escreval(" FIM DO PROGRAMA ") fimalgoritmo |
Linha 1: Nome do Programa.
Linha 2 e 3: Declaração de Variáveis. São declaradas três variáveis do tipo real, duas para obter os valores das duas notas e uma terceira para armazenar o valor da média.
Linha 4: Início do Programa.
Linhas 5, 7, 11, 12, 13, e 14: Usamos o comando ESCREVA para escrever textos na tela.
Linhas 6 e 8: Usamos o comando LEIA para obter os valores das variáveis NE e N2 que serão digitados pelo usuário.
Linha 9: Fazemos o cálculo da média das duas notas.
Linha 10: Aqui usamos o comando SE para avaliar a condição MÉDIA >= 7. Se a resposta para avaliação for VERDADEIRA, então, vai aparecer na tela as mensagens que colocamos no ESCREVA. Essas mensagens apresentam as notas das provas, a média e a situação do aluno. Se MÉDIA não for maior ou igual a 7, então nada acontece, simplesmente saímos do bloco de comando do SE e voltamos para o programa principal, o qual apenas emite uma mensagem de FIM DE PROGRAMA. Portanto, das linhas 10 à 15, temos o bloco de comando do IF. A condição sendo Verdadeira, esse bloco será executado, sendo falsa, sairá do bloco.
Dessa forma, podemos fazer um pequeno teste de software. Vamos avaliar o programa para os seguintes valores:
a) nota 1 = 10, nota 2 = 9
b) nota 1 = 6, nota 2 = 4
nota1 | nota2 | média | se (média>=7) | |
10 | 9 | (10+9)/2 = 9.5 |
9.5 >= 7 Verdadeiro Executa | |
6 | 4 | (6+4)/2 = 5 |
5 >= 7 Falso Não executa |
Isso é o que chamamos de teste de mesa, que é basicamente atribuir valores às variáveis e executar toda a sequência do programa. Para a letra A: a média é 9.5, o que caracteriza o estudante como Aprovado. Portanto, os comandos do bloco Se serão executados. Para a letra B: a média é 5, então o estudante está reprovado. Dessa forma nada é executado no bloco de comando SE, ele simplesmente sai desse bloco e retorna para o programa principal.
Comando IF Composto
Vamos ver agora como fica o programa ao tratarmos tanto a resposta Verdadeira, quanto a Falsa, na avaliação da condição. Observe o Fluxograma do comando apresentado na Figura 2. É bem parecido com o Fluxograma da Figura 1, mas agora temos o lado direito igual ao lado esquerdo. Portanto, comandos serão executados caso a condição seja Falsa. O Pseudocódigo correspondente é apresentado na Listagem 2.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
algoritmo "se_composto" var n1, n2, media : real inicio escreva(" Digite a nota da primeira prova: ") leia(n1) escreva(" Digite a nota da segunda prova: ") leia(n2) media <- (n1+n2)/2 se media >= 7 entao escreval(" A nota da primeira prova do estudante é: ", n1:5:2) escreval(" A nota da segunda prova do estudante é: ", n2:5:2) escreval(" A média do estudante é: ", media:5:2) escreval(" O estudante está APROVADO ") senao escreval(" A nota da primeira prova do estudante é: ", n1:5:2) escreval(" A nota da segunda prova do estudante é: ", n2:5:2) escreval(" A média do estudante é: ", media:5:2) escreval(" O estudante está REPROVADO ") fimse escreval(" FIM DO PROGRAMA ") fimalgoritmo |
Observe as linhas de 17 a 21. Nelas encontram-se o tratamento para a resposta FALSA da avaliação da condição. Novamente vamos imprimir na tela os valores das notas, da média e agora a situação do estudante aparecerá como REPROVADO. A condição avaliada é a seguinte: Se a MÉDIA >= 7 é V então o estudante está aprovado, CASO CONTRÁRIO, o estudante está reprovado. Então, o comando Se Composto pode ser generalizado como:
SE a condição avaliada for Verdadeira, ENTÃO, execute os comandos deste bloco, CASO CONTRÁRIO, execute os comandos do outro bloco. Ao terminar a execução do bloco SE, retorne ao programa principal.
A sintaxe é:
1 2 3 4 5 |
Se condição Então comandos Senão comandos fimSe |
Vamos avaliar o programa para os seguintes valores:
a) nota 1 = 10, nota 2 = 9
b) nota 1 = 6, nota 2 = 4
nota1 | nota2 | média | se (média>=7) | senão |
10 | 9 | (10+9)/2 = 9.5 |
9.5 >= 7 Verdadeiro Executa | Não executa |
6 | 4 | (6+4)/2 = 5 |
5 >= 7 Falso Não executa |
Executa |
Como podemos verificar na tabela do teste de mesa, para a letra A: o bloco da resposta V será executado pois 9.5 é maior que 7. Já para a letra B: o bloco da resposta F (senão) será executado. 5 é maior ou igual a 7? Não, então pula este bloco de comandos e vai para o próximo que é o SENÃO e executa os comandos que estão ali.
Comando IF Aninhado
Usamos o IF Aninhado em situações como a do problema que precisamos resolver aqui, temos mais de uma condição verdadeira ou falsa! Vamos observar o Fluxograma ilustrado na Figura 3. A primeira condição tem duas respostas, verdadeira ou falsa. Se a condição resultar Verdadeira, os comandos deste bloco serão executados e depois vai para o fim, retornando o controle para o programa principal. Mas, se a resposta for Falsa, observe que temos outra condição a ser avaliada, e esta, por sua vez, também pode ter duas respostas. Se esta segunda condição for verdadeira, executará os comandos deste bloco, se for falsa, executará os comandos do bloco da resposta falsa. Assim que esse sub bloco terminar de ser executado, o controle segue para o FIM1, depois para o FIM2 e somente depois retorna para o programa principal. Vejamos o Pseudocódigo correspondente na Listagem 3:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
algoritmo "se_aninhado" var n1, n2, media : real inicio escreva(" Digite a nota da primeira prova: ") leia(n1) escreva(" Digite a nota da segunda prova: ") leia(n2) media <- (n1+n2)/2 se (media >= 7) entao escreval(" A nota da primeira prova do estudante é: ", n1:5:2) escreval(" A nota da segunda prova do estudante é: ", n2:5:2) escreval(" A média do estudante é: ", media:5:2) escreval(" O estudante está APROVADO ") senao se (media >= 4) entao escreval(" A nota da primeira prova do estudante é: ", n1:5:2) escreval(" A nota da segunda prova do estudante é: ", n2:5:2) escreval(" A média do estudante é: ", media:5:2) escreval(" O estudante está de RECUPERAÇÃO ") senao escreval(" A nota da primeira prova do estudante é: ", n1:5:2) escreval(" A nota da segunda prova do estudante é: ", n2:5:2) escreval(" A média do estudante é: ", media:5:2) escreval(" O estudante está REPROVADO ") fimse fimse escreval(" FIM DO PROGRAMA ") fimalgoritmo |
Observem que agora temos uma estrutura diferente no código das linhas 19 a 31, que é exatamente a avaliação para reprovado e em recuperação. Os comandos ESCREVAL são praticamente os mesmos, o que muda é o que será impresso, conforme cada situação. Então, o comando Se Aninhado pode ser generalizado como:
SE a condição1 avaliada for Verdadeira, ENTÃO, execute os comandos deste bloco, CASO CONTRÁRIO, verifique e avalie a condição2. Se a condição2 for Verdadeira, ENTÃO, execute os comandos, CASO CONTRÁRIO, execute os comando correspondentes. Ao terminar a execução do bloco da condição2, retorne ao controle do bloco Se. Ao terminar a execução do bloco da condição1, retorne o controle ao programa principal.
A sintaxe é:
1 2 3 4 5 6 7 8 9 |
Se condição então comandos Senão Se condição então comandos Senão comandos fimSe //fim do senão fimSe //fim do se principal |
Vamos avaliar o programa para os seguintes valores:
a) nota 1 = 10, nota 2 = 9
b) nota 1 = 5, nota 2 = 6
c) nota 1 = 1, nota 2 = 3
nota1 | nota2 | média | se (média>=7) |
SENÃO se (média >=4) | senão |
10 | 9 | (10+9)/2 = 9.5 |
9.5 >= 7 Verdadeiro Executa | Não executa | Não executa |
5 | 6 | (5+6)/2 = 5.5 |
5.5 >= 7 Falso Não executa |
5.5 >= 4 Verdadeiro Executa |
Não executa |
1 | 3 | (1+3)/2= 2 |
2 >= 7 Falso Não executa |
2 >= 4 Falso Não executa | Executa |
Como podemos verificar na tabela do teste de mesa para a letra A: o bloco da resposta V será executado pois 9.5 é maior que 7, os outros blocos não serão executados. Já para a letra B: 5.5 é maior ou igual a 7? Não, então pula este bloco de comandos e vai para o próximo. 5.5 é maior ou igual a 4? Sim, então executa este bloco de código. Para a letra C: 2 é maior ou igual a 7? Não, vai para o próximo. 2 é maior ou igual a 4? Não, pula este bloco, vai para o próximo e lá executa os comandos programados.
Conclusão
Podemos ainda fazer outros arranjos com o comando IF, dependendo da necessidade do que a Linguagem de Programação oferece. Bom, assim terminamos o assunto IF. Deixarei alguns exercícios aqui para vocês resolverem. Caso tenham dificuldades, deixem as dúvidas nos comentários que eu responderei. No próximo artigo falaremos sobre Switch/Case.
Olá Elaine! Muito boa essa sua série sobre Introdução ao algoritmos.
Porém nesse ultimo artigo acho que esqueceu de colocar os exercícios. rsrs
Poxa vida!!! É mesmo!!!! Eu escrevi que colocaria os exercícios e esqueci de colocar. Mil perdões! Darei um jeito de corrigir isto!