Programando
Programando
com Pascal
com Pascal
Respostas dos
Respostas dos
Exercícios Propostos
Exercícios Propostos
Jaime Evaristo
Jaime Evaristo
Instituto de Computação
Instituto de Computação
Universidade Federal de Alagoas
Universidade Federal de Alagoas
Programando
Programando
com Pascal
com Pascal
Respostas dos
Respostas dos
Exercícios Propostos
Exercícios Propostos
Jaime Evaristo
Jaime Evaristo
Instituto de Computação
Instituto de Computação
Universidade Federal de Alagoas
Universidade Federal de Alagoas
Capítulo 1
Capítulo 1
1
1 Naturalmente, na primeira travessia, um índio levaria um branco até a outra margem e voltaria sozinho. A questão é a segunda: nã Naturalmente, na primeira travessia, um índio levaria um branco até a outra margem e voltaria sozinho. A questão é a segunda: nã oo poderia atravessar um índio e um
poderia atravessar um índio e um branco, pois, ao chegar na branco, pois, ao chegar na outra margem, haveria dois brancos e outra margem, haveria dois brancos e um índio; não poderiam atravessarum índio; não poderiam atravessar dois índio, pois o terceiro ficaria com dois brancos. A soluão é atravessar dois brancos e um deles retornar. A terceira travessia s! dois índio, pois o terceiro ficaria com dois brancos. A soluão é atravessar dois brancos e um deles retornar. A terceira travessia s! pode ser feita
pode ser feita por dois índios, por dois índios, pois "# e$istem pois "# e$istem dois brancos na dois brancos na outra margem. outra margem. A questão é A questão é o retorno. A o retorno. A %nica possibilidade %nica possibilidade é retornaré retornar um índio e um branco& 'emos então o seguinte algoritmo:
um índio e um branco& 'emos então o seguinte algoritmo: (. Atravessem um índio e um branco.
(. Atravessem um índio e um branco. ). *etorne o índio.
). *etorne o índio.
+. Atravessem dois brancos. +. Atravessem dois brancos. . *etorne um branco. . *etorne um branco. -. Atravessem dois índios. -. Atravessem dois índios.
. *etornem um índio e um branco. . *etornem um índio e um branco. /. Atravessem dois índios.
/. Atravessem dois índios. 0. *etorne um branco. 0. *etorne um branco. 1. Atravessem dois brancos. 1. Atravessem dois brancos. (2. *etorne um branco. (2. *etorne um branco. ((. Atravessem dois brancos. ((. Atravessem dois brancos. !
! 3ndicando por (, ), +, , ... os discos na ordem crescente dos seus di4metros, temos para o caso n 5 ): 3ndicando por (, ), +, , ... os discos na ordem crescente dos seus di4metros, temos para o caso n 5 ): (. 6isco ( da
(. 6isco ( da origemorigem para para auxiliar auxiliar .. ). 6isco ) da
). 6isco ) da origemorigem para o para o destinodestino.. +. 6isco ( da
+. 6isco ( da auxiliar auxiliar para o para o destinodestino..
7ara o caso n 5 +, basta observar que é necess#rio apenas transportar os dois discos ( e ) da
7ara o caso n 5 +, basta observar que é necess#rio apenas transportar os dois discos ( e ) da origemorigem para para auxiliar auxiliar 8que é o caso 8que é o caso anterior9, transportar o disco + da
anterior9, transportar o disco + da origemorigem para o para o destinodestino e os discos ( e ) da torre e os discos ( e ) da torre auxiliar auxiliar para o para o destinodestino 8que é, novamente, o caso 8que é, novamente, o caso anterior9.
anterior9.
(. 6isco ( da
(. 6isco ( da origemorigem para para destinodestino.. ). 6isco ) da
). 6isco ) da origemorigem para para auxiliar auxiliar .. +. 6isco ( do
+. 6isco ( do destinodestino para para auxiliar auxiliar .. . 6isco + da
. 6isco + da origemorigem para para destinodestino.. -. 6isco ( da
-. 6isco ( da auxiliarauxiliar para para origemorigem.. . 6isco ) da
. 6isco ) da auxiliar auxiliar para o para o destinodestino.. /. 6isco ( da
/. 6isco ( da origemorigem para o para o destinodestino.. "
" 7ara facilitar a linguagem, indiquemos por 78m, n9 5 2 se as esferas7ara facilitar a linguagem, indiquemos por 78m, n9 5 2 se as esferas mm e e nn tm o mesmo peso e por 78m, n9 2 se a esfera tm o mesmo peso e por 78m, n9 2 se a esfera mm pesa pesa mais que a esfera
mais que a esfera nn. 'emos então a seguinte soluão:. 'emos então a seguinte soluão: (. 7ese as esferas ( e
(. 7ese as esferas ( e ).).
). <e 78(, )9 5 2, pese as esferas ( e +. ). <e 78(, )9 5 2, pese as esferas ( e +.
).( <e 78(, +9 2 então fornea como resposta: a esfera + tem peso menor que as esferas ( e ). ).( <e 78(, +9 2 então fornea como resposta: a esfera + tem peso menor que as esferas ( e ). ).) <e 78+, (9 2 então fornea como resposta: a esfera + tem peso maior que as esferas ( e ). ).) <e 78+, (9 2 então fornea como resposta: a esfera + tem peso maior que as esferas ( e ). +. <e 78(, )9 2, pese as esferas ( e +.
+. <e 78(, )9 2, pese as esferas ( e +.
+.( <e 78(, +9 5 2 então fornea como resposta: a esfera ) tem peso menor que as esferas ( e +. +.( <e 78(, +9 5 2 então fornea como resposta: a esfera ) tem peso menor que as esferas ( e +. +.) <e 78(, +9 2 então fornea como resposta: a esfera ( tem peso maior que as esferas ) e +. +.) <e 78(, +9 2 então fornea como resposta: a esfera ( tem peso maior que as esferas ) e +. +.+ <e 78+, (9 2 então fornea como resposta: a esfera ( tem peso menor que as esferas ) e +. +.+ <e 78+, (9 2 então fornea como resposta: a esfera ( tem peso menor que as esferas ) e +. . <e 78), (9 2, pese as esferas ) e +.
. <e 78), (9 2, pese as esferas ) e +.
.( <e 78), +9 5 2 então fornea como resposta: a esfera ( tem peso menor que as esferas ) e +. .( <e 78), +9 5 2 então fornea como resposta: a esfera ( tem peso menor que as esferas ) e +. .) <e 78), +9 2 então fornea como resposta: a esfera ) tem peso maior que as esferas ( e +. .) <e 78), +9 2 então fornea como resposta: a esfera ) tem peso maior que as esferas ( e +. .+ <e 78+, )9 2 então fornea como resposta: a esfera ) tem peso menor que as esferas ( e +. .+ <e 78+, )9 2 então fornea como resposta: a esfera ) tem peso menor que as esferas ( e +. #
# 7ara calcular o produto, utilizamos uma vari#vel 7 que assume inicialmente o primeiro valor da relaão e, para cada novo7ara calcular o produto, utilizamos uma vari#vel 7 que assume inicialmente o primeiro valor da relaão e, para cada novo elemento, vai tendo o seu valor substituído pelo produto do seu valor atual pelo novo elemento.
elemento, vai tendo o seu valor substituído pelo produto do seu valor atual pelo novo elemento. (. =hame de A o primeiro n%mero dado.
(. =hame de A o primeiro n%mero dado.
). =hame de N o n%mero de elementos da relaão ). =hame de N o n%mero de elementos da relaão +. >aa 7 5 A.
+. >aa 7 5 A.
. *epita N ? ( vezes as instru@es .( e .). . *epita N ? ( vezes as instru@es .( e .).
.(. =hame de A o pr!$imo n%mero dado. .(. =hame de A o pr!$imo n%mero dado. .). <ubstitua o valor de 7 por 7 $ A. .). <ubstitua o valor de 7 por 7 $ A. -. =alcule 5 *aiz87, N9
-. =alcule 5 *aiz87, N9
. >ornea para o valor da média. . >ornea para o valor da média. $
$ Basta observar que os dias da semana, sendo em n%mero de /, repetem?se em ciclos de / dias. Assim, se 2(C2(C(122 foi umaBasta observar que os dias da semana, sendo em n%mero de /, repetem?se em ciclos de / dias. Assim, se 2(C2(C(122 foi uma segunda?feira, o foram também os dias 20C2(C(122, (-C2(C(122, ))C2(C(122, )1C2(C(122, 2-C2)C(122 e assim sucessivamente. Basta segunda?feira, o foram também os dias 20C2(C(122, (-C2(C(122, ))C2(C(122, )1C2(C(122, 2-C2)C(122 e assim sucessivamente. Basta então determinar o n%mero de dias decorridos entre a data dada e o dia 2(C2(C(122 e calcular o resto da divisão por /.
então determinar o n%mero de dias decorridos entre a data dada e o dia 2(C2(C(122 e calcular o resto da divisão por /. (. 6etermine o n%mero n de dias entre a data dada e 2(C2(C(122.
(. 6etermine o n%mero n de dias entre a data dada e 2(C2(C(122. ). =alcule o resto r da divisão de n por /
). =alcule o resto r da divisão de n por / +. <e r 5 ( fornea
. <e r 5 ) fornea como resposta tera?feira. -. <e r 5 + fornea como resposta quarta?feira. . <e r 5 fornea como resposta quinta?feira. /. <e r 5 - fornea como resposta se$ta?feira. 0. <e r 5 fornea como resposta s#bado. 1. <e r 5 2 fornea como resposta domingo.
% 3ndicando por A8$, D9 a travessia dos integrantes $ e D e por E8$9 a volta do integrante $, teríamos: (. A8baterista, bai$ista9. ). E8baterista9. +. A8guitarrista, vocal9. . E8bai$ista9 -. A8bai$ista, baterista9
Capítulo !
1a ) 1&true!a F7rograma que converte uma temperatura em graus >arenheit para graus =elsiusG program =onversao'emperatura;
var =elsius, >arenheit : real; &egin
'riteln8H6igite a temperatura em graus >arenheitH9; readln8>arenheit9;
=elsius :5 -I8>arenheit ? +)9C1;
'riteln8>arenheit:2:), H graus >arenheit correspondem a H, =elsius:2:), H graus =elsiusH9; end.
!& F7rograma para gerar o invertido de um inteiro dadoG program 3nverte3nteiro;
var Num, 3nvertido, Jnidade, 6ezena, =entena : integer; &egin
'riteln8H6igite o inteiro 8com tres algarismos9H9; readln8Num9;
Jnidade :5 Num mod (2;
6ezena :5 8Num mod (229 div (2; =entena :5 Num div (22;
3nvertido :5 Jnidade I (22 K 6ezena I (2 K =entena; 'riteln8HL invertido de H, Num, H eh H, 3nvertido9; end.
!c F7rograma para somar duas fracoes ordinariasG program <oma>racoes;
var Num(, 6en(, Num), 6en), Num, 6en: integer; &egin
'riteln8H6igite as fracoesH9;
readln8Num(, 6en(, Num), 6en)9; Num :5 Num( I 6en) K Num) I 6en(;
6en :5 6en( I 6en);
'riteln8H8H, Num(, HCH, 6en(, H9 K 8H, Num), HCH, 6en),H9 5 8H, Num, HCH, 6en, H9H9; end.
!d F7rograma que determina o menor multiplo de um inteiro maior que um outro inteiroG program enorultiplo;
var n, M, enorult : integer; &egin
'riteln8H6igite dois inteiros H9; readln8n, M9;
enorult :5 n ? n mod M K M;
'riteln8HL menor multiplo de H, M, H maior queH, n, H H, enorult9; end.
!e F7rograma que determina o perimetro de um poligono regular inscrito numa circunferenciaG program 7erimetro7oligono3nscrito;
var NumOados : integer; *aio, 7erimetro: real; &egin
'riteln8H6igite o numero de lados do poligonoH9; readln8NumOados9;
readln8*aio9;
7erimetro :5 ) I NumOados I *aio I <in87iCNumOados9;
'rite8HL perimetro do poligono de H, NumOados, H lados inscrito H9;
'riteln8Hnuma circunferencia de raio H, *aio:2:), H eh igual a H, 7erimetro:2:)9; end.
" F7rograma que permuta o conteudo de duas variaveis sem utilizar variavel au$iliarG program 7ernutaEariaveis;
var $, D : real; &egin
'riteln8H6igite dois valoresH9; readln8$, D9;
'riteln8H=onteudos antes da permuta: $ 5 H, $:2:), H e D 5 H, D:2:)9; $ :5 $ K D;
D :5 $ ? D; $ :5 $ ? D;
'riteln8H=onteudo apos a permuta $ 5 H, $:2:), H e D 5 H, D:2:)9; end.
# F7rograma que determina a entrada e as duas prestacoes de uma compra a prazoG program =alculo7restacoes;
var =ompra, Pntrada : real; 7restacao : integer; &egin
'riteln8H6igite o valor da compraH9; readln8=ompra9;
7restacao :5 (runc8=ompraC+9; Pntrada :5 =ompra ? ) I 7restacao; 'riteln8HEalor da compra: H, =ompra:2:)9; 'riteln8HEalor da entrada: H, Pntrada:2:)9; 'riteln8HEalor das prestacoes: H, 7restacao, H.22H9; end.
$ F7rograma para fornecer um intervalo de tempo dado em segundos em horas minutos e segundosG program 3ntervalo'empo;
var 3ntervalo, *esto, Qoras, inutos, <egundos : integer; &egin
'riteln8H6igite o intervalo de tempoH9; readln83ntervalo9;
Qoras :5 3ntervalo div +22; *esto :5 3ntervalo mod +22; inutos :5 *esto div 2; <egundos :5 *esto mod 2;
'riteln8HL intervalo de tempo H, 3ntervalo, H s equivale a H9; 'riteln8Qoras, H h H, inutos, H min H, <egundos,H sH9; end.
% F7rograma para fornecer um intervalo de tempo dado em minutos em horas minutos e segundosG program 3ntervalo'empo;
var Qoras, inutos : integer;
3ntervalo, <egundos, *esto : real; &egin
'riteln8H6igite o intervalo de tempoH9; readln83ntervalo9;
Qoras :5 (runc83ntervalo9 div 2; *esto :5 3ntervalo ? Qoras I 2; inutos :5 (runc8*esto9; <egundos :5 >rac8*esto9 I 2;
'rite8HL intervalo de tempo H, 3ntervalo:2:), H s equivale a H9; 'riteln8Qoras, H h H, inutos, H min H, <egundos:2:(,H sH9; end.
) F7rograma para discriminar as notas de saque em um cai$a eletronico, observando, por pertinente, que o programa escrito com os conhecimentos do capitulo fica bem mais simplesG
program =ai$aPletronico;
var <aque, $, Notas(22, Notas-2, Notas(2, Notas-, Notas(: integer; &egin
'riteln8H6igite o valor do saqueH9; readln8<aque9;
Notas(22 :5 <aque div (22; $ :5 <aque mod (22; Notas-2 :5 $ div -2;
$ :5 $ mod -2; Notas(2 :5 $ div (2;
$ :5 $ mod (2; Notas- :5 $ div -; Notas( :5 $ mod -;
'riteln8HL saque solicitado no valor de H, <aque, H deve ser pago com:H9; 'riteln8Notas(22, H notas de (22 reaisH9;
'riteln8Notas-2, H notas de -2 rea isH9; 'riteln8Notas(2, H notas de (2 reaisH9; 'riteln8Notas-, H notas de - reaisH9; 'riteln8Notas(, H notas de ( realH9; end.
* F7rograma para implementar calculo de potencias em 7ascalG program 3mplementa7otencia;
var Base, P$poente, 7otencia : real; &egin
'riteln8H6igite a base 8positiva9 e o e$poenteH9; readln8Base, P$poente9;
7otencia :5 P$p8P$poente I On8Base99;
'riteln8Base:2:),HRH,P$poente:2:), H 5 H, 7otencia:2:9; end.
+ F7rograma para determinar o valor das prestacoes de um financiamentoG program =alculo7restacoes>inanciamento;
var Ealor, >ator, Eal7rest, 'a$a: real; Num7rest : integer; &egin 'rite8HEalor do financiamento: H9; readln8Ealor9; 'rite8HNumero de prestacoes: H9; readln8Num7rest9; 'rite8H'a$a de "uros: H9; readln8'a$a9; 'a$a :5 'a$aC(22;
>ator :5 P$p8Num7rest I On8( K 'a$a99; Eal7rest :5 8Ealor I 'a$a I >ator9C8>ator ? (9; 'riteln8H>inanciamento: H, Ealor:2:)9;
'riteln8HNumero de prestacoes: H, Num7rest9; 'riteln8H'a$a de "uros: H, (22 I 'a$a:2:)9; 'riteln8HEalor das prestacoes: H, Eal7rest:2:)9; end.
Capítulo "
1 ,programa -ue implementa a .uncao round/ program Arredondamentos;
var $ : real;
Arredonda : integer; &egin
'riteln8H6igite o numero a arredondarH9; readln8$9; i. >rac8$9 S 2.-t0en Arredonda :5 (runc8$9 else Arredonda :5 (runc8$9 K (;
'riteln8HL valor de H, $:2:, H arredondado e igual H, Arredonda9; end.
! Fprograma que verifica se um inteiro dado eh quadrado perfeitoG program Tuad7erfeito; var $ : integer; *aiz : real; &egin 'riteln8H6igite o numeroH9; readln8$9; *aiz :5 -r(8$9; i. >rac8*aiz9 5 2 t0en
else
'riteln8$, H nao eh quadrado perfeitoH9; end.
" Fprograma que determina o maior de tres numeros dadosG program aior6e+;
var $, D, z, aior : real; &egin
'riteln8H6igite s tres numerosH9; readln8$, D , z9;
aior :5 $;
i. 8D aior9 or 8z aior9 t0en i. D z t0en aior :5 D else aior :5 z;
'riteln8HL maior dos numeros H, $:2:), H, H, D:2:), H e H,z:2:) , H eh igual a H, aior:2:)9; end.
# Fprograma que classifica um triangulo de lados dadosG program =lassifica'riangulo;
var $, D, z : real; &egin
'riteln8H6igite os comprimentos dos lados do trianguloH9; readln8$, D , z9;
i. 8$ S D K z9 and 8D S z K $9 and 8z S $ K D9 t0en
i. 8$ 5 D9 and 8D 5 z9 t0en
'riteln8HL triangulo de lados H, $, H, H, D, H eh H, z, He equilateroH9 else
i. 8$ 5 D9 or 8$ 5 z9 or 8D 5 z9 t0en
'riteln8HL triangulo de lados H, $, H, H, D, H eh H, z, H e isoscelesH9 else
'riteln8HL triangulo de lados H, $, H, H, D, H eh H, z, H e escalenoH9 else
'riteln8HLs valores dados nao sao comprimentos dos lados de um trianguloH9; end.
$ Fprograma que verifica se um triangulo de lados dados eh retanguloG program =lassifica'riangulo;
var $, D, z, Qip, =at(, =at) : real; &egin
'riteln8H6igite os comprimentos dos lados do trianguloH9; readln8$, D , z9;
i. 8$ S D K z9 and 8D S z K $9 and 8z S $ K D9 t0en
&egin
Qip :5 $; =at( :5 D; =at) :5 z;
i. 8D Qip9 or 8z Qip9 t0en i. 8D z9 t0en &egin Qip :5 D; =at( :5 $; end else &egin Qip :5 z; =at) :5 $; end;
i. -r8Qip9 5 -r8=at(9 K -r8=at)9 t0en
'rite8HL triangulo de lados H, $, H, H, D, H e H, z, H eh retangulo de hipotenusa H, Qip, H e catetos H, =at(, H e H, =at)9;
else
'riteln8HL triangulo de lados H, $, H, H, D, H e H, z, H nao e retanguloH9; end
else
'riteln8HLs valores dados nao sao comprimentos dos lados de um trianguloH9; end.
% F7rograma que determina as raizes de uma equacao do segundo grauG program PquacaoUrau);
var a, b, c, $(, $), 7arte*eal, 7arte3mag, 6elta : real; &egin 'riteln8H6igite os coeficientesH9; readln8a, b, c9; i. a S 2 t0en &egin 6elta :5 -r8b9 ? IaIc; 7arte*eal :5 ?bC8)Ia9; 7arte3mag :5 -r(8abs86elta99C8)Ia9; i. 6elta 5 2 t0en &egin $( :5 7arte*eal K 7arte3mag; $) :5 7arte*eal ? 7arte3mag;
'riteln8HAs raizes da equacao dada sao H, $(, H e H, $)9; end
else
'rite8HAs raizes da equacao dada sao comple$as: H, 7arte*eal:2:),H K H, 7arte3mag:2:),Hi e H, 7arte*eal:2:), H ? H, 7arte3mag:2:),HiH9;
end else
'riteln8HA equacao nao e do segundo grauH9; end.
) F7rograma que determina a idade de uma pessoa em anos, meses e dias G program 3dadePmAnoseses6ias;
var 6iaNasc, esNasc, AnoNasc, d, 6iaAt, esAt, AnoAt, Anos, 6ias, eses: integer; &egin
'riteln8H6igite a data de nascimentoH9; readln86iaNasc, esNasc, AnoNasc9; 'riteln8H6igite a data atualH9;
readln86iaAt, esAt, AnoAt9; Anos :5 AnoAt ? AnoNasc; eses :5 esAt ? esnasc; 6ias :5 6iaAt ? 6iaNasc;
i. 8Anos S 29 or 88Anos 5 29 and 8eses S 299 or 88Anos 5 29 and 8eses 5 29 and 86ias S 299 t0en
'riteln8H6ata de nascimento invalidaH9 else &egin i. eses S 2 t0en &egin Anos :5 Anos K (; eses :5 eses K (); end; i. 6ias S 2 t0en &egin i. eses 2 t0en eses :5 eses V ( else &egin Anos :5 Anos ? (; eses :5 ((; end; case esNasc o. ) : i. AnoAt mod 5 2 t0en 6ias :5 6ias K )1
else 6ias :5 6ias K )0; , , 1, (( : 6ias :5 6ias K +2; else 6ias :5 6ias K +(; end; end;
'rite8HJma pessoa que nasceu em H, 6iaNasc,HCH, esnasc,HCH, AnoNasc, H tem na data de H, 6iaAt,HCH, esAt,HCH, AnoAt,H H, Anos, H anos H, eses, H meses H, 6ias, H diasH9;
end; end.
* F7rograma que determina a nota mínima de aprovacaoG program Notainima;
var Av(, Av), Av+, Av, edBimestral, Notain : real; &egin
'riteln8H6igite as notas das avaliacoes bimestraisH9; readln8Av(, Av), Av+, Av9;
edBimestral :5 8Av( K Av) K Av+ K Av9C; i. 8edBimestral S /9 and 8edBimestral 5 -9
t0en &egin
Notain :5 8-- ? I edBimestral9C;
'riteln8HJm aluno que notas H, Av(:2:), H, H, Av):2:), H, H, Av+:2:), H e H, Av:2:), H necessita na prova final de uma nota igual a H, Notain:2:)9;
end else
'riteln8HJm aluno que notas H, Av(:2:), H, H, Av):2:), H, H, Av+:2:), H e H, Av:2:), H nao faz prova finalH9; end.
Capítulo #
1 A configuraão da tela ap!s a e$ecuão deste programa ser# (9 - (-
-)9 () + +9+ 1 )/ 9) (0 -9( + 1
! Fprograma que determina a soma dos quadrados dos n primeiros numeros naturaisG program <omaTuadrados;
var n, <oma, i : integer; &egin
'riteln8H6igite o valor de nH9; readln8n9;
<oma :5 (; .or i :5 ) to n do
<oma :5 <oma K iIi;
'riteln8HA soma dos quadrados dos H, n, H primeiros numeros naturais eh H, <oma9; end.
"a F7rograma que calcula a soma dos n primeiros termos da sequencia 8(C), +C-, -C0, ...G program <oma<erie;
var n, Numerador, 6enominador, i : integer; <oma : real;
&egin
'rite8H6igite o numero de termos a serem somados: H9; readln8n9; <oma :5 (C); Numerador :5 (; 6enominador :5 ); .or i :5 ) to n do &egin Numerador :5 Numerador K ); 6enominador :5 6enominador K +;
<oma :5 <oma K NumeradorC6enominador; end;
'rite8HA soma dos H, n,H primeiros termos da sequencia 8(C), +C-, -C0, ...9 eh igual a H, <oma9; end.
"& Fprograma que calcula a soma dos n primeiros termos da sequencia 8(, ?(C), (C+, ?(C, ...G program <oma<erie;
var n, i : integer; <oma : real; &egin
'rite8H6igite o numero de termos a serem somados: H9; readln8n9; <oma :5 (; .or i :5 ) to n do &egin i. i mod ) 5 2 t0en
<oma :5 <oma ? (Ci else
<oma :5 <oma K (Ci; end;
'rite8HA soma dos H, n,H primeiros termos da sequencia 8(, ?(C), (C+, ?(C0,...9 eh igual a H, <oma9; end.
# F7rograma para determinar o minimo multiplo comum de dois numeros positivoG program inult=omum;
var a, b, $, D, mc : integer; &egin
'riteln8H6igite os dois numeros H9; readln8 $, D9; a :5 $; b :5 D; i. $ S D t0en &egin a :5 D; b :5 $; end; mc :5 a; '0ile mc mod b S 2 do mc :5 mc K a; 'riteln8Hmmc8H, $,H, H, D,H9 5 H, mc9; end.
$ F7rograma que determina os numeros perfeitos menores que um inteiro dadoG program Numeros7erfeitos;
var <oma, 6ivisor, n, i, " : integer; &egin
'rite8H6igite o valor de n: H9; readln8n9;
'riteln8HLs numeros perfeitos menores que H, n, H sao: H9; .or i :5 ) to n do
&egin
<oma :5 2;
.or " :5 ( to i div ) do i. i mod " 5 2 t0en <oma :5 <oma K "; i. <oma 5 i t0en 'rite8i,H H9; end; end.
% F7rograma que determina numeros com quatro algarismos com uma propriedade especialG program 7ropriedadePspecial;
var 6ezena, Jnidade, i : integer; &egin
'riteln8HNumeros da forma AB=6 tais que 8AB K B=9I8AB K B=9 5 AB=6 :H9; .or i :5 (222 to 1111 do &egin 6ezena :5 i div (22; Jnidade :5 i mod (22; i. -r86ezena K Jnidade9 5 i t0en 'rite8i, H H9; end; end.
) F7rograma que determina pares de numeros da forma AB e WX tais que ABIWX 5 BAIXWG program 7ropriedadePspecial;
var i, ", 3nvi, 3nv" : integer; &egin
'riteln8H7ares de numeros da forma AB e WX tais que ABIWX 5 BAIXWH9; .or i :5 (2 to 11 do
&egin
3nvi :5 8i mod (29I(2 K i div (2; .or " :5 (2 to 11 do &egin 3nv" :5 8" mod (29I (2 K " div (2; i. i I " 5 3nvi I 3nv" t0en 'riteln8i, H H,"9; end; end; end.
* F7rograma que determina o numero de algarismos de um numeroG program NumeroAlgarismos;
var Num, $, NumAlgarismos, i : integer; &egin
'riteln8H6igite um inteiroH9; readln8Num9; $ :5 Num; NumAlgarismos :5 (; '0ile $ 5 (2 do &egin NumAlgarismos :5 NumAlgarismos K (; $ :5 $ div (2; end;
'riteln8Num, H possui H, NumAlgarismos, H algarismosH9; end.
+ F7rograma que verifica se um inteiro eh produto de dois primosG program 7roduto6e7rimos;
var Num, >ator(, >ator), i : integer; *aiz : real; &egin 'riteln8H6igite um inteiroH9; readln8Num9; *aiz :5 -r(8Num9; >ator( :5 );
'0ile 8Num mod >ator( S 29 and 8>ator( S5 *aiz9 do >ator( :5 >ator( K (;
i. >ator( S5 *aiz t0en
&egin
>ator) :5 Num div >ator(; *aiz :5 -r(8>ator)9; i :5 );
'0ile 8>ator) mod i S 29 and 8i S5 *aiz9 do i :5 i K (;
i. i S5 *aiz t0en
'riteln8Num, H nao eh produto de dois primosH9 else
'riteln8Num, H eh o produto dos primos H, >ator(, H e H, >ator)9; end
else
'riteln8Num, H eh primoH9; end.
12F7rograma que determina a decomposicao em fatores primos de um inteiro G program 6ecomposicaoPm>atores7rimos;
var Num, $, >ator, ult : integer; &egin
'riteln8H6igite um inteiroH9; readln8Num9;
$ :5 Num;
'riteln8H6ecomposicao em fatores de H, Num,H:H9; >ator :5 );
&egin ult :5 2; '0ile $ mod >ator 5 2 do &egin ult :5 ult K (; $ :5 $ div >ator; end; i. ult 2 t0en
'riteln8H>ator: H, >ator, H ultiplicidade: H, ult9; >ator :5 >ator K (;
end; end.
11 F7rograma que transforma o computador numa urna eletronicaG program JrnaPletronica;
var Eoto, Alibaba, Alcapone, Brancos, Nulos : integer; =ont, =onf : c0ar;
=orrige : &oolean; &egin
=ont :5 H<H;
Alibaba :5 2; Alcapone :5 2; Brancos :5 2; Nulos :5 2; '0ile Jp=ase8=ont9 5 H<H do
&egin repeat
=orrige :5 false;
'riteln8H6igite seu votoH9; readln8Eoto9;
case Eoto o. 0+ : &egin
'riteln8HEoce votou em Alibaba. =onfirma seu voto 8<CN9YH9; readln8=onf9;
i. Jp=ase8=onf9 5 H<H t0en
&egin
Alibaba :5 Alibaba K (;
'riteln8HEoto confirmado& Lbrigado&H9; end
else
=orrige :5 true; end;
1+ : &egin
'riteln8HEoce votou em Alcapone. =onfirma seu voto 8<CN9YH9; readln8=onf9;
i. Jp=ase8=onf9 5 H<H t0en
&egin
Alcapone :5 Alcapone K (;
'riteln8HEoto confirmado& Lbrigado&H9; end
else
=orrige :5 true; end;
22 : &egin
'riteln8HEoce votou em branco. =onfirma seu voto 8<CN9YH9; readln8=onf9;
i. Jp=ase8=onf9 5 H<H t0en
&egin
Brancos :5 Brancos K (;
'riteln8HEoto confirmado& Lbrigado&H9; end else =orrige :5 true; end; else &egin
'riteln8HEoce anulou seu votou. =onfirma seu voto 8<CN9YH9; readln8=onf9;
t0en &egin
Nulos :5 Nulos K (;
'riteln8HEoto confirmado& Lbrigado&H9; end else =orrige :5 true; end; end; until =orrige 5 false;
'riteln8HNovo eleitor 8<CN9YH9; readln8=ont9;
end;
'riteln8H*esultado da eleicaoH9; 'riteln8H Alibaba: H, Alibaba9; 'riteln8H Alcapone: H, Alcapone9; 'riteln8H Brancos: H, Brancos9; 'riteln8H Nulos: H, Nulos9; 'riteln; 'riteln; 'rite8H=andidato eleito: H9; i. Alibaba Alcapone t0en 'riteln8HAlibabaH9 else i. Alibaba S Alcapone t0en 'riteln8HAlcaponeH9 else 'riteln8HPleicao empatadaH9; end.
1! F7rograma que determina o n?esimo termo da sequencia de >ibbonaci 8(, (, ), +, -, 0, ...9G program >ibbonaci;
var n, Anterior(, Anterior), 'ermo, i: integer; &egin
'riteln8H6igite o valor de nH9; readln8n9;
Anterior( :5 (; Anterior) :5 (; 'ermo :5 (; .or i :5 + to n do
&egin
'ermo :5 Anterior( K Anterior); Anterior( :5 Anterior);
Anterior) :5 'ermo; end;
'riteln8HL termo de ordem H, n,H da sequencia de >ibbonaci eh H, 'ermo9; end.
1" F7rograma que determina o troco otimo de uma compraG program 'rocoLtimo;
var 7agamento, $, =ompra, 'roco: real;
i, *eais, Nota, NumNotas, =entavos, oeda, Numoedas: integer; &egin
'riteln8H6igite o valor da compraH9; readln8=ompra9;
'riteln8H6igite o valor do pagamentoH9; readln87agamento9;
'roco :5 7agamento ? =ompra; i. 'roco 2
t0en &egin
'riteln8H'roco de *Z H, 'roco:2:), H assim distribuido: H9; F'ratamento da parte inteira do trocoG
*eais :5 (runc8'roco9; Nota :5 (22;
i :5 (;
'0ile *eais 2 do &egin
NumNotas :5 *eais div Nota; i. NumNotas 2
&egin
'riteln8H H, NumNotas, H notas de H, Nota, H reaisH9; *eais :5 *eais mod Nota;
end; i. i mod ) 5 (
t0en
Nota :5 Nota div ) else
Nota :5 Nota div -; i :5 i K (;
end;
Ftratamento dos centavosG 'roco :5 >rac8'roco9;
=entavos :5 (runc8(22 I 'roco9; oeda :5 -2;
'0ile =entavos 2 do &egin
Numoedas :5 =entavos div oeda; i. Numoedas 2
t0en &egin
'riteln8H H, Numoedas,H moedas de H, oeda, H =entavosH9; =entavos :5 =entavos mod moeda;
end;
i. oeda mod (2 5 2 t0en
oeda :5 oeda div ) else i. oeda 5 )-t0en oeda :5 (2 else oeda :5 (; end; end else i. 'roco 5 2 t0en 'riteln8HNao ha trocoH9 else 'riteln8H7agamento insuficienteH9; end.
1# F7rograma que determina o numero de termos da serie harmonica que devem ser somados para que a soma se"a maior que um real dadoG program <erieQarmonica; var i : integer; M, <oma : real; &egin 'riteln8H6igite o valor de MH9; readln8M9; <oma :5 (; i :5 (; '0ile <oma S5 M do &egin i :5 i K (;
<oma :5 <oma K (Ci; end;
'rite8HL numero minimo de termos da serie harmonica que devemH9; 'riteln8H ser somados para que a soma se"a maior que H, M, H e H, i9; end.
1$ F7rograma que e$ibe os subcon"untos, com tres elementos do con"unto F(, ), ..., n9, n dadoG program <ub=on"+; var n, i, ", M: integer; &egin 'riteln8H6igite o valor de nH9; readln8n9; i. n 5 + t0en &egin
'riteln8H<ubcon"untos, com tres elementos, do con"unto F(, ), ...,H,n,HGH9; .or i :5 ( to n ? ) do .or " :5 i K ( to n ? ( do .or M :5 " K ( to n do 'riteln8HFH,i, H, H, ", H, H, M, HGH9; end else
'riteln8HL valor de n deve ser maior que )H9; end.
1% F7rograma que e$ibe os pares de numeros amigos menores que um inteiro dadoG program NumerosAmigos;
var <omai, <omaM, 6ivisor, n, i, M, " : integer; &egin
'rite8H6igite o valor de n: H9; readln8n9;
'riteln8HLs numeros amigos menores que H, n, H sao: H9; .or i :5 ) to n do
&egin
<omai :5 2;
.or " :5 ( to i div ) do i. i mod " 5 2 t0en <omai :5 <omai K "; .or M :5 ) to i ? ( do &egin <omaM :5 2;
.or " :5 ( to M div ) do i. M mod " 5 2 t0en <omaM :5 <omaM K "; i. 8<omai 5 M9 and 8<omaM 5 i9 t0en 'riteln8i,H H,M9; end; end; end.
Capítulo $
1 F>uncao que retorna o M?ésimo digito de um inteiroG .unction 6igito[8n, M : integer9 : integer;
var p : integer;
F>uncao que retorna o numero de algarismos de um inteiro positivoG .unction NumAlgarismos8$ : integer9 : integer;
var NumAlg : integer; &egin NumAlg :5 (; '0ile $ 5 (2 do &egin NumAlg :5 NumAlg K (; $ :5 $ div (2; end; NumAlgarismos :5 NumAlg end; F=omandos da funcaoG &egin i. M S5 NumAlgarismos8n9 t0en &egin p :5 (runc8P$p8M I On8(2999; n :5 n mod p;
6igito[ :5 n div 8p div (29; end
else
6igito[ :5 2; end;
! F>uncao iterativa que calcula o fatorial impar de um inteiroG .unction >at3mpar8m : integer9 : longint;
i : integer; &egin f :5 (; i :5 (; '0ile i S5 m do &egin f :5 fIi; i :5 i K ); end; >at3mpar :5 f; end;
F>uncao recursiva para a determinacao do fatorial imparG .unction >at3mpar*ec8m : integer9 : longint;
&egin i. m 5 ( t0en >at3mpar*ec :5 ( else >at3mpar*ec :5 m I >at3mpar*ec8m ? )9; end;
" F>uncao que determina o fatorial primo de um numero primoG .unction >at7rimo8m : integer9 : longint;
var f : longint; i : integer;
F>uncao que verifica se um numero eh primoG .unction 7rimo8m : integer9 : &oolean; var i : integer;
*aiz : real; &egin
i :5 );
*aiz :5 -r(8m9;
'0ile 8m mod i S 29 and 8i S5 *aiz9 do i :5 i K (; i. i S5 *aiz t0en 7rimo :5 false else 7rimo :5 true; end; F=omandos da funcaoG &egin f :5 ); .or i :5 + to m do i. 7rimo8i9 t0en f :5 f I i; >at7rimo :5 f; end;
# F>uncao que determina a soma dos algarismos de um inteiroG .unction <omaAlgarismos8m : integer9 : integer;
var <oma : integer; &egin
<oma :5 2; '0ile m 2 do
&egin
<oma :5 <oma K m mod (2; m :5 m div (2;
end;
<omaAlgarismos :5 <oma; end;
$ F>uncao recursiva que retorna o n?esimo termo da sequencia de >ibbonaciG .unction >ibb*ec8n : integer9 : integer;
&egin
i. 8n 5 (9 or 8n 5 )9 t0en
>ibb*ec :5 ( else
end;
% F>uncao para inverter um numero inteiroG .unction 3nverteNumero8n : integer9 : longint; var i, NAlgarismos : integer;
3nvertido : longint;
F>uncao para determinar o numero de algarismos de um numero inteiroG .unction NumeroAlgarismos8n : integer9 : integer;
var NumAlgarismos: integer; &egin NumAlgarismos :5 (; '0ile n 5 (2 do &egin NumAlgarismos :5 NumAlgarismos K (; n :5 n div (2; end; NumeroAlgarismos :5 NumAlgarismos; end;
F>uncao para calcular potencias de dezG .unction 7otencia6e(28e : integer9 : longint; var 7ot : longint;
i : integer; &egin 7ot :5 (; .or i :5 ( to e do 7ot :5 7otI(2; 7otencia6e(2 :5 7ot; end;
F3nicio da funcao 3nverteNumeroG &egin
3nvertido :5 2;
NAlgarismos :5 NumeroAlgarismos8n9; .or i :5 NAlgarismos ? ( do'nto 2 do
&egin
3nvertido :5 3nvertido K 8n mod (29 I 7otencia6e(28i9; n :5 n div (2;
end;
3nverteNumero :5 3nvertido; end;
Capítulo %
1 F7rocedimento que e$ibe um vetor na ordem inversaG
procedure PscreveEetorNaLrdem3nversa8var v : 'Eetor; t : integer9; var i : integer;
&egin
.or i :5 t do'nto ( do 'rite8v\i],H H9; end;
! F>uncao que verifica se um vetor eh palindromoG
.unction 7alindromo8v : 'Eetor; t : integer9 : &oolean; var i : integer;
&egin i :5 (;
'0ile 8v\i] 5 v\t ? i K (]9 and 8i S5 t div )9 do i :5 i K (; i. i t div ) t0en 7alindromo :5 true else 7alindromo :5 false; end;
" F7rocedimento que intercala dois vetoresG
procedure 3ntercalaEetores8var v(, v), v :'Eetor; t : integer9 var i : integer;
&egin
.or i :5 ( to )3t do i. i mod ) 5 (
v\i] :5 v(\8iK(9 div )] else
v\i] :5 v)\i div )] end.
# F7rocedimento que decompoe um vetor de inteiro em dois vetores, um com as componentes impares e outro com as componentes paresG
procedure 6ecompoeEetor7ares3mpares8var v, v(, v) : 'Eetor; t : integer; var M, l : integer9; var i : integer; &egin M :5 2; l :5 2; .or i :5 ( to t do i. v\i] mod ) 5 ( t0en &egin M :5 M K (; v(\M] :5 v\i]; end else &egin l :5 l K (; v)\l] :5 v\i]; end; end;
$ F>uncao que determina a norma de um vetorG .unction Norma8var v : 'Eetor; t : integer9 : real; var i : integer;
<omaTuadrados : real; &egin
<omaTuadrados :5 2; .or i :5 ( to t do
<omaTuadrados :5 <omaTuadrados K -r8v\i]9; Norma :5 -r(8<omaTuadrados9;
end;
% F>uncao que determina o produto escalar de dois vetoresG .unction 7rodPscalar8var v(, v) : 'Eetor; t : integer9 : real; var i : integer; p : real; &egin p :5 2; .or i :5 ( to t do p :5 p K v(\i] I v)\i]; 7rodPscalar :5 p; end;
) F7rocedimento para e$trair as componentes distintas de um vetorG
procedure =omponentes6istintas8var v(, v : 'Eetor; t : integer; var n : integer9; var i, M : integer;
F>uncao que verifica se um valor dado esta armazenado num vetorG
.unction 7esquisa<equencial8var v : 'Eetor; t : integer; $ : real9 : &oolean; var " : integer; &egin 7esquisa<equencial :5 false; " :5 (; '0ile 8v\"] S $9 and 8" S t9 do " :5 " K (; i. v\"] 5 $ t0en 7esquisa<equencial :5 true; end; &egin n :5 (; v\(] :5 v(\(]; .or i :5 ) to t do i. not 7esquisa<equencial8v, t, v(\i]9 t0en &egin n :5 n K (; v\n] :5 v(\i];
end; end;
* F>uncao para sortear um numero a partir dos ultimos algarismos dos numeros sorteados pela Ooteria >ederalG .unction Numero7remiado8var v : 'Eetor9 : longint;
var i, 7otencia(2 : integer; Num : longint;
&egin
7otencia(2 :5 (2222;
Num :5 8v\-] mod (29 I 7otencia(2; .or i :5 do'nto ( do
&egin
7otencia(2 :5 7otencia(2 div (2;
Num :5 Num K 8v\i] mod (29 I 7otencia(2; end;
Numero7remiado :5 Num; end;
+ F7rocedimento para inserir um valor dado num vetor numa posicao dadaG
procedure 3nsere7osicao6ada8var v : 'Eetor; t : integer; $ : real; 7os : integer9; var i : integer; &egin i. 7os S5 t t0en &egin .or i :5 t do'nto 7os do v\i K (] :5 v\i]; v\7os] :5 $; end else
'riteln8HL sistema nao pode fazer a insercao solicitadaH9; end;
12 F7rocedimento para inserir um valor dado num vetor ordenado de modo que ele se mantenha ordenadoG procedure 3nsereLrdenado8var v : 'Eetor; t : integer; $ : real9;
var i, " : integer; &egin i :5 (; '0ile 8v\i] S $9 and 8i S5 t9 do i :5 i K (; .or " :5 t do'nto i do v\" K (] :5 v\"]; v\i] :5 $; end;
11 F7rocedimento que e$clui uma componente de um vetorG
procedure 6eleta=omponente8var v : 'Eetor; var t : integer; c : integer9; var i, ": integer;
&egin i. c t
t0en
'riteln8HNao e$iste componente de ordem H,c9 else &egin .or " :5 c to t do v\"] :5 v\" K (]; t :5 t ? (; end; end;
1! F7rocedimento para e$trair componentes comuns dois vetoresG
procedure =omp=omuns8var v(, v), v : 'Eetor; t(, t) : integer; var m : integer9; var M, l : integer;
F>uncao que verifica se um valor dado e componente de um vetorG
.unction 7esquisa<equencial8var v : 'Eetor; t : integer; $ : real9 : &oolean; var " : integer; &egin 7esquisa<equencial :5 false; " :5 (; '0ile 8v\"] S $9 and 8" S t9 do " :5 " K (; i. v\"] 5 $
t0en 7esquisa<equencial :5 true; end; &egin m :5 2; .or M :5 ( to t( do i. 7esquisa<equencial8v), t), v(\M]9 t0en &egin m :5 m K (; v\m] :5 v(\M]; end; end;
1" F7rocedimento que retorna a maior diferenca entre as componentes consecutivas de um vetor9 procedure aior6iferenca8 var v : 'Eetor; t : integer; var ai : real; var =omp : integer9; var 6iferencas : 'Eetor;
M : integer;
F>uncao que retorna a maior componente de um vetor e a sua posicao no vetorG .unction aiorPlemento8var v : 'Eetor; t : integer; var 7os : integer9 : real; var i : integer; aior : real; &egin aior :5 v\(]; 7os :5 (; .or i :5 ( to t do i. v\i] aior t0en &egin aior :5 v\i]; 7os :5 i; end; aiorPlemento :5 aior; end; &egin .or M :5 ( to t ? ( do 6iferencas\M] :5 v\M K (] ? v\M];
ai :5 aiorPlemento86iferencas, t ? (, =omp9; end;
1# F>uncao para corrigir um teste de multipla escolhaG
.unction =orrige'este8var v(, v) : 'Eetor; t : integer9: integer; var i, Num7ontos : integer;
&egin Num7ontos :5 2; .or i :5 ( to t do i. v(\i] 5 v)\i] t0en Num7ontos :5 Num7ontos K (; =orrige'este :5 Num7ontos; end;
1$ F7rograma para determinar o valor numerico de um polinomioG program EalorNumerico6e7olinomio;
t4pe '7olinomio 5 arra4\(..-2] o. real; var 7olinomio : '7olinomio;
Urau : integer; $, ENumerico : real;
F7rocedimento para armazenar os coeficientes de um polinomio num vetorG procedure Armazena7olinomio8var p : '7olinomio; var g : integer9; var i : integer;
&egin
'riteln8H6igite o grau do polinomioH9; readln8g9;
'riteln8H6igite os coeficientesH9; .or i :5 ( to g K ( do
readln8p\i]9; end;
F7rocedimento que e$ibe os coeficientes de um polinomioG procedure P$ibe=oeficientes8var v : '7olinomio; g : integer9; var i : integer;
.or i :5 ( to g K ( do 'rite8v\i]:2:), H H9; end;
F>uncao que calcula o valor numerico de um polinomioG
.unction EalorNumerico8var p : '7olinomio; g : integer; $ : real9 : real; var i : integer;
EalNum : real;
.unction 7otencia8b : real; e : integer9 : real; var i : integer; 7ot : real; &egin 7ot :5 (; .or i :5 ( to e do 7ot :5 7otIb; 7otencia :5 7ot end; &egin EalNum :5 p\g K (]; .or i :5 g do'nto ( do
EalNum :5 EalNum K p\i]I7otencia8$, g ? i K (9; EalorNumerico :5 EalNum;
end;
F7rograma principalG &egin
Armazena7olinomio87olinomio, Urau9;
'riteln8H6igite o valor da variavel independenteH9; readln8$9;
ENumerico :5 EalorNumerico87olinomio, Urau, $9;
'riteln8HL valor numerico do polinomio de grau H, Urau, H e coeficientes H9; P$ibe=oeficientes87olinomio, Urau9;
'riteln;
'riteln8Hpara $ 5 H, $:2:) , H eh igual a H, ENumerico:2:)9; end.
1% F>uncao para converter um numero do sistema decimal para o sistema binarioG .unction 6ecimalBinario8n : integer9 : longint;
var 6igBinarios : 'Eetor; Binario : longint; i, " : integer;
F>uncao para calcular potencias de dezG .unction 7otencia6e(28e : integer9 : longint; var 7ot : longint;
i : integer; &egin 7ot :5 (; .or i :5 ( to e do 7ot :5 7otI(2; 7otencia6e(2 :5 7ot; end; &egin i. n 5 2 t0en 6ecimalBinario :5 2 else &egin i :5 2; '0ile n 2 do &egin i :5 i K (; 6igBinarios\i] :5 n mod ); n :5 n div ); end; i :5 i ? (; Binario :5 7otencia6e(28i9; .or " :5 ( to i do
Binario :5 Binario K 6igBinarios\"] I 7otencia6e(28" ? (9; 6ecimalBinario :5 Binario;
end; end;
program 6ecomposicaoPm>atores7rimos; t4pe 'atriz 5 arra4\(..(+, (..)] o. integer; var Num, N>atores : integer;
6ecomp : 'atriz;
F7rocedimento para e$ibir uma matrizG
procedure P$ibeatriz8var m : 'atriz; l, c : integer9; var i, " : integer; &egin .or i :5 ( to l do &egin .or " :5 ( to c do 'rite8m\i, "],H H9; 'riteln; end; end;
F7rocedimento para armazenar numa matriz a decomposicao em fatores de um inteiroG procedure 6ecomp>atores8$ : integer; var m : 'atriz; var n : integer9;
var >ator, ult : integer; &egin n :5 2; >ator :5 ); '0ile $ ( do &egin ult :5 2; '0ile $ mod >ator 5 2 do &egin ult :5 ult K (; $ :5 $ div >ator; end; i. ult 2 t0en &egin n :5 n K (; m\n, (] :5 >ator; m\n, )] :5 ult; end; >ator :5 >ator K (; end; end; F7rograma principalG &egin 'riteln8H6igite um inteiroH9; readln8Num9;
'riteln8H6ecomposicao em fatores de H, Num,H:H9; 6ecomp>atores8Num, 6ecomp, N>atores9; P$ibeatriz86ecomp, N>atores, )9; end.
1* F7rograma que determina a media de um aluno da J>AOG program Avaliacao;
t4pe 'Eetor 5 arra4\(..] o. real; var Notas : 'Eetor;
edBimestral, 7rova>inal, ed>inal : real; F7rocedimento para armazenar as notasG procedure ArmazenaNotas8var v : 'Eetor9; var i : integer;
&egin
'riteln8H6igite as notas das avaliacoes bimestraisH9; .or i :5 ( to do
readln8v\i]9; end;
F>uncao para calcular a media das notas bimestraisG .unction edia8var v : 'Eetor9 : real;
var i : integer; <oma : real; &egin
<oma :5 2; .or i :5 ( to do
<oma :5 <oma K v\i]; edia :5 <omaC;
end;
F7rocedimento para determinar a menor nota bimestral e o bimestre em que isto ocorreuG procedure enorNota8var v : 'Eetor; var m : real; var b : integer9;
var i : integer; &egin m :5 v\(]; b :5 (; .or i :5 ) to do i. v\i] S m t0en &egin m :5 v\i]; b :5 i; end; end;
F7rocedimento para substituir a menor nota menor que / pela reavaliacaoG procedure *eavaliacao8var v : 'Eetor9;
var enNota, Nota*eav : real; Bim : integer;
*esp : c0ar; &egin
enorNota8Notas, enNota, Bim9; i. enNota S /
t0en &egin
'riteln8HL aluno fez reavaliacao 8<CN9YH9; readln8*esp9;
i. Jp=ase8*esp9 5 H<H t0en
&egin
'riteln8H6igite a nota da reavaliacaoH9; readln8Nota*eav9; v\Bim] :5 Nota*eav; end; end; end; F7rograma principalG &egin ArmazenaNotas8Notas9; *eavaliacao8Notas9; edBimestral :5 edia8Notas9; ed>inal :5 edBimestral; i. 8edBimestral S /9 and 8edBimestral 5 -9 t0en &egin
'riteln8H6igite a nota da prova finalH9; readln87rova>inal9;
ed>inal :5 8edBimestral I K 7rova>inal I 9C(2; end;
i. ed>inal 5 -.-t0en
'riteln8HAluno aprovado com media final igual a H, ed>inal:2:)9 else
'riteln8HAluno reprovado com media final igual a H, ed>inal:2:)9; end.
1+ F7rocedimento que retorna a transposta de uma matrizG
procedure 'ransposta8var at, 'ransp : 'atriz; m, n : integer9; var i, " : integer; &egin .or i :5 ( to m do .or " :5 ( to n do 'ransp\", i] :5 at\i, "]; end;
!2 F7rocedimento para permutar duas linhas de uma matrizG
procedure 7ermutaOinhas8var at : 'atriz; m, n, l, c : integer9; var i, " : integer;
Au$ : 'atriz; &egin
at\l] :5 at\c]; at\c] :5 Au$\(]; end;
!1 F>uncao que verifica se uma matriz quadrada e triangularG
.unction atriz'riangular8var at : 'atriz; n : integer9 : &oolean; var i, " : integer; 'riangular : &oolean; &egin 'riangular :5 true; i :5 (; '0ile 'riangular and 8i S5 n9 do &egin " :5 i K (; '0ile 'riangular and 8" S5 n9 do i. at\i, "] S 2 t0en 'riangular :5 false else " :5 " K (; i :5 i K (; end; atriz'riangular :5 'riangular; end;
!! F>uncao que verifica se uma matriz quadrada eh simetricaG
.unction atriz<imetrica8var at : 'atriz; n : integer9 : &oolean; var i, " : integer; <imetrica : &oolean; &egin <imetrica :5 true; i :5 (; '0ile <imetrica and 8i S5 n9 do &egin " :5 i K (; '0ile <imetrica and 8" S5 n9 do i. at\i, "] S at\", i] t0en <imetrica :5 false else " :5 " K (; i :5 i K (; end; atriz<imetrica :5 <imetrica; end;
!" F7rocedimento para multiplicar duas matrizesG
procedure ultiplicaatrizes8var at(, at), at : 'atriz; m(, n(, m), n) : integer9; var i, ", M : integer; &egin i. n( 5 m) t0en &egin .or i :5 ( to m( do .or " :5 ( to n) do &egin at\i, "] :5 2; .or M :5 ( to n( do
at\i, "] :5 at\i, "] K at(\i, M]Iat)\M, "]; end;
end else
'riteln8H7roduto nao definidoH9; end;
!# F7rograma para determinar os menores elementos de cada uma das linhas de uma matrizG program enoresPlementos;
t4pe 'atriz 5 arra4 \(..(2, (..(2] o. integer; var atriz: 'atriz;
NumOinhas, Num=olunas : integer;
procedure Armazena'abela8var at : 'atriz; m, n : integer9; var i, " : integer;
&egin
'riteln8H6igite, por linha, os elementos da matrizH9; .or i :5 ( to m do
.or " :5 ( to n do readln8at\i, "]9; end;
procedure P$ibe'abela8var at : 'atriz; m, n : integer9; var i, " : integer; &egin .or i :5 ( to m do &egin .or " :5 ( to n do 'rite8at\i, "],H H9; 'riteln; end; end;
procedure enorPlemento8var at : 'atriz; m, n : integer9; var i, ", =ol, enor : integer;
&egin .or i :5 ( to m do &egin enor :5 at\i, (]; =ol :5 (; .or " :5 ) to n do i. at\i, "] S enor t0en &egin enor :5 at\i, "]; =ol :5 "; end;
'riteln8H H, i,H H, enor, H H, =ol9; end;
end;
F7rograma principalG &egin
'riteln8H6igite a ordem da matrizH9; readln8NumOinhas, Num=olunas9;
Armazena'abela8atriz, NumOinhas, Num=olunas9; 'riteln8H'abelaH9;
P$ibe'abela8atriz, NumOinhas, Num=olunas9; 'riteln8HOinha enor Plemento =olunaH9; enorPlemento8atriz, NumOinhas, Num=olunas9; end.
!$ F7rograma para determinar escalas de viagens aereasG program PscalaEiagemAerea;
t4pe 'atriz 5 arra4\(..+2, (..+2] o. integer; var 6istancias : 'atriz;
Num=idades, Lrig, 6est, Pscal : integer;
F7rocedimento para armazenar as distancias entre as cidadesG procedure Armazena6istancias8var at : 'atriz; m : integer9; var i, " : integer;
&egin
'riteln8H6igite as distancias entre as cidadesH9; .or i :5 ( to m do .or " :5 i to m do i. i 5 " t0en at\i, "] :5 2 else &egin readln8at\i]\"]9; at\"]\i] :5 at\i]\"]; end; end;
F7rocedimento para e$ibir a tabela das distancias entre as cidadesG procedure P$ibe6istancias8var at : 'atriz; m : integer9; var i, " : integer;
&egin
.or i :5 ( to m do &egin .or " :5 ( to m do 'rite8at\i, "]:09; 'riteln; end; end;
F>uncao que determina a cidade onde deve ocorrer a escalaG
.unction Pscala8var at : 'atriz; m, Lrig, 6est : integer9 : integer; var i, ", enor, Psc : integer;
&egin
enor :5 at\Lrig, (] K at\(, 6est]; Psc :5 (;
.or i :5 ) to m do
i. 8at\Lrig, i] K at\i, 6est] S enor9 and 8i S Lrig9 and 8i S 6est9 t0en
&egin
enor :5 at\Lrig, i] K at\i, 6est]; Psc :5 i; end; Pscala :5 Psc; end; F7rograma principalG &egin
'riteln8H6igite o numero de cidadesH9; readln8Num=idades9;
Armazena6istancias86istancias, Num=idades9; P$ibe6istancias86istancias, Num=idades9; 'riteln8H6igite a origem e o destinoH9; readln8Lrig, 6est9; i. 6istancias\Lrig, 6est] 22 t0en &egin i. Lrig S 6est t0en
Pscal :5 Pscala86istancias, Num=idades, Lrig, 6est9 else
Pscal :5 Pscala86istancias, Num=idades, 6est, Lrig9; 'riteln8HPscala entre as cidades H, Lrig, H e H, 6est, H: H, Pscal9 end
else
i. 6istancias\Lrig, 6est] 5 2 t0en
'riteln8HLrigem e destino iguaisH9 else
'riteln8HA viagem entre as cidades H, Lrig, H e H, 6est, H deve ser feita sem escalaH9; end.
!% F7rocedimento que e$ibe as combina@es dos n%meros (, ), ..., n, tomadas M a M. L par4metro i controla o n%mero de comandos for e o par4metro s controla o limite inferior de cada um destes comandos. Ls par4metros i e s recebem argumentos iguais a ( 8um9
quando da ativaão da funão. G
procedure =omb8n, M, i, s : integer9; var m, " : integer; &egin i. i S5 M t0en &egin .or " :5 s to n ? M K i do &egin
v\i] :5 "; Fv deve ser uma vari#vel global do tipo vetorG s :5 " K (; =omb8n, M, i K (, s9; i. i 5 M t0en &egin .or m :5 ( to M do 'rite8v\m],H H9; 'riteln; end; end;
end; end;
Capítulo )
1 F7rograma para verificar se uma cadeia de caracteres é palindromoG program palindromo; var <t : string; i, =omp : integer; &egin 'riteln8H6igite a palavraH9; readln8<t9; =omp :5 5engt08<t9; i :5 (;
'0ile 8<t\i] 5 <t\=omp ? i K (]9 and 8i S5 =omp div )9 do i :5 i K (;
i. i =omp div ) t0en
'riteln8<t,H eh palindromoH9 else
'riteln8<t,H nao eh palindromoH9; end.
! F7rograma para determinar o n%mero de palavras de uma fraseG program =onta7alavras;
var >rase : string;
F>uncao para determinar a posicao da primeira letra de uma fraseG .unction 7rimeiraOetra8var s : string9: integer;
var i : integer; &egin i :5 (; '0ile s\i] 5 H H do i :5 i K (; 7rimeiraOetra :5 i; end;
F>uncao para determinar o numero de palavras de uma fraseG .unction =onta7alavras8var s : string9: integer;
var i, ", M, c : integer; &egin c :5 5engt08s9; i :5 7rimeiraOetra8s9; i. i c t0en " :5 2 else " :5 (; .or M :5 i to c do i. 8s\M] 5 H H9 and 8s\M?(] S H H9 t0en " :5 " K (; =onta7alavras :5 "; end; Fprograma principalG &egin
'rite8H6igite a frase: H9; readln8>rase9;
'riteln8HN%mero de palavras: H, =onta7alavras8>rase99; end.
" F>uncao que converte um inteiro do sistema decimal para o sistema binario, tratando o numero do sistema binario como uma stringG
.unction 6ecimalBinario8n : integer9 : string; var s, Binario : string;
i, " : integer; &egin i :5 2; i. n 5 2 t0en 6ecimalBinario :5 H2H else &egin Binario :5 HH; '0ile n 2 do &egin
i :5 i K (; tr8n mod ), s9; n :5 n div ); Binario :5 s K Binario; end; 6ecimalBinario :5 Binario; end; end;
# F7rograma para converter o numero do sistema binario, dado como uma string, para o sistema decimalG program =onverteBinarioPm6ecimal;
var 6ecimal : integer; Binario : string; ", c, n, r : integer;
F>uncao que calcula potencias de )G
.unction potencia6e)8e : integer9 : integer; var p, i : integer; &egin p :5 (; .or i :5 ( to e do p :5 )Ip; potencia6e) :5 p; end; F7rograma principalG &egin
'riteln8H6igite o numero do sistema bin#rio H9; readln8Binario9; c :5 5engt08Binario9; 6ecimal :5 2; .or " :5 ( to c do &egin 6al8Binario\"], n, r9;
6ecimal :5 6ecimal K nIpotencia6e)8c ? "9; end;
'riteln8Binario, H no sistema decimal: H, 6ecimal9; end.
$ F>uncao para verificar se uma conta dada nao foi digitada incorretamenteG .unction Eerifica=onta8 s : string9 : &oolean;
t4pe 'Eetor 5 arra4\(..)2] o. &4te; var c : integer;
6igito : string;
F7rocedimento para armazenar os digitos da contaG
procedure Armazena6igitos8var s : string; var d : 'Eetor; t : integer9; var ", r : integer;
&egin
.or " :5 ( to t do 6al8s\"], d\"], r9; end;
F>uncao para determinar o digito verificadorG Function 6igitoEerificador8s : string9 : integer; var i, =omp, <oma, 6v : integer;
6igitos : 'Eetor; &egin
=omp :5 5engt08s9 ? (;
Armazena6igitos8s, 6igitos, =omp9; <oma :5 2;
.or i :5 =omp do'nto ( do
<oma :5 <oma K 6igitos\i]I8=omp ? i K ) 9; 6v :5 (( ? <oma mod ((; i. 86v 5 (29 or 86v 5 ((9 t0en 6v :5 2; 6igitoEerificador :5 6v; end;
F3nicio da funcao Eerifica=ontaG &egin
c :5 5engt08s9;
tr86igitoEerificador8s9, 6igito9; i. s\c] 5 6igito\(]
Eerifica=onta :5 true else
Eerifica=onta :5 false; end;
% F>uncao para determinacao do digito verificador de codigos de barraG .unction 6igitoEerificador8 s : string9 : integer;
t4pe 'Eetor 5 arra4\(..)2] o. &4te; var i, =omp, <oma, 6v : integer;
6igitos : 'Eetor;
F7rocedimento para armazenar os digitos da contaG
procedure Armazena6igitos8var s : string; var d : 'Eetor; t : integer9; var ", r : integer;
&egin
.or " :5 ( to t do 6al8s\"], d\"], r9; end;
F3nicio da funcao 6igitoEerificadorG &egin
=omp :5 5engt08s9;
Armazena6igitos8s, 6igitos, =omp9; <oma :5 2;
.or i :5 ( to =omp do i. i mod ) 5 (
t0en
<oma :5 <oma K 6igitos\i] else
<oma :5 <oma K +I6igitos\i]; 6v :5 <oma mod (2; i. 6v S 2 t0en 6v :5 (2 ? 6v; 6igitoEerificador :5 6v; end;
) F7rograma para converter um nome proprio no formato Jltimo <obrenomeCNomeG program >ormato7assagemAerea;
var Nome, 3dentificacao : string;
F>uncao que retorna a primeira palavra de um te$toG .unction 7rim7alavra8s : string9 : string;
var i, c : integer; 7rim7al : string; &egin c :5 5engt08s9; 7rim7al :5 HH; i :5 (; '0ile 8s\i] S H H9 and 8i S5 c9 do &egin
7rim7al :5 7rim7al K s\i]; i :5 i K (;
end;
7rim7alavra :5 7rim7al; end;
F>uncao que retorna a ultima palavra de um te$toG .unction Jlt7alavra8s : string9 : string;
var i, c : integer; Jlt7al : string; &egin c :5 5engt08s9; Jlt7al :5 HH; i :5 c; '0ile 8s\i] S H H9 and 8i 29 do &egin
Jlt7al :5 s\i] K Jlt7al; i :5 i ? (; end; Jlt7alavra :5 Jlt7al; end; F7rograma principalG &egin
readln8Nome9;
3dentificacao :5 Jlt7alavra8Nome9 K HCH K 7rim7alavra8Nome9; 'riteln83dentificacao9;
end.
* F7rograma para converter um nome proprio para o formato de referencia bibliograficaG program *eferenciaBibliografica
var Nome, *eferencia : string;
F>uncao que retorna uma palavra de um te$to a partir de uma posicao dadaG .unction 7alavra8s : string; p : integer9 : string;
var c : integer; 7al : string; &egin c :5 5engt08s9; 7al :5 HH; '0ile 8s\p] S H H9 and 8p S5 c9 do &egin 7al :5 7al K s\p]; p :5 p K (; end; 7alavra :5 7al; end;
F>uncao para deteccao de particulas de, do, dos, da, das, eG .unction 7articula8s : string; i : integer9 : &oolean;
var p : string; &egin
7articula :5 false; p :5 7alavra8s, i K (9;
i. 8p 5 HeH9 or 8p 5 HdeH9 or 8p 5 HdoH9 or 8p 5 HdaH9 or 8p 5 HdasH9 or 8p 5 HdosH9 t0en
7articula :5 true; end;
F>uncao que retorna as iniciais dos nomes e sobrenomesG .unction 7rimOetras8s : string9 : string;
var i, c : integer; 7rimOet : string; &egin c :5 5engt08s9; 7rimOet :5 s\(]; .or i :5 ) to c do
i. 8s\i] 5 H H9 and 8s\i K (] S H H9 and 8not 7articula8s, i99 t0en
7rimOet :5 7rimOet K H. H K s\i K (]; c :5 5engt087rimOet9;
7elete87rimOet, c ? (, )9; 7rimOetras :5 7rimOet; end;
F>uncao que retorna a ultima palavra de um te$toG .unction Jlt7alavra8s : string9 : string;
var i, c : integer; Jlt7al : string; &egin c :5 5engt08s9; Jlt7al :5 HH; i :5 c; '0ile 8s\i] S H H9 and 8i 29 do &egin
Jlt7al :5 s\i] K Jlt7al; i :5 i ? (; end; Jlt7alavra :5 Jlt7al; end; F7rograma principalG &egin
'riteln8H6igite o nome do autorH9; readln8Nome9;
*eferencia :5 Jlt7alavra8Nome9 K H, H K 7rimOetras8Nome9; 'riteln8*eferencia9;
Capítulo *
! F7rograma para reunir dois arquivosG t4pe '*egistro 5 record
at : string\(2]; Nome : string\2]; end;
'Arquivo 5 .ile o. '*egistro; var a, a(, a) : 'Arquivo;
*eg : '*egistro;
Narq(, Narq), Narq : string\()];
F>uncao que verifica a e$istencia e um arquivoG .unction P$isteArquivo8var f : 'Arquivo9: &oolean; &egin FZ3?G Reset8f9; i. I8Result 5 2 t0en P$isteArquivo :5 true else P$isteArquivo :5 false; FZ3KG end;
F>uncao que verifica se uma matricula "# esta cadastradaG
.unction =onsulta8var f : 'Arquivo; at : string9 : integer; var r : '*egistro;
&egin
Reset8f9; read8f, r9;
'0ile 8not Eo. 8f99 and 8r.at S at9 do read8f, r9; i. r.at 5 at t0en =onsulta :5 FilePos8f9 V ( else =onsulta :5 ?(; end;
F7rocedimento que reune dois arquivosG procedure *eunArq8var f(, f), f : 'Arquivo9; var r : '*egistro;
&egin
Reset8f(9; Re'rite8f9;
'0ile not Eo. 8f(9 do &egin
read8f(, r9; 'rite8f, r9; end;
Reset8f)9;
'0ile not Eo. 8f)9 do &egin read8f), r9; i. =onsulta8f, r.at9 5 ?( t0en 'rite8f, r9; end; Close8f(9; Close8f)9; Close8f9; end; F7rograma principalG &egin
'riteln8H6igite os nomes dos arquivos a serem reunidosH9; readln8Narq(9; readln8Narq)9; Assign8a(, Narq(9; i. P$isteArquivo8a(9 t0en &egin Assign8a), Narq)9; i. P$isteArquivo8a)9 t0en
&egin
'riteln8H6igite o nome do novo arquivoH9; readln8Narq9;
Assign8a, Narq9; i. not P$isteArquivo8a9
t0en
*eunArq8a(, a), a9; else
'riteln8HArquivo H, Narq, H "a e$isteH9; end
else
'riteln8HArquivo H, Narq), H nao e$isteH9; end
else
'riteln8HArquivo H, Narq(, H nao e $isteH9; end.
" F7rograma para gerar um arquivo com salarios maiores que -222G t4pe '*egistro 5 record
at : string\(2]; <alario : real; end;
'Arquivo 5 .ile o. '*egistro; var Arq, Arq( : 'Arquivo;
NomeArquivo(, NomeArquivo : string\()];
procedure Altos<alarios8var f(, f : 'Arquivo9; var r : '*egistro;
&egin
Reset8f(9; Re'rite8f9;
'0ile not Eo. 8f(9 do &egin read8f(, r9; i. r.<alario -222 t0en 'rite8f, r9; end; end; F7rograma principalG &egin
'riteln8H6igite o nome do arquivo a ser pesquisadoH9; readln8NomeArquivo(9;
Assign8Arq(, NomeArquivo(9;
'riteln8H6igite o nome do novo arquivoH9; readln8NomeArquivo9;
Assign8Arq, NomeArquivo9; Altos<alarios8Arq(, Arq9; end.
# F7rocedimento para inclusao de registros num arquivo ordenado, utilizando um arquivo au$iliarG procedure 3nclui*egistroLrdenadoEersao(8var f : 'Arquivo; r : '*egistro9;
var Au$ : 'Arquivo; *eg : '*egistro; &egin Reset8f9; Assign8Au$, H'empH9; Re'rite8Au$9; read8f, *eg9;
'0ile 8r.at *eg.at9 and not Eo. 8f9 do &egin 'rite8Au$, *eg9; read8f, *eg9; end; i. Eo. 8f9 t0en 'rite8Au$, *eg9 else ee9 8f, FilePos8f9 ? (9; 'rite8Au$, r9;
'0ile not Eo. 8f9 do &egin
read8f, *eg9; 'rite8Au$, *eg9; end; Close8f9; Close8Au$9; Erase8f9; Rename8Au$, NomeArquivo9; end;
F7rocedimento para inclusoes de registros num arquivo ordenado, sem a utilizacao de um arquivo au$iliarG procedure 3nclui*egistroLrdenadoEersao)8var f : 'Arquivo; r : '*egistro9;
var *eg : '*egistro; i, p, t : integer; &egin
Reset8f9; read8f, *eg9;
'0ile 8r.at *eg.at9 and not Eo. 8f9 do read8f, *eg9; i. Eo. 8f9 t0en 'rite8f, *eg9 else &egin p :5 FilePos8f9 ? (; t :5 Filei:e8f9; .or i :5 t do'nto p do &egin read8f, *eg9; 'rite8f, *eg9; ee9 8f, FilePos8f9 ? )9; end; end; ee9 8f, p9; 'rite8f, r9; Close8f9; end;
$ F7rocedimento para inserir um arquivo ordenado em outro arquivo ordenadoG procedure 3nsereLrdenado8var f(, f) : 'Arquivo9;
var r : '*egistro;
F7rocedimento para incluir um registro num arquivo ordenadoG procedure 3nclui*egistroLrdenado8var f : 'Arquivo; r : '*egistro9; var Au$ : 'Arquivo;
*eg : '*egistro; &egin
Reset8f9;
Assign8Au$, H'empH9; Re'rite8Au$9; read8f, *eg9;
'0ile 8r.atr *eg.atr9 and not Eo. 8f9 do &egin 'rite8Au$, *eg9; read8f, *eg9; end; i. Eo. 8f9 t0en 'rite8Au$, *eg9 else ee9 8f, FilePos8f9 ? (9; 'rite8Au$, r9;
'0ile not Eo. 8f9 do &egin read8f, *eg9; 'rite8Au$, *eg9; end; Close8f9; Close8Au$9; Erase8f9; Rename8Au$, NomeArquivo9; end;
F=omandos do procedimento 3nsereLrdenadoG &egin
Reset8f(9; Reset8f)9;
'0ile not Eo. 8f(9 do &egin
read8f(, r9;
3nclui*egistroLrdenado8f), r9; end;
end;
% F7rocedimento para ^cruzamento^ de dois arquivosG procedure *egistros=omuns8var f(, f), f : 'Arquivo9; var r : '*egistro; n : integer; &egin Reset8f(9; Reset8f)9; Re'rite8f9;
'0ile not Eo. 8f(9 do &egin read8f(, r9; n :5 =onsulta8f), r.atr9; i. =onsulta8f), r.atr9 S ?( t0en 'rite8f, r9; end; end;
) F7rocedimento que permuta os conte%dos de dois registros de um arquivo, dados pelos valores do campo atG procedure 'roca*egistro8var f : 'Arquivo; at(, at) : string9;
var *eg(, *eg) : '*egistro; n(, n) : integer; &egin Reset8f9; n( :5 =onsulta8f, at(9; n) :5 =onsulta8f, at)9; ee9 8f, n(9; read8f, *eg(9; ee9 8f, n)9; read8f, *eg)9; ee9 8f, n(9; 'rite8f, *eg)9; ee9 8f, n)9; 'rite8f, *eg(9; end;
* F7rograma que e$clui os comentarios de um programa em 7ascalG program P$clui=omentario;
var Arq : te$t;
NomeArquivo : string; procedure P$clui=omentarios8var f : te$t9; var s : string; Au$ : te$t; c : c0ar; &egin Reset8f9; Assign8Au$, H'empH9; Re'rite8Au$9; '0ile not Eo. 8f9 do
&egin read8f, c9; i. c S HFH t0en 'rite8Au$, c9 else &egin read8f, c9; i. c S HZH t0en '0ile c S HGH do read8f, c9 else
&egin 'rite8Au$, HFH9; 'rite8Au$, c9; read8f, c9; '0ile c S HGH do &egin 'rite8Au$,c9; read8f, c9; end; 'rite8Au$, HGH9; end; end; end; Close8f9; Close8Au$9; Erase8f9; Rename8Au$, NomeArquivo9; end; F7rograma principalG &egin
'riteln8H6igite o nome do arquivoH9; readln8NomeArquivo9;
Assign8Arq, NomeArquivo9; P$clui=omentarios8Arq9; end.
Capítulo +
1 F>uncao que realiza busca no inicio e no fim de um vetor, sucessivamenteG .unction 7esquisa7essimista8var v : 'Eetor; t : integer; $ : real9 : integer; var " : integer;
&egin
7esquisa7essimista :5 ?(; " :5 (;
'0ile 8v\"] S $9 and 8v\t?"K(] S $9 and 8" S5 t div )9 do " :5 " K (; i. v\"] 5 $ t0en 7esquisa7essimista :5 " else i. v\t?"K(] 5 $ t0en 7esquisa7essimista :5 t?"K(; end;
! F7rocedimento que implementa uma versao do <elect<ortG procedure <elect<ort(8var v : 'Eetor; t : integer9; var i, " : integer;
F7rocedimento para permutar os conte%dos de duas vari#veisG procedure 'roca8var $, D : integer9; &egin $ :5 $ K D; D :5 $ ? D; $ :5 $ ? D; end;
\>uncao que retorna o indice da componente de maior valor de um vetorG .unction 3ndice6oaiorPlemento8var v : 'Eetor; t : integer9 : integer; var i, M, aior : integer;
&egin M :5 (; aior :5 v\(]; .or i :5 ) to t do i. 8v\i] aior9 t0en &egin aior :5 v\i]; M :5 i; end; 3ndice6oaiorPlemento :5 M; end; F=omandos do <elect<ortG