Estruturas Condicionais

Documentos relacionados
Algoritmos e Lógica de Programação 80 horas // 4 h/semana. Exercício... Para começar... Resolução... Para começar... Para começar...

Comandos de Entrada. Lógica de Programação. Prof. Kleber Rezende

Estruturas de Repetição

Estruturas de Controle de Fluxo Estruturas de Seleção. Givanaldo Rocha

Estruturas de Repetição Comando Enquanto-FimEnquanto

Algoritmos e Programação

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

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

Programação científica C++

Lógica e Linguagem de Programação Convertendo um algoritmo em pseudocódigo para a linguagem C Professor: Danilo Giacobo

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

ALGORITMOS E LÓGICA DE PROGRAMAÇÃO. Prof. Esp. Fabiano Taguchi

ALGORITMOS E LÓGICA DE PROGRAMAÇÃO. Prof. Esp. Fabiano Taguchi

Variáveis Compostas Homogêneas Vetores

ALGORITMOS E LÓGICA DE PROGRAMAÇÃO PRÉ AULA DIAGNÓSTICO 22/10/2015. Analise o algoritmo a seguir e depois assinale a alternativa correspondente:

Algoritmos e Estruturas de Dados I (DCC/003) Estruturas Condicionais e de Repetição

Estruturas de Repetição

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

Tópicos abordados. Estruturas de Decisão. Simples Composta Encadeada

Programação para Games I

Estruturas Condicionais

Lógica de Programação I

Algoritmos I Aula 8 Estrutura de controle: seleção

ALGORITMOS E LÓGICA DE PROGRAMAÇÃO PRÉ AULA PRÉ AULA 31/08/2015

INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA DO RIO GRANDE DO NORTE CAMPI JOÃO CÂMARA COMANDOS DE DESVIO

Estruturas Condicionais. Tiago Alves de Oliveira

Programação Estruturada

5 Comando de Seleção Simples e Composta

Introdução a Computação

Linguagem C (estruturas condicionais)

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

Então, poderia basicamente dizer que em um algoritmo a sintaxe seria a seguinte:

Expressões, Atribuições, Entrada e Saída. Givanaldo Rocha

Aula 06: Condicionais (switch)

LINGUAGEM C: COMANDOS DE CONTROLE CONDICIONAL

Linguagem C. Programação Estruturada. Estruturas de Controle. Prof. Luis Nícolas de Amorim Trigo

ESTRUTURAS DE REPETIÇÃO - PARTE 1

Linguagem C. Prof.ª Márcia Jani Cícero

Mini apostila de Python - Oficina de Vestibulandos. PET Computação - UFPR September 2016

Programação Estruturada Aula VisualG

Algoritmos e Programação

controle de fluxo - condicionais

CIT Aula 02 Variáveis e Estruturas de desvio condicional. Autor: Max Rodrigues Marques Carga Horária: 2 h 22/07/15 1

Algoritmo e Programação. Capítulo 2 Tópicos Preliminares

Estruturas de Decisão

Algoritmo e Programação Matemática

Programação II. Aula 3

Algoritmos e Estruturas de Dados I IEC012. Linguagem C - Estruturas de Controle - Seleção. Prof. César Melo

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

Java - Estruturas de Decisão, Repetição e Arrays

LP II Estrutura de Dados

Estruturas de Repetição

Programação Básica. Estrutura de um algoritmo

Capítulo 4: Condicionais

Para começar... Algoritmos e Lógica de Programação 80 horas // 4 h/semana. Para começar... Comando REPITA (repeat) Comando REPITA (repeat)

Oficina de Introdução de Programação usando Linguagem Python Prof. Ms. Perini

ESTRUTURA CONDICIONAL E SELEÇÃO

Prof. Jorge Cavalcanti

Português Estruturado (VISUALG)

3. Linguagem de Programação C

Fundamentos de Programação1

Conceitos Básicos de Algoritmos

Aula 4 Estruturas Condicionais

Pseudolinguagem (ou Portugol) Profº Elton Rodrigo

Aula 4 Oficina de Programação Algoritmos - Parte 3. Profa. Elaine Faria UFU

Oficina de Python Prof. Me. José Carlos Perini

E X E R C Í C I O S 01. Sobre o comando CASO, marque as alternativas como verdadeira (V) ou falsa (F):

Linguagens de Programação I

Algoritmos e Programação

MC-102 Aula 05 Comandos Condicionais

ESTRUTURAS DE REPETIÇÃO - PARTE 2

ALGORITMOS AULA 2. Profª Amanda Gondim

Aula 05: Condicionais (Parte 2)

Professor Mauricio Lederer Algoritmos. Entrada e saída de dados

Transcrição:

Estruturas Condicionais Lógica de Programação Prof. Kleber Rezende

Considerações Iniciais Nos capítulos anteriores foram apresentados alguns conceitos básicos sobre as estruturas e comandos que são utilizados para construir um algoritmo simples. Como visto, podemos solicitar valores de ENTRADA aos usuários do sistema utilizando o comando LEIA, e podemos ainda enviar valores de saída do sistema por meio do comando ESCREVA.

Considerações Iniciais Entretanto, as possibilidades de construção de algoritmos que temos até o presente momento são bastante limitadas, pois ainda não estamos aptos a tomar decisões durante o tempo de execução do algoritmo, ou até mesmo de classificar determinados valores de variáveis.

Considerações Iniciais Por exemplo, considere que precisamos desenvolver um algoritmo que classifique uma determinada pessoa entre MAIOR DE IDADE ou MENOR DE IDADE. Para esse problema sabemos que precisamos avaliar a IDADE da pessoa, e que SE essa idade for maior (ou igual) que 18 anos a pessoa é considerada MAIOR DE IDADE. Para resolver esse tipo de situação, onde um determinado valor é avaliado para, a partir do resultado dessa avaliação, executarmos alguma ação, utilizamos as ESTRUTURAS DE CONDIÇÃO.

Estrutura de condição SE ENTAO A principal estrutura de condição utilizada é a SE ENTAO; Ela é utilizada da seguinte forma: SE <EXPRESSÃO LÓGICA> ENTAO FIMSE COMANDO

Estrutura de condição SE ENTAO Onde, 1) A EXPRESSÃO LÓGICA é uma expressão que deverá retornar um valor VERDADEIRO ou FALSO, e caso o resultado dessa EXPRESSÃO seja VERDADEIRO, será executado o COMANDO que está dentro da ESTRUTURA. Alguns exemplos de expressões lógicas já foram vistos anteriormente, a seguir temos mais alguns exemplos: 18 > 20, cujo resultado será FALSO 45 = 45, cujo resultado será VERDADEIRO MEDIA > 7, cujo resultado dependerá do valor da variável MEDIA

Estrutura de condição SE ENTAO Onde, 2) O COMANDO é uma linha (ou sequência) de código que será executado somente quando o resultado da EXPRESSÃO LÓGICA for VERDADEIRO 3) FIMSE indica que a ESTRUTRA SE ENTAO chegou ao final.

Estrutura de condição SE ENTAO Em C, teríamos: if (<EXPRESSÃO LÓGICA>) { COMANDO }

Estrutura de condição SE ENTAO Voltando ao nosso problema de classificar uma pessoa como MAIOR ou MENOR de IDADE, podemos utilizar a estrutura de condição SE ENTAO da seguinte maneira: algoritmo "condicao" variável inteiro idade inicio escreva("digite a sua idade") leia(idade) se idade >= 18 entao escreva("voce é maior de idade") fimse Fimalgoritmo

Estrutura de condição SE ENTAO Em C... main() { int idade; printf( Digite sua idade: ); scanf ( %d, &idade); } if (idade >= 18) { printf( Você é maior de idade! ); }

SE ENTAO - Fluxograma Início Leia Idade Idade >= 18? Verdadeiro Falso Escreva Você é maior de idade Fim

Estrutura de condição SE ENTAO SENAO O algoritmo anterior resolve o nosso problema quando a pessoa é MAIOR DE IDADE, porém não nos dá nenhum retorno para quando a mesma for MENOR DE IDADE. Para contornar esse tipo de situação, a ESTRUTURA DE CONDIÇÃO SE ENTAO, oferece a possibilidade de executarmos uma determinada ação ou comando, se o resultado da EXPRESSÃO LÓGICA for VERDADEIRO e de executarmos uma ação diferente se o resultado da EXPRESSÃO LÓGICA for FALSO. Para essas situações é utilizado o comando SENAO.

SE ENTAO SENAO - Fluxograma Início Leia Idade Idade >= 18? Verdadeiro Falso Escreva Você é maior de idade Escreva Você é menor de idade Fim

SE ENTAO SENAO - Algoritmo algoritmo "condicao" variável inteiro idade inicio escreva("digite a sua idade") leia(idade) se idade >= 18 entao escreva("você é MAIOR de idade") senao escreva("você é MENOR de idade") fimse Fimalgoritmo

SE ENTAO SENAO C main() { int idade; printf( Digite sua idade: ); scanf ( %d, &idade); } if (idade >= 18) { printf( Você é MAIOR de idade! ); } else { printf( Você é MENOR de idade! ); }

Utilizando variáveis Em todos os exemplos vistos até o presente momento, o resultado que é enviado para a tela (a saída do sistema) é escrito logo após a verificação da EXPRESSÃO LÓGICA e dentro da ESTRUTURA DE CONDIÇÃO; Mas isso não é uma regra, podemos simplesmente armazenar informações em variáveis e escrever o resultado obtido somente no final.

Utilizando variáveis Por exemplo, no algoritmo que avalia se uma determinada pessoa é MAIOR DE IDADE ou se é MENOR DE IDADE, poderíamos criar uma variável que pudesse receber a situação em que a pessoa se encontra e depois simplesmente escrever o valor dessa variável.

Utilizando variáveis Veja como ficaria: algoritmo "condicao" variável inteiro idade cadeia maioridade inicio escreva("digite a sua idade") leia(idade) se idade >= 18 entao maioridade "MAIOR" senao maioridade "MENOR" fimse escreva( você é, maioridade, de idade ) Fimalgoritmo

Utilizando variáveis C main() { int idade; char maioridade[6]; printf( Digite sua idade: ); scanf ( %d, &idade); } if (idade >= 18) { strcpy (maioridade, MAIOR ); //strcpy = string copy função que copia o conteúdo da //segunda string (cadeia de caracteres) para a primeira. //Equivale a uma atribuição maioridade = MAIOR } else strcpy (maioridade, MENOR ); printf( Você é %s de idade!, maioridade);

Utilizando variáveis - Fluxograma Início Leia Idade Verdadeiro Idade >= 18? Falso maioridade MAIOR maioridade MENOR Escreva Você é + maioridade + de idade Fim

Exemplos de Aplicação Vamos reconsiderar agora o exercício feito na última aula: ---------------------------------------------------------------------- Elabore um algoritmo que leia dois números inteiros e imprima a seguinte saída: Dividendo: Divisor: Quociente: Resto: Para a resolução desse algoritmo utilize os comandos MOD(%) e DIV(/) para o cálculo do resto e do quociente da divisão. ----------------------------------------------------------------------

Análise do Problema Entrada: Nosso programa necessitará que o usuário informe dois valores inteiros (O Dividendo e o Divisor) Processamento: O programa deverá calcular o quociente e o resto da divisão inteira do dividendo pelo divisor;

Análise do Problema Saída: O programa deverá escrever as informações conforme especificação feita no enunciado do problema. Dividendo: <valor informado pelo usuário> Divisor: <valor informado pelo usuário> Quociente: <valor calculado na fase de processamento> Resto: <valor calculado na fase de processamento>

Refinando a fase de processamento Para calcular o quociente, pode-se usar a seguinte expressão: quociente dividendo div divisor ou, em C... quociente = dividendo / divisor;

Refinando a fase de processamento Para calcular o resto, pode-se usar a seguinte expressão: resto dividendo mod divisor ou, em C... resto = dividendo % divisor;

Refinando a fase de processamento Pergunta 1: E se o usuário informar (digitar) valor zero (0) para a variável divisor? Resposta 1: Teremos um problema com a matemática (divisão por zero) e, consequentemente, com nosso programa (ele será abortado)!

Refinando a fase de processamento Pergunta 2: O que fazer diante desta possibilidade? Resposta 2: Teremos de acrescentar um comando condicional antes da realização dos cálculos.

Refinando a fase de processamento Início Leia Dividendo Leia Divisor Antes, tínhamos: Calcule Quociente Calcule Resto Imprima Resultados Fim

Refinando a fase de processamento Início Leia Dividendo Leia Divisor Verdadeiro Calcule Quociente Divisor!= 0? Falso Calcule Resto Imprima Resultados Fim

Refinando a fase de processamento Início Leia Dividendo Leia Divisor Verdadeiro Calcule Quociente Calcule Resto Imprima Resultados Divisor!= 0? Fim Falso Imprima Mensagem de Erro

Expressões Lógicas Compostas Como vimos anteriormente, é possível compor expressões lógicas utilizando operadores relacionais como (<, >,!=, ==,<=, >=) É possível também compor expressões lógicas utilizando os operadores E (&&), OU ( ) e NÃO (!).

Expressões Lógicas Compostas Nesse sentido, a expressão lógica que será avaliada na estrutura de condição SE ENTAO também pode ser formada por uma expressão lógica composta. Por exemplo, considere a situação de um determinado aluno em uma disciplina.

Expressões Lógicas Compostas Sabe-se que para ser aprovado, é necessário que um aluno tenha: NOTA >= 7.0 E FREQUENCIA >= 75 %.

Expressões Lógicas Compostas Veja que para avaliar essa situação necessitaremos utilizar o operador lógico E da seguinte forma: SE (nota >= 7) E (freqüência >= 0.75) ENTAO ESCREVA( O aluno está aprovado ) SENAO ESCREVA( O aluno está reprovado ) FIMSE

Expressões Lógicas Compostas algoritmo "aluno" variavel real nota, frequencia início escreva("digite a nota do aluno") leia(nota) escreva("digite a frequencia do aluno") leia(frequencia) se (nota >= 7) E (frequencia >= 0.75) entao escreva("o aluno está aprovado") senao escreva("o aluno está reprovado") fimse Fimalgoritmo

Se Entao Senao ANINHADAS Dentro de uma estrutura SE ENTAO SENAO é perfeitamente possível utilizarmos mais de uma linha de COMANDO, ou até mesmo outras estruturas SE ENTAO SENAO. Existem situações em que os caminhos para a tomada de uma decisão acabam formando uma espécie de árvore com diversas ramificações.

Se Entao Senao ANINHADAS Nesses casos, podemos recorrer à utilização de várias estruturas SE ENTAO SENAO embutidas umas dentro das outras, comumente chamadas de NINHOS.

Se Entao Senao ANINHADAS Por exemplo, suponha que desejemos refinar um pouco mais o problema referente às médias dos alunos de uma dada disciplina. Sabemos que um aluno é APROVADO caso apresente MÉDIA maior ou igual a 7.0 e FREQUENCIA maior ou igual a 75%.

Se Entao Senao ANINHADAS Se o aluno obtiver a FREQUENCIA mínima exigida e uma MÉDIA entre 4 e 7, o mesmo ainda teria direito a uma última avaliação de RECUPERAÇÃO. Como faríamos para resolver o problema em questão utilizando apenas estruturas de condição SE ENTAO SENAO?

Se Entao Senao ANINHADAS Poderíamos começar avaliando a FREQUENCIA do aluno, e se a mesma for menor que 75% o aluno já estaria REPROVADO; Porém, caso a FREQUENCIA respeite o mínimo exigido, teremos que avaliar a MÉDIA para saber se o mesmo está APROVADO, em RECUPERAÇÃO ou REPROVADO.

Se Entao Senao ANINHADAS Início Leia Média Leia Frequência Verdadeiro Frequência < 0.75? Falso Escreva Você está reprovado por faltas! Avalie a Média Fim

Se Entao Senao ANINHADAS No momento em que é verificado que a FREQUENCIA é menor que 0.75 (75%) o aluno já está imediatamente REPROVADO; Caso a FREQUENCIA seja maior ou igual a esse valor, devemos continuar com o algoritmo para avaliar em que situação que o aluno se encontra;

Se Entao Senao ANINHADAS Enfim, agora é necessário avaliar a MEDIA do mesmo, verificando se está acima de 7.0 (APROVADO), entre 4 e 7.0 (RECUPERACAO), ou abaixo de 4.0 (REPROVADO).

Refinando o passo Avalie a Média Verdadeiro Média >= 7.0? Falso Escreva Você está aprovado! Verdadeiro Média >= 4.0? Falso Escreva Você está em Recuperação! Escreva Você está reprovado por Média! Fim

Refinando o passo Avalie a Média Início Leia Média Leia Frequência Frequência < 0.75? Falso Verdadeiro Verdadeiro Média >= 7.0? Falso Escreva Você está reprovado por faltas! Escreva Você está aprovado! Média >= 4.0? Escreva Você está em Recuperação! Verdadeiro Falso Escreva Você está reprovado por Média! Fim

Se Entao Senao ANINHADAS algoritmo "aluno" variavel real media, frequencia início escreva("digite a media e a frequencia") leia(media, frequencia) se frequencia < 0.75 entao escreva("voce esta reprovado por FALTAS") senao se media >= 7 entao escreva("voce esta APROVADO") senao se media >= 4 entao escreva("voce esta em RECUPERACAO") senao escreva("voce esta REPROVADO POR MEDIA") fimse fimse fimse Fimalgoritmo

Comando Escolha (Switch) Na aula de hoje, vamos considerar seguinte problema: ---------------------------------------------------------------------- Elabore um algoritmo que leia um número inteiro entre 1 e 12 e imprima o nome do mês correspondente. Caso seja digitado um valor fora desse intervalo, deverá ser exibida uma mensagem informando que não existe mês com esse número. ---------------------------------------------------------------------- A seguir, podemos visualizar algumas possíveis soluções para o problema:

Comando Escolha (Switch) algoritmo MesDoAno" variavel inteiro mes início escreva("digite um número entre 1 e 12") leia(mes) se (mes < 1) OU (mes > 12) entao escreva( Mês INEXISTENTE") senão se mes = 1 entao escreva( Mês de Janeiro!") fimse se mes = 2 entao escreva( Mês de Fevereiro!") fimse... se mes = 12 entao escreva( Mês de Dezembro!") fimse fimse Fimalgoritmo

Comando Escolha (Switch) algoritmo MesDoAno"... leia(mes) se (mes < 1) OU (mes > 12) entao escreva( Mês INEXISTENTE") senão se mes = 1 entao escreva( Mês de Janeiro!") senão se mes = 2 entao escreva( Mês de Fevereiro!") senão... se mes = 12 entao escreva( Mês de Dezembro!") fimse fimse fimse fimse Fimalgoritmo

Comando Escolha (Switch) A segunda solução é mais eficiente que a primeira, pois realiza um número médio de comparações menor; Porém, o código fica mais extenso e, às vezes, confuso; Será possível criarmos um código enxuto e eficiente ao mesmo tempo?

Comando Escolha (Switch) A resposta é sim. Com a estrutura Escolha... Caso (Switch... Case, em C); Nessa estrutura, o valor de uma determinada variável é avaliado e CASO esse valor coincida com um valor pré-estabelecido, um COMANDO (ou grupo de comandos) é executado.

Comando Escolha (Switch) A estrutura de condição ESCOLHA CASO é utilizada da seguinte forma: Escolha <nome da variável> Caso <valor1> COMANDO Caso <valor2> COMANDO FimEscolha

Comando Escolha (Switch) Exemplo No exemplo a seguir, a variável n do tipo inteiro é testada, e CASO a mesma tenha valor 1 é escrito na tela um, CASO a mesma tenha valor 2 é escrito na tela dois algoritmo "teste" variavel inteiro n inicio escreva("digite n") leia(n) escolha n caso 1 escreva("um") caso 2 escreva("dois") fimescolha Fimalgoritmo

Comando Escolha (Switch) Exemplo Em C main() { int n; printf("digite n: "); scanf ( %d, &n); switch (n) { case 1: printf("um"); break; case 2: printf("dois"); break; } }

Comando Escolha (Switch) Da mesma maneira que a estrutura de condição SE ENTAO SENAO possibilita que executemos algum comando quando a expressão avaliada não é VERDADEIRA, a estrutura de condição ESCOLHA CASO também nos oferece essa opção

Comando Escolha (Switch) A sintaxe para utilizarmos essa opção é mostrada a seguir: Escolha <nome da variável> Caso <valor1> COMANDO Caso <valor2> COMANDO Outrocaso COMANDO FimEscolha

Comando Escolha (Switch) Exemplo Trabalhando com o nosso exemplo anterior, agora a variável n do tipo inteiro é testada, e CASO a mesma tenha valor 1 é escrito na tela um, CASO a mesma tenha valor 2 é escrito na tela dois, e CASO não tenha nenhum desses valores será escrito na tela outro valor : algoritmo "teste" variavel inteiro n inicio escreva("digite n") leia(n) escolha n caso 1 escreva("um") caso 2 escreva("dois") outrocaso escreva( outro valor") fimescolha Fimalgoritmo

Comando Escolha (Switch) Exemplo Em C main() { int n; printf("digite n: "); scanf ( %d, &n); switch (n) { case 1: printf("um"); break; case 2: printf("dois"); break; default: printf("outro valor"); break; } }

Comando Escolha (Switch) Voltando ao Problema Inicial algoritmo MesDoAno" variavel inteiro mes início escreva("digite um número entre 1 e 12") leia(mes) escolha mês caso 1: escreva( Mês de Janeiro!") caso 2: escreva( Mês de Fevereiro!") caso 3: escreva( Mês de Março!") caso 4: escreva( Mês de Abril!") caso 5: escreva( Mês de Maio!") caso 6: escreva( Mês de Junho!") caso 7: escreva( Mês de Julho!") caso 8: escreva( Mês de Agosto!") caso 9: escreva( Mês de Setembro!") caso 10: escreva( Mês de Outubro!") caso 11: escreva( Mês de Novembro!") caso 12: escreva( Mês de Dezembro!") outrocaso: escreva( Mês INEXISTENTE") fimescolha Fimalgoritmo

Comando Escolha (Switch) Exercício Criar um algoritmo que leia dois números inteiros, e que solicite ao usuário qual a operação que o mesmo deseja realizar entre esses números. Caso o usuário digitar o caractere * será realizada uma multiplicação; Caso seja digitado o caractere / será realizada uma divisão; Caso seja digitado o caractere + será realizado uma adição entre os números; Caso seja digitado o caractere - será realizada uma subtração.