Vamos Programar? – Introdução à Programação #11
Interrupção do fluxo e teste lógico switch
O mundo está constantemente a evoluir: desde o mais pequeno inseto à espécie Humana. Evolução, mudança, futuro – são das palavras que mais são ouvidas atualmente.
A tecnologia tem revolucionado o mundo das mais diversas formas. Se quer entrar no mundo da tecnologia e deixar a sua marca, pode começar aqui.
Visualize este vídeo no YouTube
Interrupção do Fluxo
Os fluxos são algo (quase) indispensável em programas minimamente complexos que, por vezes, precisamos ter um maior controle sobre os mesmos. Já conhecemos o loop while que nos permite repetir um determinado trecho de código enquanto uma condição for verdadeira.
Mas e se necessitarmos de interromper a continuidade de um fluxo por algum motivo? Se por exemplo, efetuarmos um teste lógico if para saber se é necessário efetuar algo mais dentro de um loop while. Se sim, realiza, mas caso contrário, deverá passar para a próxima iteração (repetição).
break
O primeiro comando que nos permite ter um maior controle sobre os fluxos de repetição é o comando break permite que terminemos o loop atual sem quaisquer problemas.
Exemplo
Precisamos de encontrar o primeiro número divisível por 17, 18 e 20 entre 0 e 1000000. Para o fazermos, bastaria utilizar o seguinte código:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | #include <stdio.h> int main() { int count, num; count = 1; num = 0; while(count <= 1000000) { if(num== 0) { if((count%17==0) && (count%18==0) && (count%20==0)) { num=count; } } count++; } printf("O número divisível por 17, 18 e 20 entre 1 e 1000000 é: %d", num); return 0; }</stdio.h> |
Este trecho de código, depois de encontrar o número, que é 3060, continuaria a efetuar testes lógicos até o contador chegar a 1000000. Mas, se já encontrou o número, qual a necessidade de gastar tempo e poder de processamento? Bastaria adicionar um break para colmatar esta situação da seguinte forma:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | #include <stdio.h> int main() { int count, num; count = 1; num = 0; while(count <= 1000000) { if(num== 0) { if((count%17==0) && (count%18==0) && (count%20==0)) { num=count; break; } } count++; } printf("O número divisível por 17, 18 e 20 entre 1 e 1000000 é: %d", num); return 0; }</stdio.h> |
continue
O comando continue é o segundo comando deste género que interrompe a iteração atual passando logo para a seguinte iteração.
Exemplo
Precisamos de somar todos os números entre 0 e 1000 que não são múltiplos de 2 nem de 3. Para isso utilizamos o seguinte código:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | #include <stdio.h> int main() { int count, sum; count = 1; sum = 0; while(count <= 1000) { if(count%2 == 0 || count%3 == 0) { count++; continue; } sum += count; //sum = sum + count count++; } printf("Soma %d", sum); return 0; }</stdio.h> |
O que este código faz é percorrer os números de 1 a 1000 e, se for divisível por 2 ou por 3, passa para a próxima iteração (adicionando um valor ao número atual). Caso a condição não se verifique, o número é acrescentado à soma, adicionado um número a count passando assim para a próxima iteração.
Teste lógico switch
O teste condicional switch é extremamente útil quando precisamos de, por exemplo, efetuar um comando dependendo da opção, entre 0 e 10, que o utilizador escolheu.
Claro que poderíamos utilizar os if porém o código ficaria deveras extenso e um pouco complicado de ler. Veja o seguinte código com um switch:
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 | #include <stdio.h> int main() { int option; printf("Insira a opção:\n"); scanf("%d", &option); switch(option) { case 1: printf("Escolheu a opção 1"); break; case 2: printf("Escolheu a opção 2"); break; case 3: printf("Escolheu a opção 3"); break; case 4: printf("Escolheu a opção 4"); break; case 5: printf("Escolheu a opção 5"); break; default: printf("Opção inexistente."); break; } return 0; }</stdio.h> |
Como pode visualizar, o código executado para cada opção pode ser diferente. Caso o inserido não corresponda a nenhuma das opções, o que está em default é executado. Veja o código anterior com if else:
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 | #include <stdio.h> int main() { int option; printf("Insira a opção:\n"); scanf("%d", &option); if (option == 1) { printf("Escolheu a opção 1"); } else if (option == 2) { printf("Escolheu a opção 2"); } else if (option == 3) { printf("Escolheu a opção 3"); } else if (option == 4) { printf("Escolheu a opção 4"); } else if (option == 5) { printf("Escolheu a opção 5"); } else { printf("Opção inexistente."); } return 0; }</stdio.h> |
Comparando as duas, é possível verificar que utilizando o switch o código fica mais legível e fácil de ser editado.
Deve ter reparado ainda que no final de cada instrução do switch utilizámos um break. Isto acontece porque, caso não o utilizemos, o programa continuaria a correr os comandos seguintes que existem no switch.
Exercícios
1 - Crie uma calculadora que possibilite fazer adições, subtrações, divisões e multiplicações a mais do que dois números. Utilize um switch e um loop while.
2 - Crie um programa que imprima os três primeiros números divisíveis por 5 e, simultâneamente por 10, entre 100 e 1000 minimizando o processamento recorrendo à interrupção do fluxo.
Mais uma vez, gostávamos de saber a sua opinião. Caso tenha alguma dúvida, pode sempre utilizar os comentários para colocar a questão. Caso o faça, pedimos que utilize a keyword [DUVIDA] no início do seu comentários.
Esta saga |
Henrique Dias |
|
Mais episódios: [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13][12] [14] [15] [16] [17] [18] [19] [20] [21] [22] [23][24] |
Este artigo tem mais de um ano
Ola gostaria de saber o nome do editor da foto la em cima do post , acima do video.
Grato
Alex Rolim
Parece-me ser o sublime Text 2..
Podes usar o codeblocks, que funciona em todas as plataformas, é mesmo muito bom em c e c++.
A diferença na performance também se verifica… pelo menos em C# usando o CASE… ou estarei a dizer um disparate?
Boa noite Miguel.
De acordo com os testes que realizei aqui e com algumas informações que li, sim, o “switch” é realizado em menos tempo do que vários “if else”.
Cumprimentos,
Boa noite
Desculpem o off-topic mas alguém por aí tem conhecimentos de programação Android ? Ou indicam alguma pessoa dessa área ?
Obrigado
O botão de download em PDF está a reencaminhar para o tutorial #10.
Afinal é só o título do PDF que está mal 😀
Alguém me consegue ajudar com o 2 exercicio ?2 – Crie um programa que imprima os três primeiros
números divisíveis por 5 e, simultaneamente por 10, entre
100 e 1000 minimizando o processamento recorrendo à
interrupção do fluxo.