Escolar Documentos
Profissional Documentos
Cultura Documentos
Ila Livro PDF
Ila Livro PDF
6
8
!
9
<
!
<
@
!. ..
b+
6,
6
8
!
6
9
!
6
;
! . ..
6
9
.. .
6
n
. . .
% divergente. 2sto significa que dado
qualquer real I existe n
G
tal que
6
6
8
6
9
. ..
6
n
G
:
. #scre$a um programa que dado um real I
determine o menor inteiro n
G
tal que : e I. or exemplo se I d 8, o programa de$e fornecer n
G
d ;,
pois
6
6
8
6
9
6
;
=8, G@9. .. .
e
6
6
8
6
9
=6, @999. .. .
+;5 #scre$a um programa que escre$a todos os subconjuntos com trs elementos de um
conjunto que tem n elementos, n dado.
16. 0ois n&meros inteiros so ditos amigos se a soma dos di$isores de cada um deles
*menores que eles+ % igual ao outro. or exemplo, os di$isores de 88G so 6, 8, ;, <, 6G, 66, 8G, 88,
;;, << e 66G e 6 b 8 b ; b < b 6G b 66 b 8G b 88 b ;; b << b 66G d 8@; e os di$isores de 8@; so 6,
8, ;, ?6 e 6;8 e 6 b 8 b ; b ?6 b 6;8 d 88G. #scre$a um programa que determine todos os pares de
inteiros amigos menores que um inteiro dado.
17. Mm inteiro positi$o x % dito uma potncia prima se existem dois inteiros positi$os p e I,
com p primo, tais que x d p
I
. #scre$a uma funo que receba um inteiro e $erifique se ele % uma
potncia prima.
+@5 Mm inteiro positi$o x % dito uma potncia perfeita de base z e expoente y se existem dois
inteiros positi$os z e j tais que x d z
j
. #scre$a uma funo que receba um inteiro e $erifique se ele %
uma potncia perfeita.
/Cserva%&o
)prendendo a rogramar rogramando numa 3inguagem )lgortmica #xecut"$el *23)+ - "gina <<
Para oCter o caderno das solu%Fes dos exerccios propostos Casta encaminGar eHmail
para IaimeJccen5ufal com assunto RESP/S.AS #"VR/ "#A e contendo -/'EK
CA.E4/R"A !docenteK discenteK autodidata$K C"0A0ELESA.A0/ eK se for o casoK
"-S.".U"12/LCURS/5
;5 Fun%Fes
;5+ "ntrodu%&o
. exerccio ? da seo 9.< solicita$a que fosse feito um programa para a determinao das
razes reais ou complexas de uma equao do segundo grau. /om os conhecimentos adquiridos at%
a referida seo, um poss$el programa seria o seguinte.
CCrograma para a determinao das razes de uma equao do segundo grau
Karia$eis
Bumerico a, b, c, x6, x8, 0elta, (eal, 2mag
2nicio
#scre$er ]0igite os coeficientes]
3er a
3er b
3er c
:e a fe G entao
(eal d -bC*8ra+
0elta d bs8 - ;rarc
:e 0elta ed G entao
2mag d (aiz*0elta, 8+C*8ra+
x6 d (eal b 2mag
x8 d real - 2mag
#scre$er ](azes, ], x6, ] e ], x8
:enao
2mag d (aiz*-0elta, 8+C*8ra+
#scre$er ](azes, ], (eal, ] b ],2mag,]i e ], (eal, ] - ],2mag,]i]
!imqse
:enao
#scre$er ]) equao no e do segundo grau]
!imqse
!im
.bser$e que os comandos 2mag d (aiz*0elta, 8+C*8ra+ e 2mag d (aiz*-0elta, 8+C*8ra+ so
basicamente idnticos e so necess"rios para que o radicando seja positi$o. . sistema 23) permite
que uma ao deste tipo possa ser realizada 41 parte do programa5 e que este 4chame5 a execuo
desta ao quando necess"rio. #stas aes que so executadas 4fora5 do programa propriamente
dito so realizadas atra$%s de un(es que, como dito na seo 8.<, de$em ser definidas logo ap's 1s
definies das $ari"$eis com a seguinte sintaxe,
!uncao 2dentificador*3ista de par7metros+
2nicio
CC:equncia de comandos
!im
Besta definio Lista de par'metros % um conjunto de $ari"$eis *e, portanto, de$em ser
declaradas na "rea para tal+ que recebero os $alores para os quais a execuo da funo %
solicitada, atuando como se fosse a 4entrada5 da funo. #stes $alores estes que so chamados
argumentos da execuo da funo /omo uma entrada de um programa, a lista de par7metros de
uma funo pode ser $azia.
) execuo de uma funo pode ser solicitada com a colocao do identificador da funo *e
a lista dos argumentos+ dentro de uma expresso ou numa linha do programa, como se faz com um
comando. ara que uma funo possa ser ativada *ou seja, tenha a sua execuo solicitada+ dentro
de uma expresso % necess"rio que um dos seus comandos seja um comando cuja sintaxe %
)prendendo a rogramar rogramando numa 3inguagem )lgortmica #xecut"$el *23)+ - "gina <?
(etornar #xpresso
sendo o $alor de ,xpresso utilizado para a a$aliao da expresso que cont%m a c&amada da
funo.
;5) Exemplos Parte "V
+5 /om o uso de funes, o programa da equao do segundo grau poderia ser melhorado com
a utilizao de uma funo que calculasse o $alor absoluto de 0elta, permitindo que fosse calculada
4a parte imagin"ria5 da raiz, quer 0elta seja positi$o ou negati$o.
CCrograma para determinao das razes de uma equao do segundo grau.
Karia$eis
Bumerico a, b, c, x6, x8, 0elta, (eal, 2mag, z, x
CC!uno que retorna o $alor absoluto de um n&mero
!uncao )bs*x+
2nicio
:e x f G entao
(etornar -x
:enao
(etornar x
!imqse
!im
2nicio CCrograma principal
#scre$er ]0igite os coeficientes]
3er a
3er b
3er c
:e a fe G entao
(eal d -bC*8ra+
0elta d bs8 - ;rarc
z d )bs*0elta+
2mag d (aiz*z, 8+C*8ra+
:e 0elta ed G entao
x6 d (eal b 2mag
x8 d real - 2mag
#scre$er ](azes, ], x6, ] e ], x8
:enao
#scre$er ](azes, ], (eal, ] b ],2mag,]i e ], (eal, ] - ],2mag,]i]
!imqse
:enao
#scre$er ]) equao no % do segundo grau]
!imqse
!im
)5 0e um modo geral, os sistemas de computao no trabalham com n&meros racionais na
forma de frao ordin"ria. ) manipulao de fraes ordin"rias % feita considerando-se
separadamente os termos da frao. Mm programa que pretendesse simplificar uma frao ordin"ria
poderia ter uma funo que retornasse o m"ximo di$isor comum dos termos da frao e a
simplificao poderia ser feita di$idindo-se os termos da frao por este m"ximo di$isor comum.
CCrograma para simplificar fraes ordin"rias
Karia$eis
Bumerico Bum, 0en, x, j, r, Mdc, Bo$oBum, Bo$o0en
)prendendo a rogramar rogramando numa 3inguagem )lgortmica #xecut"$el *23)+ - "gina <@
CC!uno que retorna o m"ximo di$isor comum de dois n&meros dados
!uncao Max0i$/om*x, j+
2nicio
r d (esto*x, j+
!aca enquanto r fe G
x d j
j d r
r d (esto*x, j+
!imqenquanto
(etornar j
!im
2nicio CCrograma principal
#scre$er ]0igite os termos da frao]
3er Bum
3er 0en
Mdc d Max0i$/om*Bum, 0en+
Bo$oBum d BumCMdc
Bo$o0en d 0enCMdc
#scre$er ]) frao ], Bum, ]C], 0en, ] simplificada e, ], Bo$oBum, ]C], Bo$o0en
!im
85 Mm programa para listar todos os n&meros primos menores do que um inteiro dado poderia
ter uma uno lgica *ou seja, uma funo que retorna um $alor also ou um $alor verdadeiro+ que
recebendo como argumento um n&mero inteiro $erificasse se este inteiro % ou no primo.
CCrograma para listar todos os primos menores que um inteiro positi$o dado
Karia$eis
Bumerico Bum, x, i, j
CC!uno l'gica que $erifica se um n&mero inteiro % primo
!uncao rimo*x+
2nicio
i d 8
!aca enquanto *(esto*x, i+ fe G+ e *i f xC8+
i d i b 6
!imqenquanto
:e *(esto*x, i+ d G+ e *x fe 8+ entao
(etornar falso
:enao
(etornar $erdadeiro
!imqse
!im
2nicio CCrograma principal
#scre$er ]0igite o n&mero]
3er Bum
#scre$er ].s primos menores que ], Bum,] so, ]
ara j d 8 ate Bum - 6
:e rimo*j+ d $erdadeiro entao
#scre$er j
!imqse
roximo
!im
95 :e quisermos um programa que gere uma tabela de atoriais, podemos escre$er uma funo
)prendendo a rogramar rogramando numa 3inguagem )lgortmica #xecut"$el *23)+ - "gina <A
que recebendo um inteiro positi$o retorna o fatorial deste inteiro. 3embrando que
n\ d 6 . 8 . ... . n e que G\ d 6, a funo de$e inicializar uma $ari"$el f com o $alor 6 e numa
estrutura de repetio de i d 6 at% n calcular f d fri. )o fim da estrutura de repetio f armazenar" o
fatorial procurado.
CCrograma que gera uma tabela de fatoriais
Karia$eis
Bumerico i, n, j, f, Bum
CC!uncao que retorna o fatorial de um inteiro dado
!uncao !at*n+
2nicio
f d 6
ara i d 6 ate n
f d fri
roximo
(etornar f
!im
2nicio CCrograma principal
#scre$er ]0igite o $alor m"ximo da tabela]
3er Bum
ara j d G ate Bum
#scre$er j,]\ d ], !at*j+
roximo
!im
;5 . exemplo ? da seo 8.66 apresentou um programa que fornecia a parte fracion"ria de um
inteiro dado, programa este que utiliza$a a funo pr%-definida 2nteiro. Mma funo que retorna a
parte fracion"ria de um n&mero positi$o, sem usar nenhuma funo pr%-definida, poderia encontrar
o maior inteiro menor que o n&mero dado e retornar a diferena entre este n&mero dado e o maior
inteiro determinado.
CC!uno que determina a parte fracion"ria de um n&mero e no utiliza funes pr%-definidas.
Karia$eis
Bumerico Bum, x, i
!uncao !rac*x+
2nicio
i d G
!aca enquanto i fd x
i d i b 6
!imqenquanto
i d i - 6
(etornar x - i
!im
=5 )s funes dos exemplos acima retornam, atra$%s do comando Aetornar, um $alor e elas
so ati$adas dentro de uma expresso. ode-se definir funes que executem alguma tarefa, mas
no retorne nenhum $alor especfico. Beste caso, a funo % ati$ada com a referncia ao seu
identificador seguido, se for o caso, da lista de argumentos. ) construo de um menu de op(es de
um programa que realize di$ersas tarefas % um exemplo deste tipo de funo. or exemplo, um
programa que gerencie o acer$o de uma biblioteca poderia conter a seguinte funo.
!uncao Menu*+
2nicio
#scre$er ]6-/adastrar usu"rio]
#scre$er ]8-/adastrar li$ro]
)prendendo a rogramar rogramando numa 3inguagem )lgortmica #xecut"$el *23)+ - "gina =G
#scre$er ]9-#mpr%stimo]
#scre$er ];-0e$oluo]
#scre$er ]<-#ncerrar]
#scre$er 40igite sua opo5
3er .pcao
!im
Beste caso, um dos primeiros comandos do programa principal seria a ati$ao da funo
atra$%s de
Menu*+
como se escre$e um comando. .bser$e que esta funo tamb%m exemplifica uma funo cuja lista
de par7metros % $azia.
65 ) maior $antagem do uso de funes % a possibilidade de que um programa seja escrito em
mdulos, o que facilita a legi"ilidade do programa, a manuteno do programa *no sentido de que
alteraes no sistema so realizadas simplesmente alterando-se algumas funes+ e permite que
$"rios programadores desen$ol$am um mesmo programa, cada um deles ficando respons"$el por
m'dulos especficos. ara exemplificar, suponhamos que pretendemos desen$ol$er um sotware
matemtico para a manipulao alg%brica de n1meros complexos. #m 23) um programa como este
poderia ter uma funo que exibisse um menu de opes e funes para cada uma das tarefas que se
pretende que o programa seja capaz de executar. )lgo como
CCrograma para "lgebra dos n&meros complexos
Karia$eis
Bumerico a, b, c, d, r, i, x, j, Mod, )ng
/aracter .pc
!uncao Menu*+
2nicio
#scre$er ]6-M'dulo de um complexo]
#scre$er ]8-:oma de dois complexos]
#scre$er ]9-roduto de dois complexos]
#scre$er ];-!orma polar de um complexo]
#scre$er ]<-#ncerra o programa]
#scre$er ]0igite sua opo]
3er .pc
!im
!uncao 3er0ois/omplexos*+
2nicio
#scre$er ]0igite os complexos]
3er a
3er b
3er c
3er d
!im
!uncao Modulo*r, i+
2nicio
(etornar (aiz*as8 b bs8, 8+
!im
!uncao :oma/omplexos*a, b, c, d+
2nicio
r d a b c
i d b b d
!im
)prendendo a rogramar rogramando numa 3inguagem )lgortmica #xecut"$el *23)+ - "gina =6
!uncao Multiplica/omplexos*a, b, c, d+
2nicio
r d arc - brd
i d ard b brc
!im
!uncao !ormaolar*a, b+
2nicio
Mod d Modulo*a, b+
:e a fe G entao
)ng d )tan*bCa+
#scre$er a,] b ],b , ]i d ], Mod,].*cos*],)ng, ]+ b i.sen*], )ng,]+]
:enao
#scre$er b , ]i d ], Mod,].*cos*iC8+ b i.sen*iC8+]
!imqse
!im
CCrograma principal
2nicio
!aca enquanto .pc fe ]<]
Menu*+
!aca caso
/aso .pc d ]6],
#scre$er ]0igite o complexo]
3er a
3er b
#scre$er ]z],a,]b],b,]iz d ], Modulo*a, b+
/aso .pc d ]8],
3er0ois/omplexos*+
:oma/omplexos*a, b, c, d+
#scre$er ]*], a, ] b ],b, ]i+ b *], c, ] b ], d, ]i+ d ], r, ] b ],i, ]i]
/aso .pc d ]9],
3er0ois/omplexos*+
Multiplica/omplexos*a, b, c, d+
#scre$er ]*], a, ] b ],b, ]i+ . *], c, ] b ], d, ]i+ d ], r, ] b ],i, ]i]
/aso .pc d ];],
#scre$er ]0igite o complexo]
3er a
3er b
!ormaolar*a, b+
!imqcaso
!imqenquanto
!im
.bser$e que este exemplo mostra que uma funo pode chamar a ati$ao de outra funo
definida anteriormente, como a funo !ormaolar chamou a funo Modulo.
;58 Recursividade
. exerccio 68 da seo ;.< definiu a sequ-ncia de Fi""onaci como sendo a sequncia *a
n
+
definida por
)prendendo a rogramar rogramando numa 3inguagem )lgortmica #xecut"$el *23)+ - "gina =8
.bser$e que o termo de ordem n % definido a partir de termos anteriores. 2sto significa que
para o c"lculo de um determinado termo h" necessidade de que se recorra a $alores de todos os
termos anteriores. or exemplo, para a determinao de a
<
necessitamos conhecer a
;
e a
9
E para a
determinao destes dois, necessitamos conhecer a
8
e a
6
. Mma definio com estas caractersticas %
dita uma definio por recorr-ncia ou uma definio recursiva.
.utro ente matem"tico que pode ser definido por recorrncia % o atorial de um n&mero
natural, objeto de discusso do exemplo ; da seo anterior. #mbora se possa definir fatorial de um
natural n por n\ d 6 . 8 . 9 . ... . n, % matematicamente mais elegante definir por
or exemplo, ;\ d ; . 9\ d ; . *9 . 8\+ d *; . 9+ . *8 . 6\+ d ; . 9 . 8 . 6 d 8;.
Baturalmente, uma definio recursi$a necessita conter uma condio que interrompa a
recorr-ncia. #sta condio % chamada condio de escape. Bo caso do fatorial a condio de escape
% n d G ou n d 6. ) expresso que realiza propriamente a recorrncia pode ser chamada expresso
de recorr-ncia
. que % surpreendente % que a maioria dos sistemas para desen$ol$imento de programas
permite que sejam definidas funes recursi$as praticamente da mesma maneira que elas so
escritas em matem"tica. /omo o objeti$o do l3) % apenas a aprendizagem da l'gica de
programao, os pesquisadores que o desen$ol$eram no incluram recursos sofisticados de
recurso. . 23) permite apenas a implementao de funes recursi$as quando a expresso de
recorrncia cont%m uma &nica referncia 1quilo que se est" definindo. #ste % o caso, por exemplo,
da definio recursi$a do fatorial, cuja implementao em 23) %, simplesmente,
CC !uncao recursi$a que calcula o fatorial de um numero natural
!uncao !at(ec*n+
2nicio
:e *n d G+ ou *n d 6+ entao
(etornar 6
:enao
(etornar nr!at(ec*n-6+
!imqse
!im
:e esta funo for ati$ada para n d ;, por exemplo, ela retorna ;r!at(ec*9+. 2sto significa que
a funo % ati$ada no$amente para n d 9, ficando a expresso ;r!at(ec*9+ na pil&a de recurso,
aguardando o retorno de !at(ec*9+. #sta ati$ao retorna 9r!at(ec*8+ e a expresso na pilha, agora
;r9r!at(ec*8+, fica aguardando o retorno de !at(ec*8+, que % a expresso 8r!at(ec*6+. )
expresso na tal pil&a de recurso fica agora ;r9r8r!at(ec*6+, aguardando o retorno de !at(ec*6+.
/omo pela definio da funo, !at(ec*6+ retorna 6, a expresso ;r9r8r6 % finalmente calculada e
o seu $alor, 8;, % retornado para o comando que ati$ou a funo para
n d ;.
0e$ido 1 necessidade do empilhamento das expresses que calculam a funo recursi$a e das
sucessi$as ati$aes da mesma funo, % f"cil perceber que a utilizao de uma funo recursi$a
demanda um maior tempo computacional do que uma funo no recursi$a *chamada, geralmente,
uno iterativa+. )ssim, sempre que poss$el, de$emos optar pela soluo iterati$a. Bo captulo ?,
por%m, apresentaremos um exemplo *no execut"$el+ onde a soluo recursi$a seria to eficiente
quanto a iterati$a, sendo bem mais elegante.
;59 Exerccios propostos
+5 #scre$a uma funo que retorne o I-%simo dgito *da direita para esquerda+ de um inteiro n,
I e n dados. or exemplo, {qesimo0igito*8@;<, 9+ d @.
)prendendo a rogramar rogramando numa 3inguagem )lgortmica #xecut"$el *23)+ - "gina =9
)5 . atorial mpar de um n&mero n mpar positi$o % o produto de todos os n&meros mpares
positi$os menores do que ou iguais a n. 2ndicando o atorial mpar de n por nz temos,
nz d 6 . 9. < . ... . n. or exemplo, ?z d 6 . 9 . < . ? d 6G<. #scre$a funes, iterati$a e recursi$a, para
a determinao do fatorial mpar de um inteiro mpar dado.
85 /omo na questo anterior, o atorial primo ou primorial de um n&mero primo positi$o % o
produto de todos os primos positi$os menores do que ou iguais a ele, p| d 8 . 9 . < . ? . ... . p. or
exemplo, ?| d 8 . 9 . < . ? d 86G. #scre$a um programa que determine o primorial de um n&mero
primo dado.
95 #scre$a funes, iterati$a e recursi$a, que retorne a soma dos algarismos de um inteiro
positi$o dado.
;5 . exemplo < da seo <.8, apresentou uma funo que, sem usar funes pr%-definidas,
retorna$a a parte fracion"ria de um n&mero positi$o dado. (eescre$a esta funo sem a exigncia
da positi$idade do argumento.
=5 #scre$a uma funo recursi$a que determine o mnimo m1ltiplo comum de dois inteiros
dados.
65 #scre$a funes, recursi$a e iterati$a, que implementem o operador s.
@5 #scre$a uma funo recursi$a que determine o mximo divisor comum de dois inteiros
dados.
/Cserva%&o
Para oCter o caderno das solu%Fes dos exerccios propostos Casta encaminGar eHmail
para IaimeJccen5ufal com assunto RESP/S.AS #"VR/ "#A e contendo -/'EK
CA.E4/R"A !docenteK discenteK autodidata$K C"0A0ELESA.A0/ eK se for o casoK
"-S.".U"12/LCURS/5
=5 Variveis compostas
=5+ "ntrodu%&o
Bos exemplos = e ? da seo ;.; discutimos programas para a determinao da m%dia de uma
relao de n&meros dados. ara tal, utilizamos uma $ari"$el simples para receber os n&meros, sendo
que cada $ez que um n&mero, a partir do segundo, era recebido o anterior era ]perdido]. .u seja, a
relao de n&meros no era armazenada. 2magine que a relao fosse uma relao de notas escolares
e al%m da m%dia se quisesse tamb%m saber a quantidade de alunos que obti$eram nota acima da
m%dia ou uma outra medida estatstica *desvio padro, por exemplo+ que dependesse da m%dia.
Beste caso, ha$eria a necessidade de que a relao fosse redigitada, o que, al%m da duplicidade do
trabalho, facilitaria os erros de digitao. X importante ento que exista uma ]$ari"$el] capaz de
armazenar $"rios $alores simultaneamente de tal forma que se possa acessar cada um deles
independentemente de se acessar os demais.
Mm outro exemplo que justifica plenamente a necessidade de uma varivel composta % o caso
do exemplo 8 da seo ;.;. 3" queramos a relao dos di$isores de um inteiro dado e estes
di$isores eram apenas exibidos, no sendo armazenados, como recomendado na seo 8.?.
Mma varivel composta % um conjunto de $ari"$eis simples do tipo )umerico, identificadas
pela concatenao de ndices entre colchetes ao identificador da $ari"$el composta. /omo as
$ari"$eis simples, as compostas tamb%m de$em ser definidas no incio do programa com a seguinte
sintaxe,
Matriz numerico 2dentificador^#xpr 6, #xpr 8, ..., #xpr n_
onde #xpr 6, #xpr 8, ..., #xpr n so expresses num%ricas cujo $alor % um n&mero inteiro.
/omumente o $alor de n % referido como sendo a dimenso da $ari"$el composta e cada $ari"$el
simples da $ari"$el composta % chamada de componente da $ari"$el composta. #m relao aos
$alores de n, costuma-se denominar a $ari"$el composta das seguintes formas, quando n d 6, temos
um vetorE quando n d 8, uma matri.E quando n d 9, uma matri. tridimensional e assim
sucessi$amente.
ara exemplificar um $etor, a declarao
Matriz numerico Ket^6GGG_
define um conjunto de mil $ari"$eis do tipo numerico Ket^6_, Ket^8_, ..., Ket^6GGG_ e podemos
armazenar em Ket uma relao com at% mil n&meros. >" para exemplificar uma matriz, definio
Matriz numerico Mat^8G, 9G_
define um conjunto de =GG $ari"$eis Mat^6, 6_, ..., Mat^6, 9G_, Mat^8, 6_, ..., Mat^8, 9G_, ..., Mat^8G,
6_, ..., Mat^8G, 9G_. Baturalmente, matrizes bidimensionais, como Mat acima, so utilizadas para
armazenar ta"elas de dupla entrada. ara um $alor fixo de i, dizemos que Mat^i, 6_, Mat^i, 8_, ...
constituem a lin&a i da matriz enquanto que para um $alor fixo de 3 Mat^6, j_, Mat^8, j_, ...
constituem uma coluna 3. . n&mero de linhas e o n&mero de colunas constituem a ordem da matriz.
Mma limitao do sistema 23) para a manipulao de $ari"$eis compostas % que as
componentes destas $ari"$eis no podem ser argumentos de um comando Ler. ) soluo % definir
uma $ari"$el simples do tipo )umerico para ser passada para o comando Ler e em seguida usar um
comando de atribuio para armazenar o $alor digitado na componente pretendida. :e queremos
armazenar um dado de entrada na primeira componente do $etor Ket, utilizamos uma $ari"$el )ux e
a sequncia de comandos
3er )ux
Ket^6_ d )ux
!eita esta obser$ao, o armazenamento de uma relao de n&meros num vetor depende do
fato de que seja ou no conhecida a quantidade de n&meros da relao. :e esta quantidade %
)prendendo a rogramar rogramando numa 3inguagem )lgortmica #xecut"$el *23)+ - "gina =<
conhecida antecipadamente pode-se usar uma estrutura Para proximo,
#scre$er ]0igite os elementos da relao]
ara i d 6 ate n
3er )ux
Ket^i_ d )ux
roximo
onde n % a quantidade de elementos da relao.
:e tal n&mero no % conhecido, pode-se utilizar um lag, como foi discutido no exemplo ? da
seo ;.;, e uma estrutura Faca enquanto,
#scre$er ]0igite os n&meros *-6 para encerrar+]
3er )ux
Ket^6_ d )ux
i d 6
!aca enquanto Ket^i_ fe -6
i d i b 6
3er )ux
Ket^i_ d )ux
!imqenquanto
i d i - 6
.bser$e que, a partir da, a $ari"$el i % importante para o resto do programa pois armazena a
quantidade elementos da relao ou o taman&o do vetor. .b$iamente, o comando i d i - 6 % para
]retirar] do $etor o lag.
/omo uma componente de um $etor pode ser argumento de um comando ,screver, a exibio
dos elementos de uma relao de n&meros armazenada num $etor % feita de maneira 'b$ia, bastando
]percorrer] o $etor com uma estrutura Para proximo.
ara i d 6 ate Ruant
#scre$er K^i_
roximo
ara o armazenamento de uma matriz % comum se exigir o conhecimento pr%$io da sua
ordem. /om isto pode-se utilizar duas estruturas Para proximo aninhadas, a externa para controlar
as linhas e a interna para controlar as colunas.
#scre$er ]0igite a ordem da matriz]
3er m
3er n
#scre$er ]0igite *por linha+ os elementos da matriz]
ara i d 6 ate m
ara j d 6 ate n
3er )ux
Mat^i, j_ d )ux
roximo
roximo
) exibio dos elementos de uma matriz tamb%m % feita com duas estruturas Para proximo
aninhadas.
ara i d 6 ate m
ara i d 6 ate n
#scre$er Mat^i, j_
roximo
roximo
)prendendo a rogramar rogramando numa 3inguagem )lgortmica #xecut"$el *23)+ - "gina ==
=5) Exemplos Parte V
+5 Mm $etor pode ser gerado pelo pr'prio sistema. or exemplo, o programa abaixo armazena
num $etor os quadrados dos n primeiros n&meros naturais, n dado.
Karia$eis
Bumerico i, n
Matriz Bumerico Ket^6GG_
2nicio
#scre$er ]0igite n]
3er n
ara i d 6 ate n
Ket^i_ d is8
roximo
#scre$er ].s quadrados dos ], n, ]primeiros n&meros naturais so ]
ara i d 6 ate n
#scre$er Ket^i_
roximo
!im
)5 :eja um programa para determinar a m%dia das notas de uma a$aliao de uma turma de
uma escola e, em seguida, determinar quantos alunos obti$eram nota maior que a m%dia. odemos
armazenar as notas num $etor, calcular a m%dia destas notas e depois ]percorrer] o $etor
quantificando o n&mero de componentes maiores que a m%dia. /omo foi dito na seo anterior,
pode-se percorrer um $etor utilizando-se uma estrutura Para proximo.
CCrograma para determinar a m%dia de uma relao de n&meros e a quantidade de n&meros da relao
maiores que a m%dia.
Karia$eis
Bumerico )ux, i, j, Media, :oma, Ruant
Matriz numerico Ket^<G_
2nicio
CC#ntrada dos dados e c"lculo da m%dia
#scre$er ]0igite os elementos da relao *-6 para encerrar+]
3er )ux
Ket^6_ d )ux
i d 6
:oma d G
!aca enquanto Ket^i_ fe -6
:oma d :oma b )ux
3er )ux
i d i b 6
Ket^i_ d )ux
!imqenquanto
i d i - 6
Media d :omaCi
CC0eterminao do n&mero de componentes maiores que a m%dia
ara j d 6 ate i
:e Ket^j_ e Media entao
Ruant d Ruant b 6
!imqse
roximo
#scre$er ]M%dia da relao, ], Media, ]E Maiores que a m%dia, ], Ruant
)prendendo a rogramar rogramando numa 3inguagem )lgortmica #xecut"$el *23)+ - "gina =?
!im
85 ara um programa que determine o maior elemento de uma relao armazenada num $etor
pode-se usar o seguinte algoritmo. :upe-se que o maior elemento % a primeira componente do
$etor e, em seguida, percorre-se todo o $etor $erificando se alguma componente % maior do que
aquele $alor que, at% o momento, % o maior. #ncontrando-se uma componente de $alor maior, troca-
se o maior $alor.
CCrograma para determinar a maior componente de um $etor
Karia$eis
Bumerico )ux, i, j, Maior
Matriz numerico Ket^<G_
2nicio
#scre$er ]0igite os elementos da relao *-6 para encerrar+]
3er )ux
Ket^6_ d )ux
i d 6
!aca enquanto Ket^i_ fe -6
3er )ux
i d i b 6
Ket^i_ d )ux
!imqenquanto
i d i - 6
Maior d Ket^6_
ara j d 8 ate i
:e Ket^j_ e Maior entao
Maior d Ket^j_
!imqse
roximo
#scre$er ]. maior elemento da relao % ], Maior
!im
95 . programa a seguir exemplifica a possibilidade de que os ndices das componentes de um
$etor sejam dados atra$%s de expresses. . seu objeti$o % obter uma relao de elementos
]intercalando] os elementos de duas relaes dadas. .u seja, dadas duas relaes de n&meros, o
programa de$e gerar uma terceira relao onde os elementos de ordem mpar so os elementos da
primeira relao e os de ordem par os da segunda. or exemplo, se as relaes so *6, 9, =, 68+ e
*8, <, 6G, 6<+ o programa de$e gerar a relao *6, 8, 9, <, =, 6G, 68, 6<+. )ssim, se as relaes dadas
forem armazenadas nos $etores K e o e queremos gerar a terceira relao em Ket, de$eremos ter
Ket^6_ d K^6_, Ket^8_ d o^6_, Ket^9_ d K^8_, Ket^;_ d o^8_, e assim sucessi$amente. .bser$e que
se i % mpar Ket^i_ % a componente de K de ordem
i6
8
e se i % par Ket^i_ % a componente de o de
ordem
i
8
.
Karia$eis
Bumerico )ux, i, n, m
Matriz numerico K^8<G_
Matriz numerico o^8<G_
Matriz numerico Ket^<GG_
2nicio
#scre$er ]0igite o n&mero de elementos das relaes]
3er n
#scre$er ]0igite os elementos da primeira relao]
)prendendo a rogramar rogramando numa 3inguagem )lgortmica #xecut"$el *23)+ - "gina =@
ara i d 6 ate n
3er )ux
K^i_ d )ux
roximo
#scre$er ]0igite os elementos da segunda relao]
ara i d 6 ate n
3er )ux
o^i_ d )ux
roximo
m d 8rn
ara i d 6 ate m
:e (esto*i, 8+ d 6 entao
Ket^i_ d K^*ib8+C8_
:enao
Ket^i_ d o^iC8_
!imqse
roximo
ara i d 6 ate m
#scre$er Ket^i_
roximo
!im
#ste exemplo mostra tamb%m que a declarao de $ari"$eis compostas exige que cada uma
delas seja definida isoladamente. . 23) no aceitaria a definio
Karia$eis
Matriz Bumerico K^8<G_, o^8<G_, Ket^<GG_
;5 /omo no exemplo 6, o sistema pode gerar uma matriz. ara exemplificar isto,
apresentaremos um programa que gera a matri. identidade de ordem n. ara um inteiro positi$o
dado, a matri. identidade de ordem n % a matriz 2
n
d *i
rs
+, de ordem nxn, dada por i
rs
d 6, se r d s, e
i
rs
d G, se r s. #sta matriz % muito importante no estudo das matrizes sendo utilizada, por exemplo,
para a determinao da matri. inversa de uma matriz in$ers$el. or exemplo, se n d 9, temos
I
9
=
6 G G
G 6 G
G G 6
x
6
8
x
8
8
. . .x
n
8
. #scre$a um
programa que receba um $etor do (
n
, n dado, e fornea sua norma.
;5 . produto escalar de dois $etores do (
n
% a soma dos produtos das componentes
correspondentes. 2sto e, se u d *x
6
, x
8
, ..., x
n
+ e $ d *j
6
, j
8
, ..., j
n
+, o produto escalar %
x
6
.j
6
b x
8
.j
8
... b x
n
.j
n
. #scre$a um programa que receba dois $etores do (
n
, n dado, e fornea o
produto escalar deles.
=5 ) amplitude de uma relao de n&meros reais % a diferena entre o maior e o menor $alores
da relao. or exemplo, a amplitude da relao <, ?, 6<, 8, 89 86, 9, = % 89 - 8 d 86. #scre$a um
programa que receba uma relao de n&meros e fornea sua amplitude.
65 .s desvios de uma relao de n&meros reais so as diferenas entre cada n&mero e a m%dia
aritm%tica da relao. . desvio m;dio de uma relao de n&meros reais % a m%dia aritm%tica dos
$alores absolutos dos desvios. #scre$a um programa que receba uma relao de n&meros reais e
fornea o seu desvio m;dio.
@5 . desvio padro de uma relao de n&meros reais % a raiz quadrada da m%dia aritm%tica
dos quadrados dos des$ios. #scre$a um programa que receba uma relao de n&meros reais e
fornea o seu desvio padro.
:5 #scre$a um programa que fornea as componentes distintas de um $etor dado. or
)prendendo a rogramar rogramando numa 3inguagem )lgortmica #xecut"$el *23)+ - "gina ?<
exemplo, se o $etor dado for *9, 8, 6, 9, ;, 6, <, <, 8+ o programa de$e fornecer *9, 8, 6, ;, <+.
+*5 . exemplo 9 da seo 8.A pedia um programa para extrair o algarismo da casa das
unidades de um inteiro dado. )parentemente esta questo no tem interesse pr"tico. Kejamos um
problema cuja soluo depende desta questo. )lgumas empresas que realizam sorteios de prmios
entre seus clientes o fazem atra$%s dos sorteios da loteria federal, sendo ganhador o n&mero
formado pelos algarismos das casas das unidades dos n&meros sorteados no cinco prmios da
referida loteria. or exemplo, se o sorteio da loteria federal deu como resultado os n&meros 89;<+,
GG899, 6689=, G689; e 89;<), o prmio da tal empresa seria dado ao cliente que possusse o bilhete
de n&mero +9=;). #scre$a um programa que receba os n&meros sorteados pela loteria federal e
fornea o n&mero que ganhar" o prmio de acordo com as regras acima *$ale obser$ar que o
programa no funcionar" corretamente se um dos n&meros sorteados for maior que 98?=?,
conforme obser$ao final da seo 8.=. Bo se preocupe com isto\ . que nos interessa aqui no % o
programa e sim a aprendizagem da l'gica de programao+.
++5 #scre$a um programa que insira um $alor dado num $etor dado numa posio dada. or
exemplo se o $etor dado for *9, @, <, A, 68, 9+, o $alor dado for 6G e a posio dada for ;, o
programa de$e fornecer *9, @, <, +*, A, 68, 9+.
+)5 #scre$a um programa que insira um $alor dado num $etor ordenado dado de modo que o
$etor continue ordenado. or exemplo, se o $etor dado for *8, <, ?, 6G, 68, 69+ e o $alor dado for =,
o programa de$e fornecer o $etor *8, <, =, ?, 6G, 68, 69+.
+85 #scre$a um programa que delete uma componente de ordem dada de um $etor dado. or
exemplo, se o $etor dado for *8, <, ?, 6G, 68, 69+ e a componente a ser deletada for a de ordem ;,
programa de$e fornecer o $etor *8, <, ?, 68, 69+.
+95 #scre$a um programa que, dadas duas relaes de n&meros, cada uma delas com n&meros
distintos, fornea os n&meros que aparecem nas duas listas. or exemplo. se as relaes forem
*A, 98, ;<, 86, <=, =?, ;8, <<+ e *8;, ;8, 98, 68, ;<, 66, =?, ==, ?@+, o programa de$e fornecer o $etor
*98, ;<, =?, ;8+.
+;. #scre$a um programa que, dado um $etor ordenado, fornea a maior diferena entre duas
componentes consecuti$as, fornecendo tamb%m as ordens das componentes que geraram esta maior
diferena. or exemplo, se o $etor dado for *9, <, A, 6=, 6?, 8G, 8=, 96+, o programa de$e fornecer
como maior diferena o $alor ? *6= - A+, e as ordens ; e 9.
+=5 Mma a$aliao escolar consiste de <G questes objeti$as, cada uma delas com < opes,
*6, 8, 9, ; e <+, sendo apenas uma delas $erdadeira. #scre$a um programa que receba a sequncia de
respostas corretas, o ga"arito, e corrija um carto-resposta dado.
+65 #scre$a um programa que fornea o $alor num%rico de um polinZmio *x+ dado, para um
$alor de x dado. or exemplo, se o polinZmio dado for *x+ d x
9
b 8x - 6 e o $alor de x dado for 8, o
programa de$e fornecer *8+ d 8
9
b 8x8 - 6 d 66.
+@5 .*s+ $alor*es+ de maior frequncia de uma relao de $alores num%ricos %*so+
chamado*s+ moda da relao. #scre$a um programa que receba uma relao de notas escolares
maiores do que zero e menores do que ou iguais a 6G, com uma casa decimal, e fornea a*s+
moda*s+ desta relao. or exemplo, se a relao de notas for *@,GE 9,<, ;,<E @,GE =,GE ;,<E =,GE 9,<E
8,<E =,GE A,G+ o programa de$e fornecer o $alor =,G *frequncia 9+.
+:5 #scre$a um programa que receba um n&mero inteiro n e fornea o n&mero formado pelos
algarismos de n escritos na ordem in$ersa. or exemplo se o n&mero dado for 9@?=, o programa
de$e fornecer =?@9.
)*5 ) matem"tica pro$a que a con$erso de um n&mero do sistema decimal para o sistema
bin"rio pode ser feita atra$%s de di$ises sucessi$as do n&mero e dos quocientes sucessi$amente
obtidos por 8, sendo ento o n&mero bin"rio dado pela sequncia iniciada por 6 e seguida pelos
restos obtidos nas di$ises sucessi$as, na ordem in$ersa em que so obtidos. or exemplo, para se
con$erter 88 do sistema decimal para o sistema bin"rio temos, (esto*88, 8+ d GE (esto*66, 8+ d 6E
(esto*<, 8+ d 6E (esto*8, 8+ d G e, portanto, 88s d *6G66G+
8
. #scre$a um programa que con$erta um
n&mero positi$o dado no sistema decimal de numerao para o sistema bin"rio, usando o algoritmo
)prendendo a rogramar rogramando numa 3inguagem )lgortmica #xecut"$el *23)+ - "gina ?=
acima.
)+5 . exerccio 6G da seo ;.< solicita$a um programa que determinasse a decomposio em
atores primos, fornecendo os fatores primiti$os e suas respecti$as multiplicidades. Ba ocasio os
fatores primos e suas multiplicidades eram apenas exibidos no sendo armazenados. Modifique o
programa referido para que os fatores primos e as suas multiplicidades sejam armazenados, antes de
serem exibidos.
))5 ) Mni$ersidade !ederal de )lagoas adota o sistema de $erificao de aprendizagem
listado no exemplo < da seo 9.9, com o adendo de que ter" direito a uma reavaliao um aluno
que obti$er uma nota inferior a ?,G em algum bimestre. Beste caso, a nota obtida na rea$aliao
substitui a menor das notas bimestrais obtidas. #scre$a um programa que, recebendo as notas das
a$aliaes bimestrais e, se for o caso, a nota da rea$aliao e, se for o caso, a nota da pro$a final,
fornea a m%dia final de um aluno da M!)3 e a sua condio em relao 1 apro$ao.
)85 #scre$a um programa que fornea a transposta de uma matriz dada.
)95 Mm dos m%todos para a se estudar as solues de um sistema linear de n equa(es a n
incgnitas aplica opera(es elementares so"re as lin&as da matri. dos coeicientes, sendo a
permuta de duas linhas uma destas operaes elementares. #scre$a um programa que permute as
posies de duas linhas de uma matriz dadas.
);5 Mma matriz quadrada % dita triangular se os elementos situados acima de sua diagonal
principal so todos nulos. #scre$a um programa que receba uma matriz quadrada e $erifique se ela
% triangular.
)=5 . exemplo ? da seo =.8 apresentou um programa para armazenar uma matriz sim%trica.
#ste exerccio quer algo contr"rio, escre$a um programa que $erifique se uma matriz dada %
sim%trica.
)6. #scre$a um programa que receba uma matriz e totalize suas colunas. or exemplo, se a
matriz dada for , o programa de$e fornecer a matriz . Baturalmente um programa
deste seria utilizado para totalizar as colunas de uma tabela de $alores num%ricos.
)@5 #scre$a um programa que determine as m%dias de cada uma das linhas de uma matriz. or
exemplo, se a matriz dada for
,
o programa de$e fornecer a matriz
):5 #scre$a um programa que determine o menor $alor de cada uma das linhas de uma matriz
dada, fornecendo o ndice da coluna que cont%m este menor $alor. or exemplo, se a matriz dada for
, o programa de$e fornecer uma tabela do tipo
3inha Menor $alor /oluna
6 9 6
8 8 8
9 6 ;
Mm programa como este poderia receber os preos de di$ersos produtos praticados por $"rios
supermercados e forneceria, para cada produto, o menor preo e o supermercado que pratica este
melhor preo.
8*5 Bo exemplo ? da seo anterior $imos como armazenar uma matriz sim%trica. Ba pr"tica,
uma matriz deste tipo ocorre, por exemplo, numa tabela de dist7ncias entre cidades, como a
)prendendo a rogramar rogramando numa 3inguagem )lgortmica #xecut"$el *23)+ - "gina ??
seguinte tabela que d" as dist7ncias a%reas, em {m, entre as capitais dos estados nordestinos
*)racaju, !ortaleza, >oo essoa, Macei', Batal, (ecife, :al$ador, :o 3us, Jeresina+.
) ! > M B ( : :3 J
) G @68 ;9@ 86G <<G 9A@ 8=? 686@ 68?8
! @68 G <=8 ?9G ;;; =;G 6G6@ =;G ;98
> ;6@ <=8 G 8@; 6;; 66G ?<@ 68G@ A@?
M 86G ?9G 8A; G ;89 6A6 ;=; 688G 668=
B <<G ;6; 6;; ;89 G 8<8 @<8 6G=; @;9
( 9A@ =;G 66@ 6A6 8<8 G =<; 66A? A9<
: 8=? 6G6@ ?<@ ;=; @<8 =<; G 696A 6GGG
:3 686@ =;G 68G@ 688G 6G=; 66A? 696A G 98G
J 68?8 ;98 A@? 668= @;9 A9< 6GGG 98G G
2magine que uma companhia de transporte a%reo estabelea que uma $iagem entre duas
cidades que distem mais de ;GG {m de$e ter uma escala. #scre$a um programa que armazene uma
tabela das dist7ncias a%reas entre n cidades e dadas duas cidades determine, se for o caso, a cidade
em de$e se realizar uma escala para que o percurso seja o menor poss$el. or exemplo, nas
condies estabelecidas, a $iagem entre Macei' e :o 3us de$e ter uma escala em !ortaleza *o
percurso Macei'C!ortalezaC:o 3us % de 69?G {mE o percurso, por exemplo, Macei'C(ecifeC:o
3us % de 69@@ {m+
8+5 #sta questo no en$ol$e $ari"$eis compostas. #la se encontra neste captulo para se
exercitar formatao de sada. #scre$a um programa para gerar uma tabuada para multiplicao,
exibindo-a na forma usual de tabuadas.
/Cserva%&o
Para oCter o caderno das solu%Fes dos exerccios propostos Casta encaminGar eHmail
para IaimeJccen5ufal com assunto RESP/S.AS #"VR/ "#A e contendo -/'EK
CA.E4/R"A !docenteK discenteK autodidata$K C"0A0ELESA.A0/ eK se for o casoK
"-S.".U"12/LCURS/5
65 PesDuisa e /rdena%&o
65+ "ntrodu%&o
#mbora os problemas que sero abordados neste captulo sejam exerccios de manipulao de
$etores, optamos por destac"-los numa seo especfica de$ido 1 import7ncia deles para a
computao como um todo e, em particular, para o desen$ol$imento da l'gica de programao.
Mma pesquisa *ou busca ou consulta0 consiste em se $erificar se um dado $alor % uma
componente de uma $ari"$el composta. ara exemplificar, consideremos o (egistro Bacional de
Keculos )utomotores *(#B)K)M+. . (#B)K)M cont%m dados de todos os $eculos registrados
nos 0epartamentos #staduais de Jr7nsito, dados que incluem, entre outros, a placa do $eculo, o
n&mero do motor, o nome do propriet"rio, o /! do propriet"rio. #$identemente, pode ser
necess"rio se $erificar se uma determinada placa % de um $eculo registrado ou se um dado /! %
de algu%m que % propriet"rio de algum $eculo.
) questo da ordenao *tamb%m chamada classiicao+ foi introduzida na seo 9.9 e
consiste em se colocar numa ordem preestabelecida uma relao de $alores. Ba seo referida,
mostramos como ordenar uma relao contendo trs $alores. Beste captulo, apresentaremos
algoritmos para ordenar uma relao com qualquer n&meros de $alores. ) ordenao de uma
relao % realizada para que a leitura dos resultados seja facilitada ou para que, como $eremos a
seguir, pesquisas sejam realizadas com mais eficincia.
65) PesDuisa seDuencial
) pesquisa sequencial % o m%todo mais simples e mais 'b$io *embora, o mais ineficiente+ de
se realizar uma busca. Bo nosso caso, em que realizaremos pesquisas num $etor, a pesquisa
sequencial consiste em se percorrer o $etor comparando cada componente com o $alor a ser
pesquisado.
Karia$eis
Bumerico )ux, i, j, x, os
Matriz numerico Ket^<G_
2nicio
#scre$er ]0igite os elementos da relao *-6 para encerrar+]
3er )ux
Ket^6_ d )ux
i d 6
!aca enquanto Ket^i_ fe -6
3er )ux
i d i b 6
Ket^i_ d )ux
!imqenquanto
i d i - 6
#scre$er ]0igite o $alor a ser pesquisado]
3er x
j d 6
!aca enquanto *Ket^j_ fe x+ e *j f i+
j d j b 6
!imqenquanto
:e Ket^j_ d x entao
os d j
#scre$er x, ] encontrado na posio ], os
:enao
)prendendo a rogramar rogramando numa 3inguagem )lgortmica #xecut"$el *23)+ - "gina ?A
#scre$er x, ] no encontrado]
!imqse
!im
658 PesDuisa Cinria
X f"cil perceber que a pesquisa sequencial % muito ineficiente. 2magine que se queira
pesquisar num dicion"rio o significado da pala$ra .um"aia. elo m%todo anterior, comearamos na
letra a e iramos de pala$ra em pala$ra at% encontrar a pala$ra cujo significado estamos procurando
*a prop'sito, zumbaia significa cortesia exageradaE cumprimento ruidoso e ser$il+.
#xiste um m%todo, chamado pesquisa "inria, que se aplica quando o $etor possui seus
elementos ordenados *que % o caso de um dicion"rio+ e % bem mais eficiente que a pesquisa
sequencial. #ste m%todo consiste em se comparar o $alor a ser pesquisado x com o $alor da
componente que ocupa a posio central do $etor. :e x for igual a esta componente a pesquisa se
encerraE se x for menor que esta componente, repete-se o raciocnio com a ]metade inferior] do
$etorE se x for maior que a componente central, repete-se o raciocnio com a ]metade superior] do
$etor. 2sto se repete at% que x seja encontrado ou que se tenha condies de se afirmar que x no est"
no $etor.
or exemplo, se se pretende pesquisar x d 6= no $etor Ket d *6, 8, ;, ?, A, 66, 69, 6;, 6=, 6@,
6A, 88, 8;+, compara-se 6= com o termo central do $etor *69+E como x % maior que este termo
central, repete-se o raciocnio com o $etor Ket6 d *6;, 6=, 6@, 6A, 88, 8;+. )ssim compara-se 6=
com o no$o ]termo central] 6@E como x % menor, raciocina-se com o $etor Ket8 d *6;, 6=+. )gora o
termo central % 6; e x % maior que ele. assa-se ento para o $etor Ket9 d k6=l e a a pesquisa se
encerra com sucesso. . interessante da implementao deste m%todo % que no h" necessidade da
criao destes $etores. #les so criados abstratamente atra$%s de duas $ari"$eis Prim e Klt que
estabelecem quais so as primeira e <ima componentes do $etor que se est" analisando.
CCrograma para pesquisa pelo m%todo da pesquisa "inria
Karia$eis
Bumerico )ux, i, x, rim, Mlt, /ent
Matriz numerico Ket^<G_
2nicio
#scre$er ]0igite os elementos da relao *-6 para encerrar+]
3er )ux
Ket^6_ d )ux
i d 6
!aca enquanto Ket^i_ fe -6
3er )ux
i d i b 6
Ket^i_ d )ux
!imqenquanto
i d i - 6
CC/omandos para a pesquisa bin"ria
#scre$er ]0igite o $alor a ser pesquisado]
3er x
rim d 6
Mlt d i
/ent d 2nteiro**rim b Mlt+C8+
!aca enquanto *Ket^/ent_ fe x+ e *rim f Mlt+
:e Ket^/ent_ e x entao
Mlt d /ent - 6
:enao
)prendendo a rogramar rogramando numa 3inguagem )lgortmica #xecut"$el *23)+ - "gina @G
rim d /ent b 6
!imqse
/ent d 2nteiro**rim b Mlt+C8+
!imqenquanto
:e Ket^/ent_ d x entao
#scre$er x, ] encontrado na posio ], /ent
:enao
#scre$er x, ] no encontrado]
!imqse
!im
) pesquisa "inria tamb%m permite *nos sistemas que admitem $ari"$eis compostas como
par7metros de funes+ um bom exemplo de uma uno recursiva. #mbora o 23) no aceite
$ari"$eis compostas como par7metros, $amos apresentar a soluo recursi$a da pesquisa bin"ria
que poderia ser implementada neste sistema, caso o impedimento anterior no existisse.
CC!uno recursi$a para a pesquisa bin"ria *no execut"$el+
!uncao esqHin(ec*K, rim, Mlt, x+
CCK seria um $etor, rim, Mlt e x $ari"$eis do tipo )umerico
2nicio
/ent d 2nteiro**rim b Mlt+C8+
:e *K^/ent_ d x+ ou *rim e Mlt+ entao
:e K^/ent_ d x entao
#scre$er x , ] encontrado na posio ], /ent
:enao
#scre$er x, ] no encontrado]
!imqse
:enao
:e K^/ent_ e x entao
(etornar esqHin(ec*K, rim, /ent - 6+
:enao
(etornar esqHin(ec*K, /ent b 6, Mlt+
!imqse
!imqse
!im
659 /rdena%&o pelo algoritmo SelectSort
. algoritmo SelectSort consiste em se selecionar, sucessi$amente, o maior elemento, o
segundo maior elemento, o terceiro maior elemento, etc., e, ap's cada seleo, armazenar o $alor
selecionado num $etor auxiliar na posio que mant%m o tal $etor auxiliar ordenado. or exemplo,
se se pretende a ordenao em ordem crescente, o ]primeiro] maior $alor % armazenado na <ima
posio do $etor auxiliarE o segundo maior $alor % armazenado na pen<ima posio do $etor
auxiliar e assim sucessi$amente. ara que se obtenha, por exemplo, o segundo maior $alor do $etor,
exclumos o ]primeiro] maior $alor atribuindo a esta componente um $alor sabidamente menor do
que todos os $alores armazenados no $etor. or exemplo, se os $alores do $etor so positi$os pode-
se atribuir -6 a cada componente j" selecionada e j" armazenada no $etor auxiliar.
ara exemplificar o m%todo, $amos ordenar o $etor Ket d *<, 8, ?, 6, @+. Hasta percorrer o
$etor < $ezes selecionando sucessi$amente @, ?, <, 8 e 6 e realizando as seguintes atribuies,
6. )ux d * , , , , @+
)prendendo a rogramar rogramando numa 3inguagem )lgortmica #xecut"$el *23)+ - "gina @6
Ket d *<, 8, ?, 6, -6+
8. )ux d * , , , ?, @+
Ket d *<, 8, -6, 6, -6+
9. )ux d * , , <, ?, @+
Ket d *-6, 8, -6, 6, -6+
;. )ux d * , 8, <, ?, @+
Ket d *-6, -6, -6, 6, -6+
<. )ux d *6, 8, <, ?, @+
Ket d *-6, -6, -6, -6, -6+,
ara finalizar, basta armazenar nas componentes de Ket as componentes de )ux.
CC.rdenao de um $etor pelo algoritmo :elect:ort
Karia$eis
Bumerico )ux, i, j, I, x, Maior
Matriz numerico Ket^<G_
Matriz numerico )ux^<G_
2nicio
#scre$er ]0igite os elementos da relao *-6 para encerrar+]
3er )ux
Ket^6_ d )ux
i d 6
!aca enquanto Ket^i_ fe -6
3er )ux
i d i b 6
Ket^i_ d )ux
!imqenquanto
i d i - 6
CC/omandos do :elect:ort
ara j d 6 ate i
Maior d Ket^6_
x d 6
ara I d 6 ate i
:e Ket^I_ e Maior entao
Maior d Ket^I_
x d I
!imqse
roximo
)ux^i - j b 6_ d Maior
Ket^x_ d -6
roximo
ara j d 6 ate i
Ket^j_ d )ux^j_
roximo
ara j d 6 ate i
#scre$er Ket^j_
roximo
!im
65; /rdena%&o pelo algoritmo AuCCleSort
. algoritmo 6u""leSort consiste em se percorrer o $etor a ser ordenado $"rias $ezes,
comparando-se cada elemento com o seguinte, permutando suas posies se eles no esti$erem na
)prendendo a rogramar rogramando numa 3inguagem )lgortmica #xecut"$el *23)+ - "gina @8
ordem pretendida. )ssim, cada $ez que o $etor % percorrido, o maior elemento ainda no ordenado %
colocado na sua posio de ordenao definiti$a. Baturalmente, o $etor ser" percorrido at% que no
haja mais trocas a se fazer, quando ento ele estar" ordenado. or exemplo, se o $etor a ser
ordenado em ordem crescente fosse Ket d *<, 6, A, 9, ?, 8+, teramos as seguintes configuraes para
Ket, de acordo com a ordem de percurso,
ercurso Ket
G *<, 6, A, 9, ?, 8+
6 *6, <, A, 9, ?, 8+
*6, <, 9, A, ?, 8+
*6, <, 9, ?, A, 8+
*6, <, 9, ?, 8, A+
8 *6, 9, <, ?, 8, A+
*6, 9, <, 8, ?, A+
9 *6, 9, 8, <, ?, A+
; *6, 8, 9, <, ?, A+
CC.rdenao de um $etor por Hubble:ort
Karia$eis
Bumerico )ux, i, j, I, x
Matriz numerico Ket^<G_
3ogico Jroca
2nicio
#scre$er ]0igite os elementos da relao *-6 para encerrar+]
3er )ux
Ket^6_ d )ux
i d 6
!aca enquanto Ket^i_ fe -6
3er )ux
i d i b 6
Ket^i_ d )ux
!imqenquanto
i d i - 6
CC/omandos do Hubble:ort
j d i
Jroca d $erdadeiro
!aca enquanto Jroca d $erdadeiro
j d j - 6
Jroca d falso
ara I d 6 ate j
:e Ket^I_ e Ket^I b 6_ entao
)ux d Ket^I_
Ket^I_ d Ket^I b 6_
Ket^I b 6_ d )ux
Jroca d $erdadeiro
!imqse
roximo
!imqenquanto
ara j d 6 ate i
#scre$er Ket^j_
roximo
!im
)prendendo a rogramar rogramando numa 3inguagem )lgortmica #xecut"$el *23)+ - "gina @9
.bser$e a utilizao da $ari"$el do tipo Logico Jroca. X ela que $erifica se hou$e alguma
troca, para que se faa um no$o percurso no $etor, atra$%s do comando =roca F verdadeiro. Ruando
no acontece mais nenhuma troca, o $etor j" est" ordenado, e o $alor da $ari"$el Jroca se mant%m
also. )ssim, a estrutura Faca enquanto =roca F verdadeiro se encerra.
.bser$e tamb%m que o comando j d j - 6 % para que um no$o percurso no compare os
elementos que j" esto ordenados.
65= Exerccios propostos
6. ) maioria das pessoas acham que so azaradas quando procuram uma ficha numa pilha,
sempre tendo receio que a ficha procurada seja uma das <imas da pilha. Mma pessoa que acredite
ser assim azarada pode pesquisar a tal ficha pesquisando, sucessi$amente, a parte superior e a parte
inferior da pilha. )ssim, $erifica a primeira ficha, em seguida, a <ima, em seguida, a segunda
ficha, em seguida, a pen<ima e assim sucessi$amente. #scre$a um programa que implemente este
m%todo de pesquisa.
8. Mma $erso melhorada do SelectSort para um $etor que possui i componentes consiste em
se comparar a maior dentre as i - 6 primeiras componentes com a <ima componente, permutando-
se suas posies se aquela maior componente for menor do que esta <ima componente, colocando-
se ento o maior elemento na posio desejada. #ste raciocnio % repetido no $etor das i - 6
primeiras componentes e assim sucessi$amente. #scre$a um programa que implemente esta $erso
do SelectSort.
9. ) algoritmo InsertSort para ordenao de um $etor Ket consiste em se tomar um $etor
auxiliar )ux, contendo uma &nica componente Ket^6_, )ux d *Ket^6_+. #m seguida, insere-se as
demais componentes de Ket, uma a uma, em )ux de modo que )ux se mantenha ordenado, como
solicitado no exerccio 68 da seo =.;. #scre$a um programa que implemente o InsertSort.
/Cserva%&o
Para oCter o caderno das solu%Fes dos exerccios propostos Casta encaminGar eHmail
para IaimeJccen5ufal com assunto RESP/S.AS #"VR/ "#A e contendo -/'EK
CA.E4/R"A !docenteK discenteK autodidata$K C"0A0ELESA.A0/ eK se for o casoK
"-S.".U"12/LCURS/5
@5 Cadeias de caracteres
@5+ "ntrodu%&o
. estudo especfico do tipo de dados %aracter propicia a oportunidade de discutir $"rias
questes importantes para a pr"tica da computao e para o desen$ol$imento da l'gica de
programao. 0e um modo geral, os sistemas de computao para desen$ol$imento de programas
possuem $"rias funes pr%-definidas para a manipulao de cadeias caracteres *nestes sistemas
chamadas strings+. Bo 23) esto definidas duas funes pr%-definidas, al%m de um operador, com o
objeti$o aqui discutido. ara o objeti$o deste li$ro, este n&mero pequeno de funes pr%-definidas
do 23) % muito &til, pois permite que sejam discutidos os algoritmos que implementam as outras
funes, o que % bem interessante para o desen$ol$imento da l'gica de programao.
0entre as funes para manipulao de caracteres que esto definidas nos $"rios ambientes
de programao esto funes que deletam um dado n&mero de caracteres a partir de uma posio
dada, que inserem uma cadeia de caracteres em outra cadeia de caracteres e que transformam um
dado $alor num%rico numa cadeia de caracteres.
@5) / operador concatenao e as fun%Fes Parte e Valor
. operador concatenao *smbolo N+ atua em operadores do tipo cadeia caracteres anexando
a segunda cadeia 1 primeira. or exemplo, a execuo da sequncia de comandos
s6 d ])H)]
s8 d ]/)J#]
s d s6 b s8
#scre$er s
escre$er" na tela a pala$ra )H)/)J#.
) funo 5alor con$erte uma cadeia de caracteres em um n&mero. ara que a con$erso seja
poss$el, os caracteres da cadeia argumento de$em ser dgitos, podendo o primeiro deles ser um dos
caracteres N ou H e um dos caracteres a partir do segundo ser um ponto final, :e o primeiro caractere
no for um dos permitidos, a funo retorna zero e se um dos outros caracteres no for um dgito ou
existirem dois pontos finais adjacentes, a funo retorna o n&mero correspondente 1 subcadeia que
permitiu a con$erso. ) sintaxe da funo 5alor %
Kalor*s+
onde s % um $alor do tipo caractere.
or exemplo, a execuo da sequncia de comandos
s6 d ]98;<]
s8 d ];.@A?]
s9 d ]89x;<]
s; d ]x6]
x d Kalor*s6+
j d Kalor*s8+
z d Kalor*s9+
` d Kalor*s;+
#scre$er x,] ], j, ] ], z, ] ], `
escre$e na tela 98;< ;.AG 89 G. Baturalmente, x, j, z e ` so $ari"$eis num%ricas e uma
diferena importante entre x e s6 % que com x se pode realizar operaes aritm%ticas.
X de se esperar que algu%m que est" aprendendo a programar se pergunte, para que
transformar uma cadeia de caracteres em um n&meroa Mma aplicao que necessita esta
transformao % a manipulao de matrculas de funcion"rios de uma empresa ou de estudantes de
)prendendo a rogramar rogramando numa 3inguagem )lgortmica #xecut"$el *23)+ - "gina @<
uma escola, n&meros de contas bancarias, inscries no %adastro *eral de %ontri"uintes, etc..
Ruase sempre estes identificadores so dados por cadeias de caracteres que en$ol$em, al%m de
dgitos, traos, barras e, at%, letras. or exemplo, hou$e um tempo que as matrculas dos alunos da
Mni$ersidade !ederal de )lagoas tinham o formato 6AAAL8;0GG@KA, onde 6AAA indica$a o ano de
ingresso, L indica$a o n$el do curso *no exemplo, graduao+, 8; indica$a o c'digo do curso, 0
referia o turno *no exemplo, diurno+, GG@ indica$a um n&mero de s%rie dentre todos os alunos do
curso diurno de graduao 8; ingressantes em 6AAA, K referia a forma de ingresso *no exemplo,
ingresso por vesti"ular+ e A era um dgito veriicador que ser$e para detectar poss$eis erros de
digitao. /omo $eremos no exemplo @ da seo @.;, a determinao do digito veriicador en$ol$e
operaes aritm%ticas com os n&meros correspondentes aos dgitos que compem a matrcula, a
conta ou a inscrio. )ssim, necessitaremos transformar estes caracteres em n&meros para que
possamos realizar as operaes exigidas.
.utra aplicao importante da transformao de cadeia de caracteres em n&meros ocorre nos
sistemas $isuais de programao. Bormalmente, estes sistemas no possuem um comando do tipo
Ler, sendo a entrada dos dados feita atra$%s de "oxes de edio, oferecidos pelo sistema para a
criao de interfaces. Bestes boxes de edio o usu"rio digita os dados de entrada, mesmo os
num%ricos, como uma cadeia de caracteres ha$endo ento a necessidade da transformao.
) outra funo do 23) para manipulao de cadeias de caracteres % a funo Parte que
retorna uma subcadeia da cadeia que lhe % passada como argumento. #sta funo possui trs
par7metros, a cadeia da qual se quer retornar uma subcadeia, um inteiro que indica a posio a
partir da qual a subcadeia pretendida ocorre na cadeia e um outro inteiro que indica quantos
caracteres tem a subcadeia pretendida. ) funo Parte possui a seguinte sintaxe
arte*s, p, n+
onde, como foi dito acima, s % uma cadeia de caracteres, p e n so inteiros, p indicando a posio a
partir da qual est" a subcadeia pretendida e n o n&mero de caracteres da tal subcadeia.
or exemplo, a execuo da sequncia de comandos
s6 d ]abacate]
s8 d arte*s6, ;, 8+
#scre$er s8
escre$e na tela a pala$ra ca. Kale obser$ar que se o n&mero de caracteres pretendido for maior que
o n&mero de caracteres que existem a partir da posio p, a funo retornar" toda a subcadeia a
partir da posio p. or exemplo, se o segundo comando da sequncia acima fosse
s8 d arte*s6, ;, 6G+ seria exibido na tela a pala$ra cate.
@58 Exemplos Parte V""
Besta seo, apresentaremos as implementaes em 23) de $"rias funes disponibilizadas
pelos di$ersos sistemas de computao para manipulao de cadeias de caracteres.
+5 Kejamos, como primeiro exemplo, uma funo que delete um dado n&mero de caracteres de
uma cadeia dada, a partir de uma posio dada. ara isto, a funo ter" par7metros idnticos aos
par7metros da funo Parte, a cadeia de caracteres *s+, a posio a partir da qual ocorrer" a excluso
*p+ e o n&mero de caracteres a serem excludos *n+. ) id%ia da funo % bem simples *c % o
comprimento de s+, se p b n c, a excluso se dar" com a concatenao dos p - 6 primeiros
caracteres com os c - *p b n+ b 6 <imos caracteresE se p b n e s, basta se tomar os p - 6 primeiros
caracteres.
Karia$eis
/aracter s
Bumerico c, p, n
!uncao 0elete*s, p, n+
)prendendo a rogramar rogramando numa 3inguagem )lgortmica #xecut"$el *23)+ - "gina @=
2nicio
c d /omprimento*s+
:e p b n fd c entao
s d arte*s, 6, p - 6+ b arte*s, p b n, c - p - n b 6+
:enao
s d arte*s, 6, p - 6+
!imqse
(etornar s
!im
)5 Kejamos agora uma funo que insere uma cadeia de caracteres em outra cadeia, a partir de
uma posio dada. or exemplo, queremos uma funo Insere que sendo ati$ada por 2nsere*]abate],
]ca], ;+ retorne ]abacate]. 0efiniremos ento uma funo com trs par7metros, a cadeia que
receber" a insero *s6+, a cadeia que ser" inserida *s8+ e a posio de insero *p+. Baturalmente, se
c d /omprimento*s6+, a insero s' pode ser realizada se p fd c b 6. Beste caso, se p d c b 6, a
insero % obtida, simplesmente, concatenando-se s6 e s8E se p f c b 6, a insero % obtida
concatenando-se os p - 6 primeiros caracteres de s6 com s8 e com os c - *p -6+ <imos caracteres de
s8.
Karia$eis
/aracter s6, s8
Bumerico c, p
!uncao 2nsere*s6, s8, p+
2nicio
c d /omprimento*s6+
:e p e c b 6 entao
#scre$er ]2nsero imposs$el]
:enao
:e p d c b 6 entao
s6 d s6 b s8
:enao
s6 d arte*s6, 6, p - 6+ b s8 b arte*s6, p, c - p b 6+
!imqse
(etornar s6
!imqse
!im
85 )gora uma funo cuja ao % in$ersa da ao funo 5alor, recebe um n&mero e o
armazene como uma cadeia de caracteres. :e o n&mero % um n&mero inteiro, a funo % simples.
Hasta extrair os n&meros correspondentes aos algarismos do n&mero, transform"-los nos respecti$os
algarismos e concaten"-os em seguida. ara esta concatenao, inicializamos uma cadeia de
caracteres com a cadeia contendo um espao em branco e concatenamos os tais algarismos, um a
um.
Karia$eis
Bumerico x, r, n
/aracter s
!uncao 2ntara/arac *n+
2nicio
s d ] ]
:e n ed G entao
x d n
:enao
x d -n
)prendendo a rogramar rogramando numa 3inguagem )lgortmica #xecut"$el *23)+ - "gina @?
!imqse
!aca enquanto *x e G+
r d (esto*x, 6G+
!aca caso
/aso r d G,
s d ]G] b s
/aso r d 6,
s d ]6] b s
/aso r d 8,
s d ]8] b s
/aso r d 9,
s d ]9] b s
/aso r d ;,
s d ];] b s
/aso r d <,
s d ]<] b s
/aso r d =,
s d ]=] b s
/aso r d ?,
s d ]?] b s
/aso r d @,
s d ]@] b s
/aso r d A,
s d ]A] b s
!imqcaso
x d 2nteiro*xC6G+
!imqenquanto
s d arte*s, 6, /omprimento*s+ - 6+
:e n f G entao
s d ]-] b s
:enao
:e n d G entao
s d ]G]
!imqse
!imqse
(etornar s
!im
.bser$e que o comando s d arte*s, 6, /omprimento*s+ - 6+ % para eliminar o espao em
branco que inicializou s *isto no seria necess"rio se o sistema aceitasse inicializar uma cadeia de
caracteres com a cadeia va.ia, ]]+. .bser$e tamb%m que a seleo Se n D H 222 % para tratar o caso
dos n&meros negati$os e a seleo Se n F H 222 % para tratar o caso n d G, j" que o 23) no trata bem
a operao (esto*G, 6G+. Kale obser$ar tamb%m que o comando Faca caso que concatena os
caracteres e transforma em caracteres n&meros positi$os menores que dez no seria necess"rio em
sistemas de objeti$os mais gerais, estes sistemas possuem funes pr%-definidas para realizar estas
aes.
ara o caso dos n&meros decimais *chamados tamb%m de n&meros de ponto lutuante+,
podemos separar o n&mero nas suas partes inteira e fracion"ria e aplicar a funo acima a cada uma
destas partes. ara transformar num inteiro, como o sistema trabalha apenas com duas casas
decimais, multiplicamos a parte fracion"ria por 6GG. :e o n&mero a ser con$ertido est" armazenado
na $ari"$el Bum, a sequncia de comandos abaixo realiza a con$erso aqui discutida.
2nt d 2nteiro*Bum+
)prendendo a rogramar rogramando numa 3inguagem )lgortmica #xecut"$el *23)+ - "gina @@
f d 6GGr*Bum - 2nt+
f d 2nteiro*f+
:e f f G entao
f d - f
!imqse
s d 2ntara/arac *2nt+ b ].] b 2ntara/arac *f+
#scre$er s
95 !inalmente, uma funo que $erifique se uma cadeia de caracteres % subcadeia de outra
cadeia de caracteres. #sta funo, em processadores de texto, ser$e para localizar cadeias de
caracteres dentro de um texto.
Karia$eis
/aracter s6, s8, s
Bumerico c6, c8, i, p
!uncao os*s6, s8+
2nicio
p d G
c6 d /omprimento*s6+
c8 d /omprimento*s8+
i d 6
s d arte*s6, i, c8+
!aca enquanto *s fe s8+ e *i f c6 - c8 b 6+
i d i b 6
s d arte*s6, i, c8+
!imqenquanto
:e s d s8 entao
p d i
!imqse
(etornar p
!im
@59 Exemplos Parte V"""
)gora apresentaremos programas bastante usuais em computao e que usam as funes para
manipulao de cadeias de caracteres pr%-definidas do sistema e as funes definidas acima.
;5 . primeiro programa tem o objeti$o de con$erter uma data dada no formato americano
mmCddCaaaa para o formato brasileiro ddCmmCaaaa.
Karia$eis
/aracter 0ia, Msa, Hr, s6, s8
Bumerico c, p, n
!uncao 2nsere*s6, s8, p+
2nicio
c d /omprimento*s6+
:e p e c b 6 entao
#scre$er ]2nsero imposs$el]
:enao
:e p d c b 6 entao
s6 d s6 b s8
:enao
s6 d arte*s6, 6, p - 6+ b s8 b arte*s6, p, c - p b 6+
!imqse
)prendendo a rogramar rogramando numa 3inguagem )lgortmica #xecut"$el *23)+ - "gina @A
(etornar s6
!imqse
!im
!uncao 0elete*s6, p, n+
2nicio
c d /omprimento*s6+
:e p b n fd c entao
s6 d arte*s6, 6, p - 6+ b arte*s6, p b n, c - p - n b 6+
:enao
s6 d arte*s6, 6, p - 6+
!imqse
(etornar s6
!im
2nicio CCrograma principal
#scre$er ]0igite a data no formato mmCddCaaaa]
3er Msa
Hr d Msa
0ia d arte*Msa, ;, 9+
Hr d 0elete*Msa, ;, 9+
Hr d 2nsere*Hr, 0ia, 6+
#scre$er ]0ata con$ertida ao formato ddCmmCaaaa, ], Hr
!im
=5 . programa anterior poderia possuir uma funo l'gica que $erificasse se a data dada era
$"lida. 2sto no ocorreria se o $alor do ms fosse maior que 68 ou que, por exemplo, se o ms fosse
junho e o dia fosse 96.
Karia$eis
/aracter 0ata, d, s
Bumerico 0ia, Mes, )no
3ogico Kerifica, $
!uncao Kerifica0ata*d+
2nicio
Kerifica d $erdadeiro
s d arte*d, 6, 8+
Mes d Kalor*s+
:e Mes fd 68 entao
s d arte*d, ;, 8+
0ia d Kalor*s+
:e **Mes d ;+ ou *Mes d =+ ou *Mes d A+ ou *Mes d 66++ e *0ia e 9G+ entao
Kerifica d falso
:enao
:e Mes d 8 entao
s d arte*d, ?, 8+
)no d Kalor*s+
:e *(esto*)no, ;+ d G+ e *0ia e 8A+ entao
Kerifica d falso
:enao
:e 0ia e 8@ entao
Kerifica d falso
!imqse
!imqse
:enao
)prendendo a rogramar rogramando numa 3inguagem )lgortmica #xecut"$el *23)+ - "gina AG
:e 0ia e 96 entao
Kerifica d falso
!imqse
!imqse
!imqse
:enao
Kerifica d falso
!imqse
(etornar Kerifica
!im
65 2magine agora a seguinte questo. . interpretador 23) ao interpretar um comando Faca
enquanto espera encontrar depois da pala$ra Faca um espao em branco e a pala$ra enquanto.
0esta forma se o digitador digitasse mais de um espao em branco entre as duas pala$ras, o
interpretador acusaria erro. /omo % poss$el que o digitador possa, inad$ertidamente, digitar mais
de um espao em branco entre duas pala$ras, % interessante que, antes da interpretao, os espaos
em branco em excesso sejam suprimidos. . programa abaixo realiza esta ao e, para tal, faz uso da
funo 4elete do exemplo 6 desta seo.
CCrograma que exclui espaos em branco em excesso entre duas pala$ras de uma frase dada.
Karia$eis
/aracter s
Bumerico i, c, p, n, j
2nicio CCrograma principal
#scre$er ]0igite a cadeia]
3er s
c d /omprimento*s+
i d 6
!aca enquanto i f c
j d i
!aca enquanto *arte*s, i, 6+ d ] ]+ e *arte*s, i b 6, 6+ d ] ]+
i d i b 6
!imqenquanto
:e i e j entao
i d i - j
s d 0elete*s, j b 6, i+
c d /omprimento*s+
i d i b 6
!imqse
i d i b 6
!imqenquanto
#scre$er s
!im
@5 ) questo a seguir % bem interessante. Jrata de um programa que determine o dgito
veriicador de um n&mero de uma conta corrente, de um n&mero de matrcula de um estudante de
uma escola, etc.. #ste dgito $erificador, como j" foi dito acima, ser$e para a pre$eno de poss$eis
erros de digitao. or exemplo, se a matrcula 9G8;<-? fosse digitada erroneamente como 9A8;<-?,
o erro seria detectado pois o dgito $erificador da conta 9A8;< seria = e no ?. #xistem $"rios
m%todos para a determinao do dgito $erificador. Mm deles % dado pelo seguinte algoritmo.
6. Multiplica-se os n&meros correspondentes aos dgitos da conta, da direita para esquerda,
por 8, por 9, etc..
8. :oma-se os produtos obtidos no item 6.
)prendendo a rogramar rogramando numa 3inguagem )lgortmica #xecut"$el *23)+ - "gina A6
9. 0etermina-se o resto da di$iso da soma obtida no item 8 por 66.
;. :ubtrai-se de 66 o resto obtido no item 9
<. :e o $alor obtido no item ; for 6G ou 66 o dgito $erificado % igual a zeroE seno, o dgito %
o $alor obtido no item anterior.
or exemplo, se o n&mero da conta for 9G8;<, temos
6. <x8 d 6G, ;x9 d 68, 8x; d @, Gx< d G, 9x= d 6@
8. 6G b 68 b @ b G b 6@ d ;@
9. (esto*;@, 66+ d ;
;. 66 - ; d ?
<. 0gito $erificador d ?.
) implementao deste algoritmo em 23) redundaria no seguinte programa.
Karia$eis
/aracter Mat, s, 0igito
Matriz numerico 0igitos^6<_
Bumerico 0$, i, c, )ux, j, n
CC!uno que armazena num $etor os n&meros correspondentes aos dgitos de um inteiro dado
!uncao #xtrai0igitos*s+
2nicio
c d /omprimento*s+
ara i d 6 ate c
0igito d arte*s, i, 6+
0igitos^i_ d Kalor*0igito+
roximo
!im
CC!uno que transforma um n&mero de um algarismo no algarismo correspondente.
!uncao Bumeroara0igito*n+
2nicio
!aca caso
/aso n d G,
0igito d ]G]
/aso n d 6,
0igito d ]6]
/aso n d 8,
0igito d ]8]
/aso n d 9,
0igito d ]9]
/aso n d ;,
0igito d ];]
/aso n d <,
0igito d ]<]
/aso n d =,
0igito d ]=]
/aso n d ?,
0igito d ]?]
/aso n d @,
0igito d ]@]
/aso n d A,
0igito d ]A]
!imqcaso
(etornar 0igito
)prendendo a rogramar rogramando numa 3inguagem )lgortmica #xecut"$el *23)+ - "gina A8
!im
2nicio CCrograma principal
#scre$er ]0igite a matricula]
3er Mat
#xtrai0igitos*Mat+
)ux d G
j d 8
ara i d c ate 6 passo -6
)ux d )ux b 0igitos^i_ r j
j d j b 6
roximo
)ux d (esto*)ux, 66+
0$ d 66 - )ux
:e *0$ d 6G+ ou *0$ d 66+ entao
0$ d G
!imqse
Mat d Mat b ]-] b Bumeroara0igito*0$+
#scre$er ]Matricula d ], Mat
!im
.bser$e que poderamos ter usado a funo IntPara%arac construda no exemplo 9 da seo
@.9. .ptamos por escre$er uma no$a funo pelo fato de que os inteiros a serem transformados aqui
tm apenas um algarismo.
@5; Exerccios propostos
+5 Mma pala$ra % palndroma se ela no se altera quando lida da direita para esquerda. or
exemplo raiar % palndroma. #scre$a um programa que $erifique se uma pala$ra dada %
palndroma.
)5 Mm dos recursos disponibilizados pelos editores de texto mais modernos % a determinao
do n&mero de pala$ras de um texto. #scre$a um programa que determine o n&mero de pala$ras de
uma frase dada.
85 . exerccio 8G da seo =.; solicita$a um programa que con$ertesse um n&mero dado no
sistema decimal para o sistema bin"rio. ela limitao do sistema em tratar n&meros inteiros, uma
soluo que tratasse a con$erso como sendo do tipo )umerico seria limitada pelo fato de que, por
exemplo, 98 no sistema bin"rio % 6GGGGG, que no pode ser tratado como inteiro. #scre$a um
programa para a con$erso citada, tratando o $alor em bin"rio como uma cadeia de caracteres.
95 #scre$a um programa que con$erta um n&mero do sistema bin"rio, dado como uma cadeia
de zeros e uns, para o sistema decimal de numerao.
;5 (eescre$a o programa apresentado no exemplo @ da seo @.; de tal modo que ele possa,
al%m de gerar dgitos $erificadores, $erificar se uma conta dada *incluindo o dgito $erificador+ foi
digitada incorretamente, incorreo esta detectada pelo dgito $erificador.
=5 .s editores de texto possuem um recurso que permite o usu"rio substituir uma subcadeia de
um texto por outra cadeia de caracteres. #scre$a um programa que realize esta ao numa frase
dada.
65 )s companhias de transportes a%reos costumam representar os nomes dos passageiros no
formato 1ltimo so"renomeLnome. or exemplo, o passageiro /arlos 0rumond de )ndrade seria
indicado por )ndradeC/arlos. #scre$a um programa que receba um nome e o escre$a no formato
acima.
@5 )s normas para a exibio da bibliografia de um artigo cientfico, de uma monografia, de
um li$ro texto, etc., exigem que o nome do autor seja escrito no formato 1ltimo so"renome!
sequ-ncia das primeiras letras do nome e dos demais so"renomes! seguidas de ponto inal. or
)prendendo a rogramar rogramando numa 3inguagem )lgortmica #xecut"$el *23)+ - "gina A9
exemplo, )ntZnio /arlos >obim seria referido por >obim, ). /.. #scre$a um programa que receba
um nome e o escre$a no formato de bibliografia.
:. X muito comum que os ttulos de documentos como a$isos, declaraes, atestados, etc., apaream
em letras mai&sculas separadas por um espao em branco. #scre$a uma funo que receba uma pala$ra e a
retorne no formato acima.
+*5 #scre$a uma funo que gere logins para usu"rios de um sistema de computao, sendo o
login composto pelas letras iniciais do nome do usu"rio.
/Cserva%&o
Para oCter o caderno das solu%Fes dos exerccios propostos Casta encaminGar eHmail
para IaimeJccen5ufal com assunto RESP/S.AS #"VR/ "#A e contendo -/'EK
CA.E4/R"A !docenteK discenteK autodidata$K C"0A0ELESA.A0/ eK se for o casoK
"-S.".U"12/LCURS/.
7ndice remissivo
algoritmo de #uclides.........................................................................................................................<G
argumentos..........................................................................................................................................<<
binarj digit............................................................................................................................................@
bit..........................................................................................................................................................@
Hubble:ort..........................................................................................................................................@G
bjte.......................................................................................................................................................A
caracter...............................................................................................................................................88
central processing unit..........................................................................................................................@
c'digo ):/22........................................................................................................................................A
comando de entrada............................................................................................................................8<
comando de sada...............................................................................................................................8=
comando de seleo............................................................................................................................9;
/omando !aca caso............................................................................................................................9@
/omando :e........................................................................................................................................9;
coment"rios.........................................................................................................................................9?
compiladores.......................................................................................................................................6@
concatenao.......................................................................................................................................@9
condio de escape.............................................................................................................................=6
decomposio em fatores primo.........................................................................................................<;
diagonal principal...............................................................................................................................=@
dgito $erificador................................................................................................................................@A
di$isor pr'prio....................................................................................................................................;8
entrada do programa...........................................................................................................................8<
estrutura de deciso............................................................................................................................9;
estruturas de repetio........................................................................................................................;6
expresses l'gicas..............................................................................................................................8;
!aca enquanto.....................................................................................................................................;9
falso....................................................................................................................................................88
fatorial.................................................................................................................................................<@
!uncao 0elete.....................................................................................................................................@;
!uncao 2nsere......................................................................................................................................@<
!uncao 2ntara/arac..........................................................................................................................@<
funo iterati$a...................................................................................................................................=6
!uncao os..........................................................................................................................................@?
funes pr%-definidas..........................................................................................................................9G
hard`are.............................................................................................................................................8G
identao.............................................................................................................................................9<
identidade fundamental da di$iso.....................................................................................................8@
identificador........................................................................................................................................88
2nsert:or.............................................................................................................................................@8
interpretadores....................................................................................................................................6@
linguagem de alto n$el......................................................................................................................6@
linguagem de m"quina..........................................................................................................................@
logico..................................................................................................................................................88
matriz..................................................................................................................................................=9
matriz identidade de ordem n.............................................................................................................=?
matriz quadrada..................................................................................................................................=@
matriz sim%trica..................................................................................................................................=@
mem'ria................................................................................................................................................@
)prendendo a rogramar rogramando numa 3inguagem )lgortmica #xecut"$el *23)+ - "gina A<
mnimo m<iplo comum....................................................................................................................<6
multiplicidade.....................................................................................................................................<;
numerico.............................................................................................................................................88
n&mero primo.....................................................................................................................................;;
n&meros complexos............................................................................................................................<A
operadores aritm%ticos........................................................................................................................89
operadores l'gicos..............................................................................................................................8;
operadores relacionais........................................................................................................................8;
ara proximo......................................................................................................................................;6
par7metros..........................................................................................................................................<<
arte....................................................................................................................................................@;
pesquisa bin"ria,.................................................................................................................................?@
pesquisa sequencial............................................................................................................................??
programa fonte....................................................................................................................................6@
programa objeto..................................................................................................................................6@
(ecursi$idade.....................................................................................................................................=G
relao.................................................................................................................................................8;
(esoluo de problemas.....................................................................................................................6G
:elect:ort............................................................................................................................................?A
sem7nticade um comando...................................................................................................................6A
seqYncia de !ibbonaci.......................................................................................................................<;
s%rie harmZnica...................................................................................................................................<;
sintaxe de um comando......................................................................................................................6@
sistema bin"rio de numerao..............................................................................................................A
sistema operacional............................................................................................................................6A
soft`are..............................................................................................................................................8G
tipo de dado........................................................................................................................................88
trao....................................................................................................................................................=@
unidade de entrada................................................................................................................................@
unidade de processamento centra.........................................................................................................@
unidade de sada...................................................................................................................................@
Kalor...................................................................................................................................................@9
Kari"$eis simples................................................................................................................................88
$ari"$el composta...............................................................................................................................=9
$ari"$el de controle............................................................................................................................;6
$erdadeiro...........................................................................................................................................88
$etor....................................................................................................................................................=9
AiCliografia
0ijIstra, #. o., A 4iscipline o Programiming. rentice-nall. Be` >ersej, 6A?<.
#$aristo, >., Programando com Pascal, #dio 0igital, Macei', dispon$el em
```.ic.ufal.brCprofessorCjaime.
#$aristo, >., Aprendendo a Programar Programando em Linguagem %. #dio 0igital, Macei',
dispon$el em ```.ic.ufal.brCprofessorCjaime. .
#$aristo, >., erdigo, #., Introduo Ma Nlge"ra A"strata. #ditora da Mni$ersidade !ederal de
)lagoas *#0M!)3+. )lagoas, 8GG8.
{nuth, 0. #., =&e Art o %omputer Programming, $olume 8, Seminumerical Algorit&ms )ddison-
oeslej ublishing /ompanj. M:), 6A@@.
{o`alto`sIi, J. } 3ucchesi, /., %onceitos Fundamentais e =eoria da %omputao. )nais do 22
o#2. Minas Lerais, 6AA;
Borton, ., Introduo O Inormtica. MaIron HooIs. :p aulo, 6AA=.
(angel, >. 3., 9s Programas de *raduao em Linguagens de Programao. )nais do 22o#2. Minas
Lerais, 6AA;.
:z`arcfiter, >. 3. } MarIenzon, ,struturas de 4ados e seus Algoritmos. 3J/ #ditora. (io de
>aneiro, 6AA;.
oirth, B., Algorit&ms P 4ata Structures. rentice-nall. Be`->ersej, 6A@=.