Vous êtes sur la page 1sur 6

CENTRO UNIVERSITRIO DO LESTE DE MINAS GERAIS

ENGENHARIA DE PRODUO, ENGENHARIA MECNICA, ENGENHARIA DE MATERIAIS, ENGENHARIA SANITRIA E AMBIENTAL, ENGENHARIA CIVIL, ENGENHARIA QUMICA, ENGENHARIA METALRGICA
DISCIPLINA: Fundamentos da Computao II

PROFESSORES: Ncleo de professores de Informtica MATERIAL DE APOIO N 1

Material de Apoio N 1 Estrutura de Repetio


1) Objetivos: Utilizar o comando de repetio para resolver problemas que necessitam de repetir determinados passos (tarefas) vrias vezes. 2) Livro texto: ASCENIO, A. F.G., CAMPOS, E.A.V. Fundamentos da Programao de Computadores (Algoritmos, Pascal e C/C++). So Paulo: Prentice Hall, 2002.

3) Fundamentao Terica :
a) b) Referncia para consulta e estudos: Captulo 4 do livro texto. Motivao:

Considere o seguinte problema: Elabore um algoritmo que a leia nota do aluno e que determine escreva "Aprovado" se o aluno obtiver nota superior ou igual a 60 e "Reprovado" se o aluno obtiver nota inferior a 60. Uma soluo para o problema poderia ser a seguinte: Program CalculaNota ; var nota: integer; Begin write('Informe a nota do aluno: '); read(nota); {compara se a nota maior que 70 pontos} if(nota > 70) then begin writeln('O aluno foi aprovado'); end else begin writeln('O aluno foi reprovado'); end; End. Porm, um professor deseja checar o resultado de 30 alunos. Ento, o algoritmo acima dever ser chamado ou executado 30 vezes para mostrar o resultado de todos os 30 alunos de uma turma, pois a execuo do mesmo permite informar a nota de somente um aluno. Podemos alter-lo para que com somente uma chamada ou execuo o mesmo possa mostrar o resultado de todos os trinta alunos. Para isto necessrio utilizarmos uma ESTRUTURA DE REPETIO, ou seja, uma estrutura de controle do fluxo lgico que permite executar diversas vezes um mesmo trecho do algoritmo, porm, sempre verificando antes de cada execuo se "permitido" repetir o mesmo trecho. Veja soluo no prximo item. c) Estrutura de Repetio Padro no Algoritmo: comando ENQUANTO

Para realizar repeties com teste no incio, podemos utilizar a estrutura ENQUANTO, que permite que um bloco de comandos ou uma ao primitiva seja repetida enquanto uma determinada (condio) for verdadeira. Observe abaixo a sintaxe do comando ENQUANTO que no PascalZIM chamamos de while. While condio do begin {comandos} end; Os comandos que esto dentro do bloco Begin e end do comando while sero repetidos quantas vezes a condio estabelecida permitir.

Soluo do problema anterior: Program CalculaNotaComEnquanto ; Var nota, contador: integer; Begin contador:= 0; while (contador < 30) do begin write('Informe a nota do aluno: '); read(nota); if(nota > 70) then begin writeln('O aluno foi aprovado'); end else begin writeln('O aluno foi reprovado'); end; contador := contador + 1; end; End.
TELA

RASTREIO
MEMRIA Contador nota 0 70 1 45 2 60 3 59 4 90 ... 30 100 31 OBS: Veja que quando a varivel Contador passa para 31, a execuo do programa no entra mais no comando enquanto e passa para a linha logo abaixo do fim do enquanto

Informe a nota do aluno: 70 O aluno foi aprovado Informe a nota do aluno: 45 O aluno foi reprovado Informe a nota do aluno: 60 O aluno foi aprovado Informe a nota do aluno: 59 O aluno foi reprovado Informe nota do aluno: 90 O aluno foi aprovado ... Informe a nota do aluno: 100 O aluno foi aprovado

OBS: Diferente dos outros rastreios que estvamos acostumados a fazer, agora iremos representar variveis em uma tabela para mostrar o que foi acontecendo com as mesmas durante o processo de repetio.

4) Exemplos de algoritmos utilizando comando ENQUANTO


a) Clculo de Quantidade: Construir um programa que leia a idade de 10 pessoas e conte quantas possuem mais
de 50 anos. Exibir o resultado. Program MaisQue50; var x, Id, Qtd50: integer; Begin Qtd50:= 0; x:= 1; while (x <= 10) do begin write (Informe a idade da , x , pessoa); read (Id); if (Id > 50) then begin Qtd50:= Qtd50 + 1; end; x := x + 1; end; write (Existem, Qtd50, pessoas com idade maior que 50 anos); End.

b) Clculo de Mdia Geral: Elabore um algoritmo que leia o nome e a altura de um grupo de 15 pessoas e que
calcule e escreva a altura mdia. Program CalcMedia; var Nome: String; x: integer; Alt, SomaAlt, MediaAlt: real; Begin SomaAlt:= 0; x:= 1; while (x <= 15) do Begin write (Informe o Nome da , x , pessoa); read (Nome); write (Informe a altura da , x , pessoa); read (Alt); SomaAlt:= SomaAlt + Alt; x := x + 1; end; MediaAlt := SomaAlt/15; write (A idade mdia das pessoas : , MediaAlt); End.

c) Clculo de mdia de um grupo: Elabore um algoritmo que leia o sexo e a altura de um grupo de 20 pessoas e
calcule a mdia das alturas dos homens. Program CalcMedia2; Var X, CONTH: integer; SEXO: char; ALTURA, MEDIAALTH, SOMAALTH: real; Begin CONTH:= 0; SOMAALTH:= 0; X:= 1; while (X <= 20) do Begin write (Digite SEXO (M, F) : ); read (SEXO); write ( Digite altura : ); read (ALTURA); if (SEXO = M) or (SEXO =m') then begin CONTH := CONTH + 1; SOMAALTH := SOMAALTH + ALTURA; end; X:= X + 1; end; if (CONTH > 0) then begin MEDIAALTH:= SOMAALTH / CONTH; write ( A media de altura dos homens : , MEDIAALTH); end else begin write ( No existem homens no grupo ); end; End.

d) Clculo do Maior e do Menor: Elabore um algoritmo que leia a altura e o sexo de um grupo de 50 pessoas e
que determine a maior e a menor altura do grupo. Program CalcMedia3; var ALTURA, MENORALTURA, MAIORALTURA: real; X: integer; Begin MENORALTURA:= 5; MAIORALTURA:= 0; X:= 1; while (X <= 50) do begin write ( Digite altura ); read (ALTURA); if (ALTURA > MAIORALTURA) then begin MAIORALTURA:= ALTURA; end; if (ALTURA < MENORALTURA) then begin MENORALTURA:= ALTURA; end; X:= X +1; end; write ( A maior altura do grupo : , MAIORALTURA); write ( A menor altura do grupo : , MENORALTURA); end.

e) Quantidade informada pelo usurio: Elabore um algoritmo que leia o nome e a altura de um grupo
indeterminado de pessoas e que determine e escreva a maior altura e o nome da pessoa que a possui;
OBS.: O usurio dever informar a quantidade de pessoas do grupo.

Program Pessoas; Var ALT, MAIORALT: real; NOME, NOMEMALT: String; X, QTDPESS: integer; begin MAIORALT:= 0; X:= 1; write( Informe a quantidade de pessoas: ); read (QTDPESS); while (X <= QTDPESS) do begin write( Digite o nome: ); read (NOME); write ( Digite a altura: ); read (ALT); if (ALT > MAIORALT) then begin NOMEMALT:= NOME; MAIORALT:= ALT; end; X:= X +1; end; write( A maior altura : , MAIORALT, e do(a): , End.

NOMEMALT);

4) Exerccios
1) Considere as seguintes faixas etrias: Criana (de 0 a 10 anos), Adolescente (de 11 a 16 anos), Jovem ( de 17 a 26 anos) e Adulto ( acima de 27 anos). Construa um programa que leia o nome e a idade de 10 pessoas. Depois informe a qual faixa etria ela pertence. 2) Escreva um algoritmo que leia um nmero N, calcule seu fatorial e mostre o resultado obtido. Um exemplo de fatorial:

4! = 4*3*2*1 6! = 6*5*4*3*2*1 1!=1 0!=1 , ateno fatorial de zero 1 3) Construir um programa que leia o cdigo do consumidor (um nmero), o total de pessoas residentes na casa deste consumidor e o valor consumido em kwh referente ao ltimo ms. Essa leitura dever ser feita para 50 consumidores. Calcular e escrever: a) Qual foi o maior consumo registrado e a qual consumidor pertence. b) A mdia de consumo dos consumidores que moram sozinhos.

4) Construir um programa que leia o nome, a idade e o estado civil ( C- casado, S- solteiro, O- outros) de um conjunto
de vrias pessoas. Solicitar ao usurio a quantidade de pessoas. Com esses dados calcular e escrever: a) Quantidade de pessoas casadas b) Mdia da idade das pessoas solteiras c) Qual a idade da pessoa mais nova 5) Construir um programa que leia o nome, peso e o sexo de um conjunto de vrias pessoas. O usurio ir informar a quantidade exata de pessoas. Calcular e escrever: a) Menor peso do grupo de pessoas. b) Maior peso dos homens.

5)

Algoritmos utilizando comando ENQUANTO indeterminado

Neste caso o bloco de comando ser executado indeterminadamente, at que a condio de parada seja atendida. Exemplo: Desenvolver um algoritmo que leia dois valores A e B (n vezes at que o usurio digite SIM ou S) e efetue e imprima a soma de A e B. program EXEMPLO_WHILE_DO2; var A, B, R : integer; RESP : string; begin RESP := SIM; while (RESP = SIM) or (RESP = S) do begin write(Entre um valor para A: ); read (A); write(Entre um valor para B: ); read(B); R:= A + B; writeln(O resultado corresponde a: ,R); writeln; write(Deseja continuar?); read(RESP); end; end Observe que o lao no tem um contador, o contador foi substitudo pela varivel RESP, que enquanto tiver o seu valor igual a SIM ou igual a S, executar os comandos contidos entre as instrues begin e end do comando while...do.

6) Exerccios 1.
Leia uma varivel X inmeras vezes (parar quando o valor digitado for <= 0). Para cada valor lido mostre a sequncia de 1 at o valor lido.

2.

Escrever um algoritmo que, dada uma sequncia de valores inteiros e positivos, determine qual o menor valor desta sequncia. O valor 0 (zero) indica o trmino dos dados de entrada (finalizador).

3. Construir um programa que leia o sexo e a idade de vrias pessoas. Utilize como condio de parada a letra Z para o sexo. Calcule e escreva: Quantas pessoas so do sexo masculino e tm menos de 20 anos; O sexo da pessoa mais nova. A porcentagem de mulheres do grupo. 4. Um clube de servios deseja fazer um levantamento com relao a seus associados. Elabore um algoritmo que leia os seguintes dados para cada associado: Sexo, Idade e Renda Familiar. A leitura terminar quando for digitada uma idade igual a zero. O algoritmo deve calcular e escrever: Quantidade de Associados do Sexo Feminino com mais de 40 anos; A renda mdia de todos os associados. 5. Faa um programa que leia um conjunto de valores inteiros e positivos, calcule e mostre o maior e o menor valor do conjunto. Considere que: Para encerrar a entrada de dados deve ser digitado o valor zero; Para valores negativos deve ser enviada uma mensagem; Os valores negativos ou iguais a zero no entraro nos clculos.