olimpíada brasileira de informáticarcosta62br.unifei.edu.br/obi/aula_03.pdf · uma estrutura de...

Post on 21-Jul-2020

3 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

TreinamentoOlimpíada Brasileira de Olimpíada Brasileira de

InformáticaInformática

Universidade Federal de Itajubá

Prof. Roberto Affonso da Costa Junior

AULA 03 – 1/2AULA 03 – 1/2

– Estrutura Condicionais– Linguagem de Programação C

Bruno Otávio, George, Gabriel Taets, Bruno Otávio, George, Gabriel Taets, Gabriel Huhn,Thiago Carvalho, Tiago,Gabriel Huhn,Thiago Carvalho, Tiago,

Renan e Júnior AndradeRenan e Júnior Andrade

Estrutura CondicionaisEstrutura Condicionais➢ Até agora estávamos trabalhando com algoritmos puramente sequenciais, ou seja, todas as instruções eram executadas seguindo a ordem do algoritmo (normalmente, de cima para baixo). A partir de agora começamos a estudar estruturas de seleção.

➢ Uma estrutura de seleção, como o próprio nome já diz, permite que determinadas instruções sejam executadas ou não, dependendo do resultado de uma condição (teste), ou seja, o algoritmo vai tomar decisão de um processo (leitura, processo e impressão) a ser realizado.

4

Estruturas de ControleEstruturas de ControleCondicional ou de seleçãoCondicional ou de seleção

Isto é, são testados parâmetros e, dependendo de seus valores, tomamos um caminho ou outro. As condições que são testadas num Algoritmo são do tipo lógica (booleano), portanto podem ter somente dois resultados: Verdadeiro ou Falso. Assim, a seleção de ações pode seguir, no máximo, duas alternativas: uma se a condição for verdadeira e outra se a condição testada for falsa. Existem seleções simples, compostas e múltiplas.

Operadores Lógicos

Utilizados na confecção das condições

São eles: Portugol Linguagem C++– Maior que > >– Menor que < <– Maior ou igual a >= >=– Menor ou igual a <= <=– Diferente de <> !=– Igual a = ==

Operadores Relacionais

Complementando a confecção das condições

São eles: Portugol Linguagem C++– E e &&– OU ou ||– não não !

Operadores RelacionaisOperadores Relacionais

A Não A

V F

F V

A B A ou B

V V V

V F V

F V V

F F F

A B A e B

V V V

V F F

F V F

F F F

TreinamentoTreinamento1) Com base nas tabelas de decisão, determine os resultados lógicos das expressões mencionadas, assinalando se são verdadeiras ou falsas. Considere para as respostas os seguintes valores: X = 1, A = 3, B = 5, C = 8 e D = 7.

a) nao (X <= 3) resp: ( )

b) (X <> 1) e nao (B > A) resp: ( )

c) nao (B < 0) e (D > 8) resp: ( )

d) nao (X > -2) ou (C < 9) resp: ( )

e) (X > A) ou (A > C) resp: ( )

f) (B >= 5) resp: ( )

g) (C < 1) e (B >= A) resp: ( )

9

Estruturas de ControleEstruturas de ControleCondicional ou de seleçãoCondicional ou de seleção

Seleções Simples: A seleção mais simples existente é quando o único bloco

de comando (leitura, processo e/ou escreva) a ser realizado é aquele que a situação da <condição> é verdadeira. Não existe a opção falsa, ou não é necessário realizar nada neste tipo de opção. É o que chamamos de opção “default”.

10

Estruturas de ControleEstruturas de ControleCondicional ou de seleçãoCondicional ou de seleção

Portugol: se <condição> então bloco de comandos fim-se

Fluxograma:

<condições>F

V

Bloco de comandos

● Na Linguagem C:

if ( condição )

{

procedimento;

}

12

EXEMPLO 1:EXEMPLO 1:Leia um número e diga se ele é “maior que 10”.Leia um número e diga se ele é “maior que 10”.

inicio {declaração de variáveis} real N {comandos de entrada de dados} imprima (“Entre com N: “) leia (N) {processo e saída de dados} se N > 10 então

imprima (N,” maior que 10) fim-sefim

INICIO

N

N, “ Maior que 10”

FIM

N > 10F

V

13

#include <bits/stdc++.h>using namespace std;int main() { float N; //comandos de entrada de dados printf (“Entre com um número: “); scanf (“%f”,&N); //processo e saída de dados if (N > 10) {

printf (“%.1f maior que 10”,N); } return 0;}

Linguagem CLinguagem C

14

Estruturas de ControleEstruturas de ControleCondicional ou de seleçãoCondicional ou de seleção

Seleções Completa:

A seleção completa é dada por se...então...senão...fim-se onde se a <condição> for verdadeira é realizado o então e dentro dele os blocos de comandos 1, se for falsa, é realizado o senão e dentro dele os blocos de comandos 2.

15

Estruturas de ControleEstruturas de ControleCondicional ou de seleçãoCondicional ou de seleção

Portugol:se <condição> então bloco de comandos 1senão bloco de comandos 2fim-se

Fluxograma:

<condições>F

V

Bloco de comandos 1

Bloco de comandos 2

16

if ( condição ){ bloco de comandos 1;} else { bloco de comandos 2;}

Linguagem CLinguagem C

17

EXEMPLO 2:EXEMPLO 2:Leia um número natural e diga se ele é par ou impar.Leia um número natural e diga se ele é par ou impar.

inicio {declaração de variáveis} inteiro N Imprima (“Entre com N: “) leia (N) se resto (N,2) = 0 então imprima (N, “ é par”) senão imprima (N,” é impar) fim-sefim

INICIO

FIM

N

N, “ é par”

resto (N, 2) = 0F

V

N, “ é impar”

18

#include <bits/stdc++.h>using namespace std;int main() { int N; printf (“Entre com um número inteiro: “); scanf (“%d”,&N); if ((N % 2) == 0) { printf (“%d é par.”, N); } else { printf ( “%d é impar.”,N); } return 0;}

Linguagem CLinguagem C

TreinamentoTreinamento2) Determine o resultado lógicos das expressões mencionadas, assinalando se

são verdadeiras ou falsas. Considere para as respostas os seguintes valores:X = 3 A = 1 B = 5 C = 8 D = 0

a) não (X > 3) b) (X > 3) ou não (B > D)c) não (D < 0) e (C > 5) d) não (X > 3) ou (C < 7)

3) Indique a saída dos trechos de programa em português estruturado, mostrado abaixo. Para as saídas considere os seguintes valores:

A = 0 B = 9 C = 3 D = 2a) se nao (D > 3) então X ← (A + B) * D senão X ← (A - B) / C fim-se imprima (X)

b) se (A > B) ou (C <= 3) então

X ← (A + 2) * (B - 2) senão X ← (A + B) / D * (C + D) fim-se imprima (X)

20

Estruturas de ControleEstruturas de ControleCondicional ou de seleçãoCondicional ou de seleção

Seleções Composta:

A estrutura de seleções composta também é designada como seleção aninhada e é utilizada quando estivermos fazendo várias comparações (testes) sempre com a mesma variável. Esta estrutura é chamada de aninhada porque na sua representação fica uma seleção dentro de outra seleção.

21

Estruturas de ControleEstruturas de ControleCondicional ou de seleçãoCondicional ou de seleção

Portugol:se <condição 1> então se <condição 2> então bloco de comandos 11 senão bloco de comandos 12 fim-se bloco de comandos 1

senão se <condição 3> então bloco de comandos 21 senão bloco de comandos 22 fim-se bloco de comandos 2fim-se

22

<condições 1>F

V

Bloco de comandos 1 Bloco de comandos 2

Fluxograma:

<condições 2> <condições 3>

V V

F F

Bloco de comandos 11

Bloco de comandos 12

Bloco de comandos 21

Bloco de comandos 22

23

Estruturas de ControleEstruturas de ControleCondicional ou de seleçãoCondicional ou de seleção

Linguagem C:if ( condição 1 ) { if ( condição 2 ) { bloco de comandos 11; } else { bloco de comandos 12; } bloco de comandos 1;

} else { if ( condição 3 ) { bloco de comandos 21; } else { bloco de comandos 22; } bloco de comandos 2;}

24

EXEMPLO 3:EXEMPLO 3:Montar um programa que leia Montar um programa que leia três medidas e determine se três medidas e determine se essas medidas formam um essas medidas formam um

triângulo, se formam que tipo triângulo, se formam que tipo de triângulo ele é (isósceles, de triângulo ele é (isósceles,

escaleno ou eqüilátero).escaleno ou eqüilátero).

{declaração de variáveis}real A, B, Cinicio leia (A, B, C) se (A < B + C) e (B < A + C) e (C < A + B) então se (A = B) e (B = C) então imprima(“Triângulo Eqüilátero”) senão se (A = B) ou (A = C) ou (B = C) então imprima (“Triângulo Isósceles”) senão imprima (“Triângulo escaleno”) fim-se fim-se senão imprima (“As medidas não formam um triângulo”) fim-sefim

25

#include <bits/stdc++.h>using namespace std;

int main() { float A, B, C; scanf (“%f %f %f”,&A,&B,&C); if ((A < B + C) && (B < A + C) && (C < A + B)) { if ((A == B) && (B == C)) { printf(“Triângulo Equilátero”); } else { if ((A == B) || (A == C) || (B == C)) { printf (“Triângulo Isósceles”); } else { printf (“Triângulo escaleno”); } }

} else { printf (“As medidas

não formam um triângulo”);

} return 0;}

26

Estruturas de ControleEstruturas de ControleCondicional ou de seleçãoCondicional ou de seleção

Seleções Múltiplas:

Podemos com as seleções aninhadas criarmos múltiplas seleções, mas existe um comando ao qual as seleções múltiplas são melhor representadas. E com isto, podemos escolher mais opções que somente verdadeira e falsa.

Portugol:caso (<variável>) <valor_variável 1>:Comandos de bloco 1 <valor_variável 2>:Comandos de bloco 2 ... <valor_variável n>:Comandos de bloco n senão: Comandos de bloco F (opcional)fim-caso

27

<variável>

Bloco de comandos F

Fluxograma:

F

Bloco de comandos 1<valor_variável 1>

<valor_variável 2> Bloco de comandos 2

<valor_variável n> Bloco de comandos n

28

Estruturas de ControleEstruturas de ControleCondicional ou de seleçãoCondicional ou de seleção

Seleções Múltiplas:

Os BREAKs são para pular os casos seguintes.

LINGUAGEM C:switch ( variável ) { case <valor_variável 1> : Comandos de bloco 1; break; case <valor_variável 2> : Comandos de bloco 2; break; ... case <valor_variável n> : Comandos de bloco n; break; default: Comandos de bloco F (opcional)}

29

Estruturas de ControleEstruturas de ControleCondicional ou de seleçãoCondicional ou de seleção

OBSERVAÇÃO:

As seleções Múltiplas não aceitam variáveis CADEIA (STRING).

Exemplo 1Exemplo 1 Dado a data de nascimento de uma pessoa, no formato

DD MM AAAA, fazer um programa para ler esta data e imprimi-la na forma corrente, ou seja:

DD de nome do mês ao qual MM corresponde de AAA

O programa deverá fazer a consistência dos dados de entrada. ( dia e mês )

Observação: antes de fazer o programa, faça o algoritmo do mesmo.

Exemplos: dado: 20 3 1950 saída: 20 de março de 1950

dado: 35 10 1980 saída: dia do mês não permitido

dado: 3 20 1980 saída: mês não permitido

dado: 31 4 1980 saída: mês não tem 31 diasSugestão:Sugestão:

os valores DD, MM e AAAA devem ser fornecidos pelo usuário e armazenados cada um numa variável;

ALGORITMO / PORTUGOLalgoritmo para imprimir de forma corrente uma data de nascimento

inicio

1) Definição das variáveisinteiro dia, mes, ano

2) Entrada de dadosimprima ( “entre com a data de nascimento” )leia ( dia, mes, ano )

3) fazendo consistência dos dados e a conversão da data

se ( dia < 1) ou ( dia > 31 ) então imprima ( “dia errado” )

senão se ( mes < 1 ) ou ( mes > 12 ) então imprima ( “mês errado” ) senão se ( ano < 0 ) ou ( ano > 2010 ) então imprima ( “verifique o ano “ ) senão

caso ( mes ) 1 : imprima ( dia, “ de janeiro de “, ano ) 2 : se ( dia > 29 ) então imprima ( “mes com dias errado“ ) senão imprima ( dia, “ de fevereiro de “, ano ) fim_se 3 : imprima ( dia, “ de março de “, ano )

4 :

se ( dia > 30 )

então

imprima ( “mes com dias errado“ )

senão

imprima ( dia, “ de abril de “, ano )

fim_se

5 :

imprima ( dia, “ de maio de “, ano )

6 :

se ( dia > 30 )

então

imprima ( “mes com dias errado“ )

senão

imprima ( dia, “ de junho de “, ano )

fim_se

7 : imprima ( dia, “ de julho de “, ano )

8 : imprima ( dia, “ de agosto de “, ano )

9 : se ( dia > 30 ) então imprima ( “mes com dias errado“ ) senão imprima ( dia, “ de setembro de “, ano )

fim_se

10 : imprima ( dia, “ de outubro de “, ano )

11 : se ( dia > 30 ) então imprima ( “mes com dias errado“ ) senão imprima ( dia, “ de novembro de “, ano )

fim_se 12 : imprima ( dia, “ de dezembro de “, ano )

fim_caso

fim_se fim_se fim_sefim

LINGUAGEM C:

#include <bits/stdc++.h> using namespace std; int main () { int dia, mes, ano; printf ( “entre com a data de nascimento” );

scanf ( “%d %d %d”, &dia, &mes, &ano );

if (( dia < 1) || ( dia > 31 )) { printf ( “dia errado” );

} else { if (( mes < 1 ) || ( mes > 12 )) { printf ( “mês errado” ); } else { if (( ano < 0 ) || ( ano > 2010 )) { printf ( “verifique o ano “ ); } else {

switch ( mes ) { case 1 : printf ( “%d de janeiro de %d“, dia, ano ); break;

case 2 : if ( dia > 29 ) { printf ( “mes com dias errado“ ); } else { printf (“%d de fevereiro de %d“, dia, ano ); } break;

caso 3 :

printf ( “%d de março de %d“, dia, ano );

break;

caso 4 :

if ( dia > 30 )

{

printf ( “mes com dias errado“ );

} else {

printf ( “%d de abril de %d“, dia, ano );

}

break;

caso 5 :

printf ( “%d de maio de %d“, dia, ano );

break;

caso 6 :

if ( dia > 30 )

{

printf ( “mes com dias errado“ );

} else {

printf ( “%d de junho de %d“, dia, ano );

}

break;

caso 7 : printf ( “%d de julho de %d“, dia, ano );

break;

caso 8 : printf ( “%d de agosto de %d“, dia, ano );

break;

caso 9 : if ( dia > 30 ) { printf ( “mes com dias errado“ ); } else { printf ( “%d de setembro de %d“, dia, ano )

}

break;

caso 10 : printf ( “%d de outubro de %d“, dia, ano ); break;

caso 11 : if ( dia > 30 ) { printf ( “mes com dias errado“ ); } else { printf ( “%d de novembro de %d“, dia, ano );

} break; caso 12 : printf ( “%d de dezembro de %d“, dia, ano ); break; }

} } } }

ExerciseExercise

Faça os exercícios do URI:Faça os exercícios do URI: http://www.urionlinejudge.com.br/

1035 a 1038, 1040 a 1052 e 1061

Faça o exercício:Faça o exercício:http://br.spoj.com/problems/SALDO13/

http://br.spoj.com/problems/CAPITA13/ http://br.spoj.com/problems/TRIANG14/ http://br.spoj.com/problems/JFLIPE14/ http://br.spoj.com/problems/JGANGO14/

top related