FACULDADE DE CIÊNCIAS SOCIAIS E TECNOLÓGICAS Tecnologia em Redes de Computadores FACULDADE DE CIÊNCIAS SOCIAIS E TECNOLÓGICAS Tecnologia em Redes de Computadores Algoritmos e linguagens de programação 1 (aula 05) Prof. Alessandro Bernardo [email protected] http://bsi.k6.com.br FACULDADE DE CIÊNCIAS SOCIAIS E TECNOLÓGICAS Tecnologia em Redes de Computadores Estrutura de controle condicional Na aula passada foram visos alguns exemplos da estrutura de controle condicional do C++, a sintaxe e os operadores relacionais. Entretanto, para resolver alguns problemas envolvendo essa estrutura, deve-se conhecê-la um pouco mais. Isso será feito a partir da apresentação de exemplos. Exemplos: (1) Fazer um programa que leia um número do teclado e escreva se ele é positivo, negativo ou zero; (2) Fazer um programa que leia dois números reais do teclado e os escreva na ordem crescente e na ordem decrescente; (3) Fazer um programa que leia três números do teclado e escreva o maior deles. FACULDADE DE CIÊNCIAS SOCIAIS E TECNOLÓGICAS Tecnologia em Redes de Computadores Estrutura condicional Exemplo: (1) Fazer um programa que leia um número do teclado e escreva se ele é positivo, negativo ou zero; Nesse caso, deve-se verificar três possibilidades. Entretanto, a estrutura condicional que vimos pode tratar, em uma condição, apenas duas. Com isso, deve-se utilizar aninhamento de estruturas (uma estrutura dentro da outra), como visto no exemplo. FACULDADE DE CIÊNCIAS SOCIAIS E TECNOLÓGICAS Tecnologia em Redes de Computadores Estrutura condicional (1) Fazer um programa que leia um número do teclado e escreva se ele é positivo, negativo ou zero; using namespace std; #include <iostream> int main() { cout << “Insira um número:”; double num; cin >> num; if (num > 0) cout << “número positivo”; else if (num < 0) cout << “número negativo”; else cout << “número igual a zero”; system(“pause”); return(0); } FACULDADE DE CIÊNCIAS SOCIAIS E TECNOLÓGICAS Tecnologia em Redes de Computadores Estrutura condicional (1) Fazer um programa que leia um número do teclado e escreva se ele é positivo, negativo ou zero; using namespace std; #include <iostream> int main() { cout << “Insira um número:”; double num; cin >> num; if (num > 0) cout << “número positivo”; else if (num < 0) cout << “número negativo”; else cout << “número igual a zero”; system(“pause”); return(0); } Essa estrutura if esta dentro de outra. Assim, ela só executa quando a condição (num > 0) é falsa. FACULDADE DE CIÊNCIAS SOCIAIS E TECNOLÓGICAS Tecnologia em Redes de Computadores Estrutura de controle condicional (2) Fazer um programa que leia dois números reais do teclado e os escreva na ordem crescente e na ordem decrescente;’ Nesse caso, no momento em que sabe-se qual número é maior, deve-se escrever os dois em ordem crescente e decrescente. O melhor para esse caso é inserir duas linhas de execução dentro do if e duas dentro do else. Entretanto, o formato que vimos na aula anterior não permite isso. Assim, para incluir mais de uma linha dentro de cada bloco é necessário delimitá-las por chaves, como visto na solução do exemplo. FACULDADE DE CIÊNCIAS SOCIAIS E TECNOLÓGICAS Tecnologia em Redes de Computadores Estrutura de controle condicional (3) Fazer um programa que leia dois números reais do teclado e os escreva na ordem crescente e na ordem decrescente;’ cout << “Insira dois número:”; double a,b; cin >> a >> b; if (a > b) { cout << “crescente:” << b << a << endl; cout << “decrescente:” << a << b << endl; } else { cout << “crescente:” << a << b << endl; cout << “decrescente:” << b << a << endl; } FACULDADE DE CIÊNCIAS SOCIAIS E TECNOLÓGICAS Tecnologia em Redes de Computadores Estrutura de controle condicional (2) Fazer um programa que leia dois números reais do teclado e os escreva na ordem crescente e na ordem decrescente;’ cout << “Insira dois número:”; double a,b; cin >> a >> b; if (a > b) { cout << “crescente:” << b << a << endl; cout << “decrescente:” << a << b << endl; } else { cout << “crescente:” << a << b << endl; cout << “decrescente:” << b << a << endl; } Linhas executadas caso a condição seja verdadeira. Linhas executadas caso a condição seja falsa. FACULDADE DE CIÊNCIAS SOCIAIS E TECNOLÓGICAS Tecnologia em Redes de Computadores Estrutura de controle condicional Sintaxe: if ( condição ) { // linhas executadas quando a condição é verdadeira } else { // linhas executadas quando a condição é falsa } obrigatório opcional FACULDADE DE CIÊNCIAS SOCIAIS E TECNOLÓGICAS Tecnologia em Redes de Computadores Estrutura de controle condicional (2) Fazer um programa que leia três números do teclado e escreva o maior deles Nesse caso, pode-se utilizar várias estruturas if aninhadas. Entretanto, se utilizarmos operadores lógicos poderemos fazer isso com menos comandos if. Em algoritmo, o código poderia ficar assim: SE a for maior que b E a for maior que c ENTÃO escrever valor de a SENÃO SE b for maior que c ENTÃO escrever valor de b SENÃO escrever valor de c FACULDADE DE CIÊNCIAS SOCIAIS E TECNOLÓGICAS Tecnologia em Redes de Computadores Estrutura de controle condicional (2) Fazer um programa que leia três números do teclado e escreva o maior deles cout << “Insira três números:”; double a,b, c; cin >> a >> b >> c; if ( (a > b) && (a > c) ) { cout << “maior:” << a << endl; } else { if (b > c) cout << “maior:” << b << endl; else cout << “maior:” << c << endl; } cout << “Insira três números:”; double a,b, c; cin >> a >> b >> c; ou if ( (a > b) && (a > c) ) cout << “maior:” << a << endl; else if (b > c) cout << “maior:” << b << endl; else cout << “maior:” << c << endl; FACULDADE DE CIÊNCIAS SOCIAIS E TECNOLÓGICAS Tecnologia em Redes de Computadores Estrutura de controle condicional (2) Fazer um programa que leia três números do teclado e escreva o maior deles. cout << “Insira três números:”; double a,b, c; cin >> a >> b >> c; if ( (a > b) && (a > c) ) { cout << “maior:” << a << endl; } else { if (b > c) cout << “maior:” << b << endl; else cout << “maior:” << c << endl; } O operador lógico de conjunção em C++ é &&. FACULDADE DE CIÊNCIAS SOCIAIS E TECNOLÓGICAS Tecnologia em Redes de Computadores Operadores lógicos Operador Significado && E || OU ! NÃO FACULDADE DE CIÊNCIAS SOCIAIS E TECNOLÓGICAS Tecnologia em Redes de Computadores Operadores lógicos p q p && q p || q !p F F V V F V V F F F V F F V V V V V F F (7 > 4) || (5 == 3) --- verdadeiro ( 10 < 10 ) || (5 != 5) --- falso (7 > 4) && ( 5 == 3 ) --- falso ( 10 < 10 ) && (5 != 5) --- falso (10 < 20) && (7 != 20) --- verdadeiro (10 < 20) || (7 != 20) --- verdadeiro FACULDADE DE CIÊNCIAS SOCIAIS E TECNOLÓGICAS Tecnologia em Redes de Computadores Operadores lógicos p q p && q p || q !p F F V V F V V F F F V F F V V V V V F F !(7 > 4) || (5 == 3) --- falso !( (7 > 4) && ( 5 == 3 ) ) --- verdadeiro !( (10 < 20) && (7 != 20) ) --- falso FACULDADE DE CIÊNCIAS SOCIAIS E TECNOLÓGICAS Tecnologia em Redes de Computadores Estrutura de controle condicional Exemplos: (1) Fazer um programa que leia três números e os escreva em ordem crescente; (2) Fazer um programa que leia os três coeficientes de uma equação de segundo grau e calcule as raízes dessa equação. Esse programa deverá emitir uma mensagem de erro caso possa ocorrer divisão por zero ou o cálculo da raiz quadrada de número negativo. FACULDADE DE CIÊNCIAS SOCIAIS E TECNOLÓGICAS Tecnologia em Redes de Computadores Estrutura de controle condicional (1) Fazer um programa que leia três números e os escreva em ordem crescente; cout << “Insira três números:”; double a,b, c; cin >> a >> b >> c; if ( (a > b) && (a > c) ) if (b > c) cout << c << b << a; else cout << b << c << a; else if (b > c) if (a > c) cout << c << a << b; else cout << a << c << b; else if (a > b) cout << b << a << c; else cout << a << b << c; FACULDADE DE CIÊNCIAS SOCIAIS E TECNOLÓGICAS Tecnologia em Redes de Computadores Estrutura de controle condicional (1) Fazer um programa que leia três números e os escreva em ordem crescente; cout << “Insira três números:”; double a,b, c; cin >> a >> b >> c; Nessa solução existem estruturas if aninhadas. Assim, caso a primeira condição seja verdadeira, esse será o código a ser executado. Já se essa condição for falsa, o código executado será esse. if ( (a > b) && (a > c) ) if (b > c) cout << c << b << a; else cout << b << c << a; else if (b > c) if (a > c) cout << c << a << b; else cout << a << c << b; else if (a > b) cout << b << a << c; else cout << a << b << c; FACULDADE DE CIÊNCIAS SOCIAIS E TECNOLÓGICAS Tecnologia em Redes de Computadores Estrutura de controle condicional (1) Fazer um programa que leia três números e os escreva em ordem crescente; cout << “Insira três números:”; double a,b, c; cin >> a >> b >> c; Esses dois blocos de execução também estão aninhados. if ( (a > b) && (a > c) ) if (b > c) cout << c << b << a; else cout << b << c << a; else if (b > c) if (a > c) cout << c << a << b; else cout << a << c << b; else if (a > b) cout << b << a << c; else cout << a << b << c; FACULDADE DE CIÊNCIAS SOCIAIS E TECNOLÓGICAS Tecnologia em Redes de Computadores Estrutura de controle condicional (2) Fazer um programa que leia os três coeficientes de uma equação de segundo grau e calcule as raízes dessa equação. Esse programa deverá emitir uma mensagem de erro caso possa ocorrer divisão por zero ou o cálculo da raiz quadrada de número negativo. cout << “Insira os três coeficientes:”; double a,b, c; cin >> a >> b >> c; double delta = b*b – 4*a*c; if ( (delta >= 0) && (a != 0) ) { double x1, x2; x1 = ( -b + sqrt(delta) ) / (2*a); x2 = ( -b – sqrt(delta) ) / (2*a); cout << “raízes = ” << x1 << x2 << endl; } else { cout << “ERRO!!”; } FACULDADE DE CIÊNCIAS SOCIAIS E TECNOLÓGICAS Tecnologia em Redes de Computadores Estrutura de controle condicional Exercícios: (1) Faça um programa para ler os comprimentos dos três lados de um triângulo e escrever se esse triângulo pode existir ou não. (2) Fazer um programa que leia três números e escreva o menor deles; (3) Fazer um programa que leia dois números (a e b) e escreva os resultados das expressões a seguir. Esse programa deverá emitir uma mensagem de erro caso ocorra divisão por zero ou raiz quadrada de número negativo. a 2 b2 f1 a b e f2 ab b