Capítulo 4: Condicionais

Documentos relacionados
Capítulo 2: Condicionais. Pontifícia Universidade Católica Departamento de Informática

INF1005: Programação 1. Condicionais. 08/03/10 (c) Rogério Rodrigues 1

Introdução a Programação de Jogos

Introdução à Programação

Introdução a Programação de Jogos

controle de fluxo - condicionais

Introdução à Engenharia ENG1000

Controle de Fluxo - Condicionais. INF1005 Programação I Profa. Simone D.J. Barbosa sala 410 RDC

Controle de Fluxo - Condicionais

Capítulo 4: Condicionais

Aula 02 -Introdução àlinguagc Programação: Estrutura-Seleção. OPL e IC1 Prof: Anilton Joaquim da Silva

Aula 8 Comandos de Seleção

Lógica de Programação I

Estruturas de seleção

Universidade Federal de Uberlândia Faculdade de Computação. Linguagem C: Operadores relacionais e lógicos estruturas condicionais If...

Introdução à Programação. Expressões Booleanas e Comandos Condicionais

Capítulo 4: Programando com Funções. Pontifícia Universidade Católica Departamento de Informática

Aula 05: Condicionais (if / else)

INF1007: Programação 2. 0 Revisão. 06/08/2015 (c) Dept. de Informática - PUC-Rio 1

Estruturas condicionais

LÓGICA DE PROGRAMAÇÃO. PROFª. M.Sc. JULIANA H Q BENACCHIO

ponteiros INF Programação I Prof. Roberto Azevedo

15/03/2018. Professor Ariel da Silva Dias Paradigma Imperativo

Linguagem C (estruturas condicionais)

Aula 01. Programação Condicional Programação repetitiva

Declarações. C diferencia letras maiúsculas de minúsculas! int n, N; n é diferente de N!

Cap. 3 Entrada e Saída e Controle de Fluxo

MC-102 Aula 04 Expressões Relacionais, Lógicas e Comandos Condicionais

Comandos de desvio de fluxo. Expressões lógicas.

Controle de Fluxo Utilizando C

Aula 6 Oficina de Programação Estruturas Condicionais no C. Profa. Elaine Faria UFU

Desenvolvimento de Aplicações Desktop

Introducao a Programacao Estruturas de decisão

Computação I (MAB120) DCC/UFRJ

Módulo 3 Controle de Fluxo

Linguagem C. André Tavares da Silva.

Introdução à Programação I

Programação Estruturada

Técnicas de Programação: Comandos de Controle de DEE UFPB

Estruturas de Seleção

Linguagens de Programação I

Capítulo 1: Introdução à Linguagem C. Pontifícia Universidade Católica Departamento de Informática

Comandos de desvio de fluxo. Expressões lógicas.

Introdução à Computação

Universidade Federal do Espírito Santo. Programação II. CT IX - Sala 201 Departamento de Informática Centro Tecnológico

Introdução à Programação I

ALGORITMO I ESTRUTURA DE CONTROLE DECISÃO SE / CASO;

Variáveis primitivas e Controle de fluxo

Linguagem C (repetição)

SSC 0301 IC para Engenharia Ambiental

Linguagem de Programação C. Comandos de Seleção e Desvio

Estruturas de Decisão e loops

Operadores. A linguagem C é muito rica em operadores internos. Ela define quatro classes de operadores:

Programação I Estruturas de Decisão

MC-102 Aula 05 Comandos Condicionais

ESTRUTURAS CONDICIONAIS. Baseado nos slides de autoria de Rosely Sanches e Simone Senger de Souza

Métodos Computacionais em Física

Métodos Computacionais. Comandos Condicionais e de Repetição em C

SSC 0301 IC para Engenharia Ambiental

Introdução à Ciência da Computação

Aula 14: Estruturas de Seleção e Controle em C

Aula 12- Variáveis e valores reais

LINGUAGEM C: COMANDOS DE CONTROLE CONDICIONAL

GFM015 Introdução à Computação Algoritmos e Programação / Controle de Fluxo / Estutura Condicional

Introdução à Computação

PROGRAMAÇÃO DE COMPUTADORES V - TCC Modulo 6 : Funções Escopo de Variáveis: Globais x Locais Aura - Erick

Modulo 3: Else, Case, For...

Lógica de Programação I

Decisão. Prof. Dr. Silvio do Lago Pereira. Departamento de Tecnologia da Informação Faculdade de Tecnologia de São Paulo

Estruturas Condicionais

C Comandos de Controle

INF1005: Programação 1. Repetições. 08/03/10 (c) Paula Rodrigues 1

Solucionário de. Programação

ESTRUTURAS CONDICIONAIS. Introdução à Ciência da ComputaçãoI Simone Senger de Souza

Programação de Computadores I Introdução ao C PROFESSORA CINTIA CAETANO

Fundamentos de Programação 1

Linguagem de Programação I. Aula 07 Linguagem C: Estruturas de Controle

Sistemas Operacionais e Introdução à Programação. Programação com linguagem C

LÓGICA DE PROGRAMAÇÃO. PROFª. M.Sc. JULIANA H Q BENACCHIO

INF 1620 P1-04/10/03 Questão 1 Nome:

3. Linguagem de Programação C

Algoritmos e Programação

Entrada. Comando 1 Comando 2. Saída

Modulo 4: while do while (limites de variáveis)

Linguagem C: Elementos fundamentais

Introdução à Linguagem C Variáveis e Expressões

INF1005 Programação I. Pontifícia Universidade Católica Departamento de Informática

MC102 Algoritmos e Programação de Computadores

COMANDOS DE CONTROLE DE FLUXO. Luís Charneca.

Programação de Computadores I Funções de Repetição da Linguagem C PROFESSORA CINTIA CAETANO

LÓGICA DE PROGRAMAÇÃO. PROFª. M.Sc. JULIANA H Q BENACCHIO

Algoritmos e Técnicas de Programação

Legibilidade do código fonte

Programação I PRG Engenharia de Telecomunicações 2ª Fase Professor: Cleber Jorge Amaral

Aula 6: Comandos Estruturados Estrutura Condicional

Estruturas%de%seleção%

Programação para Games I

CCO 016 / COM 110 Fundamentos de Programação

ACH5531 Introdução à Computação

Programação 1. Atribuição, operadores aritméticos, entrada de dados. Técnico em Eletrônica Semestre 5 02

Transcrição:

Capítulo 4: Condicionais INF1004 e INF1005 Programação 1 Pontifícia Universidade Católica Departamento de Informática Tomada de Decisão Até o momento, todas as instruções eram executadas, uma após a outra. No capítulo 3, vimos que a chamada de uma função transferia a execução para uma outra função, mas dentro do corpo de cada função as instruções eram executadas na ordem em que foram codificadas. Em geral, precisamos ter maior controle na sequência de instruções que devem ser executadas. É fundamental que seja possível tomar diferentes decisões baseado em condições que são avaliadas em tempo de execução TOMADAS DE DECISÃO! 1

Tomada de Decisão Em C, a tomada de decisão é construída através do comando if: Podemos ter o if simples se apenas a expressão booleana retornar verdadeiro (true): if ( _expressão_booleana_ ) { _bloco_de_comandos_ Por exemplo: if (nota < 5.0) { printf("reprovado"); Tomada de Decisão Como também tratar se a expressão booleana retornar falso (false): if ( _expressão_booleana_ ) { _bloco_de_comandos_1 else { _bloco_de_comandos_2 Por exemplo: if (nota < 5.0) { printf("reprovado"); else { printf("aprovado"); 2

Tomada de Decisão A sintaxe da linguagem C permite ainda que a simples codificação em sequência de comandos if-else resulte na construção de seleção exclusiva dentre múltiplas condições: if ( _condição_1_ ) { _bloco_de_comandos_1 else if ( _condição_2_ ) { _bloco_de_comandos_2 else if ( _condição_3_ ) { _bloco_de_comandos_3 Nestas construções, se a expressão booleana correspondente à primeira condição resultar em verdadeiro, apenas o primeiro bloco de comandos é executado, e as outras condições não são sequer avaliadas. Senão, se a expressão da segunda condição resultar em verdadeiro, apenas o segundo bloco de comandos é executado, e assim por diante. Tomada de Decisão Por exemplo: if (nota < 3.0) { printf("reprovado"); else if (nota >= 5.0) { printf("aprovado"); else { printf("em prova final"); 3

Expressões Booleanas Uma expressão booleana é uma expressão que, quando avaliada, resulta no valor falso ou verdadeiro. A linguagem C não tem um tipo de dado específico para armazenar valores booleanos: Em C, o valor booleano é representado por um valor inteiro:» 0 significa falso e qualquer outro valor diferente de zero significa verdadeiro.» Em geral, usa-se 1 para representar o valor verdadeiro, e qualquer expressão booleana que resulta em verdadeiro resulta no valor 1. Expressões Booleanas Uma expressão booleana é construída através da utilização de operadores relacionais. maior que (>), menor que (<), maior ou igual a (>=), menor ou igual a (<=), diferente de (!=), igual a (==). Todos estes operadores comparam dois operandos, resultando no valor 0 (falso) ou 1 (verdadeiro). 4

Expressões Booleanas Expressões booleanas também podem ser formadas com operadores lógicos. negação (!), conjunção (&&) e disjunção ( ). Operadores lógicos combinam expressões ou valores booleanos, resultando em um valor booleano (0 ou 1). Conjunção (AND) Disjunção (OR) Negação (NOT) Operando 1 Operando 2 Resultado Operando 1 Operando 2 Resultado Operando Resultado Falso Falso Falso Falso Falso Falso Falso Verdadeiro Falso Verdadeiro Falso Falso Verdadeiro Verdadeiro Verdadeiro Falso Verdadeiro Falso Falso Verdadeiro Falso Verdadeiro Verdadeiro Verdadeiro Verdadeiro Verdadeiro Verdadeiro Verdadeiro Expressões Booleanas Exemplo 1 (and): if (media >= 5.0 && nota1 >= 3.0 && nota2 >=3.0 && nota3 >= 3.0) { printf("aprovado"); Exemplo 2 (or): if (media < 5.0 nota1 < 3.0 nota2 < 3.0 nota3 < 3.0) { printf("em prova final"); Exemplo 3 (not): if (!(media < 5.0 nota1 < 3.0 nota2 < 3.0 nota3 < 3.0) ) { printf( Aprovado"); 5

Exemplo: Expressões Booleanas Vamos considerar como exemplo um programa para converter o critério de avaliação de alunos em escolas brasileiras para o critério utilizado em escolas americanas. Nas escolas brasileiras, a avaliação dos alunos é reportada por uma nota que varia de 0 a 10. Nas escolas americanas, a avaliação dos alunos é feita por conceito: A, B, C, D, ou F. Podemos assumir a seguinte equivalência entre os sistemas de avaliação: A (9.0 a 10.0), B (8.0 a 8.9), C (7.0 a 7.9), D (5.0 a 6.9), e F (menor que 5.0) Exemplo: Expressões Booleanas #include <stdio.h> int main (void){ float nota; printf("entre com a nota: "); scanf("%f",&nota); if (nota >= 9.0) { printf("a"); if (nota >= 8.0 && nota < 9.0) { printf("b"); if (nota >= 7.0 && nota < 8.0) { printf("c"); if (nota >= 5.0 && nota < 7.0) { printf("d"); if (nota < 5.0) { printf("f"); return 0; 6

Expressões Booleanas É importante salientar a forma como a linguagem C avalia expressões booleanas compostas por operadores lógicos: Por exemplo, na avaliação da expressão (nota >= 8.0 && nota < 9.0), o computador primeiro avalia a expressão relacional nota >= 8.0. Dependendo do resultado desta expressão, a avaliação da segunda expressão relacional, nota < 9.0, pode ser omitida. Isto porque se o resultado da primeira expressão for falso, o resultado da expressão lógica como um todo será falso, independente do valor da segunda expressão, pois estamos usando o operador de conjunção (AND). Assim, como o resultado final não depende do resultado da segunda expressão relacional, esta expressão não é sequer avaliada. Ela só é avaliada se a primeira expressão resultar em verdadeiro. Situação similar ocorre quando usamos o operador de disjunção (OU). Neste caso, se a primeira expressão resultar em verdadeiro, a segunda expressão não é avaliada. Exemplo: Expressões Booleanas /* solução mais estruturada e mais eficiente */ #include <stdio.h> int main (void){ float nota; printf("entre com a nota: "); scanf("%f",&nota); if (nota >= 9.0){ printf("a"); else if (nota >= 8.0){ printf("b"); else if (nota >= 7.0){ printf("c"); else if (nota >= 5.0){ printf("d"); else{ printf("f"); return 0; 7

Blocos de Comandos Na linguagem C, podemos agrupar comandos em blocos, envolvendo-os com abre e fecha chaves ({), como fizemos para delimitar o bloco de comando if e else nas construções para tomada de decisões. Na verdade, podemos criar blocos de comandos em qualquer ponto do programa, bastando envolver comandos com chaves. Uma variável declarada dentro de um bloco existe enquanto os comandos do bloco estiverem sendo executados. Quando o bloco chega ao fim, as variáveis declaradas dentro dele deixam de existir. Blocos de Comandos Segundo o padrão C89 da linguagem C, uma variável só pode ser declarada no início de um bloco de comandos (mudou no padrão C99). Nas construções do comando if, os blocos são importantes para identificar o conjunto de comandos cuja execução está submetida à avaliação da expressão booleana. No entanto, se um bloco de comandos for constituído por apenas um único comando, as chaves podem ser omitidas. 8

Bloco de Comandos Voltando ao Exemplo #include <stdio.h> int main (void){ float nota; printf("entre com a nota: "); scanf("%f",&nota); if (nota >= 9.0) printf("a"); else if (nota >= 8.0) printf("b"); else if (nota >= 7.0) printf("c"); else if (nota >= 5.0) printf("d"); else printf("f"); return 0; Exemplo: Cálculo de Raízes em um Equação de 2º. Grau Como primeiro exemplo mais complexo, vamos discutir a construção de um programa para calcular as raízes de uma equação do segundo grau. Sabemos que as raízes de uma equação na forma ax 2 +bx+c=0 são dadas por: b ± b 4* a* c 2* a Este seria um problema de codificação direta de uma expressão matemática se não fosse pelo fato das raízes poderem não existir. Na verdade, a raiz quadrada só é definida para valores positivos. 9

Exemplo: Cálculo de Raízes em um Equação de 2º. Grau Se, dentro de um programa, tentarmos avaliar uma expressão matemática cujo resultado é indefinido, o resultado do programa certamente não será o desejado. Isto inclui ações como: tentar extrair a raiz quadrada de um número negativo, calcular o logaritmo de um número negativo, ou mesmo fazer uma divisão por zero. Por este motivo, devemos avaliar estas expressões apenas após certificarmos que os operandos são válidos. Exemplo: Cálculo de Raízes em um Equação de 2º. Grau #include <stdio.h> #include <math.h> int main (void){ double a, b, c; /* coeficientes */ double x1, x2; /* raízes */ double delta; printf("entre com os coeficientes (a b c):"); scanf("%lf", &a); scanf("%lf", &b); scanf("%lf", &c); if (a == 0.0) { printf("valor de 'a' nao pode ser zero."); return 1; delta = b*b - 4*a*c; if (delta < 0) { printf("raizes reais inexistentes."); else if (delta == 0.0) { x1 = -b / (2*a); printf("uma raiz real: %f", x1); else { delta = sqrt(delta); x1 = (-b + delta) / (2*a); x2 = (-b - delta) / (2*a); printf("duas raizes reais: %f e %f", x1, x2); return 0; 10

Exemplo: Cálculo de Volumes Vamos construir um programa que permita calcular o volume de vários tipos de objetos diferentes. A idéia é apresentar um menu para o usuário com os tipos de objetos suportados. O usuário então escolhe a opção desejada, entrar com os dados correspondentes e o programa exibe o volume computado. Para este nosso exemplo, vamos considerar o cálculo de volume dos seguintes objetos geométricos: caixa de lados a, b e c: volume = a*b*c esfera de raio r: volume = 4/3*PI*r 3 cilindro de raio r e altura h: volume = PI*r 2 *h cone de raio r e altura h: volume = 1/3*PI*r 2 *h #include <stdio.h> #include <math.h> #define PI 3.1415 Exemplo: Cálculo de Volumes void calcula_volume_caixa (void){ float a, b, c; printf("entre com os lados da caixa:"); scanf("%f %f %f", &a, &b, &c); printf("volume calculado para caixa: %f", a*b*c); void calcula_volume_esfera (void){ float r; printf("entre com o raio da esfera:"); scanf("%f", &r); printf("volume calculado para esfera: %f", 4.0/3.0*PI*pow(r,3); void calcula_volume_cilindro (void){ float r, h; printf("entre com o raio e altura do cilindro:"); scanf("%f %f", &r, &h); printf("volume calculado para o cilindro: %f", PI*pow(r,2)*h); void calcula_volume_cone (void){ float r, h; printf("entre com o raio e altura do cone:"); scanf("%f %f", &r, &h); printf("volume calculado para o cone: %f", PI*r*r*h/3.0); 11

Exemplo: Cálculo de Volumes (continuação) int main (void){ int escolha; /* exibe menu na tela */ printf("escolha uma opcao:\n"); printf("1 - Caixa\n"); printf("2 - Esfera\n"); printf("3 - Cilindro\n"); printf("4 - Cone\n"); /* lê opção escolhida e chama função correspondente */ scanf("%d", &escolha); if (escolha == 1) { calcula_volume_caixa(); else if (escolha == 2) { calcula_volume_esfera(); else if (escolha == 3) { calcula_volume_cilindro(); else if (escolha == 4) { calcula_volume_cone(); else { printf("opcao invalida."); return 0; A instrução switch A instrução switch é usada quando queremos testar várias possibilidades de fluxo de código mas não queremos usar vários else if. Desta forma, cada possibilidade é testada em um bloco case. Veja um exemplo: #include <stdio.h> int main(void) { int valor = 4; switch(valor){ case 0: printf("valor e igual a 0"); break; case 1: printf("valor e igual a 1"); break; case 2: printf("valor é igual a 2"); break; default: printf("nenhuma das anteriores"); printf("\n\n"); return 0; Veja que, se nenhuma das condições testadas em um bloco case for satisfatória, a parte default da instrução switch será executada. 12