ameliara freire [email protected]. variaveis, constantes, leitura e escrita ainda não são...

35
Aula 6 - Estruturas de Controle Ameliara Freire [email protected]

Upload: internet

Post on 21-Apr-2015

134 views

Category:

Documents


19 download

TRANSCRIPT

Page 1: Ameliara Freire ameliara.fjn@gmail.com.  Variaveis, constantes, leitura e escrita ainda não são suficientes para formar uma linguagem completa para descricao

Aula 6 - Estruturas de Controle

Ameliara [email protected]

Page 2: Ameliara Freire ameliara.fjn@gmail.com.  Variaveis, constantes, leitura e escrita ainda não são suficientes para formar uma linguagem completa para descricao

Variaveis, constantes, leitura e escrita ainda não são suficientes para formar uma linguagem completa para descricao de programas.

Cada programa/algoritmo tem um fluxo de execucao que pode ser definido usando termos especificos de uma linguagem◦ Estrutura sequencial◦ Estrutura de selecao◦ Estrutura de repeticao

2

Tipos primitivos

Page 3: Ameliara Freire ameliara.fjn@gmail.com.  Variaveis, constantes, leitura e escrita ainda não são suficientes para formar uma linguagem completa para descricao

Impõe uma ordem de cima para baixo e da esquerda para a direita na execucao de um algoritmo.

As acoes são separadas por “;” Formato geral:

3

Estrutura sequencial

//declaracao de variaveis //corpo do algoritmoacao 1;acao 2;...

Page 4: Ameliara Freire ameliara.fjn@gmail.com.  Variaveis, constantes, leitura e escrita ainda não são suficientes para formar uma linguagem completa para descricao

Permite o uso de condicoes para escolher entre execucoes de diferentes blocos

Condicoes são expressoes lógicas relacionais que, quando avaliadas, produzem valor lógico (booleano)

Comandos:◦ if◦ if – else◦ switch - case

4

Estruturas de selecao/decisao

Page 5: Ameliara Freire ameliara.fjn@gmail.com.  Variaveis, constantes, leitura e escrita ainda não são suficientes para formar uma linguagem completa para descricao

Forma geral

5

if-else

if(condicao){ //sequencia de comandos se verdadeiro}else{ // o else é opcional //sequencia de comandos se falso}

if(media > 7.0){ printf(“Aprovado”);}else{ printf(“Final ou reprovado”);}

Page 6: Ameliara Freire ameliara.fjn@gmail.com.  Variaveis, constantes, leitura e escrita ainda não são suficientes para formar uma linguagem completa para descricao

6

Fluxo do if-else

if (condicao) { C1; C2; ... Cn;}else { D1; D2; ... Dm;}

condicao

C1; C2;...Cn;

V

D1; D2;...Dn;

F

Page 7: Ameliara Freire ameliara.fjn@gmail.com.  Variaveis, constantes, leitura e escrita ainda não são suficientes para formar uma linguagem completa para descricao

Altere a funcao que lê as notas do aluno e imprime a média para que a mensagem impressa se comporte da seguinte maneira:◦ Se a média foi maior ou igual a 7.0 a mensagem

deve ser “Aprovado”. Caso contrário a mensagem deve ser “Estude mais para a final”.

7

Exercicio

Page 8: Ameliara Freire ameliara.fjn@gmail.com.  Variaveis, constantes, leitura e escrita ainda não são suficientes para formar uma linguagem completa para descricao

O que o programa abaixo faz?

8

Exercicio

#include <stdio.h>main(){ int a,b; printf(“Digite 2 números: “); scanf(“%d %d”,&a,&b); if (b){

printf(“%f”,a/b); }else {

printf(“Não posso fazer a divisao”); }}

Page 9: Ameliara Freire ameliara.fjn@gmail.com.  Variaveis, constantes, leitura e escrita ainda não são suficientes para formar uma linguagem completa para descricao

9

Variacoes do if-else

if(condicao 1){ C1}else if (condicao 2){ C2}else if(condicao 3){ C3}else{ C4}

if(condicao 1){ if(condicao 2){ if(condicao 3){ ... } }}

if(condicao 1){ ...}if(condicao 2){ ...}if(condicao 3){ ...}

Page 10: Ameliara Freire ameliara.fjn@gmail.com.  Variaveis, constantes, leitura e escrita ainda não são suficientes para formar uma linguagem completa para descricao

Cada código que estiver dentro de um bloco deve estar um nível a mais de indentação à direita do bloco mais externo.

Indentar o código é FUNDAMENTAL para compreensão do escopo de código (identificar onde começa e onde termina).

10

Importância da indentação

if(condicao 1){ if(condicao 2){ if(condicao 3){ ... } }}

Page 11: Ameliara Freire ameliara.fjn@gmail.com.  Variaveis, constantes, leitura e escrita ainda não são suficientes para formar uma linguagem completa para descricao

Como simplificar a seguinte selecao aninhada?

11

Simplificando selecoes

if (condicao1) { if (condicao2) { if (condicao3) { if (condicao4) { W; } } }}

if (condicao1 && condicao2 && condicao3 && condicao4){ W;}

Page 12: Ameliara Freire ameliara.fjn@gmail.com.  Variaveis, constantes, leitura e escrita ainda não são suficientes para formar uma linguagem completa para descricao

12

Simplificando selecoes

if (X == V1) { C1;}if (X == V2) { C2;}if (X == V3) { C3;}if (X == V4) { C4;}

Como diminuiro numero de testes?

if (X == V1) { C1;}else if (X == V2) { C2;}else if (X == V3) { C3;}else if (X == V4) { C4;}

Qual a sequencia decomparacoespara atingirC4?

Page 13: Ameliara Freire ameliara.fjn@gmail.com.  Variaveis, constantes, leitura e escrita ainda não são suficientes para formar uma linguagem completa para descricao

13

Análise de fluxo

int A,B,C; if (A != 0){ C1; }else{ if (B != 0){ if (C != 0){ C2; }else{ C3; C4; } } C5; } C6;

Que comandos são executadosquando A=B=V e C=F?

Page 14: Ameliara Freire ameliara.fjn@gmail.com.  Variaveis, constantes, leitura e escrita ainda não são suficientes para formar uma linguagem completa para descricao

14

Análise de fluxoQue comandos são executadosquando A=B=V e C=F?

{ int A,B,C; if (A != 0){ C1; }else{ if (B != 0){ if (C != 0){ C2; }else{ C3; C4; } } C5; } C6;}

Page 15: Ameliara Freire ameliara.fjn@gmail.com.  Variaveis, constantes, leitura e escrita ainda não são suficientes para formar uma linguagem completa para descricao

15

Análise de fluxoQue comandos são executadosquando A=C=F e B=V?

{ int A,B,C; if (A != 0){ C1; }else{ if (B != 0){ if (C != 0){ C2; }else{ C3; C4; } } C5; } C6;}

Page 16: Ameliara Freire ameliara.fjn@gmail.com.  Variaveis, constantes, leitura e escrita ainda não são suficientes para formar uma linguagem completa para descricao

16

Análise de fluxoQue comandos são executadosquando A=C=F e B=V?

{ int A,B,C; if (A != 0){ C1; }else{ if (B != 0){ if (C != 0){ C2; }else{ C3; C4; } } C5; } C6;}

Page 17: Ameliara Freire ameliara.fjn@gmail.com.  Variaveis, constantes, leitura e escrita ainda não são suficientes para formar uma linguagem completa para descricao

17

Análise de fluxoQue comandos são executadosquando A=C=F e B=V?

{ int A,B,C; if (A != 0){ C1; }else{ if (B != 0){ if (C != 0){ C2; }else{ C3; C4; } } C5; } C6;}

Page 18: Ameliara Freire ameliara.fjn@gmail.com.  Variaveis, constantes, leitura e escrita ainda não são suficientes para formar uma linguagem completa para descricao

18

Análise de fluxoQue comandos são executadosquando A=C=F e B=V?

{ int A,B,C; if (A != 0){ C1; }else{ if (B != 0){ if (C != 0){ C2; }else{ C3; C4; } } C5; } C6;}

Page 19: Ameliara Freire ameliara.fjn@gmail.com.  Variaveis, constantes, leitura e escrita ainda não são suficientes para formar uma linguagem completa para descricao

Escreva um programa que lê a idade de um usuario e em seguida diz se o usuário é ou não maior de idade.

Escreva um programa que lê um número inteiro e diz se o número é par ou ímpar.

Escreva um programa que lê tres numeros e em seguida imprime quantos deles são iguais.

Escreva um programa que lê três número s inteiros e em seguida imprime os números em ordem crescente.

19

Exercício

Page 20: Ameliara Freire ameliara.fjn@gmail.com.  Variaveis, constantes, leitura e escrita ainda não são suficientes para formar uma linguagem completa para descricao

Multipla escolha: quando se tem um conjunto de valores discretos a serem testados, onde cada valor corresponde a uma acao.

Otimizacao das escolhas se-senao-se

20

Switch-case

switch (<variável>) {case <valor 1>:

<instruções>;[break;]

case <valor 2> :< instruções>;[break;]

...[default:<instruções>;]

}

OBS:• “ variável” deve ser int ou

char;

• “break” serve para implementar escolha disjunta

Page 21: Ameliara Freire ameliara.fjn@gmail.com.  Variaveis, constantes, leitura e escrita ainda não são suficientes para formar uma linguagem completa para descricao

Escreva um programa C que receba 2 números e um caractere operador (+, -, * ou /) do teclado, realize a operação determinada entre eles e imprima na tela o resultado

21

Switch-case (exemplo)

#include <stdio.h>int main ( ) { char op; float num1, num2; printf(“Digite um número, um operador e um número:”); scanf (“ %f %c %f”, &num1, &op, &num2); switch (op) { case ‘+’: printf (“ = %f”, num1 + num2); break; case ‘-’: printf (“ = %f”, num1 - num2); break; default: printf (“ Operador inválido!”) }}

Page 22: Ameliara Freire ameliara.fjn@gmail.com.  Variaveis, constantes, leitura e escrita ainda não são suficientes para formar uma linguagem completa para descricao

Escreva uma funcao que solicita o usuario digitar um numero de 1 à 7. Em seguida a funcao imprime uma mensagem de acordo com o numero digitado:◦ 1 – “Voce pertence ao curso de Agronomia”◦ 2 – “Voce pertence ao curso de Veterinária”◦ 3 – “Voce pertence ao curso de Zootecnia”◦ 4 – “Voce pertence ao curso de Pedagogia”◦ 5 – “Voce pertence ao curso de Letras”◦ 6 – “Voce pertence ao curso de Engenharia de Alimentos”◦ 7 – “Voce pertence ao curso de CIENCIA DA

COMPUTACAO!”◦ Qualquer outro numero - “Voce nao pertence a curso

algum da UAG”

22

Exercicio

Page 23: Ameliara Freire ameliara.fjn@gmail.com.  Variaveis, constantes, leitura e escrita ainda não são suficientes para formar uma linguagem completa para descricao

Imagine um procedimento (algoritmo) pronto para calcular a média de um aluno.

O que fazer para calcular a média de todos os alunos de uma turma?

23

Estruturas de repeticao

Page 24: Ameliara Freire ameliara.fjn@gmail.com.  Variaveis, constantes, leitura e escrita ainda não são suficientes para formar uma linguagem completa para descricao

São construcoes que permitem descrever acoes repetitivas

Também conhecido por loop. O numero de repeticoes pode ser

indeterminado? O número de repeticoes pode ser infinito? Repeticao com numero de vezes

indeterminado◦ Laço com teste no inicio (while)◦ Laço com teste no final (do-while)

Repeticao com numero de vezes determinado ◦ Laço (for)

24

Laços ou comandos de repeticao

Page 25: Ameliara Freire ameliara.fjn@gmail.com.  Variaveis, constantes, leitura e escrita ainda não são suficientes para formar uma linguagem completa para descricao

Antes de cada execucao dos comandos de uma repeticao, a condicao é testada

25

Repeticao com teste no início

while (condicao) { C1; C2; ... Cn;}

while comandos

Segue o fluxo

condicao valida

condicao invalida

Page 26: Ameliara Freire ameliara.fjn@gmail.com.  Variaveis, constantes, leitura e escrita ainda não são suficientes para formar uma linguagem completa para descricao

Exemplos

26

Repeticao com teste no início

int i = 0;while (i < 10) { printf(“Valor de i: %d ”, i); i++;}

int i = 0;while (i < 10) { printf(“Valor de i: %d ”, i);}

Page 27: Ameliara Freire ameliara.fjn@gmail.com.  Variaveis, constantes, leitura e escrita ainda não são suficientes para formar uma linguagem completa para descricao

Como seria um programa para calcular a média de 50 alunos da uma turma?

Escreva um programa que calcula o produto de dois números lidos sem usar o operador de multiplicação (‘*’).

Construa um algoritmo que fica lendo indefinidamente numeros positivos. Caso o numero lido seja igual a 0 o algoritmo pára de ler números e imprime a média dos números pares lidos anteriormente.

27

Exercicio

Page 28: Ameliara Freire ameliara.fjn@gmail.com.  Variaveis, constantes, leitura e escrita ainda não são suficientes para formar uma linguagem completa para descricao

Escreva um programa que lê um número e em seguida calcula e imprime seu fatorial.

28

Exercicio-desafio

Page 29: Ameliara Freire ameliara.fjn@gmail.com.  Variaveis, constantes, leitura e escrita ainda não são suficientes para formar uma linguagem completa para descricao

Depois de cada execucao dos comandos de uma repeticao, a condicao é testada

Os comandos são executados pelo menos uma vez

29

Repeticao com teste no final

do { C1; C2; ... Cn;}while (condicao);

comandos

Segue o fluxo

while condicao validacondicao invalida

do

Page 30: Ameliara Freire ameliara.fjn@gmail.com.  Variaveis, constantes, leitura e escrita ainda não são suficientes para formar uma linguagem completa para descricao

Como ficaria o algoritmo para calcular a média dos 50 alunos com teste no final usando o comando do-while?

30

Exercício

Page 31: Ameliara Freire ameliara.fjn@gmail.com.  Variaveis, constantes, leitura e escrita ainda não são suficientes para formar uma linguagem completa para descricao

O numero de vezes da repeticao é determinado.

Possui uma variavel de controle cujo valor varia de um valor inicial a um valor final, de acordo com um determinado passo

A condicao de parada é o numero de vezes da repeticao.

31

Repeticao fixa

Page 32: Ameliara Freire ameliara.fjn@gmail.com.  Variaveis, constantes, leitura e escrita ainda não são suficientes para formar uma linguagem completa para descricao

Inicialização:◦ Expressão de atribuição. Sempre é executada uma única

vez. Teste de Condição:

◦ Condição que controla a execução do laço. É sempre avaliada a cada execução. Se Verdadeiro continua a execução. Se falso pára a execução.

Incremento:◦ Define como a variável de controle será alterada.◦ É sempre executada após a execução do corpo do laço.

32

Repeticao fixa

for(inicializacao;condicao;incremento ){ C1; ... Cn;}

Page 33: Ameliara Freire ameliara.fjn@gmail.com.  Variaveis, constantes, leitura e escrita ainda não são suficientes para formar uma linguagem completa para descricao

33

Repeticao fixa

int i;for(i= 0;i < 10;i++){ printf(“%d”,i);}

printf(“%d”,i);

i = 1

i = 1 + 2

i = 9

i = 11

int i;for(i= 0;i < 10;i=i+2){ printf(“%d”,i);}

i = 1

printf(“%d”,i);

i = 1 + 1

Page 34: Ameliara Freire ameliara.fjn@gmail.com.  Variaveis, constantes, leitura e escrita ainda não são suficientes para formar uma linguagem completa para descricao

Como ficaria o algoritmo para calcular a media dos 50 alunos usando repeticao fixa?

Escreva um algoritmo que lê 50 números inteiros e em seguida mostra a soma de todos os ímpares lidos.

Altere o algoritmo anterior para que ele considere apenas a soma dos ímpares que estejam entre 100 e 200.

Construa um algoritmo que leia um conjunto de 20 numeros inteiros e mostre qual foi o maior e o menor valor fornecido.

34

Exercicio

Page 35: Ameliara Freire ameliara.fjn@gmail.com.  Variaveis, constantes, leitura e escrita ainda não são suficientes para formar uma linguagem completa para descricao

Lacos são equivalentes

35

Comparacao entre repeticoes

se (numero de vezes é conhecido){ usa-se o for}senao{ se (teste precisa ser feito no inicio){ usa-se while }senao{ usa-se do-while }}