ALGORITMOS – AULA 3 Operadores Relacionais, Lógicos e comandos de condição Expressões Lógicas Denomina-se expressão lógica aquela cujos operadores são lógicos e/ou relacionais e cujos operandos são relações e/ou variáveis e/ou constantes do tipo lógico. expressão lógica operando lógico operando lógico operador lógico constante lógica não variável lógica expressão relacional Operadores Relacionais Os operadores relacionais são utilizados para realizar comparações entre dois valores (constantes, variáveis ou expressões aritméticas) de mesmo tipo primitivo. Operador Símbolo igualdade == diferente != maior > maior igual >= menor < menor igual <= O resultado obtido de uma expressão relacional é sempre um valor lógico. Operadores Lógicos Os operadores lógicos mais utilizados são: Símbolo Função && E => Conjução || OU => disjunção ! NÃO => Negação Comando de Atribuição Permite-nos fornecer um valor a uma certa variável, onde o tipo dessa informação deve ser compatível com o tipo da variável. O comando da atribuição possui a seguinte sintaxe: atribuição expressão identificador = expressão expressão aritmética expressão lógica ; Exemplo: bool: A, B; int: X; A = verdadeiro; X = 8 + (13 % 5); B = 5 == 3; Comandos de Entrada e Saída Sintaxe do comando da entrada de dados: entrada de dados scanf ( “escape”, &variavel Escapes (formato de entrada de dados): %f – float %d - int Exemplos: scanf(“%d”, &X); scanf(“%f”, &NOTA); ) ; Saída de Dados Sintaxe do comando da saída de dados: , saída de dados printf ( variável constante expressão Exemplos: printf(“ola mundo”); printf(“sua media = %f”, media); printf(“ %f + %f = %f”, a, b, soma); ) ; Blocos Um bloco é definido como um conjunto de ações com uma função definida. Algoritmo seria um bloco !? Serve também para definir os limites nos quais as variáveis declaradas em seu interior são conhecidos. Para delimitar um bloco, utiliza-se os delimitadores: inicio e fim, como segue: blocos inicio ação , fim ; Exemplo de Bloco { | | | | | | } início do bloco (algoritmo) {declaração de variáveis} {seqüência de ações} Estrutura Sequencial O Fluxo de Controle segue a mesma sequência linear da nossa escrita, ou seja: De cima para baixo; Da esquerda para direita Cada ação é seguida de um ; Objetiva separar uma ação da outra Indica que a próxima ação da sequência deve ser executada Estrutura sequencial Algoritmo 3.2 - Média Aritmética { // declaração de variáveis float N1, N2, N3, N4; // notas bimestrais float MA; // média anual // entrada de dados scanf(“%f”,&N1); scanf(“%f”,&N2); scanf(“%f”,&N3); scanf(“%f”,&N4); // processamento MA = (N1 + N2 + N3 + N4) / 4; printf(“media = %f \n”, MA); } Estruturas de Seleção São aquelas que permitem alterar o Fluxo de Execução, de forma a selecionar qual parte deve ser executada Essa “decisão” de execução é tomada a partir de uma condição, que pode resultar apenas em Verdade ou Falsidade Uma condição é representada por expressões relacionais ou lógicas As estruturas de seleção podem ser classificadas em simples, compostas ou encadeadas Seleção Simples if(condição) { // início do bloco verdade comando 1; comando 2; ... comando n; // fim do bloco verdade } Quando a <condição> for verdadeira o “bloco verdade” é executado Quando a <condição> for falsa o “bloco verdade” não é executado Seleção Simples Algoritmo 3.3 - Média Aritmética com Aprovação { // declaração de variáveis float N1, N2, N3, N4; // notas bimestrais float MA; // média anual // entrada de dados scanf(“%f”,&N1); scanf(“%f”,&N2); scanf(“%f”,&N3); scanf(“%f”,&N4); // processamento MA = (N1 + N2 + N3 + N4) / 4; printf(“media = %f \n”, MA); if(MA >=7){ printf(“aprovado”); } } Seleção Composta if(condição) { // início do bloco verdade comando 1; comando n; // fim do bloco verdade } else { // início do bloco falsidade comando 1; comando n; // fim do bloco falsidade } Quando a <condição> for verdadeira o “bloco verdade” é executado Quando a <condição> for falsa o “bloco falsidade” é executado Seleção Composta Algoritmo 3.4 - Média Aritmética com aprovação e reprovação { // declaração de variáveis float N1, N2, N3, N4; // notas bimestrais float MA; // média anual // entrada de dados scanf(“%f”,&N1); scanf(“%f”,&N2); scanf(“%f”,&N3); scanf(“%f”,&N4); MA = (N1 + N2 + N3 + N4) / 4; printf(“media = %f \n”, MA); if(MA >=7){ printf(“aprovado”); } else { printf(“reprovado”); } } Seleção Encadeada Ocorre quando uma seleção tem como ação uma outra seleção Uma seleção encadeada pode ser: Heterogênea: Quando não é possível identificar padrão de comportamento Homogênea: Quando é possível identificar padrão de comportamento se – então – se: quando depois de cada então ocorre outro se se – senão – se: quando depois de cada senão ocorre outro se Seleção Encadeada Dados três valores A, B, C, verificar se eles podem ser os comprimentos dos lados de um triângulo Caso positivo, verificar se compõem Triângulo equilátero Triângulo isósceles Triângulo escaleno A B C Seleção Encadeada Dados três valores A, B, C, verificar se eles podem ser os comprimentos dos lados de um triângulo Caso positivo, verificar se compõem Triângulo equilátero – três lados iguais Triângulo isósceles – dois lados iguais Triângulo escaleno – todos os lados diferentes A B C Seleção Encadeada É triângulo? É equilátero? É isósceles? É escaleno? Ações V V F F “Equilátero” V F V - “Isósceles” V F F V “Escaleno” F - - - “Não é triângulo” Triângulo: (A<B+C) e (B<A+C) e (C<A+B) Equilátero: (A=B) e (B=C) Isósceles: (A=B) ou (B=C) ou (A=C) Escaleno: (A<>B) e (B<>C) e (A<>C) Seleção Encadeada Heterogênea int A, B, C; // tamanho dos lados scanf(“%d”,&A); scanf(“%d”,&B); scanf(“%d”,&C); if((A<B+C) && (B<A+C) && (C<A+B)){ if(A==B) && (B==C) { printf(“Triangulo Equilátero”); } else { if((A==B) || (B==C) || (A==C)) { printf(“Triângulo Isósceles”); } else { printf(“Triangulo Escaleno”); } } } else { printf(“Estes valores não formam um triângulo”); } Algoritmo 3.5 – Tipos de Triângulo Seleção Encadeada Homogênea se – então – se se <Cond1> então se <Cond2> então se <Cond3> então se <Cond4> então W; fimse; fimse; fimse; fimse; Cond1 Cond2 Cond3 Cond4 Ação V V V V W É equivalente a: se <Cond1> e <Cond2> e <Cond3> e <Cond4> então W; fimse; Seleção Encadeada Homogênea se X=V1 então C1; fimse; se X=V2 então C2; fimse; se X=V3 então C3; fimse; se X=V4 então C4; fimse; se X=V1 então C1; senão se X=V2 então C2; senão se X=V3 então C3; senão se X=V4 se – senão – se então C4; fimse; fimse; fimse; fimse; X=V1 X=V2 X=V3 X=V4 Ação X=V1 X=V2 X=V3 X=V4 Ação V F F F C1 V - - - C1 F V F F C2 F V - - C2 F F V F C3 F F V - C3 F F F V C4 F F F V C4 Seleção de Múltipla Escolha Seleções encadeadas homogêneas se-senão-se são bastante frequentes para o tratamento de listas de valor Para simplificar a escrita, pode-se utilizar o comando escolha. Adaptando o algoritmo anterior: switch(X) { case 1 { //comandos break; } case 2 { //comandos break; } default { } }