Vamos Programar? – Introdução à Programação #10
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.
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:
1 2 3 4 5 6 7 8 9 10 11 12 13 | #include <stdio.h> 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:
1 2 3 4 5 6 7 8 9 10 11 12 13 | #include <stdio.h> 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:
1 2 3 4 5 6 7 8 9 10 11 12 13 | #include <stdio.h> 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.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | #include <stdio.h> 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:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | #include <stdio.h> 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:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | #include <stdio.h> 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:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | #include <stdio.h> 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:
1 2 | 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:
1 2 | ++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:
1 2 3 | 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:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | #include <stdio.h> 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.
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
—————————–
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 …
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.
Atualizado 🙂
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.
O tipo bool (boolean) existe na linguagem C a partir da versão C99. Para isso é necessário incluir a biblioteca stdbool.h.
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
Boa tarde, gostava de falar consigo Henrique, seria possivel? Obrigado
geral@pplware.com ao cuidado de Henrique Dias.
Olá João.
Tal como o Vítor disse, envie um mail para geral@pplware.com ao cuidado de Henrique Dias.
Enviei ontem um email, aguardo resposta.
Olá João.
Pedimos desculpa pelo incómodo porém pedimos que volte a enviar o mail para henrique.dias@pplware.com.
Cumprimentos,
[Dúvida]
Boas podem me dizer onde posso encontrar a resolução dos exercícios?
cumprimentos
Olá Ricardo!
Todas as resoluções podem ser encontradas no repositório introducao-programacao no GitHub!
[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?
estou a me referir ao exercicio 3
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!