Programando com Pascal - Respostas+Exercícios+Pascal
Short Description
Download Programando com Pascal - Respostas+Exercícios+Pascal...
Description
Programando com Pascal Respostas dos Exercícios Propostos
Jaime Evaristo Instituto de Computação Universidade Federal de Alagoas
Programando com Pascal Respostas dos Exercícios Propostos
Jaime Evaristo Instituto de Computação Universidade Federal de Alagoas
Capítulo 1 1 Naturalmente, na primeira travessia, um índio levaria um branco até a outra margem e voltaria sozinho. A questão é a segunda: nã o poderia atravessar um índio e um branco, pois, ao chegar na outra margem, haveria dois brancos e um í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! pode ser feita por dois índios, pois "# e$istem dois brancos na outra margem. A questão é o retorno. A %nica possibilidade é retornar um índio e um branco& 'emos então 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 para o destino. 7ara o caso n 5 +, basta observar que é necess#rio apenas transportar os dois discos ( e ) da origem para auxiliar 8que 8que é o caso anterior9, transportar o disco + da origem para o destino e os discos ( e ) da torre auxiliar para 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 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 tm o mesmo peso e por 78m, n9 2 se a esfera m pesa mais que a esfera n. 'emos então a seguinte soluão:
(. 7ese as esferas ( e ). ). 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 H, Numoedas,H moedas de H, oeda, H =entavosH9; 'riteln8H =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 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 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 ( 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; 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 '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; 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 Au$\(] :5 at\l];
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 atrizuncao 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, 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; 7elete 87rimOet, 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.
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];
View more...
Comments