Você está na página 1de 36

Programando

com Pascal
Respostas dos
Exerccios Propostos
Jaime Evaristo
Instituto de Computao
Universidade Federal de Alagoas
Captulo 1
1 Naturalmente, na primeira travessia, um ndio levaria um branco at a outra margem e voltaria sozinho. A questo a segunda: no
poderia atravessar um ndio e um branco, pois, ao chegar na outra margem, haveria dois brancos e um ndio; no poderiam atravessar
dois ndio, pois o terceiro ficaria com dois brancos. A soluo atravessar dois brancos e um deles retornar. A terceira travessia s!
pode ser feita por dois ndios, pois "# e$istem dois brancos na outra margem. A questo o retorno. A %nica possibilidade retornar
um ndio e um branco& 'emos ento o seguinte algoritmo:
(. Atravessem um ndio e um branco.
). *etorne o ndio.
+. Atravessem dois brancos.
,. *etorne um branco.
-. Atravessem dois ndios.
.. *etornem um ndio e um branco.
/. Atravessem dois ndios.
0. *etorne um branco.
1. Atravessem dois brancos.
(2. *etorne um branco.
((. Atravessem dois brancos.
! 3ndicando por (, ), +, ,, ... os discos na ordem crescente dos seus di4metros, temos para o caso n 5 ):
(. 6isco ( da origem para auxiliar.
). 6isco ) da origem para o destino.
+. 6isco ( da auxiliar para o destino.
7ara o caso n 5 +, basta observar que necess#rio apenas transportar os dois discos ( e ) da origem para auxiliar 8que o caso
anterior9, transportar o disco + da origem para o destino e os discos ( e ) da torre auxiliar para o destino 8que , novamente, o caso
anterior9.
(. 6isco ( da origem para destino.
). 6isco ) da origem para auxiliar.
+. 6isco ( do destino para auxiliar.
,. 6isco + da origem para destino.
-. 6isco ( da auxiliar para origem.
.. 6isco ) da auxiliar para o destino.
/. 6isco ( da origem para o destino.
" 7ara facilitar a linguagem, indiquemos por 78m, n9 5 2 se as esferas m e n t:m o mesmo peso e por 78m, n9 ; 2 se a esfera m pesa
mais que a esfera n. 'emos ento a seguinte soluo:
(. 7ese as esferas ( e ).
). <e 78(, )9 5 2, pese as esferas ( e +.
).( <e 78(, +9 ; 2 ento fornea como resposta: a esfera + tem peso menor que as esferas ( e ).
).) <e 78+, (9 ; 2 ento fornea como resposta: a esfera + tem peso maior que as esferas ( e ).
+. <e 78(, )9 ; 2, pese as esferas ( e +.
+.( <e 78(, +9 5 2 ento fornea como resposta: a esfera ) tem peso menor que as esferas ( e +.
+.) <e 78(, +9 ; 2 ento fornea como resposta: a esfera ( tem peso maior que as esferas ) e +.
+.+ <e 78+, (9 ; 2 ento fornea como resposta: a esfera ( tem peso menor que as esferas ) e +.
,. <e 78), (9 ; 2, pese as esferas ) e +.
,.( <e 78), +9 5 2 ento fornea como resposta: a esfera ( tem peso menor que as esferas ) e +.
,.) <e 78), +9 ; 2 ento fornea como resposta: a esfera ) tem peso maior que as esferas ( e +.
,.+ <e 78+, )9 ; 2 ento 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 relao e, para cada novo
elemento, vai tendo o seu valor substitudo pelo produto do seu valor atual pelo novo elemento.
(. =hame de A o primeiro n%mero dado.
). =hame de N o n%mero de elementos da relao
+. >aa 7 5 A.
,. *epita N ? ( vezes as instru@es ,.( e ,.).
,.(. =hame de A o pr!$imo n%mero dado.
,.). <ubstitua o valor de 7 por 7 $ A.
-. =alcule A 5 *aiz87, N9
.. >ornea A para o valor da mdia.
$ 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 uma
segunda?feira, o foram tambm os dias 20C2(C(122, (-C2(C(122, ))C2(C(122, )1C2(C(122, 2-C2)C(122 e assim sucessivamente. Basta
ento determinar o n%mero de dias decorridos entre a data dada e o dia 2(C2(C(122 e calcular o resto da diviso por /.
(. 6etermine o n%mero n de dias entre a data dada e 2(C2(C(122.
). =alcule o resto r da diviso de n por /
+. <e r 5 ( fornea como resposta segunda?feira.
,. <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 $, teramos:
(. A8baterista, bai$ista9.
). E8baterista9.
+. A8guitarrista, vocal9.
,. E8bai$ista9
-. A8bai$ista, baterista9
Captulo !
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 AenorAultiplo;
var n, M, AenorAult : integer;
&egin
'riteln8H6igite dois inteiros H9;
readln8n, M9;
AenorAult :5 n ? n mod M K M;
'riteln8HL menor multiplo de H, M, H maior queH, n, H N H, AenorAult9;
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;
'riteln8H6igite o raio da circunferenciaH9;
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, Ainutos, <egundos : integer;
&egin
'riteln8H6igite o intervalo de tempoH9;
readln83ntervalo9;
Qoras :5 3ntervalo div +.22;
*esto :5 3ntervalo mod +.22;
Ainutos :5 *esto div .2;
<egundos :5 *esto mod .2;
'riteln8HL intervalo de tempo H, 3ntervalo, H s equivale a H9;
'riteln8Qoras, H h H, Ainutos, 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, Ainutos : integer;
3ntervalo, <egundos, *esto : real;
&egin
'riteln8H6igite o intervalo de tempoH9;
readln83ntervalo9;
Qoras :5 (runc83ntervalo9 div .2;
*esto :5 3ntervalo ? Qoras I .2;
Ainutos :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, Ainutos, 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 reaisH9;
'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.
Captulo "
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 1-r(8$9;
i. >rac8*aiz9 5 2
t0en
'riteln8$, H eh quadrado perfeito de raiz quadrada igual a H, *aiz:2:29
else
'riteln8$, H nao eh quadrado perfeitoH9;
end.
" Fprograma que determina o maior de tres numeros dadosG
program Aaior6e+;
var $, D, z, Aaior : real;
&egin
'riteln8H6igite s tres numerosH9;
readln8$, D , z9;
Aaior :5 $;
i. 8D ; Aaior9 or 8z ; Aaior9
t0en
i. D ; z
t0en
Aaior :5 D
else
Aaior :5 z;
'riteln8HL maior dos numeros H, $:2:), H, H, D:2:), H e H,z:2:) , H eh igual a H, Aaior: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. 1-r8Qip9 5 1-r8=at(9 K 1-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 1-r8b9 ? ,IaIc;
7arte*eal :5 ?bC8)Ia9;
7arte3mag :5 1-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 3dadePmAnosAeses6ias;
var 6iaNasc, AesNasc, AnoNasc, d, 6iaAt, AesAt, AnoAt, Anos, 6ias, Aeses: integer;
&egin
'riteln8H6igite a data de nascimentoH9;
readln86iaNasc, AesNasc, AnoNasc9;
'riteln8H6igite a data atualH9;
readln86iaAt, AesAt, AnoAt9;
Anos :5 AnoAt ? AnoNasc;
Aeses :5 AesAt ? Aesnasc;
6ias :5 6iaAt ? 6iaNasc;
i. 8Anos S 29 or 88Anos 5 29 and 8Aeses S 299 or 88Anos 5 29 and 8Aeses 5 29 and 86ias S 299
t0en
'riteln8H6ata de nascimento invalidaH9
else
&egin
i. Aeses S 2
t0en
&egin
Anos :5 Anos K (;
Aeses :5 Aeses K ();
end;
i. 6ias S 2
t0en
&egin
i. Aeses ; 2
t0en
Aeses :5 Aeses V (
else
&egin
Anos :5 Anos ? (;
Aeses :5 ((;
end;
case AesNasc 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, Aesnasc,HCH, AnoNasc, H tem na data de H, 6iaAt,HCH, AesAt,HCH,
AnoAt,H H, Anos, H anos H, Aeses, H meses H, 6ias, H diasH9;
end;
end.
* F7rograma que determina a nota mnima de aprovacaoG
program NotaAinima;
var Av(, Av), Av+, Av,, AedBimestral, NotaAin : real;
&egin
'riteln8H6igite as notas das avaliacoes bimestraisH9;
readln8Av(, Av), Av+, Av,9;
AedBimestral :5 8Av( K Av) K Av+ K Av,9C,;
i. 8AedBimestral S /9 and 8AedBimestral ;5 -9
t0en
&egin
NotaAin :5 8-- ? . I AedBimestral9C,;
'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, NotaAin: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.
Captulo #
1 A configurao da tela ap!s a e$ecuo 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 AinAult=omum;
var a, b, $, D, Amc : 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;
Amc :5 a;
'0ile Amc mod b S; 2 do
Amc :5 Amc K a;
'riteln8Hmmc8H, $,H, H, D,H9 5 H, Amc9;
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. 1-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 1-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 1-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, Ault : integer;
&egin
'riteln8H6igite um inteiroH9;
readln8Num9;
$ :5 Num;
'riteln8H6ecomposicao em fatores de H, Num,H:H9;
>ator :5 );
'0ile $ ; ( do
&egin
Ault :5 2;
'0ile $ mod >ator 5 2 do
&egin
Ault :5 Ault K (;
$ :5 $ div >ator;
end;
i. Ault ; 2
t0en
'riteln8H>ator: H, >ator, H Aultiplicidade: H, Ault9;
>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;
i. Jp=ase8=onf9 5 H<H
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, Aoeda, NumAoedas: 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
t0en
&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;
Aoeda :5 -2;
'0ile =entavos ; 2 do
&egin
NumAoedas :5 =entavos div Aoeda;
i. NumAoedas ; 2
t0en
&egin
'riteln8H H, NumAoedas,H moedas de H, Aoeda, H =entavosH9;
=entavos :5 =entavos mod moeda;
end;
i. Aoeda mod (2 5 2
t0en
Aoeda :5 Aoeda div )
else
i. Aoeda 5 )-
t0en
Aoeda :5 (2
else
Aoeda :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.
Captulo $
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;
var f : 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 1-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
>ibb*ec :5 >ibb*ec8n ? (9 K >ibb*ec8n ? )9
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;
Captulo %
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 (
t0en
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 1-r8v\i]9;
Norma :5 1-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 Aaior6iferenca8 var v : 'Eetor; t : integer; var Aai : 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 AaiorPlemento8var v : 'Eetor; t : integer; var 7os : integer9 : real;
var i : integer;
Aaior : real;
&egin
Aaior :5 v\(]; 7os :5 (;
.or i :5 ( to t do
i. v\i] ; Aaior
t0en
&egin
Aaior :5 v\i];
7os :5 i;
end;
AaiorPlemento :5 Aaior;
end;
&egin
.or M :5 ( to t ? ( do
6iferencas\M] :5 v\M K (] ? v\M];
Aai :5 AaiorPlemento86iferencas, 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;
&egin
.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;
1) F7rograma que determina a decomposicao em fatores primos de um inteiroG
program 6ecomposicaoPm>atores7rimos;
t4pe 'Aatriz 5 arra4\(..(+, (..)] o. integer;
var Num, N>atores : integer;
6ecomp : 'Aatriz;
F7rocedimento para e$ibir uma matrizG
procedure P$ibeAatriz8var m : 'Aatriz; 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 : 'Aatriz; var n : integer9;
var >ator, Ault : integer;
&egin
n :5 2;
>ator :5 );
'0ile $ ; ( do
&egin
Ault :5 2;
'0ile $ mod >ator 5 2 do
&egin
Ault :5 Ault K (;
$ :5 $ div >ator;
end;
i. Ault ; 2
t0en
&egin
n :5 n K (;
m\n, (] :5 >ator;
m\n, )] :5 Ault;
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$ibeAatriz86ecomp, 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;
AedBimestral, 7rova>inal, Aed>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 Aedia8var v : 'Eetor9 : real;
var i : integer;
<oma : real;
&egin
<oma :5 2;
.or i :5 ( to , do
<oma :5 <oma K v\i];
Aedia :5 <omaC,;
end;
F7rocedimento para determinar a menor nota bimestral e o bimestre em que isto ocorreuG
procedure AenorNota8var 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 AenNota, Nota*eav : real;
Bim : integer;
*esp : c0ar;
&egin
AenorNota8Notas, AenNota, Bim9;
i. AenNota 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;
AedBimestral :5 Aedia8Notas9;
Aed>inal :5 AedBimestral;
i. 8AedBimestral S /9 and 8AedBimestral ;5 -9
t0en
&egin
'riteln8H6igite a nota da prova finalH9;
readln87rova>inal9;
Aed>inal :5 8AedBimestral I . K 7rova>inal I ,9C(2;
end;
i. Aed>inal ;5 -.-
t0en
'riteln8HAluno aprovado com media final igual a H, Aed>inal:2:)9
else
'riteln8HAluno reprovado com media final igual a H, Aed>inal:2:)9;
end.
1+ F7rocedimento que retorna a transposta de uma matrizG
procedure 'ransposta8var Aat, 'ransp : 'Aatriz; m, n : integer9;
var i, " : integer;
&egin
.or i :5 ( to m do
.or " :5 ( to n do
'ransp\", i] :5 Aat\i, "];
end;
!2 F7rocedimento para permutar duas linhas de uma matrizG
procedure 7ermutaOinhas8var Aat : 'Aatriz; m, n, l, c : integer9;
var i, " : integer;
Au$ : 'Aatriz;
&egin
Au$\(] :5 Aat\l];
Aat\l] :5 Aat\c];
Aat\c] :5 Au$\(];
end;
!1 F>uncao que verifica se uma matriz quadrada e triangularG
.unction Aatriz'riangular8var Aat : 'Aatriz; 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. Aat\i, "] S; 2
t0en
'riangular :5 false
else
" :5 " K (;
i :5 i K (;
end;
Aatriz'riangular :5 'riangular;
end;
!! F>uncao que verifica se uma matriz quadrada eh simetricaG
.unction Aatriz<imetrica8var Aat : 'Aatriz; 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. Aat\i, "] S; Aat\", i]
t0en
<imetrica :5 false
else
" :5 " K (;
i :5 i K (;
end;
Aatriz<imetrica :5 <imetrica;
end;
!" F7rocedimento para multiplicar duas matrizesG
procedure AultiplicaAatrizes8var Aat(, Aat), Aat : 'Aatriz; 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
Aat\i, "] :5 2;
.or M :5 ( to n( do
Aat\i, "] :5 Aat\i, "] K Aat(\i, M]IAat)\M, "];
end;
end
else
'riteln8H7roduto nao definidoH9;
end;
!# F7rograma para determinar os menores elementos de cada uma das linhas de uma matrizG
program AenoresPlementos;
t4pe 'Aatriz 5 arra4 \(..(2, (..(2] o. integer;
var Aatriz: 'Aatriz;
NumOinhas, Num=olunas : integer;
procedure Armazena'abela8var Aat : 'Aatriz; 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
readln8Aat\i, "]9;
end;
procedure P$ibe'abela8var Aat : 'Aatriz; m, n : integer9;
var i, " : integer;
&egin
.or i :5 ( to m do
&egin
.or " :5 ( to n do
'rite8Aat\i, "],H H9;
'riteln;
end;
end;
procedure AenorPlemento8var Aat : 'Aatriz; m, n : integer9;
var i, ", =ol, Aenor : integer;
&egin
.or i :5 ( to m do
&egin
Aenor :5 Aat\i, (];
=ol :5 (;
.or " :5 ) to n do
i. Aat\i, "] S Aenor
t0en
&egin
Aenor :5 Aat\i, "];
=ol :5 ";
end;
'riteln8H H, i,H H, Aenor, H H, =ol9;
end;
end;
F7rograma principalG
&egin
'riteln8H6igite a ordem da matrizH9;
readln8NumOinhas, Num=olunas9;
Armazena'abela8Aatriz, NumOinhas, Num=olunas9;
'riteln8H'abelaH9;
P$ibe'abela8Aatriz, NumOinhas, Num=olunas9;
'riteln8HOinha Aenor Plemento =olunaH9;
AenorPlemento8Aatriz, NumOinhas, Num=olunas9;
end.
!$ F7rograma para determinar escalas de viagens aereasG
program PscalaEiagemAerea;
t4pe 'Aatriz 5 arra4\(..+2, (..+2] o. integer;
var 6istancias : 'Aatriz;
Num=idades, Lrig, 6est, Pscal : integer;
F7rocedimento para armazenar as distancias entre as cidadesG
procedure Armazena6istancias8var Aat : 'Aatriz; 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
Aat\i, "] :5 2
else
&egin
readln8Aat\i]\"]9;
Aat\"]\i] :5 Aat\i]\"];
end;
end;
F7rocedimento para e$ibir a tabela das distancias entre as cidadesG
procedure P$ibe6istancias8var Aat : 'Aatriz; m : integer9;
var i, " : integer;
&egin
'riteln8H'abela de distancias entre as cidadesH9;
.or i :5 ( to m do
&egin
.or " :5 ( to m do
'rite8Aat\i, "]:09;
'riteln;
end;
end;
F>uncao que determina a cidade onde deve ocorrer a escalaG
.unction Pscala8var Aat : 'Aatriz; m, Lrig, 6est : integer9 : integer;
var i, ", Aenor, Psc : integer;
&egin
Aenor :5 Aat\Lrig, (] K Aat\(, 6est];
Psc :5 (;
.or i :5 ) to m do
i. 8Aat\Lrig, i] K Aat\i, 6est] S Aenor9 and 8i S; Lrig9 and 8i S; 6est9
t0en
&egin
Aenor :5 Aat\Lrig, i] K Aat\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 ativao da funo. 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;
Captulo )
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 (;
1tr8n 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#rioH9;
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;
1tr86igitoEerificador8s9, 6igito9;
i. s\c] 5 6igito\(]
t0en
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
'riteln8H6igite o nome do passageiroH9;
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;
end.
Captulo *
! F7rograma para reunir dois arquivosG
t4pe '*egistro 5 record
Aat : 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; Aat : string9 : integer;
var r : '*egistro;
&egin
Reset8f9;
read8f, r9;
'0ile 8not Eo.8f99 and 8r.Aat S; Aat9 do
read8f, r9;
i. r.Aat 5 Aat
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.Aat9 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
Aat : 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.Aat ; *eg.Aat9 and not Eo.8f9 do
&egin
'rite8Au$, *eg9;
read8f, *eg9;
end;
i. Eo.8f9
t0en
'rite8Au$, *eg9
else
1ee98f, 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.Aat ; *eg.Aat9 and not Eo.8f9 do
read8f, *eg9;
i. Eo.8f9
t0en
'rite8f, *eg9
else
&egin
p :5 FilePos8f9 ? (;
t :5 File1i:e8f9;
.or i :5 t do'nto p do
&egin
read8f, *eg9;
'rite8f, *eg9;
1ee98f, FilePos8f9 ? )9;
end;
end;
1ee98f, 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.Aatr ; *eg.Aatr9 and not Eo.8f9 do
&egin
'rite8Au$, *eg9;
read8f, *eg9;
end;
i. Eo.8f9
t0en
'rite8Au$, *eg9
else
1ee98f, 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.Aatr9;
i. =onsulta8f), r.Aatr9 S; ?(
t0en
'rite8f, r9;
end;
end;
) F7rocedimento que permuta os conte%dos de dois registros de um arquivo, dados pelos valores do campo AatG
procedure 'roca*egistro8var f : 'Arquivo; Aat(, Aat) : string9;
var *eg(, *eg) : '*egistro;
n(, n) : integer;
&egin
Reset8f9;
n( :5 =onsulta8f, Aat(9;
n) :5 =onsulta8f, Aat)9;
1ee98f, n(9;
read8f, *eg(9;
1ee98f, n)9;
read8f, *eg)9;
1ee98f, n(9;
'rite8f, *eg)9;
1ee98f, 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.
Captulo +
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 3ndice6oAaiorPlemento8var v : 'Eetor; t : integer9 : integer;
var i, M, Aaior : integer;
&egin
M :5 (; Aaior :5 v\(];
.or i :5 ) to t do
i. 8v\i] ; Aaior9
t0en
&egin
Aaior :5 v\i];
M :5 i;
end;
3ndice6oAaiorPlemento :5 M;
end;
F=omandos do <elect<ortG
&egin
.or i :5 t ? ( do'nto ( do
&egin
" :5 3ndice6oAaiorPlemento8v, i9;
i. v\"] ; v\iK(]
t0en
'roca8v\iK(], v\"]9;
end;
end;
" F7rocedimento que implementa o 3nsert<ortG
procedure 3nsert<ort8var v : 'Eetor; t : integer9;
var Au$ : 'Eetor;
i : integer;
F7rocedimento que insere um elemento num vetor ordenadoG
procedure 3nsereLrdenado8var v : 'Eetor; t, r : integer9;
var i, " : integer;
&egin
i :5 (;
'0ile 8v\i] S r9 and 8i S5 t9 do
i :5 i K (;
.or " :5 t do'nto i do
v\" K (] :5 v\"];
v\i] :5 r;
end;
&egin
Au$\(] :5 v\(];
.or i :5 ) to t do
3nsereLrdenado8Au$, i ? (, v\i]9;
v :5 Au$;
end;
# F7rocedimento para ordenar um arquivoG
procedure LrdenaArquivo8var f : 'Arquivo9;
var r(, r) : '*egistro;
t, i, n(, n) : integer;
'r : &oolean;
7rocedimento para troca de dois registrosG
procedure 'roca*egistro8m(, m) : integer; var *eg(, *eg) : '*egistro9;
var Au$ : '*egistro;
&egin
1ee98f, n(9;
'rite8f, *eg)9;
1ee98f, n)9;
'rite8f, *eg(9;
end;
F=omandos do procedimento LrdenaArquivoG
&egin
Reset8f9;
t :5 File1i:e8f9;
'r :5 true;
'0ile 'r do
&egin
n) :5 2; 'r :5 false;
t :5 t ? (;
.or i :5 ( to t do
&egin
1ee98f, n)9;
n( :5 FilePos8f9;
read8f, r(9;
n) :5 FilePos8f9;
read8f, r)9;
i. r(.Aat ; r).Aat
t0en
&egin
'roca*egistro8n(, n), r(, r)9;
'r :5 true;
end;
end;
end;
end;