Você está na página 1de 96

Jaime Evaristo

Professor da Universidade Federal de Alagoas


Srgio Crespo
Professor da Universidade do Vale do Rio dos Sinos
Aprendendo
a
Programar
Programando numa
linguagem algortmica
executvel !"#A$
Segunda Edi%&o
Formato digital
'acei(
)*+*
Prefcio !, primeira edi%&o$
Mesmo nas questes menos difceis, a programao de computadores, no seu incio
considerada uma arte, hoje considerada uma cincia, requer a aplicao de raciocnios heterodoxos
em relao aos raciocnios utilizados nas solues dos problemas de outras cincias. or exemplo,
os problemas elementares da !sica tratam basicamente de relacionamentos entre grandezas fsicas e
na aplicao destes relacionamentos est" a maioria das suas solues. #m programao, a tentati$a
de soluo de uma questo %, basicamente, a construo de uma sequncias de instrues,
selecionadas dentre um n&mero finito delas, que a sua execuo redunda na concretizao de uma
tarefa, tarefa especificada na pr'pria questo. #m programao no se trabalha com grandezas nem
com f'rmulas. #scre$er um programa para resol$er questes que um ser humano com um
conhecimento razo"$el % capaz de resol$er facilmente, como, por exemplo, determinar o maior
n&mero de uma relao de n&meros, requer um tipo de raciocnio no usual em outros campos do
conhecimento humano. (aciocnios no usuais, por%m agrad"$eis de serem desen$ol$idos e
indispens"$eis para aqueles que pretendem lidar com algum ramo da computao.
)l%m de raciocnios especfico *cujo conjunto % chamado lgica de programao+, a
programao de computadores, num n$el inicial, possui uma outra caracterstica que contribui para
que a sua aprendizagem seja mpar, o reduzido n&mero e a simplicidade de conceitos que de$am ser
aprendidos.
#xistem di$ergncias com relao ao melhor modo de iniciar a aprendizagem de
programao, utilizando-se uma pseudolinguagem ou atra$%s de uma linguagem de programao.
.s que defendem a primeira hip'tese alegam que a utilizao de uma pseudolinguagem permitiria
ao aluno aprender de uma forma mais informal, sem a necessidade de aprender aspectos t%cnicos de
um sistema de computao, permitindo que todo o seu esforo fosse dedicado ao desen$ol$imento
da l'gica de programao. .s que defendem a segunda estrat%gia, alegam que execuo, num
computador, dos programas desen$ol$idos pelo aprendizando trazem um aspecto l&dico ao processo
de aprendizagem que s' o beneficia.
/om o ILA *Interpretador de Linguagem Algortmica+ a di$ergncia acima referida pode
diminuir significati$amente. 0e$ido 1 simplicidade do formato da linguagem algortmica utilizada
pelo 23), podemos desen$ol$er algoritmos utilizando um portugus estruturado. 0e$ido 1
simplicidade do interpretador, podemos desen$ol$er a aprendizagem de programao utilizando
uma 4linguagem de programao5 sem se preocupar muito com os aspectos t%cnicos. odemos
aprender a programar programando.
. objeti$o deste li$ro % aprender a programar programando. /om isso, o li$ro busca
enfatizar e contextualizar os conceitos te'ricos de modo a facilitar a compreenso do referencial
te'rico ali inserido. . li$ro apresenta di$ersos exerccios resol$idos, muitos deles bem
significati$os em relao ao desen$ol$imento da l'gica de programao. /entrado neste foco, o
li$ro apresenta $"rios exerccios propostos, solicitando programas cuja confeco contribui
sobremaneira para a aprendizagem.
ara atingir o objeti$o explicitado acima, o li$ro cont%m no$e captulos. . captulo 6,
intitulado 2ntroduo 1 rogramao, trata dos seguintes assuntos, organizao b"sica de um
computador, linguagem de m"quina, algoritmos, l'gica de programao, linguagens de alto n$el,
sintaxe e sem7ntica de um comando e sistemas de computao. . captulo 8, 2ntroduo 1
3inguagem )lgortmica, discute $ari"$eis simples, expresses aritm%ticas, relaes e expresses
l'gicas, estrutura e execuo de um programa, comandos de entrada, de sada e de atribuio e
funes pr%-definidas.
or seu turno, o captulo 9, com o ttulo #struturas de :eleo, discorre sobre os comandos Se
e Faca caso, enquanto que o captulo ;, #struturas de (epetio apresenta os comandos Para
proximo e Faca enquanto. . captulo < estuda as funes e a recursi$idade e o captulo =, as
$ari"$eis compostas.
>" os captulos ? e @ estudam, respecti$amente, pesquisa e ordenao e cadeia de caracteres,
enquanto que, finalmente, o captulo A apresenta, com alguns coment"rios, todos programas que
)prendendo a rogramar rogramando numa 3inguagem )lgortmica #xecut"$el *23)+ - "gina ;
solucionam os exerccios propostos.
Baturalmente, o leitor de$e resistir a tentao de consultar a soluo de um problema proposto
diante da primeira dificuldade em resol$-lo. )prende-se a programar programando e ao se escre$er
um programa in$aria$elmente se comete erros. ) descoberta destes erros, a procura de formas de
solucion"-los so aes que facilitam o desen$ol$imento da l'gica de programao. Beste sentido, %
importantssimo implementar as solues obtidas no ILA *dispon$el para download em
http,CCinf.unisinos.brCDcrespo+ e executar os programas correspondentes para que, estando a soluo
correta, tenha-se a sensao de $it'ria e o desejo de resol$er outras questesE estando a soluo
incorreta, procure-se aprender com os erros cometidos.
/omo tamb%m estamos aprendendo, quaisquer crticas e sugestes dirigidas a
jaimeFccen.ufal.br ou a crespoFinf.puc-rio.br sero bem $indas.
>aime #$aristo
:%rgio /respo
Prefcio !, segunda edi%&o$
#sta % a edio digital do li$ro )prendendo a rogramar rogramando numa 3inguagem
)lgortmica #xecut"$el publicado em 8GGG, no formato impresso, pela #ditora HooI #xpress,
baseada na cidade do (io de >aneiro. . esgotamento da edio impressa e o encerramento da
ati$idades da editora ensejaram-nos a oportunidade de disponibilizar o conte&do do li$ro, que pode
ser utilizado como li$ro texto em disciplinas do tipo 3'gica de rogramao ou para aprendizagem
autodid"tica de programao de computadores.
)o contr"rio da $erso impressa, esta edio no cont%m as respostas dos exerccios
propostos. ara obter o caderno das solues dos exerccios basta encaminhar e-mail para
jaimeFccen.ufal com assunto (#:.:J): 32K(. 23) e contendo B.M#, /)J#L.(2)
*docente, discente, autodidata+, /20)0#C#:)J)0. e, se for o caso, 2B:J2JM2NO.C/M(:..
.s autores apro$eitam a ocasio para agradecer aos $"rios colegas que tm referido o li$ro
nos planos pedag'gicos de suas disciplinas e aos pesquisadores que o citam nos seus trabalhos de
pesquisa.
:endo uma edio digital, correes e incluses no texto podem ser feitas a qualquer
momento. )ssim, os autores rogam a participao dos leitores no sentido da melhoria do li$ro
*inclusi$e, com a incluso de no$os exerccios+ e prometem registrar estas inter$enes. Joda e
qualquer obser$ao de$e ser encaminhada para jaimeFccen.ufal.br com o assunto 32K(. 23).
#m julho de 8G6G
>aime #$aristo
:%rgio /respo
Sumrio
+ "-.R/0U12/ 3 PR/4RA'A12/5555555555555555555555555555555555555555555555555555555555555555555555555555555555555555556
6.6 .(L)B2P)NO. HQ:2/) 0# MM /.MMJ)0.(.........................................................................................?
6.8 32BLM)L#M 0# MQRM2B).................................................................................................................?
6.9 (.L()M): 0# /.MMJ)0.(#:........................................................................................................@
6.; 3SL2/) 0# (.L()M)NO.................................................................................................................A
6.< (#:.3MNO. 0# (.H3#M):..............................................................................................................A
6.= (./#::)0.( 0# MM )3L.(2JM.....................................................................................................68
6.? #T#M3.: 0# )3L.(2JM.: M)J#MQJ2/.:.........................................................................................6;
6.@ 32BLM)L#B: 0# )3J. BUK#3............................................................................................................6?
6.A :2BJ)T# # :#MVBJ2/) 0# MM) 2B:J(MNO.........................................................................................6?
6.6G :2:J#M): 0# /.MMJ)NO............................................................................................................6@
6.66 #T#(/U/2.: (..:J.:................................................................................................................6A
)5 "-.R/0U12/ 3 #"-4UA4E' A#4/R7.'"CA555555555555555555555555555555555555555555555555555555555555555)*
8.6 K)(2QK#2: :2M3#:........................................................................................................................8G
8.8 #T(#::W#: )(2JMXJ2/):...............................................................................................................86
8.9 (#3)NW#:....................................................................................................................................86
8.; #T(#::W#: 3SL2/):.....................................................................................................................88
8.< #:J(MJM()C#T#/MNO. 0# MM (.L()M) #M 23)............................................................................88
8.= /.M)B0. 0# #BJ()0)..................................................................................................................89
8.? /.M)B0. 0# :)U0)......................................................................................................................89
8.@ /.M)B0. 0# )J(2HM2NO................................................................................................................8<
8.A #T#M3.: )(J# 2........................................................................................................................8<
8.6G !MBNW#: (X-0#!2B20):...............................................................................................................8@
8.66 #T#M3.: )(J# 22.....................................................................................................................8A
8.68 #T#(/U/2.: (..:J.:................................................................................................................9G
85 ES.RU.URAS 0E SE#E12/5555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555558)
9.6 2BJ(.0MNO..................................................................................................................................98
9.8 /.M)B0. :#...............................................................................................................................98
9.9 #T#M3.: )(J# 222.....................................................................................................................99
9.; /.M)B0. !)/) /):.....................................................................................................................9=
9.< #T#(/U/2.: (..:J.:..................................................................................................................9@
95 ES.RU.URAS 0E REPE."12/55555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555558:
;.6 2BJ(.0MNO..................................................................................................................................9A
;.8 /.M)B0. )() (.T2M................................................................................................................9A
;.9 /.M)B0. !)/) #BRM)BJ.............................................................................................................;G
;.; #T#M3.: )(J# 222.....................................................................................................................;;
;.< #T#(/U/2.: (..:J.:..................................................................................................................<6
;5 FU-1<ES5555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555;8
<.6 2BJ(.0MNO..................................................................................................................................<9
<.8 #T#M3.: )(J# 2K.....................................................................................................................<;
<.9 (#/M(:2K20)0#............................................................................................................................<@
<.; #T#(/U/2.: (..:J.:..................................................................................................................<A
=5 VAR">VE"S C/'P/S.AS55555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555=+
=.6 2BJ(.0MNO..................................................................................................................................=6
=.8 #T#M3.: )(J# K......................................................................................................................=9
)prendendo a rogramar rogramando numa 3inguagem )lgortmica #xecut"$el *23)+ - "gina ?
=.9 !.(M)J)NO. 0) :)U0)C2BJ#(!)/# /.M . M:MQ(2.............................................................................=@
=.; #T#(/U/2.: (..:J.:..................................................................................................................?6
65 PES?U"SA E /R0E-A12/555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555556;
?.6 2BJ(.0MNO..................................................................................................................................?<
?.8 #:RM2:) :#RM#B/2)3....................................................................................................................?<
?.9 #:RM2:) H2BQ(2).........................................................................................................................?=
?.; .(0#B)NO. #3. )3L.(2JM. :#3#/J:.(J......................................................................................??
?.< .(0#B)NO. #3. )3L.(2JM. HMHH3#:.(J.....................................................................................?@
?.= #T#(/U/2.: (..:J.:..................................................................................................................@G
@5 CA0E"AS 0E CARAC.ERES555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555@+
@.6 2BJ(.0MNO..................................................................................................................................@6
@.8 . .#()0.( /.B/)J#B)NO. # ): !MBNW#: )(J# # K)3.(...............................................................@6
@.9 #T#M3.: )(J# K22....................................................................................................................@8
@.; #T#M3.: )(J# K222..................................................................................................................@<
@.< #T#(/U/2.: (..:J.:..................................................................................................................@A
7-0"CE RE'"SS"V/5555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555:+
A"A#"/4RAF"A555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555:8
+ "ntrodu%&o , Programa%&o
+5+ /rganiBa%&o Csica de um computador
Mm computador % constitudo de quatro unidades b"sicas, unidade de entrada, unidade de
sada, unidade de processamento central e memria. Mma unidade de entrada % um dispositi$o que
permite que o usu"rio interaja com o computador, fornecendo-lhe dados e informaes que sero
processadas. . teclado o seu exemplo mais tri$ial. Mma unidade de sada, por seu turno, ser$e para
que sejam fornecidos ao usu"rio do computador os resultados do processamento realizado. .
monitor de vdeo e uma impressora so exemplos de unidades de sada. ) unidade central de
processamento % respons"$el por todo o processamento requerido, sendo muito conhecida por cpu,
acrossemia de central processing unit. >" a memria armazena temporariamente dados e
informaes que sero utilizados no processamento.
+5) #inguagem de mDuina
#inguagens de comunica%&o
#$identemente, h" a necessidade de que as unidades que compem um computador se
comuniquem. or exemplo, um dado fornecido pelo teclado de$e ser armazenado na mem'riaE para
a cpu realizar uma operao aritm%tica, ela $ai 4buscar5 $alores que esto armazenados na
mem'ria, e assim por diante. ara que haja comunicao entre as unidades do computador %
necess"rio que se estabelea uma linguagem.
.s seres humanos se comunicam atra$%s de $"rias linguagens. #ntre elas esto as linguagens
escrita e e oral. Mma comunicao atra$%s de uma linguagem escrita % constituda de pargraos, os
quais contm perodos, que contm rases! que so constitudas de palavras, sendo cada uma das
pala$ras formadas por letras e esta seqYncia termina a. )ssim, uma letra % um ente indi$is$el da
linguagem escrita e, em funo disto, % chamada sm"olo "sico desta linguagem. #ste exemplo foi
apresentado para que se justifique a afirmao de que toda linguagem requer a existncia de
sm"olos "sicos! como os onemas para a linguagem falada.
A linguagem de comunica%&o entre as unidades
/omo a comunicao entre as unidades do computador teria que ser obtida atra$%s de
fenZmenos fsicos, os cientistas que conceberam os computadores atuais estabeleceram dois
smbolos b"sicos para a linguagem. #sta quantidade de smbolos foi escolhida pelo fato de que
atra$%s de fenZmenos fsicos % muito f"cil obter dois estados distintos e no confund$eis, como
passar corrente el%tricaCno passar corrente el%trica, estar magnetizadoCno estar magnetizado, etc.,
podendo cada um destes estados ser um dos smbolos. )ssim a linguagem utilizada para
comunicao interna num computador, chamada linguagem de mquina, possui apenas dois
smbolos. /ada um destes smbolos % denominado "it *binar# digit+ e eles so representados por G
*zero+ e 6 *um+. #sta forma de representar os "it$s justifica a sua denominao, "inar# digit, que
significa dgito bin"rio *al%m disto, "it em ingls significa fragmento+. ortanto, as palavras da
linguagem de m"quina so seqYncias de bits, ou seja, seqYncias de dgitos zero e um.
/ c(digo ASC""
ara que haja a possibilidade da comunicao do homem com o computador, % necess"rio que
as pala$ras da linguagem escrita sejam traduzidas para a linguagem de m"quina e $ice-$ersa. ara
que isto seja poss$el, % necess"rio que se estabelea qual a seqYncia de bit[s que corresponde a
cada caractere usado na linguagem escrita. .u seja, % necess"rio que se estabelea uma codificao
em seqYncia de bit[s para cada um dos caracteres. Mma codificao muito utilizada % o cdigo
)prendendo a rogramar rogramando numa 3inguagem )lgortmica #xecut"$el *23)+ - "gina A
AS%II *American Standard %ode or Inormation Interc&ange ou %digo Padro Americano para
Interc'm"io de Inorma(es+, estabelecido pelo A)SI *American )ational Standards Institute+.
Besta codificao, cada caractere % representado por uma seqYncia de oito bits *normalmente, um
conjunto de oito bit[s % chamado "#te+. :' para exemplificar *ser" $isto ao longo do li$ro que, em
geral, no h" necessidade de que se conhea os c'digos dos caracteres+, apresentamos a tabela
abaixo com os c'digos ):/22 de alguns caracteres.
Tabela 1 Cdigos ASCII de alguns caracteres
/aractere /'digo ):/22
#spao em branco GG6GGGGG
\ GG6GGGG6
] GG6GGG6G
. . . . . .
G GG66GGGG
6 GG66GGG6
. . . . . .
) G6GGGGG6
H G6GGGG6G
. . . . . .
P G6G66G6G
. . . . . .
a G66GGGG6
. . . . ..
.bser$e a necessidade de se ha$er codificado o espao em "ranco *este ]caractere] % utilizado
para separar nossas pala$ras+ e de se ha$er codificado diferentemente as letras mai&sculas e
min&sculas, para que se possa consider"-las como coisas distintas.
3e$ando em conta que cada seqYncia de zeros e uns pode ser $ista como a representao de
um n&mero inteiro no sistema "inrio de numerao ^#$aristo, > 8G6G_, podemos, para facilitar
referncias, associar a cada c'digo ):/22 o inteiro correspondente, obtendo assim o que se
costuma chamar de cdigo AS%II decimal. or exemplo, como 6GGGGG6 % a representao no
sistema bin"rio do inteiro =< do sistema decimal, dizemos que o cdigo AS%II decimal de ) % =<.
+58 Programas de computadores
ara que um computador tenha alguma utilidade, ele de$e executar um programa que tenha
uma finalidade especfica. *ames so programas que tm como objeti$o propiciar entretenimento
aos seus usu"rios. Processadores de texto so programas que permitem que textos sejam digitados,
impressos e armazenados para futuras modificaes ou impresses. Planil&as eletr+nicas so
programas que oferecem recursos para manipulao de tabelas de $alores num%ricos. )avegadores
permitem acessos a p"ginas da internet, a rede mundial de computadores. #stes programas
destinam-se a usurios inais, aquelas pessoas que $o utilizar o computador com um objeti$o
especfico, usando para tal um programa que ela aprendeu a usar, no tendo nenhuma preocupao
relati$a ao funcionamento interno do sistema computadorCprograma. or exemplo, um usu"rio de
um processador de texto de$e aprender o que fazer para que o processador destaque em negrito
alguma parte do texto ou localize uma pala$ra, no ha$endo necessidade de saber como o programa
realiza estas aes.
Ba $erdade, para que um processador de texto propicie ao usu"rio a possibilidade de que
textos sejam digitados, corrigidos, gra$ados, inseridos em outros textos e de que pala$ras sejam
localizadas dentro de um texto, % necess"ria a execuo de muitas instrues com objeti$os bem
mais especficos e restritos. Mm programa de computador %, na realidade, um conjunto de
instrues que podem ser executadas pelo computador, de tal forma que a execuo de subconjuntos
destas instrues permitem a realizao de aes mais gen%ricas.
X muito grande o n&mero de instrues dos programas citados acima, chegando 1 casa dos
)prendendo a rogramar rogramando numa 3inguagem )lgortmica #xecut"$el *23)+ - "gina 6G
milhares. (igorosamente falando, um programa dos acima citados so conjunto de programas
menores, cada um deles com objeti$os mais restritos, e que podem ser executados de forma
integrada. X comum se utilizar a pala$ra oriunda do ingls sotware para designar um conjunto de
programas com objeti$os mais restritos que, sendo executados de forma integrada, propiciam a
execuo de aes bem mais gen%ricas.
) parte da /incia da /omputao que trata do desen$ol$imento de sotwares % denominada
,ngen&aria de Sotware. . estudo da ,ngen&aria de Sotware de$e ser precedido da aprendizagem
do desen$ol$imento de programas 4menores5, ao que comumente % denominada de Programao
de %omputadores.
+59 #(gica de programa%&o
:endo um conjunto de instrues cujas execues redundam na realizao da tarefa para a
qual foi desen$ol$ido, o desen$ol$imento de um programa requer a utilizao de um raciocnio
mpar em relao aos raciocnios utilizados na soluo de problemas de outros campos do saber. or
exemplo *e de forma simplificada+ ao se tentar resol$er um problema de Mec7nica Be`toniana
de$e-se procurar capturar da especificao da questo as grandezas fsicas en$ol$idas e aplicar as
f'rmulas que relacionam estas grandezas.
ara se desen$ol$er um programa que resol$a um determinado problema % necess"rio que
encontremos uma seqYncia de instrues que cujas execues resultem na soluo da questo. X
comum se utilizar a termo algoritmo para indicar uma seqYncia de instrues que resol$em um
dado problema, ficando, neste caso, o termo programa para indicar um algoritmo que pode ser
executado por um computador. ) Lgica de Programao pode ser entendida como o conjunto de
raciocnios utilizados para o desen$ol$imento de algoritmos *e, portanto, de programas+.
or exemplo, imagine a seguinte questo, um senhor, infelizmente bastante gordo, est" numa
das margens de um rio com uma raposa, uma d&zia de galinhas e um saco de milho. . senhor
pretende atra$essar o rio com suas cargas, num barco a remo que s' comporta o senhor e uma das
cargas. #$identemente, o senhor no pode deixar em uma das margens, sozinhos, a raposa e a
galinha, nem a galinha e o milho. ) questo % escre$er um algoritmo que oriente o senhor a realizar
o seu intento. Baturalmente, na primeira $iagem, ele no pode le$ar a raposa *neste caso, as
galinhas comeriam o milho+, nem o milho *caso em que a raposa de$oraria as galinhas+. 3ogo, na
primeira $iagem ele de$e le$ar as galinhas. /omo ele estar" presente na chegada, na segunda
$iagem ele pode le$ar a raposa ou o milho. Mas, e a $olta para apanhar terceira cargaa ) soluo %
ele $oltar com as galinhas e, a, atra$essar o milho, j" que no h" problema em que a raposa e o
milho fiquem juntos. #scre$endo as instrues na seqYncia em que elas de$em ser executadas,
teremos o seguinte algoritmo.
6. )tra$esse as galinhas.
8. (etorne sozinho.
9. )tra$esse a raposa.
;. (etorne com as galinhas.
<. )tra$esse o milho.
=. (etorne sozinho.
?. )tra$esse as galinhas.
+5; Resolu%&o de proClemas
Mma pergunta que o leitor pode estar se fazendo %, como $ou ]descobrir] que a primeira
instruo de$e ser a tra$essia das galinhasa
)lgumas tarefas para as quais se pretende escre$er um algoritmo podem ser $istas como um
problema a ser resol$ido. . exemplo anterior % um exemplo claro de uma tarefa com esta
caracterstica. #xistem algumas t%cnicas que podem ser utilizadas para a resoluo de problemas.
)prendendo a rogramar rogramando numa 3inguagem )lgortmica #xecut"$el *23)+ - "gina 66
Bo exemplo anterior, para se definir qual seria a primeira instruo, como existem apenas trs
possibilidades, $erifica-se o que aconteceria ao se escolher determinada instruo. !oi o que, de
passagem, foi feito acima, se o homem atra$essasse primeiro o milho, a raposa de$oraria as
galinhasE se o homem atra$essasse primeiro a raposa, as galinhas comeriam o milho. Beste caso,
podemos dizer que foi utilizada a t%cnica da exausto, como o n&mero de alternati$as era pequeno,
analisamos todas elas, uma a uma.
#sta t%cnica pode ser utilizada tamb%m na soluo do seguinte problema, dispe-se de trs
esferas idnticas na forma, sendo duas delas de mesmo peso e a terceira de peso maior. ) questo %
descobrir qual a esfera de peso diferente, realizando-se apenas uma pesagem numa balana de dois
pratos. ara isto chamemos de ) e H as esferas de mesmo peso e de / a de maior peso. :e optarmos
por colocar duas esferas num dos pratos *indicando por T b c, o fato de colocarmos as esferas T e
c num mesmo prato da balana+ e a outra esfera no outro, temos as seguintes possibilidades,
a+ *)bH, /+.
b+ *)b/, H+.
c+ *Hb/, )+.
Bo primeiro caso, pode acontecer qualquer coisa, a balana pode ficar equilibrada, se
eso*/+ d eso*)bH+E ficar inclinada para o lado esquerdo, se eso*/+ e eso*)bH+ ou ficar
inclinada para o lado direito se eso*/+ f eso*)bH+. .bser$e que nada pode distinguir a esfera /.
Bos dois &ltimos casos, a balana se inclinar" para a esquerda, mas, outra $ez, nada distingue a
esfera /. or exausto, resta ento escolhermos duas esferas e colocarmos cada uma delas num dos
pratos da balana. )gora os casos poss$eis so,
a+ *), H+.
b+ *), /+.
c+ *H, /+.
Bo primeiro caso, a balana ficar" equilibrada, o que indica que a mais pesada % aquela no
escolhidaE nos outros dois casos, a balana se inclinar" para a direita, indicando que a esfera mais
pesada % aquela que ocupa o prato respecti$o. Jemos ento o seguinte algoritmo,
6. #scolha duas esferas.
8. /oloque cada uma das esferas escolhidas num dos pratos da balana.
9. :e a balana ficar equilibrada, fornea como resposta a esfera no escolhidaE caso contr"rio,
fornea como resposta a esfera do prato que est" num n$el mais baixo.
Mma outra t%cnica de resoluo de problemas consiste em se tentar resol$er casos particulares
da questo ou resol$er a questo para dados menores do que os dados que foram fixados. ara
exemplificar, consideremos a seguinte questo, como obter exatamente ; litros de "gua dispondo de
dois recipientes com capacidades de 9 litros e < litros
6
a /omo ; d 9 b 6 ou
; d < g 6 conseguiremos resol$er a questo se conseguirmos obter 6 litro. Mas isto % f"cil, pois
6 d 9 b 9 g <\ Jemos ento o seguinte algoritmo,
6. #ncha o recipiente de 9 litros.
8. Jransfira o conte&do do recipiente de 9 litros para o recipiente de < litros.
9. #ncha o recipiente de 9 litros.
;. /om o conte&do do recipiente de 9 litros, complete o recipiente de < litros.
<. #s$azie o recipiente de < litros.
=. Jransfira o conte&do do recipiente de trs litros para o recipiente de < litros.
?. #ncha o recipiente de 9 litros.
@. Jransfira o conte&do do recipiente de 9 litros para o recipiente de < litros.
ara compreender o algoritmo, sejam ) e H os recipientes de 9 litros e de < litros,
respecti$amente, e indiquemos por *T, n+ o fato de o recipiente T conter n litros de "gua. Bo incio
6
) soluo desta questo foi necess"ria num filme da s%rie 0uro de Matar para o protagonista desati$ar uma bomba.
)prendendo a rogramar rogramando numa 3inguagem )lgortmica #xecut"$el *23)+ - "gina 68
temos *), G+ e *H, G+ e, ap's a execuo de cada instruo, teremos,
6. *), 9+, *H, G+.
8. *), G+, *H, 9+.
9. *), 9+, *H, 9+.
;. *), 6+, *H, <+.
<. *), 6+, *H, G+.
=. *), G+, *H, 6+.
?. *), 9+, *H, 6+.
@. *), G+, *H, ;+.
.utras questes que podem ser le$antadas so, h" outras soluesa #xiste alguma soluo que
realize a mesma tarefa com uma quantidade menor de instruesa ara responder a estas questes
tal$ez seja interessante lembrar que ; d < g 6. :ignifica que, se conseguirmos tirar 6 litro do
recipiente de < litros quando ele esti$er cheio, resol$eremos a questo. ara conseguir isto, basta
que o recipiente de 9 litros contenha 8 litros. # para se obter 8 litrosa ) basta $er que 8 d < g 9.
odemos ento resol$er a questo com o seguinte algoritmo, constitudo de apenas seis instrues,
6. #ncha o recipiente de < litros.
8. /om o conte&do do recipiente de < litros, encha o de 9 litros.
9. #s$azie o recipiente de 9 litros.
;. Jransfira o conte&do do recipiente de < litros para o recipiente de 9 litros.
<. #ncha o recipiente de < litros.
=. /om o conte&do do recipiente de < litros, complete o recipiente de 9 litros.
)p's a execuo de cada uma das instrues teremos,
6. *), G+, *H, <+.
8. *), 9+, *H, 8+.
9. *), G+, *H, 8+.
;. *), 8+, *H, G+.
<. *), 8+, *H, <+.
=. *), 9+, *H, ;+.
Mma outra t%cnica bastante utilizada % se tentar raciocinar a partir de uma soluo conhecida
de uma outra questo. ara compreender isto considere as duas seguintes questes, imagine uma
relao de n n&meros, os quais podem ser referenciados por a
i
com i d 6, 8, ..., n e queiramos som"-
los com a restrio de que s' sabemos efetuar somas de duas parcelas. ara resol$er esta questo,
podemos pensar em casos particulares, se n d 8, basta somar os dois n&merosE se n d 9, basta somar
os dois primeiros e somar esta soma com o terceiro. Baturalmente este raciocnio pode ser
reproduzido para n e 9. ) questo % que a soma dos dois primeiros de$e estar ]guardada] para que
se possa som"-la com o terceiro, obtendo-se a soma dos trs primeirosE esta soma de$e ser
]guardada] para que seja somada com o quarto e assim sucessi$amente. ara isto podemos
estabelecer uma reer-ncia 1 soma ]atual], a qual ser" alterada quando a soma com o elemento
seguinte for efetuada. )t% para somar os dois primeiros, pode-se pensar em somar ]a soma do
primeiro] com o segundo.
Jemos ento o seguinte algoritmo,
6. !aa i d 6.
8. !aa :oma d a
6
.
9. (epita n g 6 $ezes as instrues 9.6 e 9.8.
9.6. :ubstitua i por i b 6.
9.8. :ubstitua :oma por :oma b a
i
.
or exemplo, se n d < e a
6
d @, a
8
d ;, a
9
d A, a
;
d 69 e a
<
d ?, a execuo do algoritmo
resultaria nas seguintes aes,
)prendendo a rogramar rogramando numa 3inguagem )lgortmica #xecut"$el *23)+ - "gina 69
6. i d 6.
8. :oma d @.
9.6.6. i d 8.
9.8.6. :oma d @ b ; d 68
9.6.8. i d 9.
9.8.8. :oma d 68 b A d 86.
9.6.9. i d ;.
9.8.9. :oma d 86 b 69 d 9;.
9.6.;. i d <.
9.8.;. :oma d 9; b ? d ;6.
Baturalmente, na execuo acima estamos indicando por 9.6.x e 9.8.x a execuo de ordem x
das instrues 9.6 e 9.8.
/omo $eremos ao longo do li$ro, este algoritmo % bastante utilizado em programao, sendo
que % mais comum que at% o primeiro termo da relao seja ]somado] dentro da repetio. Beste
caso, para que o primeiro seja somado, % necess"rio que Soma seja iniciali.ado com G *zero+,
ficando assim o algoritmo,
6. !aa i d G.
8. !aa :oma d G.
9. (epita n $ezes as instrues 9.6 e 9.8.
9.6. :ubstitua i por i b 6.
9.8. :ubstitua :oma por :oma b a
i
.
/onhecendo este algoritmo, % f"cil ento resol$er a questo de se calcular o produto de n
n&meros nas mesmas condies, e a $emos como utilizar uma soluo conhecida para resol$er um
problema. 0e$e-se inicializar uma referncia Produto com 6 e, numa repetio, multiplicar os
n&meros como foi feito no caso da soma,
6. !aa i d G.
8. !aa roduto d 6.
9. (epita n $ezes as instrues 9.6 e 9.8.
9.6. :ubstitua i por i b 6.
9.8. :ubstitua roduto por roduto x a
i
.
+5= Processador de um algoritmo
.b$iamente, um algoritmo de$e ser executado por algum agente. #ste agente pode ser uma
pessoa munida de certos equipamentos e utenslios ou por m"quinas projetadas para executar
automaticamente algumas instrues b"sicas. . algoritmo para a tra$essia do senhor gordo com as
galinhas, sua raposa e seu saco de milho seria executado pelo tal senhor, que esta$a para tal munido
do barco e de remos. . algoritmo para obteno de quatro litros de "gua a partir de recipientes de
conte&dos cinco litros e trs litros poderia ser executado por uma pessoa que dispusesse dos dois
recipientes e de "gua em abund7ncia. Beste &ltimo caso, quem sabe, a pessoa poderia ser substituda
por um robZ.
. agente que executa um algoritmo % chamado processador e para que o algoritmo seja
executado % necess"rio que o processador seja capaz de executar cada uma das suas instrues. :e o
senhor gordo no souber remar ele no ser" capaz de atra$essar o rio. Mma pessoa que no seja
capaz de es$aziar um recipiente que pese cinco quilos no ser" capaz de executar o algoritmo dos
quatro litros de "gua.
)lguns autores de li$ros com objeti$os idnticos a este - facilitar a aprendizagem da
programao de computadores - iniciam seus textos discorrendo exclusi$amente sobre resoluo de
pro"lemas, encarando o processador como uma ]caixa preta] que recebe as instrues formuladas
pelo algoritmo e fornece a soluo do problema, no le$ando em conta o processador quando da
)prendendo a rogramar rogramando numa 3inguagem )lgortmica #xecut"$el *23)+ - "gina 6;
formulao do tal algoritmo. #ntendemos que esta no % a melhor abordagem, $isto que o
conhecimento do que o processador pode executar pode ser definidor na elaborao do algoritmo.
or exemplo, imagine que queiramos elaborar um algoritmo para extrair o algarismo da casa das
unidades de um inteiro dado *apresentaremos posteriormente uma questo bastante pr"tica cuja
soluo depende deste algoritmo+. #$identemente, o algoritmo para resol$er esta 4grande5 questo
depende do processador que $ai execut"-lo. :e o processador for um ser humano que saiba o que %
n&mero inteiro, algarismo e casa das unidades, o algoritmo teria uma &nica instruo,
6. !ornea o algarismo das unidades do inteiro dado.
or%m, se o processador for um ser humano que saiba o que % n&mero inteiro e algarismo,
mas no saiba o que % casa das unidades, o algoritmo no poderia ser mais esse. Beste caso, para
resol$er a questo, o processador de$eria conhecer mais alguma coisa, como, por exemplo, ter a
noo de ]mais 1 direita], ficando o algoritmo agora como,
6. !ornea o algarismo ]mais 1 direita] do n&mero dado.
# se o processador % uma m"quina e no sabe o que % algarismo, casa das unidades, ]mais 1
direita], etc.a Besta hip'tese, quem est" elaborando o algoritmo de$eria conhecer que instrues o
processador % capaz de executar para poder escre$er o seu algoritmo. or exemplo, se a m"quina %
capaz de determinar o resto de uma di$iso inteira, o algoritmo poderia ser,
6. /hame de n o inteiro dadoE
8. /alcule o resto da di$iso de n por 6GE
9. !ornea este resto como o algarismo pedido.
)lgumas das questes anteriores so importantes para se desen$ol$er o raciocnio, mas no %
este tipo de questo que se pretende discutir ao longo deste li$ro. #stamos interessados em
algoritmos para,
6. (esol$er problemas matem"ticos, como algoritmos para determinar a m%dia aritm%tica de
$"rios n&meros dados, determinar as razes de uma equao do segundo grau, encontrar o m"ximo
di$isor comum de dois n&meros dados, totalizar as colunas de uma tabela, etc.
8. (esol$er questes gen%ricas, como algoritmos para colocar em ordem alfab%tica uma
relao de nomes de pessoas, atualizar o saldo de uma conta banc"ria na qual se fez um dep'sito,
corrigir pro$as de um teste de m&ltipla escolha, cadastrar um no$o usu"rio de uma locadora, etc..
Ba linguagem natural, o algoritmo para o c"lculo da m%dia pode ser escrito de forma muito
simples,
6. 0etermine a quantidade de n&merosE
8. :ome os n&meros dadosE
9. 0i$ida esta soma pela quantidade de n&meros.
Rualquer pessoa que saiba contar, somar e di$idir n&meros % capaz de executar este algoritmo
dispondo apenas de l"pis e papel. ) questo que se pe %, e se a relao conti$er 69.;8= n&merosa )
tal pessoa % capaz de executar, por%m, quanto tempo le$ar" para faz-loa
Mm outro aspecto a ser obser$ado % que nem sempre a linguagem natural % eficiente para que
as instrues sejam escritas. Bessa linguagem o algoritmo para determinao das razes de uma
equao do segundo grau teria uma instruo difcil de escre$er e difcil de compreender como,
n. :ubtraia do quadrado do segundo coeficiente o produto do n&mero quatro pelo produto dos
dois outros coeficientes.
2sto pode ser parcialmente resol$ido utilizando-se uma linguagem pr'xima da linguagem
matem"tica que j" foi utilizada em exemplos da seo anterior. Bo caso da equao do segundo
grau teramos o seguinte algoritmo, que nos % ensinado nas &ltimas s%ries do ensino fundamental,
6. /hame de a, b e c os coeficientes da equao.
)prendendo a rogramar rogramando numa 3inguagem )lgortmica #xecut"$el *23)+ - "gina 6<
8. /alcule d d bh - ;ac.
9. :e d f G fornea como resposta a mensagem, ) equao no possui razes reais.
;. :e d i G
;.6 /alcule x
6
d *-b b raiz*d++C8a e x
8
d *-b - raiz*d++C8a.
;.8 !ornea x
6
e x
8
como razes da equao.
0e maneira mais ou menos e$idente, rai./d0 est" representando a raiz quadrada de d e a
execuo deste algoritmo requer que o processador seja capaz de determinar $alores de expresses
aritm%ticas, calcular razes quadradas, efetuar comparaes e que conhea a linguagem matem"tica.
)lgoritmos para problemas gen%ricos so mais complicados e as linguagens utilizadas
anteriormente no so adequadas *para o caso da ordenao de uma relao de nomes, foram
desen$ol$idos $"rios algoritmos e teremos oportunidade de discutir alguns deles ao longo deste
li$ro+.
+56 Exemplos de algoritmos matemticos
ara uma primeira discusso em termos de aprendizagem de desen$ol$imento de algoritmos e
utilizando a linguagem usada no exemplo da equao do segundo grau, apresentamos a seguir
alguns exemplos de algoritmos que objeti$am a soluo de questes da matem"tica. ara eles
supomos que o processador seja capaz de efetuar somas, subtraes e di$ises decimais, de realizar
comparaes, de repetir a execuo de um conjunto de instrues um n&mero determinado de $ezes
ou enquanto uma condio seja atendida.
+5 Bo exemplo do algoritmo para obteno do algarismo da casa das unidades de um inteiro
dado supomos que o processador seria capaz de calcular o resto de uma di$iso inteira. .bser$ando
que no est" suposto que o nosso processador seja capaz de determinar restos de di$ises inteiras,
$amos discutir um algoritmo para a determinao do quociente e do resto da di$iso de dois inteiros
positi$os dados. or exemplo, se o di$idendo for 9G e o di$isor for ?, o algoritmo de$e fornecer os
$alores ; para o quociente e 8 para o resto. !omos ensinados que, para determinar o quociente,
de$eramos, por tentati$a, encontrar o n&mero que multiplicado pelo di$isor resultasse no maior
n&mero menor que o di$idendo. Bo exemplo num%rico citado, poderamos tentar o < e teramos <x?
d 9< que % maior que 9GE tentaramos o 9 obtendo 9x? d 86 que tal$ez seja pequeno demais em
relao ao 9GE a tentaramos o ; obtendo ;x? d 8@, encontrando ento o quociente ;. Mm
algoritmo para solucionar esta questo poderia ser,
6. /hame de 06 e 08 o di$idendo e o di$isor dados.
8. !aa 2 d 6.
9. repita 9.6 at% 2x08 e 06.
9.6. :ubstitua 2 por 2 b 6.
;. /alcule R d 2 g 6.
<. /alcule ( d 06 - Rx08.
=. !ornea ( para o resto e R para o quociente pedidos.
Bo exemplo num%rico proposto, teramos a seguinte tabela com os $alores obtidos durante a
execuo do algoritmo,
06 08 2 Rx2 R (
9G ?
6 ?
8 6;
9 86
; 8@
< 9<
; 8
)prendendo a rogramar rogramando numa 3inguagem )lgortmica #xecut"$el *23)+ - "gina 6=
)5 . algoritmo abaixo determina o menor di$isor maior que 6 de um inteiro dado. ) id%ia %
$erificar se d d 8 % di$isor e, no sendo, $erificar se 9 ou ; ou <, etc, % di$isor. ) procura por um
di$isor $ai at% que um di$isor seja encontrado. Baturalmente, utilizando o algoritmo anterior, o
nosso processador agora sabe determinar o resto da di$iso inteira de um inteiro x por outro inteiro
j no nulo. 2sto ser" indicado por (esto*x, j+. ara encontrar um di$isor de n basta encontrar um
inteiro d tal que (esto*n, d+ d G.
6. /hame de B o inteiro dado.
8. !aa 0 d 8.
9. (epita 9.6 enquanto (esto*B, 0+ G
9.6 :ubstitua 0 por 0 b 6
;. !ornea 0 para o di$isor procurado.
85 /omo se depreende facilmente da sua denominao, o mximo divisor comum *mdc+ de
dois n&meros dados % o maior n&mero que os di$ide. )ntes o mdc s' era utilizado para
simplificaes de fraes ordin"riasE atualmente ele % utilizado na determinao de c&aves p1"licas
para sistemas de criptografia (:) ^#$aristo, >, 8G6G_. or exemplo, mdc*=;, <=+ d @. 0e maneira
'b$ia, o algoritmo abaixo determina o mdc de dois n&meros dados,
6. /hame de x e de j os n&meros.
8. 0etermine 0*x+, o conjunto dos di$isores de x.
9. 0etermine 0*j+, o conjunto dos di$isores de j.
;. 0etermine 2, a interseo de 0*x+ e 0*j+.
<. 0etermine M, o maior elemento do conjunto 2.
=. !ornea M como o mdc procurado.
. c"lculo de mdc*68G, @;+ com este algoritmo seria,
6. x d 68G, j d @;.
8. 0*68G+ d k6, 8, 9, ;, <, =, @, 6G, 68, 6<, 8G, 8;, 9G, ;G, =G, 68Gl.
9. 0*@;+ d k6, 8, 9, ;, =, ?, 68, 6;, 86, 8@, ;8, @;l.
;. 2 d k6, 8, 9, ;, =, 68l.
<. M d 68.
.bser$e que o algoritmo anterior determina o menor di$isor de um inteiro no determinando
todos os di$isores, como necess"rio neste exemplo. .bser$e tamb%m que estamos supondo que o
nosso processador % capaz de determinar a interseo de dois conjuntos.
) Matem"tica fornece uma outra forma de se calcular o mdc de dois inteiros, determina-se a
decomposio em atores primos dos dois inteiros e o mdc % o produto dos fatores primos comuns
as duas decomposies com as menores multiplicidades.
ara o exemplo dado acima teramos,
68G 8 @; 8
=G 8 ;8 8
9G 8 86 9
6< 9 ? ?
< < 6
6 6
o que nos d" 68G d 8
9
x9x< e @; d 8
8
x9x? e, portanto, mdc*68G, @;+ d 8
8
x9 d 68.
Kale obser$ar que escre$er este algoritmo na linguagem informal que estamos utilizando %
bastante complicado.
Ba h" d&$ida que o primeiro algoritmo para o c"lculo do mdc apresentado % de compreenso
bastante simples. or%m, comentaremos posteriormente que ele % computacionalmente bastante
ineficiente no sentido de que sua execuo pode, dependendo dos $alores de x e #, demandar um
tempo acima do razo"$el.
)prendendo a rogramar rogramando numa 3inguagem )lgortmica #xecut"$el *23)+ - "gina 6?
or incr$el que possa parecer, um dos algoritmos mais eficientes para o c"lculo do m"ximo
di$isor comum de dois n&meros foi desen$ol$ido pelo matem"tico grego #uclides duzentos anos
)ntes de /risto. . algoritmo de ,uclides nos % apresentado nas s%ries intermedi"rias do ensino
fundamental atra$%s de um esquema como o diagrama do exemplo abaixo, cujo objeti$o %
determinar *de no$o\+ o m"ximo di$isor comum de 68G e @;.
68G @; 9= 68 G
6 8 9
. esquema funciona da seguinte forma, di$ide-se 68G por @; obtendo-se resto 9=E a partir da,
repetem-se di$ises at% que o resto seja zero, sendo o di$idendo da di$iso atual o di$isor da
di$iso anterior e o di$isor da di$iso atual o resto da di$iso anterior. . &ltimo di$isor % o m"ximo
di$isor procurado. /omo se pode $er, estas instrues escritas desta forma no so nada
compreens$eis, o que faz com elas sejam transmitidas oralmente nas salas do ensino fundamental.
Bo captulo ; *quatro+, teremos a oportunidade de discutir este algoritmo com detalhes e $eremos
que ele % um algoritmo bastante interessante no desen$ol$imento da l'gica de programao.
95 0iscutiremos agora o algoritmo para o c"lculo da m%dia de uma relao contendo um
n&mero grande *digamos, 6G GGG+ de n&meros dados. Bo caso da equao do segundo grau, eram
trs os dados de entrada e, portanto, os chamamos de a, ", e c2 Mas agora so 6G GGG os dados de
entrada\ Mma soluo poss$el % receber os n&meros um a um, somando-os antes de receber o
seguinte, conforme $imos na seo 6.<.
6. /hame de ) o primeiro n&mero dado.
8. !aa : d ).
9. (epita A AAA $ezes as instrues 9.6 e 9.8.
9.6 /hame de ) o pr'ximo n&mero dado.
9.8 :ubstitua o $alor de : por : b ).
;. /alcule M d :C6G GGG.
<. !ornea M para o $alor da m%dia.
or exemplo, se a relao de n&meros fosse k<, 9, @, 66, ...l at% a quarta execuo de 9.6 e 9.8
teramos a seguinte tabela,
) : M
< <
9 @
@ 6=
66 8?
#st" f"cil perceber que ap's A.AAAm execuo das instrues 9.6 e 9.8 a $ari"$el : conter" a
soma de todos os n&meros da relao, o que justifica a instruo ;.
;5 Mm outro exemplo que justifica plenamente a necessidade do conhecimento do que o
processador % capaz de executar % a determinao do maior n&mero de uma relao de n&meros. :e
o processador for um aluno do ensino m%dio e a relao conti$er poucos n&meros, uma simples
olhada na relao permitir" se identificar o maior n&mero. Mas, e se o processador for um aluno das
classes iniciais do ensino fundamentala # se a relao conti$er 6G GGG n&merosa # se os n&meros
esti$erem escritos em forma de frao ordin"riaa
Mma soluo poss$el % supor que o maior n&mero % o primeiro da relao e comparar este
suposto maior com os demais n&meros, alterando-o quando for encontrado um n&mero na relao
maior do que aquele que at% aquele momento era o maior.
6. /hame de ) o primeiro n&mero dado.
8. !aa M d ).
9. (epita A AAA $ezes as instrues 9.6 e 9.8.
9.6 /hame de ) o pr'ximo n&mero dado.
)prendendo a rogramar rogramando numa 3inguagem )lgortmica #xecut"$el *23)+ - "gina 6@
9.8 :e ) e M substitua o $alor de M por ).
;. !ornea M para o $alor do maior n&mero.
ara exemplificar, suponha que a entrada fosse o conjunto k<, 9, @, 66, 6G...l. )t% a quinta
execuo das instrues 9.6 e 9.8 teramos a seguinte tabela,
) M
< <
9
@ @
66 66
6G
+5@ #inguagens de alto nvel
/omputadores digitais foram concebidos para executarem instrues escritas em linguagem
de m"quina. 2sto significa que um computador % capaz de executar um algoritmo escrito nesta
linguagem. Mm algoritmo escrito em linguagem de m"quina % normalmente chamado de programa
o"3eto. Bos prim'rdios da computao, os algoritmos que se pretendiam que fossem executados por
um computador eram escritos em linguagem de m"quina, o que torna$a a tarefa de desen$ol$imento
de algoritmos muito trabalhosa, de$ido ao fato de que era necess"rio que se conhecesse qual
seqYncia de bits correspondia 1 instruo pretendida. Baturalmente, esta dificuldade acontecia pelo
fato de que o ser humano no est" habituado a uma linguagem com apenas dois smbolos b"sicos.
Mm grande a$ano ocorreu na computao quando se conseguiu desen$ol$er programas que
traduzissem instrues escritas originariamente numa linguagem dos seres humanos para a
linguagem de m"quina. . surgimento de programas para esta finalidade permitiu o
desen$ol$imento de algoritmos em linguagens que utilizam caracteres, pala$ras e expresses de um
idioma, ou seja, uma linguagem cujos smbolos b"sicos e cujas pala$ras esto no cotidiano do ser
humano. Mma linguagem com esta caracterstica % chamada linguagem de alto nvel, onde alto nvel
a no se refere 1 qualidade e sim ao fato de que ela est" mais pr'xima da linguagem do ser humano
do que da linguagem da m"quina *quando alguma coisa est" mais pr'xima da m"quina do que do
ser humano dizemos que ela % de "aixo nvel+. /omo exemplo de linguagens de alto n$el temos
Pascal, %, 4elp&i, 5isual 6asic! 7ava e %
88
. Mm algoritmo escrito numa linguagem de alto n$el %
chamado programa onte ou simplesmente programa
/omo foi dito acima, um programa onte de$e ser traduzido para a linguagem de m"quina. n"
dois tipos de programas que fazem isto, os interpretadores que traduzem os comandos para a
linguagem de m"quina um a um e os compiladores que traduzem todo o programa para a linguagem
de m"quina. Mm compilador ao receber como entrada um programa fonte fornece como sada um
programa escrito em linguagem de m"quina, chamado programa o"3eto. ) compilao do
programa, portanto, gera um programa que pode ento ser executado. X comum nos referirmos 1
execuo do programa fonte quando se est" executando o programa objeto.
>" um interpretador traduz para a linguagem de m"quina os comandos do programa um a um,
executando-os em seguida. )ssim a interpretao de um programa no gera um programa objeto.
+5: Sintaxe e semEntica de uma instru%&o
/ Due sintaxe
0issemos que um programa escrito em linguagem de alto n$el % traduzido para a linguagem
de m"quina por um compilador ou cada instruo % traduzida por um interpretador. X natural se
admitir que, para que o compilador consiga traduzir uma instruo escrita com caracteres de algum
idioma para instrues escritas como seqYncias de zeros e uns, % necess"rio que cada instruo seja
escrita de acordo com regras preestabelecidas. #stas regras so chamadas sintaxe da instruo e
)prendendo a rogramar rogramando numa 3inguagem )lgortmica #xecut"$el *23)+ - "gina 6A
quando no so obedecidas dizemos que existe erro de sintaxe.
:e o programa fonte cont%m algum erro de sintaxe, o compilador no o traduz para a
linguagem de m"quina *isto %, o compilador no compila o programa+ e indica qual o tipo de erro
cometido e a instruo onde este erro aconteceu. :e o programa fonte for interpretado, ele %
executado at% a instruo que cont%m o erro, quando ento % interrompida a sua execuo e o tal
erro % indicado.
/ Due semEntica
Baturalmente, cada instruo tem uma finalidade especfica. .u seja, a execuo de um
instruo resulta na realizao de alguma ao, digamos parcial, e % a seqYncia das aes parciais
que redunda na realizao da tarefa para a qual o programa foi escrito. ) ao resultante da
execuo de uma instruo % chamada sem'ntica da instruo. 2nfelizmente, um programa pode no
conter erros de sintaxe *e, portanto, pode ser executado+, mas a sua execuo no fornecer como
sada o resultado esperado para alguma entrada. Beste caso, dizemos que o programa cont%m erros
de lgica que, ao contr"rio dos erros de sintaxe que so detectados pelo compilador ou pelo
interpretador, so, 1s $ezes, de difcil deteco.
Bo nosso entendimento, para aprender a programar numa determinada linguagem % necess"rio
que se aprenda as instrues daquela linguagem *para que se conhea o que o processador % capaz
de fazer+, a sintaxe de cada um destes instrues e as suas sem7nticas. )liado a isto, de$e-se ter um
bom desen$ol$imento de lgica programao para que se escolha as instrues necess"rias e a
seqYncia segundo a qual estas instrues de$em ser escritas, para que o programa, ao ser
executado, execute a tarefa pretendida. !elizmente ou infelizmente, para cada tarefa que se pretende
no existe apenas uma seqYncia de instrues que a realize. .u seja, dado um problema no existe
apenas um programa que o resol$a. 0e$emos procurar o mel&or programa, entendendo-se como
mel&or programa um programa que tenha boa legi"ilidade, cuja execuo demande o menor tempo
poss$el e que necessite, para sua execuo, a utilizao mnima da mem'ria.
#xiste um conjunto de instrues que % comum a todas as linguagens de alto n$el e cujas
sem7nticas permitem executar a maioria das tarefas. ) aprendizagem das sem7nticas destas
instrues e das suas sintaxes em alguma linguagem de programao *aliado ao desen$ol$imento da
lgica de programao+ permite que se aprenda com facilidade outra linguagem do mesmo
paradigma.
+5+* Sistemas de computa%&o
/omo foi dito anteriormente, a cpu de um computador % capaz de executar instrues *escritas
em linguagem de m"quina, permitam a repetio+. .u seja, um computador % capaz de executar
programas e s' para isto % que ele ser$e. :e um computador no esti$er executando um programa
ele para nada est" ser$indo. /omo foram concebidos os computadores atuais, um programa para ser
executado de$e estar armazenado na sua memria. . armazenamento dos programas *e todo o
gerenciamento das interaes entre as di$ersas unidades do computador+ % feito por um programa
chamado sistema operacional. Mm dos primeiros sistemas operacionais para gerenciamento de
microcomputadores foi o 49S /4is: 9perating S#stem0. Ruando um computador % ligado, de
imediato o sistema operacional % armazenado na mem'ria e s' a partir da o computador est" apto a
executar outros programas. #stes programas podem ser um game, que transforma o ]computador]
num poderoso $eculo de entretenimentoE podem ser um processador de texto, que transforma o
]computador] num poderoso $eculo de edio de textosE podem ser uma planil&a eletr+nica, que
transforma o ]computador] num poderoso $eculo para manipulao de tabelas num%ricas, podem
ser programas para gerenciar, por exemplo, o dia a dia comercial de uma farm"cia e podem ser
ambientes que permitam o desen$ol$imento de games ou de programas para gerenciar o dia a dia
comercial de uma farm"cia. Jal$ez com exceo de um game, os programas citados acima so, na
$erdade, conjuntos de programas que podem ser executados de forma integrada. Mm conjunto de
)prendendo a rogramar rogramando numa 3inguagem )lgortmica #xecut"$el *23)+ - "gina 8G
programas que podem ser executados de forma integrada % chamado sotware. or seu turno, as
unidades do computador, associadas a outros equipamentos chamados peri;ricos, como uma
impressora, constituem o &ardware. . que nos % &til % um conjunto sotware b &ardware. Mm
conjunto deste tipo % chamado de um sistema de computao. 0e agora em diante, os nossos
processadores sero sistemas de computao. 2sto %, queremos escre$er programas que sejam
executado por um sistema de computao.
/omo foi dito acima, o desen$ol$imento de um programa que gerencie o dia a dia comercial
de uma farm"cia requer um compilador *ou um interpretador+ que o traduza para a linguagem de
m"quina. )ntigamente, as empresas que desen$ol$iam compiladores desen$ol$iam apenas estes
programas, de tal sorte que o programador necessita$a utilizar um processador de texto 1 parte para
edio do programa fonte. )tualmente, os compiladores so integrados num sistema de computao
que cont%m, entre outros,
6. Processador de texto, para a digitao dos programas fontesE
8. 4epurador, que permite que o programa seja executado comando a comando, o que facilita
a descoberta de erros de l'gicaE
9. <elp, que descre$e as sintaxes e as sem7nticas de todas as instrues da linguagemE
;. Lin:er, que permite que um programa utilize outros programas.
(igorosamente falando, um sistema constitudo de um compilador e os sotwares listados
acima de$eria ser chamado de am"iente de programaoE % mais comum, entretanto, cham"-lo
simplesmente de compilador.
. ambiente de programao utilizado neste li$ro, denominado ILA, cont%m um interpretador!
um depurador e um &elp e foi desen$ol$ido pelo rofessor :%rgio /respo, da Mni$ersidade do Kale
do rio dos :inos, MB2:2B.:. . interpretador interpreta programas desen$ol$idos numa linguagem
algortmica na qual os comandos so escritos em portugus e possuem sintaxes bastante simples.
/omo o 23) no tem integrado um editor de texto, os programas de$em editados num processador
de texto que gra$e os textos editados em c'digo ):/22, como, por exemplo, o "loco de notas do
oindo`s.
+5++ Exerccios propostos
+5 Jrs ndios precisam afastar de suas terras trs brancos in$asores. ara tal e dispondo de um
barco cuja capacidade % de apenas duas pessoas, precisam atra$essar um rio. or questes de
segurana, os ndios no querem ficar em minoria, em nenhum momento e em nenhuma das
margens. #scre$a um algoritmo que oriente os ndios para realizarem a tra$essia nas condies
fixadas. */abe obser$ar que, usualmente, este exerccio % enunciado en$ol$endo trs jesutas e trs
canibais. ) alterao feita % uma modesta contribuio para o resgate da $erdadeira hist'ria dos
ndios+.
)5 . jogo conhecido como =orre de <ani consiste de trs torres chamadas origem, destino e
auxiliar e um conjunto de n discos de di7metros diferentes, colocados na torre origem na ordem
decrescente dos seus di7metros. . objeti$o do jogo %, mo$endo um &nico disco de cada $ez e no
podendo colocar um disco sobre outro de di7metro menor, transportar todos os discos para torre
destino, podendo usar a torre auxiliar como passagem intermedi"ria dos discos. #scre$a algoritmos
para este jogo nos casos n d 8 e n d 9.
85 2magine que se disponha de trs esferas numeradas 6, 8 e 9 iguais na forma, duas delas com
pesos iguais e diferentes do peso da outra. #scre$a um algoritmo que, com duas pesagens numa
balana de dois pratos, determine a esfera de peso diferente e a relao entre seu peso e o peso das
esferas de pesos iguais.
95 ) m;dia geom;trica de n n&meros positi$os % a raiz n-%sima do produto destes n&meros.
:upondo que o processador % capaz de calcular razes n-%simas, escre$a um algoritmo para
determinar a m%dia geom%trica de n n&meros dados.
;5 :abendo que o dia G6CG6C6AGG foi uma segunda-feira, escre$a um algoritmo que determine
)prendendo a rogramar rogramando numa 3inguagem )lgortmica #xecut"$el *23)+ - "gina 86
o dia da semana correspondente a uma data, posterior a G6CG6C6AGG, dada. or exemplo, se a data
dada for 89CG6C6AGG, o algoritmo de$e fornecer como resposta tera-feira.
=5 . sho` de uma banda de rocI, que ser" realizado na margem de um rio, de$e comear
exatamente 1s 86 h. )trasados, 1s 8G h ;9 min, os quatro integrantes da banda esto na outra
margem do rio e necessitam, para chegar ao palco, atra$essar uma ponte. n" somente uma lanterna
e s' podem passar uma ou duas pessoas juntas pela ponte, e sempre com a lanterna. /ada integrante
possui um tempo diferente para atra$essar a ponte, o $ocal le$a 6G minutos, o guitarrista < minutos,
o baixista 8 minutos e o baterista 6 minuto. #$identemente, quando dois atra$essam juntos, o tempo
necess"rio % o do mais lento. #scre$a um algoritmo que permita que a banda atra$esse a ponte de
modo que o sho` comece na hora marcada.
65 (esol$a a questo 9 para o caso de oito esferas.
/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 "ntrodu%&o , #inguagem Algortmica
)5+ Variveis simples
Bos exemplos do captulo anterior, utilizamos instrues do tipo c&ame de a! " e c os
coeicientes. /om isto queramos admitir que processador fosse capaz de associar cadeias de
caracteres a $alores num%ricos. /omo o nosso processador, de agora em diante, ser" um sistema de
computao, as coisas tm que ser mais rigorosas.
Ba seo 6.6 foi dito que uma das unidades b"sicas de um computador % a memria, cuja
finalidade % armazenar dados e informaes que sero manipulados pela unidade central de
processamento. Ba seo anterior tamb%m foi dito que os programas para serem executados de$em
estar armazenados na mem'ria. .u seja, a mem'ria armazena programas que sero executados e
dados que estes programas $o manipular. #stes dados podem ser dados de entrada ou dados
gerados pela execuo do programa. ara que a mem'ria possa armazenar dados e programas, ela %
di$idida em partes, chamadas posi(es de memria, podendo o sistema operacional acessar cada
uma destas posies para armazenar tais dados. . acesso do sistema operacional 1s posies de
mem'ria % poss$el porque a cada uma delas % associada uma sequncia de bitps, chamada endereo
da posio de mem'ria.
#m programao de computadores, uma varivel simples *ou simplesmente varivel+ % uma
posio de mem'ria 1 qual esto associados um identiicador e um tipo de dado. . identiicador %
uma sequncia de letras, dgitos e caractere para sublinhamento *sequncia que de$e comear com
uma letra+ e ser" utilizada no programa para se fazer referncia 1quela $ari"$el. /omo um programa
de$e ser leg$el por outros programadores *e pelo pr'prio programador, em leituras posteriores+, %
uma boa pr"tica se escolher um identificador de uma $ari"$el que tenha alguma relao com a sua
finalidade. :e uma $ari"$el de$e armazenar uma soma, um identificador muito bom para ela ser"
Soma. :e uma $ari"$el $ai receber n&meros, ela poderia ser identificada por )um ou por )umero.
Baturalmente, no se pode utilizar um mesmo identificador para $ari"$eis distintas, de$endo a
distino entre os identificadores ocorrer at% o $ig%simo caractere. /omo $eremos a seguir, a
linguagem algortmica do 23) fixa alguns identificadores para as sintaxes de seus comandos. #stes
identificadores no podem ser utilizados nos programas, sendo conhecidos por palavras reservadas.
. tipo de dado associado a uma $ari"$el % o conjunto de elementos que podem ser nela
armazenados. . 23) aceita trs tipos de dados, numerico, logico e caracter *numerico e logico so
escritos assim mesmo, sem acentos+. Mma $ari"$el do tipo numerico *como esta denominao
indica+ est" apta a armazenar n&merosE uma $ari"$el do tipo logico est" apta a armazenar os $alores
also e verdadeiro e uma $ari"$el do tipo caracter est" apta a armazenar cadeias de caracteres
*pala$ras, sequncias de algarismos, sequncias de letras e algarismos, etc.+.
ara que o sistema de computao possa reser$ar as posies de mem'ria que sero utilizadas
pelo programa, associar identificadores aos endereos destas posies de mem'ria e definir a
quantidade de bjtes de cada posio de mem'ria, de acordo com o tipo de dado pretendido, um
programa escrito em 23) comea com a declarao de variveis, que de$e ser feita com a seguinte
sintaxe,
Karia$eis
Jipo de dado 3ista de identificadores
com 5ariaveis escrito assim mesmo, sem acento.
or exemplo, um programa para determinar a m%dia de uma relao de n&meros dados pode
ter a seguinte definio,
Karia$eis
Bumerico Bum, :oma, Ruant, Media
) ideia % que )um sir$a para armazenar os n&meros *um de cada $ez+E Soma para armazenar a
soma dos n&merosE >uant para armazenar a quantidade de n&meros e ?edia para armazenar *a %
)prendendo a rogramar rogramando numa 3inguagem )lgortmica #xecut"$el *23)+ - "gina 89
e$idente+ a m%dia procurada.
/onsiderando as obser$aes acima a respeito dos identificadores e o fato de que o
interpretador 23) no faz distino entre letras mai&sculas e min&sculas, a definio abaixo
pro$ocaria erro
Karia$eis
Bumerico Maiorqtrianguloqequilatero
/aracter maiorqtrianguloqequiangulo
pois os $inte primeiros caracteres so *para o interpretador+ iguais.
Bas sees 8.= e 8.@ $eremos com que comandos o 23) armazena dados de entrada e dados
gerados pela execuo do programa em $ari"$eis. Mm $alor armazenado em uma $ari"$el %
comumente referido como sendo o conte1do da $ari"$el ou o valor da $ari"$el. Jamb%m % comum
se referir ao identificador da $ari"$el como sendo a pr'pria $ari"$el.
)5) ExpressFes aritmticas
. 23), como era de se esperar, % capaz de a$aliar expresses aritm%ticas que en$ol$am as
operaes bin"rias de multiplicao, di$iso, soma e subtrao e a operao un"ria de troca de
sinal. ara isto so usados os operadores aritm;ticos M, para a multiplicao, L, para a di$iso, N,
para a soma, e H, para a subtrao e troca de sinal.
Mma expresso que en$ol$a di$ersas operaes % a$aliada de acordo com as regras de
prioridade da matem"tica, em primeiro lugar % realizada a operao troca de sinal, em seguida so
realizadas as multiplicaes e di$ises e, finalmente, as somas e subtraes. or exemplo, a
expresso @ b 8r-9 % a$aliada como sendo igual a @ b *-=+ d 8. Baturalmente, a prioridade pode ser
alterada com a utilizao de parntesis, a expresso *@ b 8+r-9 resulta em 6Gr*-9+ d -9G. #mbora, o
sistema no exija, $amos sempre utilizar parntesis para separar o operador un"rio para troca de
sinal de algum operador bin"rio. )ssim, @ b 8r-9 ser" indicada por @ b 8r*-9+. Mma expresso no
parentesiada contendo operadores de mesma prioridade % a$aliada da esquerda para direita. or
exemplo, 6GC8r9 % igual a *6GC8+r9 d <r9 d 6<.
. sistema tamb%m % capaz de calcular potncias atra$%s do operador O. )ssim, o sistema
a$alia a expresso 8s6G como sendo 6 G8;. >" 9s-8 % igual a
6
9
8
=
6
A
=G, 66
*o sistema trabalha com
duas casas decimais+. referiremos tamb%m escre$er 9s*-8+ no lugar de 9s-8. ) potenciao tem
prioridade maior que a multiplicao e que a soma. )ssim, 8r9s; d 8r*9s;+ d 8r@6 d 6=8.
.perandos podem ser conte&dos de $ari"$eis. Beste caso, o operando % indicado pelo
identiicador da $ari"$el *% para isto que ser$e o identificador, para se fazer referncia aos $alores
que na $ari"$el esto armazenados+.
)tra$%s de uma uno pr;@deinida *$eremos o que % isto posteriormente+, o 23) tamb%m %
capaz de calcular restos de di$ises inteiras entre dois n&meros inteiros positi$os. 2sto % feito por
meio da sintaxe
(esto*#xpresso6, #xpresso8+
onde #xpresso6 e #xpresso8 so expresses num%ricas que resultam num $alor inteiro.
or exemplo, o 23) a$alia a expresso 8s9 - (esto*=r<, @C8+ atra$%s de
8s9 - (esto*=r<, @C8+ d @ - (esto*9G, ;+ d @ - 8 d =.
Baturalmente, (esto*?, 68+ resulta no $alor ?. Kale obser$ar que se o $alor de #xpresso 6 ou
de #xpresso 8 so fracion"rios, (esto*#xpresso 6, #xpresso 8+ % 4calculado5, mas com erros
incontrol"$eis pelo programador.
)prendendo a rogramar rogramando numa 3inguagem )lgortmica #xecut"$el *23)+ - "gina 8;
)58 Rela%Fes
. sistema 23) realiza compara(es entre $alores num%ricos, realizadas no sentido usual da
Matem"tica, atra$%s dos operadores relacionais P *maior do que+, PQ *maior do que ou igual a+, R
*menor do que+, RQ *menor do que ou igual a+, Q *igual+ e RP *dierente+. Mma expresso
en$ol$endo operadores relacionais % chamada relao e o resultado da a$aliao de uma relao %
um dos resultados also ou verdadeiro, obtido, como j" foi dito, como na Matem"tica. )ssim, 9 e <
resulta no $alor also, enquanto que ? fd ? resulta no $alor verdadeiro. :endo um $alor also ou
verdadeiro, o resultado da a$aliao de uma relao pode ser armazenado numa $ari"$el do tipo
Logico.
.s operandos de uma relao podem ser expresses aritm%ticas. Beste caso, a a$aliao das
expresses aritm%ticas tem prioridade em relao a a$aliao das relaes. or exemplo, a relao
9s8 - < f 8r9 - ; resulta no $alor also, pois 9s8 - < d ; e 8r9 - ; d 8.
)59 ExpressFes l(gicas
. 23) tamb%m a$alia express(es lgicas obtidas atra$%s da aplicao dos operadores lgicos
"inrios e e ou a duas relaes ou da aplicao do operador lgico unrio nao *assim mesmo sem
acento+ a uma relao. :e (
6
e (
8
so duas relaes, a a$aliao da aplicao dos operadores l'gicos
bin"rios, de acordo com os $alores de (
6
e (
8
, so dados na tabela abaixo.
(
6
(
8
*(
6
+ e *(
8
+ *(
6
+ ou *(
8
+
verdadeiro verdadeiro verdadeiro verdadeiro
verdadeiro also also verdadeiro
also verdadeiro also verdadeiro
also also also also
.u seja, uma expresso l'gica do tipo /A
B
0 e /A
C
0 s' recebe o $alor verdadeiro se os $alores de
(
6
e de (
8
forem verdadeiroE uma expresso l'gica do tipo /A
B
0 ou /A
C
0 s' recebe o $alor also se os
$alores de (
6
e de (
8
forem also.
) aplicao do operador un"rio nao simplesmente in$erte o $alor original da relao,
(
6
nao *(
6
+
5,A4A4,IA9 FALS9
also verdadeiro
/omo indicado acima, as relaes operandos de uma expresso l'gica de$em estar dentro de
parnteses.
/onsiderando que os operadores e e ou possuem o mesmo grau de prioridade, se uma
expresso no parentesiada possuir mais de uma relao, ela ser" a$aliada da esquerda para direita.
. operador un"rio nao tem prioridade em relao aos operadores bin"rios. )ssim,
nao *< e 9+ ou *< f 9+ tem $alor also, pois nao *< e 9+ % also e < f 9 tamb%m %.
)5; EstruturaLExecu%&o de um programa em "#A
#stamos tentando aprender a escre$er programas em 23). >" $imos que se o programa
necessitar manipular $ari"$eis, estas de$em ser definidas no incio do programa.
Keremos no captulo < que um programa pode conter un(es. Beste caso, a definio das
funes de$e seguir logo a definio das $ari"$eis. )p's a definio das funes aparece a &nica
parte do programa que % obrigat'ria. #sta parte % chamada "loco principal ou programa principal e
contm a sequncia de comandos *e c&amadas de un(es g o que ser" $isto no captulo acima
referido+ que constitui o programa propriamente dito. 0esta forma, um programa escrito em 23)
ter" a seguinte estrutura.
)prendendo a rogramar rogramando numa 3inguagem )lgortmica #xecut"$el *23)+ - "gina 8<
Karia$eis
Jipo de dado 3ista de identificadores
!uncao
2nicio
CCcomandos da funo .
!im
2nicio
CCcomandos do programa principal
!im
. 23) no cont%m um editor de textos e % um sistema que % executado sob a ao do sistema
operacional 0.:. 0esta forma, os programas *editados em um processador de textos qualquer+
de$em ser sal$os no modo txt e identificados por -ome0oArDuivo5ila, onde -ome0oArDuivo
de$e ter no m"ximo oito caracteres e % escolhido pelo programador *como no caso dos
identificadores de $ari"$eis, % uma boa pr"tica se escolher um -ome0eArDuivo que tenha alguma
relao com o objeti$o do programa+. )p's a gra$ao do programa na pasta que cont%m o 23), a
sua execuo pode ser solicitada atra$%s do prompt do 0.: com o comando ila -ome0oArDuivo.
)5= Comando de entrada
Kimos anteriormente que a maioria dos programas manipula dados que so fornecidos pelo
usu"rio durante a execuo do programa. #stes dados, repetindo, constituem a entrada do programa
e, naturalmente, de$em ser armazenados em $ari"$eis. . comando do 23) que permite que o
usu"rio digite no teclado algum dado durante a execuo de um programa e que armazena este dado
na mem'ria % chamado comando de entrada e de$e ser escrito com a seguinte sintaxe,
3er 2dentificador da $ari"$el
Ruando da execuo de um comando de entrada, todo o processamento % interrompido e o
sistema fica aguardando que o usu"rio digite um $alor. Ruando um $alor % digitado o sistema
$erifica se este % um $alor do tipo de dado da $ari"$el e, em caso positi$o, o armazena naquela
$ari"$el. or exemplo,
Karia$eis
/aracter !rase
2nicio
3er !rase
!im
% um programa em 23), que, simplesmente, armazenar" uma cadeia de caracteres digitada no
teclado na $ari"$el Frase *ou seja, para nada ser$e, pois a cadeia armazenada naquela posio de
mem'ria 4e$anesce5 quando a execuo do programa % encerrada.
0o mesmo modo, o programa
Karia$eis
Bumerico Bum
2nicio
3er Bum
!im
armazenar" *por um curtssimo inter$alo de tempo+ um n&mero digitado no teclado. #ste exemplo
est" sendo dado para que leitor seja alertado a respeito do seguinte ponto importante. :e for digitado
um n&mero inteiro pertencente ao inter$alo fechado ^-96?=@, 98?=?_, ele ser" armazenado e tratado
como um inteiro realmente, enquanto que se for digitado um inteiro que no pertence a este
)prendendo a rogramar rogramando numa 3inguagem )lgortmica #xecut"$el *23)+ - "gina 8=
inter$alo ele ser" armazenado como um n&mero fracion"rio *com a parte decimal igual a zero+. :e
um inteiro deste fosse utilizado, por exemplo, para o c"lculo do resto de uma di$iso ocorreria erro.
)56 Comando de sada
0e maneira natural, % necess"rio que o sistema disponha de mecanismos que permita que ele
fornea os resultados da execuo do algoritmo. 2sto % feito atra$%s do comando de sada, que de$e
ser escrito com a seguinte sintaxe,
#scre$er 3ista de par7metros
onde Lista de par'metros pode conter *separados por $rgulas+ identificadores de $ari"$eis,
expresses *expresses aritm%ticas e l'gicas e relaes+ e mensagens.
Bo primeiro caso, o conte&do da $ari"$el associada ao comando % exibido na tela do $deoE no
segundo caso, a expresso % a$aliada e o seu resultado % exibido e no terceiro caso, a mensagem
*que de$e ser escrita entre aspas+ % exibida. or exemplo,
2nicio
#scre$er 4#stou aprendendo a programar5
!im
% um programa em 23), cuja execuo faz com que seja exibida na tela a mensagem ,stou
aprendendo a programar. Baturalmente, toda $ez que este programa for executado ser" exibida a
mensagem acima. :e o usu"rio pretende que a mensagem a ser exibida dependa da sua inspirao
na hora da execuo *ou do seu objeti$o+, o programa de$eria ser modificado para
Karia$eis
/aracter !rase
2nicio
3er !rase
#scre$er !rase
!im
)gora a mensagem a ser exibida ser" aquela que for digitada durante a execuo do comando
Ler Frase. or exemplo, se o usu"rio no momento da execuo do programa esti$er pensando na
sua amada, pode na execuo do comando Ler Frase digitar a frase ,u te amo e ser" esta a frase
que aparecer" na tela.
ara outro exemplo, considere o seguinte programa,
Karia$eis
Bumerico x, j, z
2nicio
3er x
3er j
3er z
#scre$er *x b j b z+C9
!im
Ruando da sua execuo, o sistema, para execuo dos comandos 3er x, 3er j e 3er z,
aguarda que sejam digitados trs $alores num%ricos. Ruando isto % feito, o sistema armazena estes
trs $alores, respecti$amente, nas $ari"$eis x, j e z. ara execuo do &ltimo comando, o 23)
a$alia a expresso *x b j b z+C9 e exibe o seu $alor na tela. )ssim, o programa fornece a m%dia
aritm%tica de trs n&meros dados. ara mais exemplo, obser$e que o programa
2nicio
#scre$er < f 9
!im
)prendendo a rogramar rogramando numa 3inguagem )lgortmica #xecut"$el *23)+ - "gina 8?
exibe na tela o $alor also.
Bo nosso entendimento, no % uma boa pr"tica se utilizar uma expresso num comando
,screver. :e o $alor de uma expresso % &til para alguma coisa, ele de$e ser armazenado em alguma
$ari"$el *$eremos isto na pr'xima seo+ e esta de$e ser utilizada para o fornecimento de
resultados.
) possibilidade de emisso de mensagens atra$%s do comando ,screver permite que o pr'prio
programa facilite a sua execuo e que torne compreens$eis os resultados fornecidos. 0a forma em
que est" escrito, a execuo do programa acima que fornece a m%dia de trs n&meros dados %
dificultada pelo fato de que a execuo dos comandos de leitura faz com que o sistema aguarde a
digitao dos n&meros pretendidos *o cursor fica simplesmente piscando na tela+ e o usu"rio pode
no saber o que est" se passando. )l%m disto, a execuo do comando #scre$er exibe apenas o
resultado da expresso, sem indicao do que aquele $alor se refere. )ssim, o programa referido
ficaria muito melhor da seguinte forma
Karia$eis
Bumerico x, j, z
2nicio
#scre$er ]0igite os trs n&meros]
3er x
3er j
3er z
#scre$er ]) m%dia dos n&meros ], x, ] , ], j, ] e ], z, ] % igual a ], *x b j b z+C9
!im
.utro detalhe importante % que um comando de$e ser escrito numa &nica linha. )ssim, o
leitor de$e $er o tal &ltimo comando - e todos os comandos dos exemplos ao longo do li$ro - como
se esti$essem numa mesma linha.
)5@ Comando de atriCui%&o
) seo 8.= apresentou o comando que permite que se armazene em $ari"$eis a entrada do
programa. )gora $eremos como armazenar dados gerados pela sua execuo. #nfatizando o que foi
dito na seo 6.< relati$o ao fato de que algoritmos podem manipular dados gerados por execues
de instrues anteriores, considere um programa para o c"lculo da m%dia de uma relao de
n&meros. Baturalmente, a quantidade de n&meros da relao *se no foi fornecida a priori+ de$e ser
de alguma forma determinada e armazenada em alguma $ari"$el para que possa ser utilizada no
c"lculo final da m%dia pretendida.
. armazenamento de dados gerados pelo pr'prio programa, alteraes no conte&do de uma
$ari"$el e determinaes de resultados finais de um processamento so realizados atra$%s do
comando de atri"uio! que de$e ser escrito com a seguinte sintaxe.
2dentificador de $ari"$el d expresso
Baturalmente, a expresso do segundo membro pode se resumir a um $alor constante
pertencente ao tipo de dado da $ari"$el do primeiro membro. Beste caso, este $alor % armazenado
naquela $ari"$el. :e no for este o caso, a expresso % a$aliada e, se for do mesmo tipo da $ari"$el
do primeiro membro, o resultado % armazenado na $ari"$el. ) expresso do segundo membro pode
en$ol$er a pr'pria $ari"$el do primeiro membro. Beste caso, o conte&do anterior da $ari"$el ser"
utilizado para a a$aliao da expresso e ser" substitudo pelo $alor desta expresso. or exemplo,
se i % uma $ari"$el do tipo )umerico, o comando i d i b 6, faz com que o seu conte&do seja
incrementado de uma unidade.
)5: Exemplos Parte "
)prendendo a rogramar rogramando numa 3inguagem )lgortmica #xecut"$el *23)+ - "gina 8@
+5 Koltando ao programa do c"lculo da m%dia de trs n&meros dados, obser$e que a m%dia foi
calculada e exibida, no tendo sido armazenada. :e este programa fizesse parte de um programa
maior *e isto normalmente acontece\ Bo se usa computao para uma questo to simples\+ e esta
m%dia fosse necess"ria em outra parte do programa, aquele trecho teria que ser rescrito. X uma boa
pr"tica, portanto, que resultados finais de processamento sejam armazenados em $ari"$eis, sendo
ento os conte&dos destas $ari"$eis exibidos atra$%s do comando ,screver. )ssim, o programa
referido ficaria melhor escrito da seguinte forma.
CCrograma que determina a m%dia aritm%tica de trs n&meros dados
Karia$eis
Bumerico x, j, z, Media
2nicio
#scre$er ]0igite os trs n&meros]
3er x
3er j
3er z
Media d *x b j b z+C9
#scre$er ]) m%dia dos n&meros ], x, ] , ], j, ] e ], z, ] % igual a ], Media
!im
Mma linha de um programa em 23) iniciada por LL no % traduzida para linguagem de
m"quina pelo interpretador. 2sto permite, como fizemos acima, incluir no texto comentrios, que
ser$iro para esclarecimentos sobre os objeti$os do programa, finalidades de suas $ari"$eis e das
un(es *$er captulo <+ nele definidas. #stes esclarecimentos facilitam a compreenso do programa
numa leitura posterior. X uma boa pr"tica de programao a incluso coment"rios nos textos dos
programas.
)5 . exemplo a seguir se justifica pelo fato de que o operador L realiza di$ises decimais.
Keremos posteriormente, 1s $ezes, necessitamos obter o quociente da di$iso inteira de dois inteiros
dados. or exemplo, se os inteiros dados forem 9G e ?, o quociente % igual a ;. /omo o 23) calcula
o resto de di$iso inteira *$er seo 8.8+, podemos utilizar a identidade undamental da diviso
di$idendo d di$isor x quociente b resto
para escre$er um programa que receba dois inteiros e fornea o quociente da di$iso entre eles.
CCrograma que determina o quociente de uma di$iso inteira
Karia$eis
Bumerico 0i$idendo, 0i$isor, Ruoc, (est
2nicio
#scre$er ]0igite o di$idendo e o di$isor - di$isor diferente de zero\]
3er 0i$idendo
3er 0i$isor
(est d (esto*0i$idendo, 0i$isor+
Ruoc d *0i$idendo - (est+C0i$isor
#scre$er ]. quociente da di$iso ], 0i$idendo,]C],0i$isor,]t % igual a ], Ruoc
!im
Ba seo ;.; apresentaremos um programa para calcular quocientes de di$ises, supondo que
o sistema no calcula restos de di$ises inteiras.
85 )gora apresentaremos um programa que recebendo um n&mero inteiro como entrada
fornece o algarismo da casa das unidades deste n&mero, questo discutida na seo 6.=. /omo
$imos naquela seo, o algarismo procurado % o resto da di$iso do n&mero dado por 6G. Jemos
ento o seguinte programa.
CCrograma que determina o algarismo da casa das unidades de um inteiro dado
Karia$eis
)prendendo a rogramar rogramando numa 3inguagem )lgortmica #xecut"$el *23)+ - "gina 8A
Bumerico Bum, Mnidade
2nicio
#scre$er ]0igite um inteiro]
3er Bum
Mnidade d (esto*Bum, 6G+
#scre$er ]. algarismo das unidades de ], Bum, ] % ], Mnidade
!im
95 :e quis%ssemos um programa para in$erter um n&mero com dois algarismos *por exemplo,
se a entrada fosse ?;, a sada de$eria ser ;?+ poderamos utilizar o seguinte fato, se x e j so os
algarismos de um n&mero *casa das dezenas e das unidades, respecti$amente+, ento este n&mero %
x . 6G b j. )ssim, a in$erso seria j . 6G b x *no exemplo, ?; d ? . 6G b ;E ;? d ; . 6G b ?+ e bastaria
extrair os dois algarismos do n&mero dado e utilizar a expresso acima. ) extrao do algarismo da
casa das unidades foi mostrada acima. # o algarismo da casa das dezenasa Hasta $er que ele % o
quociente da di$iso do n&mero por 6G e o exemplo 8 apresenta uma soluo para se determinar o
quociente de uma di$iso inteira. Jemos ento o seguinte programa.
CCrograma que in$erte um n&mero com dois algarismos
Karia$eis
Bumerico Bum, 2n$ertido, Mnidade, 0ezena
2nicio
#scre$er ]0igite o numero]
3er Bum
Mnidade d (esto*Bum, 6G+
0ezena d *Bum - Mnidade+C6G
2n$ertido d Mnidader6G b 0ezena
#scre$er ]. in$ertido de ], Bum, ] t ], 2n$ertido
!im
0ificilmente, o caro leitor $ai escre$er um programa com este objeti$o *para que ser$e
in$erter um n&mero com dois algarismosa+. #sta questo e algumas outras esto sendo discutidas
aqui apenas como exemplos para o desen$ol$imento da l'gica de programao.
;5 2magine agora que queiramos um programa que determine o maior m&ltiplo de um inteiro
dado menor que um outro inteiro dado. or exemplo, se a entrada fosse 69 e 6GG, a sada de$eria ser
A6 *A6 % o maior m&ltiplo de 69 que % menor que 6GG+.
/omo di$idendo d di$isor x quociente b resto e resto f di$isor, temos que o $alor da
expresso di$idendo - resto % o m&ltiplo procurado.
CCrograma que determina o maior m&ltiplo de um inteiro menor que outro inteiro
Karia$eis
Bumerico Bum, 0i$isor, MaiorMultiplo
2nicio
#scre$er ]0igite o numero do qual se quer o m&ltiplo]
3er 0i$isor
#scre$er ]0igite o inteiro que de$e ser maior do que o m&ltiplo]
3er Bum
MaiorMultiplo d Bum - (esto*Bum, 0i$isor+
#scre$er ]. maior m&ltiplo de ], 0i$isor, ] menor do que ], Bum, ] % ], MaiorMultiplo.
!im
=5 . programa a seguir, al%m de ser muito interessante no sentido do desen$ol$imento da
l'gica de programao, ser" utilizado *a sequncia de comandos do programa principal+ em outros
programas. . objeti$o dele % permutar os conte&dos de duas $ari"$eis. .u seja, suponhamos que,
atra$%s de comandos de entrada o programa armazenou nas $ari"$eis x e j os $alores ? e 6@ e
)prendendo a rogramar rogramando numa 3inguagem )lgortmica #xecut"$el *23)+ - "gina 9G
pretendamos que o programa faa com que o conte&do de x passe a ser 6@ e o de j passe a ser igual
a ?. u primeira $ista, bastaria a sequncia de comandos
x d j
j d x
.corre que, quando o segundo comando fosse executado, o primeiro j" teria sido e o conte&do
de x no seria mais o original. Bo nosso exemplo, teramos a seguinte situao
x j
6? @
@
@
e a permuta no teria sido feita, al%m do fato de que o conte&do original de x teria sido perdido.
Mma alternati$a % considerar uma $ari"$el auxiliar que ]guarde] o conte&do de x antes que este seja
substitudo pelo conte&do de j. Jeramos assim o seguinte programa.
CCrograma que permuta os conte&dos de duas $ari"$eis
Karia$eis
Bumerico x, j, )ux
2nicio
#scre$er ]0igite os $alores iniciais]
3er x
3er j
#scre$er ]/onte&dos originais x d ], x, ], j d ], j
)ux d x
x d j
j d )ux
#scre$er ]/onte&dos ap's a permuta x d ], x, ] , j d ], j
!im
)5+* Fun%Fes prHdefinidas
. 23) cont%m di$ersos programas com finalidades pr%-determinadas e que podem ser
executados durante a execuo de um outro programa. #stes programas so chamados un(es pr;@
deinidas e as suas execues podem ser solicitadas em expresses escritas pelo programador *a
solicitao da execuo de uma funo % dita ativao ou c&amada da funo+. ara isto o
programador de$e conhecer o identiicador da funo, quantos e de que tipo so os argumentos com
que elas de$em ser ati$adas *este conjunto constitui a sintaxe da funo+ e o tipo de $alor que ela
retorna ao programa quando termina sua execuo. ) definio de uma funo pr%-definida se faz
atra$%s da sintaxe.
2dentificador da funo*3ista de argumentos+
podendo a lista de argumentos ser $azia. ) tabela a seguir apresenta algumas das funes pr%-
definidas do 23), onde o caractere H na coluna Jipo de )rgumentos indica que a 3ista de
)rgumentos % $azia.
)prendendo a rogramar rogramando numa 3inguagem )lgortmica #xecut"$el *23)+ - "gina 96
Algumas fun%Fes prHdefinidas do "#A
2dent*)rgumentos+ Jipo dos )rgumento . que retorna
)cos*x+ numerico )rco cujo $alor do cosseno % x
)leatorio*+ - Mm n&mero aleat'rio entre G e 6
)sen*x+ numerico )rco cujo $alor do seno % x
)tan*x+ numerico )rco cujo $alor da tangente % x
/omprimento*x+ caracter . n&mero de caracteres de x
/os*x+ numerico /osseno de x
2nteiro*x+ numerico arte inteira de x
3og*x+ numerico 3ogaritmo decimal de x
(aiz*x, j+ numerico (aiz ndice j de x
:en*x+ numerico :eno de x
Jan*x+ numerico Jangente de x
)5++ Exemplos Parte ""
odemos usar as funes pr%-definidas para escre$er programas que realizem outras tarefas
especficas, que por si s' no teriam import7ncia, mas que, sendo escritos como un(es *$eremos
isto no captulo <+, so &teis em outros programas.
65 . exemplo a seguir fornece a parte fracion"ria de um n&mero dado. /omo o sistema %
capaz de extrair a parte inteira do n&mero, atra$%s da funo Inteiro, sua parte fracion"ria % a
diferena entre ele e esta sua parte inteira.
CCrograma que fornece a parte fracion"ria de um n&mero dado
Karia$eis
Bumerico Bum, !rac
2nicio
#scre$er ]0igite o numero]
3er Bum
!rac d Bum - 2nteiro*Bum+
#scre$er ]) parte fracionaria de ], Bum, ] % ], !rac
!im
@5 . programa abaixo arredonda para inteiro um n&mero decimal positi$o de acordo com a
regra usual, se a parte fracion"ria % maior do que ou igual a G,<, o n&mero % arredondado para o
inteiro subsequenteE caso contr"rio, % arredondado para o inteiro anterior. Hasta obser$ar que se a
parte fracion"ria do n&mero % maior do que ou igual a G,<, pela regra do ]$ai um], a parte inteira do
seu dobro % uma unidade maior que o dobro da sua parte inteira e se a parte fracion"ria % menor que
G,G, a parte inteira do seu dobro % igual ao dobro da sua parte inteira. or exemplo, para x d <,=,
2nteiro*8rx+ d 2nteiro*66,8+ d 66 e 8r2nteiro*x+ d 8r2nteiro*<,=+ d 8r< d 6G e para j d <,;,
2nteiro*8rx+ d 2nteiro*6G,@+ d 6G.
CCrograma que efetua arredondamentos
Karia$eis
Bumerico Bum, )rred
2nicio
#scre$er ]0igite o n&mero]
3er Bum
)rred d 2nteiro*8rBum+ - 2nteiro*Bum+
#scre$er Bum, ] % arredondado para ], )rred
)prendendo a rogramar rogramando numa 3inguagem )lgortmica #xecut"$el *23)+ - "gina 98
!im
:5 . exemplo a seguir tem objeti$os diferentes dos anteriores. . primeiro objeti$o % moti$ar o
pr'ximo captulo e o segundo % mostrar que um programador s' % capaz de escre$er um programa
que resol$a um determinado problema se ele souber resol$er o tal problema ]na mo], ou seja, com
a utilizao apenas de l"pis e papel. Jrata-se de um programa que calcule a "rea de um tri7ngulo,
dados os comprimentos dos seus lados. Baturalmente, s' % capaz de escre$er este programa aquele
que conhecer a f'rmula abaixo, que d" "rea do tri7ngulo cujos lados tm comprimentos x, j e z.
S= p. px . p#. p.
onde
p=
x#.
8
% o semipermetro do tri7ngulo. /om isto, temos o seguinte programa.
CCrograma que fornece a "rea de um tri7ngulo
Karia$eis
Bumerico x, j, z, p, )rea
2nicio
#scre$er ]0igite os comprimentos dos lados do tri7ngulo]
3er x
3er j
3er z
p d *x b j b z+C8
)rea d (aiz*pr*p - x+r*p - j+r*p - z+, 8+
#scre$er ]) "rea do tri7ngulo de lados ], x, ], ], j, ] e ], z, ] % igual a ], )rea
!im
:e este programa for executado com entrada 9, ; e < temos p d = e
Area==. =9 . =;. =<=9===
e, como era de se esperar, a "rea do tri7ngulo cujos lados tm comprimento 9, ; e < unidades de
comprimento % igual a = unidades de "rea.
)gora, se este programa fosse executado para entrada 6, 8 e < teramos p d ; e
Area=;. ;6 . ;8. ;<=8;
e ocorreria erro, o sistema, como era de se esperar, no calcula raiz quadrada de n&mero negati$o.
. que acontece % que nem sempre trs n&meros podem ser comprimentos dos lados de um
tri7ngulo *a matem"tica pro$a que isto s' acontece se cada um deles for menor do que a soma dos
outros dois+. )ssim, o comando que calcula a )rea s' de$eria ser executado se os $alores digitados
para x, j, e z pudessem ser comprimentos dos lados de um tri7ngulo.
)5+) Exerccios propostos
+5 )$alie cada uma das expresses abaixo.
a$ *-*-A+ b (aiz**-A+r*-A+ - ;r9r=, 8++C*8r9+.
C$ *2nteiro*<,?+ d <+ e *(aiz*A, 9+ d 9++ ou (esto*;, @+ d 9.
)5 #scre$a programas para
a$ /on$erter uma temperatura dada em graus !arenheit para graus /elsius.
C$ Lerar o invertido de um n&mero com trs algarismos *exemplo, o invertido de ;A@ %
@A;+.
c$ :omar duas fraes ordin"rias, fornecendo o resultado em forma de frao.
d$ 0eterminar o menor m&ltiplo de um inteiro dado maior do que um outro inteiro dado
*exemplo, o menor m&ltiplo de ? maior que <G % <=+.
e$ 0eterminar o permetro de um polgono regular inscrito numa circunferncia, dados o
n&mero de lados do polgono e o raio da circunferncia.
)prendendo a rogramar rogramando numa 3inguagem )lgortmica #xecut"$el *23)+ - "gina 99
85 . exemplo 8 da seo 8.A apresenta$a um programa que utiliza$a o resto da di$iso para
determinar o quociente da di$iso de dois inteiros positi$os dados. (eescre$a o programa referido
utilizando a funo pr%-definida 2nteiro.
95 #scre$a um programa que permute o conte&do de duas $ari"$eis sem utilizar uma $ari"$el
auxiliar *$er exemplo = da seo 8.A+.
;5 Mma loja $ende seus produtos no sistema entrada mais duas prestaes, sendo a entrada
maior do que ou igual 1s duas prestaes, que de$em ser iguais, inteiras e as maiores poss$eis. or
exemplo, se o $alor da mercadoria for (v 8?G,GG, a entrada e as duas prestaes so iguais a (v
AG,GGE se o $alor da mercadoria for (v 9G8,?<, a entrada % de (v 6G8,?< e as duas prestaes so a
iguais a (v 6GG,GG. #scre$a um programa que receba o $alor da mercadoria e fornea o $alor da
entrada e das duas prestaes, de acordo com as regras acima. .bser$e que uma justificati$a para a
adoo desta regra % que ela facilita a confeco e o consequente pagamento dos boletos das duas
prestaes.
=5 Mm inter$alo de tempo pode ser dado em horas, dias, minutos, segundos ou sequncias
]decrescentes] destas unidades *em dias e horasE em horas e minutosE em horas, minutos e
segundos+, de acordo com o interesse de quem o est" manipulando. #scre$a um programa que
con$erta um inter$alo de tempo dado em segundos em horas, minutos e segundos. or exemplo, se
o tempo dado for 9 @<G segundos, o programa de$e fornecer 6 h ; min 6G s.
65 #scre$a um programa que con$erta um inter$alo de tempo, dado em minutos, em horas,
minutos e segundos. or exemplo, se o tempo dado for 6;<,@? min, o programa de$e fornecer 8 h
8< min <8,8 s.
@5 Mm programa para gerenciar os saques de um caixa eletrZnico de$e possuir algum
mecanismo para decidir o n&mero de notas de cada $alor que de$e ser disponibilizado para o cliente
que realizou o saque. Mm poss$el crit%rio seria o da ]distribuio 'tima] no sentido de que as notas
de menor $alor fossem distribudas em n&mero mnimo poss$el. or exemplo, se a quantia
solicitada fosse (v @?,GG, o programa de$eria indicar uma nota de (v <G,GG, trs notas de (v 6G,GG,
uma nota de (v <,GG e duas notas de (v 6,GG. #scre$a um programa que receba o $alor da quantia
solicitada e retorne a distribuio das notas de acordo com o crit%rio da distribuio 'tima.
@. 0e acordo com a Matem"tica !inanceira, o c"lculo das prestaes para amortizao de um
financiamento de $alor ! em n prestaes e a uma taxa de juros i % dada pela f'rmula d !Canwi,
onde anwi d **6 b i+
n
g 6+C*i . *6 b i+
n
+. #scre$a um programa que determine o $alor das prestaes
para amortizao de um financiamento, dados o $alor do financiamento, o n&mero de prestaes
para amortizao e a taxa de juros.
/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
85 Estruturas de sele%&o
85+ "ntrodu%&o
. &ltimo exemplo do captulo anterior apresenta$a um programa para calcular a "rea de um
tri7ngulo, dados os comprimentos dos seus lados. !oi $isto que o comando que calcula$a "rea
solicitada s' de$ia ser executado com a certeza anterior de que os $alores dados como entrada
poderiam ser comprimentos dos lados de um tri7ngulo. .u seja, o tal comando s' de$eria ser
executado se x D # 8 . e # D x 8 . e . D x 8 #, condio que garante que os $alores armazenados nas
$ari"$eis x, j e z so comprimentos dos lados de um tri7ngulo. )ssim, em algumas situaes,
alguns comandos s' de$em ser executados se alguma condio for $erificada. ) $erificao de que
uma condio % satisfeita e, a partir da, uma determinada sequncia de comandos de$e ser
executada % chamada de estrutura de seleo, estrutura de deciso ou comando de seleo.
85) Comando Se
. comando Se % uma estrutura de deciso que decide entre duas sequncias de comandos qual
aquela que ser" executada ou se uma dada sequncia de comandos ser" ou no executada. Bo
primeiro caso, sua sintaxe % a seguinte,
:e *#xpresso 3'gica+ entao
sequncia de comandos 6
:enao
sequncia de comandos 8
!imqse
) sem7ntica deste comando % explicada pela pr'pria sintaxe, se a expresso l'gica for
$erdadeira, o sistema executar" a sequncia de comandos 6E se for falsa o sistema executar" a
sequncia de comandos 8.
or exemplo, se queremos um programa que $erifique a paridade de um n&mero dado,
poderamos $erificar se o resto da di$iso do n&mero por dois % igual a 6. :e isto for $erdade, o
n&mero % mparE se no for $erdade, o n&mero dado par. Jeramos ento o seguinte programa.
Karia$eis
Bumerico Bum
2nicio
#scre$er ]0igite o n&mero]
3er Bum
:e (esto*Bum, 8+ d 6 entao
#scre$er Bum, [[ % mpar]
:enao
#scre$er Bum, ] % par]
!imqse
!im
Bo segundo caso *aquele em que o comando Se indica ao sistema se uma sequncia de
comandos de$er" ou no ser executada+ a sintaxe do comando % simplesmente
:e *#xpresso 3'gica+ entao
sequncia de comandos
!imqse
)gora, se a expresso l'gica for $erdadeira, a sequncia de comandos % executadaE se no for
$erdadeira, a sequncia referida no % executada e o sistema passa a executar o comando seguinte
ao comando :e.
)prendendo a rogramar rogramando numa 3inguagem )lgortmica #xecut"$el *23)+ - "gina 9<
or exemplo, se se pretende ordenar em ordem crescente dois n&meros dados armazenados
nas $ari"$eis x e j, s' h" de necessidade de se realizar alguma ao se o n&mero armazenado em j
for maior do que aquele armazenado em x. Beste caso, o que de$ia ser feito era a permuta dos
conte&dos de x e de j. Jeramos ento o seguinte programa.
CCrograma para ordenao de dois n&meros
Karia$eis
Bumerico x, j, )ux
2nicio
#scre$er ]0igite os dois n&meros]
3er x
3er j
:e x e j entao
)ux d x
x d j
j d )ux
!imqse
#scre$er ]B&meros dados escritos em ordem crescente, ], x, ] , ], j
!im
.bser$e que estamos procurando escre$er os comandos da sequncia $inculada 1 estrutura de
deciso com uma tabulao diferente da tabulao em que esto postos o Se e o FimEse. #sta forma
de se editar um programa, chamada endentao, de$e ser praticada por todo programador, pois ela %
muito &til para a legibilidade dos programas.
858 Exemplos Parte """
+5 Bo exemplo A da seo 8.66, apresentamos um programa que calcula$a a "rea de um
tri7ngulo, dados os seus lados. Bo final dele, mostramos que o mesmo nem sempre fornecia
respostas satisfat'rias para todas as entradas e comentamos que o c"lculo da "rea de$eria ser
precedido da $erificao de que os dados de entrada so de fato comprimentos dos lados de um
tri7ngulo. . programa referido, escrito agora de forma completa e correta, seria o seguinte.
CCrograma que determina a "rea de um tri7ngulo
Karia$eis
Bumerico x, j, z, p, )rea
2nicio
#scre$er ]0igite os comprimentos dos lados do tri7ngulo]
3er x
3er j
3er z
:e *x f j b z+ e *j f x b z+ e *z f x b j+ entao
p d *x b j b z+C8
)rea d (aiz*pr*p - x+r*p - j+r*p - z+, 8+
#scre$er ]) "rea do tri7ngulo de lados ], x, ], ], j, ] e ], z, ] % igual a ], )rea
:enao
#scre$er ].s $alores dados no so comprimentos dos lados de um tri7ngulo]
!imqse
!im
)5 rogramas que manipulam datas *por exemplo, um programa que determine o n&mero de
dias entre duas datas dadas+ contm trechos que $erificam se um ano dado % bissexto. :abendo que
um ano % bissexto se ele % m&ltiplo de quatro, teramos o seguinte programa.
)prendendo a rogramar rogramando numa 3inguagem )lgortmica #xecut"$el *23)+ - "gina 9=
CCrograma que $erifica se um dado ano % bissexto
Karia$eis
Bumerico )no
2nicio
#scre$er ]0igite o ano]
3er )no
:e (esto*)no, ;+ d G entao
#scre$er )no, ] % bissexto]
:enao
#scre$er )no, ] no % bissexto ]
!imqse
!im
85 . programa para ordenar dois n&meros dados $isto na seo 9.8 % um caso muito particular
da questo mais geral da ordenao de uma relao de n&meros ou de nomes, problema muito
importante para a computao, tamb%m conhecido como classiicao. ara a soluo geral existem
di$ersos algoritmos com este objeti$o. Bo captulo ? teremos oportunidade de discutir dois destes
algoritmos. or enquanto, $ejamos um programa que ordene trs n&meros dados. )l%m de
exemplificar o comando Se, o programa abaixo mostra como se pode *e se de$e+ utilizar raciocnios
anteriores para se escre$er programas.
:eja ento um programa que receba trs n&meros inteiros, armazene-os nas $ari"$eis x, j e z e
que ao final da sua execuo deixe os conte&dos de x, de j e de z na ordem crescente. Mma id%ia
bem interessante % armazenar na $ari"$el x o menor dos n&meros e em seguida ordenar os
conte&dos de j e de z, que % exatamente o problema de ordenar dois n&meros, o qual foi referido
acima. .b$iamente, para se executar a primeira ao pretendida *armazenar na $ari"$el x o menor
dos n&meros+ s' % necess"rio se fazer alguma coisa se o $alor x j" no for o menor dos n&meros
dados, ou seja, se x e j ou x e z. Besta hip'tese, o menor deles % j ou z e este menor de$e ser
permutado com x. Jemos ento o seguinte programa.
CCrograma que ordena trs n&meros
Karia$eis
Bumerico x, j, z, )ux
2nicio
#scre$er ]0igite os trs n&meros]
3er x
3er j
3er z
:e *x e j+ ou *x e z+ entao
:e j e z entao CCz % o menor
)ux d x CCpermuta x e z
x d z
z d )ux
:enao CCj % o menor
)ux d x CCpermuta x e j
x d j
j d )ux
!imqse
!imqse
:e j e z entao
)ux d j CCpermuta j e z
j d z
z d )ux
!imqse
)prendendo a rogramar rogramando numa 3inguagem )lgortmica #xecut"$el *23)+ - "gina 9?
#scre$er ]B&meros dados escritos em ordem crescente, ], x, ], ], j, ] e ], z
!im
.bser$e que se a expresso l'gica do primeiro comando Se for $erdadeira, o sistema
executar" outro comando Se. Beste caso, dizemos que os comandos esto anin&ados. Baturalmente,
de$e ha$er um FimEse para cada comando Se. .bser$e tamb%m que escre$emos no programa
algumas frases explicati$as das aes pretendidas. #sta frases so chamadas comentrios e de$em
ser escritas precedidas de CC. Ruando o interpretador encontra as duas barras desconsidera tudo o
que $em depois delas at% o final da linha. 2sto permite que o programador deixe registrado no
pr'prio programa os coment"rios que ele achar con$eniente. /omo a edio dos programas com
endentao, a pr"tica de se colocar coment"rios nos programas % muito importante. /omo os
programas discutidos neste li$ro sero precedidos de explicaes pr%$ias, a utilizao de
coment"rios aqui $ai se restringir a indicao do objeti$o do programa.
95 Mm outro exemplo que ilustra muito bem a utilizao do comando Se % um programa para
determinar as razes de uma equao do segundo grau. :abemos da matem"tica que uma equao
ax
8
b bx b c d G s' tem razes reais se b
8
- ;ac G. )ssim, um programa para encontrar as razes
reais *deixaremos o caso completo da determinao das razes reais e complexas como exerccio
proposto+ poderia ser o seguinte.
CCrograma para determinao das razes de uma equao do segundo grau
Karia$eis
Bumerico a, b, c, 0elta, x6, x8
2nicio
#scre$er ]0igite os coeficiente da equao]
3er a
3er b
3er c
:e a fe G entao
0elta d brb - ;rarc
:e 0elta ed G entao
x6 d *-b b (aiz*0elta, 8++C*8ra+
x8 d *-b - (aiz*0elta, 8++C*8ra+
#scre$er ])s razes da equao dada so ], x6, ] e ], x8
:enao
#scre$er ]) equao dada no tem razes reais]
!imqse
:enao
#scre$er ]) equao dada no % do segundo grau]
!imqse
!im
;5 2maginemos agora uma escola que adote no seu processo de a$aliao a realizao de
quatro a$aliaes bimestrais e que o regime de apro$ao dos alunos seja o seguinte,
i+ :e a m%dia das a$aliaes bimestrais for superior ou igual a ?,G, o aluno est" aprovado, com
m%dia final igual 1 m%dia das a$aliaes bimestrais.
ii+ :e a m%dia das a$aliaes bimestrais for inferior a <,G, o aluno est" reprovado, com m%dia
final igual 1 m%dia das a$aliaes bimestrais.
iii+ Bo ocorrendo nenhum dos casos anteriores, o aluno se submete a uma prova inal e a sua
m%dia final ser" a m%dia ponderada desta pro$a final *com peso ;+ e a m%dia das a$aliaes
bimestrais *com peso =+. Beste caso, o aluno estar" apro$ado se a sua m%dia final for superior ou
igual a <,<.
. programa abaixo recebendo as notas das a$aliaes bimestrais e, se for o caso, a nota da
pro$a final, fornece a m%dia final do aluno e a sua condio em relao 1 apro$ao.
)prendendo a rogramar rogramando numa 3inguagem )lgortmica #xecut"$el *23)+ - "gina 9@
CCrograma para $erificar apro$ao de um aluno
Karia$eis
Bumerico Him6, Him8, Him9, Him;, MedHim, r!inal, Med!inal
2nicio
#scre$er ]0igite as notas bimestrais]
3er Him6
3er Him8
3er Him9
3er Him;
MedHim d *Him6 b Him8 b Him9 b Him;+C;
Med!inal d MedHim
:e *MedHim ed <+ e *MedHin f ?+ entao
#scre$er ]0igite a nota da pro$a final]
3er r!inal
Med!inal d *MedHimr= b r!inalr;+C6G
!imqse
:e Med!inal ed <.< entao
#scre$er ])luno apro$ado com m%dia final igual a ], Med!inal
:enao
#scre$er ])luno repro$ado com m%dia final igual a ], Med!inal
!imqse
!im
859 Comando Faca caso
:uponhamos que uma empresa decidiu dar um aumento escalonado a seus funcion"rios de
acordo com a seguinte regra, 69x para os sal"rios inferiores ou iguais a (v 8GG,GGE 66x para os
sal"rios situados entre (v 8GG,G e (v ;GG,GG *inclusi$e+E A x para os sal"rios entre (v ;GG,GG e (v
@GG,GG *inclusi$e+ e ?x para os demais sal"rios. Baturalmente, pode-se escre$er um programa com
o comando Se que receba o sal"rio atual de um funcion"rio desta empresa e retorne o $alor do seu
no$o sal"rio.
CCrograma para atualizar sal"rios
Karia$eis
Bumerico :alario)tual, :alarioBo$o, 2ndice
2nicio
#scre$er ]0igite o sal"rio atual]
3er :alario)tual
:e :alario)tual fd 8GG entao
2ndice d 6.69
:enao
:e *:alario)tual e 8GG+ e *:alario)tual fd ;GG+ entao
2ndice d 6.66
:enao
:e *:alario)tual e ;GG+ e *:alario)tual fd @GG+ entao
2ndice d 6.GA
:enao
2ndice d 6.G?
!imqse
!imqse
!imqse
:alarioBo$o d :alario)tual r 2ndice
)prendendo a rogramar rogramando numa 3inguagem )lgortmica #xecut"$el *23)+ - "gina 9A
#scre$er ]:alario )tual d ], :alario)tual
#scre$er ]:alario Bo$o d ], :alarioBo$o
!im
.bser$e que os di$ersos comandos Se aninhados dificultam sobremaneira a legibilidade do
programa. .bser$e tamb%m que entre as quatro opes de ]sequncias] de comandos
Indice F B2BGE Indice F B2BBE Indice F B2HIE Indice F B2HJE somente uma ser" executada.
/om uma melhor legibilidade, o comando Faca caso seleciona entre $"rias sequncias de
comandos qual aquela que de$e ser executada ou se nenhuma delas de$e ser executada. :ua sintaxe
%,
!aca caso
/aso #xpresso l'gica 6 ,
sequncia de comandos 6
/aso #xpresso l'gica 8 ,
sequncia de comando 8
. . .
/aso #xpresso l'gica n ,
sequncia de comando n
.utroqcaso ,
sequncia de comando x
!imqcaso
) sem7ntica deste comando % bem simples. :e a expresso lgica :, para : d 6, 8, ..., n, for
$erdadeira, a sequ-ncia de comandos : % executada. :e para todo : d 6, 8, ..., n a expresso lgica :
for falsa, a sequ-ncia de comandos x *aquela ]$inculada] ao 9utroEcaso+ % executada. #sta opo,
9utroEcaso, % facultati$a. :e ela no existir e todas as expresses l'gicas forem falsas, nada %
executado e o processamento passa para o comando que segue o FimEcaso.
Mma aplicao usual do comando Faca caso % em programas que contm menu de op(es.
2sto acontece quando um programa % capaz de realizar de modo independente $"rias tarefas. or
exemplo, um programa que gerencie um caixa eletrZnico de um banco de$e oferecer ao usu"rio
algumas opes em relao 1 ao que ele pretende realizar na sua conta como, por exemplo, a
emisso do saldo atual, a emisso de um extrato, a realizao de um saque e a realizao de um
dep'sito. :e fZssemos escre$er um programa em 23) com este prop'sito, ele poderia ter a seguinte
estrutura,
Karia$eis
Bumerico .p, ...
. . .
2nicio
#scre$er ]6-:aldo]
#scre$er ]8-#xtrato]
#scre$er ]9-:aque]
#scre$er ];-0ep'sito]
#scre$er ]0igite sua opo,
3er .p
!aca caso
/aso .p d 6,
:equncia de comandos para emisso do saldo
/aso .p d 8
:equncia de comandos para emisso do saldo
/aso .p d 9,
:equncia de comandos para realizao do saque
/aso .p d ;,
)prendendo a rogramar rogramando numa 3inguagem )lgortmica #xecut"$el *23)+ - "gina ;G
:equncia de comandos para realizao do dep'sito
!imqcaso
!im
85; Exerccios propostos
6. 0e um modo geral, as ligaes telefZnicas so cobradas pelas suas duraes. . sistema
registra os instantes em que a ligao foi iniciada e concluda e % acionado um programa que
determina o inter$alo de tempo decorrido entre aqueles dois instantes dados. #scre$a um programa
receba dois instantes dados em horas e minutos e determine o inter$alo de tempo *em horas e
minutos+ decorrido entre eles.
)5 #scre$a um programa que realize arredondamentos de n&meros utilizando a regra usual da
matem"tica, se a parte fracion"ria for maior do que ou igual a G,<, o n&mero % arredondado para o
inteiro imediatamente superior, caso contr"rio, % arredondado para o inteiro imediatamente inferior.
85 #scre$a um programa para $erificar se um inteiro dado % um quadrado perfeito, exibindo,
nos casos afirmati$os, sua raiz quadrada.
95 #scre$a um programa para determinar o maior de trs n&meros dados.
;5 #scre$a um programa para classificar um tri7ngulo de lados de comprimentos dados em
escaleno *os trs lados de comprimentos diferentes+, issceles *dois lados de comprimentos iguais+
ou equiltero *os trs lados de comprimentos iguais+.
=5 #scre$a um programa para $erificar se um tri7ngulo de lados de comprimentos dados %
ret'ngulo, exibindo, nos casos afirmati$os, sua &ipotenusa e seus catetos.
65 #scre$a um programa para determinar as razes reais ou complexas de uma equao do
segundo grau, dados os seus coeficientes.
@5 #scre$a um programa para determinar a idade de uma pessoa, em anos meses e dias, dadas
a data *dia, ms e ano+ do seu nascimento e a data *dia, ms e ano+ atual.
:5 #scre$a um programa que, recebendo as quatro notas bimestrais de um aluno da escola
referida no exemplo < da seo 9.9, fornea a nota mnima que ele de$e obter na pro$a final para
que ele seja apro$ado.
+*5 #m relao ao exemplo 8 da seo 9.9 e rigorosamente falando, h" anos m&ltiplos de
quatro que no so bissextos. :o aqueles m&ltiplos de 6GG que no so m&ltiplos de ;GG. or
exemplo, o ano 8GGG foi um ano bissexto, mas o ano de 86GG no ser". (eescre$a o exemplo
referido para que o programa detecte estas excees.
/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
95 Estruturas de repeti%&o
95+ "ntrodu%&o
Mm locutor brasileiro ao narrar um jogo de basquete ou de futebol americano nos #stados
Mnidos recebe a informao sobre a temperatura local medida em graus !ahrenheit. Baturalmente,
ele de$e fornecer aos brasileiros a temperatura em graus /elsius. ara isto, o locutor poderia
executar o programa solicitado no primeiro item do segundo exerccio da seo 8.68, fornecendo ao
programa a temperatura em graus !ahrenheit e recebendo a correspondente temperatura em graus
/elsius. Mais pr"tico, tal$ez, seria a produo disponibilizar para o locutor uma tabela contendo as
temperaturas poss$eis em graus !ahrenheit e as correspondentes em graus /elsius. ) confeco
desta tabela poderia ser feita atra$%s de execues sucessi$as do programa referido, por%m com a
incon$enincia da digitao de todas as entradas. 2sto seria contornado se pud%ssemos repetir a
execuo dos comandos que gerariam as temperaturas em graus !ahrenheit e as correspondentes em
graus /elsius. . ILA possui os comandos Para proximo e Faca enquanto, chamados estruturas de
repetio, cuja execuo redunda na repetio da execuo de uma determinada sequncia de
comandos.
95) Comando Para proximo
. comando Para proximo % uma estrutura de repetio que repete a execuo de uma dada
sequncia de comandos um n&mero de $ezes determinado pelo pr'prio programa, de$endo ser
escrito com a seguinte sintaxe,
ara Kari"$el d #xp. 6 ate #xp. 8 asso #xp. 9
:equncia de comandos
roximo
) ,xp B, ,xp C e ,xp G so expresses num%ricas que so a$aliadas quando da execuo do
comando. . $alor de ,xp2 B % ento armazenado na $ari"$el 5arivel *chamada varivel de controle
da estrutura+ e a Sequ-ncia de comandos % executada. #m seguida, a $ari"$el de controle %
incrementada ou decrementada do $alor de ,xp2 G e o seu conte&do % comparado com o $alor de
,xp C. :e o $alor de ,xp G for positivo *respecti$amente, negativo+ e o conte&do da $ari"$el de
controle for maior que o $alor de ,xp C *respecti$amente, menor+ a execuo da estrutura %
encerradaE caso contr"rio, a Sequ-ncia de comandos % no$amente executada e a comparao supra
% no$amente realizada.
or exemplo, o programa
Karia$eis
Bumerico i
2nicio
ara i d 6 ate @ passo 8
#scre$er i
roximo
!im
exibe na tela os n&meros 6, 9, <, e ?, enquanto que o programa
Karia$eis
Bumerico i
2nicio
ara i d ? ate 9 passo -6
#scre$er i
roximo
!im
)prendendo a rogramar rogramando numa 3inguagem )lgortmica #xecut"$el *23)+ - "gina ;8
exibe na tela os n&meros ?, =, <, ;, 9. or seu turno, o programa
Karia$eis
Bumerico i
2nicio
ara i d 6 ate @ passo -8
#scre$er i
roximo
!im
exibe na tela, apenas, o n&mero 6.
Kale obser$ar que a indicao Passo ,xp2 G % facultati$a. :e ela for omitida o sistema assume
o $alor 6 para ,xp2 G e, portanto, neste caso, a $ari"$el de controle % incrementada de uma unidade.
)ssim, e para mais um exemplo, a confeco da tabela de con$erso citada na seo ;.6 poderia ser
feita atra$%s da execuo do seguinte programa.
CCrograma que gera uma tabela de con$erso de temperaturas dadas em graus !ahrenheit para
graus /elsius
Karia$eis
Bumerico !ahrenheit, /elsius
2nicio
ara !ahrenheit d 98 ate 66G
/elsius d <r*!ahrenheit - 98+CA
#scre$er !ahrenheit, ] ], /elsius
roximo
!im
958 Comando Faca enquanto
ara introduzir uma no$a estrutura de repetio e cotej"-la com o comando Faca proximo,
considere um programa para encontrar um divisor prprio de um inteiro dado *um divisor prprio
de um inteiro n % um di$isor de n menor que n e diferente de 6+. /om a utilizao do comando Para
proximo teramos a seguinte soluo.
CCrograma que determina um di$isor pr'prio de um inteiro positi$o dado
Karia$eis
Bumerico Bum, i, 0i$isor
2nicio
#scre$er ]0igite o n&mero]
3er Bum
0i$isor d Bum
ara i d 8 ate Bum - 6
:e (esto*Bum, i+ d G entao
0i$isor d i
!imqse
roximo
:e 0i$isor f Bum entao
#scre$er 0i$isor , ] % di$isor pr'prio de ], Bum
:enao
#scre$er Bum, ]no tem di$isores pr'prios]
!imqse
!im
Mm problema com este programa % que ele retorna sempre, se existir, o maior di$isor pr'prio.
)prendendo a rogramar rogramando numa 3inguagem )lgortmica #xecut"$el *23)+ - "gina ;9
2sto significa que se a entrada for um n&mero par, por exemplo, a estrutura de repetio no %
interrompida quando o di$isor 8 % encontrado, o que, e$identemente, $ai prejudicar a performance
do programa. 2sto pode ser contornado no ILA, pois este sistema admite que a $ari"$el de controle
do comando Para proximo tenha o seu conte&do alterado dentro do pr'prio comando. /om isto, o
programa acima ficaria da seguinte forma.
CCrograma para a determinao de um di$isor pr'prio de um inteiro positi$o dado
Karia$eis
Bumerico Bum, i, 0i$isor
2nicio
#scre$er ]0igite o n&mero]
3er Bum
0i$isor d Bum
ara i d 8 ate Bum - 6
:e (esto*Bum, i+ d G entao
0i$isor d i
i d Bum
!imqse
roximo
:e 0i$isor f Bum entao
#scre$er 0i$isor , ] % di$isor pr'prio de ], Bum
:enao
#scre$er Bum, ]no tem di$isores pr'prios]
!imqse
!im
Besta $erso, quando o primeiro di$isor pr'prio % encontrado, o comando i d Bum faz com
que a execuo do comando Para proximo seja interrompida. ) pr"tica de alterar o conte&do da
$ari"$el de controle no ser" aqui incenti$ada pelo fato de que h" situaes em que no existe um
n&mero m"ximo de repeties poss$eis, o placar de um set de $oleibol, por exemplo. Ba $erdade, a
questo central % que o comando Para proximo de$e ser utilizado quando o n&mero de repeties de
execuo de uma sequncia de comandos % conhecido a priori. Ruando isto no acontece *que % o
caso do exemplo anterior, no se sabe a priori se e quando um di$isor pr'prio $ai ser encontrado+,
de$e-se usar o comando Faca enquanto, que possui a seguinte sintaxe,
!aca enquanto #xpresso l'gica
:equncia de comandos
!imqenquanto
) sem7ntica deste comando % 'b$ia, enquanto a expresso l'gica % $erdadeira a sequncia de
comandos % executada. Baturalmente, pode ocorrer que a sequncia de comandos no seja
executada nenhuma $ez, isto ocorrendo se a ,xpresso lgica for falsa quando da ]primeira]
execuo do comando. or outro lado, % necess"rio que um dos comandos da sequncia de
comandos altere conte&dos de $ari"$eis que aparecem na ,xpresso lgica de modo que em algum
instante ela se torne falsa. 0o contr"rio, a sequncia de comandos ter" sua execuo repetida
indefinidamente, o programa nunca termina e, e$identemente, no executa a tarefa para a qual foi
desen$ol$ido. Ruando isto acontece % comum se dizer que o programa est" em loop2
/om o Faca enquanto as questes le$antadas acima sobre o programa para determinar um
di$isor pr'prio de um inteiro dado so resol$idas e temos o seguinte programa,
CCrograma que determina um di$isor pr'prio de um inteiro positi$o dado
Karia$eis
Bumerico Bum, i, Met
2nicio
)prendendo a rogramar rogramando numa 3inguagem )lgortmica #xecut"$el *23)+ - "gina ;;
#scre$er ]0igite o n&mero]
3er Bum
i d 8
Met d BumC8
!aca enquanto *(esto*Bum, i+ fe G+ e *i f Met+
i d i b 6
!imqenquanto
:e *i fd Met+ entao
#scre$er i, ] % di$isor de ], Bum
:enao
#scre$er Bum, ] no tem di$isores]
!imqse
!im
.bser$e que a utilizao da $ari"$el Met % para melhorar a performance do programa j" que
se um inteiro no possui um di$isor pr'prio menor do que sua ]metade], ento ele no possui
di$isores pr'prios. . programa pode ser melhorado substancialmente, utilizando-se o fato discutido
em ^#$aristo, > 8G6G_ de que se um inteiro no possui um di$isor pr'prio menor do que sua raiz
quadrada, ele no possuir" di$isores pr'prios. 3e$ando em conta este fato, teramos o seguinte
programa.
CCrograma que determina um di$isor pr'prio de um inteiro positi$o dado
Karia$eis
Bumerico Bum, i, r
2nicio
#scre$er ]0igite o n&mero]
3er Bum
i d 8
r d (aiz*Bum, 8+
!aca enquanto *(esto*Bum, i+ fe G+ e *i fd r+
i d i b 6
!imqenquanto
:e *i fd r+ entao
#scre$er i, ] % di$isor de ], Bum
:enao
#scre$er Bum, ] no tem di$isores pr'prios]
!imqse
!im
Mm n&mero inteiro que no tem di$isores pr'prios % chamado n1mero primo. )ssim, o
programa acima $erifica se um dado n&mero % primo. Bo pr'ximo captulo apresentaremos uma
uno que $erifica especificamente se um inteiro dado % primo.
Mma outra aplicao importante do comando Faca enquanto diz respeito a aplicaes
sucessi$as de um programa. . leitor de$e ter obser$ado que os programas anteriores so executados
apenas para uma entrada. :e quisermos a sua execuo para outra entrada precisamos comear tudo
de no$o. or exemplo, se o programa anterior foi gra$ado na unidade / com o nome 4ivis2ila e
quisermos obter um di$isor pr'prio de < 666 teramos de, a partir do prompt do 49S, comandar
/,ye2la 0i$is
. programa comearia a ser executado e a tela ficaria com a seguinte configurao.
/,ye2la 0i$is
0igite o n&mero
Beste momento o n&mero < 666 de$eria ser digitado e ento o resto do programa seria
)prendendo a rogramar rogramando numa 3inguagem )lgortmica #xecut"$el *23)+ - "gina ;<
executado, ficando agora a tela assim,
/,ye2la 0i$is
0igite o n&mero
<666
6A % di$isor de <666
) a execuo do programa % encerrada e, no$amente, aparece o prompt do 49S, ficando a
tela da seguinte forma,
/,ye2la 0i$is
0igite o n&mero
<666
6A % di$isor de <666
/,ye
:e quis%ssemos agora um di$isor pr'prio de < <G6, teramos de repetir a execuo do
programa, digitando no$amente
/,ye2la 0i$is
ode-se repetir a execuo de um programa quantas $ezes se queira, colocando-o numa
estrutura definida por um comando Faca enquanto controlada pelo $alor da entrada ou por uma
pergunta ao usu"rio do tipo ]deseja continuara]. Bo primeiro caso, o $alor que encerra a execuo
pode ser informado dentro da mensagem que indica a necessidade da digitao da entrada e no
segundo caso utiliza-se uma $ari"$el do tipo caractere para ]responder] a pergunta citada acima. .
programa anterior poderia ser ento escrito de uma das seguintes formas.
CCrograma que determina um di$isor pr'prio de um inteiro positi$o dado
Karia$eis
Bumerico Bum, i, r
2nicio
Bum d 6
!aca enquanto Bum fe G
#scre$er ]0igite o n&mero *zero para encerrar+]
3er Bum
i d 8
r d (aiz*Bum, 8+
!aca enquanto *(esto*Bum, i+ fe G+ e *i fd r+
i d i b 6
!imqenquanto
:e *i fd r+ entao
#scre$er i, ] % di$isor de ], Bum
:enao
#scre$er Bum, ] no tem di$isores pr'prios]
!imqse
!imqenquanto
!im
ou
CCrograma que determina um di$isor pr'prio de um inteiro positi$o
Karia$eis
Bumerico Bum, i, r
/aracter (esp
2nicio
(esp d ]:]
)prendendo a rogramar rogramando numa 3inguagem )lgortmica #xecut"$el *23)+ - "gina ;=
!aca enquanto *(esp d ]:]+ ou *(esp d ]s]+
#scre$er ]0igite o n&mero]
3er Bum
i d 8
r d (aiz*Bum, 8+
!aca enquanto *(esto*Bum, i+ fe G+ e *i fd r+
i d i b 6
!imqenquanto
:e *i fd r+ entao
#scre$er i, ] % di$isor de ], Bum
:enao
#scre$er Bum, ] % primo ]
!imqse
#scre$er ]0eseja continuar *:CB+a
3er (esp
!imqenquanto
!im
Mma outra aplicao interessante do comando Faca enquanto % na $erificao da consist-ncia
dos dados de entrada. #sta ao consiste em que um programa de$e recusar dados incompat$eis
com a entrada do programa. or exemplo, se a entrada % o n&mero correspondente a um ms do ano,
este n&mero no pode ser menor do que 6 nem maior do que 68. ) consistncia dos dados pode ser
feita colocando-se o comando de entrada Ler dentro de um comando Faca enquanto controlado pela
expresso l'gica que garante a consistncia esperada. Bo exemplo do n&mero correspondente a um
ms do ano poderamos ter o seguinte trecho *considerando definida uma $ari"$el do tipo )umerico
Mes+,
#scre$er ]0igite o n&mero correspondente ao ms]
3er Mes
!aca enquanto *Mes f 6+ ou *Mes e 68+
:e *Mes f 6+ ou *Mes e 68+ ento
#scre$er ]Ms in$"lido *digite o ms corretamente]+
!imqse
3er Mes
!imqenquanto
959 Exemplos Parte """
+5 /onsideremos um programa para determinar a soma dos n primeiros n&meros mpares, n
dado. or exemplo, se for fornecido para n o $alor =, o programa de$e retornar 9=, pois
6 b 9 b < b ? b A b 66 d 9=. Baturalmente, o sistema pode gerar os n&meros mpares que se
pretende somar, atra$%s do comando 2mpar d 6 e da repetio do comando 2mpar d 2mpar b 8.
Baturalmente, tamb%m, para que o sistema gere o pr'ximo mpar, o anterior j" de$e ter sido
somado. 2sto pode ser feito atra$%s do comando :oma d G e da repetio do comando
:oma d :oma b 2mpar. Jemos ento o seguinte programa.
CCrograma que determina a soma dos n primeiros n&meros mpares
Karia$eis
Bumerico n, i, 2mpar, :oma
2nicio
n d 6
!aca enquanto n fe G
#scre$er ]0igite a quantidade mpares *zero para encerrar+]
)prendendo a rogramar rogramando numa 3inguagem )lgortmica #xecut"$el *23)+ - "gina ;?
3er n
2mpar d 6
:oma d G
ara i d 6 ate n
:oma d :oma b 2mpar
2mpar d 2mpar b 8
roximo
:e n fe G entao
#scre$er ]) soma dos ], n, ] primeiros n&meros mpares % ], :oma
!imqse
!imqenquanto
!im
.bser$e que os comandos 2mpar d 6 e :oma d G atribuem um $alor inicial 1s $ari"$eis para
que estes $alores iniciais possam ser utilizados nas primeiras execues dos comandos
:oma d :oma b 2mpar e 2mpar d 2mpar b 8. Bormalmente, nos referimos a comandos que atribuem
$alores iniciais a $ari"$eis para que estes $alores possam ser utilizados na primeira execuo de um
comando que ter" sua execuo repetida como iniciali.ao da varivel2
Mma outra obser$ao interessante % que, como existe uma f'rmula que d" o i-%simo n&mero
mpar *a
i
d 8i - 6+, o programa acima poderia ser escrito de uma forma mais elegante, prescindindo,
inclusi$e, da $ari"$el mpar.
CCrograma que determina a soma dos n primeiros n&meros mpares
Karia$eis
Bumerico n, i, :oma
2nicio
#scre$er ]0igite a quantidade mpares *zero para encerrar+]
n d 6
!aca enquanto n fe G
3er n
:oma d G
ara i d 6 ate n
:oma d :oma b 8ri - 6
roximo
:e n fe G entao
#scre$er ]) soma dos ], n, ] primeiros n&meros mpares % ], :oma
!imqse
!imqenquanto
!im
.ptamos por apresentar a primeira $erso pelo fato de que nem sempre a f'rmula para gerar
os termos da sequncia que se pretende somar % to simples ou % muito conhecida. or exemplo, o
exerccio n&mero 8 da seo ;.< pede para somar os quadrados dos n primeiros n&meros naturais e,
neste caso, embora a f'rmula exista, ela no % to conhecida.
)5 Mm dos exemplos da seo anterior apresenta$a um programa que determina$a, se
existisse, um di$isor pr'prio de um n inteiro dado. 2maginemos agora que queiramos um programa
que apresente a lista de todos os di$isores de um inteiro n dado. Beste caso, o programa pode
percorrer todos os inteiros de um at% a metade de n $erificando se cada um deles % um seu di$isor.
Jemos ento o seguinte programa.
CCrograma que lista os di$isores de um inteiro dado
Karia$eis
Bumerico n, i, Metade
2nicio
)prendendo a rogramar rogramando numa 3inguagem )lgortmica #xecut"$el *23)+ - "gina ;@
#scre$er ]0igite o n&mero *zero para encerrar+]
n d 6
!aca enquanto n fe G
3er n
Metade d 2nteiro*nC8+
#scre$er ].s di$isores de ], n, ] so ]
ara i d 6 ate Metade
:e (esto*n, i+ d G entao
#scre$er i
!imqse
roximo
#scre$er n
!imqenquanto
!im
Kale obser$ar que, ao contr"rio do que foi dito na seo 8.A, os $alores de sada deste
programa no esto sendo armazenados. . que acontece % que ainda no temos condies de
armazenar uma quantidade indefinida de elementos. #ste problema ser" resol$ido no captulo =.
Kale obser$ar tamb%m que, como a $ari"$el de controle do comando Para prximo pode receber
$alores fracion"rios, o c"lculo de 2nteiro*nC8+ % desnecess"rio, podendo-se usar diretamente
Metade d nC8. ) funo inteiro foi colocada ali pelo fato de que a maioria dos sistemas faz diferena
entre n&meros inteiros e n&meros fracion"rios e, em alguns casos, a $ari"$el de controle de uma
estrutura do tipo ara prximo s' pode receber $alores inteiros.
85 Ba seo 6.< discutimos um algoritmo que determina$a o quociente e o resto da di$iso
entre dois inteiros positi$os dados. #mbora o 23) possua uma funo pr%-definida que calcula o
resto de uma di$iso inteira e j" mostramos como calcular o quociente, utilizando esta funo,
$amos apresentar a implementao do algoritmo referido.
CCrograma que retorna o quociente e o resto da di$iso de dois inteiros dados
Karia$eis
Bumerico 0i$idendo, 0i$isor, (est, Ruoc
/aracter r
2nicio
r d ]:]
!aca enquanto *r d ]:]+ ou *r d ]s]+
#scre$er ]0igite o di$idendo e o di$isor]
3er 0i$idendo
3er 0i$isor
!aca enquanto 0i$isor d G
:e 0i$isor d G entao
#scre$er ]. di$isor tem que ser no nulo]
!imqse
3er 0i$isor
!imqenquanto
Ruoc d 6
!aca enquanto Ruocr0i$isor fd 0i$idendo
Ruoc d Ruoc b 6
!imqenquanto
Ruoc d Ruoc - 6
(est d 0i$idendo - Ruocr0i$isor
#scre$er ]. quociente e o resto da di$iso de ], 0i$idendo, ] por ], 0i$isor, ] so
], Ruoc, ] e ], (est
#scre$er ]0eseja continuar *:CB+a]
)prendendo a rogramar rogramando numa 3inguagem )lgortmica #xecut"$el *23)+ - "gina ;A
3er r
!imqenquanto
!im
95 #m muitos casos h" necessidade de que um dos comandos da sequncia que ter" sua
execuo repetida atra$%s de uma estrutura de repetio seja uma outra estrutura de repetio, caso
em que dizemos que as estruturas esto anin&adas. or exemplo, seja um programa que pretenda
exibir a lista de todos os pares ordenados cujas componentes pertenam ao conjunto k6, 8, 9, ;, <l.
.bser$e que, para isto, para cada $alor da primeira componente o programa de$e gerar todas as
segundas componentes. ortanto, de$emos ter uma estrutura de repetio para gerar as primeiras
componentes e uma outra, $inculada a cada $alor da primeira componente, para gerar as segundas.
CCrograma para gerar os pares ordenados de elementos de um conjunto
Karia$eis
Bumerico i, j
2nicio
ara i d 6 ate <
ara j d 6 ate <
#scre$er ]*],i,], ],j,]+]
roximo
roximo
!im
;5 X interessante obser$ar que a $ari"$el de controle da estrutura interna pode depender da
$ari"$el de controle da estrutura externa. or exemplo, se ao in$%s dos pares ordenados,
quis%ssemos os subconjuntos do conjunto k6, 8, 9, ;, <, =l com dois elementos, o programa no
de$eria exibir o subconjunto, por exemplo, k6, 6l, que possui um s' elemento, e de$eria exibir
apenas um dos subconjuntos k6, 8l e k8, 6l j" que eles so iguais. 2sto pode ser obtido,
inicializando j com uma unidade maior do que o $alor de i.
Karia$eis
Bumerico i, j
2nicio
ara i d 6 ate <
ara j d i b 6 ate =
#scre$er ]k],i,], ],j,]l]
roximo
roximo
!im
=5 :eja um programa para o c"lculo da m%dia de uma dada quantidade de n&meros. Ba seo
6.< discutimos um algoritmo para determinar a m%dia de 6G GGG n&meros dados. Ba ocasio
discutimos que utilizaramos uma &nica $ari"$el para receber os n&meros sendo que um $alor
subsequente s' seria solicitado depois que o anterior fosse ]processado]. ) diferena agora % que a
quantidade de n&meros ser" um dado de entrada, o que torna o programa de aplicao mais $ariada.
/omo a quantidade de n&meros ser" dada, pode-se utilizar uma estrutura Para prximo para receber
e somar os n&meros.
CCrograma que determina a m%dia aritm%tica de n n&meros dados
Karia$eis
Bumerico Bum, :oma Media, n, i
2nicio
#scre$er 40igite a quantidade de n&meros5
3er n
:oma d G
)prendendo a rogramar rogramando numa 3inguagem )lgortmica #xecut"$el *23)+ - "gina <G
#scre$er 40igite os n&meros5
ara i d 6 at% n
3er Bum
:oma d :oma b Bum
roximo
Media d :omaCn
#scre$er 4M%dia dos n&meros dados, 4, Media
!im
65 . exemplo acima tem o incon$eniente de que sua execuo exige que se saiba
anteriormente a quantidade de n&meros. Baturalmente, isto no ocorre na maioria dos casos.
Kejamos ento um programa para determinar a m%dia de uma relao de n&meros dados, sem que se
conhea pre$iamente a quantidade deles. Beste caso, no podemos utilizar o comando Para
proximo, pois no sabemos o n&mero de repeties\ )ssim, o comando Faca enquanto de$e ser
utilizado e uma pergunta de$e ser formulada, qual a expresso l'gica que controlar" a estruturaa )
soluo % ]acrescentar] 1 relao um $alor sabidamente diferente dos $alores da relao e utilizar
este $alor para controlar a repetio. #ste $alor aqui referido % conhecido como lag. /omo dito
logo acima, de$e-se ter certeza que o lag no consta da relao. 2sto no % complicado, pois ao se
escre$er um programa se tem conhecimento de que $alores o programa $ai manipular e a escolha do
lag fica facilitada. or exemplo, se o programa $ai manipular n&meros positi$os pode-se usar -6
para o lag. )l%m do lag, o programa necessita de uma $ari"$el que determine a quantidade de
n&meros da relao, $alor este que ser" utilizado no c"lculo da m%dia.
CCrograma que determina a m%dia aritm%tica de uma relao de n&meros dados
Karia$eis
Bumerico Bum, :oma, Media, Ruant
2nicio
:oma d G
Ruant d 6
#scre$er ]0igite os n&meros *-6 para encerrar+]
3er Bum
!aca enquanto Bum fe -6
:oma d :oma b Bum
Ruant d Ruant b 6
3er Bum
!imqenquanto
Ruant d Ruant - 6
Media d :omaCRuant
#scre$er ]M%dia dos n&meros dados, ], Media
!im
Kale obser$ar que o comando Ruant d Ruant - 6 % necess"rio pelo fato de que o lag foi
computado como elemento da relao. 2sto poderia ser e$itado, inicializando-se a $ari"$el Ruant
com zero. or%m, quando esti$ermos no captulo = estudando vetores a inicializao aqui adotada
ser" importante.
@5 Ba seo 6.= apresentamos o algoritmo de ,uclides para a determinao do mximo divisor
comum de dois n&meros dados. ara relembrar, $ejamos como calcular o m"ximo di$isor comum
de 8G; e @;.
8G; @; 9= 68 G
8 8 9
. algoritmo % o seguinte, di$ide-se 8G; por @; obtendo-se resto 9=E a partir da repete-se
di$ises at% que o resto seja zero, sendo o di$idendo da di$iso atual o di$isor da di$iso anterior e
)prendendo a rogramar rogramando numa 3inguagem )lgortmica #xecut"$el *23)+ - "gina <6
o di$isor da di$iso atual o resto da di$iso anterior. . &ltimo di$isor % o m"ximo di$isor
procurado.
#scre$er este algoritmo numa linguagem de programao % muito simples, pois uma estrutura
de repetio e comandos de atribuio permitem que se obtenha facilmente a sequncia de di$ises
desejadas.
CCrograma para a determinao do m"ximo di$isor comum de dois inteiros positi$os
Karia$eis
Bumerico x, j, m, n, Mdc, (est
2nicio
#scre$er ]0igite os dois n&meros]
3er m
3er n
x d m
j d n
(est d (esto*x, j+
!aca enquanto (est fe G
x d j
j d (est
(est d (esto*x, j+
!imqenquanto
Mdc d j
#scre$er ]Mdc*],m,], ], n,]+ d ], Mdc
!im
Bote a necessidade da utilizao das $ari"$eis x e #. #las so $ari"$eis utilizadas no
processamento e tero os seus conte&dos alterados durante a execuo do programa. :e us"ssemos
as $ari"$eis m e n, os $alores dos dados de entrada seriam perdidos, o que, e$identemente, no de$e
ocorrer.
u primeira $ista, o programa de$eria inicialmente determinar o maior dos n&meros m e n,
armazenando-o em x. . quadro seguinte mostra que isto no % necess"rio, apresentando a simulao
da execuo do programa para m d =@ e n d 6;@.
m n x j (est Mdc
=@ 6;@ =@ 6;@ =@
6;@ =@ 68
=@ 68 @
68 @ ;
@ ; G
;
:5 Mm outro algoritmo matem"tico cuja implementao em linguagem de programao
apresenta um bom exemplo do uso de estruturas de repetio % o algoritmo para a determinao do
mnimo m1ltiplo comum *mmc+ de dois n&meros dados. /omo indica a pr'pria denominao, o
mnimo m1ltiplo comum de dois n&meros % o menor n&mero que % di$is$el pelos dois n&meros. )
matem"tica pro$a que o mmc de dois n&meros % o produto dos di$isores primos dos dois n&meros,
comuns ou no, ambos com as suas multiplicidades. ara se obter os di$isores primos, realiza-se
di$ises sucessi$as pelos primos que so di$isores de pelo menos um dos n&meros.
. quadro da p"gina seguinte mostra o c"lculo do mnimo m&ltiplo comum dos n&meros 9=G
e ;8G, como nos % ensinado no ensino fundamental.
)prendendo a rogramar rogramando numa 3inguagem )lgortmica #xecut"$el *23)+ - "gina <8
9=G, ;8G 8
6@G, 86G 8
AG, 6G< 8
;<, 6G< 9
6<, 9< 9
<, 9< <
6, ? ?
6, 6 MM/ d 8
M
8
M
8
M
9
M
9
M
<
M
? d 8 <8G
.bser$e que, quando um di$isor primo % encontrado, repete-se a di$iso, com o quociente no
lugar do di$idendo, at% se obter um n&mero que no % m&ltiplo daquele di$isor. ), incrementa-se o
tal di$isor. 2sto % feito at% que ambos os quocientes sejam iguais a 6. Jemos o seguinte programa.
CCrograma para determinao do mnimo m&ltiplo comum de dois inteiros positi$os
Karia$eis
Bumerico m, n, x, j, 0i$, Mmc
2nicio
#scre$er ]0igite os dois n&meros]
3er m
3er n
x d m
j d n
Mmc d 6
0i$ d 8
!aca enquanto *x fe 6+ ou *j fe 6+
!aca enquanto *(esto*x, 0i$+ d G+ ou *(esto*j, 0i$+ d G+
Mmc d Mmcr0i$
:e (esto*x, 0i$+ d G entao
x d 2nteiro*xC0i$+
!imqse
:e (esto*j, 0i$+ d G entao
j d 2nteiro*jC0i$+
!imqse
!imqenquanto
0i$ d 0i$ b 6
!imqenquanto
#scre$er ]mmc*], m,], ], n,]+ d ], Mmc
!im
+*5 ) questo do mmc % muito interessante como exemplo para a aprendizagem de
programao pelo fato de que podemos apresentar um outro algoritmo de compreenso bem mais
simples que o anterior.
) id%ia % a seguinte, se formos multiplicando m sucessi$amente por 6, 8, 9,..., obteremos
m&ltiplos de m. ara se obter o mnimo m&ltiplo comum basta que se tome o primeiro destes
produtos que seja m&ltiplo tamb%m de n.
CCrograma para a determinao do mnimo m&ltiplo comum de dois inteiros positi$os
Karia$eis
Bumerico m, n, x, j, i, Mmc
2nicio
#scre$er ]0igite os dois n&meros]
3er m
3er n
:e m e n entao
)prendendo a rogramar rogramando numa 3inguagem )lgortmica #xecut"$el *23)+ - "gina <9
x d m
j d n
:enao
x d n
j d m
!imqse
i d 6
!aca enquanto (esto*xri, j+ fe G
i d i b 6
!imqenquanto
Mmc d xri
#scre$er ]mmc*], m,], ], n,]+ d ], Mmc
!im
95; Exerccios propostos
+5 Mostre a configurao da tela ap's a execuo do programa
Karia$eis
Bumerico i, a, q, Jermo
2nicio
ara i d < ate 6 passo -6
a d i
q d 9
Jermo d a
!aca enquanto Jermo fd Ara
#scre$er Jermo
Jermo d Jermorq
!imqenquanto
roximo
!im
)5 #scre$a um programa que determine a soma dos quadrados dos n primeiros n&meros
naturais, n dado.
85 #scre$a um programa para calcular a soma dos n primeiros termos das sequncias abaixo, n
dado.
a+

6
8
!
9
<
!
<
@
!. ..

b+

6,
6
8
!
6
9
!
6
;
! . ..

95 #scre$a um programa que gere uma tabela de con$erso de temperaturas em graus


!ahrenheit para graus /elsius, com as temperaturas em graus !ahrenheit cobrindo a faixa de G a 6<G
graus, com $ariao de meio grau.
;5 Mm n&mero inteiro % dito pereito se ele % igual 1 metade da soma de todos os seus
di$isores. or exemplo, como os di$isores de = so 6, 8, 9 e = e 6 b 8 b 9 b = d 68, = % perfeito. )
Matem"tica ainda no sabe se a quantidade de n&meros perfeitos % ou no finita. #scre$a um
programa que liste todos os n&meros perfeitos menores que um inteiro n dado.
=5 . n&mero 9 G8< possui a seguinte caracterstica, 9G b 8< d << e <<
8
d 9 G8<. #scre$a um
programa que escre$a todos os n&meros com quatro algarismos que possuem a citada caracterstica.
65 #scre$a um programa que escre$a todos os pares de n&meros de dois algarismos que
apresentam a seguinte propriedade, o produto dos n&meros no se altera se os dgitos so in$ertidos.
or exemplo, A9x69 d 9Ax96 d 6 8GA.
)prendendo a rogramar rogramando numa 3inguagem )lgortmica #xecut"$el *23)+ - "gina <;
@5 #scre$a um programa para determinar o n&mero de algarismos de um n&mero inteiro
positi$o dado.
:5 #scre$a um programa que $erifique se um dado n&mero inteiro positi$o % o produto de dois
n&meros primos. or exemplo, 6< % o produto de dois primos, pois 6< d 9 x <E 8G no % o produto
de dois primos, pois 8G d 8 x 6G e 6G no % primo.
+*5 Ruando um n&mero no % produto de dois n&meros primos, a matem"tica pro$a que ele
pode ser escrito de maneira &nica como um produto de potncias de n&meros primos distintos. #ste
produto % chamado de decomposio em atores primos do n&mero e os expoentes so chamados de
multiplicidade do primo respecti$o. or exemplo, 9=G d 8
9
x9
8
x<. #scre$a um programa que obtenha
a decomposio em fatores primos de um inteiro dado.
++5 #scre$a um programa que transforme o computador numa urna eletr+nica para eleio,
em segundo turno, para presidente de um certo pas, 1s quais concorrem os candidatos @9-)libab" e
A9-)lcapone. /ada $oto de$e ser dado pelo n&mero do candidato, permitindo-se ainda os $otos GG
para voto em "ranco e 88 para voto nulo, de$endo o eleitor ser consultado quanto 1 confirmao do
seu $oto. Bo final da eleio o programa de$e emitir um relat'rio contendo a $otao de cada
candidato, a quantidade $otos em branco, a quantidade de $otos nulos e o candidato eleito.
+)5 ) sequ-ncia de Fi""onaci % a sequncia *6, 6, 8, 9, <, @, 69, ...+ definida por

#scre$a um programa que determine o n-%simo termo desta sequncia, n dado.
+85 .s sistemas de computao que gerenciam caixas de lojas e supermercados fornecem ao
operador, ap's a informao do $alor do pagamento, o troco, em n&meros decimais, que ele de$e
dar ao cliente. Jal$ez fosse interessante que, para otimizar a utilizao das notas e das moedas de
menor $alor, $isando minimizar o problema da ]falta de troco], o sistema fornecesse ao operador as
quantidades de cada nota e de cada moeda para um ]troco 'timo]. )dmitindo que o supermercado
fornea tamb%m troco para pagamentos em cheque de qualquer $alor, escre$a um programa que,
recebendo o $alor da compra e o $alor do pagamento, fornea o ]troco 'timo] no sentido
comentado acima.
+95 ) s;rie &arm+nica
S=6
6
8

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

CCrograma para gerar a matriz unidade de ordem n


Karia$eis
Bumerico I, j, n
Matriz numerico 2^9G, ;G_
2nicio
#scre$er ]0igite a ordem da matriz unidade]
3er n
ara I d 6 ate n
ara j d 6 ate n
:e I d j entao
i^I,j_ d 6
:enao
i^I, j_ d G
!imqse
roximo
roximo
)prendendo a rogramar rogramando numa 3inguagem )lgortmica #xecut"$el *23)+ - "gina =A
#scre$er ]Matriz unidade de ordem ], n
ara I d 6 ate n
ara j d 6 ate n
#scre$er i^I, j_
roximo
roximo
!im
=5 Ruando, como no exemplo anterior, o n&mero de linhas % igual ao n&mero de colunas a
matriz % dita matri. quadrada. Beste caso, os elementos de ndices iguais constituem a diagonal
principal. ) soma dos elementos da diagonal principal de uma matriz quadrada % o trao da matriz.
/omo mais um exemplo de programas que manipulem matrizes, o programa abaixo determina o
trao de uma matriz quadrada dada. .bser$e que para percorrer a diagonal principal no h"
necessidade de dupla estrutura Para proximo.
CCrograma para determinar o trao de uma matriz quadrada
Karia$eis
Bumerico )ux, i, j, n, Jraco
Matriz numerico )^9G, 9G_
2nicio
#scre$er ]0igite a ordem da matriz]
3er n
#scre$er ]0igite os elementos da matriz]
ara i d 6 ate n
ara j d 6 ate n
3er )ux
)^i,j_ d )ux
roximo
roximo
CC0eterminao do trao da matriz
Jraco d G
ara i d 6 ate n
Jraco d Jraco b )^i, i_
roximo
#scre$er ]. trao da matriz dada e ], Jraco
!im
65 Baturalmente, o armazenamento de uma matriz que possui alguma propriedade especfica
pode ser facilitado se esta propriedade for le$ada em conta no programa. X o caso, por exemplo, de
uma matri. sim;trica *uma matriz quadrada ) d *a
ij
+ % dita sim;trica se a
ij
d a
ji
, quaisquer que sejam
i e j+. :e Mat^6G, 6G_ % uma $ari"$el do tipo ?atri. numerico, para armazenar em Mat uma matriz
sim%trica basta digitar os elementos situados acima da diagonal principal e os elementos desta
diagonal.
CCrograma para armazenar e exibir uma matriz sim%trica
Karia$eis
Bumerico i, j, n, )ux, x, j
Matriz numerico Mat^6G, 6G_
2nicio
#scre$er ]0igite a ordem da matriz]
3er n
#scre$er ]0igite os elementos da matriz, acima da diagonal]
ara i d 6 ate n
ara j d i ate n
)prendendo a rogramar rogramando numa 3inguagem )lgortmica #xecut"$el *23)+ - "gina ?G
3er )ux
Mat^i, j_ d )ux
Mat^j, i_ d )ux
roximo
roximo
!im
@5 /omo se determina a soma de duas matrizes somando-se os seus elementos de mesmos
ndices, um programa que receba duas matrizes e determine a soma delas % muito simples.
Karia$eis
Bumerico )ux, i, j, m6, n6, m8, n8
Matriz numerico )^9G, ;G_
Matriz numerico H^9G, ;G_
Matriz numerico :oma^9G, ;G_
2nicio
#scre$er ]0igite a ordem da primeira matriz]
3er m6
3er n6
#scre$er ]0igite os elementos da primeira matriz]
ara i d 6 ate m6
ara j d 6 ate n6
3er )ux
)^i,j_ d )ux
roximo
roximo
#scre$er ]0igite a ordem da segunda matriz]
3er m8
3er n8
#scre$er ]0igite os elementos da segunda matriz]
ara i d 6 ate m8
ara j d 6 ate n8
3er )ux
H^i, j_ d )ux
roximo
roximo
CC0eterminao da matriz soma
:e *m6 d m8+ e *n6 d n8+ entao
ara i d 6 ate m6
ara j d 6 ate n6
:oma^i, j_ d )^i, j_ b H^i, j_
roximo
roximo
ara i d 6 ate m6
ara j d 6 ate n6
#scre$er :oma^i, j_
roximo
roximo
:enao
#scre$er ]) soma das matrizes no esta definida]
!imqse
!im
)prendendo a rogramar rogramando numa 3inguagem )lgortmica #xecut"$el *23)+ - "gina ?6
:5 >" um programa para multiplicao de matrizes no % to simples. Ba $erdade % um
programa que % muito &til para o desen$ol$imento da l'gica de programao. :e ) d *a
ij
+
mxn
e
H d *b
ij
+
rxs
, a matriz produto s' est" definida se n d r e, neste caso, se d ) . H, ento
p
ij
d a
i6
. b
6j
b a
i8
. b
8j
b ... b a
in
. b
rj
.
.u seja, o elemento ij da matriz produto % a soma dos produtos dos elementos da linha i da
matriz ) pelos elementos da coluna j da matriz H, o que exigir" uma terceira estrutura Para
proximo.
Karia$eis
Bumerico )ux, i, j, I, m6, n6, m8, n8
Matriz numerico )^9G, ;G_
Matriz numerico H^9G, ;G_
Matriz numerico M^9G, ;G_
2nicio
#scre$er ]0igite a ordem da primeira matriz]
3er m6
3er n6
#scre$er ]0igite os elementos da primeira matriz]
ara i d 6 ate m6
ara j d 6 ate n6
3er )ux
)^i,j_ d )ux
roximo
roximo
#scre$er ]0igite a ordem da segunda matriz]
3er m8
3er n8
#scre$er ]0igite os elementos da segunda matriz]
ara i d 6 ate m8
ara j d 6 ate n8
3er )ux
H^i,j_ d )ux
roximo
roximo
CC0eterminao da matriz produto
:e n6 d m8 entao
ara i d 6 ate m6
ara j d 6 ate n8
M^i, j_ d G
ara I d 6 ate n6
M^i, j_ d M^i, j_ b )^i, I_rH^I, j_
roximo
roximo
roximo
ara i d 6 ate m6
ara j d 6 ate n8
#scre$er M^i, j_
roximo
roximo
:enao
#scre$er ]. produto das matrizes no esta definido]
!imqse
)prendendo a rogramar rogramando numa 3inguagem )lgortmica #xecut"$el *23)+ - "gina ?8
!im
=58 Formata%&o da sadaL"nterface com o usurio
Mesmo no fazendo da parte da l'gica de programao, % interessante que quem est"
aprendendo a programar saiba que os sistemas para desen$ol$imento de programas oferecem
recursos para que a sada do programa seja exibida de forma elegante e agrad"$el de se $er e para
que o sistema oferea ao usu"rio interaces que facilitem a entrada de dados. 2sto % obtido atra$%s de
funes *ou, em alguns sistemas, procedimentos+ pr%-definidos, sendo que, quanto mais sofisticado
seja o sistema mais recursos ele oferece. .s sistemas visuais, como Kisual Hasic e 0elphi, so os
melhores exemplos de sistemas que oferecem recursos espetaculares para a criao de interaces
elegantes entre o sistema e o usu"rio.
Ruando um comando ,screver % executado no 23), o seu argumento % exibido e o cursor
*trao intermitente que indica a posio onde o pr'ximo caractere a ser exibido, s-lo-"+ $ai para a
linha e para a coluna seguintes 1quelas da posio anterior. or exemplo, se o $etor *9, <, @, A, 68+
esti$er armazenado na $ari"$el Ket, a estrutura
ara i d 6 ate <
#scre$er Ket^i_
roximo
exibir" na tela
9
<
@
A
68
Baturalmente, um $etor no de$e ser exibido desta forma\ . 23) possui o comando
Posicionar que, como o seu nome indica, posiciona o cursor num ponto especfico da tela do $deo.
:ua sintaxe %,
osicionar Kari"$el 6, Kari"$el 8
onde os conte&dos das $ari"$eis 6 e 8 de$em se n&meros inteiros, que indicaro, respecti$amente, a
linha e a coluna em que o cursor ser" posicionado.
Bo exemplo anterior, a sequncia de comandos
ara j d 6 ate <
x d x b i
osicionar 6G, x
:e j d 6 entao
#scre$er ]*], Ket^j_, ],]
:enao
:e j f < entao
#scre$er Ket^j_, ],]
:enao
#scre$er Ket^j_, ]+]
!imqse
!imqse
roximo
exibe na tela, exatamente, *9, <, @, A, 68+.
. caso de uma matriz % mais gra$e. :e a matriz
)prendendo a rogramar rogramando numa 3inguagem )lgortmica #xecut"$el *23)+ - "gina ?9
esti$er armazenada na $ari"$el composta Mat, a estrutura
ara i d 6 ate ;
ara j d 6 ate 9
#scre$er Mat^i, j_
roximo
roximo
exibir" na tela os elementos da matriz de seguinte forma,
8
9
;
<
9
;
<
=
;
<
=
?
o que, naturalmente, no % interessante, pois uma matriz s' tem interesse se ela esti$er escrita em
linhas e colunas. ara exibir uma $ari"$el composta bidimensional em forma de matriz podemos
usar a seguinte estrutura
j d 6
ara i d 6 ate m
x d 6
ara j d 6 ate n
osicionar j, x
#scre$er Mat^i, j_
x d x b ;
roximo
j d j b 6
roximo
ara a formatao da sada e para a criao de interfaces, o 23) ainda disponibiliza um
comando cuja execuo limpa uma "rea da tela do $deo. #ste comando % ati$ado atra$%s da
seguinte sintaxe,
3impar #xpr6, #xpr8, #xpr9, #xpr;
onde #xpr6, #xpr8, #xpr9 e #xpr; so expresses que resultam $alores inteiros e indicam as
coordenadas do canto esquerdo superior *#xpr6, #xpr8+ e do canto direito inferior *#xpr9, #xpr;+
da "rea a ser limpa. :e #xpr6, #rpr8, #xpr9, #xpr; forem omitidos, o sistema adota os $alores
padres 6, 6, 8; e @G, que so as coordenadas do canto esquerdo superior e as do canto direito
inferior da tela. .u seja, o comando Limpar equi$ale a Limpar 6, 6, 8;, @G. )pro$eitando o ensejo,
$alores tomados como padro por um sistema so chamados $alores deault.
.utra instruo &til para a formatao da sada % o comando 7anela que desenha uma moldura
numa posio da tela fixado pelo programador. #ste comando % ati$ado atra$%s da seguinte sintaxe,
>anela #xpr6, #xpr8, #xpr9, #xpr;
)prendendo a rogramar rogramando numa 3inguagem )lgortmica #xecut"$el *23)+ - "gina ?;
onde, como no comando Limpar, #xpr6, #xpr8, #xpr9 e #xpr; so expresses que resultam $alores
inteiros e indicam as coordenadas do canto esquerdo superior *#xpr6, #xpr8+ e do canto direito
inferior *#xpr9, #xpr;+ da moldura.
!inalmente, o comando %or que permite se fixar cores distintas para a ]frente] do $deo
*textos, molduras, etc.+ e para o ]fundo] do $deo. ) sua sintaxe %, simplesmente,
/or #xpr6, #xpr8
onde #xpr6 e #xpr8 podem ser $ari"$eis do tipo )umerico ou do tipo %aracter ou, ainda, $alores
constante destes tipos de dados, de acordo com a tabela a seguir.
Bumerico /aracter Bumerico /aracter
G preto A azulqintenso
6 azul 6G $erdeqintenso
8 $erde 66 cianoqintenso
9 ciano 68 $ermelhoqintenso
; $ermelho 69 magentaqintenso
< magenta 6; marromqintenso
= marrom 6< amarelo
? cinza 6= branco
@ pretoqintenso
=59 Exerccios propostos
+5 #scre$a um programa que armazene uma relao de n&meros na ordem in$ersa da ordem
original. or exemplo, se a relao dada for *9, =, @, A+ o programa de$e armazenar *A, @, =, 9+.
)5 #scre$a um programa que receba um $etor e o decomponha em dois outros $etores, um
contendo as componentes de ordem mpar e o outro contendo as componentes de ordem par. or
exemplo, se o $etor dado for *9, <, =, @, 6, ;, 8, 9, ?+, o $etor de$e gerar os $etores *9, =, 6, 8, ?+ e
*<, @, ;, 9+.
85 #scre$a um programa que receba um $etor de n&meros inteiros e o decomponha em dois
outros $etores, um contendo as componentes de $alor mpar e o outro contendo as componentes de
$alor par. or exemplo, se o $etor dado for *9, <, =, @, 6, ;, 8, 9, ?+ o programa de$e gerar os $etores
*9, <, 6, 9, ?+ e *=, @, ;, 8+.
95 Mm vetor do (
n
% uma n-upla de n&meros reais *x
6
, x
8
, ..., x
n
+, sendo cada x
i
chamado de
componente. ) norma de um $etor *x
6
, x
8
, ..., x
n
+ % definida por

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 &ltima 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 &ltima
posio do $etor auxiliarE o segundo maior $alor % armazenado na pen&ltima 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 &ltimas 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 &ltima, em seguida, a segunda
ficha, em seguida, a pen&ltima 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 &ltima componente, permutando-
se suas posies se aquela maior componente for menor do que esta &ltima 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 &ltimos 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+ &ltimos 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&ltiplo 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@=.

Você também pode gostar