Mudanças entre as edições de "Programação 1 - Engenharia - Comandos de Decisão no C"

De MediaWiki do Campus São José
Ir para navegação Ir para pesquisar
Linha 428: Linha 428:
 
-->
 
-->
 
3. Implementar um programa para ler 4 números inteiros e imprimir uma mensagem caso a soma dos dois primeiros seja igual ou menor que a soma dos dois últimos.
 
3. Implementar um programa para ler 4 números inteiros e imprimir uma mensagem caso a soma dos dois primeiros seja igual ou menor que a soma dos dois últimos.
{{collapse top|Solução - Exercicio 03}}
+
{{collapse top|Solução - Exercício 03}}
 +
<!--
 
<syntaxhighlight lang=c>
 
<syntaxhighlight lang=c>
 
#include <stdio.h>
 
#include <stdio.h>
Linha 453: Linha 454:
 
}
 
}
 
</syntaxhighlight>
 
</syntaxhighlight>
 +
-->
 
{{collapse bottom}}
 
{{collapse bottom}}
<!--<syntaxhighlight lang=c>
+
<!--
 +
<syntaxhighlight lang=c>
 
main()
 
main()
 
{
 
{
Linha 478: Linha 481:
 
-->
 
-->
 
4. Implementar um programa para ler dois números reais e, na sequência, um número inteiro. Se o número inteiro for 1 os dois números iniciais deverão ser somados, se for 2 eles serão subtraídos, se for 3 eles serão multiplicados e se for 4 serão divididos. Mostrar mensagem de erro se o número inteiro não estiver na faixa de 1 a 4. Mostrar mensagem caso a divisão não seja possível.
 
4. Implementar um programa para ler dois números reais e, na sequência, um número inteiro. Se o número inteiro for 1 os dois números iniciais deverão ser somados, se for 2 eles serão subtraídos, se for 3 eles serão multiplicados e se for 4 serão divididos. Mostrar mensagem de erro se o número inteiro não estiver na faixa de 1 a 4. Mostrar mensagem caso a divisão não seja possível.
{{collapse top|Solução - Exercicio 04}}
+
{{collapse top|Solução - Exercício 04}}
 +
<!--
 
<syntaxhighlight lang=c>
 
<syntaxhighlight lang=c>
 
#include <stdio.h>
 
#include <stdio.h>
Linha 521: Linha 525:
 
}
 
}
 
</syntaxhighlight>
 
</syntaxhighlight>
 +
-->
 
{{collapse bottom}}
 
{{collapse bottom}}
 
<!--
 
<!--
Linha 560: Linha 565:
 
-->
 
-->
 
5. Um estudo sobre sensibilidade de pessoas a temperaturas da água identificou que a maioria das pessoas considera fria a água com temperaturas abaixo de 25 graus, morna entre 25 e 30 graus, e quente acima de 30 graus. Escreva um algoritmo na forma de fluxograma que mostre as palavras "fria", "morna" ou "quente" dependendo da temperatura da água que for informada. Implemente o algoritmo na forma de um programa C.
 
5. Um estudo sobre sensibilidade de pessoas a temperaturas da água identificou que a maioria das pessoas considera fria a água com temperaturas abaixo de 25 graus, morna entre 25 e 30 graus, e quente acima de 30 graus. Escreva um algoritmo na forma de fluxograma que mostre as palavras "fria", "morna" ou "quente" dependendo da temperatura da água que for informada. Implemente o algoritmo na forma de um programa C.
{{collapse top|Solução - Exercicio 05}}
+
{{collapse top|Solução - Exercício 05}}
 +
<!--
 
<syntaxhighlight lang=c>
 
<syntaxhighlight lang=c>
 
#include <stdio.h>
 
#include <stdio.h>
Linha 582: Linha 588:
 
}
 
}
 
</syntaxhighlight>
 
</syntaxhighlight>
 +
-->
 
{{collapse bottom}}
 
{{collapse bottom}}
6. Implementar um programa que recebe três números reais e então o programa testa se estes números podem formar um triângulo EQUILÁTERO, ISÓSCELES, ESCALENO ou NÃO pode ser triângulo. (ver pseudocódigo abaixo).<code>
+
6. Implementar um programa que recebe três números reais e então o programa testa se estes números podem formar um triângulo EQUILÁTERO, ISÓSCELES, ESCALENO ou NÃO pode ser triângulo. (ver pseudocódigo abaixo).
ALGORITMO trangulo
+
<code>
 +
ALGORITMO triangulo
 
VARIAVEIS
 
VARIAVEIS
 
   lado1,lado2,lado3: real
 
   lado1,lado2,lado3: real
Linha 606: Linha 614:
 
FIM
 
FIM
 
</syntaxhighlight>
 
</syntaxhighlight>
{{collapse top|Solução - Exercicio 06}}
+
{{collapse top|Solução - Exercício 06}}
 +
<!--
 
<syntaxhighlight lang=c>
 
<syntaxhighlight lang=c>
 
#include<stdio.h>
 
#include<stdio.h>
Linha 629: Linha 638:
 
       printf("escaleno\n");       
 
       printf("escaleno\n");       
 
   }
 
   }
 
 
 
 
}
 
}
 
</syntaxhighlight>
 
</syntaxhighlight>
 +
-->
 
{{collapse bottom}}
 
{{collapse bottom}}
 
7. Implementar um programa C para converter um ângulo em radianos para graus.
 
7. Implementar um programa C para converter um ângulo em radianos para graus.

Edição das 17h21min de 20 de agosto de 2019

Objetivos

  • Utilizar os operadores relacionais e lógicos na programação C
  • um pouco mais sobre variáveis: tipo char;
  • Utilizar o comando de decisão if else;
  • Usar comandos if else aninhados;
  • compreender e saber usar blocos (composição de instruções).

Operadores Relacionais e Lógicos no C

Os operadores relacionais e lógicos são os mesmos vistos na aulas anteriores. Estes operadores serão amplamente usados em comandos de decisão. Entretanto, nada impede que tais operadores sejam usados diretamente em expressões com atribuição.

Operador Significado
> maior que
>= maior ou igual que
< menor que
<= menor ou igual que
== igual a (se o operando a esquerda é igual ao da direita)
!= diferente de (se o operando a esquerda é diferente do da direita)


Operador Significado
&& AND (E)
|| OR (OU)
! NOT (NÃO)


Exemplo

#include <stdio.h>
 
int main()
{
 int x,y,resultado;
 
 printf("Entre com o valor de x => ");
 scanf ("%d", &x);
 printf("Entre com o valor de y => ");
 scanf ("%d", &y);
 resultado = (x > y); 
 printf("valor de x>y => %d \n", resultado);
}


Observe que ao executar este programa, quando x for maior que y o resultado será 1. Caso contrário 0. No C qualquer valor que resulte diferente de 0 será considerado como VERDADEIRO e qualquer valor 0 será FALSO. Isto será amplamente usado nos comandos de decisão.

Comandos de decisão if() e if() else

Em muitos momentos durante a execução de um programa será necessário testar uma expressão para verificar se ela é VERDADEIRA ou FALSA. Dependendo desta condição, o programa seguirá um ou outro fluxo de execução. Seja o exemplo abaixo:

 

#include <stdio.h>

main()
{
 
  int x; /* declaração de uma variável inteira */
  int y;  /* declaração de uma variável inteira */

  printf ("Entre com o valor de x ");
  scanf("%d",&x);

  printf ("Entre com o valor de y ");
  scanf("%d",&y);

  if (y>x)
     printf("MSG2:y é maior que x\n");
  else
     printf("MSG3:y é igual ou menor que x\n");
 
}

Neste exemplo, caso o valor de y seja maior que o de x será impresso a MSG2, caso contrário ('else') será impressa a MSG3. OBSERVE que 'if' e 'else' são PALAVRAS RESERVADAS do C. Não poderão ser usadas como nomes de variáveis ou de funções. OBSERVE também que os parênteses são OBRIGATÓRIOS após o 'if'.

Veja a relação com um fluxograma:

FluxogramaRelacaoIfElse.jpg

Observe que NÃO é obrigatório a parte 'else' !!!

 

#include <stdio.h>

main()
{
 
  int x; /* declaração de uma variável inteira */
  int y;  /* declaração de uma variável inteira */

  printf ("Entre com o valor de x ");
  scanf("%d",&x);

  printf ("Entre com o valor de y ");
  scanf("%d",&y);

  if (y>x)
     printf("MSG1:y é maior que x\n");

  printf("MSG_FINALx\n");
 
}

Observe o fluxograma correspondente a este código e a relação com o fluxograma anterior:

FluxogramaRelacaoIfSemElse.jpg

Uso de blocos de instruções

Outro exemplo, usando blocos:

 
#include <stdio.h>

main()
{
 
  int x,y,z; /* declaração de uma variável inteira */

  printf ("Entre com o valor de x ");
  scanf("%d",&x);

  printf ("Entre com o valor de y ");
  scanf("%d",&y);

  if (y>x) {
     printf("MSG1: y é maior que x\n");
     z = y-x;
     printf("MSG2: Neste caso z =  %d\n", z);
  } else {
     printf("MSG3: y é igual ou menor que x\n");
     z = x-y;
     printf("MSG4: Neste caso z =  %d\n", z);
  }
 
}
Como já citado, no C, qualquer expressão que resulta em 0 é considerada FALSA e qualquer expressão com valor diferente de 0 é VERDADEIRA.

Exemplo:

  if (2)
      printf("expressão sempre VERDADEIRA");
  if ('2')
      printf("expressão sempre VERDADEIRA");      
  if (1-1)
      printf("expressão sempre FALSA");
  if (x=1) /* um erro comum - sinal de atribuição no lugar de == */
      printf("expressão sempre VERDADEIRA");

Tipo Char

Uma variável do tipo caracter é tratada como um número inteiro e declarada com o tipo char, que na prática é um número inteiro de 1 byte.

Exemplo

#include <stdio.h>
 
main ()
{
  char x='A',y=65,w=0x41,z;
 
  scanf("%c",&z);
  printf("Caracter lido = %c\n",z);
  printf("Caracter lido = %d\n",z);
  printf("Caracter lido = %x\n",z);
  if (z==x)
      printf("Iguais 1\n");
  if (z==y)
      printf("Iguais 2\n");
  if (z==w)
      printf("Iguais 3\n");
}


Limpando sujeira do teclado

Múltiplas Condições

Se for necessário testar múltiplas condições pode-se usar um "else if" da forma:

#include <stdio.h>
 
main ()
{
  char x;
 
  printf("Entre com um caracter\n");
  scanf("%c",&x);

  if (x=='A')
      printf("Igual a A\n");
  else if(x>'F' && x < 'M')
      printf("Entre F e M\n");
  else if (x>='a' && x<='z')
      printf ("minúsculo\n");
  else
      printf ("Outro...\n");
}

Indentação

Indentação Estilos


Exercícios

1. Implementar um programa que lê um número inteiro e imprime se o número é par ou ímpar. SUGESTÃO: Usar o operador de resto.

Solução - Exercício 01

2. Implementar um programa em C para ler dois números inteiros e imprimir uma mensagem indicando se os números lidos são iguais ou diferentes. Caso sejam diferentes, computar a média dos mesmos.

Solução - Exercício 02

3. Implementar um programa para ler 4 números inteiros e imprimir uma mensagem caso a soma dos dois primeiros seja igual ou menor que a soma dos dois últimos.

Solução - Exercício 03

4. Implementar um programa para ler dois números reais e, na sequência, um número inteiro. Se o número inteiro for 1 os dois números iniciais deverão ser somados, se for 2 eles serão subtraídos, se for 3 eles serão multiplicados e se for 4 serão divididos. Mostrar mensagem de erro se o número inteiro não estiver na faixa de 1 a 4. Mostrar mensagem caso a divisão não seja possível.

Solução - Exercício 04

5. Um estudo sobre sensibilidade de pessoas a temperaturas da água identificou que a maioria das pessoas considera fria a água com temperaturas abaixo de 25 graus, morna entre 25 e 30 graus, e quente acima de 30 graus. Escreva um algoritmo na forma de fluxograma que mostre as palavras "fria", "morna" ou "quente" dependendo da temperatura da água que for informada. Implemente o algoritmo na forma de um programa C.

Solução - Exercício 05

6. Implementar um programa que recebe três números reais e então o programa testa se estes números podem formar um triângulo EQUILÁTERO, ISÓSCELES, ESCALENO ou NÃO pode ser triângulo. (ver pseudocódigo abaixo). ALGORITMO triangulo VARIAVEIS

 lado1,lado2,lado3: real

INICIO

 Ler lado1
 Ler lado2
 Ler lado3
 SE lado1>(lado2+lado3) OU lado2>(lado1+lado3) OU lado3>(lado1+lado2) ENTÃO
     MOSTRAR "não é triângulo"
 SENÃO
     SE lado1==lado2 E lado1==lado3 ENTÃO
        MOSTRAR "equilatero"
     SENAO
        SE lado1==lado2 OU lado1==lado3 OU lado2==lado3 ENTÃO
            MOSTRAR "isósceles"
        SENÃO
            MOSTRAR "escaleno"
        FIMSE
     FIMSE
 FIMSE

FIM </syntaxhighlight>

Solução - Exercício 06

7. Implementar um programa C para converter um ângulo em radianos para graus.

Solução - Exercicio 07
#include <stdio.h>
 
main ()
{
  float rad,graus;
  
 
  printf("Entre com o angulo em rad\n");
  scanf("%f",&rad);
 
  graus = rad*(180/3.1415);
  printf("O angulo em graus = %f\n",graus);
  
}

8. Implementar um programa C que recebe os 3 coeficientes de uma equação do segundo grau e então determina as raízes da mesma. Usar a função sqrtf (ver http://en.cppreference.com/w/c/numeric/math/sqrt).

Solução - Exercicio 08
#include <stdio.h>
#include <math.h> //precisa incluir para usar a função sqrt()
//Alem disso na hora da compilação precisa-se utilizar o comando "-lm" para linkar a biblioteca math.h com seu aplicativo.
//ficaria assim "gcc 'nome_do_arquivo' -o 'nome_de_saida_do_app' -lm"

main ()
{
    float a,b,c;
    float x1,x2;


    printf("Entre com o 'a'\n");
    scanf("%f",&a);
    printf("Entre com o 'b'\n");
    scanf("%f",&b);
    printf("Entre com o 'c'\n");
    scanf("%f",&c);

    if(a!=0) {
        x1 = ( -b + (sqrtf((b*b)-4*a*c)) )/(2*a);
        x2 = ( -b - (sqrtf((b*b)-4*a*c)) )/(2*a);
        printf("Raiz x1 : %f\n",x1);
        printf("Raiz x2 : %f\n",x2);
    } else {
        printf("O 'a' precisa ser diferente de zero\n");
    }
}

9. Uma empresa irá ajustar o salário de seus funcionários de acordo com a categoria de trabalho dos funcionários: CAT A (10% de aumento), CAT B (15% de aumento) e CAT C (20% de aumento). Faça um programa que leia o plano de trabalho e o salário atual de um funcionário e calcula e imprime o seu novo salário. Use o comando switch.

Solução - Exercicio 09
#include <stdio.h>


main ()
{
    float salario,novosalario;
    char cargo;


    printf("Entre com o salario do funcionario\n");
    scanf ("%f",&salario);
    printf("Entre com o cargo do funcionario(A,B,C):");
    scanf (" %c",&cargo);
    printf("%c\n",cargo);

    //para nao acontecer erros, verifica-se se o caracter é exatamente o solicitado, se sim, o programa executa normalmente.
    if(cargo== 'A' || cargo=='B' || cargo=='C') {
        switch(cargo) {
        case 'A':
            novosalario = (salario*0.1)+salario;
            printf("Novo salario do funcionario = %f\n", novosalario);
            break;
        case 'B':
            novosalario = (salario*0.15)+salario;
            printf("Novo salario do funcionario = %f\n", novosalario);
            break;
        case 'C':
            novosalario = (salario*0.2)+salario;
            printf("Novo salario do funcionario = %f\n", novosalario);
            break;
        }
    }
}

10. Faça um programa que leia um número entre 0 e 10, e escreva este número por extenso. Use o comando switch.

Solução - Exercicio 10
#include <stdio.h>


main ()
{
    int numero;



    printf("Entre com o numero de 0 ate 10\n");
    scanf ("%d",&numero);
    //para nao acontecer erros, verifica-se se o numero é exatamente o solicitado, se sim, o programa executa normalmente.
    if(numero > 0 || numero < 10) {
        switch(numero) {
        case 0:
            printf("Zero\n");
            break;
        case 1:
            printf("Um\n");
            break;
        case 2:
            printf("Dois\n");
            break;
        case 3:
            printf("Tres\n");
            break;
        case 4:
            printf("Quatro\n");
            break;
        case 5:
            printf("Cinco\n");
            break;
        case 6:
            printf("Seis\n");
            break;
        case 7:
            printf("Sete\n");
            break;
        case 8:
            printf("Oito\n");
            break;
        case 9:
            printf("Nove\n");
            break;
        case 10:
            printf("Dez\n");
            break;
        }
    }
}

11. Tente inferir as saídas do programa abaixo e depois o execute para conferir os resultados.

#include <stdio.h>
 
main ()
{
  int x;
  x = !( 1 || 0 );   
  printf ("x=%d\n",x);      
  x = !( 0 || 1 && 0 );
  printf ("x=%d\n",x);
  x = !( 0 || 1 && 1 );
  printf ("x=%d\n",x);     
  x = !( ( 0 || 1 ) && 1 );
  printf ("x=%d\n",x);  
}

Exercícios extras

1. Escreva um algoritmo que calcule as raízes de uma equação de 2o grau. Assuma que existam duas raízes reais.

Solução para o calculo de raízes - Exercício 1

2. Um radar de trânsito faz a medição de velocidade de veículos e, dependendo do valor, calcula a multa a ser aplicada. Em uma determinada via esse radar foi configurado da seguinte forma:

  • Se a velocidade for maior que 80 km/h, a multa é de R$ 360;
  • Se a velocidade for maior que 60 km/h, a multa é de R$ 180;
  • Se a velocidade for menor ou igual a 60 km/h, não há multa.

Escreva um algoritmo que calcule a multa de acordo com a velocidade de um veículo.

Solução - Exercício 2

3. Faça um programa em C que leia três números e no final informe o maior e o menor valor informado pelo usuário.

Solução para encontrar o Maior valor - Exercício 3

4. Um estudo sobre sensibilidade de pessoas a temperaturas da água identificou que a maioria das pessoas considera fria a água com temperaturas abaixo de 25 graus, morna entre 25 e 30 graus, e quente acima de 30 graus. Escreva um algoritmo que mostre as palavras "fria", "morna" ou "quente" dependendo da temperatura da água que for informada.

5. Faça um algoritmo que converta um número de 1 a 7 para o respectivo dia da semana (ex: 1 = domingo, 2 = 2a feira, e assim por diante).

Solução - Exercício 5