Estruturas de Repetio while for do until Prof

  • Slides: 27
Download presentation
Estruturas de Repetição while; for; do until Prof. Omero Francisco Bertol (omero@utfpr. edu. br)

Estruturas de Repetição while; for; do until Prof. Omero Francisco Bertol (omero@utfpr. edu. br) Março/ 2020

Estruturas de Controle Um programa de computador é uma sequência de instruções organizadas de

Estruturas de Controle Um programa de computador é uma sequência de instruções organizadas de forma a produzir a solução de um determinado problema; o que representa uma das habilidades básicas da programação, que é a sequenciação. Naturalmente, as instruções de um programa são executadas em sequência, o que se denomina fluxo sequencial de execução. Mas, em inúmeras circunstâncias, é necessário executar as instruções de um programa em uma ordem diferente da estritamente sequencial. Tais situações são caracterizadas pela necessidade da repetição de instruções individuais ou conjuntos de instruções, e também pelo desvio do fluxo de execução, tarefas que podem ser realizadas por meio das “estruturas de controle” da linguagem.

Tipos de Estruturas de Controle a) fluxo sequencial de execução os comandos são executados

Tipos de Estruturas de Controle a) fluxo sequencial de execução os comandos são executados um após ao outro sequencialmente do início até o final b) fluxo de execução com desvio os comandos são executados dependendo do valor de uma condição, ou expressão lógica: • if elseif • switch case c) fluxo repetitivo de execução os comandos são executados, de forma repetida, um determinado número de vezes: • while • for • do until

Estrutura de Repetição: while (1/5) A estrutura de repetição while é uma forma de

Estrutura de Repetição: while (1/5) A estrutura de repetição while é uma forma de estrutura de repetição condicional no qual o controle da repetição de execução do(s) comando(s) é realizado por meio da avaliação de uma expressão lógica associada. Essas estruturas são adequadas para permitir a execução repetida de um ou mais comandos por um número indeterminado de vezes, isto é, um número que não é conhecido durante a programação, mas que se torna conhecido durante a execução do programa, tal como um valor fornecido pelo usuário, obtido de um arquivo, ou ainda de cálculos realizados com outros dados. while (expressão lógica/ condição) comando(s); endwhile condição false loop true comando(s)

Estrutura de Repetição: while 1 (2/5) 2 i = 1; while (i <= 10)

Estrutura de Repetição: while 1 (2/5) 2 i = 1; while (i <= 10) printf("%dn", i); i = i + 1; 3 endwhile Onde "i" (variável de controle): [1] valor inicial de "i" [2] valor final de "i" [3] passo A variável de controle "i", "caminha" de 1 em 1 (i=i+1) do valor inicial (1) até o valor final (10). i = 1; 1 2 3 4 5 6 7 8 9 10 >> loop (i <= 10) true false printf("%dn", i); i = i + 1; No comando while um conjunto de instruções é repetido enquanto o resultado de uma expressão lógica (i <= 10) é avaliada como verdadeira (true). É importante observar que no while avalia o resultado da expressão lógica antes (a priori) de executar o comando associado; assim, é possível que este comando nunca seja executado, caso a condição seja inicialmente avaliada como falsa (false).

Estrutura de Repetição: while i = 1; while (i <= 10) printf("%d ", i);

Estrutura de Repetição: while i = 1; while (i <= 10) printf("%d ", i); i = i + 1; endwhile printf("nn"); i = 5; while (i <= 50) printf("%d ", i); i = i + 5; endwhile printf("nn"); i = 10; while (i >= 1) printf("%d ", i); i = i - 1; endwhile printf("n"); (3/5) Estruturas de repetição "while" com a variável "i" controlando o número de execuções definido pela relação entre os valores inicial, final e o passo. 1 2 3 4 5 6 7 8 9 10 5 10 15 20 25 30 35 40 45 50 10 9 8 7 6 5 4 3 2 1 >>

Estrutura de Repetição: while (4/5) Estrutura de repetição "while" executada enquanto o valor da

Estrutura de Repetição: while (4/5) Estrutura de repetição "while" executada enquanto o valor da variavél "N" for diferente de zero. Reduz o valor de "N", dividindo por 10: sistema decimal, até chegar a zero. clc; N = input("N: "); printf("n. Dígito Nn"); while (N != 0) # rem(N, 10): resto da divisão de "N" por 10 # retira o último dígito de "N" resto = rem(N, 10); printf("%d %dn", resto, N); # divisão inteira de "N" por "10" # retira o dígito mais a direita de "N" N = (N - resto) / 10; endwhile printf("n"); N: 123456 Dígito 6 5 4 3 2 1 0 >> N 123456 12345 1234 123 12 1

Estrutura de Repetição: while (5/5) A implementação "while (true)" cria uma estrutura de repetição

Estrutura de Repetição: while (5/5) A implementação "while (true)" cria uma estrutura de repetição "infinita" interrompida através de uma instrução "break". clc; soma = 0; # somatório dos valores de entrada i = 1; while (true) num = input(sprintf("Informe o %dº valor, -1 para encerrar: ", i)); if (num == -1) break; end soma = soma + num; i = i + 1; endwhile printf("n. Soma = %dn", soma); Informe Informe o o o Soma = 18 >> 1º 2º 3º 4º 5º valor, valor, -1 -1 -1 para para encerrar: encerrar: 4 5 7 2 -1

Estrutura de Repetição: for (1/5) A repetição é uma das tarefas mais comuns da

Estrutura de Repetição: for (1/5) A repetição é uma das tarefas mais comuns da programação, sendo utilizada para realizar contagens, totalizações, a obtenção de múltiplos dados, impressão, entre outros. A estrutura de repetição for executa um ciclo (um passo) para cada iteração da variável de controle, em geral, variável “i”. Cada repetição efetuada é o que se chama “iteração”. Estrutura de repetição: for i=1: 10 printf("%d ", i); endfor printf("n"); 1 2 3 4 5 6 7 8 9 10 >> Estrutura de repetição: while i = 1; while (i <= 10) printf("%d ", i); i = i + 1; endwhile printf("n");

Estrutura de Repetição: for (2/5) A estrutura de repetição for gera uma espécie de

Estrutura de Repetição: for (2/5) A estrutura de repetição for gera uma espécie de “laço” contado. A variável de controle “i”, “caminha” do valor de “start” (1) no “step” indicado, quando omitido tem-se passo 1, até o valor de “stop” (10). for <variável>=start: [step]: stop comando(s); endfor i = 1; loop clc; for i=1: 10 printf("%d ", i); endfor printf("n"); 1 2 3 4 5 6 7 8 9 10 >> (i <= 10) true false printf("%dn", i); i = i + 1;

Estrutura de Repetição: for 1 (3/5) 3 for i=1: 10 printf("%d ", i); endfor

Estrutura de Repetição: for 1 (3/5) 3 for i=1: 10 printf("%d ", i); endfor printf("n"); 3 1 2 for i=1: 2: 10 printf("%d ", i); endfor printf("n"); 1 2 3 for i=5: 5: 50 printf("%d ", i); endfor printf("n"); 3 1 2 for i=10: -1: 1 printf("%d ", i); endfor printf("n"); 1 2 3 i=start: [step]: stop Onde "i" (variável de controle): [1] start valor inicial da progressão [2] step passo, omitido assume o valor default 1 [3] stop valor final da progressão 1 2 3 4 5 6 7 8 9 10 1 3 5 7 9 5 10 15 20 25 30 35 40 45 50 10 9 8 7 6 5 4 3 2 1 >>

Estrutura de Repetição: for (4/5) clc; n = input("Informe um número para a tabuada:

Estrutura de Repetição: for (4/5) clc; n = input("Informe um número para a tabuada: "); printf("n"); for i=1: 10 printf("%d x %d = %dn", n, i, (n*i)) endfor Informe um número para a tabuada: 5 mostrando valores através de especificadores de formato: %d para valores inteiros %i para valores inteiros %f para valores com ponto flutuante %s %c para valores String para valores caracteres 5 x 5 x 5 x >> 1 = 5 2 = 10 3 = 15 4 = 20 5 = 25 6 = 30 7 = 35 8 = 40 9 = 45 10 = 50

Estrutura de Repetição: for (5/5) Estrutura de repetição for podendo ser interrompida através de

Estrutura de Repetição: for (5/5) Estrutura de repetição for podendo ser interrompida através de uma instrução "break" (sempre que encontrar um divisor de "N"). # Verificando se um número inteiro é um número primo. clc; N = input("N: "); N: 19 if ((N == 0) || (N == 1)) eh. Primo = false; else eh. Primo = true; fim = sqrt(n); for i=2: fim if (rem(N, i) == 0) # "i" é divisor de "N"? eh. Primo = false; break; endif endfor endif N: 22 19, é um número primo. >> N: 7 7, é um número primo. >> printf("n"); if (eh. Primo == true) 22, "não" é um número primo. printf("%d, é um número primo. n", N); >> else printf("%d, "não" é um número primo. n", N); endif

Operadores de Incremento e Decremento ++ -- incremento: aumenta 1 no valor da variável

Operadores de Incremento e Decremento ++ -- incremento: aumenta 1 no valor da variável decremento: diminue 1 no valor da variável x = x + 1; é o mesmo que: ++x; pré-incremento x++; pós-incremento x = x - 1; é o mesmo que --x; pré-decremento x--; pós-decremento

Operadores de Incremento ++x; x++; incrementa, depois retorna o valor de x, depois incrementa

Operadores de Incremento ++x; x++; incrementa, depois retorna o valor de x, depois incrementa # pré-incremento y = ++x; # é equivalente a fazer x = x + 1; # pós-incremento y = x; y = x++; # é equivalente a fazer y = x; x = x + 1;

Operadores de Decremento --x; x--; decrementa, depois retorna o valor de x, depois decrementa

Operadores de Decremento --x; x--; decrementa, depois retorna o valor de x, depois decrementa # pré-decremento y = --x; # é equivalente a fazer x = x - 1; # pós-decremento y = x; y = x--; # é equivalente a fazer y = x; x = x - 1;

Operador de atribuição composto x = x + 3 x = x - 1

Operador de atribuição composto x = x + 3 x = x - 1 x = x / 2 x = x * 4 x = x ^ 2

Contadores- quantificar coisas: Qtde de funcionários do sexo masculino Qtde de alunos aprovados Variavel.

Contadores- quantificar coisas: Qtde de funcionários do sexo masculino Qtde de alunos aprovados Variavel. Contador = Variavel. Contador + 1; Variavel. Contador += 1; Variavel. Contador++; # ou # Contando a quantidade de números informados que são menores que 10 clc; ct = 0; # inicializa o contador for i=1: 10 num = input(sprintf("Informe o %dº número: ", i)); # verifica "se" o i-ésimo valor informado é menor que 10 if (num < 10) ct = ct + 1; # contando os menores do que 10 endif endfor # exibe o resultado printf("n. Foram informados %d valores menores que 10. n", ct); Informe Informe Informe o o o o o 1º número: 5 2º número: 15 3º número: 20 4º número: 0 5º número: -1 6º número: 12 7º número: 3 8º número: 40 9º número: 7 10º número: 5 1º 2º 3º 4º 5º 6º Foram informados 6 valores menores que 10. >>

Somatórios- somar coisas: Soma dos salários dos funcionários do sexo masculino Qtde de peças

Somatórios- somar coisas: Soma dos salários dos funcionários do sexo masculino Qtde de peças em estoque Variavel. Somatorio = Variavel. Somatorio + Valor. ASer. Somado; Variavel. Somatorio += Valor. ASer. Somado; # ou # Somando os números informados que são pares clc; sm = 0; # inicializa o somatório for i=1: 5 num = input(sprintf("Informe o %dº número: ", i)); # verifica "se" o i-ésimo valor informado é par if (rem(num, 2) == 0) sm = sm + num; # somando os pares endif endfor # exibe o resultado Informe o printf("n. Soma dos pares = %dn", sm); Informe o 1º 2º 3º 4º 5º número: número: Soma dos pares = 12 >> 2 3 3 4 6 1º 2º 3º

Produtórios- multiplicar coisas: N! = fatorial de "N" Variavel. Produtorio = Variavel. Produtorio *

Produtórios- multiplicar coisas: N! = fatorial de "N" Variavel. Produtorio = Variavel. Produtorio * Valor. ASer. Multiplicado; Variavel. Produtorio *= Valor. ASer. Multiplicado; # Calculando o fatorial de "N". clc; N = input("N: "); if (N < 0) printf("n%d, não existe fatorial de número negativo. n"); else f = 1; for i=N: -1: 1 f = f * i; # multiplicando endfor printf("n%d! = %dn", N, f); endif N: 7 7! = 5040 >> # ou

Médias- calcular médias: Salário médio dos funcionários do sexo masculino Idade média dos alunos

Médias- calcular médias: Salário médio dos funcionários do sexo masculino Idade média dos alunos da disciplina de algoritmos Média = Soma / Quantidade de valores; # Calculando a média dos números informados que são pares clc; ct = sm = 0; # declara e inicializa as variáveis for i=1: 5 num = input(sprintf("Informe o %dº número: ", i)); # verifica "se" o i-ésimo valor informado é par if (rem(num, 2) == 0) sm = sm + num; # somando os pares ct = ct + 1; # contando os pares Informe o 1º número: 3 endif Informe o 2º número: 2 endfor Informe o 3º número: 4 Informe o 4º número: 5 media = 0; Informe o 5º número: 2 if (ct != 0) # verifica a divisão por zero media = sm / ct; # calculando a média Soma dos pares = 8 endif Qtd. de pares = 3 Média dos pares = 2. 67 # exibe o resultado >> printf("n. Soma dos pares = %dn", sm); printf("Qtd. de pares = %dn", ct); printf("Média dos pares = %. 2 fn", media);

Percentuais- calcular valores percentuais: % de funcionários do sexo masculino % de números pares

Percentuais- calcular valores percentuais: % de funcionários do sexo masculino % de números pares Percentual = (Valor Parcial / Valor Total) * 100; # Calculando o percentual dos números informados que são pares clc; ct = 0; # inicializa o contador n = 7; # quantidade de dados de entrada for i=1: n num = input(sprintf("Informe o %dº número: ", i)); # verifica "se" o i-ésimo valor informado é par if (rem(num, 2) == 0) ct = ct + 1; # contando os pares endif endfor Informe Informe o o o o 1º 2º 3º 4º 5º 6º 7º número: número: 2 1 3 6 5 7 9 Qtd. de pares = 2 (28. 57%) >> porcento = 0; if (n != 0) # verifica a divisão por zero porcento = (ct / n) * 100; # calculando o percentual end # exibe o resultado printf("n. Qtd. de pares = %d (%. 2 f%%)n", ct, porcento);

Estruturas de Repetição: while; for printf("Usando a Estrutura de Repetição "while"n"); i = 1;

Estruturas de Repetição: while; for printf("Usando a Estrutura de Repetição "while"n"); i = 1; while (i <= 10) Usando a Estrutura de Repetição "while" printf("%d ", i); 1 2 3 4 5 6 7 8 9 10 i = i + 1; 2 4 6 8 10 12 14 16 18 20 endwhile 10 9 8 7 6 5 4 3 2 1 printf("n"); i = 2; while (i <= 20) printf("%d ", i); i = i + 2; endwhile printf("n"); i = 10; while (i >= 1) printf("%d ", i); i = i - 1; endwhile Usando a Estrutura de Repetição "for" 1 2 3 4 5 6 7 8 9 10 2 4 6 8 10 12 14 16 18 20 10 9 8 7 6 5 4 3 2 1 >> printf("nn. Usando a Estrutura de Repetição "for"n"); for i=1: 10 printf("%d ", i); endfor printf("n"); for i=2: 2: 20 printf("%d ", i); endfor printf("n"); for i=10: -1: 1 printf("%d ", i); endfor printf("n");

Sintaxe Octave: Variação permitida (end) A cláusula "end" nas estruturas de repetição podem sofrer

Sintaxe Octave: Variação permitida (end) A cláusula "end" nas estruturas de repetição podem sofrer as seguintes variações: • while - endwhile é possível também while - end • for - endfor é possível também for - end i = 1; while (i <= 10) printf("%dn", i); i = i + 1; end printf("n"); for i=1: 10 printf("%d ", i); end printf("n"); 1 2 3 4 5 6 7 8 9 10 >>

Estrutura de Repetição: do - until (1/3) No comando do - until, um conjunto

Estrutura de Repetição: do - until (1/3) No comando do - until, um conjunto de instruções é repetido, enquanto o resultado de uma expressão lógica (i > 10) é avaliada como “falsa”. É importante observar que no do - until avalia o resultado da expressão lógica depois (a posteriori) de executar o comando associado; assim, o comando será executado de forma garantida pelo menos uma vez. loop do comando(s); until (expressão lógica/ condição); comando(s) condição true false

Estrutura de Repetição: do - until i = 1; 1 do printf("%dn", i); 3

Estrutura de Repetição: do - until i = 1; 1 do printf("%dn", i); 3 i = i + 1; until (i > 10); 2 Onde "i" (variável de controle): [1] valor inicial de "i" [2] valor final de "i" [3] passo A variável de controle "i", "caminha" de 1 em 1 (i=i+1) do valor inicial (1) até o valor final (10). 1 2 3 4 5 6 7 8 9 10 >> (2/3) i = 1; loop printf("%dn", i); i = i + 1; (i > 10) true false

Estrutura de Repetição: do - until (3/3) Estrutura de repetição: do - until Estrutura

Estrutura de Repetição: do - until (3/3) Estrutura de repetição: do - until Estrutura de repetição: while clc; i = 1; do printf("%d ", i); i = i + 1; until (i > 10); clc; i = 1; while (i <= 10) printf("%d ", i); i = i + 1; endwhile printf("n"); Estrutura de repetição: for clc; for i=1: 10 printf("%d ", i); endfor printf("n"); 1 2 3 4 5 6 7 8 9 10 >>