Vamos Programar? – Introdução à Programação #8
Operadores e loops "if else"
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
Operadores
Operadores são símbolos para efetuar determinadas ações. Na programação existem diversos tipos de operadores. Operadores estes que também existem noutras áreas do conhecimento como matemática, por exemplo.
Serão abordados 3 tipos de operadores: aritméticos, de atribuição e relacionais. O primeiro grupo de operadores serve, obviamente, para efetuar operações matemáticas. São utilizados os seguintes símbolos:
Operadores Aritméticos | ||
Nome | Símbolo | Exemplo |
Soma | + | 5 + 4 = 9 |
Subtração | - | 154 - 10 = 144 |
Multiplicação | * | 5,55 * 10 = 55,5 |
Divisão | / | 40 / 2 = 20 |
Resto de uma divisão | % | 1500 % 11 = 4 |
Os operadores de atribuição, tal como o próprio nome indica, servem para atribuir a uma variável, determinado valor. Existem vários operadores de atribuição e, muitos deles, funcionam como abreviatura para operações aritméticas.
Relembro que os operadores que aqui estão representados existem em muitas outras linguagens e que existem alguns outros dependendo da linguagem de programação.
Operadores de Atribuição | ||
Símbolo | Exemplo* | |
= | var = 20 → 20 | |
+= | var += 5 (igual a var = var + 5) → 25 | |
-= | var -= 10 → 15 | |
*= | var *= 4 → 60 | |
/= | var /= 5 → 12 | |
%= | var %= 5 → 2 |
* Os exemplos aqui apresentados estão todos encadeados. O valor de var no segundo exemplo é atribuído no primeiro exemplo e assim consequentemente. Os valores a negritos precedidos por uma seta (→) correspondem ao valor com que a variável ficou.
Os operadores que agora vamos abordar, serão extremamente úteis para a matéria seguinte (Loops) pois permitem-nos efetuar comparações entre variáveis numéricas. Ora veja:
Operadores Relacionais | ||
Nome | Símbolo | Exemplo |
Igualdade | == | x == y → retorna TRUE se x for igual a y e FALSE se tiverem valores diferentes |
Diferente | != | x != y → retorna TRUE se x for diferente de y ou FALSE se x for igual a y |
Maior | > | x > 40 |
Maior ou Igual | >= | y >= 25 |
Menor | < | y < 20 |
Menor ou Igual | <= | x <= y |
Loops "if else"
Os loops "if else" permitem executar determinados trechos de código dependendo do resultado de um teste lógico/condicional. A palavra if quer dizer "se" e else quer dizer, neste caso, "ou". A sintaxe deste loop é a seguinte: if (condição) { //Se a condição retornar TRUE então este código é executado. } else { //Caso contrário, isto é executado. }
Comentários
No código acima pode verificar que utilizámos duas barras (//) e depois escrevemos algo. Isto chamam-se comentários e são simplesmente ignorados pelo compilador.
Existem dois tipos de comentários: comentários de uma linha e comentários de várias linhas. Veja o seguinte exemplo:
#include
int main()
{
int n = 1; //Até ao final da linha é um comentário.
/*
TUDO ISTO é um comentário
*/
}
Imagine que tem uma variável que contém um número qualquer e quer que o seu código imprima se a variável é maior ou igual a 50 ou menor que 50. Como vai proceder?
Para criar este algoritmos precisamos de inicializar uma variável, efetuar um teste condicional (utilizando um operador relacional) e depois executar o código em questão. Veja:
#include
int main() { int n = 25;
if (n >= 50) { printf("O valor %d é maior ou igual a 50.", n); } else { printf("O valor %d é menor que 50.", n); }
return 0; } Este trecho de código imprime uma mensagem a dizer que 25 é menor que 50. Como pode ver, isto apenas nos diz se a variável é menor que 50 ou então maior ou igual.
Mas, e seu quiser que as seguintes condições sejam testadas:
- Se for maior que 50 imprime X.
- Se for igual a 50 imprime Y.
- Se for menor que 50 imprime Z.
Podíamos efetuar este teste condicional da seguinte forma:
if (n > 50) { printf("O valor %d é maior que 50.\n", n); }if (n < 50) { printf("O valor %d é menor que 50.\n", n); } if (n == 50) { printf("A variável é igual a 50.\n"); } Isto tornaria o código um pouco repetitivo. Podemos utilizar o comando else if que quer dizer "ou se" da seguinte forma: if (n == 50) { printf("A variável é igual a 50.\n"); } else if (n < 50) { printf("O valor %d é menor que 50.\n", n); } else { printf("O valor %d é maior que 50.\n", n); }
Como gerar um número aleatório
Nos exercícios seguintes, irá precisar de gerar um número aleatório. Para o fazer, irá necessitar de incluir mais um ficheiro .h que se chama time.h.
Pode utilizar a função para gerar números aleatórios da seguinte forma: #include
#include #include int main() { //Inicializar a seed para o número aleatório srand (time(NULL)); //Atribuir o número aleatório (entre 1 e 10) a uma variável int n = (rand() % 10) + 1;
return 0; } Mais tarde falaremos melhor sobre esta função. Deverá incluir a biblioteca "stdlib" que é uma biblioteca de propósito geral que contém um leque de funções muito utilizadas, incluindo a rand e a srand.
Exercícios
1 - Crie três variáveis. Duas com números à sua escolha e uma terceira com a soma das outras duas. De seguida, imprima o valor das duas.
2 - Crie uma variável do tipo número inteiro que contenha um valor entre 1 e 100. De seguida, duplique o seu valor.
Depois, verifique se o seu valor é igual a 100 e, caso seja, imprima uma mensagem de congratulação.
Caso o valor seja mais pequeno que 100, imprima o valor e que este é menor que 100. Faça o mesmo caso o número seja maior que 100 alterando a mensagem para corresponder.
3 - Crie um programa que resolva uma equação de 2º grau completa de 3 números aleatórios lembrando que a fórmula para resolver equações de 2º grau completas é a seguinte:
Na próxima semana iremos falar de como interagir com o utilizador. Será, talvez, um dos pontos mais emocionantes até hoje.
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ário.
Este artigo tem mais de um ano
Like!
Mas atenção, ao copiar o código o programa colocou o código html em vez do sinal maior e menor 😉
Obrigado pelo reparo. 🙂
Henrique, tenho algumas dúvidas no último exercício. Qual é o operador para a raiz quadrada? Qual o para o ±? Devemos incluir cada “lado” da fracção em parêntesis ou é só por por ordem?
Olá Gonçalo. Peço desculpa pela demora, tenho andado ocupado.
Para utilizar a raiz quadrada, inclua a biblioteca Math.h e utilize a função sqrt().
Relativamente ao ±, ele significa que temos que efetuar tanto a soma como a subtração. O que aconselho a fazer é primeiro verificar a equação com a soma/subtração e depois verificar com a outra operação e então mostrar as soluções obtidas.
Dica: caso a raiz quadrada seja 0, então basta efetuar um cálculo posterior (-b/2a) porque não é necessário adicionar/subtrair 0. Essa verificação pode ser feita para diminuir o tempo de execução e aumentar a velocidade.
Cumprimentos,
Henrique Dias =D
Pequeno reparo para não confundir mais tarde as pessoas. Se calhar o melhor nome para um if-else não seja loop mas sim controlo de fluxo ou teste condicional, tal como mencionado no artigo.
De resto muito bom o artigo. Continuação de bom trabalho.
Eu retiro o “se calhar” a essa frase… o if-else não é um loop, mas sim uma estrutura de controlo / seleção / decisão…
Um pouco mais de rigor na escrita dos artigos, não era mal pensado…
Diogo… o nosso benjamim está a precisar de ajuda, queres dar um help? 😉 A comunidade de iniciantes na programação está a crescer de uma forma que não contávamos, queres dar um help?
Tens razão, mas não era mais importante a correção do código em si? Não no sentido de estar logicamente mal escrito, mas pelo facto de quem quiser experimentar não conseguir usar os excertos tal como estão (parece que algum reconhecer automático reconheceu o código como HTML). Mas sim, não são loops nenhuns 🙂
Apenas um reparo/sugestão, a indentação dos códigos poderá não estar para alguns perceptível, nomeadamente as instruções if else encadeadas e o uso de chaves na relação Condição->Instrução para uma leitura mais simplificada do código.
De qualquer maneira excelente tutorial, continuem o bom trabalho 😉
vcs deviam ensinar o swift para programar para ios, o unico SO util
O que faz o fanatismo e a ignorância…
Por falar em utilidade, o que achas que se pode dizer do teu comentário?
Para quem anda na universidade dá jeito saber programar em C para programas da calculadora. iOS util? xD
Excelente trabalho, muitos parabéns…. =D
Já agora que falamos aqui de programação, eu começei agora a programar em 4gl coisa totalmente desconhecida para mim. Alguém me pode indicar onde posso arranjar material para tal?
Obrigado
Olá e obrigado!
4GL não são linguagens de programação de 4ª geração. Se sim, qual delas é? Progress 4GL? =D
Yap!! São mesmo linguagens de 4ª geração, um tópico interessante, visto que é uma linguagem já antiga mais ainda muito utilizada, não sei se felizmente ou infelizmente.. lol!! Estou a programar em Genero Studio.Comecei há cerca de 2 meses.
Mais propriamente o antigo Informix =D
Bons artigos! Só não gostei lá muito da imagem deste artigo, faz-me lembrar mais eletromagnetismo do que propriamente “programação”… 😛
Ahah. Obrigado 🙂
Boa noite, gostaria q explicassem porque tem de inicializar o seed ou o que é isso?
É que sempre só ouvi o rand().
Em suma, poderiam explicar o srand? Obrigado
Olá VM!
A função srand serve para “plantar” o gerador de números aleatórios que a função rand irá utilizar. Com isto, podemos personalizar o algoritmo que produz o número aleatório.
Cumps,
Boas Henrique,
Parabéns pelos artigos 🙂
Queria apenas deixar uma opinião…
Usas uma sintaxe “á la c89, ou gnu”…
faz a declaração das variáveis primeiro e só depois a afectação das mesmas 😉
porque no c89, a declaração de variáveis deve ser a primeira coisa a fazer 😉
se fizeres as duas coisas ao mesmo tempo, mesmo assim devem estar no inicio das funções…
Os Comentários individuais(“//”), não existem no c89, vais receber um warning…
Continua o bom trabalho 😉
cmps
Olá!
Obrigado pela informação, útil. Da próxima vez irei ter em atenção esses pontos. 🙂
#include // http://linux.die.net/man/3/srand
gosto + do mono y cs.
http://monodevelop.com/
se é para apernder que de para todas… wp,and,ios,win10,Linux, BSD, UNIX, Mac OS X, Solaris.
mono é um “producto envenenado”…não obrigado!
Entre Mono e Java, preferia Java, que permite a utilização do OpenJDK de borla, embora que a tecnologia na mesma seja proprietária, já a M$ depende da tecnologia Java, na sua VM e como tal Mono a mesma coisa…pois, o java(versão Não openJDK) apenas licenciou o java grátis para windows, pelo que a VM Mono…está numa nuvem de incertezas sombria…
C corre em todo o lado, não sei se existe linguagem que corra em mais sítios que C…
É por ser para correr em todo o lado que muito provavelmente se escolheu a linguagem tida como a melhor…
[DUVIDA]
*Como se pede ao programa a parte inteira da divisão entre 10 por 3?
10/3 (em C, se o dividendo e o divisor forem inteiros, o resultado é a divisão inteira).
DUVIDA
Boas.
Na primeira “aula” Vamos programar? Vinha a opção para fazer o download em PDF, mas nos seguintes “aulas” não era possivel. Sera possivel fornecer as outras “aulas” em PDF.
Olá Jamiro!
Todas as “aulas” têm tido uma opção para descarregar a versão PDF. No final dos artigos, no retângulo azul, está lá um ícone com o símbolo de um PDF para descarregar. Hás-de ver =D
Tens razão.
Como está diferente, não reparei.
Obrigado pelo excelente trabalho.
Obrigado nós 🙂
[DUVIDA]
Não estou consguir usar a função para numeros aleatorios alguma dica???
Obtenho o erro main.cpp:6:18: error: ‘srand’ was not declared in this scope
main.cpp:8:15: error: ‘rand’ was not declared in this scope
Já fiz copy paste do codigo aqui colocado e mesma assim nada.
Obrigado
Pode enviar o conteúdo de todo o ficheiro? Coloque o ficheiro no GitHub Gist ou no Pastebin, por exemplo, para uma fácil partilha e depois envie-nos o link pelos comentários que tentaremos ajudar 🙂
Olá obrigado pela rápida resposta, em relação ao zip com as soluções se não desse muito trabalho acho que era interessante.
Já em relação ao ficheiro com o qual me dá erro e não consigo criar numeros aleatorios encontra-se no seguinte link:
gist
Então, a partir de agora iremos colocar um “zip” com as soluções.
A resposta ao erro coloquei nos comentários do Gist que enviaste. 🙂
Obrigado isso resolveu o erro, mas diz-me a biblioteca /(standart input/output) e a para que situações mais a devo usar??
desculpa o comentario ficou com palavras ocultas devido ao que aos simbolos usados o que eu queria perguntae era a biblioteca stdio é standart input e output e a stdlib é o que, quando a devo usar??
Olá Márcio!
O Netbeans, o IDE que estou a utilizar, importa sempre as bibliotecas “stdio” e “stdlib” por isso esqueci-me de o colocar no artigo.
A bibliteca “stdlib” é uma biblioteca de propósito geral que contém várias das funções mais utilizadas, contendo algumas funções dos diversos campos, incluindo a Matemática.
Pode ver aqui as funções que esta biblioteca contém.
Agora, vou adicionar essa informação no artigo. Bons estudos/trabalho e Boas Festas 🙂
Boas Festas 😀
E já agora mais uma pergunta não havia um zip para descarregar com as soluções dos exercicios?? Ou sou só eu que não estou a ver o ficheiro para descarregar?
Não, mas se for necessário começaremos a colocar nos próximos tutoriais. O que acha?
Ao resolver o exercicio da equação de segundo grau e utilizando a função rand por vezes o programa retornava-me “nan”. Reparei que só acontecia quando o valor da raiz era menor que 0! Que posso fazer para corrigir isso ?
Quando o valor que está dentro da raiz é menor que 0, não se deve continuar a resolver a equação, dizendo-se que é uma Equação Impossível.
Valores negativos em raízes só são admitidos no grupo dos Números Imaginários, mas nós estamos a trabalhar com Números Reais.
A sigla NaN quer dizer Not a Number. O problema, pelo que me parece, não é com a função rand, mas com o fato de não pudermos resolver raízes de números negativos.
O que recomendo a fazer é o seguinte:
– Quando b^2-4*a*c < 0, imprime “Equação Impossível”.
– Quando b^2-4*a*c = 0, só existe uma solução, por isso mostrar o resultado de -b/2a.
– Quando b^2-4*a*c > 0, existem duas soluções, por isso devem-se mostrar ambos os resultados.
Cumprimentos
falta ai dixer que se o valor de A for igual a Zero e impossivel, pois nao e possivel dividir um numero real por zero
if(a=0){
printf(“IMPOSSIVELÇ DIIVIDIR POR ZERO”);
}else if(…){…}
Uma pequena observação, não estou a usar o netBeans mas sim o Eclipse em Ubuntu.