Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original
Pseudocódigos
Aula Anterior:
¾ Simbologia associada;
Analogia com fluxogramas;
¾ Resolução de Exercícios;
Já resolvidos na forma de fluxogramas;
Símbolos básicos;
Comando de atribuição;
Comando de seleção;
Trabalho de Programação 02;
I
C
C
-
P
s
e
u
d
o
c
ó
d
i
g
o
s
/
E
s
t
r
u
t
u
r
a
d
e
C
o
n
t
r
o
l
e
d
e
R
e
p
e
t
i
ç
ã
o
Estrutura de Controle de repetição;
9
9
9
9
9
Aula de Hoje:
Estrutura de Controle de Repetição
¾ O propósito da Estrutura de Controle de Repetição (comandos de repetição) é
controlar o número de vezes que um grupo de instruções será executada;
Idéias Gerais Æ O que você deve saber :
¾ Cada execução de todas as instruções internas ao comando de repetição é
referenciada por iteração. Assim, se o comando de repetição executar um grupo de
instruções 10 vezes, houve exatamente 10 iterações;
¾ Para conseguirmos entender o princípio de funcionamento de um comando de
repetição e o seu uso na resolução dos mais variados tipos de problemas, devemos
ser capazes de descobrir o relacionamento entre as quantidades associadas as
variáveis no interior do ciclo de repetição, entre duas iterações consecutivas
quaisquer;
Em outras palavras, como obter as quantidades associadas as variáveis que estão no
interior do comando de repetição na iteração i, a partir da iteração (i-1) (i > 0).
I
C
C
-
P
s
e
u
d
o
c
ó
d
i
g
o
s
/
E
s
t
r
u
t
u
r
a
d
e
C
o
n
t
r
o
l
e
d
e
R
e
p
e
t
i
ç
ã
o
Estrutura de Controle de Repetição
¾ A Estrutura de Controle de Repetição dá origem a diferentes Comandos de
Repetição. Vamos ver dois destes comandos agora e deixar o terceiro para quando
aprendermos a linguagem C;
Primeira Forma:Æ É usada quando você sabe “a priori”, a partir do enunciado
do problema, o número exato de vezes que o comando de repetição será
executado, ou seja, a quantidade de iterações a serem executadas.
Exemplo 1: Determinar o número de divisores positivos de um número p (p > 0);
Dado um problema é possível determinar a partir do enunciado qual
forma utilizar (com um pouquinho de experiência, é claro!!!!).
Exemplo 2: Somar os n (n > 0) primeiros números inteiros positivos;
Exemplo 3: Obter o fatorial de n (n ≥ 0). Lembrando que:
1 0
!
( 1)! 1
se n
n
n n se n
=⎧= ⎨ − ≥⎩
I
C
C
-
P
s
e
u
d
o
c
ó
d
i
g
o
s
/
E
s
t
r
u
t
u
r
a
d
e
C
o
n
t
r
o
l
e
d
e
R
e
p
e
t
i
ç
ã
o
Estrutura de Controle de Repetição
Segunda Forma:Æ é usada quando você não sabe “a priori”, a partir do
enunciado do problema, o número de vezes que o comando de repetição será
executado. Esta forma dá origem a dois comandos de repetição. Vamos ver apenas
um deles.
Exemplo 1: Dado um valor real lim (lim ≥ 0), determine o número de termos
necessários que você deve somar da Série Harmônica, para que esta soma
seja superior a lim. Em outras palavras:
1
1 limH
i
S
n
∞
=
= >∑
1 1 1 1 1 1 11 lim
2 3 4 5 6 7H
S
n
= + + + + + + + + >"
expandindo esta série, temos:
Muito em breve estaremos implementando este código em C. Aguarde!!!
I
C
C
-
P
s
e
u
d
o
c
ó
d
i
g
o
s
/
E
s
t
r
u
t
u
r
a
d
e
C
o
n
t
r
o
l
e
d
e
R
e
p
e
t
i
ç
ã
o
Estrutura de Controle de Repetição
Idéias Gerais Æ O que você deve saber :
I
C
C
-
P
s
e
u
d
o
c
ó
d
i
g
o
s
/
E
s
t
r
u
t
u
r
a
d
e
C
o
n
t
r
o
l
e
d
e
R
e
p
e
t
i
ç
ã
o
Você saberia dizer
quantos termos teríamos
que somar da SH para
que a soma acumulada
excedesse lim?
1
2
12.367
1.835.421
4.989.191
13.562.027
36.865.412
100.210.581
lim
0 -------------Æ
1 -------------Æ
10 -------------Æ
15 -------------Æ
16 -------------Æ
17 -------------Æ
18 -------------Æ
19 -------------Æ
1 1 1 11 lim
2 3 4H
S
n
= + + + + + + >" "
Estrutura de Controle de Repetição
Idéias Gerais Æ O que você deve saber :
Com a elaboração de diferentes pseudocódigos e um pouco mais de
experiência, você verá que para a maioria dos problemas é absolutamente
indiferente usar a 1ª ou a 2ª forma.
I
C
C
-
P
s
e
u
d
o
c
ó
d
i
g
o
s
/
E
s
t
r
u
t
u
r
a
d
e
C
o
n
t
r
o
l
e
d
e
R
e
p
e
t
i
ç
ã
o
Quando usar a 2ª forma (enquanto-faça), não se esqueça de determinar a
condição de terminação.
Tabela de Equivalência – Estrutura de Controle de Repetição
Fluxograma Pseudocódigo
V
. . .(expressão boleana)
para (exp1; exp2; exp3)
inicio
fim
comandos;
comandos
proxima_instrucao;
...
F
1ª Forma: sabemos exatamente quantas
vezes o grupo de instruções (comandos)
será executado. Neste caso, usamos
uma variável de controle para contar o
número de iterações.
I
C
C
-
P
s
e
u
d
o
c
ó
d
i
g
o
s
/
E
s
t
r
u
t
u
r
a
d
e
C
o
n
t
r
o
l
e
d
e
R
e
p
e
t
i
ç
ã
o
Estrutura de Controle de Repetição - 1ª Forma
Forma Geral:
Onde:
exp2: é uma expressão boleana que define a condição de terminação do comando de
repetição e é testada antes do início de cada iteração. Se exp2 for verdadeira, então o bloco
de instruções associado ao comando para é executado, caso contrário, a
proxima_instruçao será executada.
exp1: é uma expressão que inicializa a variável de controle (variável que controla o número
de vezes que o comando será executado). É executada uma única vez.
exp3: é uma expressão que incrementa ou decrementa a variável de controle, após cada
iteração. Faz o papel de um contador (incremental ou decremental). É sempre executada
(automaticamente) após o último comando no interior do bloco de instruções.
I
C
C
-
P
s
e
u
d
o
c
ó
d
i
g
o
s
/
E
s
t
r
u
t
u
r
a
d
e
C
o
n
t
r
o
l
e
d
e
R
e
p
e
t
i
ç
ã
o para (exp1; exp2; exp3)
inicio
fim
comandos;
proxima_instrucao;
...
Atenção. A maioria dos livros que você for ler adota uma forma sintática
ligeiramente diferente do comando para, porém com o mesmo sentido. A forma
adotada aqui vai facilitar nossa vida quando formos aprender a Linguagem C.
Exemplo 1:
...
para (i Å1; i ≤ n; i Å i+1)
s Å s + i;
proxima_instrucao;
...
exp1: (i Å 1) - aqui a variável que controla o número de repetições é i.
Onde:
exp2: (i ≤ n) - condição de terminação (expressão boleana) que controla até
quando a(s) instrução(ões) interna(s) será(ão) executada(s).
exp3: (i Å i+1) - a variável de controle i está sendo incrementada em uma
unidade.
Observe que o comando de repetição acima possui uma única instrução interna.
Nesse caso, não é necessário delimitar o bloco de comandos representado pelas
palavras inicio e fim.
I
C
C
-
P
s
e
u
d
o
c
ó
d
i
g
o
s
/
E
s
t
r
u
t
u
r
a
d
e
C
o
n
t
r
o
l
e
d
e
R
e
p
e
t
i
ç
ã
o
Estrutura de Controle de Repetição - 1ª Forma
exp1: i Å 1Onde:
exp2: i ≤ n
exp3: i Å i+1
Observe que em cada iteração desejamos executar mais de uma instrução no caso da
expressão boleana (i ≤ n) ser verdadeira. Nesse caso, é necessário mostrar isso utilizando o
bloco de instruções delimitado pelas palavras inicio e fim.
I
C
C
-
P
s
e
u
d
o
c
ó
d
i
g
o
s
/
E
s
t
r
u
t
u
r
a
d
e
C
o
n
t
r
o
l
e
d
e
R
e
p
e
t
i
ç
ã
o
Estrutura de Controle de Repetição - 1ª Forma
Exemplo 2:
.........exp1: expressão de inicialização;
.........exp2: expressão boleana;
.........exp2: expressão de incremento ou decremento;
...
para (iÅ1; i ≤ n; i Å i+1)
inicio
num Å num*x;
den Å den*i;
s Å s + num/den;
fim
proxima_instrucao;
...
Bloco de instruções
Internas ao comando
enquanto (expressão boleana) faça
Tabela de Equivalência – Estrutura de Controle de Repetição
Fluxograma Pseudocódigo
inicio
comandos;
fim
proxima_instrucao;V
. . .(expressão boleana)
comandos
F
2ª Forma: não sabemos exatamente
quantas vezes o grupo de instruções no
interior do comando de repetição será
executado.
I
C
C
-
P
s
e
u
d
o
c
ó
d
i
g
o
s
/
E
s
t
r
u
t
u
r
a
d
e
C
o
n
t
r
o
l
e
d
e
R
e
p
e
t
i
ç
ã
o
2ª Forma: Observem a condição de terminação (expressão boleana) no início do
comando de repetição.
Enquanto o valor da expressão bolena for verdadeira, todas as instruções no
interior do bloco de instruções associado ao comando enquanto – faça, serão
executadas. No início de cada iteração a expressão bolena é verificada.
o número de iterações será determinado em tempo de execução e irá
depender dos valores associados as variáveis envolvidas na expressão
boleana.
Estrutura de Controle de Repetição - 2ª Forma
enquanto (exp. boleana) faça
inicio
comandos;
fim
proxima instrucao;
I
C
C
-
P
s
e
u
d
o
c
ó
d
i
g
o
s
/
E
s
t
r
u
t
u
r
a
d
e
C
o
n
t
r
o
l
e
d
e
R
e
p
e
t
i
ç
ã
o
Pelo menos uma das instruções no interior do comando de repetição deve
alterar a condição de terminação.
Os comandos no interior do comando de repetição enquanto-faça serão
executados enquanto a expressão boleana (soma ≤ limite ) for verdadeira.
Quando essa condição de terminação for falsa, então a proxima_instrucao será
executada e o fluxo de execução segue normalmente. Lembrem-se que eu não
posso violar o princípio da finitude de um algoritmo, logo não posso ter um loop
infinito. Nesse caso as instruções estão bem definidas. Por quê?
...
enquanto (soma ≤ limite ) faça
inicio
soma Å soma + 1/i;
i Å i + 1;
fim
proxima_instrucao;
...
I
C
C
-
P
s
e
u
d
o
c
ó
d
i
g
o
s
/
E
s
t
r
u
t
u
r
a
d
e
C
o
n
t
r
o
l
e
d
e
R
e
p
e
t
i
ç
ã
o
Exemplo 1:
Estrutura de Controle de Repetição - 2ª Forma
...
i Å 1;
enquanto (i ≤ n ) faça
inicio
s Å s + i;
i Å i + 1;
fim
proxima_instrucao;
...
I
C
C
-
P
s
e
u
d
o
c
ó
d
i
g
o
s
/
E
s
t
r
u
t
u
r
a
d
e
C
o
n
t
r
o
l
e
d
e
R
e
p
e
t
i
ç
ã
o
Estrutura de Controle de Repetição - 2ª Forma
Exemplo 2: Do ponto de vista lógico, ambos os trechos de código abaixo produzem o
mesmo resultado. Observem as pequenas diferenças estruturais.
...
para (i Å1; i ≤ n; i Å i+1 )
s Å s + i;
proxima_instrucao;
...
Æ Quase todos os exercícios a seguir já foram resolvidos por meio de
fluxogramas;
I
C
C
-
P
s
e
u
d
o
c
ó
d
i
g
o
s
/
E
s
t
r
u
t
u
r
a
d
e
C
o
n
t
r
o
l
e
d
e
R
e
p
e
t
i
ç
ã
o
Observações
Æ As discussões já realizadas sobre a análise de cada um dos problemas
continuam valendo e não serão repetidas novamente;
Æ Ao estudar, procure ter em mãos todas as aulas anteriores, principalmente
aquelas que resolvem os mesmos problemas usando formas de representação
de algoritmos diferentes. Assim, fica mais fácil verificar a correspondência
entre os símbolos existentes, em ambas as formas.
Problema: Somar os n primeiros números naturais.
Quantidades a serem representadas:
Valor de entrada (n)
Representar a soma (soma)
Controlar (contar) o número de iterações ( i )
Versão 1:
inicio
inteiro n, soma, i;
impressao(“Introduza o valor de n: ”);
leitura(n); // n≥0
soma Å 0 ; // inicializando a variável soma
para (i Å 1; i ≤ n; i Å i+1)
soma Å soma + i ;
impressao(“Valor da Soma obtido”, soma);
fimI
C
C
-
P
s
e
u
d
o
c
ó
d
i
g
o
s
/
E
s
t
r
u
t
u
r
a
d
e
C
o
n
t
r
o
l
e
d
e
R
e
p
e
t
i
ç
ã
o
Para a maioria dos exercícios a seguir, vamos admitir que os dados de entrada
estejam corretos.
Problema: Somar os n primeiros números naturais.
Quantidades a serem representadas:
Valor de entrada (n) Representar a soma (soma)
Controlar (contar) o número de iterações ( i )
Versão 2:
inicio
inteiro n, soma, i;
impressao(“Introduza o valor de n : ”);
leitura(n); // n≥0
i Å 1;
soma Å 0 ;
enquanto (i ≤ n) faça
inicio
i Å i + 1 ;
soma Å soma + i;
fim
impressao(“Valor da Soma obtido”, soma);
fimI C
C
-
P
s
e
u
d
o
c
ó
d
i
g
o
s
/
E
s
t
r
u
t
u
r
a
d
e
C
o
n
t
r
o
l
e
d
e
R
e
p
e
t
i
ç
ã
o
Problema: Imprimir os n primeiros números ímpares.
inicio
inteiro n, i, im;
impressao(“Introduza um valor inteiro”);
leitura(n); // n>0
Valor de entrada (n)
para (i Å 1; i ≤ n; i Å i + 1)
inicio
fim
im Å 2*i – 1;
Número ímpar (im)
Número de iterações (i)
impressao(im);
fim
I
C
C
-
P
s
e
u
d
o
c
ó
d
i
g
o
s
/
E
s
t
r
u
t
u
r
a
d
e
C
o
n
t
r
o
l
e
d
e
R
e
p
e
t
i
ç
ã
o
Quantidades a serem representadas:
Problema: Encontrar o fatorial de um número inteiro positivo n.
Número de entrada (n)
Fatorial ( fat )
Conta o número de iterações ( i )
I
C
C
-
P
s
e
u
d
o
c
ó
d
i
g
o
s
/
E
s
t
r
u
t
u
r
a
d
e
C
o
n
t
r
o
l
e
d
e
R
e
p
e
t
i
ç
ã
o
Quantidades a serem representadas:c
1 0
!
( 1)! 1
se n
n
n n se n
=⎧= ⎨ − ≥⎩
1
! .( 1).( 2).( 3) 3.2.1
n
i
n i n n n n
=
= = − − −∏ "
intervalo de variável i
fat ÅÅ fat **iExpressão que acumula o produto:Æ
Lembrando que:
Problema: Encontrar o fatorial de um número inteiro
positivo n.
inicio
inteiro n, fat, i;
impressao(“Introduza um inteiro positivo”);
leitura(n); // n≥0
Número de entrada (n)
fat Å 1 ;
Fatorial ( fat )
Iteração ( i )
para (i Å 1; i ≤ n; i Å i + 1)
fat Å fat * i ;
impressao(“Valor do Fatorial=”, fat);
fim
I
C
C
-
P
s
e
u
d
o
c
ó
d
i
g
o
s
/
E
s
t
r
u
t
u
r
a
d
e
C
o
n
t
r
o
l
e
d
e
R
e
p
e
t
i
ç
ã
o
Quantidades a serem representadas:
se (n ≥ 0) // n≥0
inicioentão
fim
senão impressao(“Erro nos dados de Entrada”);
Versão 1:
Problema: Encontrar o fatorial de um número inteiro positivo n.
Número de entrada (n)
Fatorial ( fat )
Iteração ( i )
I
C
C
-
P
s
e
u
d
o
c
ó
d
i
g
o
s
/
E
s
t
r
u
t
u
r
a
d
e
C
o
n
t
r
o
l
e
d
e
R
e
p
e
t
i
ç
ã
o
Quantidades a serem representadas:
enquanto (i ≤ n) faça
inicio
i Å i + 1;
fat Å fat * i;
fim
impressao(“Valor do Fatorial=”, fat);
fim
inicio
inteiro n, fat, i;
impressao(“Introduza um inteiro positivo”);
leitura(n); // vamos admitir n≥0
fat Å 1; iÅ 1;
Versão 2:
Problema: Dado um p > 0 inteiro, encontre todos os divisores positivos
de p e sua respectiva quantidade.
Quantidade de divisores (q)
Conta o número de iterações ( i )
número (p)
I
C
C
-
P
s
e
u
d
o
c
ó
d
i
g
o
s
/
E
s
t
r
u
t
u
r
a
d
e
C
o
n
t
r
o
l
e
d
e
R
e
p
e
t
i
ç
ã
o
Quantidades a serem representadas:
\0 10 1 pp
Todos os divisores positivos de p
1 ≤≤ variável i ≤≤ p
Lembrando que:
Problema: Dado um p > 0 inteiro, encontre todos os divisores positivos
de p e sua respectiva quantidade.
inicio
inteiro p, i, q;
impressao(“Introduza o valor de p”);
leitura (p); // p>0
i Å 1 ;
Quantidade de divisores (q)
Conta o número de iterações ( i )
q Å 0 ;
enquanto (i ≤ p) faça
inicio
i Å i + 1 ;
q Å q + 1 ;
fim
impressao(“Número de divisores”, q);
fim
impressao(i);
se ((p % i) = 0 )
entao inicio
fim
número (p)
I
C
C
-
P
s
e
u
d
o
c
ó
d
i
g
o
s
/
E
s
t
r
u
t
u
r
a
d
e
C
o
n
t
r
o
l
e
d
e
R
e
p
e
t
i
ç
ã
o
Quantidades a serem representadas:
Número (p)
Problema: Verificar se um número inteiro positivo p qualquer é um número
perfeito.
Soma dos divisores (soma)
Contar o número de iterações ( i )
Quantidades a serem representadas:
I
C
C
-
P
s
e
u
d
o
c
ó
d
i
g
o
s
/
E
s
t
r
u
t
u
r
a
d
e
C
o
n
t
r
o
l
e
d
e
R
e
p
e
t
i
ç
ã
o
Um número p (p>0) é perfeito, se a soma de seus divisores (com exceção de p) é igual ao
próprio número.
Exemplo1: D(10) = {1,2,5,10} Soma(D(10)) = 8X 10 ≠ 8
Exemplo2: D(6) = {1,2,3,6} Soma(D(6)) = 6X 6 = 6
Exemplo3: D(28) = {1, 2, 4, 7, 14, 28} Soma(D(28)) = 28X 28 = 28
X
9
9
Lembrando que:
Os primeiros 4 números perfeitos são: 6, 28, 496 e 8128.
Número (p)
Problema: Verificar se um número inteiro positivo p qualquer é um número
perfeito.
Soma dos divisores (soma)
Contar o número de iterações ( i )
Quantidades a serem representadas:
I
C
C
-
P
s
e
u
d
o
c
ó
d
i
g
o
s
/
E
s
t
r
u
t
u
r
a
d
e
C
o
n
t
r
o
l
e
d
e
R
e
p
e
t
i
ç
ã
o
Lembrando que:
\0 10 1 pp
Todos os divisores positivos de p
com exceção dele mesmo
1 ≤≤ variável i ≤≤ p-1
inicio
inteiro p, i, soma;
impressao(“Introduza o valor de p”);
leitura(p); // supondo p>0
Número (p)
i Å 1;
soma Å 0;
enquanto (i < p) faça
inicio
i Å i + 1;
fim
senao impressao(“O número não é perfeito”);
fim
se ((p % i) = 0 )
entao soma Å soma + i;
Problema: Verificar se um número inteiro positivo p qualquer é um número
perfeito.
Soma dos divisores (soma)
Contar o número de iterações ( i )
se (p = soma )
entao impressao(“O número é perfeito”);
Quantidades a serem representadas:
I
C
C
-
P
s
e
u
d
o
c
ó
d
i
g
o
s
/
E
s
t
r
u
t
u
r
a
d
e
C
o
n
t
r
o
l
e
d
e
R
e
p
e
t
i
ç
ã
o
Base (a)
Expoente (b)
Problema: Calcular ab, dado a:real e b: inteiro positivo.
Potência (pot)
Contar o número de iterações ( i )
Quantidades a serem representadas:
I
C
C
-
P
s
e
u
d
o
c
ó
d
i
g
o
s
/
E
s
t
r
u
t
u
r
a
d
e
C
o
n
t
r
o
l
e
d
e
R
e
p
e
t
i
ç
ã
o
. . . . . . .bpot a a a a a a a a a= = "
b vezes
Lembrando que:
inicio
inteiro b, i;
impressao(“Introduza o valor da base”);
leitura(a);
Base (a)
Expoente (b)
i Å 1;
pot Å 1;
enquanto (i ≤ b) faça
inicio
i Å i + 1;
fim
fim
Problema: Calcular ab, dado a:real e b: inteiro positivo.
impressao(“Resultado: Pot(“,a,”,”,b,”) = ” , pot);
real a, pot;
impressao(“Introduza o valor do expoente”);
leitura(b); // b≥0
pot Å pot*a;
Potência (pot)
Contar o número de iterações ( i )
Quantidades a serem representadas:
I
C
C
-
P
s
e
u
d
o
c
ó
d
i
g
o
s
/
E
s
t
r
u
t
u
r
a
d
e
C
o
n
t
r
o
l
e
d
e
R
e
p
e
t
i
ç
ã
o
inicio
inteiro a, b, soma, i;
impressao(“Introduza dois numeros naturais: ”);
leitura(a,b); // a, b ≥0
Valores de entrada (a e b)
soma Å 0;
para (i Å 1; i ≤ b; i Åi + 1)
fim
Problema: Fazer o produto de a por b (inteiros positivos), usando
somente operações de soma.
impressao(“Resultado:” , soma);
soma Å soma + a;
Acumular a soma (soma)
Contar o número de iterações ( i )
Quantidades a serem representadas:
I
C
C
-
P
s
e
u
d
o
c
ó
d
i
g
o
s
/
E
s
t
r
u
t
u
r
a
d
e
C
o
n
t
r
o
l
e
d
e
R
e
p
e
t
i
ç
ã
o
.a b a a a a a a a a= + + + + + + + +"
b vezes
Lembrando que:
Valores de entrada (a,b)
Quociente (parte inteira da divisão) (q)
Problema: Fazer a divisão inteira de a por b, usando somente
operações de subtração.
I
C
C
-
P
s
e
u
d
o
c
ó
d
i
g
o
s
/
E
s
t
r
u
t
u
r
a
d
e
C
o
n
t
r
o
l
e
d
e
R
e
p
e
t
i
ç
ã
o
Quantidades a serem representadas:
00 aa
bb bb bb bb bb bb restoresto
Quantidade de vezes que o b “cabe” dentro de a
Lembrando que:
inicio
inteiro a, b, q, ca;
impressao(“Introduza o valor de a: ”);
leitura (a);
Valores de entrada (a,b)
Quociente (parte inteira da divisão) (q)
Cópia de a (ca)
q Å 0; ca Å a;
enquanto (a ≥ b) faça
inicio
q Å q + 1;
fim
fim
impressao(“Introduza o valor de b:”);
leitura (b);
// b>0
a Å a – b;
Problema: Fazer a divisão inteira de a por b, usando somente
operações de subtração.
impressao(“Resto(“,ca,”,”,b,”)= “, a);I
C
C
-
P
s
e
u
d
o
c
ó
d
i
g
o
s
/
E
s
t
r
u
t
u
r
a
d
e
C
o
n
t
r
o
l
e
d
e
R
e
p
e
t
i
ç
ã
o
impressao(“Quociente(“,ca,”,”,b,”) = “, q);
Quantidades a serem representadas:
inicio
inteiro n, alg, cn;
impressao(“Introduza um valor inteiro”);
leitura(n); // n≥ 0
se ( n < 10)
entao alg Å1;
Problema: Dado um n ∈Z*. Encontrar o número de Algarismos de n.
inicio
fim
alg Å alg + 1;
n Å QUOC(n,10);
fim
impressao(“Número de algarismo de ”, cn , “é igual a”, alg);
alg Å 0 ; cn Å n;
Valor de entrada (n)
Cópia de n (cn)
Número de algarismos de n (alg)
I
C
C
-
P
s
e
u
d
o
c
ó
d
i
g
o
s
/
E
s
t
r
u
t
u
r
a
d
e
C
o
n
t
r
o
l
e
d
e
R
e
p
e
t
i
ç
ã
o
Quantidades a serem representadas:
senao enquanto (n ≠ 0) faça
Problema: Dado um número p ∈ Z, p ≥ 2, verificar se ele é primo. (Versão
Simples)
I
C
C
-
P
s
e
u
d
o
c
ó
d
i
g
o
s
/
E
s
t
r
u
t
u
r
a
d
e
C
o
n
t
r
o
l
e
d
e
R
e
p
e
t
i
ç
ã
o
\0 1 20 1 2 pp
Verificando se existe algum divisor
neste intervalo
2 ≤≤ variável i ≤≤ p-1
Estratégia: Sabemos pela definição de números primos que não pode existir
nenhum divisor de p, além dos divisores próprios.
Logo, vou verificar se existe divisores de p no intervalo [2, p-1]. Se existir um
único divisor o número não é primo.
Uma outra estratégia bastante simples, seria contar o número de divisores de p
no intervalo [1, p]. Se este número for diferente de dois, então, o número não é
primo.
Problema: Dado um número p ∈ Z, p ≥ 2, verificar se ele é primo. (Versão
Simples)
inicio
inteiro p, aux, i;
impressao(“Introduza um valor inteiro maior ou igual a 2”);
leitura(p); // p ≥ 2
número (p)
enquanto ((i < p) E (aux = 1)) faça
inicio
fim
Variável auxiliar (aux)
Controlando as iterações (i)
então impressao (“O número “, p, “ é primo”);
i Å i + 1;
i Å 2; aux Å 1;
se (p % i) = 0 )
entao aux Å 0;
se (aux = 1 )
senao impressao (“O número “, p, “ não é primo”);
se (p ≥ 2)
entao inicio
senao impressao(“Dados Incorretos”);
fim
fim
I
C
C
-
P
s
e
u
d
o
c
ó
d
i
g
o
s
/
E
s
t
r
u
t
u
r
a
d
e
C
o
n
t
r
o
l
e
d
e
R
e
p
e
t
i
ç
ã
o
Quantidades a serem representadas:
Problema: Dado um número real positivo LIM, determinar o número de
termos a serem somados da Série Harmônica, de modo que, essa soma
exceda LIM.
I
C
C
-
P
s
e
u
d
o
c
ó
d
i
g
o
s
/
E
s
t
r
u
t
u
r
a
d
e
C
o
n
t
r
o
l
e
d
e
R
e
p
e
t
i
ç
ã
o
1 1 1 1 1 1 1 1 1 11
2 3 4 5 6 7 8 9 10 11H
S = + + + + + + + + + + +"
Análise básica do problema:
1 2 3 4 5 6 7 8 9 10 11
FATOS:
ÆTemos que ser capazes de somar uma dada quantidade de termos da série e para
que isso ocorra, devemos gerar em cada iteração o respectivo termo;
Æ Enquanto a soma acumulada for menor ou igual ao valor LIM, eu continuo a
somar;
1 ≤≤ variável i
Problema: Dado um número real positivo LIM, determinar o número de
termos a serem somados da Série Harmônica, de modo que, essa soma
exceda LIM.
I
C
C
-
P
s
e
u
d
o
c
ó
d
i
g
o
s
/
E
s
t
r
u
t
u
r
a
d
e
C
o
n
t
r
o
l
e
d
e
R
e
p
e
t
i
ç
ã
o
Número (lim) Soma acumulada (soma)
Auxiliar na Geração dos termos (i)
Quantidades a serem representadas:
inicio
inteiro i;
real soma, lim;
impressao(“Introduza um valor real positivo :”);
leitura (lim); // lim ≥ 0
enquanto (soma ≤ lim) faça
inicio
fim
impressao(“Número de termos somados: “, i-1);
i Å i + 1;
i Å 1; soma Å 0;
soma Å soma + 1.0/i;
se (lim ≥ 0)
entao inicio
senao impressao(“Dados Incorretos”);fim
fim
I
C
C
-
P
s
e
u
d
o
c
ó
d
i
g
o
s
/
E
s
t
r
u
t
u
r
a
d
e
C
o
n
t
r
o
l
e
d
e
R
e
p
e
t
i
ç
ã
o
Se app é uma boa aproximação para , então
( ) / 2x app
app
+ é melhor ainda.
x
Você saberia dizer “a
priori” o número de
iterações necessárias para
resolver o problema com
uma boa aproximação?
Problema: Dado um número real positivo x≥0, determinar usando a
relação abaixo.
x
I
C
C
-
P
s
e
u
d
o
c
ó
d
i
g
o
s
/
E
s
t
r
u
t
u
r
a
d
e
C
o
n
t
r
o
l
e
d
e
R
e
p
e
t
i
ç
ã
o
Problema: Dado um número real positivo x≥0, determinar usando a
relação abaixo.
x
Se app é uma boa aproximação para , então
( ) / 2x app
app
+ é melhor ainda.
x
\0 1 0 1 x
app app app app app
Análise básica do problema:
I
C
C
-
P
s
e
u
d
o
c
ó
d
i
g
o
s
/
E
s
t
r
u
t
u
r
a
d
e
C
o
n
t
r
o
l
e
d
e
R
e
p
e
t
i
ç
ã
o
x app≅
2| |x app eps− <
2 0x app− ≅
Vamos analisar a condição de terminação, ou seja, até quando eu devo
continuar com minhas aproximações? Em outras palavras, quando eu devo
parar.
2x app≅
10 , 6 12.(suficientemente pequeno)neps n−= ≤ ≤
Análise básica do problema:
I
C
C
-
P
s
e
u
d
o
c
ó
d
i
g
o
s
/
E
s
t
r
u
t
u
r
a
d
e
C
o
n
t
r
o
l
e
d
e
R
e
p
e
t
i
ç
ã
o
Problema: Dado um número real positivo x≥0, determinar usando a
relação abaixo.
x
Número (x) Valor aproximado (app)
Número bem pequeno (eps)
Quantidades a serem representadas:
inicio
real app, x, eps;
impressao (“Introduza um valor real positivo :”);
leitura (x); // x ≥ 0
enquanto ( |x – app*app| > eps) faça
impressao (“Valor aproximado obtido: “, app);
app Å 1.0; eps Å 0.000001;
app Å ( x/app + app)/2.0;
se (x ≥ 0)
entao inicio
senao impressao (“Dados Incorretos”);fim
fim
I
C
C
-
P
s
e
u
d
o
c
ó
d
i
g
o
s
/
E
s
t
r
u
t
u
r
a
d
e
C
o
n
t
r
o
l
e
d
e
R
e
p
e
t
i
ç
ã
o
Exercícios
01) Refaça todos os exercícios já resolvidos com o comando for, só que agora,
usando o comando while.
02) Se app é uma boa aproximação para , então
2( 2 ) / 3
x app
app
+
é melhor ainda.
3 x
03) Leia um número inteiro num e encontre o seu reverso. Por exemplo, se:
num = 1234 Æ nr = 4321
num = 74291 Æ nr = 19247
04) Leia um número inteiro num e verifique se esse número possui dois dígitos
adjacentes iguais. Por exemplo
num = 1234 Æ não possui
num = 727297 Æ não possui
num = 2335 Æ possui
2º Trabalho Prático de Programação - Pseudocódigos
I
C
C
-
P
s
e
u
d
o
c
ó
d
i
g
o
s
/
E
s
t
r
u
t
u
r
a
d
e
C
o
n
t
r
o
l
e
d
e
R
e
p
e
t
i
ç
ã
o
¾ Prazo de Entrega: 23/04/2008;
Observações:Æ
¾ Enviar o trabalho num único arquivo para o e.mail piteri@fct.unesp.br ;
¾ Os nomes dos participantes do grupo deverão estar no interior do arquivo e não
no corpo do e.mail;
Trabalho:Æ Elaborar pseudocódigos para resolver os seguintes
problemas:
Exercícios: 15, 22 e 34 da Lista 01.
¾ Se desejarem, vocês poderão fazer uma análise básica do problema;
¾ Procurem endentar os blocos de instruções e destacar os símbolos associados a
cada um dos comandos utilizados. Observem as Notas de Aula;