Anda di halaman 1dari 11

Unidade III - Estruturas de Objetivos

Repetio

Entender o funcionamento das estruturas de


repetio.

Estrutura de Repetio Conhecer e aplicar as estruturas de repetio


na Linguagem C.

Curso: Engenharia de Produo


Semestre Letivo: 2017 / 1

Prof. Kalid Antunes Bel. em Cincia da Computao


Especialista em Tecnologias para Desenvolvimento Web
kalid.costa@ifmg.edu.br 1
Ps-Graduado em Docncia do Ensino Superior Kalid Costa [kalid.costa@ifmg.edu.br] Linguagem C - Estrutura de 1 Semestre de 2017 (1.5) 2 /41

Repetio
1 2

Estrutura de Estruturas de
Repetio Repetio

So muito comuns as situaes em que se deseja repetir um


determinado trecho de um programa um certo nmero de vezes.
Por exemplo, a ao tomar caf:
Pegar prato.
Servir fruta.
Contextualizao Pegar
xcara.
Servir caf na
xcara. Partir o po.
Passar manteiga.
Comer um pedao do po.
Beber caf.
Comer um pedao do po.
Beber caf.
...
Comer um pedao do po.
3 /41
Beber caf. 4 /41
Kalid Costa [kalid.costa@ifmg.edu.br] Linguagem C - Estrutura de 1 Semestre de 2017 (1.5) Kalid Costa [kalid.costa@ifmg.edu.br] Linguagem C - Estrutura de 1 Semestre de 2017 (1.5)

Repetio Repetio
3 4
Estruturas de Exemplos de
Repetio Problemas

As estruturas de repetio so muitas vezes chamadas de


Laos ou tambm de Loops. Exibir na tela os 100 primeiros nmeros inteiros positivos;
Classificao:
Laos Contados Exibir na tela os nmeros pares entre 500 e 800;
Conhecimento prvio de quantas vezes o bloco de comandos no interior da
construo ser executado;
Laos Condicionais Ler do teclado nmeros inteiros at que o usurio digite 0.
No se conhece de antemo o nmero de vezes que o conjunto de comandos no No momento em que o usurio digitar 0, dever ser
interior do lao ser repetido. apresentada na tela a mdia dos valores digitados;
Amarrado a uma condio sujeita modificao pelas instrues do interior do lao.

Calcular o fatorial de um inteiro digitado pelo usurio.

Kalid Costa [kalid.costa@ifmg.edu.br] Linguagem C - Estrutura de 1 Semestre de 2017 (1.5) 5 /41 Kalid Costa [kalid.costa@ifmg.edu.br] Linguagem C - Estrutura de 1 Semestre de 2017 (1.5) 6 /41

Repetio Repetio
5 6

Estrutura de Lao Contado em


Repetio Algoritmos

So teis quando se conhece previamente o nmero exato


Lao Contado de vezes que se deseja executar um determinado conjunto
de comandos.
em Algoritmos Estrutura dotada de mecanismo (varivel de controle)
para contar o nmero de vezes que o corpo do lao
executado.

para <varivel> de <incio> at <final> faa


<comando(s)>
fim para;

Kalid Costa [kalid.costa@ifmg.edu.br] Linguagem C - Estrutura de 1 Semestre de 2017 (1.5) 7 /41 Kalid Costa [kalid.costa@ifmg.edu.br] Linguagem C - Estrutura de 1 Semestre de 2017 (1.5) 8 /41

Repetio Repetio
7 8
Exemplo Fluxograma

Exibir a quantidade de nmeros mpares inteiros entre 15 e


60.
inicio
inteiro i, cont_impar;
cont_impar <- 0;
para i de 17 at 59 passo 2 faa
cont_impar <- cont_impar + 1;
fim para;
escreva(Quantidade de numeros impares:, cont_impar);
fim.

Kalid Costa [kalid.costa@ifmg.edu.br] Linguagem C - Estrutura de 1 Semestre de 2017 (1.5) 9 /41 Kalid Costa [kalid.costa@ifmg.edu.br] Linguagem C - Estrutura de 1 Semestre de 2017 (1.5) 10/41

Repetio Repetio
9 10

Lao Contado em Lao Contado em


Linguagem C Linguagem C

Estrutura de lao contado em pseudocdigo:

Lao Contado para <varivel> de <incio> at <final> passo <valor inteiro> faa
<comando(s)>

em
fim para;

Linguagem C Estrutura de lao contado em Linguagem C:

for (var-controle = incio; condio;


atualizao_var-controle){
<bloco de comandos>
}
Kalid Costa [kalid.costa@ifmg.edu.br] Linguagem C - Estrutura de 1 Semestre de 2017 (1.5) 11/41 Kalid Costa [kalid.costa@ifmg.edu.br] Linguagem C - Estrutura de 1 Semestre de 2017 (1.5) 12/41

Repetio Repetio
11 12
Lao Contado em Exemplo 1
Linguagem C
Exibir a quantidade de nmeros mpares inteiros entre 15 e
for (var-controle = incio; condio; 60.
atualizao_var-controle){ #include <stdio.h>
#include <stdlib.h>
<bloco de comandos>
} int main(){
int i, cont_impar = 0;
for (i=17; i <= 59; i += 2){
cont_impar++;
}
printf(Quantidade de numeros impares: %d, cont_impar);
system(PAUSE);
return 0;
}

Funcionamento da estrutura de repetio for


Kalid Costa [kalid.costa@ifmg.edu.br] Linguagem C - Estrutura de 1 Semestre de 2017 (1.5) 13/41 Kalid Costa [kalid.costa@ifmg.edu.br] Linguagem C - Estrutura de 1 Semestre de 2017 (1.5) 14/41

Repetio Repetio
13 14

Exemplo 2 Exemplo 3

Somar os 100 primeiros nmeros inteiros positivos. Construir um programa para calcular a mdia de 7
Mostrar o resultado. de valores inteiros, fornecidos pelo usurio.
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>

int main() int main(){


int i, valor, soma;
{ int i, float media;
soma; soma = soma = 0;
0; printf(Digite 7 valores inteiros: \n\n);
for (i=1; i <=100; i++) for (i = 1; i <= 7; i++){
scanf(%d, &valor);
{ soma += i; soma = soma + valor;
} }
printf(Soma dos 100 primeiros numeros: %d,soma); media = soma/7.0;
system(PAUSE); printf(Media dos 7 numeros inteiros: %.1f,media);
system(PAUSE);
return 0; }
} 15/41 16/41
Kalid Costa [kalid.costa@ifmg.edu.br] 1 Semestre de 2017
Linguagem C - Estrutura de (1.5) Kalid Costa [kalid.costa@ifmg.edu.br] Linguagem C - Estrutura de 1 Semestre de 2017 (1.5)

Repetio Repetio
15 16
Exemplo 4 Fixa
o
Faa um programa que leia um nmero positivo da
entrada e exiba os nmeros inteiros de 0 at este
nmero.(supondo entrada correta) Uma loja quer calcular um bnus que dar a cinco
clientes. O bnus depende de quanto cada cliente
#include <stdio.h>
comprou. Os clientes que compraram menos de R$ 500
#include <stdlib.h>
recebero de bnus 10% do valor das compras. Os
int main() clientes que compraram a partir de R$ 500 recebero de
{ int i, bnus, 15% do valor das compras. O programa deve ler o
max; cdigo do cliente e o valor das compras e escrever o
printf(digite um numero inteiro positivo:\n); valor do bnus, para cada um dos cinco clientes.
scanf(%d, &max);
printf(\n\nnumeros inteiros de 0 ate %d:\n, max);
for (i=0; i <=max; i++)
printf(%d\n,i);
system(PAUSE);
}
Kalid Costa [kalid.costa@ifmg.edu.br] Linguagem C - Estrutura de 1 Semestre de 2017 (1.5) 17/41 Kalid Costa [kalid.costa@ifmg.edu.br] Linguagem C - Estrutura de 1 Semestre de 2017 (1.5) 18/41

Repetio Repetio
17 18

Resoluo Fixao Estrutura de


Repetio
#include <stdio.h>
#include <stdlib.h>

int main(){ float


valor; int cod,
i;

printf(Loja Compre Bem\n\n);

for (i = 1; i <= 5; i++){ printf(Codigo


do Cliente %d: , i);
scanf(%d,&cod); Laos Condicionais
printf(\nValor das compras: );
scanf(%f,&valor);
if (valor < 500)
printf(\n\nValor do bonus R$ %.2f\n, valor*0.1);
else
printf(\n\nValor do bonus R$ %.2f\n, valor*0.15);
printf(\n\ntecle enter para continuar...);
getche();
}
system(pause);
}

Kalid Costa [kalid.costa@ifmg.edu.br] Linguagem C - Estrutura de 1 Semestre de 2017 (1.5) 19/41 Kalid Costa [kalid.costa@ifmg.edu.br] Linguagem C - Estrutura de 1 Semestre de 2017 (1.5) 20/41

Repetio Repetio
19 20
Laos Condicionais Lao Condicional com
Teste no Incio

Caracteriza-se por uma estrutura que efetua um teste


O conjunto de comandos em seu interior executado at
lgico no incio de um lao, verificando se permitido ou
que uma determinada condio seja satisfeita.
no executar o conjunto de comandos no interior do lao.
Laos condicionais mais comuns nas linguagens de
programao modernas: enquanto <condio> faa
Enquanto (while em C) - lao condicional com teste no incio. <comando(s)>
Repita (do..while em C) - lao condicional com teste no final. fim enquanto;
A varivel que testada deve sempre estar associada a
um comando que a atualize no interior do lao.
Caso isso no ocorra, o programa ficar repetindo indefinidamente
este lao, gerando um lao infinito.

Kalid Costa [kalid.costa@ifmg.edu.br] Linguagem C - Estrutura de 1 Semestre de 2017 (1.5) 21/41 Kalid Costa [kalid.costa@ifmg.edu.br] Linguagem C - Estrutura de 1 Semestre de 2017 (1.5) 22/41

Repetio Repetio
21 22

Exemplo Fluxograma

Leia uma sequncia de nmeros. O ltimo nmero zero.

inicio
inteiro: numero;
escreva(Digite um nmero ou 0 para finalizar:);
leia(numero);
enquanto numero <> 0 faa
escreva(Digite outro nmero ou 0 para finalizar:);
leia(numero);
fim enquanto;
escreva(Fim do Programa!);
fim.

Kalid Costa [kalid.costa@ifmg.edu.br] Linguagem C - Estrutura de 1 Semestre de 2017 (1.5) 23/41 Kalid Costa [kalid.costa@ifmg.edu.br] Linguagem C - Estrutura de 1 Semestre de 2017 (1.5) 24/41

Repetio Repetio
23 24
Lao Condicional com Exemplo 1
Teste no Incio
Estrutura de lao condicional enquanto em pseudocdigo:
enquanto <condio> faa Faa um programa que leia uma lista de nmeros inteiros
<comando(s)> terminada pelo nmero 0 (zero). Ao final, o programa
fim enquanto; deve mostrar a mdia aritmtica de todos os nmeros
lidos (excluindo o zero).
Estrutura de lao condicional while em Linguagem C:

while (condio){
<bloco de comandos>
}

Funcionamento da estrutura de repetio while

Kalid Costa [kalid.costa@ifmg.edu.br] Linguagem C - Estrutura de 1 Semestre de 2017 (1.5) 25/41 Kalid Costa [kalid.costa@ifmg.edu.br] Linguagem C - Estrutura de 1 Semestre de 2017 (1.5) 26/41

Repetio Repetio
25 26

Resoluo do Exemplo Exemplo 2


1
Faa um programa que o usurio entre com a idade de
#include <stdio.h> vrias pessoas e exibir:
#include <stdlib.h>
a) Total de pessoas com menos de 21 anos;
int main(){
int valor, soma, cont; b) Total de pessoas com mais de 50 anos;
float media;
cont = 0;
soma = 0; O programa ser executado enquanto no for digitada
printf(Digite um nmero inteiro ou 0 para finalizar:\n\n); scanf(%d,
&valor); idade menor que zero ou maior do que 140.
while (valor != 0){ soma
= soma + valor; cont+
+;
printf(Digite um outro nmero inteiro ou 0 para calcular a media:\n\n);
scanf(%d, &valor);
}
if (cont != 0){
media = (float)soma/cont;
printf(Media da entrada de numeros: %.1f,media);
}else{
printf(Sistema finalizado!); system(PAUSE);
}
Kalid Costa [kalid.costa@ifmg.edu.br] Linguagem C - Estrutura de 1 Semestre de 2017 (1.5) 27/41 Kalid Costa [kalid.costa@ifmg.edu.br] Linguagem C - Estrutura de 1 Semestre de 2017 (1.5) 28/41

Repetio Repetio
27 28
Resoluo do Exemplo Fixa
2 o
#include <stdio.h>
#include <stdlib.h> Uma empresa deseja aumentar seus preos em 20%.
main(){ Faa um programa que leia o cdigo e o preo de custo
int idade, cont21, cont50, contador;
cont21 = 0; de cada produto e calcule o preo novo. Calcule tambm,
cont50 = 0;
contador = 0; a mdia dos preos com e sem aumento. Mostre o cdigo
printf(Digite a idade de uma pessoa ou, menor que 0 ou acima de 140 para finalizar:\n\n);
scanf(%d, &idade);
while (idade > 0 && idade < 140){
e o preo novo de cada produto e, no final, as mdias. A
if (idade < 21)
cont21++;
quantidade de dados que sero cadastrados
else{
if (idade > 50)
desconhecida.
cont50++;
}
printf(Digite a idade de outra pessoa ou, menor que 0 ou acima de 140 para finalizar:
\n\n);
scanf(%d, &idade);
contador++;
}
if (contador != 0){
printf(\n\nTotal de pessoas com menos de 21 anos: %d,cont21);
printf(\n\nTotal de pessoas com mais de 50 anos: %d,cont50);
}else{
} printf(Sistema finalizado!);
Kalid Costa [kalid.costa@ifmg.edu.br] Linguagem C - Estrutura de 1 Semestre de 2017 (1.5) 29/41 Kalid Costa [kalid.costa@ifmg.edu.br] Linguagem C - Estrutura de 1 Semestre de 2017 (1.5) 30/41

Repetio Repetio
29 30

Resoluo da Fixao Lao Condicional com


Teste no Final
#include <stdio.h>
#include <stdlib.h> Efetua um teste lgico no final de um lao, verificando se
main(){
float preco_custo, preco_novo, media_precocusto, media_preconovo, soma_precocusto, soma_preconovo; permitido ou no executar novamente o conjunto de
int cod, qtde_produtos;
char passe;
qtde_produtos = 0;
comandos no interior do mesmo.
soma_precocusto = 0;
soma_preconovo = 0;

printf("tecle enter para continuar ou espaco para parar:\n\n");


Na construo Repita o comando executado uma ou
scanf("%c", &passe);
while (passe != ' '){ mais vezes (pelo menos uma vez). Alm disso, a varivel
pode ser inicializada ou lida dentro do lao.
printf("Digite o Codigo do Produto: ");
scanf("%d",&cod);
printf("\nEntre com o preco de custo do Produto: R$");
scanf("%f",&preco_custo);
qtde_produtos++;

soma_precocusto += preco_custo;
Na construo Enquanto o comando executado zero ou
preco_novo = 1.2 * preco_custo;
soma_preconovo += preco_novo;
printf("\n\nCodigo do Produto: %d", cod);
mais vezes.
printf("\n\nPreco do Produto reajustado em 20%%: R$%.2", preco_novo);

printf("tecle enter para continuar ou espaco para parar:\n\n");


scanf("%c", &passe);
repita
}
if(qtde_produtos != 0){
media_precocusto = soma_precocusto/qtde_produtos;
<comando(s)>
at <condio>;
media_preconovo = soma_preconovo/qtde_produtos;
printf("\n\n\nMedia de preco dos Produtos: R$%.2f", media_precocusto);
printf("\n\n\nMedia de preco reajustado dos Produtos: R$%.2f", media_preconovo);
}else
printf("Sistem finalizado!");

system(PAUSE);

}
Kalid Costa [kalid.costa@ifmg.edu.br] Linguagem C - Estrutura de 1 Semestre de 2017 (1.5) 31/41 Kalid Costa [kalid.costa@ifmg.edu.br] Linguagem C - Estrutura de 1 Semestre de 2017 (1.5) 32/41

Repetio Repetio
31 32
Exemplo Fluxograma

Leia o nome de usurio e senha. Sendo Kalid o usurio


correto e 123 a senha correta, faa a autenticao.
Permita que o usurio digite novamente em caso de erro.
inicio
caracter: usuario, senha;
repita
escreva(Usurio:);
leia(usuario);
escreva(Senha:);
leia(senha); Sim

at (usuario = Kalid) E (senha = 123);


escreva(Bem vindo, , usuario);
fim.
No

Kalid Costa [kalid.costa@ifmg.edu.br] Linguagem C - Estrutura de 1 Semestre de 2017 (1.5) 33/41 Kalid Costa [kalid.costa@ifmg.edu.br] Linguagem C - Estrutura de 1 Semestre de 2017 (1.5) 34/41

Repetio Repetio
33 34

Lao Condicional com Exemplo 1


Teste no Final
Estrutura de lao condicional repita.. ate em pseudocdigo:
Faa um programa para ler o cdigo e o preo de 15 produtos,
repita
calcular e exibir a mdia aritmtica dos preos dos produtos.
<comando(s)>
#include <stdio.h>
at <condio>; #include <stdlib.h>

int main(){
Estrutura de lao condicional do..while em Linguagem C: int cod, cont_prod;
float preco, soma, media;
soma = 0;
cont_prod = 0;
do {
printf (\nEntre com o codigo do produto: );
do{ scanf (%d, &cod);
printf (\n\nEntre com o preco do produto: R$);
<bloco de comandos> scanf (%f, &preco);
soma += preco;
} cont_prod++;
}
while (condio); while (cont_prod < 15);
media = soma/15;
printf(Media dos precos dos produtos: R$ %.2f, media);
Funcionamento da estrutura de repetio do..while system(PAUSE);

}
Kalid Costa [kalid.costa@ifmg.edu.br] Linguagem C - Estrutura de 1 Semestre de 2017 (1.5) 35/41 Kalid Costa [kalid.costa@ifmg.edu.br] Linguagem C - Estrutura de 1 Semestre de 2017 (1.5) 36/41

Repetio Repetio
35 36
Exemplo 2 Exemplo 3

Faa um programa que o usurio informar o nome, o sexo e a Ler 20 nmeros e exibir o maior e o menor valor.
idade de 20 pessoas. O programa deve exibir o nome se a pessoa #include <stdio.h>
for do sexo masculino e tiver mais de 21 anos. #include <stdlib.h>

main(){
int cont;
float num, maior, menor;
cont = 0;

printf (\n\nEntre com 20 numeros: \n);


scanf (%f, &num);
maior = num;
menor = num;
do {
scanf (%f, &num);
if (num > maior){
num1 = num;
}else{
if(num < menor){
num2 = num;
}
}
cont++;
}
while (cont < 19);
printf(O maior e o menor numero e respectivamente %.1f e %.1f., maior, menor);
system(PAUSE);
}

Kalid Costa [kalid.costa@ifmg.edu.br] Linguagem C - Estrutura de 1 Semestre de 2017 (1.5) 37/41 Kalid Costa [kalid.costa@ifmg.edu.br] Linguagem C - Estrutura de 1 Semestre de 2017 (1.5) 38/41

Repetio Repetio
37 38

Fixa Resoluo da Fixao


o
#include <stdio.h>
#include <stdlib.h>

main(){
int cod_cidade, estado, num_veiculos, num_acidentes, cont, maior_indice_acidente, menor_indice_acidente, cidade_maior, cidade_menor, soma_veiculos,
cod_cidade_maior_ind, cod_cidade_menor_ind, soma_acidentes_mg, cont_mg;

Foi feita uma pesquisa estatstica nas 50 principais cidades de quatro float media_veiculos, media_acidentes_mg;
cont = 0;
soma_veiculos = 0;

Estados para coletar dados sobre acidentes de trnsito. Foram maior_indice_acidente = 0;


menor_indice_acidente = 0;
soma_acidentes_mg = 0;

obtidos os seguintes dados: cont_mg = 0;

do {
printf (\n\nEntre com o codigo da cidade: );

Cdigo da cidade scanf (%d, &cod_cidade);


printf (\n\nEntre com o estado: 1 - SP, 2 - RJ, 3 - MG ou 4 - PR: );
scanf (%d, &estado);

Estado (1 - SP, 2 - RJ, 3 - MG, 4 - PR)


printf (\n\nEntre com o numero de veiculos de passeio em 2010: );
scanf (%d, &num_veiculos);
printf (\n\nEntre com o numero de acidentes de transito com vitimas em 2010: );
scanf (%d, &num_acidentes);

Nmero de veculos de passeio (em 2010) if(num_acidentes > maior_indice_acidente){


maior_indice_acidente = num_acidentes;
cod_cidade_maior_ind = cod_cidade;
}else{
Nmero de acidentes de trnsito com vtimas (em 2010) if(num_acidentes < menor_indice_acidente){
menor_indice_acidente = num_acidentes;
cod_cidade_menor_ind = cod_cidade;
}
}

Deseja-se saber: soma_veiculos += num_veiculos;


if(estado == 3){
soma_acidentes_mg += num_acidentes;
cont_mg++;

Qual o maior e o menor ndice de acidentes de trnsito e a que cidades }


}
cont++;

pertencem; while (cont < 50);

media_veiculos = soma_veiculos/50;
media_acidentes_mg = soma_acidentes_mg/cont_mg;
Qual a mdia de veculos nas cidades pesquisadas (geral); printf("Cidade com maior ndice de acidentes: %d\n", &cod_cidade);
printf("ndice de acidentes: maior_indice_acidente");

Qual a mdia de acidentes com vtimas entre as cidades do Estado de Minas printf("\n\nMedia de veculos nas cidades pesquisadas: %.1f", media_veiculos);
printf("\n\nMedia de acidentes em Minas Gerais: %.1f", media_acidentes_mg);
system(PAUSE);
Gerais.
Kalid Costa [kalid.costa@ifmg.edu.br] Linguagem C - Estrutura de 1 Semestre de 2017 (1.5) 39/41 [kalid.costa@ifmg.edu.br] Linguagem C - Estrutura de 1 Semestre de 2017 (1.5) 40/41

Repetio Repetio
39 40
Referncias

FOBERLLONE, Andr Luiz Villar; EBERSPCHER, Henri Frederico.


Lgica de programao a construo de algoritmos e estrutura
de dados. 3. ed. Makron, 2000.
GUIMARES, Angelo de Moura; LAGES, Newton Alberto de
Castilho. Algoritmos e estruturas de dados. Rio de Janeiro: LTC,
1994.
MIZRAHI, Victorine Viviane. Treinamento em Linguagem C. 2. ed.
So Paulo: Pearson Prentice Hall, 2008.
SCHILDT, Herbert. C, completo e total. 3. ed. So Paulo: Makron
Books, 1996.
KERNIGHAN, Brian W.; RITCHIE, Dennis M.. C, a linguagem de
programao: padro ANSI. 2. ed. Rio de Janeiro: Elsevier, 1989.

Kalid Costa [kalid.costa@ifmg.edu.br] Linguagem C - Estrutura de 1 Semestre de 2017 (1.5) 41/41

Repetio
41