You are on page 1of 56

Logo

Aula 01

Programação
Condicional

Programação repetitiva

2
Programação Condicional
• Uma programação condicional, 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
programa vai tomar decisão de um processo
(leitura, processo e impressão) a ser realizado.
• Isto é, são testados parâmetros e, dependendo de
seus valores, tomamos um caminho ou outro. As
condições que são testadas num programa 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.
3
Operadores Lógicos
• Os operadores lógicos são utilizados na
confecção das condições (verdadeira ou falsa).
• Esses operadores são:

Significado Operador em C/C++


Maior que >
Menor que <
Maior ou igual a >=
Menor ou igual a <=
Diferente de !=
Igual a ==

4
Valores Booleanos
• Os operadores lógicos na linguagem irão servir
para comparar duas variáveis ou uma variável e
uma contante ou simplesmente uma constante.
Em C e C++ o valor ‘0’ tem o significado de
falso e qualquer valor diferente de ‘0’ o
significado de verdadeiro.
• No entanto, em C++ tem o tipo booleano:
bool b1, b2;
• Esse tipo aceita só dois valores, true ou false.

5
Pontos importantes do tipo
bool
• Por default o valor true é igual a 1 e o valor false
igual a 0.
• Pode-se usar variável do tipo bool ou valores true
e false em expressão matemáticas. Por exemplo:
int x = false + true + 6;
é uma operação valida e o resultado de x é igual a
7, com false = 0 e true = 1.
• É também possível converter valores inteiros ou
reais para o tipo bool.
bool x = 0; // false
bool y = 100; // true
bool z = 15.75; // true
bool w = 0.0; // false 6
Utilizando operadores lógicos
• Pode-se usar os operadores lógicos conforme o
programa:

#include <bits/stdc++.h> b1 = B <= 2;


using namespace std; cout << b1 << endl; Resultado:
int main() { b1 = A != 10; 0
int A = 10, B = 7, C = 5, D = 3; cout << b1 << endl; 1
bool b1; b1 = D == 3; 1
b1 = A > 10; cout << b1 << endl; 0
cout << b1 << endl; b1 = C; 0
b1 = B < A; cout << b1 << endl; 1
cout << b1 << endl; return 0; 1
b1 = C >= D; }
cout << b1 << endl;

7
Operadores Relacionais
• Os operadores lógicos tem que ser
complementados, pois não podemos comparar
mais de duas variáveis, como por exemplo na
matemática: A = B = C. Não se pode fazer assim
na linguagem de programação C/C++. Para isso
usamos os operadores relacionais: não, e e ou,
conforme a tabela.
Significado Operador em C/C++
não !
e &&
ou ||

8
Tabela dos Operadores
Relacionais
• Para relacionar os operadores tem-se as tabelas:
A B A && B
A !A V V V
V F V F F
F V F V F
F F F
A B A || B
V V V
O e e ou aqui estão
V F V
representados para
F V V duas variáveis, mas
F F F poderiam ser para
mais.
9
Utilizando os Operadores
Relacionais
• Pode-se usar os operadores lógicos conforme o
programa:
#include <bits/stdc++.h>
using namespace std;
int main() {
int A = 10, B = 7, C = 5, D = 3;
bool b1; Resultado:
b1 = !(A > 10); 1
cout << b1 << endl; 0
b1 = ((B < A) && (C < D)); 1
cout << b1 << endl; 0
b1 = ((A >= D) || (B <= C)); 1
cout << b1 << endl;
b1 = (!(A >= D) || (B <= C));
cout << b1 << endl;
b1 = ((B < A) && !(C < D));
cout << b1 << endl;
return 0;
}

10
Seleção Simples
• A seleção mais simples a ser realizada é aquela
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”.
• Na linguagem C/C++ fica:
if (<condição>)
{
blocos de comandos;
}
Vale observar que as chaves ({ e }) só são
necessárias, quando se tem mais de um bloco de
comando. Se tiver um só bloco de comando, não
precisa colocá-las.
11
Exemplo de Seleção Simples
• Faça um programa que leia um número e diga se
ele é “maior que 10”.
#include <bits/stdc++.h> Para N = 3.45:
using namespace std;
int main() { Para N = 10.45:
float N; 10.4 maior que 10

scanf ("%f",&N);
if (N > 10)
{
printf ("%.1f maior que 10\n",N);
}
return 0;
}
12
Seleção Completa
• A seleção completa é dada por if (<condição>)
{…} else {...} onde se a <condição> for
verdadeira é realizado o primeiro {...} e dentro
dele os blocos de comandos 1, se for falsa, é
realizado o segundo {...} e dentro dele os blocos
de comandos 2.
• Na linguagem C/C++ fica:
if (<condição>)
{
blocos de comandos 1;
} else {
blocos de comandos 2;
}
13
Exemplo de Seleção Completa
• Faça um programa que leia um número natural e
diga se ele é par ou impar.
#include <bits/stdc++.h>
using namespace std;
int main() { Para N = 8:
8 é par.
int N; Para N = 7:
scanf ("%d",&N); 7 é impar.
if ((N % 2) == 0)
{
printf ( "%d é par.\n", N);
} else {
printf ( "%d é impar.\n",N);
}
return 0;
} 14
Operador de Seleção
Completa
• O operador de seleção completa é dados por
EXP1 ? EXP2 : EXP3;
onde EXP1 é uma expressão condicional, e EXP2
e EXP3 é um único bloco de comando para o
verdadeiro e falso, respectivamente.

15
Exemplo de Operador de
Seleção Completa
• Faça um programa que leia um número natural e
diga se ele é par ou impar.
#include <bits/stdc++.h>
using namespace std;
int main() {
int N;
scanf ("%d",&N);
((N % 2) == 0) ? printf ( "%d é par.\n", N)
: printf ( "%d é impar.\n",N);
return 0;
}
Para N = 8:
8 é par.
Para N = 7:
7 é impar.
16
Exemplo de Operador de
Seleção Completa
• Faça um programa que leia um número natural e
se for par mostre 0 e se for impar mostre 1.
#include <bits/stdc++.h>
using namespace std;
int main() {
int N, X;
scanf ("%d",&N);
X = ((N % 2) == 0) ? 0 : 1;
printf("%d\n", X);
return 0;
}
Para N = 8:
0
Para N = 7:
1
17
Seleção Composta
• A estrutura de seleção 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.

18
Seleção Composta
• Na linguagem C/C++ é:

if ( <condição 1> )
{ } else {
if ( <condição 2> ) if ( <condição 3> )
{ {
bloco de comandos 11; bloco de comandos 21;
} else { } else {
bloco de comandos 12; bloco de comandos 22;
} }
bloco de comandos 1; bloco de comandos 2;
}

19
Exemplo de Seleção Composta
• Faça um programa que leia três medidas e
determine se essas medidas formam um triângulo,
se formam que tipo de triângulo ele é (isósceles,
escaleno ou equilátero).

20
Exemplo de Seleção Composta
#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)) Para 3 3 3:
{ Triângulo Equilátero
printf("Triângulo Equilátero\n"); Para 3 3 4:
} else { Triângulo Isósceles
if ((A == B) || (A == C) || (B == C)) Para 3 4 5:
{ Triângulo escaleno
printf ("Triângulo Isósceles\n"); Para 10 3 4:
} else { As medidas não formam um triângulo
printf ("Triângulo escaleno\n");
}
}
} else {
printf ("As medidas não formam um triângulo\n");
}
return 0;
} 21
Seleção Multipla
• Pode-se criar com as seleções aninhadas 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.

22
Seleção Composta
• Na linguagem C/C++ é:
switch ( variavel ) {
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)
}
O comando break serve para retirar de dentro do comando.

23
Exemplo de Seleção Multipla
• Faça um programa que escolha a letra que
começa o nome de uma fruta, conforme a lista
abaixo:
a)Abacaxi
b)Banana
c)Caju
d)Damasco
• Caso o usuário digite outra letra, imprima que
está errado.

24
Exemplo de Seleção Multipla

#include <bits/stdc++.h>
using namespace std;
int main() {
char opcao;
printf("Escolha a primeira letra de uma fruta:\n");
printf("a) abacaxi\n");
printf("b) banana\n");
printf("c) caju\n");
printf("d) damasco\n");
scanf("%d",&opcao);

25
Exemplo de Seleção Multipla
switch(opcao) {
case 'a':
printf("abacaxi\n");
break;
case 'b': Para a:
printf("banana\n"); abacaxi
break;
Para b:
case 'c':
printf("caju\n"); banana
break; Para c:
case 'd': caju
printf("damasco\n"); Para d:
break; damasco
default: Para e:
printf("Opcao errada\n"); Opcao errada
}
return 0;
} 26
Exercícios
• https://www.urionlinejudge.com.br/judge/en/login

– URI 1035 a 1038, 1040 a 1052, 1061, 1828, 1837, 1847,


1929, 1933, 1960, 2057, 2059, 2235, 2313, 2670, 2717.

27
Repetição
• Esta estrutura é utilizada quando determinada
parte do programa precisa ser repetida;

• Existem 2 tipos de repetição:

– Repetições não definidas


– Repetições definidas.

28
Repetição Definida
• Este tipo de repetição é utilizado quando sabe-se
à priori quantas vezes uma determinada ação vai
ser repetida no programa.

• Exemplos:
– Dê 5 voltas no campo de futebol afim de se
exercitar;
– Leia 10 números inteiros;

29
Repetição Não Definida
• Neste tipo de repetição, a quantidade de vezes
que a ação é repetida, não é conhecida à priori;

• Exemplo:
– Dê voltas no campo de futebol afim de se
exercitar, mas quando se cansar, pare;
– Leia números inteiros até achar o número -1.

30
Repetição
• Repetição definida:
– for (<valor inicial>; <condição>; <passos>)

• Repetição não definida:


– while(<condição>)

– do {
} while (<condição>)

31
While
• Na estrutura while as instruções a serem repetidas
podem não ser executadas nenhuma vez, pois o
teste fica no início da repetição, então a execução
das instruções (que estão "dentro" da repetição)
depende do teste. Nesta estrutura, a repetição é
finalizada quando o teste é Falso (F), ou seja,
enquanto o teste for Verdadeiro (V) as instruções
serão executadas e, quando for Falso, o laço é
finalizado.

while ( <condição> ) {
blocos de comando;
}
32
Exemplo com while
• Faça um programa que leia e imprima vários números
inteiros até que se digita 999.

#include <bits/stdc++.h>
using namespace std; 10
Esse programa int main() a = 10
-5
não tem { a = -5
Laço definido int a; 20
a = 20
scanf("%d", &a); 999
while (a != 999) {
printf ( "a = %d\n" , a);
scanf("%d", &a);
}
return 0;
}
33
O que é flag
• Flag é uma variável que permite você assumir o
verdadeiro ou falso de uma condição.

• No caso o flag do programa anterior é quando a


variável ‘a’ recebe o valor 999.

34
Exemplo com while
• Faça um programa que imprima os números inteiros de
10 a 15.

#include <bits/stdc++.h>
using namespace std; a = 10
int main() a = 11
Esse programa
{ a = 12
tem um a = 13
int a; a = 14
laço definido
a = 10;
while (a < 15) {
printf ( "a = %d\n" , a);
a++;
}
return 0;
}
35
Exemplo com while
• No exemplo anterior, tem-se:

– Variável de controle da repetição: a

– Valor inicial da variável de controle: 10

– Variação da variável de controle: a = a + 1


(++ em C/C++)

– Condição de término da repetição: a ≥ 15

36
Do While
• Na estrutura do-while as instruções a serem
repetidas são executadas pelo menos uma vez,
pois o teste fica no fim da repetição, então a
execução das instruções (que estão "dentro" da
repetição) não depende do primeiro teste. Nesta
estrutura, a repetição é finalizada quando o teste é
Falso (F), ou seja, enquanto o teste for Verdadeiro
(V) as instruções serão executadas e, quando for
Falso, o laço é finalizado. Cuidado com o ponto e
virgula após a condição.

do {
blocos de comando;
} while ( <condição> );
37
Exemplo com while
• Faça um programa que leia e imprima vários
números inteiros até que se digita 999.
#include <bits/stdc++.h>
using namespace std; 10
Esse programa int main() a = 10
-5
não tem { a = -5
Laço definido int a; 20
a = 20
do { 999
scanf("%d", &a); a = 999
printf ( "a = %d\n" , a);
} while (a != 999);
return 0;
}
38
Exemplo com while
• Faça um programa que imprima os números
inteiros de 10 a 15.
#include <bits/stdc++.h>
using namespace std; a = 10
int main() a = 11
Esse programa
{ a = 12
tem um a = 13
int a; a = 14
laço definido
a = 10;
do {
printf ( "a = %d\n" , a);
a++;
} while (a < 15);
return 0;
}
39
For
• Na estrutura for as instruções começam com um
valor da inicial para a variável, e encerra quando
a condição for Falso (F). Isso é possível, pois
coloca-se o passo que será dado apos ser
verificada a condição.

for (<variavel> = condição inicial; <condição> ; <passo>) {


blocos de comando;
}

40
Exemplo com while
• Faça um programa que leia e imprima vários números
inteiros até que se digita 999.

#include <bits/stdc++.h>
CUIDADO!!! using namespace std; 10
Pode-se usar o for int main() a = 10
-5
como sendo o { a = -5
while int a; 20
a = 20
scanf("%d", &a); 999
for ( ;a != 999; ) {
printf ( "a = %d\n" , a);
scanf("%d", &a);
}
return 0;
}
41
Exemplo com while
• Faça um programa que imprima os números
inteiros de 10 a 15.
#include <bits/stdc++.h>
using namespace std; a = 10
int main() a = 11
a = 12
{ a = 13
int a; a = 14
Simplificou for (a = 10; a < 15; a++) {
printf ( "a = %d\n" , a);
}
return 0;
}

42
Laços infinito

#include <bits/stdc++.h>
using namespace std;
int main()
{ Não
int a; para o
a = 0; laço.
while (1) {
printf ( "a = %d\n" , a);
a++;
}
return 0;
}

43
Imprimindo números impares

#include <bits/stdc++.h>
using namespace std; 23 32 24 33
int main() 23 25
25 27
{ 27 29
int i, n, m; 29 31
31 33
scanf("%d %d", &n, &m);
if (n % 2 == 0) n++;
for (i = n; i <= m; i+=2) {
printf("%d\n", i);
}
return 0;
}

44
Contador
#include <bits/stdc++.h>
using namespace std;
23 43
int main() Entre 23 e 43 tem 21 numeros
{
int i, n, m, cont;
scanf("%d %d", &n, &m);
cont = 0;
for (i = n; i <= m; i++) {
cont++;
}
printf("Entre %d e %d tem %d numeros\n", n, m, cont);
return 0;
}

45
Somador
#include <bits/stdc++.h>
using namespace std;
23 32
int main() A soma de todos entre 23 e 32 da: 275
{
int i, n, m, soma;
scanf("%d %d", &n, &m);
soma = 0;
for (i = n; i <= m; i++) {
soma += i;
}
printf("A soma de todos ");
printf("entre %d e %d da: %d\n", n, m, soma);
return 0;
}
46
Produtor ou Fatorial
#include <bits/stdc++.h>
using namespace std;
12 15
int main() O produto de todos entre 12 e 15 da: 32760
{
int i, n, m, fat;
scanf("%d %d", &n, &m);
fat = 1;
for (i = n; i <= m; i++) {
fat *= i;
}
printf("O produto de todos ");
printf("entre %d e %d da: %d\n", n, m, fat);
return 0;
}
47
Freopen
• Alguns problemas nos faz ler os valores direto de
arquivos e podem ser para entrada e saída. Uma
solução fácil para isso é escrever o código
normalmente usando fluxos padrão, mas
adicionando o comando freopen, como a seguir:

freopen("input.txt", "r", stdin);


freopen("output.txt", "w", stdout);

48
Freopen
• Alguns problemas nos faz ler os valores direto de
arquivos e podem ser para entrada e saída. Uma
solução fácil para isso é escrever o código
normalmente usando fluxos padrão, mas
adicionando o comando freopen, como a seguir:

freopen("input.txt", "r", stdin);


freopen("output.txt", "w", stdout);

49
Lendo dados do arquivo
Arquivo “entrada.txt”
#include <bits/stdc++.h> 12
using namespace std; 5
int main() 7
{ 8
int i, x; 16
freopen("entrada.txt", "r", stdin); x = 12
i = 0; x=5
while (scanf("%d", &x) != EOF) x = 7
{ x=8
printf("x = %d\n", x); x = 16
i++; Foram impressos: 5 numero(s)
}
printf("Foram impressos: %d numero(s)\n", i);
return 0;
} 50
Lendo dados do arquivo
Arquivo “entrada.txt”
#include <bits/stdc++.h> 12
using namespace std; 5
int main() 7
{ 8
int i, x; 16
freopen("entrada.txt", "r", stdin); x = 12
i = 0; x=5
while (cin >> x) x=7
{ x=8
printf("x = %d\n", x); x = 16
i++; Foram impressos: 5 numero(s)
}
printf("Foram impressos: %d numero(s)\n", i);
return 0;
} 51
Lendo dados do arquivo
Até um valor de parada
#include <bits/stdc++.h>
using namespace std; Arquivo “entrada.txt”
int main() 12
{ 5
int i, x; 7
freopen("entrada.txt", "r", stdin); 0
i = 0; x = 12
while (scanf("%d", &x) != EOF) x = 5
{ x=7
if (x == 0) break; Foram impressos: 3 numero(s)
printf("x = %d\n", x);
i++;
}
printf("Foram impressos: %d numero(s)\n", i);
return 0;
} 52
Lendo dados do arquivo
Até um valor de parada
#include <bits/stdc++.h>
using namespace std; Arquivo “entrada.txt”
int main() 12
{ 5
int i, x; 7
freopen("entrada.txt", "r", stdin); 0
i = 0; x = 12
while (cin >> x) x=5
{ x=7
if (x == 0) break; Foram impressos: 3 numero(s)
printf("x = %d\n", x);
i++;
}
printf("Foram impressos: %d numero(s)\n", i);
return 0;
} 53
Obtendo o maior valor de um
#include <bits/stdc++.h> conjunto
using namespace std;
int main()
{ Arquivo “entrada.txt”
const int INF = -0x3f3f3f3f; 5
int i, x, n, maior; 12875
freopen("entrada.txt", "r", stdin);
scanf("%d", &n); O maior valor eh: 8
maior = INF;
for (i = 1; i <= n; i++)
{
scanf("%d", &x);
if (maior < x) maior = x;
}
printf("O maior valor eh: %d\n", maior);
return 0;
} 54
Obtendo o menor valor de um
#include <bits/stdc++.h> conjunto
using namespace std;
int main()
{ Arquivo “entrada.txt”
const int INF = 0x3f3f3f3f; 5
int i, x, n, menor; 12875
freopen("entrada.txt", "r", stdin);
scanf("%d", &n); O menor valor eh: 1
menor = INF;
for (i = 1; i <= n; i++)
{
scanf("%d", &x);
if (menor > x) menor = x;
}
printf("O menor valor eh: %d\n", menor);
return 0;
} 55
Exercícios
• https://www.urionlinejudge.com.br/judge/en/login

– URI 1059 a 1061, 1064 a 1067, 1070 a 1075, 1078 a 1080,


1094 a 1099, 1101, 1113 a 1118, 1131 a 1134, 1142 a
1146, 1149 a 1151, 1153 a 1160, 1164 a 1165, 1541, 1564,
1589, 1759, 1789, 1828, 1858, 1866, 1961, 1962, 1985,
2003, 2006, 2028, 2029, 2060, 2143, 2146, 2152, 2161,
2166, 2334, 2483, 2486, 2691.

56

You might also like