Pplware

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:

#include 

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;
}

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:

#include 

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;
}

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:

#include 

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;
}

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:

#include 

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;
}

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:

#include 

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;
}

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.

Resoluções de exercícios.

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]

Exit mobile version