Vamos Programar? – Introdução à Programação #10

16 Comentários

Operadores de incremento/decremento/lógicos e Loops while

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.

Vamos Programar? – Introdução à Programação #10

Infelizmente, esta semana não temos um vídeo por motivos “temporais” porém, prometemos que na próxima semana voltará a haver vídeo.

Operadores Lógicos

Os operadores lógicos são, normalmente, utilizados em testes lógicos quando queremos incluir mais do que uma condição para que algo aconteça. Existem três operadores lógicos que vamos abordar agora: “&&”, “||” e “!”.

Operador “&&”

Na programação, o operador “&&” funciona como um “e” na nossa língua: para adicionar algo, neste caso, uma condição. Veja alguns exemplos:

#include 

int main()
{   
    int num1;
    num1 = 4;
    
    if (num1 > 0 && num1 <= 10) {
        printf("O número %d está entre 1 e 10.", num1);
    }
    
    return 0;
}

O que está expresso na condição acima é: se "num1" for maior que 0 e menor ou igual a 10 então executa o código que está ali dentro.

Este comando pode ser utilizado mais do que uma vez dentro de um teste condicional pois podemos colocar duas ou mais condições utilizando este operador. Basta adicionar "&&".

Operador "||"

O operador "||" refere-se a "ou", ou seja, utilizando este operador podemos executar uma condição do seguinte tipo: executa isto se x acontecer ou se y acontecer. Exemplo:

#include 

int main()
{   
    int num1;
    num1 = 3;
    
    if (num1 == 3 || num1 == 5) {
        printf("O número é 3 ou 5.\n");
    }
    
    return 0;
}

Como pode visualizar, o teste condicional acima verifica se a variável "num1" é 3 ou cinco e só depois executa o código condicionado ou não.

Operador "!"

Podemos traduzir o operador "!" para "o contrário de". Quando utilizado numa condição, por exemplo, este nega tudo o que lá está. Exemplo:

#include 

int main()
{   
    int num1;
    num1 = 0;
    
    if (!num1) {
        printf("O valor de num1 corresponde a falso.\n");
    }
    
    return 0;
}

Relembrando que 0 é considerado falso e qualquer número maior é considerado verdadeiro, o código que está dentro do teste condicional acima só é executado se num1 não for verdadeiro.

Operadores de Incremento e Decremento

Os operadores de incremento e decremento são dois operadores que vão ser extremamente úteis na vida de qualquer programador.

Imagine que necessita de contar um número infinito de números independentemente se é no sentido crescente ou decrescente. Vai fazê-lo um a um? Não, não é necessário.

#include 

int main()
{   
    int num;
    
    num = 1;
    printf("O número é %d\n", num);
    
    num = num + 1;
    printf("O número é %d\n", num);
    
    num = num + 1;
    printf("O número é %d\n", num);
     
    return 0;
}

O código acima imprime a frase "O número é" e o número que está atribuído a "num" nesse momento. Começando em 1 e chegando a 3 no final do algoritmo.

Existe outra forma de adicionar e remover uma unidade a uma variável: "++" e "--". Veja como ficaria o código anterior utilizando essa sintaxe:

#include 

int main()
{   
    int num;
    
    num = 1;
    printf("O número é %d\n", num);
    
    num++;
    printf("O número é %d\n", num);
    
    num++;
    printf("O número é %d\n", num);
     
    return 0;
}

Isso irá imprimir o mesmo que o código mostrado anteriormente. Para remover uma unidade basta fazer do seguinte modo:

#include 

int main()
{   
    int num;
    
    num = 1;
    printf("O número é %d\n", num);
    
    num--;
    printf("O número é %d\n", num);
     
    return 0;
}

Estes operadores podem ser utilizados antes ou depois de uma variável: "num++" ou "++num". Quando estes operadores são utilizados isoladamente, nenhuma diferença existe porém, quando estamos a efetuar uma atribuição, existe uma diferença. Analise o seguinte exemplo:

#include 

int main()
{   
    int a, b, c;
    
    a = 0;
    b = a++;
    c = ++a;
    
    printf("A: %d, B: %d, C: %d", a, b, c);
    
    return 0;
}

Primeiramente, declaramos três variáveis: "a", "b" e "c". De seguida, atribuímos o valor 0 à variável "a". Quando atribuímos "a++" à variável "b", o que vai acontecer?

A variável "b" vai assumir o valor 0 e um valor é incrementado a "a" ficando esta com o valor 1, ou seja, "b = a++" é um atalho para o seguinte:

b = a;
a++;

De seguida, quando atribuímos "++a" à variável "c", estamos a incrementar primeiro a variável "a" e só depois é que o valor de esta é atribuído a "c", ou seja, é um atalho para o seguinte:

++a;
c = a;

Como pode visualizar, estes operadores podem ser muito úteis em diversas situações. Mesmo que agora não esteja a visualizar estas situações, não se preocupe: irá ver muitas!

Controlo de fluxo com while

Já foi abordado o controlo de fluxo utilizando if else. Agora é a vez de um novo "tipo" de controlo de fluxo, o while ou, em português, "enquanto". A sintaxe do while é a seguinte:

while(condição) {
   //Algo acontece
}

Veja então o seguinte exemplo da utilização deste tipo de controlo de fluxo que imprime os números de zero a dez:

#include 

int main()
{   
    int num;
    num = 0;
    
    while(num <= 10) {
        printf("%d\n", num);
        num++;
    }
    
    return 0;
}

Sem utilizar este controlo de fluxo, teríamos que escrever muito mais código de forma a conseguir imprimir os números de um a dez através de uma variável.

Exercícios

1 - Imprima os números pares de 0 a 100 utilizando um loop while.

2 - Imprima todos os números entre -100 e 100 que sejam divisíveis por 5 e 3.

3 - Gere um número inteiro aleatório entre 1 e 10. De seguida, peça ao utilizador que insira um número entre o intervalo anteriormente indicado.

Caso o número que o utilizador insira esteja fora do intervalo, deverá alertar o utilizador para esse problema. Caso o número esteja no intervalo e seja igual ao gerado, deverá mostrar uma mensagem de parabéns.

Caso não seja igual ao número gerado, deverá dizer ao utilizador a seguinte mensagem dependendo da amplitude (diferença entre o número inserido e o número indicado):

  • Extremamente Perto. (Amplitude 1)
  • Perto. (Amplitude 2/3)
  • Podia estar mais perto. (Amplitude 4/5)
  • Hmmm... Um pouco longe. (Amplitude 6/7)
  • Muito longe. (Amplitude 8/9)

De seguida, o programa deverá continuar a pedir um número ao utilizador e verificar todas estas condições até o utilizador acertar no número.

Observação: para obter um valor absoluto utilize a função "abs" do ficheiro "stdlib.h".


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]

homefacebookgoogle-plus

Comentários

16

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *

  1. Avatar de Kabindas
    Kabindas

    —————————–
    int num1;
    num1 = 0;

    if (!num1){
    printf(“O número é falso.\n”);
    }
    —————————–

    A sério ? numero falso ?? Acho este exemplo um bocado infeliz …
    btw em C# isto não funciona …

    1. Avatar de Joaquim
      Joaquim

      Também me saltou logo à vista esse exemplo. Até eu que percebo de programação me fez um bocado de confusão.

      Para quem está a aprender talvez não seja tão perceptível.

      De resto gostei, aqueles exercícios são muito bons.

  2. Avatar de Hélio Correia
    Hélio Correia

    Já não programo em C a uns anos mas em c não existe o tipo de dados boolean, por isso o zero é considerado false e o resto é true (até números negativos se não estou em erro).

    Em c# e em quase todas mais recentes tens essa distinção..também não podes pedir tudo de uma linguagem muito mais velha que as outras.

    1. Avatar de Bruno
      Bruno

      O tipo bool (boolean) existe na linguagem C a partir da versão C99. Para isso é necessário incluir a biblioteca stdbool.h.

  3. Avatar de Nuno Moreira
    Nuno Moreira

    boas!!!

    Precisava de programar um botão em acess para que ao carregar no botão ele abrisse o Outlook e carregasse todos os email de uma tabela para a linha de bcc! Alguém me pode ajudar? É que já tentei criar (copiando de filmes que vi) mas há sempre alguma coisa que não dá! E para ajudar eu não percebo nada de programação :S.

    Obrigado

  4. Avatar de João
    João

    Boa tarde, gostava de falar consigo Henrique, seria possivel? Obrigado

    1. Avatar de Henrique Dias

      Olá João.
      Tal como o Vítor disse, envie um mail para geral@pplware.com ao cuidado de Henrique Dias.

      1. Avatar de João
        João

        Enviei ontem um email, aguardo resposta.

        1. Avatar de Henrique Dias

          Olá João.

          Pedimos desculpa pelo incómodo porém pedimos que volte a enviar o mail para henrique.dias@pplware.com.

          Cumprimentos,

  5. Avatar de Ricardo
    Ricardo

    [Dúvida]
    Boas podem me dizer onde posso encontrar a resolução dos exercícios?

    cumprimentos

    1. Avatar de Henrique Dias

      Olá Ricardo!

      Todas as resoluções podem ser encontradas no repositório introducao-programacao no GitHub!

      1. Avatar de Ricardo
        Ricardo

        [Dúvida]
        Obrigado. estou a gostar muito do vosso “tutorial”.
        Podes-me tirar uma dúvida acerca do porque utilizar o while e de criar a variável state e de a negar no while?

        1. Avatar de Ricardo
          Ricardo

          estou a me referir ao exercicio 3

          1. Avatar de Henrique Dias

            Olá Ricardo!

            Desculpa por demorar alguns dias a responder, mas aqui vai. Para responder à tua pergunta é bom analisar este trecho de código.

            A linguagem C, tal como muitas outras, considera 1 como true e 0 como false. Criamos o variável “state” para saber se devemos continuar a perguntar para introduzir um número.

            Enquanto o estado for 0 [“while(!state)” → para considerar o oposto de “state”, visto que 0, definido como padrão, é false] repete o código. Quando o utilizador acerta, a variável state muda para 1 e, sendo a negação de 1, 0, ou seja, false, o loop já não continua, terminando o programa.

            Ao invés de utilizar a negação, podíamos inicializar a variável “state” com 1, utilizar “while(state)” e definir 0 quando o utilizador encontra o número. Funcionaria corretamente, também.

            Espero ter sido explícito o suficiente!