Tutoriais

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

45 Comentários

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.

programar



[field name=iframe]

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 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:

2g


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.

Também pode gostar

Comentários

45

Deixe um comentário

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

  1. Avatar de Luís Cruz
    Luís Cruz

    Like!

    Mas atenção, ao copiar o código o programa colocou o código html em vez do sinal maior e menor 😉

    1. Avatar de Henrique Dias

      Obrigado pelo reparo. 🙂

      1. Avatar de Gonçalo Santos
        Gonçalo Santos

        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?

        1. Avatar de Henrique Dias

          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

  2. Avatar de SSaraiva
    SSaraiva

    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.

    1. Avatar de Diogo
      Diogo

      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…

      1. Avatar de Vítor M.

        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?

      2. Avatar de Diogo Jesus
        Diogo Jesus

        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 🙂

  3. Avatar de Gonkali
    Gonkali

    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 😉

  4. Avatar de Marco
    Marco

    vcs deviam ensinar o swift para programar para ios, o unico SO util

    1. Avatar de Gonkali
      Gonkali

      O que faz o fanatismo e a ignorância…

    2. Avatar de Diogo Jesus
      Diogo Jesus

      Por falar em utilidade, o que achas que se pode dizer do teu comentário?

    3. Avatar de Alex
      Alex

      Para quem anda na universidade dá jeito saber programar em C para programas da calculadora. iOS util? xD

  5. Avatar de Ricardo
    Ricardo

    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

    1. Avatar de Henrique Dias

      Olá e obrigado!

      4GL não são linguagens de programação de 4ª geração. Se sim, qual delas é? Progress 4GL? =D

      1. Avatar de Ricardo
        Ricardo

        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.

      2. Avatar de Ricardo
        Ricardo

        Mais propriamente o antigo Informix =D

  6. Avatar de Mr. Antunes
    Mr. Antunes

    Bons artigos! Só não gostei lá muito da imagem deste artigo, faz-me lembrar mais eletromagnetismo do que propriamente “programação”… 😛

  7. Avatar de VM
    VM

    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

    1. Avatar de Henrique Dias

      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,

  8. Avatar de lmx
    lmx

    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

    1. Avatar de Henrique Dias

      Olá!

      Obrigado pela informação, útil. Da próxima vez irei ter em atenção esses pontos. 🙂

  9. Avatar de sakura
    sakura

    #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.

    1. Avatar de lmx
      lmx

      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…

  10. Avatar de Leitor
    Leitor

    [DUVIDA]
    *Como se pede ao programa a parte inteira da divisão entre 10 por 3?

    1. Avatar de cs
      cs

      10/3 (em C, se o dividendo e o divisor forem inteiros, o resultado é a divisão inteira).

  11. Avatar de Jamiro
    Jamiro

    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.

    1. Avatar de Henrique Dias

      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

      1. Avatar de Jamiro
        Jamiro

        Tens razão.
        Como está diferente, não reparei.
        Obrigado pelo excelente trabalho.

  12. Avatar de Marcio
    Marcio

    [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

    1. Avatar de Henrique Dias

      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 🙂

      1. Avatar de Marcio
        Marcio

        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

        1. Avatar de Henrique Dias

          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. 🙂

          1. Avatar de Marcio
            Marcio

            Obrigado isso resolveu o erro, mas diz-me a biblioteca /(standart input/output) e a para que situações mais a devo usar??

          2. Avatar de Marcio
            Marcio

            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??

          3. Avatar de Henrique Dias

            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 🙂

          4. Avatar de marcio
            marcio

            Boas Festas 😀

  13. Avatar de marcio
    marcio

    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?

    1. Avatar de Henrique Dias

      Não, mas se for necessário começaremos a colocar nos próximos tutoriais. O que acha?

  14. Avatar de helder
    helder

    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 ?

    1. Avatar de Henrique Dias

      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

      1. Avatar de angel
        angel

        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(…){…}

  15. Avatar de helder
    helder

    Uma pequena observação, não estou a usar o netBeans mas sim o Eclipse em Ubuntu.