Baixe o app para aproveitar ainda mais
Prévia do material em texto
Universidade Federal da Grande Dourados Faculdade de Ciências Exatas e de Tecnologias Curso de Bacharelado em Sistemas de Informação Algoritmos e Programação Estruturas de decisão (if...else, switch) Profª Janne Oeiras Lachi 1 Tomada de decisão ` O objetivo da aula é estudar a tomada de decisão ` Veremos: ` Desvio condicional simples ` Desvio condicional composto ` Desvio condicional encadeado 2 Desvio condicional simples ` Na Linguagem C utiliza-se a instrução: ` if (<condição>) ` Se a condição estabelecida for verdadeira, serão executadas todas as instruções definidas dentro do bloco do if ` Depois serão executadas todas as instruções existentes após o bloco do if ` Se a condição estabelecida for falsa, serão executadas as instruções definidas após o bloco do if 3 Desvio condicional simples int main() { if (<condicao>) { } return 0; } Comandos dentro do bloco se são executados caso a condição seja VERDADEIRA Por bloco queremos dizer o conjunto de comandos delimitado por { e } Se você utilizar apenas 1 instrução não precisa de { e } 4 Desvio condicional simples: exemplo #include <stdlib.h> #include <stdio.h> int main() { int x=1,a=0; system("chcp 1252 > nul"); if (0==1) { x = 0; a = 1; } printf("\nO número x é %d e a é %d\n", x, a); return 0; } O resultado mostrado na tela será: O número x é 1 e a é 0.5 Desvio condicional simples: exemplo #include <stdlib.h> #include <stdio.h> int main() { int x=1,a=0; system("chcp 1252 > nul"); if (0==1) x = 0; a = 1; printf("\nO número x é %d e a é %d\n", x, a); return 0; } Aqui a intenção era colocar 2 comandos dentro do if, porém não foram usados { e } para delimitar o bloco. Nesse caso a condição é FALSA, mas a atribuição a=1 será executada O resultado mostrado na tela será: O número x é 1 e a é 1.6 Desvio condicional simples: exemplo Não adianta somente dar o recuo nesse caso. É necessário delimitar com { e } Caso contrário o compilador entende que é para fazer if (0==1) x= 0; a=1; Ou seja, o bloco do if vai até o comando x=0; A atribuição a=1 é um comando na seqüência do comando if e por isso é executada. if (0==1) x = 0; a = 1; 7 Desvio condicional simples Comandos dentro do bloco if NÃO são executados caso a condição seja FALSA Somente o que vem depois int main() { if (<condicao>) { } . . . return 0; } Por isso, no exemplo errado anterior, a=1 é executado porque a comparação 0==1 é FALSA e não é executado o comando x=0;. if (0==1) x= 0; a=1; 8 Erro comum #include <stdlib.h> #include <stdio.h> int main() { int x=1,a=0; system("chcp 1252 > nul"); if (0==1); { x = 0; a = 1; } printf("\nO número x é %d e a é %d\n", x, a); return 0; } Colocar ; após a condição O if termina aqui Os comandos a seguir dentro das chaves não estão atrelados ao if e são executados O resultado mostrado na tela será: O número x é 0 e a é 1.9 Desvio condicional simples: exemplo Elaborar um algoritmo que leia dois valores numéricos reais desconhecidos. Em seguida o algoritmo deve efetuar a adição dos dois valores lidos e apresentar o resultado se ele for maior que 10. programa SOMA_MAIOR_10 var x, y, SOMA: real início escreva ″Informe dois números reais:″ leia x,y SOMA Å x+y se (SOMA>10) então escreva ″O valor da adição dos dois numeros eh:″, SOMA fim_se fim Se SOMA <=10, o algoritmo não produz nenhuma saída. 10 Construindo nosso programa em C #include <stdio.h> int main() { float x, y, soma; system("chcp 1252 > nul"); printf(“Informe dois números reais:”); scanf(“%f%f”, &x, &y); soma = x+y; if (soma > 10) { printf(“O valor da adição dos dois números é: %f”, soma); } return 0; } programa SOMA_MAIOR_10 var x, y, SOMA: real início escreva ″Informe dois números reais:″ leia x,y SOMA Å x+y se (SOMA>10) então escreva ″O valor da adição dos dois numeros eh:″, SOMA fim_se fim 11 Construindo nosso programa em C #include <stdio.h> int main() { float x, y, soma; system("chcp 1252 > nul"); printf(“Informe dois números reais:”); scanf(“%f%f”, &x, &y); soma = x+y; if (soma > 10) printf(“O valor da adição dos dois números é: %f”, soma); return 0; } Note que neste caso, você pode suprimir o uso de { } para delimitar o if porque dentro dele há apenas 1 comando (compare com o slide anterior). 12 Outro exemplo de erro #include <stdio.h> int main() { float x, y, soma; system("chcp 1252 > nul"); printf(“Informe dois números reais:”); scanf(“%f%f”, &x, &y); soma = x+y; if (soma > 10); printf(“O valor da adição dos dois números é: %f”, soma); return 0; } Neste caso, o compilador não dá erro Não tem o que fazer no if E sempre faz o printf que vem em seguida 13 Desvio condicional composto ` Na Linguagem C utiliza-se a instrução: ` if (<condição>) else ` Se a condição estabelecida for verdadeira, serão executadas todas as instruções definidas entre if (<condição>) else ` Se a condição estabelecida for falsa, serão executadas as instruções definidas dentro do bloco do else ` Somente após uma das possibilidades anteriores é que o programa executada as instruções existentes após o bloco do else 14 Desvio condicional composto int main() { if (<condicao>) { } else { } return 0; } Comandos dentro do bloco if são executados caso a condição seja VERDADEIRA 15 Desvio condicional composto int main() { if (<condicao>) { } else { } . . . return 0; } Comandos dentro do bloco else são executados caso a condição seja FALSA 16 Desvio condicional composto: exemplo Programa comparacao_altura var NOME1, NOME2: caractere ALTURA1, ALTURA2: real início escreva “Informe o nome da 1a pessoa” leia NOME1 escreva “Informe altura da 1a pessoa” leia ALTURA1 escreva “Informe o nome da 2a pessoa” leia NOME2 escreva “Informe altura da 2a pessoa” leia ALTURA2 se (ALTURA1 > ALTURA2) então escreva “Pessoa mais alta:”, NOME1 senão escreva “Pessoa mais alta:”, NOME2 fim_se fim 17 Desvio condicional composto: exemplo 18 #include <stdlib.h> #include <stdio.h> int main() { char nome1[30], nome2[30]; float altura1, altura2; system("chcp 1252 > nul"); printf("\nInforme o nome da 1ª pessoa:"); scanf("%s", nome1); printf("\nInforme a altura da 1ª pessoa:"); scanf("%f", &altura1); printf("\nInforme o nome da 2ª pessoa:"); scanf("%s", nome2); printf("\nInforme a altura da 2ª pessoa:"); scanf("%f", &altura2); if (altura1 > altura2) printf("\nPessoa mais alta é %s", nome1); else printf("\nPessoa mais alta é %s", nome2); return 0; } Programa comparacao_altura var NOME1, NOME2: caractere ALTURA1, ALTURA2: real início escreva “Informe o nome da 1a pessoa” leia NOME1 escreva “Informe altura da 1a pessoa” leia ALTURA1 escreva “Informe o nome da 2a pessoa” leia NOME2 escreva “Informe altura da 2a pessoa” leia ALTURA2 se ALTURA1 > ALTURA2 então escreva “Pessoa mais alta:”, NOME1 senão escreva “Pessoa mais alta:”, NOME2 fim_se fim Desvios condicionais encadeados ` São usados quando há necessidade de estabelecer algumas verificações lógicas de condições definidas sucessivamente ` Uma determinada ação de um programa só pode ser executada se um conjunto anterior de condições for verificado ` Pode ser usada uma condição dentro de outra condição 19 Desvio condicional encadeado ` Sintaxe em Linguagem C if (<condição1>) { <instruções para condição1 verdadeira> } else { if (<condição2>) { <instruções para condição2 verdadeira, porém condição1 falsa> } else { <instruções para condição1 e condição2 falsas> } } 20 Umproblema ` Elaborar um algoritmo que efetue o cálculo do reajuste de salário de um funcionário. Considere que o funcionário deve receber um reajuste de 15% caso seu salário seja menor ou igual a R$ 622,00. Se seu salário for maior que R$ 622,00, mas menor ou igual a R$ 1.000,00, seu reajuste deve ser 10%. Caso seja maior que 1.000,00, o reajuste deverá ser de 5%. ` É possível ver 3 condições no problema acima: ` Se salário <= R$ 622,00, reajuste de 15% ` Se R$ 622,00 < salário <= R$ 1.000,00, reajuste de 10% ` Se salário > R$ 1.000,00, reajuste de 5% 21 Desvio condicional encadeado: exemplo ` Em Português estruturado programa REAJUSTA_SALARIO var NOVO_SALARIO : real SALARIO: real inicio leia SALARIO se (SALARIO < 622) então NOVO_SALARIO Å SALARIO * 1.15 senão se (SALARIO <= 1000) então NOVO_SALARIO Å SALARIO * 1.10 senão NOVO_SALARIO Å SALARIO * 1.05 fim_se fim_se fim 22 Desvio condicional encadeado: exemplo #include <stdlib.h> #include <stdio.h> int main() { float salario, novo_salario; system("chcp 1252 > nul"); printf("\nInforme o salário:"); scanf("%f", &salario); if (salario < 622) novo_salario = salario * 1.15; else { if (salario <= 1000) novo_salario = salario * 1.10; else novo_salario = salario * 1.05; } printf("\nO novo salário é %.2f:", novo_salario); return 0; } programa REAJUSTA_SALARIO var NOVO_SALARIO : real SALARIO: real inicio leia SALARIO se (SALARIO < 622) então NOVO_SALARIO Å SALARIO * 1.15 senão se (SALARIO <= 1000) então NOVO_SALARIO Å SALARIO * 1.10 senão NOVO_SALARIO Å SALARIO * 1.05 fim_se fim_se fim 23 Múltipla escolha ` Pode ser usada quando o algoritmo prevê opções de escolha para o usuário ` Ou quando houver a necessidade de usar uma seqüência grande de instruções do tipo se uma após a outra ou encadeadas/aninhadas 24 Um problema exemplo ` Elaborar um algoritmo que leia o destino do passageiro, se a viagem inclui retorno (ida e volta) e informar o preço da passagem conforme a tabela a seguir. Destino Ida Ida e Volta Região Norte R$622,00 R$900,00 Região Nordeste R$350,00 R$650,00 Região Centro‐Oeste R$350,00 R$600,00 Região Sul R$300,00 R$550,00 25 Exemplo: resolvendo com se ` Elaborar um algoritmo que leia o destino do passageiro, se a viagem inclui retorno (ida e volta) e informar o preço da passagem conforme a tabela a seguir. 26 Programa VIAGEM var DESTINO, IDA_VOLTA: caractere início escreva “Informe o destino da viagem (Norte, Nordeste, Centro-oeste, Sul):” leia DESTINO escreva “É ida e volta (S ou N)?” leia IDA_VOLTA se (IDA_VOLTA = “S”) então se (DESTINO = “Norte”) então escreva “Preço da passagem é R$ 900,00” senão se (DESTINO = “Nordeste”) então escreva “Preço da passagem é R$ 650,00” senão se (DESTINO = “Centro-oeste”) então escreva “Preço da passagem é R$ 600,00” senão escreva “Preço da passagem é R$ 550,00” fim_se fim_se fim_se Destino Ida Ida e Volta Região Norte R$622,00 R$900,00 Região Nordeste R$350,00 R$650,00 Região Centro‐Oeste R$350,00 R$600,00 Região Sul R$300,00 R$550,00 Exemplo: resolvendo com se ` Elaborar um algoritmo que leia o destino do passageiro, se a viagem inclui retorno (ida e volta) e informar o preço da passagem conforme a tabela a seguir. Programa VIAGEM var DESTINO, IDA_VOLTA: caractere início escreva “Informe o destino da viagem (Norte, Nordeste, Centro-oeste, Sul):” leia DESTINO escreva “É ida e volta (S ou N)?” leia IDA_VOLTA se (IDA_VOLTA = “S”) então <comandos> senão se (DESTINO = “Norte”) então escreva “Preço da passagem é R$ 622,00” senão se (DESTINO = “Nordeste”) então escreva “Preço da passagem é R$ 350,00” senão se (DESTINO = “Centro-oeste”) então escreva “Preço da passagem é R$ 350,00” senão escreva “Preço da passagem é R$ 300,00” fim_se fim_se fim_se fim_se fim Destino Ida Ida e Volta Região Norte R$622,00 R$900,00 Região Nordeste R$350,00 R$650,00 Região Centro‐Oeste R$350,00 R$600,00 Região Sul R$300,00 R$550,00 27 Sintaxe: Português estruturado caso <variável> seja <valor 1> faça <operação 1> seja <valor 2> faça <operação 2> . . . seja <valor n> faça <operação n> senão <operação> fim_caso 28 Exemplo: resolvendo com caso ` Elaborar um algoritmo que leia o destino do passageiro, se a viagem inclui retorno (ida e volta) e informar o preço da passagem conforme a tabela a seguir. Programa VIAGEM var OPCAO: inteiro início escreva “1- Norte (ida)” escreva “2- Norte (ida e volta)” escreva “3- Nordeste (ida)” escreva “4- Nordeste (ida e volta)” escreva “5- Centro-oeste (ida)” escreva “6- Centro-oeste (ida e volta)” escreva “7- Sul (ida)” escreva “8- Sul (ida e volta)” escreva “Escolha uma opção (1 a 8):” leia OPCAO caso OPCAO seja 1 faça escreva “Preço da passagem é R$ 500,00” seja 2 faça escreva “Preço da passagem é R$ 900,00” Destino Ida Ida e Volta Região Norte R$500,00 R$900,00 Região Nordeste R$350,00 R$650,00 Região Centro‐Oeste R$350,00 R$600,00 Região Sul R$300,00 R$550,00 29 Exemplo: resolvendo com se ` Elaborar um algoritmo que leia o destino do passageiro, se a viagem inclui retorno (ida e volta) e informar o preço da passagem conforme a tabela a seguir. 30 Programa VIAGEM var OPCAO: inteiro início <comandos escreva> leia OPCAO caso OPCAO seja 1 faça escreva “Preço da passagem é R$ 500,00” seja 2 faça escreva “Preço da passagem é R$ 900,00” seja 3 faça escreva “Preço da passagem é R$ 350,00” seja 4 faça escreva “Preço da passagem é R$ 650,00” seja 5 faça escreva “Preço da passagem é R$ 350,00” seja 6 faça escreva “Preço da passagem é R$ 600,00” seja 7 faça escreva “Preço da passagem é R$ 300,00” seja 8 faça escreva “Preço da passagem é R$ 550,00” senão escreva “Você digitou uma opção inválida!” fim_caso fim Destino Ida Ida e Volta Região Norte R$500,00 R$900,00 Região Nordeste R$350,00 R$650,00 Região Centro‐Oeste R$350,00 R$600,00 Região Sul R$300,00 R$550,00 O comando switch: múltipla escolha ` Permite selecionar uma entre várias ações alternativas; ` O comando if-else pode ser usado para executar testes para escolha de uma entre várias alternativas, mas a visualização do código fica deselegante e menos compreensível; ` O comando switch tem um formato limpo e claro; ` É comumente usado para construção de menus onde o usuário escolhe uma opção. 31 Switch: sintaxe switch (expressão) { case <valor>: <linha de comando>; break; case <valor>: <linha de comando>; break; . . . default: /* para casos não previstos */ <linha de comando>; break; } O comando break tem a finalidade de encerrar a operação ocorrida dentro do case. Se não houver o break, será testado o próximo case e a lógica estará errada. 32 Switch: sintaxe switch (expressão) { case <valor>: <linha de comando>; break; case <valor>: <linha de comando>; break; . . . default: /* para casos não previstos */ <linha de comando>; break; } O default é o caso padrão se o programa não tiver entrado em nenhuma condição prevista (cases anteriores) O uso de default é opcional. 33 Switch: sintaxe switch (expressão) { case <valor>: <linha de comando>; break; case <valor>: <linha de comando>; break; . . . default: /* para casos não previstos */ <linha de comando>; break; } Não existe ; aqui Precisa dos : aqui em cada case Não existe { e } dentro do case 34 O switch funciona apenas com números inteiros e a manipulação de um único caractere. Exemplo: 1, 5, ‘s’, ‘@’ etc. Switch: exemplo Seja x uma variável do tipo int switch (x) /* O comando switchtesta o valor armazenado na variável x */ { case 1: printf (“A variável x possui o valor correspondente a 1”); break; case 2: printf (“A variável x possui o valor correspondente a 2”); break; case 3: printf (“A variável x possui o valor correspondente a 3”); break; default: printf (“Nenhuma das opções anteriores...”); break; } 35 O switch funciona apenas com números inteiros e a manipulação de um único caractere. Exemplo: 1, 5, ‘s’, ‘@’ etc. Switch: exemplo Seja letra uma variável do tipo char switch (letra) { case ‘A’: printf (“A variável letra possui o valor correspondente a A”); break; case ‘B’: printf (“A variável letra possui o valor correspondente a B”); break; default: printf (“Nenhuma das opções anteriores...”); break; } 36 Exemplo: resolvendo com caso 37 Programa VIAGEM var OPCAO: inteiro início escreva “1- Norte (ida)” escreva “2- Norte (ida e volta)” escreva “3- Nordeste (ida)” escreva “4- Nordeste (ida e volta)” escreva “5- Centro-oeste (ida)” escreva “6- Centro-oeste (ida e volta)” escreva “7- Sul (ida)” escreva “8- Sul (ida e volta)” escreva “Escolha uma opção (1 a 8):” leia OPCAO caso OPCAO seja 1 faça escreva “Preço da passagem é R$ 500,00” seja 2 faça escreva “Preço da passagem é R$ 900,00” seja 3 faça escreva “Preço da passagem é R$ 350,00” seja 4 faça escreva “Preço da passagem é R$ 650,00” seja 5 faça escreva “Preço da passagem é R$ 350,00” seja 6 faça escreva “Preço da passagem é R$ 600,00” seja 7 faça escreva “Preço da passagem é R$ 300,00” seja 8 faça escreva “Preço da passagem é R$ 550,00” senão escreva “Você digitou uma opção inválida!” fim_caso fim Destino Ida Ida e Volta Região Norte R$500,00 R$900,00 Região Nordeste R$350,00 R$650,00 Região Centro‐Oeste R$350,00 R$600,00 Região Sul R$300,00 R$550,00 Exemplo: usando o switch em C 38 #include <stdio.h> #include <stdlib.h> int main() { int opcao; printf("\n1- Norte (ida)\n"); printf("\n2- Norte (ida e volta)\n"); printf("\n3- Nordeste (ida)\n"); printf("\n4- Nordeste (ida e volta)\n"); printf("\n5- Centro-oeste (ida)\n"); printf("\n6- Centro-oeste (ida e volta)\n"); printf("\n7- Sul (ida)\n"); printf("\n8- Sudeste (ida e volta)\n"); printf("\nEscolha a opção (1 a 8):"); scanf("%d", &opcao); switch(opcao) { case 1: printf("\nPreço da passagem é R$622,00.\n\n"); break; case 2: printf("\nPreço da passagem é R$900,00.\n\n"); break; case 3: printf("\nPreço da passagem é R$350,00.\n\n"); break; case 4: printf("\nPreço da passagem é R$650,00.\n\n"); break; case 5: printf("\nPreço da passagem é R$350,00.\n\n"); break; case 6: printf("\nPreço da passagem é R$600,00.\n\n"); break; Exemplo: usando o switch em C (continuação) case 7: printf("\nPreço da passagem é R$300,00.\n\n"); break; case 8: printf("\nPreço da passagem é R$550,00.\n\n"); break; default: printf("\nOpção inválida\n"); break; } system ("pause"); return 0; } 39 Um problema exemplo ` Elaborar um algoritmo que imprime na tela a situação do aluno após a sua nota ser digitada. Baseie-se na tabela abaixo: Nota Situação 0 a 2 Nota péssima 3 a 4 Nota ruim 5 a 6 Nota um pouco ruim 7 Nota boa 8 a 9 Nota muito boa 10 Nota excelente Neste problema pressupõe-se que a nota do aluno é do tipo inteiro 40 Exemplo: resolvendo com caso 41 Programa SITUAÇÃO var nota: inteiro início escreva “Informe a nota do aluno:” leia nota escreva “Nota ” caso nota seja 0 faça escreva “péssima” seja 1 faça escreva “péssima” seja 2 faça escreva “péssima” seja 3 faça escreva “ruim” seja 4 faça escreva “ruim” seja 5 faça escreva “um pouco ruim” seja 6 faça escreva “um pouco ruim” seja 7 faça escreva “boa” seja 8 faça escreva “muito boa” seja 9 faça escreva “muito boa” seja 10 faça escreva “excelente” senão escreva “inválida!” fim_caso fim Exemplo: usando o switch em C 42 #include <stdio.h> #include <stdlib.h> int main() { int nota; printf("\nInforme a nota do aluno:"); scanf("%d", ¬a); printf("\nNota "); switch(nota) { case 0: case 1: case 2: printf(“péssima\n\n"); break; case 3: case 4: printf(“muito ruim\n\n“); break; Exemplo: usando o switch em C (cont.) 43 case 5: case 6: printf(“ruim\n\n"); break; case 7: printf(“boa\n\n“); break; case 8: case 9: printf(“muito boa\n\n"); break; case 10: printf(“excelente\n\n“); break; default: printf(“inválida”); break; } system(“pause”); return 0; } Código usando a linguagem Pascal Program Nota; Var nota: integer; Begin writeln('Digite sua nota:'); readln(nota); Case nota of 0..2: writeln('Nota péssima'); 3..4: writeln('Nota ruim'); 5..6: writeln('Nota pouco ruim'); 7: writeln('Nota boa'); 8..9: writeln('Nota muito boa'); 10: writeln('Nota excelente!!'); else writeln ('Nota inválida'); end; end 44 Comentários ` Você pode incluir no meio do seu código comentários ` Podem ser colocados em qualquer lugar e são tratados pelo compilador como espaços em branco ` Ajudam a quem desenvolve o programa e qualquer pessoa que lê o programa fonte ` São usados para documentar o código ` Começam por /* e terminam por */ 45 Comentários /* programa que dados três números, verifica se A +B é menor que C. */ #include <stdlib.h> /* biblioteca para o comando system */ #include <stdio.h> /* biblioteca para o printf e scanf */ int main() { int A, B, C; system("chcp 1252 > nul"); printf("\nInforme três números inteiros"); scanf("%d%d%d", &A, &B, &C); if (A + B < C) printf("\nC é maior que A + B"); return 0; } 46 Comentários: atenção! /* Esse é um /* comentario */ ilegal */ #include <stdlib.h> #include <stdio.h> int main() { int A, B, C; system("chcp 1252 > nul"); printf("\nInforme três números inteiros"); scanf("%d%d%d", &A, &B, &C); if (A + B < C) printf("\nC é maior que A + B"); return 0; } Não pode haver comentários dentro de comentários. 47 Referências ` Ulysses de Oliveira. Programando em C. D. Rio de Janeiro; Editora Ciência moderna, 2008 ` Victorine Viviane Mizrahi. Treinamento em linguagem C. São Paulo: Pearson Prentice Hall, 2008. ` Fernando Antônio Vanini. Introdução à linguagem C. http://www.dcc.unicamp.br/~vanini/inf512/aula2_1.html 48 Algoritmos e Programação Tomada de decisão Desvio condicional simples Desvio condicional simples Desvio condicional simples: exemplo Desvio condicional simples: exemplo Desvio condicional simples: exemplo Desvio condicional simples Erro comum Desvio condicional simples: exemplo Construindo nosso programa em C Construindo nosso programa em C Outro exemplo de erro Desvio condicional composto Desvio condicional composto Desvio condicional composto Desvio condicional composto: exemplo Desvio condicional composto: exemplo Desvios condicionais encadeados Desvio condicional encadeado Um problema Desvio condicional encadeado: exemplo Desvio condicional encadeado: exemplo Múltipla escolha Um problema exemplo Exemplo: resolvendo com se Exemplo: resolvendo com se Sintaxe: Português estruturado Exemplo: resolvendo com caso Exemplo: resolvendo com se O comando switch: múltipla escolha Switch: sintaxe Switch: sintaxe Switch: sintaxe Switch: exemplo Switch: exemplo Exemplo: resolvendo com caso Exemplo: usando o switch em C Exemplo: usando o switch em C (continuação) Um problema exemplo Exemplo: resolvendo com caso Exemplo: usando o switch em C Exemplo: usando o switch em C (cont.) Código usando a linguagem Pascal Comentários Comentários Comentários: atenção! Referências
Compartilhar