Sunteți pe pagina 1din 33

11 Laos

Unesp Campus de Guaratinguet

Curso de Programao Computadores


Prof. Anbal Tavares
Profa. Cassilda Ribeiro
Ministrado por: Prof. Andr Amarante
10.3 Enlaamento Laos Encaixados
Programa Tabuada2 - while
main() // incluir <stdio.h> e stdlib.h ! Programa Tabuada2 - for
{ int i, j, n, resp; i = 1; j = 1;
main() // incluir <stdio.h> e stdlib.h !
printf("Ateh qual tabuada deseja?")
{ int i, j, n, resp;
scanf("%d",&n);
printf("Ate qual tabuada deseja?")
while (j <= n)
scanf("%d",&n);
{ // incio do 1o. while
for (j=1;j <= n;j++)
printf("\t\ntabuada do %d\n", j);
{ // incio do 1o. for
i = 1; printf("\t\ntabuada do %d\n", j);
while ( i <= 10) for (i=1; i <= 10; i++)
{ // incio 2o. while { // incio 2o. for
resp = j * i; resp = j * i;
printf("%d*%d=%d\n",j,i,resp); printf("%d*%d=%d\n",j,i,resp);
i = i + 1; } // fim 2o. for
} // fim 2o. while } //fim 1o. for
j = j + 1; } // fim programa
} //fim 1o. while Laos 2
} // fim programa
10.3 Enlaamento Laos Encaixados

Ex 7: Escreva um programa que solicite ao usurio


um nmero n e um caractere c. Em seguida, sero preenchidas
n linhas, cada uma com n caracteres c tal como no exemplo:

Numero: 3
Caractere: *
***
***
***

Laos 3
10.3 Enlaamento Laos Encaixados
IDIA: Este programa deve imprimir na mesma linha, n vezes o
caractere lido. A seguir ele deve pular uma linha e imprimir
novamente n vez o caractere lido. Isto deve ser feito n vezes.

Resultado na Tela for (j=1; j <= n; j++)


{
**** ... * printf("%c", c);
n vezes }
Muda Linha printf(\n);

Ao se executar uma vez o comando for com a varivel j variando de 1


at n, ser impresso na tela uma linha com, por exemplo, n caracteres
*. Para imprimir n linhas contendo n caracteres * necessrio
repetir n vezes o esse comando for, isto
Laos : 4
10.3 Enlaamento Laos Encaixados

for (j=1; j <= n; j++) Resultado na Tela


{
printf("%c", c); **** *

n vezes
}
**** *
n vezes

printf(\n);

for (j=1; j <= n; j++)
{
printf("%c", c);

}
printf(\n); **** *
Ao invs de se escrever n vezes o comando for, com a varivel j,
pode-se colocar um lao externo com uma varivel i de modo que
Laos 5
para cada valor de i o lao interno, do j, se repita n vezes.
10.3 Enlaamento Laos Encaixados

for (j=1; j <= n; j++)


Cdigo em C
{
printf("%c", c); for (i=1; i <= n; i++)
} {
n vezes

printf(\n); for (j=1; j <= n; j++)


{
for (j=1; j <= n; j++) printf("%c", c);
{ }
printf("%c", c); printf(\n);
} }
printf(\n); Laos 6
10.3 Enlaamento Laos Encaixados

Ex-8: Escreva um programa que solicite ao usurio


um nmero n e produza o resultado na Tela tal como
dado abaixo:

Numero: 5
1
12
123
1234
12345
Laos 7
10.3 Enlaamento Laos Encaixados

IDIA: Para se fazer esse programa pense primeiro em escrever


uma matriz, como mostrado na figura abaixo. Para tanto sero
necessrios dois laos. O lao externo, com varivel i, para fixar a
linha que ser impressa e o lao interno, com varivel j, ser
responsvel por imprimir os nmeros em esto em cada linha, ou
seja, as colunas da matriz.

Coluna j
Linha i j=1 j=2 j=3 j=4 j=5
i=1 1 2 3 4 5
i=2 1 2 3 4 5
i=3 1 2 3 4 5
i=4 1 2 3 4 5
Laos 8
i=5 1 2 3 4 5
10.3 Enlaamento Laos Encaixados
Para se imprimir a matriz do slide anterior bastaria fazermos:
for (i=1; i <= n; i++) j=1 j=2 j=3 j=4 j=5
{
for (j=1; j <= n; j++) i=1 1
{ i=2 1 2
printf("%d", j); i=3 1 2 3
} i=4 1 2 3 4
printf(\n); i=5 1 2 3 4 5
}

Mas, a matriz que queremos imprimir a da figura ao lado.


Observe nessa matriz que na linha 1 s temos um nmero, na
linha 2 temos dois nmeros, na linha 3 temos trs nmeros e
assim por diante. Ento, temos que fazer o for do j,
responsvel por imprimir os elementos
Laos
das colunas, variar at9
um valor igual ao nmero da linha i.
10.3 Enlaamento Laos Encaixados

Ento, os laos ficam como abaixo:

for (i=1; i <= n; i++)


{ Observe no for exterior, que
quando i = 1, o for do j vai
for (j=1; j <= i; j++)
variar de 1 1. Quando i = 2, o
{ for do j vai variar de 1 2,
printf("%d", j); quando i = 3, o for do j vai
} variar de 1 3, e assim por
printf(\n); diante.
}

A seguir mostramos o programa completo que gera


essa matriz. Observe que a nica varivel lida o
nmero de linhas que se deseja gerar.
Laos 10
10.3 Enlaamento Laos Encaixados

#include <stdio.h>
#include <stdlib.h>
main() Resultado na Tela
{ int i,j,n;
printf(Digite o no. de linhas n\n); 1
scanf(%d,&n);
for (i=1; i <= n; i++)
1 2

n vezes
{
for (j=1; j <= i ; j++)

{
printf("%d", j);
}
printf(\n);
} 1 2 3 ... n
system (pause);
} Laos 11
10.4 Enlaamento: Comando BREAK
O comando break quando aplicado dentro de um lao interrompe
a execuo do mesmo, para qualquer um dos comandos que
representam o lao: while, do-while e for. Os programas abaixo
so equivalentes.
#include <stdio.h>
#include <stdlib.h> #include <stdio.h>
main() #include <stdlib.h>
{ int i; main()
for (i=1; ;i=i+1) { int i;
{
printf( %d \n,i); for (i=1; i<=5 ;i=i+1)
if (i == 5) {
break; printf( %d \n,i);
} }
system (pause); system (pause);
Laos 12
} }
10.4 Enlaamento: Comando BREAK

O Ex-8 tambm pode ser feito utilizando o comando


break, de modo que os cdigos abaixo so equivalentes.
for (i=1; i <= n; i++)
{ for (i=1; i <= n; i++)
for (j=1; j <= n; j++) {
{ for (j=1; j <= i ; j++)
printf("%d", j); {
if (i == j) printf("%d", j);
break; }
} printf(\n);
printf(\n); }
} Laos 13
10.5 Enlaamento: Comando CONTINUE

O comando continue quando aplicado dentro de um


for interrompe a execuo das instrues do lao que
vem logo aps ele e segue diretamente para o campo
destinado a atualizao de variveis.
#include <stdio.h>
#include <stdio.h>
main()
main()
{ int i;
{ int i;
for (i=1; i <=5 ;i=i+1)
for (i=1; i <=5 ;i=i+1)
{
{
if (i % 2 == 1)
if (i % 2 == 0)
continue;
printf( %d \n,i);
printf( %d \n,i);
}
}
}
Laos 14
}
10.6 Enlaamento Mais Exerccios

Ex 10: Dado que um programador cometeu um erro em seu


primeiro programa, dois erros em seu segundo programa e quatro
erros em seu terceiro programa e assim sucessivamente. Fazer um
programa em C que leia o nmero de programas que o
programador fez e calcule o nmero de erros que ele cometeu em
seu ltimo programa.
Para fazer este programa preciso comear definindo o que vai ser lido, e o que
vai ser calculado, pois desta maneira podemos definir quais as variveis sero
necessrias para o programa.
Valores a serem lidos: nmero de programas: int Num_progr
Valores a serem calculados: quantidade de erros: int Erros
Como calcular o Erros? 1o. Programa ---1 Erro
2o. Programa ---2*1=2 Erros
3o. Programa ---2*2 = 4 Erros
4o. Programa ---2*4=8 Erros

Laos (N-1) 15
N simo programa ---2 =Erros.
10.6 Enlaamento Mais Exerccios
//Programa exerccio 10
#include <stdlib.h>
#include <stdio.h>
main()
{ int Erro, Cont, Prog ;
// Ler o nmero de programas a ser executado
printf("Digite o numero de programas feitos\n");
scanf("%d",&Prog);
// [Inicializar variveis]
Erro =1;
Cont = 1;
//[Iniciar lao]
while (Cont<Prog)
{//4. [Calcular o nmero de erros]
Erro = Erro * 2;
// [Atualizar contador]
Cont= Cont + 1;
}// fim do lao
printf("Numero de erros cometidos no programa %d=%d\n",Prog,Erro);
system("pause");
}// Fim programa
Laos 16
10.7 Enlaamento Aplicaes
Aplicao 1: Por volta do ano 1202, Fibonacci prope na sua
obra Liber abaci o seguinte problema:

Num ptio fechado coloca-se um casal de coelhos. Supondo


que em cada ms, a partir do segundo ms de vida, cada casal
d origem a um novo casal de coelhos, ao fim de um ano,
quantos casais de coelhos esto no ptio?

Para resolver este problema preciso prestar ateno ao


processo de procriao do casal inicial de coelhos. Suponhamos,
para ter uma idia, que o primeiro casal de coelhos nasceu no dia 1
de Janeiro.
No dia 1 de Fevereiro, isto , ao cabo de um ms, ainda no
sero frteis. Porm, no dia 1 de Maro j tero descendentes, e
neste ms teremos um total de dois casais de coelhos.
Laos 17
10.7 Enlaamento Aplicaes

No dia 1 de Abril, esse segundo casal de coelhos no ser ainda


frtil, mas o casal inicial de coelhos voltar a ter coelhinhos, e no
quarto ms teremos um total de trs casais de coelhos, dois dos
quais sero frteis no dia 1 de Maio. Por conseguinte, para o quinto
ms existiro cinco casais.

Se raciocinarmos de modo semelhante, temos que no dia 1 de


Junho ter-se-o 8 casais de coelhos, em 1 de Julho 13 casais, em
1 de Agosto 21 casais e assim sucessivamente.

Ao cabo de um ano, isto , no dia 1 de Janeiro do ano seguinte,


prev-se que 144 casais de coelhos dem voltas pelo ptio.

Laos 18
10.7 Enlaamento Aplicaes

Laos 19
10.7 Enlaamento Aplicaes

O nmero de casais de coelhos no ms n o termo Fn da


sucesso de Fibonacci

Fn= Fn-1+Fn-2 , n > 2.

E se tudo correr bem, no ano seguinte, isto , dois anos depois,


espera-se que sero 46.368 casais de coelhos, os que temos de
alimentar!

Laos 20
10.7 Enlaamento Aplicaes
Aplicao 1: Calcular a seqncia de Fibonacci: 1 1 2 3 5
8 13 ... dado o nmero de termos n. Para tanto, pode-se
utilizar a seguinte frmula:
F(n)=F(n-1)+F(n-2)

onde: n=0,1,2, 3,...


e F(0) = F(1) = 1
Espiral de Fibonacci

Laos 21
10.7 Enlaamento Aplicaes

Aplicao 2: Dado um valor n escrever o tringulo de


pascal correspondente at a n-sima linha.

Definio 1: Um tringulo de pascal composto pelos


n
coeficientes cn,k=( k )= n!/k!(n-k)! ; onde n o nmero
da linha e k o nmero da coluna (k<=n). Por exemplo,
o elemento da linha 3, coluna 2 dado por:
3
( 2 ) = 3!/(1!*2!) = 3

Laos 22
10.7 Enlaamento Aplicaes

Os valores do tringulo de Pascal na verdade representam


os coeficientes do binmio de Newton.

0 1 2 3 4 5 6
0
0 (0) (x+a)0 = 1

1 ( 10 ) ( 11 ) (x+a)1 = 1x + 1a

2 ( 20 ) ( 21 ) ( 22 ) (x+a)2 = 1x2 + 2xa + 1a2

3 ( 30 ) ( 31 ) 3 3
(2) (3) (x+a)3 = 1x3 + 3x2a + 3xa2 + 1a3

4 ( 40 ) ( 41 ) ( 42 ) ( 43 ) ( 44 ) (x+a)4 = 1x4 + 4x3a + 6x2a2 + 4xa3 + 1a4

5 ( 50 ) ( 51 ) ( 52 ) ( 53 ) ( 54 ) ( 55 ) (x+a)5 = 1x5 + 5x4a + 10x3a2 + 10x2a3 + 5xa4 + 1a5

6
6 6
(0) (1) ( 62 ) ( 63 ) ( 64 ) ( 65 ) ( 66 ) (x+a)6 =Laos
1 6 15 20 15 6 123
10.7 Enlaamento Aplicaes
Os valores do tringulo de Pascal na verdade representam
os coeficientes do binmio de Newton.

0 1 2 3 4 5 6 0 1 2 3 4 5 6
0
0 0)
( 0 1
1 1
1 0) (1)
( 1 1 1
2 2 2
2 (0) (1) (2) 2 1 2 1
3 ( 30 ) ( 31 ) ( 32 ) ( 33 ) 3 1 3 3 1
4
4 4
(0) (1) ( 42 ) ( 43 ) ( 44 ) 4 1 4 6 4 1
5 5 5 5
5 ( 50 ) ( 51 ) (2) (3) (4) (5) 5 1 5 10 10 5 1
6 ( 60 ) ( 61 ) ( 62 ) ( 63 ) ( 64 ) ( 65 ) ( 66 ) 6 1 6 15 20 15 6 1
Laos 24
10.7 Enlaamento Aplicaes

Pode-se obter a Seqncia de Fibonacci a partir


do Tringulo de Pascal

1 1
1 2 3
1 1 5 8 Para isto, basta somar
os elementos da Diagonal
1 2 1 13
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1 Laos 25
10.7 Enlaamento Aplicaes

Aplicao 3: Escreva um programa que solicite ao usurio


o nmero de alunos uma sala. Depois, de acordo com o
valor da nota de cada aluno, dever ser atribudo um
Conceito de acordo com a seguinte tabela:

Faixa de Valores Conceito Por fim, dever


9 Nota 10 A ser fornecido
7 Nota 9 B o percentual
5 Nota 7 C de notas da
3 Nota 5 D turma para
0 Nota 3 E cada conceito.
Laos 26
10.7 Enlaamento Aplicaes

Aplicao 4: Mostrar os resultados da Aplicao 3


utilizando um histograma, tal como dado por:

Sada Programa C
Nmero

A: ****
C B: ********
B C: ************
A D D: ****
E
Conceito E: **

Laos 27
10.7 Enlaamento Aplicaes

Aplicao 5: A Regra dos Trapzios consiste em aproximar a


rea debaixo de curva formada por uma funo f(x) por um trapzio,
como descrito na Figura dada a seguir:

f(b) f(x)
p1(x)
f(a) Matematicamente:
b
h
f ( x)dx ( f ( x0 ) f ( x1 ))
a
2
a=x0 b=x1 onde: h = x1 x0

Escreva um programa que fornea o valor aproximado de Integrais


utilizando a Regra dos Trapzios. Verifique seus resultados para:
2 2 4
2 3
Item(a) dx
1
x Item(b) x dx
Laos Item(c) x dx 28
1 1
10.7 Enlaamento Aplicaes
Definio: Seja y = f(x) uma funo no-negativa definida num
intervalo fechado a x b. A rea debaixo de f(x) obtida com:
Matematicamente: Geometricamente:
f(b) f(x)
n
A lim
max xk 0
f (x
k 1
k )xk f(a)

onde: xk = (b - a)/n a=x0 b=xn


n = 16

Ou seja:
f (xk )
b n

f ( x)dx lim
max xk 0
f (x
k 1
k )xk
a Laos 29
xk
10.7 Enlaamento Aplicaes
Aplicao 6: A partir da Regra dos Trapzios descrita anteriormen-
mente possvel obter a Regra dos Trapzios Repetida cuja frmula
dada por:
b
h
f ( x)dx f ( x0 ) 2 f ( x1 ) ... f ( x m 1 ) f ( xm )
a
2
f(x)
f(b)
ATR = A1 + A2 + A3
f(a) ATR = h/2*(f(x0)+f(x1)) +
A1 A2 A3 h/2*(f(x1)+f(x2)) +
h/2*(f(x2)+f(x3))
a=x0 x1=h+x0 x2=2h+x0 b=x3
= h/2*(f(x0)+2(f(x1)+f(x2))+f(x3))
h = (b - a)/3 = xi xi-1 Laos 30
10.7 Enlaamento Aplicaes

Aplicao 7: Uma srie conhecida para o clculo de pi foi desenvol-


vida por Leibniz em 1682, utilizando-se da srie de Taylor para a
funo arctan(x), tomando-se x=1 e, por conseguinte, arctan(1)=pi/4.

Matematicamente:

Implemente um programa que calcule o nmero pi pela srie infinita


acima at o valor absoluto da diferena entre dois termos consecu-
tivos seja menor que uma preciso epsilon fornecida pelo usurio.

Laos 31
10.6 Enlaamento Aplicaes
Aplicao 8: Construir um programa que cifra mensagens
digitadas pelo usurio atravs da cifra de Jlio Csar
(General Romano), tal como dado no exemplo abaixo:
Alfabeto original a b c d ... v w x y z

Alfabeto cifrado D E F G ... Y Z A B C

Texto original v e n i v i d i v i c i

Texto cifrado Y H Q L Y L G L Y L F L

Aplicao 9: Construir um programa que decifra as mensa-


gens que foram cifradas pelo algoritmo
Laos da Aplicao 7 32
Unesp-Campus de Guaratinguet
11 Laos

FIM
Aula 11 Referncias dos slides
Curso de Programao de Computadores
Prof. Anbal Tavares
Profa. Cassilda Ribeiro
Prof. Dcio Mouro
Laos Prof. Galeno Sena 33

S-ar putea să vă placă și