Baixe o app para aproveitar ainda mais
Prévia do material em texto
Algoritmos e Programação Estruturas de decisão (if...else, switch) Universidade Federal da Grande Dourados Faculdade de Ciências Exatas e de Tecnologias Curso de Bacharelado em Sistemas de Informação 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 4 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 } Desvio condicional simples: exemplo 5 #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. Desvio condicional simples: exemplo 6 #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. Desvio condicional simples: exemplo 7 if (0==1) x = 0; a = 1; 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. Desvio condicional simples 8 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; Erro comum 9 #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 é 0 e a é 1. 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 Desvio condicional simples: exemplo 10 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. #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; } Construindo nosso programa em C 11 #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). Outro exemplo de erro 12 #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 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 13 Desvio condicional composto 14 Comandos dentro do bloco if são executados caso a condição seja VERDADEIRA int main() { if (<condicao>) { } else { } return 0; } Desvio condicional composto 15 int main() { if (<condicao>) { } else { } . . . return 0; } Comandos dentro do bloco else são executados caso a condição seja FALSA Desvio condicional composto: exemplo 16 #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; } 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 17 Desvio condicional encadeado 18 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> } } Sintaxe em Linguagem C Um problema 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% 19 Desvio condicional encadeado: exemplo 20 #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 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 21 Um problema exemplo Elaborar um programa 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. 22 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. 23 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,0 0 Região Nordeste R$350, 00 R$650,0 0 Região Centro-Oeste R$350, 00 R$600,0 0 Região Sul R$300, 00 R$550,0 0 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. 24 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,0 0 Região Nordeste R$350, 00 R$650,0 0 Região Centro-Oeste R$350, 00 R$600,0 0 Região Sul R$300, 00 R$550,0 0 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 25 Exemplo: resolvendo com caso Elaborar um programa 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 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,0 0 Região Nordeste R$350, 00 R$650,0 0 Região Centro-Oeste R$350, 00 R$600,0 0 Região Sul R$300, 00 R$550,0 0 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. 27 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,0 0 Região Nordeste R$350, 00 R$650,0 0 Região Centro-Oeste R$350, 00 R$600,0 0 Região Sul R$300, 00 R$550,0 0 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. 28 Switch: sintaxe 29 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. Switch: sintaxe 30 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. Switch: sintaxe 31 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 Switch: exemplo 32 switch (x) /* O comando switch testa 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; } O switch funciona apenas com números inteiros e a manipulação de um único caractere. Exemplo: 1, 5, ‘s’, ‘@’ etc. Seja x uma variável do tipo int Switch: exemplo 33 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; } O switch funciona apenascom números inteiros e a manipulação de um único caractere. Exemplo: 1, 5, ‘s’, ‘@’ etc. Seja letra uma variável do tipo char Exemplo: usando o switch em C 34 Destino Ida Ida e Volta Região Norte R$500, 00 R$900,0 0 Região Nordeste R$350, 00 R$650,0 0 Região Centro-Oeste R$350, 00 R$600,0 0 Região Sul R$300, 00 R$550,0 0 #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) 35 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; } Um problema exemplo 36 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 Exemplo: usando o switch em C 37 #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.) 38 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; } 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 */ 39 Comentários 40 /* 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; } Comentários: atenção! 41 /* 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. 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/a ula2_1.html 42
Compartilhar