• Nenhum resultado encontrado

6 - A Lógica da Programação Enlaçamento

N/A
N/A
Protected

Academic year: 2022

Share "6 - A Lógica da Programação Enlaçamento"

Copied!
57
0
0

Texto

(1)

1 1

Unesp – Campus de Guaratinguetá

Curso de Programação Computadores

Prof. Aníbal Tavares Profa. Cassilda Ribeiro

6 - A Lógica da Programação Enlaçamento

2

Existem situações em quem uma operação ou uma série de operações deve ser repetida varia vezes. Nestes casos utiliza-se uma estrutura de controle chamada laço ou enlaçamento. O laço é uma construção fundamental em programação e existem várias formas de laço, a saber:

6 Enlaçamento

1. Laços Condicionais

2. Laços Controlados por Entrada Entrada controlada por contador Entrada controlada por sentinela 3. Laços Contados

A seguir será visto em detalhe cada um desses laços.

(2)

3

1 Laços Condicionais

O laço condicional testa uma condição e repete uma seqüência de ações enquanto a condição testado for verdadeira. Ou seja ele fica repetindo uma seqüência de ações, enquanto a condição for verdadeira

Em linguagem algorítmica ele é expresso da seguinte forma:

6 Enlaçamento

Enquanto “condição” faça comando

Enquanto (condição)faça Início

comando1 comando2...

comandoN Fim

Ou

4

Vejamos agora o exemplo do cálculo do resto inteiro de uma divisão.

Um maneira de se calcular o resto de uma divisão é através de sucessivas subtrações. Suponha, por exemplo, que

desejamos calcular o resto da divisão de 7 por 3.

Isto pode ser feito da seguinte maneira:

1) Inicialmente fazemos b=7 e a=3 2) Perguntamos se (b > a) (7>3).

Se a resposta for sim fazemos (b=b-a) (b=7-3 = 4) e perguntamos novamente se (b=b-a) (b=7-3 = 4). Se a resposta for sim, fazemos novamente (b=b-a) (b=4 -3 = 1) e mais uma vez perguntamos se (b>a) (1>3). Como agora b não é maior que a, paramos de perguntar e fazemos resto=1

6.1 Enlaçamento: Laços Condicionais

(3)

5

Graficamente:

1

3 3 7

Solução/Algoritmo:

4 7 - 3

4 > 3 V

1 4 - 3

1 > 3 F

1

7 > 3 V

r 6.1 Enlaçamento: Laços Condicionais

Observe que ficamos repetindo a ação de subtrair (b=b-a) enquanto a condição (b>a) foi verdadeira. No momento em que b<a, paramos o laço.

6

Algoritmo resto

Escreva(“Digite a e b”) Leia(a,b);

Enquanto (b > a) faça b b – a;

fim enquanto r b;

Escreva(“resto=”, r);

Solução/Algoritmo:

b ←←←← b - a

b > a V

b ←←←← b - a

b > a F

b > a V

b r ←←←←

Resto da divisão: b a

r c

Instruções Possíveis:

- > →→→→ F V

6.1 Enlaçamento: Laços Condicionais

(4)

7

Como saber se um número é par ou ímpar ? Resto da divisão: b a

r c

Um número é par se é divisível por 2 !

Ou seja, se b é par, então, para a = 2, r = 0 ! Solução/Algoritmo a←2; Leia (b);

Enquanto (b > a) faça b ← b – a;

r ← b;

Se (r = 0) Então Escreva(“b eh par”);

Senão

Escreva(“b eh ímpar”);

Caso particular do Algoritmo Anterior

+ Verificação

6.1 Enlaçamento: Laços Condicionais

8

6.1 Enlaçamento: Laços Condicionais

Exemplo 1: Faça um algoritmo que calcule o fatorial de um valor lido. As variáveis N, Produto e Multiplicador são do tipo inteiro

Idéia:

1! = 1 2! = 2 *1!

1 2*1 1

2

••• ••• •••

(n-1)! = (n-1)*(n-2)! n-1 (n-1)*•••*1

i prod

Fatorial

n! = n*(n-1)! n n*(n-1)*•••*1

(5)

9

Exemplo 1: Faça um algoritmo que calcule o fatorial de um valor lido. As variáveis N, Produto e Multiplicador são do tipo inteiro

Algorítmo Fat_N

Variáveis: N, Produto, Multiplicador : Inteiro.

Início

1. [Ler dados]

Escreva (“ Digite o numero para se calcular o fatorial”) Leia (N)

2. [Inicializar variáveis]

Produto 1

Multiplicador N Continua

3. [Estabelecer o laço]

6.1 Enlaçamento: Laços Condicionais

10

3. [Estabelecer o laço]

Enquanto (multiplicador ≥ 1) faça Inicio

3.1. [Calcular o produto parcial]

Produto Produto * Multiplicador 3.2 [Reajustar o multiplicador]

Multiplicador Multiplicador – 1 Fim enquanto

4. [Imprimir resultado]

Escreva (´Fatorial de`, N, ´=`, Produto) 5. [Terminar]

Fim

6.1 Enlaçamento: Laços Condicionais continuação do exemplo 1

(6)

11

6.1 Enlaçamento: Laços Condicionais

Exemplo 2: Fazer um algoritmo que calcule e imprima a soma dos quadrados dos 100 primeiros números inteiros.

Algoritmo Soma_quadrados Variáveis: soma, número, N : inteiro Início

1. [Inicializar variáveis]

soma ←0 número ← 1

Escreva (´”Quantos números você quer somar?”)

Leia (N) Continua

12

2. [Somar os números]

Enquanto (número<=N) faça Início enquanto

soma soma + (número ↑ 2) número número + 1

Fim enquanto

3. [Imprimir resultado]

Escreva (´O valor da soma é:`, soma) Fim algoritmo

continuação do exemplo 2

6.1 Enlaçamento: Laços Condicionais

(7)

13

Em linguagem C o laço condicional Enquanto é feito através do comando while, isto é:

while (condição) {

comandos;

}

OBS: O processo é repetido enquanto a condição for verdadeira.

F

condição V comandos

While (condição) 6.1.1 Laços Condicionais - Comando Comando whilewhile

14

1º. Avalia a condição

2º.Se a condição for Falsa (0-zero), o laço termina e o programa continua na instrução imediatamente após o while.

3º. Se a condição é verdadeira (diferente de zero) , executa os comandos do bloco.

4º. Volta ao passo 1.

O while funciona do seguinte modo:

6.1.1 Laços Condicionais -

-

Comando while

Comando

while

Observação Importante: Cada verificação da condição lógica com a conseqüente execução de ações é denominada de iteração (passos 1, 2 e 3).

(8)

15

O comando whileaparentemente é igual ao comando if, mas isto não é verdade. A semelhança está somente no fato que ambos avaliam uma condição antes de executar a ação.

A diferença fundamental entre o whilee o if é a seguinte:

O comandowhileavalia a condição. Se ela for verdadeira ele executa um comando ou um bloco de comandos, e volta para avaliar novamente a condição. Ele fica repetindo esses passos enquanto a condição for verdadeira.

O comando ifavalia a condição. Se ela for verdadeira ele executa o comando ou bloco de comandos somente uma vez. O comando ifnão fica repetindo a mesma ação.

6.1.1 Laços Condicionais -

-

Comando while

Comando

while

16

OBS: 1- Do mesmo modo que no comando if,a condição do comando while, deve sempre ser colocada entre parênteses.

2- O comandos de um laço também são chamados de corpo do laço.

Diferen

Diferençça entre o comando if e o a entre o comando if e o whilewhile -Fluxograma -Fluxograma

F

condição V comandos

while (condição)

F

condição V comando1

if (condição) 6.1.1 Laços Condicionais -

-

Comando while

Comando

while

(9)

17

Algoritmo Resto

Leia(a,b);

Enquanto (b > a) faça b ← b – a;

fim enquanto

Escreva(“resto= “, b);

6.1.1 Laços Condicionais -

-

Comando

Comando

whilewhile

Comando while para calcular o resto da divisão inteira

F

b - a V bb-a;

Início

b Início

18

Algoritmo Resto

Leia(a,b);

Enquanto (b > a) faça b ← b – a;

fim enquanto

Escreva(“resto= “, b);

6.1.1 Laços Condicionais - Comando

Comando

whilewhile

Comando while para calcular o resto da divisão inteira Programa Resto

#include <stdio.h>

#include <stdlib.h>

main() { int a, b;

printf(“Insira a e b:”);

scanf(“%d %d”,&a,&b);

while (b > a) b = b – a;

printf(“Resto = %d ”,b);

}

(10)

19

6.1.1 Laços Condicionais - Comando

Comando

whilewhile

Comando while para evitar repetição de comandos Problema Cansativo

Deseja-se mostrar a seguinte figura na tela:

*

*

*

*

*

Construir um programa que realize isto.

Programa Cansativo

#include <stdio.h>

main() {

printf(“*\n”);

printf(“*\n”);

printf(“*\n”);

printf(“*\n”);

printf(“*\n”);

}

20

6.1.1 Laços Condicionais -

-

Comando

Comando

whilewhile

Comando while para evitar repetição de comandos Programa Cansativo

#include <stdio.h>

main() {

int i = 1;

while (i <= 5) {

printf(“*\n”);

i = i + 1;

} } F

i <= 5

i←←i+1;

V

Início

“*\n”

Início

Fluxograma Cansativo

(11)

21

6.1.1 Laços Condicionais - Comando

Comando

whilewhile

Comando while para evitar repetição de comandos Programa Cansativo

#include <stdio.h>

main() {

int i = 1;

while (i <= 5) {

printf(“*\n”);

i = i + 1;

} }

P2 P3 P1

Execução Programa

Iteração P1 P2 P3

1 i<=5 (v) “*\n” i=2 2 i<=5 (v) “*\n” i=3 3 i<=5 (v) “*\n” i=4 4 i<=5 (v) “*\n” i=5 5 i<=5 (v) “*\n” i=6 6 i<=5 (f) - -

22

Algoritmoimprime_inteiros Variáveis: i inteiro.

Inicio algoritmo i←1.

Enquanto( i 20) faça inicio

escreva ( i ).

i ← i + 1.

fim

Fim algoritmo

Ex1- Fazer um algoritmo e um programa em C que escreva na tela os 20 primeiros números inteiros.

//prog imprime_inteiros

#include <stdio.h>

#include <stdlib.h>

main()

{ // inicio programa inti=1;

While (i <= 20)

{ //inicio do while printf(“%d \n”, i);

i=i+1;

} //fim do while system(“pause”);

}//fim programa

6.1.1 Laços Condicionais - ComandoComandowhile -while -ExerciciosExercicios

(12)

23

No exercício anterior, observe que:

1º. A variável i é quem controla o número de vezes que o laço é executado, então:

a) é necessário atribuir um valor inicial para a variável i antes do while, para que ele possa analisar a condição.

b) dentro do corpo do while, após ter impresso o valor do i, é necessário incrementá-lo de uma unidade (i=i+1), para que o while pare de ser executado após 20 voltas.

2º. É necessário colocar as chaves { }marcando o inicio e o fim do while porque dentro dele estão sendo executados dois

comandos.

3º. Se não fossem colocadas as chaves { }, iria ocorrer um laço infinito, que imprimiria somente o número 1, pois a variável de controle do laço nunca seria alterada e a condição do laço seria eternamente verdadeira.

6.1.1 Laços Condicionais: ComandoComandowhilewhile -- Exercícios

24

Ex2- Escreva um

algoritmo e um programa em C que dado um

Número qualquer, seja calculado e impresso a tabuada desse número.

Algoritmo tabuada

Variáveis: i,n, resp: inteiro.

Inicio algoritmo

escreva (“Qual tabuada deseja imprimir”)

Leia (n) i←1.

Enquanto( i 10) faça inicio

resp← n * i escreva ( resp ).

i ← i + 1.

fim

Fim algoritmo

6.1.1 Laços Condicionais: ComandoComandowhilewhile -- Exercícios

(13)

25

//exercicio 2 - prog tabuada

#include <stdio.h>

#include <stdlib.h>

main()

{ // inicio programa inti, n, resp;

i=1;

printf(“Qual tabuada vc deseja?”);

scanf(“%d”,&n);

While (i <= 10)

{ //inicio do while resp=n * i;

printf(“%2d*2d=%2d\n”,n,i,resp);

i=i+1;

} //fim do while system(“pause”);

}//fim programa

Em linguagem C o algoritmo anterior torna-se

6.1.1 Laços Condicionais: ComandoComandowhilewhile -- Exercícios

26

Ex3: Fazer um algoritmo e um programa em C que calcule e imprima os n primeiros termos da série: 1+1/2+1/3+1/4+...+1/n

6.1.1 Laços Condicionais: ComandoComandowhilewhile -- Exercícios

Algoritmoserie01

Variáveis: i,n: inteiro; soma, elem : real;

Inicio algoritmo

escreva (“Quantos nos. vc deseja imprimir”) Leia (n)

i←1.

s ←0.0 elem1 Escreva(“serie:”)

Enquanto( i n) faça inicio

elem(1/i) s ← s + elem escreva ( elem ).

i ← i + 1.

fim

Escreva(“Valor da soma:”,s) Fim algoritmo

Continuação . . .

(14)

27

6.1.1 Laços Condicionais: ComandoComandowhilewhile -- Exercícios

//Programa Exercicio3

#include <stdlib.h>

#include <stdio.h>

main() {

int i,n;

float s, elem;

//leitura de dados

printf ("Quantos nos. vc deseja imprimir\n");

scanf ("%d",&n);

i = 1;

s = 0.0;

elem = 1.0;

printf("serie:");

while ( i <= n) { //inicio

elem = (1.0/i);

s = s + elem;

printf("%5.4f

",elem );

i = i + 1;

} //fim

printf("\n\nValor da soma:%5.4f\n\n",s);

system("PAUSE");

}

28

6.1.1 Laços Condicionais - ComandoComandowhile: while: LaçLaços infinitosos infinitos

Laços infinitos – Cuidado ! Os laços infinitos ocorrem

quando a condição lógica do while não se torna

falsa por 2 motivos:

(i) Erro de atualização da variável associada a

condição lógica (ii) A condição lógica é

inadequada.

(15)

29

6.1.1 Laços Condicionais - ComandoComandowhile: while: LaçLaços infinitosos infinitos

Laços infinitos – Cuidado !

Programa Infinito

#include <stdio.h>

main() {

int i;

i = 1;

while (i <= 5) printf(“*\n”);

F }

i <= 5 V

Início

“\n”

Início

Fluxograma Infinito

30

6.1.1 Laços Condicionais - ComandoComandowhile: while: LaçLaços infinitosos infinitos

Laços infinitos – Cuidado ! Programa Infinito

#include <stdio.h>

main() {

int i;

i = 1;

while (i <= 5) printf(“*\n”);

}

P2 P1

Execução Infinito

Iteração P1 P2 P3

1 i<=5 (v) “*\n” i=1 2 i<=5 (v) “*\n” i=1 3 i<=5 (v) “*\n” i=1 4 i<=5 (v) “*\n” i=1 5 i<=5 (v) “*\n” i=1

6 ••• ••• •••

P3

(16)

31

6.1.1 Laços Condicionais - ComandoComandowhile: while: LaçLaços infinitosos infinitos

Laços infinitos – Os programas são equivalentes ! Programa Infinito

#include <stdio.h>

main() {

int i;

i = 1;

while (i <= 5) printf(“*\n”);

} Programa Infinito

#include <stdio.h>

main() {

int i;

i = 1;

while (i <= 5) printf(“*\n”);

i = i + 1;

}

32

Ex4: Em cada um dos segmentos de algorítmo, indicar se o laço termina ou não. Se não, porquê? Assumir que todas as variáveis são inteiras.

Este laço não termina, pois o valor de contadorse mantém sempre = 0.

a) contador Ø;

total Ø;

Enquanto (contador ≥0) faça total total + 2;

6.1.2 Enlaçamento: Laços Condicionais – Mais Exercícios

(17)

33

c) total ←0;

index15;

Enquanto (index ≤15) faça total ←total + 1;

indexindex – 1;

Não fecha, pois a variávelindexserá sempre < 15. O laço fecharia se fizéssemos

indexindex + 1;

6.1.2 Enlaçamento: Laços Condicionais – Mais Exercícios

b) contador 0;

total 0;

Enquanto (contador <= 10) faça total total + 1;

contador contador + 1;

Termina quando contador = 11

34

6.1.2 Enlaçamento: Laços Condicionais – Mais Exercícios

Ex5: Fazer um algoritmo/programa que imprima os números ímpares entre 1 e m.

Algoritmoimprime_int_ímpares Variáveis: i, m inteiro;

Inicio algoritmo Leia(m); i←1;

Enquanto( i m) faça inicio

Se (i % 2 =1) então escreva ( i );

fim se i ← i + 1;

fim

Fim algoritmo

// Programa Números Ímpares.

main()

{ intm, i=1;

printf(“Entre com m:”);

scanf(“%d”,&m);

while(i <= m) { //Início while

if (i % 2 == 1) //Ímpar?

printf(“%d \n”, i);

i=i+1;

} //fim do while system(“pause”);

}//fim programa

(18)

35

6.1.2 Enlaçamento: Laços Condicionais – Mais Exercícios

// Programa Números Ímpares.

main()

{ intm, i=1;

printf(“Entre com m:”);

scanf(“%d”,&m);

while(i <= m) { //Início while

if (i % 2 == 1) //Ímpar?

printf(“%d \n”, i);

i=i+1;

} //fim do while system(“pause”);

}//fim programa

Execução para m=2 e i=1

Iter. P1 P2 P3

1 i<=2 (v) (v) “1”

2 i<=2 (v) (f) - 3 i<=2 (f) - -

P2 P1

P3 P4

P4 i=2 i=3 - Programa em C

1

Resultado na Tela

36

6.1.2 Enlaçamento: Laços Condicionais – Mais Exercícios

Ex5: Fazer um algoritmo/programa que imprima de 1 até m apenas os números ímpares (outra versão !).

Algoritmoimprime_int_ímpares Variáveis: i, m inteiro;

Inicio algoritmo Leia(m); i←1;

Enquanto( i m) faça inicio

escreva ( i );

i ← i + 2;

fim

Fim algoritmo

// Programa Números Ímpares.

main()

{ intm, i=1;

printf(“Entre com m:”);

scanf(“%d”,&m);

while(i <= m) { //Início while

printf(“%d \n”, i);

i=i+2; // Incremento ! } //fim do while

system(“pause”);

}//fim programa

Só percorre ímpares!

(19)

37

6.1.2 Enlaçamento: Laços Condicionais – Mais Exercícios

// Programa Números Ímpares.

main()

{ intm, i=1;

printf(“Entre com m:”);

scanf(“%d”,&m);

while(i <= m)

{ //Início while printf(“%d \n”, i);

i=i+2; // Incremento !!!!

} //fim do while system(“pause”);

}//fim programa P2

P1

P3

Programa em C Execução para m=5 e i=1

Iter. P1 P2

1 i<=7 (v) “1”

2 i<=7 (v) “3”

3 i<=7 (v) “5”

P3 i=3 i=5 i=7

1 3 5

Resultado na Tela 4 i<=7 (f) - -

38

6.1.2 Enlaçamento: Laços Condicionais – Mais Exercícios

Ex6: Fazer um algoritmo/programa que imprima apenas os m primeiros números pares.

Algoritmoimprime_int_pares Variáveis: i,k,m inteiro.

Inicio algoritmo Leia(m); i←1; k=1;

Enquanto( k m) faça Se (i % 2 = 0) então

escreva ( i );

k← k + 1;

fim se i ← i + 1;

fim enquanto Fim algoritmo

// Programa Números Pares.

main()

{ intm, k, i; i = 1; k = 1;

printf(“Entre com m:”);

scanf(“%d”,&m);

while(k <= m) { //Início while

if (i % 2 == 0) //Par?

{printf(“%d \n”, i);

k = k + 1;

} i=i+1;

} //fim do while system(“pause");

}//fim programa

(20)

39

6.1.2 Enlaçamento: Laços Condicionais – Mais Exercícios

Execução: m=2, i=1 e k=0 Iter. P1 P2 P3

1 k<2 (v) (f) - 2 k<2 (v) (v) “2”

3 k<2 (v) (f) -

P2 P1

P3 P4

P4 - k=1

- Programa em C

2 4

Resultado na Tela

// Programa Números Pares.

main()

{ intm, k, i; i = 1; k = 1;

printf(“Entre com m:”);

scanf(“%d”,&m);

while(k < =m) { //Início while

if (i % 2 == 0) //Par?

{printf(“%d \n”, i);

k = k + 1;

} i=i+1;

} //fim do while }//fim programa

P5

P5 i=2 i=3 i=4 4 k<2 (v) (v) “4” k=2 i=5 5 k<2 (f) - - - -

40

6.1.2 Enlaçamento: Laços Condicionais – Mais Exercícios

Ex7: Dado um valor m, calcular a soma de 1 até m.

Idéia:

i 1 2 ••• m

soma

Observação: A variável i serve para percorrer as variáveis de 1 até m. Cada vez que um valor é apresentado, ele será armazenado na variável soma.

Portanto, pode-se dizer que i é uma variável contadora ao passo que soma é uma variável acumuladora.

+

+ +

Iteração i soma

0 0 0

1 1 1

2 2 3

3 3 6

••• ••• •••

(21)

41

6.1.2 Enlaçamento: Laços Condicionais – Mais Exercícios

Ex8: Dado um valor m, calcular a soma de 1 até m.

AlgoritmoCalculaSoma Variáveis: i inteiro;

Inicio algoritmo i←0;

soma←0;

Leia(m);

Enquanto( i m) faça soma ← soma + i;

i ← i + 1;

fim enquanto

Escreva (“Soma=“,soma);

Fim algoritmo

#include <stdio.h>

main()

{ // inicio programa intm, i=1, soma=0;

printf(“Valor de m:”);

scanf(“%d”,&m);

while(i <= m) { //inicio do while

soma = soma + i;

i=i+1;

} //fim do while

printf(“Soma=%d”,soma);

}//fim programa

Programa em C

42

6.1.2 Enlaçamento: Laços Condicionais – Mais Exercícios Ex9: Fazer um algoritmo que calcule e imprima a soma dos

quadrados dos 100 primeiros números inteiros.

Algoritmo Soma_quadrados Variáveis: soma, número, N :

inteiro;

Início

1. [Inicializar variáveis]

soma ←0.0;

número ←1;

Escreva (´”Quantos números você quer somar?”);

Leia (N);

2. [Somar os números]

Enquanto (número<=N) faça Início enquanto

soma soma + (número ↑ 2);

numero numero + 1;

Fim enquanto 3. [Imprimir resultado]

Escreva (´O valor da soma é:`, soma);

Fim algoritmo

(22)

43

// Programa Soma Números Inteiros

#include <stdlib.h>

#include <stdio.h>

#include <math.h>

main() {

intN, soma,contador;

//1. [Ler quantidade de inteiros a ser somado]

printf("Digite quantos inteiros vc deseja somar ");

scanf("%d", &N);

//2. [ Inicializar variáveis]

contador =1;

soma = 0;

while(contador <= N) { //Inicio while

soma = soma + pow(contador,2); // soma dos quadrados dos inteiros]

contador= contador + 1; //Reajustar contador

} //Fim while continua ...

Código em

C

6.1.2 Enlaçamento: Laços Condicionais – Mais Exercícios

44

//4. [ Imprimir resultados]

printf (" A soma dos quadrados dos %d primeiros numeros eh: %d\n",N, soma);

system("PAUSE");

}

. . . continuação

6.1.2 Enlaçamento: Laços Condicionais – Mais Exercícios

(23)

45

Exemplo 10: Dado um valor m, calcular produto de 1 até m.

Idéia:

i 1 2 ••• m

prod

Observação: A variável i serve para percorrer as variáveis de 1 até m. Cada vez que um valor é apresentado, ele será multiplicado pelo conteúdo de

prod. Portanto, pode-se dizer que i é variável contadora ao passo que prod é variável acumuladora.

• •

Iteração i prod

0 1 1

1 1 1

2 2 2

3 3 6

••• ••• •••

6.1.2 Enlaçamento: Laços Condicionais – Mais Exercícios

46

Exemplo 10: Dado um valor m, calcular produto de 1 até m.

AlgoritmoCalculaProd Variáveis: i, prod: inteiro;

Inicio algoritmo i←1;

prod←1;

Escreva (“digite o valor de m”);

Leia(m);

Enquanto( i < m) faça i ← i + 1;

prod ← prod * i;

fim enquanto

Escreva(“produto=“, prod);

Fim algoritmo

#include <stdio.h>

main()

{ // inicio programa inti=1, prod=1;

printf(“Valor de m:”);

scanf(“%d”,&m);

while(i < m) { //inicio do while

i=i+1;

prod = prod*i;

} //fim do while

printf(“Produto=%d”,prod);

system(“pause”);

}//fim programa

Programa em C 6.1.2 Enlaçamento: Laços Condicionais – Mais Exercícios

(24)

47

2. Laços Controlados por Entrada

Através de um laço apropriado, é possível ler

conjuntos de dados adicionais e repetir o algoritmo.

O processo de retorno para ler dados adicionais não é problema, pois já se conhece a estrutura do laço. A dificuldade está em saber quando parar.

Apresentaremos a seguir duas formas de se fazer isso:

6.2 Enlaçamento: Laços Controlados por Entrada

48

a) Entrada controlada por contador

Introduz-se um dado adicional no início do conjunto de dados. Este dado adicional fornece o número de conjuntos de valores que deve ser fornecido a

seguir, informando assim, o número de vezes que o laço é repetido. Uma variável contadoracontrola o número de vezes que o laço deve ser repetido

6.2.1 Enlaçamento: Entrada controlada por contador

(25)

49

Exemplo 11:Faça um algoritmo que, dadas as notas individuais em três aspectos do ano escolar num curso (Lab, Exame_inter, Exame_final) para um estudante com no. de matricula Nmatric, calcule a média final com pesos 20%, 30% e 50%,

respectivamente. O relatório de saída é uma linha impressa para cada estudante, fornecendo o número do aluno, suas notas

individuais e a média final. A entrada é controlada por contador.A variável n_estudantesindica o número de estudantes a ser

processado; a variável contadordá o número de registros já processados. Ambas são variáveis inteiras.

6.2.1 Enlaçamento: Entrada controlada por contador

50

Algoritmo Relatório

Variáveis Lab, Exame_inter, Exame_final : real Média : real

Nmatric, n_estudantes, contador : inteiro Início

1. [Entrar contador de dados, neste caso, número de estudantes]

Leia (n_estudantes)

2. [Inicializar contador de registros processados]

contador O continua...

6.2.1 Enlaçamento: Entrada controlada por contador

(26)

51

3. [Iniciar repetição controlada por contador] ...continuação pg. anterior Enquanto(contador < n_estudante) faça

inicio enquanto

3.1 [Ler os registros dos alunos]

Leia (Nmatric, Lab, Exame_inter,Exame_final) 3.2 [Calcular média]

Media 0.2*Lab + 0.3*Exame_inter + 0.5*Exame_final 3.3 [Imprimir resultados]

Escreva (“Numero do estudante:”, Nmatric) Escreva (“Nota Laboratório”,Lab)

Escreva (“Exame Intermediario:”,Exame_inter) Escreva (“Exame Final:”, Exame_final)

Escreva (“Media Final:”, Media) continua....

6.2.1 Enlaçamento: Entrada controlada por contador

52

Se Média ≥ 5.0

Então Escreva (´Aluno Aprovado`) Senão Escreva (´Aluno Reprovado`)

3.4. [atualizar o contador de registros realmente processados]

contador contador + 1 Fim enquanto

4. [Terminar]

Saída Fim Algoritmo

...continuação pg. anterior 6.2.1 Enlaçamento: Entrada controlada por contador

(27)

53

//Prog01_Lacos - Exemplo 11 //usando laços com contador

#include <stdlib.h>

#include <stdio.h>

main() {

floatLab, Exame_inter,Exame_final;

floatMedia;

intn_estudante,contador,Nmatric;

//1.Entrar contador de dados, neste caso, número de estudantes]

printf("digite o numero de alunos ");

scanf("%d",&n_estudante);

printf("\n\n"); continua na próxima pag.

Código em C

6.2.1 Enlaçamento: Entrada controlada por contador

54

//2.Inicializar contador ...continuação contador = 0;

//3.Iniciar Laço controlado por contador while(contador < n_estudante)

{ // inicio enquanto

// 3.1 Ler dados dos alunos

printf("digite o numero do aluno: ");

scanf("%d/n",&Nmatric);

printf("digite as notas de Lab, Exame_inicial e ExameF do

%d\n",Nmatric);

scanf("%f%f%f",&Lab,&Exame_inter,&Exame_final);

//3.2 [Calcular média]

Media = 0.2*Lab+0.3*Exame_inter+0.5*Exame_final;

6.2.1 Enlaçamento: Entrada controlada por contador

(28)

55

//3.3 Imprimir resultados . . . continuação printf("\tNumero do estudante:%d\n",Nmatric);

printf("\tNota Laboratorio:%5.2f\n",Lab);

printf("\tExame Intermediario:%5.2f\n",Exame_inter);

printf("\tExame Final:%5.2f\n",Exame_final);

printf("\tMedia Final:%5.2f ",Media);

if (Media <= 5.0)

printf(“\tAluno Aprovado\n”);

else printf(“\tAluno Reprovado\n”);

//3.4. Atualizar o contador de registros realmente processados contador= contador +1;

} // Fim enquanto system("pause");

}

6.2.1 Enlaçamento: Entrada controlada por contador

56

b) Entrada controlada por sentinela

Este método é muito utilizado quando não se sabe a priori quantas vezes o laço vai ser executado.

Utiliza-se então, um dado extra no fim do conjunto de dados, de modo que, quando este dado é lido, sabe-se que todos os outros já foram lidos.

Exemplo 12:Refazer o exemplo anterior, considerando que no final dos dados a respeito dos alunos foi inserido um dado extra com o numero do aluno igual 0. Quando for lido o número 0 para um aluno, o programa deve parar de calcular as médias.

6.2.2 Enlaçamento: Entrada controlada por sentinela

(29)

57

Algoritmo Relatório2

Variáveis Lab, Exame_inter, Exame_final, Media : real Nmatric, n_estudantes : inteiro

1. [Ler os dados do primeiro aluno]

Leia (Nmatric, Lab, Exame_inter,Exame_final) 2. [Iniciar repetição controlada por sentinela]

Enquanto(Nmatric≠ 0)faça Inicio

2.1 [Calcular a média]

Média 0.2*Lab +0.3*Exame_inter + 0.5*Exame_final

Observe aqui, que o primeiro dado deve ser lido antes do laço, para que o teste condicional possa ser executado.

6.2.2 Enlaçamento: Entrada controlada por sentinela

58

2.2 [Imprimir resultados]

Escreva (´Numero estudante:`, Nmatric) Escreva (´Nota Laboratório:`, Lab)

Escreva (´Exame Intermediário:`, Exame_inter) Escreva (´Exame Final:`, Exame_final)

Escreva (´Média Final:`, Média) Se Média ≥ 5.0

Então Escreva (´Aluno Aprovado`) Senão Escreva (´Aluno Reprovado`) 2.3 [Ler dados do próximo aluno]

Leia (Nmatric, Lab, Exame_inter, Exame_final) Fim enquanto

3. [Terminar]

Fim algoritmo

Observe aqui, que o próximo dado deve ser lido antes de terminar o laço, para que o teste condicional possa ser executado com o novo dado.

6.2.2 Enlaçamento: Entrada controlada por sentinela

(30)

59

//Usando Laços com sentinela

#include <stdlib.h>

#include <stdio.h>

main() {

floatLab, Exame_inter,Exame_final;

floatMedia;

intn_estudante,Nmatric;

// 1.Entrar com dados do primeiro aluno printf("digite o numero do 1o. aluno: ");

scanf("%d",&Nmatric);

Código em C

6.2.2 Enlaçamento: Entrada controlada por sentinela

60

// 3 - Iniciar repetição controlada por sentinela while(Nmatric != 0)

{ // inicio enquanto

// 3.1 - Inserir notas do aluno

printf(“Digite as notas de Lab, Exame_inicial e ExameF do

%d\n",Nmatric);

scanf("%f%f%f",&Lab,&Exame_inter,&Exame_final);

// 3.2 - Calcular média

Media = 0.2*Lab + 0.3*Exame_inter + 0.5*Exame_final;

// 3.3 - Imprimir resultados

printf("\tNumero do estudante: %d\n",Nmatric);

printf( "\tNota Laboratorio:%5.2f\n",Lab);

6.2.2 Enlaçamento: Entrada controlada por sentinela

(31)

61

printf("\tExame Intermediario:%5.2f\n",Exame_inter);

printf("\tExame Final:%5.2f\n",Exame_final);

printf("\tMedia Final:%5.2f\n”,Media);

if (Media <= 5.0)

printf(“\tAluno Aprovado\n”);

else printf(“\tAluno Reprovado\n”);

// 3.4 [Ler numero de matricula do proximo aluno

printf("digite o numero do aluno, ou zero (0) para parar ");

scanf("%d",&Nmatric);

} // Fim enquanto

printf("Fim do Programa.\n\n");

system("pause");

}

6.2.2 Enlaçamento: Entrada controlada por sentinela

62

Fazer um algoritmo e um programa em C para calcular h(n)=1+1/2+1/3+...+1/n, onde n é um valor a ser lido.

Algoritmo serie_h;

variaveisn: integer;

h: real;

inicio

escreva(‘Entre com o valor de n’) leia(n);

h:=0;

Enquanto(n > 0)faça h := h + 1/n;

n := n-1;

fim enquanto

escreva(‘o valor de h eh:‘,h);

fim algoritmo

6.2.3 Enlaçamento:

6.2.3 Enlaçamento: Laços Controlados por Entrada :Mais ExercíciosMais Exercícios

(32)

63

//Programa serie versão1

#include <stdlib.h>

#include <stdio.h>

main() {

intn;

floath;

printf ("Entre com o valor de n\n");

scanf("%d",&n);

printf("Para n = %d,",n);

h = 0;

while(n > 0) {

h = h + 1/float(n);

n = n-1;

}

printf(" o valor de h eh:%f\n",h);

system("PAUSE");

}

Ao executar o programa teremos:

6.2.3 Enlaçamento:

6.2.3 Enlaçamento: Laços Controlados por Entrada :Mais ExercíciosMais Exercícios

64

//Programa serie versão 2

#include <stdlib.h>

#include <stdio.h>

main() {

int i,n;

float s, elem;

//leitura de dados

printf("Quantos nos. vc deseja imprimir\n");

scanf("%d",&n);

i = 1;

s = 0.0;

elem = 1.0;

printf("serie:");

while ( i <= n) { //inicio

elem = (1.0/i);

s = s + elem;

printf("%5.4f

",elem );

i = i + 1;

} //fim

printf("\n\nValor da soma:%5.4f\n\n",s);

system("PAUSE");

}

6.2.3 Enlaçamento:

6.2.3 Enlaçamento: Laços Controlados por Entrada :Mais ExercíciosMais Exercícios

(33)

65

Linguagem Algorítmica Faça

comandos enquanto<condição>

6.2.4 Enla

6.2.4 Enlaççamento: Laamento: Laçços Condicionaisos Condicionais - Teste no FinalTeste no Final

Existe um outro tipo de laço condicional onde a condição é avaliada no final do corpo do laço.

Funcionamento deste laço

1. Os comandos, são executados.

2. A condição é avaliada

3. Se o resultado for verdadeiro, volta-se ao ponto 1.

4. Se o resultado for falso,

termina-se o laço e o programa continua na instrução seguinte ao laço.

66

Sintaxe em linguagem C do

{

comandos;

}

while (condição)

F condição V

comandos

Fluxograma

Obs: O corpo do laço do_whileé executado pelo menos uma vez, enquanto que o laço com teste no inicio, pode nunca ser executado.

6.2.4 Enla

6.2.4 Enlaççamento: Laamento: Laçços Condicionaisos Condicionais - Teste no FinalTeste no Final

(34)

67

Exemplo 22:Fazer um programa em C para calcular h(n)=1+1/2+1/3+...+1/n, usando o comando do_while

#include <stdlib.h>

#include <stdio.h>

main() {

intn;

floath;

printf ("Entre com o valor de n\n");

scanf("%d",&n);

printf("Para n = %d,",n);

h = 0;

do {

h = h + 1/float(n);

n = n-1;

}

while(n > 0);

printf(" o valor de h eh:%f\n\n",h);

system("PAUSE");

} 6.2.4 Enla

6.2.4 Enlaççamento: Laamento: Laçços Condicionaisos Condicionais - Teste no FinalTeste no Final

68

Para algumas aplicações, o controle condicional de laços, imposto pela construção “enquanto - faça”é desnecessariamente

complicada, pois pode-se desejar um laço um número fixo de vezes, e este número é conhecido.

Para este tipo de aplicação existe uma construção repetitiva que tem a seguinte forma:

Exemplo23: Para ID ←1, 2, .., 10 faça valor ←valor + 2

Neste exemplo a variável de controle do laço é ID.

A variável IDcomeça valendo 1.

No corpo do laço a variável valor é incrementada de 2.

Em seguida, IDé automaticamente incrementada de 1, e a instrução do corpo do laço é executada novamente.

Isto se repete 10 vezes, isto é até o valor de ID=10 6.3 Enla

6.3 Enlaççamento: amento: Laços Contados Parei aqui a correção

(35)

69

Exemplo 24: Para val1, 2, .., N faça

Exemplo 25: Para Index10, 9,..,1 faça

Neste exemplo a variável de controle do laço é val.

A variável valcomeça valendo 1 e é automaticamente

incrementada de 1 a cada vez, até o valor de N. Então este laço se repete Nvezes

Neste exemplo a variável de controle do laço é Index.

A variável Indexcomeça valendo 10 e é decrementada de 1 a cada volta do laço, até que o valor de Indexseja 1. Este laço se repete 10 vezes.

6.3 Enla

6.3 Enlaççamento: amento: Laços Contados

70

Em cada um dos seguintes segmentos, dê o valor que será impresso para a variável Var. assumir que todas as variáveis são inteiras.

Var = 10

a) Var 0

Para Index = 1, 2, .., 10 Var Var + 1;

Escreva ( Var )

b) Var 0

Para Index = 4, 8, .., 36 Var Var + 1;

Escreva ( Var )

Var = 9

6.3.1 Enla

6.3.1 Enlaççamento: amento: Laços Contados: Exercícios

(36)

71

c) Var 0

Para Index = 10, 9,.., 1 Var Var + 1 IndexIndex + 1 Escreva ( Var )

Var = infinito, pois o laço não fecha porque o valor da variável Index está sendo alterado dentro do laço

d) Var 0

Para Index = 1, 2,..,15 Para Index2 = 1, 2,.., 8

Var Var + 1 Escreva ( Var )

Var = 120

6.3.1 Enla

6.3.1 Enlaççamento: amento: Laços Contados: Exercícios

72

Algoritmo Potência Variáveis Potência : inteira Início

1. [Calcular e imprimir]

ParaPotência 1, 2, .., 20 faça Escreva ( 2 ↑Potência );

2. [Terminar]

Fim

Exemplo 26: Fazer um algorítmo que calcule e imprima as primeiras 20 potências de 2.

Atenção este algorítmo pode ser generalizado

Início

1. [Ler número de dados]

Leia ( N )

2. [Calcular e imprimir os N valores]

ParaPotência 1, 2, .., N faça Escreva ( 2 ↑ Potência);

3. [Terminar]

Fim 6.3.1 Enla

6.3.1 Enlaççamento: amento: Laços Contados: Exercícios

(37)

Não Válido 73

Laços Encaixados

Assim como temos uma construção “Se_Então_Senão”

dentro da outra, podemos ter um laço dentro do outro.

Exemplos de laços embutidos válidos e não válidos.

Válidos Válidos

6.4 Enla

6.4 Enlaççamento amento –LaçLaços Encaixadosos Encaixados

74

Escreva um algoritmo e um programa em C que para um dado número mqualquer, seja calculado e impresso todas as tabuadas até esse número.

Problema Tabuada j=1

i=1 i=2 i=3 ... i=10 1*1 1*2 1*3 ... 1*10 j=2

i=1 i=2 i=3 ... i=10 2*1 2*2 2*3 ... 2*10

j=m

i=1 i=2 i=3 ... i=10 m*1 m*2 m*3 ... m*10

•••

j = 1, 2, ..., m i = 1, 2, ..., 10

resp = i*j 6.4 Enla

6.4 Enlaççamento amento –LaçLaços Encaixados os Encaixados --ExercExercíciosícios

(38)

75

Escreva um algoritmo e um programa em C que dado um número m qualquer, seja calculado e impresso todas as

tabuadas até esse número.

Problema Tabuada Algoritmotabuada2

Variáveis: i,n, resp: inteiro.

Inicio algoritmo Leia (n);

j←1;

Enquanto(j <= n) início

i←1;

Enquanto( i <= 10) faça início

resp← j * i;

escreva ( resp );

i ← i + 1;

fim j ← j + 1;

fim

Fim algoritmo Para cada valor de j executa 10

vezes o laço com a variável i.

j=1

i=1 i=2 i=3 ... i=10 1*1 1*2 1*3 ... 1*10

••• j=m

6.4 Enla

6.4 Enlaççamento amento –LaLaçços Encaixados os Encaixados –ExercíExercícios cios –Comando whileComando while

76

//prog tabuada2

#include <stdio.h>

#include <stdlib.h>

main()

{ // inicio programa inti, n,j, resp;

i=1;

printf("Ate qual tabuada vc deseja?");

scanf("%d",&n);

j=1;

while (j <= n) { // início 1o. while

printf("\t\ntabuada do numero %d\n", j);

i=1;

while( i <= 10)

{ // início 2o. while resp = j * i;

Programa em Linguagem C

6.4 Enla

6.4 Enlaççamento amento –LaçLaços Encaixados os Encaixados --ExercExercíciosícios

(39)

77

printf("\t%2d*%2d=%2d\n", j,i,resp);

i = i + 1;

} // fim 2o. while j = j + 1;

} //fim 1o. while system("pause");

} // fim programa

Continuação prog tabuada2 …

6.4 Enla

6.4 Enlaççamento amento –LaçLaços Encaixados os Encaixados --ExercExercíciosícios

78

Linguagem Algorítmica Enquanto <i; cond; i++>

Faça

comandos;

Existe um outro tipo de laço condicional onde a

inicialização do valor da variável contadora, a avaliação da condição e a atualização do valor da variável

contadora estão em um mesmo campo.

Funcionamento deste laço

1. Variável contadora é inicializada.

2. A condição é avaliada:

3. Se o resultado for verdadeiro, realiza-se os comandos.

4. Se o resultado for falso, termina-se o laço e continua-se na instrução seguinte ao laço.

5. Atualiza-se variável contadora e retorna-se para o passo 2.

6.3.1 Enla

6.3.1 Enlaççamento: amento: Laços Contados: Comando FOR

Referências

Documentos relacionados

ATIVIDADES DE ORIENTAÇÃO Fase PROJETOS DE ENSINO C/H Início Término ATIVIDADES DE PESQUISA C/H Início Término ATIVIDADES DE EXTENSÃO C/H Início Término ATIVIDADES DE

Inscrições na Biblioteca Municipal de Ourém ou através do n.º de tel. Organização: Município de Ourém, OurémViva e grupos de teatro de associações e escolas do

Assim, os resultados iluminam os contributos da investigação, enquanto ferramenta de formação de professores, para a promoção do seu desenvolvimento pessoal e

públicos para agente local de saúde, uma atribuição, prevista no PACs, exclusiva deste profissional, que é um pré-requisito para a função, está indicada na

Ali diz que, ao voltar, Jesus permanecerá nos ares enquanto somos levados ao Seu encontro: “Porquanto o Senhor mesmo, dada a Sua palavra de ordem, ouvida a voz do arcanjo, e ressoada

Pm marcio necho da polícia civil do seu juízo da audiência com efeito é policial que o precisa para ser mais importante na escola superior, para alcançaresses

suplementares: EUH401 – Para evitar riscos para a saúde humana e para o ambiente, respeitar as instruções de utilização; SP 1 – Não contaminar a água com este produto ou com

Em seguida, a mesma deverá classificar (organizar os problemas em grupos por familiaridade de origem, de público envolvido...), quantificar (dar valor para cada um dos problemas