IEC081 Introdução à Ciência dos Computadores Estruturas Condicionais em Linguagem C Turma: 01A / 01B / 01C Professor: Fabíola Nakamura E-mail: [email protected] Página: iccufam.weebly.com Resolução de Problemas Algorítmicos Início 1 Identificar o problema 2 Definir as entradas e as saídas Decompor 3 Projetar o algoritmo 4 Converter o algoritmo em declarações da linguagem de programação 5 Testar o programa resultante Refinar passo a passo Conteúdo Estruturas de Programação Qualquer programa de computador pode ser escrito combinando-se os três tipos básicos de estruturas de programação: Sequencial Condicional Repetição Estruturas de Programação Teorema provado em 1966 por Corrado Böhm (1923-) e Giuseppe Jacopini (1936-2001) no artigo: “Flow Diagrams, Turing Machines And Languages With Only Two Formation Rules”. Estrutura Sequencial É a estrutura de programação mais simples. O fluxo de comandos do algoritmo segue a mesma sequência linear da nossa escrita: De cima para baixo Da esquerda para direita p/ baixo p/ esquerda a = 3 b = 4 m = (a + b)/2 print(m) Estrutura Condicional Permite alterar o fluxo de execução, de forma a selecionar qual parte do algoritmo deve ser executada. Essa decisão é tomada a partir de uma condição, que pode resultar apenas em: Verdade, Falsidade ou ? Condição verdadeira, condição falsa Verdadeiro ou falso são valores lógicos. São atributos da expressão condicional. O funcionamento correto do seu script não está condicionado a resultados lógicos com valor verdadeiro. quebro u? Estrutura Condicional Simples Quando a condição é verdadeira, o “bloco verdade” é executado. Quando a condição é falsa, o “bloco verdade” não é executado. início a, b, c delta ← b**2 – 4*a*c delta < 0 F if (delta < 0){ printf(“Nao tem raizes reais”); } fim V Não tem raízes reais Estrutura Condicional Simples :: Em C início a, b, c delta ← b**2 – 4*a*c delta < 0 F fim v Não tem raízes reais Estruturas Condicionais Compostas Quando a condição é verdadeira, o “bloco verdade” é executado. Quando a condição é falsa, o “bloco falsidade” é executado. início a, b, c delta ← b**2 – 4*a*c delta < 0 V F Tem raiz real fim Não tem raízes reais Estruturas Condicionais Compostas :: Em C início a, b, c delta ← b**2 – 4*a*c delta < 0 F Tem raiz real fim V Não tem raízes reais Indentação O comando else deve estar alinhado com o comandos if correspondente. Todos os comandos de um mesmo bloco deverão ter o mesmo recuo. Não confunda Problema 1 Uma lata de leite em pó da marca A, com 400g, custa R$ 8,39. Um saco de leite em pó da marca B, com 1kg, custa R$ 20,30. Qual marca tem o melhor preço? Problema 1 2 – Definir entradas e saídas Entradas Saídas Grandeza Unidade de medida Faixa de valores PrecoA R$ 8.39 PesoA kg 0.4 PrecoB R$ 20.30 PesoB kg 1.0 Marca --- {“A”, “B”} Problema 1 3 – Projetar algoritmo início PrecoA, PesoA PrecoB, PesoB rA ← PrecoA/PesoA rB ← PrecoB/PesoB rA > rB F marca ← “A” marca fim V marca ← “B” Problema 1 4 – Codificar em C Problema 2 y R x Problema 2 2 – Definir entradas e saídas Entradas Saídas Grandeza Unidade de medida Faixa de valores Raio --- >=0 Coordenada X de P --- Real Coordenada Y de P --- Real Localização de P --- {interior, exterior, na circunferencia} Problema 2 3 – Projetar algoritmo X**2 + Y**2 == R**2 V F Na circunferência X**2 + Y**2 < R**2 V P é interno F P é externo Problema 2 3 – Projetar algoritmo início C1 X**2 + Y**2 == R**2 R, X, Y C1 V Na circunferência C2 F C2 X**2 + Y**2 < R**2 F V Interno fim Externo Problema 2 4 – Codificar Problema 3 Projete um algoritmo para uma máquina caçaníquel que gere 3 números aleatórios entre 1 e 10. Se os três números forem iguais, o jogador ganha. Caso contrário, ele perde. Problema 3 2 – Definir entradas e saídas Entradas Saídas Grandeza Unidade de medida Faixa de valores N1 --- [1,10] N2 --- [1,10] N3 --- [1,10] Sucesso no jogo --- {Perdeu, Ganhou} Problema 3 3 – Projetar algoritmo N1 == N2 F V perdeu N2 == N3 F perdeu V ganhou Problema 3 3 – Projetar algoritmo início Gerar N1, N2, N3 N1 == N2 F V N2 == N3 F V Ganhou! Perdeu! Perdeu! fim Problema 3 4 – Codificar Problema 4 Dados três valores X, Y e Z, verifique: Se eles podem ser os comprimentos dos lados de um triângulo. Caso positivo, se o triângulo é equilátero, isósceles ou escaleno. Problema 4 1 – Identificar o problema Propriedade básica de um triângulo: O comprimento de cada lado de um triângulo é menor do que a soma dos comprimentos dos demais lados. Problema 4 2 – Definir entradas e saídas Entradas Saídas Saídas Grandeza Unidade de medida Faixa de valores X m >0 Y m >0 Z m >0 --- “Não é triângulo”, “Triângulo equilátero”, “Triângulo isósceles”, “Triângulo escaleno” mensagem Problema 4 3 – Projetar algoritmo início X, Y, Z C1 V Não é triângulo F C2 V Equilátero fim F C3 V Isósceles C1 (X >= Y + Z) OU (Y >= Z + X) OU (Z >= X + Y) C2 (X == Y) E (Y == Z) C3 (X == Y) OU (Y == Z) OU (Z == X) F Escaleno Problema 4 4 – Codificar Estruturas Condicionais Encadeadas Estruturas condicionais encadeadas (ou aninhadas) são estruturas condicionais dentro de outras estruturas condicionais. Quando um problema exige um longo encadeamento de ifs e elses, a criação de diversos níveis deslocados poderia causar confusão. Estruturas Condicionais Encadeadas :: Exemplo Δ<0 V F Δ=0 V F Calcular r1 e r2 fim Calcular r1 Sem solução Problema 5 Escrever um script em Python que leia um ângulo entre 0 e 360° e informe o ponto cardeal correspondente. 0° Problema 5 2 – Definir entradas e saídas Entradas Saídas Grandeza Unidade de medida Faixa de valores Ângulo graus [0; 360] Ponto Cardeal --- {N, S, L, O} Problema 5 3 – Projetar algoritmo Problema 5 4 – Codificar Problema 6 Problema 6 2 – Definir entradas e saídas Entradas Saídas Saídas Grandeza Unidade de medida Ano --- Mensagem --- Faixa de valores {bissexto, não bissexto} Problema 6 3 – Projetar algoritmo – versão 1 ano % 400 == 0 F V Bissexto ano % 100 == 0 F V Não bissexto ano % 4 == 0 V Bissexto F Não bissexto Problema 6 3 – Projetar algoritmo – versão 1 início C1 ano % 400 == 0 ano C2 ano % 100 == 0 C1 V F C3 C2 V Bissexto F C3 V Não bissexto fim Bissexto F Não bissexto ano % 4 == 0 Problema 6 4 – Codificar – versão 1 Problema 6 3 – Projetar algoritmo – versão 2 ano % 400 == 0 F V Bissexto ano % 100 == 0 F V Não bissexto ano % 4 == 0 V Bissexto Bissexto: ano % 400 == 0 OU F Não bissexto (ano % 100 ≠ 0) E (ano % 4 == 0) Problema 6 3 – Projetar algoritmo – versão 2 C1 início (ano % 400 == 0) OU ((ano % 100 ≠ 0) E (ano % 4 == 0)) ano V C1 F Não bissexto Bissexto fim Problema 6 4 – Codificar – versão 2 Dúvidas?