Programação
MEAer e MEEC
Bertinho Andrade da Costa
2013/2014
1º Semestre

Instituto Superior Técnico

Instruções: Selecção...
Sumário


Expressões relacionais e boleanas
 Conceito de controlo de fluxo num programa
 Instrução de decisão if



...
Tipo Boleano










O tipo boleano é utilizado para representar o
valor lógico verdadeiro e o valor lógico falso
d...
Operadores relacionais
Sinal
Operador

Operação

<
>

Menor de que
Maior do que

==
=!

Igual a
Diferente de

<=

Menor ou...
Operadores relacionais






Apresenta-se em seguida um programa que avalia e
apresenta o resultado de diversas express...
Expressões lógicas compostas
Na prática o uso simples de expressões
relacionais não é suficiente para resolver
problemas.
...
Expressões lógicas compostas





Atenção: Uma propriedade importante dos operadores &&, || é a de que nem sempre
avali...
Conceito de controlo de fluxo


As instruções de um programa são executadas
pela ordem com que são escritas (de cima para...
Instrução if-else


A instrução if-else permite definir a execução condicional de outras instruções.


A sua sintaxe é a...
Instrução if-else




Exemplo: if com else
if (x < 0.0)
/* inst. executada se o resultado da expressão x < 0.0 for verda...
Instrução if-else




Se existir a necessidade de executar um conjunto de instruções que dependem
de uma condição então ...
Instrução if-else


Exemplo: Programa que pede um número real não negativo e que calcula a raiz
quadrada. Utilização da f...
Instruções if-else encadeadas


As instruções if else encadeadas surgem quanto há dependência na execução
das instruções ...
Instruções if-else encadeadas
 Exemplo I (cont.): Utilizado a sintaxe
a = 5;
b = 9;
c = 2;
if (b>10) /* 9 > 10 é falso */...
Instruções if-else encadeadas


Exemplo II: Qual é o resultado de :
b=11; a = 10; c = 4;
if (b>10) if (c<3) a=a+1; else a...
Problemas com instruções if-else


Problema I: Desenvolva um programa com a finalidade de apresentar dois
números reais p...
Problemas com instruções if-else


Resolução do problema I:
#include <stdio.h>
int main (void) {
float menor, maior, aux;...
Problemas com instruções if-else


Resolução do problema II:

/*
Descricao:
Assumir por simplicidade que r1 > = r2
*/
#in...
Instruções de Ciclo


As instruções de ciclo:








Tem como finalidade instruir o computador, para que ele execute...
Instrução while


Sintaxe:
while

(

expressão

)

instrução


Semântica:


Em 1º lugar a expressão é avaliada, se for ...
Instrução while


Exercício: Determine o output do programa seguinte

int main( void ) {
int m, n;

Resultado no ecrã:

m...
Problemas com a instrução while


Problema I: Suponha que por mês efectua o depósito de 30 Euros e que a
taxa de remunera...
Problemas com a instrução while


Resolução do Problema I:

#include <stdio.h>
int main( void ) {
int m; float conta;
m =...
Problemas com a instrução while


Resolução do Problema II:



Abordagem ao problema:



Pedir ao utilizador o número ...
Problemas com a instrução while


Resolução do Problema II:

#include <stdio.h>
int main( void ) {
float x, soma, media;
...
Programação DEEC-IST

Instruções: Selecção (if) e de ciclo (while)

26
Upcoming SlideShare
Loading in …5
×

P13 06

200 views
82 views

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
200
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
2
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

P13 06

  1. 1. Programação MEAer e MEEC Bertinho Andrade da Costa 2013/2014 1º Semestre Instituto Superior Técnico Instruções: Selecção (if) e de ciclo (while) Programação DEEC-IST Instruções: Selecção (if) e de ciclo (while) 1
  2. 2. Sumário  Expressões relacionais e boleanas  Conceito de controlo de fluxo num programa  Instrução de decisão if     Sintaxe Instruções if encadeadas Problemas Instrução de repetição while   Sintaxe Problemas Programação DEEC-IST Instruções: Selecção (if) e de ciclo (while) 2
  3. 3. Tipo Boleano      O tipo boleano é utilizado para representar o valor lógico verdadeiro e o valor lógico falso de expressões lógicas (álgebra de Boole). Na linguagem C, antes da revisão de 1999, o valor lógico falso é representado pelo inteiro zero. O valor lógico verdadeiro é representado por um número inteiro diferente de 0. Com a revisão de 1999 passou a existir o tipo _Bool (inteiro sem sinal) com o qual o valor lógico falso é representado pelo 0 e o valor lógico verdadeiro é representado pelo inteiro 1. A utilização do tipo _Bool é desejável. Quando se efectua a conversão de qualquer valor escalar para o tipo _Bool, todos valores diferentes de zero são convertidos para 1, enquando que o zero é convertido para 0 (inteiro sem sinal). Existe o ficheiro stdbool.h que deve ser incluido já que define as macros false (0) e true (1). Programação DEEC-IST    O valor lógico aparece na avaliação de expressões boleanas. Uma expressão boleana é uma sequência de operadores e operandos que ao serem combinados de forma adequada geram um dos valores lógicos, falso ou verdadeiro. Nas expressões boleanas são utilizados operadores:  Relacionais - permitem estabelecer comparações.  Lógicos - permitem construir expressões lógicas compostas. Instruções: Selecção (if) e de ciclo (while) 3
  4. 4. Operadores relacionais Sinal Operador Operação < > Menor de que Maior do que == =! Igual a Diferente de <= Menor ou igual >= Maior ou igual Os operadores relacionais podem ser aplicados a operandos do tipo elementar como char, int float double.  As expressões assume a forma de expressão1 operador_relacional expressão2  Exemplos: 2 > 3 a < b z != w  Operador Classe Precedência Associação < > <= >= Binário 1º Lugar == != Binário 2º Lugar Esquerda para a direita Esquerda para a direita NOTA: Dois operadores com igual precedência, é avaliado em primeiro lugar o que está à esquerda Programação DEEC-IST Instruções: Selecção (if) e de ciclo (while) 4
  5. 5. Operadores relacionais    Apresenta-se em seguida um programa que avalia e apresenta o resultado de diversas expressões relacionais simples. Note-se que as expressões são avaliadas e o respectivo resultado é enviado para o ecrã com o auxílio da função printf. Nota:Os valores lógicos são representados por inteiros. #include <stdio.h> int main( void ) { printf("Exemplos de expressÐes relacioanisn"); printf(" printf(" printf(" printf(" printf(" printf(" 2 > 3 resultado %d n", 2 > 3); 2 < 3 resultado %d n", 2 < 3); 2 == 3 resultado %d n", 2 == 3); 5.3 >= 3 resultado %d n", 5.3 >= 3); 5.3 != 3 resultado %d n", 5.3 != 3); 5.3 == 3 resultado %d n", 5.3 == 3); Resultados: Exemplos de express)es relacioanis 2 > 3 resultado 0 2 < 3 resultado 1 2 == 3 resultado 0 5.3 >= 3 resultado 1 5.3 != 3 resultado 1 5.3 == 3 resultado 0 return 0; } Programação DEEC-IST Instruções: Selecção (if) e de ciclo (while) 5
  6. 6. Expressões lógicas compostas Na prática o uso simples de expressões relacionais não é suficiente para resolver problemas.  Exemplo: Suponha-se que é necessário verificar seo valor de uma variável pertence a um dado intervalo de valores reais. x pertence a [-0.3; 7.6]  O valor lógico só pode ser obtido avaliando as expressões relacionais (x >= -0.3) e (x <= 7.6)     O operador usa os valores lógicos que são gerados pelas expressões relacionais e produz um dos valores lógicos verdadeiro ou falso. A descrição dos operadores lógicos é realizada através de tabelas de verdade ATENÇÃO: Existem os operadores lógicos que operam ao nível do bit, & (operador e), | (operador ou), ^ (operador ou exclusivo). ~ (operador negação), << (operador left-shift), >> (operador right-shift) Programação DEEC-IST Operador lógico Operação Prioridade na avaliação ! && || Negação E (conjunção) Ou (disjunção) 1º 2º 3º p !p Verdade Falso Falso Verdade p q p && q p || q Falso Falso Falso Falso Falso Verdadeiro Falso Verdadeiro Verdadeiro Falso Falso Verdadeiro Verdadeiro Verdadeiro Verdadeiro Verdadeiro Instruções: Selecção (if) e de ciclo (while) 6
  7. 7. Expressões lógicas compostas    Atenção: Uma propriedade importante dos operadores &&, || é a de que nem sempre avaliam a segunda expressão (a seguir a um operador). Isso acontece quando o valor lógico da 1ª expressão é suficiente para determinar o resultado final da expressão global. Este comportamento é designado de avaliação de curto-circuito Para ilustar o conceito, considere-se a expressão seguinte: (y > 1/k) A avaliação da expressão provocará um erro de execução se a variável k tiver o valor zero. No entanto se a expressão lógica for modificada para (k != 0) && (y > 1/k) a expressão (k != 0)é avaliada em primeiro lugar. Se k tiver o valor zero, o resultado lógico da expressão (k != 0) é o valor lógico falso o que determina o valor lógico da expressão composta independentemente do valor lógico da segunda expressão. Por essa razão a segunda expressão já não será avaliada e como tal não dará origem a um erro de execução para k igual a zero. De salientar que se a expressão fosse (y > 1/k) && (k != 0) ocorreria um erro de execução para k igual a zero devido a que (y > 1/k) é avaliada em primeiro lugar. Programação DEEC-IST Instruções: Selecção (if) e de ciclo (while) 7
  8. 8. Conceito de controlo de fluxo  As instruções de um programa são executadas pela ordem com que são escritas (de cima para baixo). Normalmente coloca-se uma instrução por cada linha do ficheiro fonte. Exemplo: #include <stdio.h> int main (void) { printf(“Instrucao 1 n”); printf(“Instrucao 2 n”); printf(“Instrucao 3 n”); printf(“Instrucao 4 n”); /* instrucao 5 */ return (0); } Programação DEEC-IST  Suponha-se que se pretende construir um programa, que deve informar o utilizador se um número (real) x é negativo ou se é positivo. Ou seja,  Se x é menor que 0.0 (constante real) então printf(“O número x = %f e’ negativo ”, x)  Caso contrário printf(“O número x = %f e’ positivo ”, x)  Neste exemplo a execução da instrução (printf) adequada depende do resultado da avaliação de uma expressão relacional, se é verdadeiro ou se é falso.  Há a necessidade de ter uma instrução que permita seleccionar de dentro de um conjunto de outras instruções aquelas que são as que devem ser executadas. Em C isto é realizado com a instrução if-else Instruções: Selecção (if) e de ciclo (while) 8
  9. 9. Instrução if-else  A instrução if-else permite definir a execução condicional de outras instruções.  A sua sintaxe é apresentada na figura seguinte, o if e o else são palavras chave (reservadas) da linguagem ( if expressão ) instrução else Programação DEEC-IST instrução Instruções: Selecção (if) e de ciclo (while) 9
  10. 10. Instrução if-else   Exemplo: if com else if (x < 0.0) /* inst. executada se o resultado da expressão x < 0.0 for verdadeiro */ printf(“O numero x = %f e’ negativo n”, x); else /* inst. executada se o resultado da expressão x < 0.0 for falso */ printf(“O numero x = %f e’ positivo n”, x); Exemplo: if sem else if (x < 0.0) /* inst. executada se x < 0.0 for verdadeiro */ printf(“O numero x = %f e’ negativo n”, x); /* Falta o else, a instrução seguinte não */ /* está associada ao if, ela e’ sempre executada */ printf(“O numero x = %f e’ positivo n”, x); Programação DEEC-IST Instruções: Selecção (if) e de ciclo (while) 10
  11. 11. Instrução if-else   Se existir a necessidade de executar um conjunto de instruções que dependem de uma condição então devem ser colocadas entre o par de chavetas { e } de modo a constituirem uma instrução composta. Exemplo: if (x < 0.0) Chavetas { printf(“O numero x = ”); Escrita no ecrã por partes printf(“%f ”, x); printf(“negativo n”); } else printf(“O numero x = %f e’ positivo n”, x); Programação DEEC-IST Instruções: Selecção (if) e de ciclo (while) 11
  12. 12. Instrução if-else  Exemplo: Programa que pede um número real não negativo e que calcula a raiz quadrada. Utilização da função sqrt ( ) #include <stdio.h> #include <math.h> /* Para se poder usar a função sqrt() */ int main (void) { float num, rnum; printf(“Introduza um numero nao negativo = ”); scanf(“%f”, &num); if (num < 0.0) /* vamos testar o número */ printf(“O numero %f nao e’ valido”, num); else { rnum = sqrt(num); printf(“O quadrado de %f e’ = %f”, num, rnum); } return (0); } Programação DEEC-IST Instruções: Selecção (if) e de ciclo (while) 12
  13. 13. Instruções if-else encadeadas  As instruções if else encadeadas surgem quanto há dependência na execução das instruções if-else de outras instruções if-else  Exemplo I: a=5; b = 9; c = 2; if (b>10) a = 4; else if (c<3) a=a+1; else a=a-1; Qual é o resultado ? Certamente que esta forma de escrever código não é a mais adequada. Mas o compilador não tem qualquer problema com ele! Programação DEEC-IST Instruções: Selecção (if) e de ciclo (while) 13
  14. 14. Instruções if-else encadeadas  Exemplo I (cont.): Utilizado a sintaxe a = 5; b = 9; c = 2; if (b>10) /* 9 > 10 é falso */ a = 4; else if (c<3) /* 2 < 3 é verdadeiro */ a=a+1; else a=a-1; do if obtém-se a = 5; b = 9; c = 2; V a = 4; b >10 F c<3 V a = a + 1; Programação DEEC-IST Instruções: Selecção (if) e de ciclo (while) F a = a - 1; 14
  15. 15. Instruções if-else encadeadas  Exemplo II: Qual é o resultado de : b=11; a = 10; c = 4; if (b>10) if (c<3) a=a+1; else a=a-1;   Exemplo II (cont.): ?? a = 10; b = 11; c = 4; if (b>10) if (c<3) a=a+1; else a=a-1; O else está associado a que if ? Exemplo II(cont): ?? a = 10; b = 11; c = 4; if (b>10) if (c<3) a=a+1; else a=a-1; Resposta: Ao if mais próximo desde que esse if ainda não tenha um else Programação DEEC-IST Instruções: Selecção (if) e de ciclo (while) 15
  16. 16. Problemas com instruções if-else  Problema I: Desenvolva um programa com a finalidade de apresentar dois números reais por ordem crescente. Restrição: Para apresentar os números só pode usar uma única vez a função printf.  Problema II: Desenvolva um programa que permita determinar o número de pontos de intersecção de duas circunferênicas, isto é, {0,1,2, inf} pontos. O programa recebe a distância entre os centros das circunferências e os respectivos raios (admitir que r1 > = r2). Programação DEEC-IST Instruções: Selecção (if) e de ciclo (while) 16
  17. 17. Problemas com instruções if-else  Resolução do problema I: #include <stdio.h> int main (void) { float menor, maior, aux; printf(“Introduza dois números: ”); scanf(“%f %f”, &menor, &maior); if (menor > maior) { /* trocar os conteudos */ aux = menor; menor = maior; maior = aux; } printf(“Resultado = n %f n %f n”, menor, maior); return 0; } Programação DEEC-IST Instruções: Selecção (if) e de ciclo (while) 17
  18. 18. Problemas com instruções if-else  Resolução do problema II: /* Descricao: Assumir por simplicidade que r1 > = r2 */ #include <stdio.h> int main( void ) { float d, r1, r2; printf(“Distancia entre centros= ”); scanf(“%f”, &d); printf(“Raios r1 e r2 =”); scanf(“%f %f”, &r1, &r2); Incluir o código return 0; } /* Fim do main */ Programação DEEC-IST if (d == 0.0)/*Cuidado com esta comparação */ /* devido à precisão numérica */ if (r1 == r2) printf(“n Infinitos pontos n”); else printf(“n Zero pontos n”); else { if (d > (r1+r2)) printf(” n Zeros pontos n”); if (d == (r1+r2)) printf(” n Um ponto n”); if ((d < (r1+r2)){ if (r1 < (d + r2)) printf(” n Dois pontos n”); if (r1 == (d + r2)) printf(” n Um ponto n”); if (r1 > (d + r2)) printf(” n Zero pontos n”); } } Instruções: Selecção (if) e de ciclo (while) 18
  19. 19. Instruções de Ciclo  As instruções de ciclo:     Tem como finalidade instruir o computador, para que ele execute um conjunto de operações/instruções, diversas vezes, de modo repetitivo. O número de vezes que o conjunto de instruções é executado depende da avaliação de uma determinada expressão lógica. É necessário ter cuidado com a expressão que é avaliada e que determina a paragem da instrução de ciclo. Condições erradas podem dar origem a ciclos de execução infinita. Tipos de instruções de ciclo    Instrução while Insttrução do while Instrução for Programação DEEC-IST Instruções: Selecção (if) e de ciclo (while) 19
  20. 20. Instrução while  Sintaxe: while ( expressão ) instrução  Semântica:  Em 1º lugar a expressão é avaliada, se for verdadeira (diferente de zero) então a instrução (simple ou composta { } ) é executada.    Após a executação da instrução, a expressão é novamente avaliada e o ciclo repete-se. Atenção: A instrução que constitui o corpo do while pode alterar os conteúdos das variáveis que fazem parte da expressão de controlo de ciclo. Se a expressão for falsa (igual a zero) então o controlo do programa passa o ponto a seguir à instrução do while. Programação DEEC-IST Instruções: Selecção (if) e de ciclo (while) 20
  21. 21. Instrução while  Exercício: Determine o output do programa seguinte int main( void ) { int m, n; Resultado no ecrã: m = 0; /* Inicializacao */ while (m < 5) { n = m/2; while (n < 8) { printf("M = %d N = %d n", m, n); n = n + 3; } m = m + 2; } return 0; } Programação DEEC-IST Instruções: Selecção (if) e de ciclo (while) 21
  22. 22. Problemas com a instrução while  Problema I: Suponha que por mês efectua o depósito de 30 Euros e que a taxa de remuneração dos depósitos é de 0,25% ao mês. Considere que os juros são acumulados na conta. Qual é o valor na conta ao fim de 5 anos?  Problema II: Cálculo do valor médio de um conjunto de números fornecidos pelo utilizador. Programação DEEC-IST Instruções: Selecção (if) e de ciclo (while) 22
  23. 23. Problemas com a instrução while  Resolução do Problema I: #include <stdio.h> int main( void ) { int m; float conta; m = 1; conta = 0.0; /* Inicializacao */ while (m <= (5*12)) { conta = conta + 30; /* Inicio do mes deposi.*/ conta = conta * 1.0025; /* Fim do mes */ m = m + 1; /* Mes seguinte */ } printf(”Mes = %d, conta = %.3f n", m-1, conta); return 0; } Resultado no ecrã: Mes = 60, conta = 1944.250 Programação DEEC-IST Instruções: Selecção (if) e de ciclo (while) 23
  24. 24. Problemas com a instrução while  Resolução do Problema II:  Abordagem ao problema:   Pedir ao utilizador o número de valores Pedir cada um dos valores  Problema como armazenar esses valores?  Solução: Para o cálculo da média, pode-se acumular a soma dos números numa variável e no fim efectuar a divisão.  Utilizar uma variável para acumular a soma  Pedir e somar tantos números quantos os que foram especificados.  No final efectuar a divisão Programação DEEC-IST Instruções: Selecção (if) e de ciclo (while) 24
  25. 25. Problemas com a instrução while  Resolução do Problema II: #include <stdio.h> int main( void ) { float x, soma, media; int num, conta; conta = 0; soma = 0.0; /* Inicializa */ printf(“Introduza o numero de valores”); scanf(“%d”, &num); while (conta < num) { printf(“Novo valor = ”); scanf(“ %f”, &x); soma = soma + x; conta = conta + 1; } return 0; } Programação DEEC-IST if (num > 0) printf(”Media = %f n", (soma/num)); else printf(”Numero de valores igual a zeron"); Questão: Que acontece se a variável num tiver um número negativo ou nulo? O programa produz resultados correctos? Instruções: Selecção (if) e de ciclo (while) 25
  26. 26. Programação DEEC-IST Instruções: Selecção (if) e de ciclo (while) 26

×