olimpíada brasileira de informáticarcosta62br.unifei.edu.br/obi/aula_03.pdf · uma estrutura de...
Post on 21-Jul-2020
3 Views
Preview:
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