• Nenhum resultado encontrado

Respostas Pascal Jaime Evaristo

N/A
N/A
Protected

Academic year: 2021

Share "Respostas Pascal Jaime Evaristo"

Copied!
35
0
0

Texto

(1)

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

(2)

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ão 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   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ó 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 já existem dois brancos na outra margem. A questão é o retorno. A única possibilidade é retornar   pode ser feita por dois índios, pois já existem dois brancos na outra margem. A questão é o retorno. A única possibilidade é retornar 

um índio e um branco! Temos então o seguinte algoritmo: um índio e um branco! Temos então o seguinte algoritmo:

1. Atravessem um índio e um branco. 1. Atravessem um índio e um branco. 2. Retorne o índio.

2. Retorne o índio.

3. Atravessem dois brancos. 3. Atravessem dois brancos. 4. Retorne um branco. 4. Retorne um branco. 5. Atravessem dois índios. 5. Atravessem dois índios.

6. Retornem um índio e um branco. 6. Retornem um índio e um branco. 7. Atravessem dois índios.

7. Atravessem dois índios. 8. Retorne um branco. 8. Retorne um branco. 9. Atravessem dois brancos. 9. Atravessem dois brancos. 10. Retorne um branco. 10. Retorne um branco. 11. Atravessem dois brancos. 11. Atravessem dois brancos. 2.

2. Indicando por 1, 2, 3, 4, ... os discos na ordem crescente dos seus diâmetros, temos para o caso n = 2:Indicando por 1, 2, 3, 4, ... os discos na ordem crescente dos seus diâmetros, temos para o caso n = 2: 1. Disco 1 da

1. Disco 1 da origemorigem parapara auxiliar auxiliar .. 2. Disco 2 da

2. Disco 2 da origemorigem para opara o destinodestino.. 3. Disco 1 da

3. Disco 1 da auxiliar auxiliar para opara o destinodestino..

Para o caso n = 3, basta observar que é necessário apenas transportar os dois discos 1 e 2 da

Para o caso n = 3, basta observar que é necessário apenas transportar os dois discos 1 e 2 da origemorigem para para auxiliar auxiliar (que é o caso(que é o caso anterior), transportar o disco 3 da

anterior), transportar o disco 3 da origemorigem para opara o destinodestino e os discos 1 e 2 e os discos 1 e 2 da torreda torre auxiliar auxiliar para opara o destinodestino (que é, novamente, o caso(que é, novamente, o caso anterior).

anterior).

1. Disco 1 da

1. Disco 1 da origemorigem parapara destinodestino.. 2. Disco 2 da

2. Disco 2 da origemorigem parapara auxiliar auxiliar .. 3. Disco 1 do

3. Disco 1 do destinodestino para para auxiliar auxiliar .. 4. Disco 3 da

4. Disco 3 da origemorigem para para destinodestino.. 5. Disco 1 da

5. Disco 1 da auxiliar auxiliar  para para origemorigem.. 6. Disco 2 da

6. Disco 2 da auxiliar auxiliar para opara o destinodestino.. 7. Disco 1 da

7. Disco 1 da origemorigem para opara o destinodestino.. 3.

3. Para facilitar a linguagem, indiquemos por P(m, n) = 0 se as esferasPara facilitar a linguagem, indiquemos por P(m, n) = 0 se as esferas mm ee nn têm o mesmo peso e por P(m, n) > 0 se a esferatêm o mesmo peso e por P(m, n) > 0 se a esfera mm pesapesa mais que a esfera

mais que a esfera nn. Temos então a seguinte solução:. Temos então a seguinte solução: 1. Pese as esferas 1 e 2.

1. Pese as esferas 1 e 2.

2. Se P(1, 2) = 0, pese as esferas 1 e 3. 2. Se P(1, 2) = 0, pese as esferas 1 e 3.

2.1 Se P(1, 3) > 0 então forneça como resposta: a esfera 3 tem peso menor que as esferas 1 e 2. 2.1 Se P(1, 3) > 0 então forneça como resposta: a esfera 3 tem peso menor que as esferas 1 e 2. 2.2 Se P(3, 1) > 0 então forneça como resposta: a esfera 3 tem peso maior que as esferas 1 e 2. 2.2 Se P(3, 1) > 0 então forneça como resposta: a esfera 3 tem peso maior que as esferas 1 e 2. 3. Se P(1, 2) > 0, pese as esferas 1 e 3.

3. Se P(1, 2) > 0, pese as esferas 1 e 3.

3.1 Se P(1, 3) = 0 então forneça como resposta: a esfera 2 tem peso menor que as esferas 1 e 3. 3.1 Se P(1, 3) = 0 então forneça como resposta: a esfera 2 tem peso menor que as esferas 1 e 3. 3.2 Se P(1, 3) > 0 então forneça como resposta: a esfera 1 tem peso maior que as esferas 2 e 3. 3.2 Se P(1, 3) > 0 então forneça como resposta: a esfera 1 tem peso maior que as esferas 2 e 3. 3.3 Se P(3, 1) > 0 então forneça como resposta: a esfera 1 tem peso menor que as esferas 2 e 3. 3.3 Se P(3, 1) > 0 então forneça como resposta: a esfera 1 tem peso menor que as esferas 2 e 3. 4. Se P(2, 1) > 0, pese as esferas 2 e 3.

4. Se P(2, 1) > 0, pese as esferas 2 e 3.

4.1 Se P(2, 3) = 0 então forneça como resposta: a esfera 1 tem peso menor que as esferas 2 e 3. 4.1 Se P(2, 3) = 0 então forneça como resposta: a esfera 1 tem peso menor que as esferas 2 e 3. 4.2 Se P(2, 3) > 0 então forneça como resposta: a esfera 2 tem peso maior que as esferas 1 e 3. 4.2 Se P(2, 3) > 0 então forneça como resposta: a esfera 2 tem peso maior que as esferas 1 e 3. 4.3 Se P(3, 2) > 0 então forneça como resposta: a esfera 2 tem peso menor que as esferas 1 e 3. 4.3 Se P(3, 2) > 0 então forneça como resposta: a esfera 2 tem peso menor que as esferas 1 e 3. 4.

4. Para calcular o produto, utilizamos uma variável P que assume inicialmente o primeiro valor da relação e, para cada novoPara calcular o produto, utilizamos uma variável P 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. 1. Chame de A o primeiro número dado.

1. Chame de A o primeiro número dado.

2. Chame de N o número de elementos da relação 2. Chame de N o número de elementos da relação 3. Faça P = A.

3. Faça P = A.

4. Repita N - 1 vezes as instruções 4.1 e 4.2. 4. Repita N - 1 vezes as instruções 4.1 e 4.2.

4.1. Chame de A o próximo número dado. 4.1. Chame de A o próximo número dado. 4.2. Substitua o valor de P por P x A. 4.2. Substitua o valor de P por P x A. 5. Calcule M = Raiz(P, N)

5. Calcule M = Raiz(P, N)

6. Forneça M para o valor da média. 6. Forneça M para o valor da média. 5.

5. Basta observar que os dias da semana, sendo em número de 7, repetem-se em ciclos de 7 dias. Assim, se 01/01/1900 foi umaBasta observar que os dias da semana, sendo em número de 7, repetem-se em ciclos de 7 dias. Assim, se 01/01/1900 foi uma segunda-feira, o foram também os dias 08/01/1900, 15/01/1900, 22/01/1900, 29/01/1900, 05/02/1900 e assim sucessivamente. Basta segunda-feira, o foram também os dias 08/01/1900, 15/01/1900, 22/01/1900, 29/01/1900, 05/02/1900 e assim sucessivamente. Basta então determinar o número de dias decorridos entre a data dada e o dia 01/01/1900 e calcular o resto da divisão por 7.

então determinar o número de dias decorridos entre a data dada e o dia 01/01/1900 e calcular o resto da divisão por 7. 1. Determine o número n de dias entre a data dada e 01/01/1900.

1. Determine o número n de dias entre a data dada e 01/01/1900. 2. Calcule o resto r da divisão de n por 7

2. Calcule o resto r da divisão de n por 7

3. Se r = 1 forneça como resposta segunda-feira. 3. Se r = 1 forneça como resposta segunda-feira.

(3)

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ão 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   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ó 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 já existem dois brancos na outra margem. A questão é o retorno. A única possibilidade é retornar   pode ser feita por dois índios, pois já existem dois brancos na outra margem. A questão é o retorno. A única possibilidade é retornar 

um índio e um branco! Temos então o seguinte algoritmo: um índio e um branco! Temos então o seguinte algoritmo:

1. Atravessem um índio e um branco. 1. Atravessem um índio e um branco. 2. Retorne o índio.

2. Retorne o índio.

3. Atravessem dois brancos. 3. Atravessem dois brancos. 4. Retorne um branco. 4. Retorne um branco. 5. Atravessem dois índios. 5. Atravessem dois índios.

6. Retornem um índio e um branco. 6. Retornem um índio e um branco. 7. Atravessem dois índios.

7. Atravessem dois índios. 8. Retorne um branco. 8. Retorne um branco. 9. Atravessem dois brancos. 9. Atravessem dois brancos. 10. Retorne um branco. 10. Retorne um branco. 11. Atravessem dois brancos. 11. Atravessem dois brancos. 2.

2. Indicando por 1, 2, 3, 4, ... os discos na ordem crescente dos seus diâmetros, temos para o caso n = 2:Indicando por 1, 2, 3, 4, ... os discos na ordem crescente dos seus diâmetros, temos para o caso n = 2: 1. Disco 1 da

1. Disco 1 da origemorigem parapara auxiliar auxiliar .. 2. Disco 2 da

2. Disco 2 da origemorigem para opara o destinodestino.. 3. Disco 1 da

3. Disco 1 da auxiliar auxiliar para opara o destinodestino..

Para o caso n = 3, basta observar que é necessário apenas transportar os dois discos 1 e 2 da

Para o caso n = 3, basta observar que é necessário apenas transportar os dois discos 1 e 2 da origemorigem para para auxiliar auxiliar (que é o caso(que é o caso anterior), transportar o disco 3 da

anterior), transportar o disco 3 da origemorigem para opara o destinodestino e os discos 1 e 2 e os discos 1 e 2 da torreda torre auxiliar auxiliar para opara o destinodestino (que é, novamente, o caso(que é, novamente, o caso anterior).

anterior).

1. Disco 1 da

1. Disco 1 da origemorigem parapara destinodestino.. 2. Disco 2 da

2. Disco 2 da origemorigem parapara auxiliar auxiliar .. 3. Disco 1 do

3. Disco 1 do destinodestino para para auxiliar auxiliar .. 4. Disco 3 da

4. Disco 3 da origemorigem para para destinodestino.. 5. Disco 1 da

5. Disco 1 da auxiliar auxiliar  para para origemorigem.. 6. Disco 2 da

6. Disco 2 da auxiliar auxiliar para opara o destinodestino.. 7. Disco 1 da

7. Disco 1 da origemorigem para opara o destinodestino.. 3.

3. Para facilitar a linguagem, indiquemos por P(m, n) = 0 se as esferasPara facilitar a linguagem, indiquemos por P(m, n) = 0 se as esferas mm ee nn têm o mesmo peso e por P(m, n) > 0 se a esferatêm o mesmo peso e por P(m, n) > 0 se a esfera mm pesapesa mais que a esfera

mais que a esfera nn. Temos então a seguinte solução:. Temos então a seguinte solução: 1. Pese as esferas 1 e 2.

1. Pese as esferas 1 e 2.

2. Se P(1, 2) = 0, pese as esferas 1 e 3. 2. Se P(1, 2) = 0, pese as esferas 1 e 3.

2.1 Se P(1, 3) > 0 então forneça como resposta: a esfera 3 tem peso menor que as esferas 1 e 2. 2.1 Se P(1, 3) > 0 então forneça como resposta: a esfera 3 tem peso menor que as esferas 1 e 2. 2.2 Se P(3, 1) > 0 então forneça como resposta: a esfera 3 tem peso maior que as esferas 1 e 2. 2.2 Se P(3, 1) > 0 então forneça como resposta: a esfera 3 tem peso maior que as esferas 1 e 2. 3. Se P(1, 2) > 0, pese as esferas 1 e 3.

3. Se P(1, 2) > 0, pese as esferas 1 e 3.

3.1 Se P(1, 3) = 0 então forneça como resposta: a esfera 2 tem peso menor que as esferas 1 e 3. 3.1 Se P(1, 3) = 0 então forneça como resposta: a esfera 2 tem peso menor que as esferas 1 e 3. 3.2 Se P(1, 3) > 0 então forneça como resposta: a esfera 1 tem peso maior que as esferas 2 e 3. 3.2 Se P(1, 3) > 0 então forneça como resposta: a esfera 1 tem peso maior que as esferas 2 e 3. 3.3 Se P(3, 1) > 0 então forneça como resposta: a esfera 1 tem peso menor que as esferas 2 e 3. 3.3 Se P(3, 1) > 0 então forneça como resposta: a esfera 1 tem peso menor que as esferas 2 e 3. 4. Se P(2, 1) > 0, pese as esferas 2 e 3.

4. Se P(2, 1) > 0, pese as esferas 2 e 3.

4.1 Se P(2, 3) = 0 então forneça como resposta: a esfera 1 tem peso menor que as esferas 2 e 3. 4.1 Se P(2, 3) = 0 então forneça como resposta: a esfera 1 tem peso menor que as esferas 2 e 3. 4.2 Se P(2, 3) > 0 então forneça como resposta: a esfera 2 tem peso maior que as esferas 1 e 3. 4.2 Se P(2, 3) > 0 então forneça como resposta: a esfera 2 tem peso maior que as esferas 1 e 3. 4.3 Se P(3, 2) > 0 então forneça como resposta: a esfera 2 tem peso menor que as esferas 1 e 3. 4.3 Se P(3, 2) > 0 então forneça como resposta: a esfera 2 tem peso menor que as esferas 1 e 3. 4.

4. Para calcular o produto, utilizamos uma variável P que assume inicialmente o primeiro valor da relação e, para cada novoPara calcular o produto, utilizamos uma variável P 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. 1. Chame de A o primeiro número dado.

1. Chame de A o primeiro número dado.

2. Chame de N o número de elementos da relação 2. Chame de N o número de elementos da relação 3. Faça P = A.

3. Faça P = A.

4. Repita N - 1 vezes as instruções 4.1 e 4.2. 4. Repita N - 1 vezes as instruções 4.1 e 4.2.

4.1. Chame de A o próximo número dado. 4.1. Chame de A o próximo número dado. 4.2. Substitua o valor de P por P x A. 4.2. Substitua o valor de P por P x A. 5. Calcule M = Raiz(P, N)

5. Calcule M = Raiz(P, N)

6. Forneça M para o valor da média. 6. Forneça M para o valor da média. 5.

5. Basta observar que os dias da semana, sendo em número de 7, repetem-se em ciclos de 7 dias. Assim, se 01/01/1900 foi umaBasta observar que os dias da semana, sendo em número de 7, repetem-se em ciclos de 7 dias. Assim, se 01/01/1900 foi uma segunda-feira, o foram também os dias 08/01/1900, 15/01/1900, 22/01/1900, 29/01/1900, 05/02/1900 e assim sucessivamente. Basta segunda-feira, o foram também os dias 08/01/1900, 15/01/1900, 22/01/1900, 29/01/1900, 05/02/1900 e assim sucessivamente. Basta então determinar o número de dias decorridos entre a data dada e o dia 01/01/1900 e calcular o resto da divisão por 7.

então determinar o número de dias decorridos entre a data dada e o dia 01/01/1900 e calcular o resto da divisão por 7. 1. Determine o número n de dias entre a data dada e 01/01/1900.

1. Determine o número n de dias entre a data dada e 01/01/1900. 2. Calcule o resto r da divisão de n por 7

2. Calcule o resto r da divisão de n por 7

3. Se r = 1 forneça como resposta segunda-feira. 3. Se r = 1 forneça como resposta segunda-feira.

(4)

4. Se r = 2 forneça como resposta terça-feira. 4. Se r = 2 forneça como resposta terça-feira. 5. Se r = 3 forneça como resposta quarta-feira. 5. Se r = 3 forneça como resposta quarta-feira. 6. Se r = 4 forneça como resposta quinta-feira. 6. Se r = 4 forneça como resposta quinta-feira. 7. Se r = 5 forneça como resposta sexta-feira. 7. Se r = 5 forneça como resposta sexta-feira. 8. Se r = 6 forneça como resposta sábado. 8. Se r = 6 forneça como resposta sábado. 9. Se r = 0 forneça como resposta domingo. 9. Se r = 0 forneça como resposta domingo. 6.

6. Indicando por A(x, y) a travessia dos integrantes x e y e por V(x) a volta do integrante x, teríamos:Indicando por A(x, y) a travessia dos integrantes x e y e por V(x) a volta do integrante x, teríamos: 1. A(baterista, baixista). 1. A(baterista, baixista). 2. V(baterista). 2. V(baterista). 3. A(guitarrista, vocal). 3. A(guitarrista, vocal). 4. V(baixista) 4. V(baixista) 5. A(baixista, baterista) 5. A(baixista, baterista)

Capítulo 2

Capítulo 2

1a. 1a. 22 1b. 1b.truetrue 2a.

2a. {Programa que converte uma temperatura em graus Farenheit para graus Celsius}{Programa que converte uma temperatura em graus Farenheit para graus Celsius} program

program ConversaoTemperatura;ConversaoTemperatura; var

var Celsius, Farenheit :Celsius, Farenheit : realreal;; begin

begin writeln

writeln('Digite a temperatura em graus Farenheit');('Digite a temperatura em graus Farenheit'); readln

readln(Farenheit);(Farenheit);

Celsius := 5*(Farenheit - 32)/9; Celsius := 5*(Farenheit - 32)/9; writeln

writeln(Farenheit:0:2, ' graus Farenheit correspondem a ', Celsius:0:2, ' graus Celsius');(Farenheit:0:2, ' graus Farenheit correspondem a ', Celsius:0:2, ' graus Celsius'); end

end.. 2b.

2b. {Programa para gerar o invertido de um inteiro dado}{Programa para gerar o invertido de um inteiro dado} program

program InverteInteiro;InverteInteiro; var

var Num, Invertido, Unidade, Dezena, Centena :Num, Invertido, Unidade, Dezena, Centena : integerinteger;; begin

begin writeln

writeln('Digite o inteiro (com tres algarismos)');('Digite o inteiro (com tres algarismos)'); readln

readln(Num);(Num); Unidade := Num

Unidade := Num modmod 10;10; Dezena := (Num

Dezena := (Num modmod 100)100) divdiv 10;10; Centena := Num

Centena := Num divdiv 100;100;

Invertido := Unidade * 100 + Dezena * 10 + Centena; Invertido := Unidade * 100 + Dezena * 10 + Centena; writeln

writeln('O invertido de ', Num, ' eh ', Invertido);('O invertido de ', Num, ' eh ', Invertido); end

end.. 2c.

2c. {Programa para somar duas fracoes ordinarias}{Programa para somar duas fracoes ordinarias} program

program SomaFracoes;SomaFracoes; var

var Num1, Den1, Num2, Den2, Num, Den:Num1, Den1, Num2, Den2, Num, Den: integerinteger;; begin

begin writeln

writeln('Digite as fracoes');('Digite as fracoes'); readln

readln(Num1, Den1, Num2, Den2);(Num1, Den1, Num2, Den2);  Num := Num1 * Den2 + Num2 *  Num := Num1 * Den2 + Num2 * Den1;Den1;

Den := Den1 * Den2; Den := Den1 * Den2; writeln

writeln('(', Num1, '/', Den1, ') + (', Num2, '/', Den2,') = (', Num, '/', Den, ')');('(', Num1, '/', Den1, ') + (', Num2, '/', Den2,') = (', Num, '/', Den, ')'); end

end.. 2d.

2d. {Programa que determina o menor multiplo de um inteiro maior que um outro inteiro}{Programa que determina o menor multiplo de um inteiro maior que um outro inteiro} program

program MenorMultiplo;MenorMultiplo; var

var n, k, MenorMult :n, k, MenorMult : integerinteger;; begin

begin writeln

writeln('Digite dois inteiros ');('Digite dois inteiros '); readln

readln(n, k);(n, k); MenorMult :=

MenorMult := n - n - nn modmod k + k;k + k; writeln

writeln('O menor multiplo de ', k, ' maior que', n, ' ‚ ', MenorMult);('O menor multiplo de ', k, ' maior que', n, ' ‚ ', MenorMult); end

end.. 2e.

2e. {Programa que determina o perimetro de um poligono regular inscrito numa circunferencia}{Programa que determina o perimetro de um poligono regular inscrito numa circunferencia} program

program PerimetroPoligonoInscrito;PerimetroPoligonoInscrito; var

var NumLados :NumLados : integerinteger;; Raio, Perimetro: Raio, Perimetro: realreal;; begin

begin writeln

writeln('Digite o numero de lados do poligono');('Digite o numero de lados do poligono'); readln

readln(NumLados);(NumLados); writeln

(5)

readln(Raio);

Perimetro := 2 * NumLados * Raio * Sin(Pi/NumLados);

write('O perimetro do poligono de ', NumLados, ' lados inscrito ');

writeln('numa circunferencia de raio ', Raio:0:2, ' eh igual a ', Perimetro:0:2); end.

3. {Programa que permuta o conteudo de duas variaveis sem utilizar variavel auxiliar} program PernutaVariaveis;

var x, y : real; begin

writeln('Digite dois valores'); readln(x, y);

writeln('Conteudos antes da permuta: x = ', x:0:2, ' e y = ', y:0:2); x := x + y;

y := x - y; x := x - y;

writeln('Conteudo apos a permuta x = ', x:0:2, ' e y = ', y:0:2); end.

4. {Programa que determina a entrada e as duas prestacoes de uma compra a prazo} program CalculoPrestacoes;

var Compra, Entrada : real; Prestacao : integer; begin

writeln('Digite o valor da compra'); readln(Compra);

Prestacao := Trunc(Compra/3); Entrada := Compra - 2 * Prestacao; writeln('Valor da compra: ', Compra:0:2); writeln('Valor da entrada: ', Entrada:0:2); writeln('Valor das prestacoes: ', Prestacao, '.00'); end.

5. {Programa para fornecer um intervalo de tempo dado em segundos em horas minutos e segundos} program IntervaloTempo;

var Intervalo, Resto, Horas, Minutos, Segundos : integer; begin

writeln('Digite o intervalo de tempo'); readln(Intervalo);

Horas := Intervalo div 3600; Resto := Intervalo mod 3600; Minutos := Resto div 60; Segundos := Resto mod 60;

writeln('O intervalo de tempo ', Intervalo, ' s equivale a '); writeln(Horas, ' h ', Minutos, ' min ', Segundos,' s'); end.

6. {Programa para fornecer um intervalo de tempo dado em minutos em horas minutos e segundos} program IntervaloTempo;

var Horas, Minutos : integer;

Intervalo, Segundos, Resto : real; begin

writeln('Digite o intervalo de tempo'); readln(Intervalo);

Horas := Trunc(Intervalo) div 60; Resto := Intervalo - Horas * 60; Minutos := Trunc(Resto); Segundos := Frac(Resto) * 60;

write('O intervalo de tempo ', Intervalo:0:2, ' s equivale a '); writeln(Horas, ' h ', Minutos, ' min ', Segundos:0:1,' s'); end.

7. {Programa para discriminar as notas de saque em um caixa eletronico, observando, por pertinente, que o programa escrito com os conhecimentos do capitulo 4 fica bem mais simples}

program CaixaEletronico;

var Saque, x, Notas100, Notas50, Notas10, Notas5, Notas1: integer; begin

writeln('Digite o valor do saque'); readln(Saque);

 Notas100 := Saque div 100; x := Saque mod 100;  Notas50 := x div 50;

(6)

x := x mod 50;  Notas10 := x div 10;

x := x mod 10;  Notas5 := x div 5;  Notas1 := x mod 5;

writeln('O saque solicitado no valor de ', Saque, ' deve ser pago com:'); writeln(Notas100, ' notas de 100 reais');

writeln(Notas50, ' notas de 50 reais'); writeln(Notas10, ' notas de 10 reais'); writeln(Notas5, ' notas de 5 reais'); writeln(Notas1, ' notas de 1 real'); end.

8. {Programa para implementar calculo de potencias em Pascal} program ImplementaPotencia;

var Base, Expoente, Potencia : real; begin

writeln('Digite a base (positiva) e o expoente'); readln(Base, Expoente);

Potencia := Exp(Expoente * Ln(Base));

writeln(Base:0:2,'^',Expoente:0:2, ' = ', Potencia:0:6); end.

9. {Programa para determinar o valor das prestacoes de um financiamento} program CalculoPrestacoesFinanciamento;

var Valor, Fator, ValPrest, Taxa: real;  NumPrest : integer; begin write('Valor do financiamento: '); readln(Valor); write('Numero de prestacoes: '); readln(NumPrest); write('Taxa de juros: '); readln(Taxa); Taxa := Taxa/100;

Fator := Exp(NumPrest * Ln(1 + Taxa)); ValPrest := (Valor * Taxa * Fator)/(Fator - 1); writeln('Financiamento: ', Valor:0:2);

writeln('Numero de prestacoes: ', NumPrest); writeln('Taxa de juros: ', 100 * Taxa:0:2); writeln('Valor das prestacoes: ', ValPrest:0:2); end.

Capítulo 3

1. {programa que implementa a funcao round} program Arredondamentos;

var x : real;

Arredonda : integer; begin

writeln('Digite o numero a arredondar'); readln(x); if Frac(x) < 0.5 then Arredonda := Trunc(x) else Arredonda := Trunc(x) + 1;

writeln('O valor de ', x:0:6, ' arredondado e igual ', Arredonda); end.

2. {programa que verifica se um inteiro dado eh quadrado perfeito} program QuadPerfeito; var x : integer; Raiz : real; begin writeln('Digite o numero'); readln(x); Raiz := SqrT(x); if Frac(Raiz) = 0 then

(7)

else

writeln(x, ' nao eh quadrado perfeito'); end.

3. {programa que determina o maior de tres numeros dados} program MaiorDe3;

var x, y, z, Maior : real; begin

writeln('Digite s tres numeros'); readln(x, y , z);

Maior := x;

if (y > Maior) or (z > Maior) then if y > z then Maior := y else Maior := z;

writeln('O maior dos numeros ', x:0:2, ', ', y:0:2, ' e ',z:0:2 , ' eh igual a ', Maior:0:2); end.

4. {programa que classifica um triangulo de lados dados} program ClassificaTriangulo;

var x, y, z : real; begin

writeln('Digite os comprimentos dos lados do triangulo'); readln(x, y , z);

if (x < y + z) and (y < z + x) and (z < x + y) then

if (x = y) and (y = z) then

writeln('O triangulo de lados ', x, ', ', y, ' eh ', z, 'e equilatero') else

if (x = y) or (x = z) or (y = z) then

writeln('O triangulo de lados ', x, ', ', y, ' eh ', z, ' e isosceles') else

writeln('O triangulo de lados ', x, ', ', y, ' eh ', z, ' e escaleno') else

writeln('Os valores dados nao sao comprimentos dos lados de um triangulo'); end.

5. {programa que verifica se um triangulo de lados dados eh retangulo} program ClassificaTriangulo;

var x, y, z, Hip, Cat1, Cat2 : real; begin

writeln('Digite os comprimentos dos lados do triangulo'); readln(x, y , z);

if (x < y + z) and (y < z + x) and (z < x + y) then

begin

Hip := x; Cat1 := y; Cat2 := z;

if (y > Hip) or (z > Hip) then if (y > z) then begin Hip := y; Cat1 := x; end else begin Hip := z; Cat2 := x; end;

if Sqr(Hip) = Sqr(Cat1) + Sqr(Cat2) then

write('O triangulo de lados ', x, ', ', y, ' e ', z, ' eh retangulo de hipotenusa ', Hip, ' e catetos ', Cat1, ' e ', Cat2);

(8)

else

writeln('O triangulo de lados ', x, ', ', y, ' e ', z, ' nao e retangulo'); end

else

writeln('Os valores dados nao sao comprimentos dos lados de um triangulo'); end.

6. {Programa que determina as raizes de uma equacao do segundo grau} program EquacaoGrau2;

var a, b, c, x1, x2, ParteReal, ParteImag, Delta : real; begin writeln('Digite os coeficientes'); readln(a, b, c); if a <> 0 then begin Delta := Sqr(b) - 4*a*c; ParteReal := -b/(2*a); ParteImag := SqrT(abs(Delta))/(2*a); if Delta >= 0 then begin x1 := ParteReal + ParteImag; x2 := ParteReal - ParteImag;

writeln('As raizes da equacao dada sao ', x1, ' e ', x2); end

else

write('As raizes da equacao dada sao complexas: ', ParteReal:0:2,' + ', ParteImag:0:2,'i e ', ParteReal:0:2, ' - ', ParteImag:0:2,'i');

end else

writeln('A equacao nao e do segundo grau'); end.

7. {Programa que determina a idade de uma pessoa em anos, meses e dias } program IdadeEmAnosMesesDias;

var DiaNasc, MesNasc, AnoNasc, d, DiaAt, MesAt, AnoAt, Anos, Dias, Meses: integer; begin

writeln('Digite a data de nascimento'); readln(DiaNasc, MesNasc, AnoNasc); writeln('Digite a data atual');

readln(DiaAt, MesAt, AnoAt); Anos := AnoAt - AnoNasc; Meses := MesAt - Mesnasc; Dias := DiaAt - DiaNasc;

if (Anos < 0) or ((Anos = 0) and (Meses < 0)) or ((Anos = 0) and (Meses = 0) and (Dias < 0)) then

writeln('Data de nascimento invalida') else begin if Meses < 0 then begin Anos := Anos + 1; Meses := Meses + 12; end; if Dias < 0 then begin if Meses > 0 then Meses := Meses – 1 else begin Anos := Anos - 1; Meses := 11; end;

case MesNasc of 

2 : if AnoAt mod 4 = 0 then

(9)

else Dias := Dias + 28; 4, 6, 9, 11 : Dias := Dias + 30; else Dias := Dias + 31; end; end;

write('Uma pessoa que nasceu em ', DiaNasc,'/', Mesnasc,'/', AnoNasc, ' tem na data de ', DiaAt,'/', MesAt,'/', AnoAt,' ', Anos, ' anos ', Meses, ' meses ', Dias, ' dias');

end; end.

8. {Programa que determina a nota mínima de aprovacao} program NotaMinima;

var Av1, Av2, Av3, Av4, MedBimestral, NotaMin : real; begin

writeln('Digite as notas das avaliacoes bimestrais'); readln(Av1, Av2, Av3, Av4);

MedBimestral := (Av1 + Av2 + Av3 + Av4)/4; if (MedBimestral < 7) and (MedBimestral >= 5)

then begin

 NotaMin := (55 - 6 * MedBimestral)/4;

writeln('Um aluno que notas ', Av1:0:2, ', ', Av2:0:2, ', ', Av3:0:2, ' e ', Av4:0:2, ' necessita na prova final de uma nota igual a ', NotaMin:0:2);

end else

writeln('Um aluno que notas ', Av1:0:2, ', ', Av2:0:2, ', ', Av3:0:2, ' e ', Av4:0:2, ' nao faz prova final'); end.

Capítulo 4

1. A configuração da tela após a execução deste programa será 1) 5 15 45

2) 4 12 36 3)3 9 27 4)2 6 18 5)1 3 9

2. {programa que determina a soma dos quadrados dos n primeiros numeros naturais} program SomaQuadrados;

var n, Soma, i : integer; begin

writeln('Digite o valor de n'); readln(n);

Soma := 1; for i := 2 to n do

Soma := Soma + i*i;

writeln('A soma dos quadrados dos ', n, ' primeiros numeros naturais eh ', Soma); end.

3a. {Programa que calcula a soma dos n primeiros termos da sequencia (1/2, 3/5, 5/8, ...} program SomaSerie;

var n, Numerador, Denominador, i : integer; Soma : real;

begin

write('Digite o numero de termos a serem somados: '); readln(n); Soma := 1/2;  Numerador := 1; Denominador := 2; for i := 2 to n do begin  Numerador := Numerador + 2; Denominador := Denominador + 3;

Soma := Soma + Numerador/Denominador; end;

write('A soma dos ', n,' primeiros termos da sequencia (1/2, 3/5, 5/8, ...) eh igual a ', Soma); end.

3b. {programa que calcula a soma dos n primeiros termos da sequencia (1, -1/2, 1/3, -1/4, ...} program SomaSerie;

(10)

var n, i : integer; Soma : real; begin

write('Digite o numero de termos a serem somados: '); readln(n); Soma := 1; for i := 2 to n do begin if i mod 2 = 0 then

Soma := Soma - 1/i else

Soma := Soma + 1/i; end;

write('A soma dos ', n,' primeiros termos da sequencia (1, -1/2, 1/3, -1/8,...) eh igual a ', Soma); end.

4. {Programa para determinar o minimo multiplo comum de dois numeros positivo} program MinMultComum;

var a, b, x, y, Mmc : integer; begin

writeln('Digite os dois numeros '); readln( x, y); a := x;  b := y; if x < y then begin a := y;  b := x; end; Mmc := a; while Mmc mod b <> 0 do Mmc := Mmc + a; writeln('mmc(', x,', ', y,') = ', Mmc); end.

5. {Programa que determina os numeros perfeitos menores que um inteiro dado} program NumerosPerfeitos;

var Soma, Divisor, n, i, j : integer; begin

write('Digite o valor de n: '); readln(n);

writeln('Os numeros perfeitos menores que ', n, ' sao: '); for i := 2 to n do begin Soma := 0; for j := 1 to i div 2 do if i mod j = 0 then Soma := Soma + j; if Soma = i then write(i,' '); end; end.

6. {Programa que determina numeros com quatro algarismos com uma propriedade especial} program PropriedadeEspecial;

var Dezena, Unidade, i : integer; begin

writeln('Numeros da forma ABCD tais que (AB + BC)*(AB + BC) = ABCD :'); for i := 1000 to 9999 do begin Dezena := i div 100; Unidade := i mod 100; if Sqr(Dezena + Unidade) = i then write(i, ' '); end; end.

(11)

7. {Programa que determina pares de numeros da forma AB e XY tais que AB*XY = BA*YX} program PropriedadeEspecial;

var i, j, Invi, Invj : integer; begin

writeln('Pares de numeros da forma AB e XY tais que AB*XY = BA*YX'); for i := 10 to 99 do

begin

Invi := (i mod 10)*10 + i div 10; for j := 10 to 99 do

begin

Invj := (j mod 10)* 10 + j div 10; if i * j = Invi * Invj

then

writeln(i, ' ',j); end;

end; end.

8. {Programa que determina o numero de algarismos de um numero} program NumeroAlgarismos;

var Num, x, NumAlgarismos, i : integer; begin

writeln('Digite um inteiro'); readln(Num); x := Num; NumAlgarismos := 1; while x >= 10 do begin NumAlgarismos := NumAlgarismos + 1; x := x div 10; end;

writeln(Num, ' possui ', NumAlgarismos, ' algarismos'); end.

9. {Programa que verifica se um inteiro eh produto de dois primos} program ProdutoDePrimos;

var Num, Fator1, Fator2, i : integer; Raiz : real; begin writeln('Digite um inteiro'); readln(Num); Raiz := SqrT(Num); Fator1 := 2;

while (Num mod Fator1 <> 0) and (Fator1 <= Raiz) do Fator1 := Fator1 + 1;

if Fator1 <= Raiz then

begin

Fator2 := Num div Fator1; Raiz := SqrT(Fator2); i := 2;

while (Fator2 mod i <> 0) and (i <= Raiz) do i := i + 1;

if i <= Raiz then

writeln(Num, ' nao eh produto de dois primos') else

writeln(Num, ' eh o produto dos primos ', Fator1, ' e ', Fator2); end

else

writeln(Num, ' eh primo'); end.

10.{Programa que determina a decomposicao em fatores primos de um inteiro } program DecomposicaoEmFatoresPrimos;

var Num, x, Fator, Mult : integer; begin

writeln('Digite um inteiro'); readln(Num);

x := Num;

writeln('Decomposicao em fatores de ', Num,':'); Fator := 2;

(12)

begin

Mult := 0;

while x mod Fator = 0 do begin Mult := Mult + 1; x := x div Fator; end; if Mult > 0 then

writeln('Fator: ', Fator, ' Multiplicidade: ', Mult); Fator := Fator + 1;

end; end.

11. {Programa que transforma o computador numa urna eletronica} program UrnaEletronica;

var Voto, Alibaba, Alcapone, Brancos, Nulos : integer; Cont, Conf : char;

Corrige : boolean; begin

Cont := 'S';

Alibaba := 0; Alcapone := 0; Brancos := 0; Nulos := 0; while UpCase(Cont) = 'S' do

begin repeat

Corrige := false;

writeln('Digite seu voto'); readln(Voto);

case Voto of  83 : begin

writeln('Voce votou em Alibaba. Confirma seu voto (S/N)?'); readln(Conf);

if UpCase(Conf) = 'S' then

begin

Alibaba := Alibaba + 1;

writeln('Voto confirmado! Obrigado!'); end

else

Corrige := true; end;

93 : begin

writeln('Voce votou em Alcapone. Confirma seu voto (S/N)?'); readln(Conf);

if UpCase(Conf) = 'S' then

begin

Alcapone := Alcapone + 1;

writeln('Voto confirmado! Obrigado!'); end

else

Corrige := true; end;

00 : begin

writeln('Voce votou em branco. Confirma seu voto (S/N)?'); readln(Conf);

if UpCase(Conf) = 'S' then

begin

Brancos := Brancos + 1;

writeln('Voto confirmado! Obrigado!'); end else Corrige := true; end; else begin

writeln('Voce anulou seu votou. Confirma seu voto (S/N)?'); readln(Conf);

(13)

then begin

 Nulos := Nulos + 1;

writeln('Voto confirmado! Obrigado!'); end

else

Corrige := true; end;

end; until Corrige = false;

writeln('Novo eleitor (S/N)?'); readln(Cont);

end;

writeln('Resultado da eleicao'); writeln(' Alibaba: ', Alibaba); writeln(' Alcapone: ', Alcapone); writeln(' Brancos: ', Brancos); writeln(' Nulos: ', Nulos); writeln; writeln; write('Candidato eleito: '); if Alibaba > Alcapone then writeln('Alibaba') else if Alibaba < Alcapone then writeln('Alcapone') else writeln('Eleicao empatada'); end.

12. {Programa que determina o n-esimo termo da sequencia de Fibbonaci (1, 1, 2, 3, 5, 8, ...)} program Fibbonaci;

var n, Anterior1, Anterior2, Termo, i: integer; begin

writeln('Digite o valor de n'); readln(n);

Anterior1 := 1; Anterior2 := 1; Termo := 1; for i := 3 to n do

begin

Termo := Anterior1 + Anterior2; Anterior1 := Anterior2;

Anterior2 := Termo; end;

writeln('O termo de ordem ', n,' da sequencia de Fibbonaci eh ', Termo); end.

13. {Programa que determina o troco otimo de uma compra} program TrocoOtimo;

var Pagamento, x, Compra, Troco: real;

i, Reais, Nota, NumNotas, Centavos, Moeda, NumMoedas: integer; begin

writeln('Digite o valor da compra'); readln(Compra);

writeln('Digite o valor do pagamento'); readln(Pagamento);

Troco := Pagamento - Compra; if Troco > 0

then begin

writeln('Troco de R$ ', Troco:0:2, ' assim distribuido: '); {Tratamento da parte inteira do troco}

Reais := Trunc(Troco);  Nota := 100;

i := 1;

while Reais > 0 do begin

 NumNotas := Reais div Nota; if NumNotas > 0

(14)

begin

writeln(' ', NumNotas, ' notas de ', Nota, ' reais'); Reais := Reais mod Nota;

end; if i mod 2 = 1

then

 Nota := Nota div 2 else

 Nota := Nota div 5; i := i + 1;

end;

{tratamento dos centavos} Troco := Frac(Troco);

Centavos := Trunc(100 * Troco); Moeda := 50;

while Centavos > 0 do begin

 NumMoedas := Centavos div Moeda; if NumMoedas > 0

then begin

writeln(' ', NumMoedas,' moedas de ', Moeda, ' Centavos'); Centavos := Centavos mod moeda;

end;

if Moeda mod 10 = 0 then

Moeda := Moeda div 2 else if Moeda = 25 then Moeda := 10 else Moeda := 1; end; end else if Troco = 0 then writeln('Nao ha troco') else writeln('Pagamento insuficiente'); end.

14. {Programa que determina o numero de termos da serie harmonica que devem ser somados para que a soma seja maior que um real dado} program SerieHarmonica; var i : integer; k, Soma : real; begin writeln('Digite o valor de k'); readln(k); Soma := 1; i := 1;

while Soma <= k do begin

i := i + 1;

Soma := Soma + 1/i; end;

write('O numero minimo de termos da serie harmonica que devem'); writeln(' ser somados para que a soma seja maior que ', k, ' e ', i); end.

15. {Programa que exibe os subconjuntos, com tres elementos do conjunto {1, 2, ..., n), n dado} program SubConj3; var n, i, j, k: integer; begin writeln('Digite o valor de n'); readln(n); if n >= 3 then begin

(15)

writeln('Subconjuntos, com tres elementos, do conjunto {1, 2, ...,',n,'}'); for i := 1 to n - 2 do for j := i + 1 to n - 1 do for k := j + 1 to n do writeln('{',i, ', ', j, ', ', k, '}'); end else

writeln('O valor de n deve ser maior que 2'); end.

16. {Programa que exibe os pares de numeros amigos menores que um inteiro dado} program NumerosAmigos;

var Somai, Somak, Divisor, n, i, k, j : integer; begin

write('Digite o valor de n: '); readln(n);

writeln('Os numeros amigos menores que ', n, ' sao: '); for i := 2 to n do begin Somai := 0; for j := 1 to i div 2 do if i mod j = 0 then Somai := Somai + j; for k := 2 to i - 1 do begin Somak := 0; for j := 1 to k div 2 do if k mod j = 0 then Somak := Somak + j; if (Somai = k) and (Somak = i)

then writeln(i,' ',k); end; end; end.

Capítulo 5

1. {Funcao que retorna o k-ésimo digito de um inteiro} function DigitoK(n, k : integer) : integer;

var p : integer;

{Funcao que retorna o numero de algarismos de um inteiro positivo} function NumAlgarismos(x : integer) : integer;

var NumAlg : integer; begin  NumAlg := 1; while x >= 10 do begin  NumAlg := NumAlg + 1; x := x div 10; end;  NumAlgarismos := NumAlg end; {Comandos da funcao} begin if k <= NumAlgarismos(n) then begin  p := Trunc(Exp(k * Ln(10))); n := n mod p;

DigitoK := n div (p div 10); end

else

DigitoK := 0; end;

2. {Funcao iterativa que calcula o fatorial impar de um inteiro} function FatImpar(m : integer) : longint;

(16)

i : integer; begin f := 1; i := 1; while i <= m do begin f := f*i; i := i + 2; end; FatImpar := f; end;

{Funcao recursiva para a determinacao do fatorial impar} function FatImparRec(m : integer) : longint;

begin if m = 1 then FatImparRec := 1 else FatImparRec := m * FatImparRec(m - 2); end;

3. {Funcao que determina o fatorial primo de um numero primo} function FatPrimo(m : integer) : longint;

var f : longint; i : integer;

{Funcao que verifica se um numero eh primo} function Primo(m : integer) : boolean; var i : integer;

Raiz : real; begin

i := 2;

Raiz := SqrT(m);

while (m mod i <> 0) and (i <= Raiz) do i := i + 1; if i <= Raiz then Primo := false else Primo := true; end; {Comandos da funcao} begin f := 2; for i := 3 to m do if Primo(i) then f := f * i; FatPrimo := f; end;

4. {Funcao que determina a soma dos algarismos de um inteiro} function SomaAlgarismos(m : integer) : integer;

var Soma : integer; begin

Soma := 0; while m > 0 do

begin

Soma := Soma + m mod 10; m := m div 10;

end;

SomaAlgarismos := Soma; end;

5. {Funcao recursiva que retorna o n-esimo termo da sequencia de Fibbonaci} function FibbRec(n : integer) : integer;

begin

if (n = 1) or (n = 2) then

FibbRec := 1 else

(17)

end;

6. {Funcao para inverter um numero inteiro} function InverteNumero(n : integer) : longint; var i, NAlgarismos : integer;

Invertido : longint;

{Funcao para determinar o numero de algarismos de um numero inteiro} function NumeroAlgarismos(n : integer) : integer;

var NumAlgarismos: integer; begin  NumAlgarismos := 1; while n >= 10 do begin  NumAlgarismos := NumAlgarismos + 1; n := n div 10; end;  NumeroAlgarismos := NumAlgarismos; end;

{Funcao para calcular potencias de dez} function PotenciaDe10(e : integer) : longint; var Pot : longint;

i : integer; begin Pot := 1; for i := 1 to e do Pot := Pot*10; PotenciaDe10 := Pot; end;

{Inicio da funcao InverteNumero} begin

Invertido := 0;

 NAlgarismos := NumeroAlgarismos(n); for i := NAlgarismos - 1 downto 0 do

begin

Invertido := Invertido + (n mod 10) * PotenciaDe10(i); n := n div 10;

end;

InverteNumero := Invertido; end;

Capítulo 6

1. {Procedimento que exibe um vetor na ordem inversa}

procedure EscreveVetorNaOrdemInversa(var v : TVetor; t : integer); var i : integer;

begin

for i := t downto 1 do write(v[i],' '); end;

2. {Funcao que verifica se um vetor eh palindromo}

function Palindromo(v : TVetor; t : integer) : boolean; var i : integer;

begin i := 1;

while (v[i] = v[t - i + 1]) and (i <= t div 2) do i := i + 1; if i > t div 2 then Palindromo := true else Palindromo := false; end;

3. {Procedimento que intercala dois vetores}

procedure IntercalaVetores(var v1, v2, v :TVetor; t : integer) var i : integer;

begin

for i := 1 to 2*t do if i mod 2 = 1

(18)

v[i] := v1[(i+1) div 2] else

v[i] := v2[i div 2] end.

4. {Procedimento que decompoe um vetor de inteiro em dois vetores, um com as componentes impares e outro com as componentes  pares}

procedure DecompoeVetorParesImpares(var v, v1, v2 : TVetor; t : integer; var k, l : integer); var i : integer; begin k := 0; l := 0; for i := 1 to t do if v[i] mod 2 = 1 then begin k := k + 1; v1[k] := v[i]; end else begin l := l + 1; v2[l] := v[i]; end; end;

5. {Funcao que determina a norma de um vetor} function Norma(var v : TVetor; t : integer) : real; var i : integer;

SomaQuadrados : real; begin

SomaQuadrados := 0; for i := 1 to t do

SomaQuadrados := SomaQuadrados + Sqr(v[i]);  Norma := SqrT(SomaQuadrados);

end;

6. {Funcao que determina o produto escalar de dois vetores} function ProdEscalar(var v1, v2 : TVetor; t : integer) : real; var i : integer;  p : real; begin  p := 0; for i := 1 to t do  p := p + v1[i] * v2[i]; ProdEscalar := p; end;

7. {Procedimento para extrair as componentes distintas de um vetor}

procedure ComponentesDistintas(var v1, v : TVetor; t : integer; var n : integer); var i, k : integer;

{Funcao que verifica se um valor dado esta armazenado num vetor}

function PesquisaSequencial(var v : TVetor; t : integer; x : real) : boolean; var j : integer; begin PesquisaSequencial := false;  j := 1; while (v[j] <> x) and (j < t) do  j := j + 1; if v[j] = x then PesquisaSequencial := true; end; begin n := 1; v[1] := v1[1]; for i := 2 to t do

if not PesquisaSequencial(v, t, v1[i]) then

begin

n := n + 1; v[n] := v1[i];

(19)

end; end;

8. {Funcao para sortear um numero a partir dos ultimos algarismos dos numeros sorteados pela Loteria Federal} function NumeroPremiado(var v : TVetor) : longint;

var i, Potencia10 : integer;  Num : longint;

begin

Potencia10 := 10000;

 Num := (v[5] mod 10) * Potencia10; for i := 4 downto 1 do

begin

Potencia10 := Potencia10 div 10;

 Num := Num + (v[i] mod 10) * Potencia10; end;

 NumeroPremiado := Num; end;

9. {Procedimento para inserir um valor dado num vetor numa posicao dada}

procedure InserePosicaoDada(var v : TVetor; t : integer; x : real; Pos : integer); var i : integer;

begin

if Pos <= t then

begin

for i := t downto Pos do v[i + 1] := v[i]; v[Pos] := x;

end else

writeln('O sistema nao pode fazer a insercao solicitada'); end;

10. {Procedimento para inserir um valor dado num vetor ordenado de modo que ele se mantenha ordenado} procedure InsereOrdenado(var v : TVetor; t : integer; x : real);

var i, j : integer; begin

i := 1;

while (v[i] < x) and (i <= t) do i := i + 1;

for j := t downto i do v[j + 1] := v[j]; v[i] := x;

end;

11. {Procedimento que exclui uma componente de um vetor}

procedure DeletaComponente(var v : TVetor; var t : integer; c : integer); var i, j: integer;

begin if c > t

then

writeln('Nao existe componente de ordem ',c) else begin for j := c to t do v[j] := v[j + 1]; t := t - 1; end; end;

12. {Procedimento para extrair componentes comuns dois vetores}

procedure CompComuns(var v1, v2, v : TVetor; t1, t2 : integer; var m : integer); var k, l : integer;

{Funcao que verifica se um valor dado e componente de um vetor}

function PesquisaSequencial(var v : TVetor; t : integer; x : real) : boolean; var j : integer; begin PesquisaSequencial := false;  j := 1; while (v[j] <> x) and (j < t) do  j := j + 1; if v[j] = x

(20)

then PesquisaSequencial := true; end; begin m := 0; for k := 1 to t1 do if PesquisaSequencial(v2, t2, v1[k]) then begin m := m + 1; v[m] := v1[k]; end; end;

13. {Procedimento que retorna a maior diferenca entre as componentes consecutivas de um vetor) procedure MaiorDiferenca( var v : TVetor; t : integer; var Mai : real; var Comp : integer); var Diferencas : TVetor;

k : integer;

{Funcao que retorna a maior componente de um vetor e a sua posicao no vetor} function MaiorElemento(var v : TVetor; t : integer; var Pos : integer) : real; var i : integer; Maior : real; begin Maior := v[1]; Pos := 1; for i := 1 to t do if v[i] > Maior  then begin Maior := v[i]; Pos := i; end; MaiorElemento := Maior; end; begin for k := 1 to t - 1 do Diferencas[k] := v[k + 1] - v[k];

Mai := MaiorElemento(Diferencas, t - 1, Comp); end;

14. {Funcao para corrigir um teste de multipla escolha}

function CorrigeTeste(var v1, v2 : TVetor; t : integer): integer; var i, NumPontos : integer;

begin  NumPontos := 0; for i := 1 to t do if v1[i] = v2[i] then  NumPontos := NumPontos + 1; CorrigeTeste := NumPontos; end;

15. {Programa para determinar o valor numerico de um polinomio} program ValorNumericoDePolinomio;

type TPolinomio = array[1..50] of real; var Polinomio : TPolinomio;

Grau : integer; x, VNumerico : real;

{Procedimento para armazenar os coeficientes de um polinomio num vetor} procedure ArmazenaPolinomio(var p : TPolinomio; var g : integer); var i : integer;

begin

writeln('Digite o grau do polinomio'); readln(g);

writeln('Digite os coeficientes'); for i := 1 to g + 1 do

readln(p[i]); end;

{Procedimento que exibe os coeficientes de um polinomio} procedure ExibeCoeficientes(var v : TPolinomio; g : integer); var i : integer;

(21)

for i := 1 to g + 1 do write(v[i]:0:2, ' '); end;

{Funcao que calcula o valor numerico de um polinomio}

function ValorNumerico(var p : TPolinomio; g : integer; x : real) : real; var i : integer;

ValNum : real;

function Potencia(b : real; e : integer) : real; var i : integer; Pot : real; begin Pot := 1; for i := 1 to e do Pot := Pot*b; Potencia := Pot end; begin ValNum := p[g + 1]; for i := g downto 1 do

ValNum := ValNum + p[i]*Potencia(x, g - i + 1); ValorNumerico := ValNum;

end;

{Programa principal} begin

ArmazenaPolinomio(Polinomio, Grau);

writeln('Digite o valor da variavel independente'); readln(x);

VNumerico := ValorNumerico(Polinomio, Grau, x);

writeln('O valor numerico do polinomio de grau ', Grau, ' e coeficientes '); ExibeCoeficientes(Polinomio, Grau);

writeln;

writeln('para x = ', x:0:2 , ' eh igual a ', VNumerico:0:2); end.

16. {Funcao para converter um numero do sistema decimal para o sistema binario} function DecimalBinario(n : integer) : longint;

var DigBinarios : TVetor; Binario : longint; i, j : integer;

{Funcao para calcular potencias de dez} function PotenciaDe10(e : integer) : longint; var Pot : longint;

i : integer; begin Pot := 1; for i := 1 to e do Pot := Pot*10; PotenciaDe10 := Pot; end; begin if n = 0 then DecimalBinario := 0 else begin i := 0; while n > 0 do begin i := i + 1; DigBinarios[i] := n mod 2; n := n div 2; end; i := i - 1; Binario := PotenciaDe10(i); for j := 1 to i do

Binario := Binario + DigBinarios[j] * PotenciaDe10(j - 1); DecimalBinario := Binario;

end; end;

(22)

program DecomposicaoEmFatoresPrimos; type TMatriz = array[1..13, 1..2] of integer; var Num, NFatores : integer;

Decomp : TMatriz;

{Procedimento para exibir uma matriz}

procedure ExibeMatriz(var m : TMatriz; l, c : integer); var i, j : integer; begin for i := 1 to l do begin for j := 1 to c do write(m[i, j],' '); writeln; end; end;

{Procedimento para armazenar numa matriz a decomposicao em fatores de um inteiro} procedure DecompFatores(x : integer; var m : TMatriz; var n : integer);

var Fator, Mult : integer; begin n := 0; Fator := 2; while x > 1 do begin Mult := 0;

while x mod Fator = 0 do begin Mult := Mult + 1; x := x div Fator; end; if Mult > 0 then begin n := n + 1; m[n, 1] := Fator; m[n, 2] := Mult; end; Fator := Fator + 1; end; end; {Programa principal} begin writeln('Digite um inteiro'); readln(Num);

writeln('Decomposicao em fatores de ', Num,':'); DecompFatores(Num, Decomp, NFatores); ExibeMatriz(Decomp, NFatores, 2); end.

18. {Programa que determina a media de um aluno da UFAL} program Avaliacao;

type TVetor = array[1..4] of real; var Notas : TVetor;

MedBimestral, ProvaFinal, MedFinal : real; {Procedimento para armazenar as notas} procedure ArmazenaNotas(var v : TVetor); var i : integer;

begin

writeln('Digite as notas das avaliacoes b imestrais'); for i := 1 to 4 do

readln(v[i]); end;

{Funcao para calcular a media das notas bimestrais} function Media(var v : TVetor) : real;

var i : integer; Soma : real; begin

Soma := 0; for i := 1 to 4 do

Soma := Soma + v[i]; Media := Soma/4;

(23)

end;

{Procedimento para determinar a menor nota bimestral e o bimestre em que isto ocorreu} procedure MenorNota(var v : TVetor; var m : real; var b : integer);

var i : integer; begin m := v[1];  b := 1; for i := 2 to 4 do if v[i] < m then begin m := v[i];  b := i; end; end;

{Procedimento para substituir a menor nota menor que 7 pela reavaliacao} procedure Reavaliacao(var v : TVetor);

var MenNota, NotaReav : real; Bim : integer;

Resp : char; begin

MenorNota(Notas, MenNota, Bim); if MenNota < 7

then begin

writeln('O aluno fez reavaliacao (S/N)?'); readln(Resp);

if UpCase(Resp) = 'S' then

begin

writeln('Digite a nota da reavaliacao'); readln(NotaReav); v[Bim] := NotaReav; end; end; end; {Programa principal} begin ArmazenaNotas(Notas); Reavaliacao(Notas); MedBimestral := Media(Notas); MedFinal := MedBimestral;

if (MedBimestral < 7) and (MedBimestral >= 5) then

begin

writeln('Digite a nota da prova final'); readln(ProvaFinal);

MedFinal := (MedBimestral * 6 + ProvaFinal * 4)/10; end;

if MedFinal >= 5.5 then

writeln('Aluno aprovado com media final igual a ', MedFinal:0:2) else

writeln('Aluno reprovado com media final igual a ', MedFinal:0:2); end.

19. {Procedimento que retorna a transposta de uma matriz}

procedure Transposta(var Mat, Transp : TMatriz; m, n : integer); var i, j : integer; begin for i := 1 to m do for j := 1 to n do Transp[j, i] := Mat[i, j]; end;

20. {Procedimento para permutar duas linhas de uma matriz}

procedure PermutaLinhas(var Mat : TMatriz; m, n, l, c : integer); var i, j : integer;

Aux : TMatriz; begin

(24)

Mat[l] := Mat[c]; Mat[c] := Aux[1]; end;

21. {Funcao que verifica se uma matriz quadrada e triangular}

function MatrizTriangular(var Mat : TMatriz; n : integer) : boolean; var i, j : integer; Triangular : boolean; begin Triangular := true; i := 1; while Triangular and (i <= n) do begin  j := i + 1; while Triangular and (j <= n) do if Mat[i, j] <> 0 then Triangular := false else  j := j + 1; i := i + 1; end; MatrizTriangular := Triangular; end;

22. {Funcao que verifica se uma matriz quadrada eh simetrica}

function MatrizSimetrica(var Mat : TMatriz; n : integer) : boolean; var i, j : integer;

Simetrica : boolean; begin

Simetrica := true; i := 1;

while Simetrica and (i <= n) do begin

 j := i + 1;

while Simetrica and (j <= n) do if Mat[i, j] <> Mat[j, i] then Simetrica := false else  j := j + 1; i := i + 1; end; MatrizSimetrica := Simetrica; end;

23. {Procedimento para multiplicar duas matrizes}

procedure MultiplicaMatrizes(var Mat1, Mat2, Mat : TMatriz; m1, n1, m2, n2 : integer); var i, j, k : integer; begin if n1 = m2 then begin for i := 1 to m1 do for j := 1 to n2 do begin Mat[i, j] := 0; for k := 1 to n1 do

Mat[i, j] := Mat[i, j] + Mat1[i, k]*Mat2[k, j]; end;

end else

writeln('Produto nao definido'); end;

24. {Programa para determinar os menores elementos de cada uma das linhas de uma matriz} program MenoresElementos;

type TMatriz = array [1..10, 1..10] of integer; var Matriz: TMatriz;

 NumLinhas, NumColunas : integer;

procedure ArmazenaTabela(var Mat : TMatriz; m, n : integer); var i, j : integer;

(25)

begin

writeln('Digite, por linha, os elementos da matriz'); for i := 1 to m do

for j := 1 to n do readln(Mat[i, j]); end;

procedure ExibeTabela(var Mat : TMatriz; m, n : integer); var i, j : integer; begin for i := 1 to m do begin for j := 1 to n do write(Mat[i, j],' '); writeln; end; end;

procedure MenorElemento(var Mat : TMatriz; m, n : integer); var i, j, Col, Menor : integer;

begin for i := 1 to m do begin Menor := Mat[i, 1]; Col := 1; for j := 2 to n do if Mat[i, j] < Menor  then begin Menor := Mat[i, j]; Col := j; end;

writeln(' ', i,' ', Menor, ' ', Col); end;

end;

{Programa principal} begin

writeln('Digite a ordem da matriz'); readln(NumLinhas, NumColunas);

ArmazenaTabela(Matriz, NumLinhas, NumColunas); writeln('Tabela');

ExibeTabela(Matriz, NumLinhas, NumColunas); writeln('Linha Menor Elemento Coluna');

MenorElemento(Matriz, NumLinhas, NumColunas); end.

25. {Programa para determinar escalas de viagens aereas} program EscalaViagemAerea;

type TMatriz = array[1..30, 1..30] of integer; var Distancias : TMatriz;

NumCidades, Orig, Dest, Escal : integer;

{Procedimento para armazenar as distancias entre as cidades} procedure ArmazenaDistancias(var Mat : TMatriz; m : integer); var i, j : integer;

begin

writeln('Digite as distancias entre as cidades'); for i := 1 to m do for j := i to m do if i = j then Mat[i, j] := 0 else begin readln(Mat[i][j]); Mat[j][i] := Mat[i][j]; end; end;

{Procedimento para exibir a tabela das distancias entre as cidades} procedure ExibeDistancias(var Mat : TMatriz; m : integer); var i, j : integer;

begin

(26)

for i := 1 to m do begin for j := 1 to m do write(Mat[i, j]:8); writeln; end; end;

{Funcao que determina a cidade onde deve ocorrer a escala}

function Escala(var Mat : TMatriz; m, Orig, Dest : integer) : integer; var i, j, Menor, Esc : integer;

begin

Menor := Mat[Orig, 1] + Mat[1, Dest]; Esc := 1;

for i := 2 to m do

if (Mat[Orig, i] + Mat[i, Dest] < Menor) and (i <> Orig) and (i <> Dest) then

begin

Menor := Mat[Orig, i] + Mat[i, Dest]; Esc := i; end; Escala := Esc; end; {Programa principal} begin

writeln('Digite o numero de cidades'); readln(NumCidades);

ArmazenaDistancias(Distancias, NumCidades); ExibeDistancias(Distancias, NumCidades); writeln('Digite a origem e o destino'); readln(Orig, Dest); if Distancias[Orig, Dest] > 400 then begin if Orig < Dest then

Escal := Escala(Distancias, NumCidades, Orig, Dest) else

Escal := Escala(Distancias, NumCidades, Dest, Orig); writeln('Escala entre as cidades ', Orig, ' e ', Dest, ': ', Escal) end

else

if Distancias[Orig, Dest] = 0 then

writeln('Origem e destino iguais') else

writeln('A viagem entre as cidades ', Orig, ' e ', Dest, ' deve ser feita sem escala'); end.

26. {Procedimento que exibe as combinações dos números 1, 2, ..., n, tomadas k a k. O parâmetro i controla o número de comandos  for e o parâmetro s controla o limite inferior de cada um destes comandos. Os parâmetros i e s recebem argumentos iguais a 1 (um)

quando da ativação da função. }

procedure Comb(n, k, i, s : integer); var m, j : integer; begin if i <= k  then begin for j := s to n - k + i do begin

v[i] := j; {v deve ser uma variável global do tipo vetor} s := j + 1; Comb(n, k, i + 1, s); if i = k  then begin for m := 1 to k do write(v[m],' '); writeln; end; end;

(27)

end; end;

Capítulo 7

1. {Programa para verificar se uma cadeia de caracteres é palindromo} program palindromo; var St : string; i, Comp : integer; begin writeln('Digite a palavra'); readln(St); Comp := Length(St); i := 1;

while (St[i] = St[Comp - i + 1]) and (i <= Comp div 2) do i := i + 1;

if i > Comp div 2 then

writeln(St,' eh palindromo') else

writeln(St,' nao eh palindromo'); end.

2. {Programa para determinar o número de palavras de uma frase} program ContaPalavras;

var Frase : string;

{Funcao para determinar a posicao da primeira letra de uma frase} function PrimeiraLetra(var s : string): integer;

var i : integer; begin i := 1; while s[i] = ' ' do i := i + 1; PrimeiraLetra := i; end;

{Funcao para determinar o numero de palavras de uma frase} function ContaPalavras(var s : string): integer;

var i, j, k, c : integer; begin c := Length(s); i := PrimeiraLetra(s); if i > c then j := 0 else j := 1; for k := i to c do if (s[k] = ' ') and (s[k-1] <> ' ') then  j := j + 1; ContaPalavras := j; end; {programa principal} begin

write('Digite a frase: '); readln(Frase);

writeln('Número de palavras: ', ContaPalavras(Frase)); end.

3. {Funcao que converte um inteiro do sistema decimal para o sistema binario, tratando o numero do sistema binario como uma string}

function DecimalBinario(n : integer) : string; var s, Binario : string;

i, j : integer; begin i := 0; if n = 0 then DecimalBinario := '0' else begin Binario := ''; while n > 0 do begin

(28)

i := i + 1; Str(n mod 2, s); n := n div 2; Binario := s + Binario; end; DecimalBinario := Binario; end; end;

4. {Programa para converter o numero do sistema binario, dado como uma string, para o sistema decimal} program ConverteBinarioEmDecimal;

var Decimal : integer; Binario : string; j, c, n, r : integer;

{Funcao que calcula potencias de 2}

function potenciaDe2(e : integer) : integer; var p, i : integer; begin  p := 1; for i := 1 to e do  p := 2*p;  potenciaDe2 := p; end; {Programa principal} begin

writeln('Digite o numero do sistema binário'); readln(Binario); c := Length(Binario); Decimal := 0; for j := 1 to c do begin Val(Binario[j], n, r);

Decimal := Decimal + n*potenciaDe2(c - j); end;

writeln(Binario, ' no sistema decimal: ', Decimal); end.

5. {Funcao para verificar se uma conta dada nao foi digitada incorretamente} function VerificaConta( s : string) : boolean;

type TVetor = array[1..20] of byte; var c : integer;

Digito : string;

{Procedimento para armazenar os digitos da conta}

procedure ArmazenaDigitos(var s : string; var d : TVetor; t : integer); var j, r : integer;

begin

for j := 1 to t do Val(s[j], d[j], r); end;

{Funcao para determinar o digito verificador} Function DigitoVerificador(s : string) : integer; var i, Comp, Soma, Dv : integer;

Digitos : TVetor; begin

Comp := Length(s) - 1;

ArmazenaDigitos(s, Digitos, Comp); Soma := 0;

for i := Comp downto 1 do

Soma := Soma + Digitos[i]*(Comp - i + 2); Dv := 11 - Soma mod 11; if (Dv = 10) or (Dv = 11) then Dv := 0; DigitoVerificador := Dv; end;

{Inicio da funcao VerificaConta} begin

c := Length(s);

Str(DigitoVerificador(s), Digito); if s[c] = Digito[1]

(29)

VerificaConta := true else

VerificaConta := false; end;

6. {Funcao para determinacao do digito verificador de codigos de barra} function DigitoVerificador( s : string) : integer;

type TVetor = array[1..20] of byte; var i, Comp, Soma, Dv : integer;

Digitos : TVetor;

{Procedimento para armazenar os digitos da conta}

procedure ArmazenaDigitos(var s : string; var d : TVetor; t : integer); var j, r : integer;

begin

for j := 1 to t do Val(s[j], d[j], r); end;

{Inicio da funcao DigitoVerificador} begin

Comp := Length(s);

ArmazenaDigitos(s, Digitos, Comp); Soma := 0;

for i := 1 to Comp do if i mod 2 = 1

then

Soma := Soma + Digitos[i] else

Soma := Soma + 3*Digitos[i]; Dv := Soma mod 10; if Dv <> 0 then Dv := 10 - Dv; DigitoVerificador := Dv; end;

7. {Programa para converter um nome proprio no formato Ultimo Sobrenome/Nome} program FormatoPassagemAerea;

var Nome, Identificacao : string;

{Funcao que retorna a primeira palavra de um texto} function PrimPalavra(s : string) : string;

var i, c : integer; PrimPal : string; begin c := Length(s); PrimPal := ''; i := 1;

while (s[i] <> ' ') and (i <= c) do begin

PrimPal := PrimPal + s[i]; i := i + 1;

end;

PrimPalavra := PrimPal; end;

{Funcao que retorna a ultima palavra de um texto} function UltPalavra(s : string) : string;

var i, c : integer; UltPal : string; begin c := Length(s); UltPal := ''; i := c;

while (s[i] <> ' ') and (i > 0) do begin

UltPal := s[i] + UltPal; i := i - 1; end; UltPalavra := UltPal; end; {Programa principal} begin

(30)

readln(Nome);

Identificacao := UltPalavra(Nome) + '/' + PrimPalavra(Nome); writeln(Identificacao);

end.

8. {Programa para converter um nome proprio para o formato de referencia bibliografica} program ReferenciaBibliografica

var Nome, Referencia : string;

{Funcao que retorna uma palavra de um texto a partir de uma posicao dada} function Palavra(s : string; p : integer) : string;

var c : integer; Pal : string; begin c := Length(s); Pal := ''; while (s[p] <> ' ') and (p <= c) do begin Pal := Pal + s[p];  p := p + 1; end; Palavra := Pal; end;

{Funcao para deteccao de particulas de, do, dos, da, das, e} function Particula(s : string; i : integer) : boolean;

var p : string; begin

Particula := false;  p := Palavra(s, i + 1);

if (p = 'e') or (p = 'de') or (p = 'do') or (p = 'da') or (p = 'das') or (p = 'dos') then

Particula := true; end;

{Funcao que retorna as iniciais dos nomes e sobrenomes} function PrimLetras(s : string) : string;

var i, c : integer; PrimLet : string; begin c := Length(s); PrimLet := s[1]; for i := 2 to c do

if (s[i] = ' ') and (s[i + 1] <> ' ') and (not Particula(s, i)) then

PrimLet := PrimLet + '. ' + s[i + 1]; c := Length(PrimLet);

Delete(PrimLet, c - 1, 2); PrimLetras := PrimLet; end;

{Funcao que retorna a ultima palavra de um texto} function UltPalavra(s : string) : string;

var i, c : integer; UltPal : string; begin

c := Length(s); UltPal := ''; i := c;

while (s[i] <> ' ') and (i > 0) do begin

UltPal := s[i] + UltPal; i := i - 1; end; UltPalavra := UltPal; end; {Programa principal} begin

writeln('Digite o nome do autor'); readln(Nome);

Referencia := UltPalavra(Nome) + ', ' + PrimLetras(Nome); writeln(Referencia);

(31)

Capítulo 8

2. {Programa para reunir dois arquivos} type TRegistro = record

Mat : string[10];  Nome : string[40]; end;

TArquivo = file of TRegistro; var a, a1, a2 : TArquivo;

Reg : TRegistro;

 Narq1, Narq2, Narq : string[12];

{Funcao que verifica a existencia e um arquivo} function ExisteArquivo(var f : TArquivo): boolean; begin

{$I-} Reset(f); if IOResult = 0

then ExisteArquivo := true else ExisteArquivo := false; {$I+}

end;

{Funcao que verifica se uma matricula já esta cadastrada}

function Consulta(var f : TArquivo; Mat : string) : integer; var r : TRegistro;

begin

Reset(f); read(f, r);

while (not Eof (f)) and (r.Mat <> Mat) do read(f, r); if r.Mat = Mat then Consulta := FilePos(f) – 1 else Consulta := -1; end;

{Procedimento que reune dois arquivos} procedure ReunArq(var f1, f2, f : TArquivo); var r : TRegistro;

begin

Reset(f1); Rewrite(f);

while not Eof (f1) do begin

read(f1, r); write(f, r); end;

Reset(f2);

while not Eof (f2) do begin read(f2, r); if Consulta(f, r.Mat) = -1 then write(f, r); end; Close(f1); Close(f2); Close(f); end; {Programa principal} begin

writeln('Digite os nomes dos arquivos a serem reunidos'); readln(Narq1); readln(Narq2); Assign(a1, Narq1); if ExisteArquivo(a1) then begin Assign(a2, Narq2); if ExisteArquivo(a2) then

(32)

begin

writeln('Digite o nome do novo arquivo'); readln(Narq);

Assign(a, Narq); if not ExisteArquivo(a)

then

ReunArq(a1, a2, a); else

writeln('Arquivo ', Narq, ' ja existe'); end

else

writeln('Arquivo ', Narq2, ' nao existe'); end

else

writeln('Arquivo ', Narq1, ' nao existe'); end.

3. {Programa para gerar um arquivo com salarios maiores que 5000} type TRegistro = record

Mat : string[10]; Salario : real; end;

TArquivo = file of TRegistro; var Arq, Arq1 : TArquivo;

 NomeArquivo1, NomeArquivo : string[12];

procedure AltosSalarios(var f1, f : TArquivo); var r : TRegistro;

begin

Reset(f1); Rewrite(f);

while not Eof (f1) do begin read(f1, r); if r.Salario > 5000 then write(f, r); end; end; {Programa principal} begin

writeln('Digite o nome do arquivo a ser pesquisado'); readln(NomeArquivo1);

Assign(Arq1, NomeArquivo1);

writeln('Digite o nome do novo arquivo'); readln(NomeArquivo);

Assign(Arq, NomeArquivo); AltosSalarios(Arq1, Arq); end.

4. {Procedimento para inclusao de registros num arquivo ordenado, utilizando um arquivo auxiliar} procedure IncluiRegistroOrdenadoVersao1(var f : TArquivo; r : TRegistro);

var Aux : TArquivo; Reg : TRegistro; begin Reset(f); Assign(Aux, 'Temp'); Rewrite(Aux); read(f, Reg);

while (r.Mat > Reg.Mat) and not Eof (f) do begin write(Aux, Reg); read(f, Reg); end; if Eof (f) then write(Aux, Reg) else Seek (f, FilePos(f) - 1); write(Aux, r);

while not Eof (f) do begin

(33)

read(f, Reg); write(Aux, Reg); end; Close(f); Close(Aux); Erase(f); Rename(Aux, NomeArquivo); end;

{Procedimento para inclusoes de registros num arquivo ordenado, sem a utilizacao de um arquivo auxiliar} procedure IncluiRegistroOrdenadoVersao2(var f : TArquivo; r : TRegistro);

var Reg : TRegistro; i, p, t : integer; begin

Reset(f); read(f, Reg);

while (r.Mat > Reg.Mat) and not Eof (f) do read(f, Reg); if Eof (f) then write(f, Reg) else begin  p := FilePos(f) - 1; t := FileSize(f); for i := t downto p do begin read(f, Reg); write(f, Reg); Seek (f, FilePos(f) - 2); end; end; Seek (f, p); write(f, r); Close(f); end;

5. {Procedimento para inserir um arquivo ordenado em outro arquivo ordenado} procedure InsereOrdenado(var f1, f2 : TArquivo);

var r : TRegistro;

{Procedimento para incluir um registro num arquivo ordenado} procedure IncluiRegistroOrdenado(var f : TArquivo; r : TRegistro); var Aux : TArquivo;

Reg : TRegistro; begin

Reset(f);

Assign(Aux, 'Temp'); Rewrite(Aux); read(f, Reg);

while (r.Matr > Reg.Matr) and not Eof (f) do begin write(Aux, Reg); read(f, Reg); end; if Eof (f) then write(Aux, Reg) else Seek (f, FilePos(f) - 1); write(Aux, r);

while not Eof (f) do begin read(f, Reg); write(Aux, Reg); end; Close(f); Close(Aux); Erase(f); Rename(Aux, NomeArquivo); end;

{Comandos do procedimento InsereOrdenado} begin

(34)

Reset(f1); Reset(f2);

while not Eof (f1) do begin

read(f1, r);

IncluiRegistroOrdenado(f2, r); end;

end;

6. {Procedimento para "cruzamento" de dois arquivos} procedure RegistrosComuns(var f1, f2, f : TArquivo); var r : TRegistro; n : integer; begin Reset(f1); Reset(f2); Rewrite(f);

while not Eof (f1) do begin read(f1, r); n := Consulta(f2, r.Matr); if Consulta(f2, r.Matr) <> -1 then write(f, r); end; end;

7. {Procedimento que permuta os conteúdos de dois registros de um arquivo, dados pelos valores do campo Mat} procedure TrocaRegistro(var f : TArquivo; Mat1, Mat2 : string);

var Reg1, Reg2 : TRegistro; n1, n2 : integer; begin Reset(f); n1 := Consulta(f, Mat1); n2 := Consulta(f, Mat2); Seek (f, n1); read(f, Reg1); Seek (f, n2); read(f, Reg2); Seek (f, n1); write(f, Reg2); Seek (f, n2); write(f, Reg1); end;

8. {Programa que exclui os comentarios de um programa em Pascal} program ExcluiComentario;

var Arq : text;

 NomeArquivo : string;

procedure ExcluiComentarios(var f : text); var s : string; Aux : text; c : char; begin Reset(f); Assign(Aux, 'Temp'); Rewrite(Aux); while not Eof (f) do

begin read(f, c); if c <> '{' then write(Aux, c) else begin read(f, c); if c <> '$' then while c <> '}' do read(f, c) else

(35)

begin write(Aux, '{'); write(Aux, c); read(f, c); while c <> '}' do begin write(Aux,c); read(f, c); end; write(Aux, '}'); end; end; end; Close(f); Close(Aux); Erase(f); Rename(Aux, NomeArquivo); end; {Programa principal} begin

writeln('Digite o nome do arquivo'); readln(NomeArquivo);

Assign(Arq, NomeArquivo); ExcluiComentarios(Arq); end.

Capítulo 9

1. {Funcao que realiza busca no inicio e no fim de um vetor, sucessivamente} function PesquisaPessimista(var v : TVetor; t : integer; x : real) : integer; var j : integer;

begin

PesquisaPessimista := -1;  j := 1;

while (v[j] <> x) and (v[t-j+1] <> x) and (j <= t div 2) do  j := j + 1; if v[j] = x then PesquisaPessimista := j else if v[t-j+1] = x then PesquisaPessimista := t-j+1; end;

2. {Procedimento que implementa uma versao do SelectSort} procedure SelectSort1(var v : TVetor; t : integer); var i, j : integer;

{Procedimento para permutar os conteúdos de duas variáveis} procedure Troca(var x, y : integer);

begin

x := x + y; y := x - y; x := x - y; end;

[Funcao que retorna o indice da componente de maior valor de um vetor} function IndiceDoMaiorElemento(var v : TVetor; t : integer) : integer; var i, k, Maior : integer;

begin k := 1; Maior := v[1]; for i := 2 to t do if (v[i] > Maior) then begin Maior := v[i]; k := i; end; IndiceDoMaiorElemento := k; end; {Comandos do SelectSort}

Referências

Documentos relacionados

O problema é exatamente este: assim como quem ganha mil reais e tem problemas financeiros, quem ganha “rios de dinheiro” não se dá por satisfeito até gastar tudo que recebeu

É perceptível, desta forma, o constante aumento do aprofundamento dos personagens: os “príncipes” têm agora não só nome e falas, mas personalidades bem desenvolvidas,

Por tudo o que foi dito se conclui que as alterações retroativas aplicadas no cálculo do direito à dedução de bens e serviços de utilização mista, não

1. Os encarregados de educação ou os alunos devem confirmar, mensalmente, até.. ao dia 10 de cada mês, a requisição que se encontrará disponível na plataforma educativa do

Com esse horizonte conceitual, os artigos do dossiê “O espaço cênico no audiovisual: trânsitos entre teatro e cinema” trazem olhares diversificados sobre as ligações entre

- Remover as pastilhas usadas e retornar todo o parafuso de regulagem em seguida montar uma pastilha nova do lado da roda, empurrando com a mão a pinça no sentido do cilindro de

A Mistanásia está intimamente ligada à falta de políticas públicas eficazes para a garantia dos direitos à vida e á saúde e um dos fatores da ocorrência diuturna

Os investidores estão avisados de que tais previsões acerca do futuro estão e serão sujeitas a inúmeros riscos, incertezas e fatores relacionados às operações