Respostas Pascal Jaime Evaristo

December 14, 2018 | Author: julyms18 | Category: Exponentiation, Matrix (Mathematics), Numbers, Elementary Mathematics, Physics & Mathematics
Share Embed Donate


Short Description

Download Respostas Pascal Jaime Evaristo...

Description

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 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:

1. Atravessem um índio e um branco. 2. Retorne o índio. 3. Atravessem dois brancos. 4. Retorne um branco. 5. Atravessem dois índios. 6. Retornem um índio e um branco. 7. Atravessem dois índios. 8. Retorne um branco. 9. Atravessem dois brancos. 10. Retorne um branco. 11. Atravessem dois brancos. 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 origem para auxiliar . 2. Disco 2 da origem para o destino. 3. Disco 1 da auxiliar para o destino. Para o caso n = 3, basta observar que é necessário apenas transportar os dois discos 1 e 2 da origem  para auxiliar  (que é o caso anterior), transportar o disco 3 da origem para o destino e os discos 1 e 2 da torre auxiliar para o destino (que é, novamente, o caso anterior). 1. Disco 1 da origem para destino. 2. Disco 2 da origem para auxiliar . 3. Disco 1 do destino para auxiliar . 4. Disco 3 da origem para destino. 5. Disco 1 da auxiliar  para  para origem. 6. Disco 2 da auxiliar para o destino. 7. Disco 1 da origem para o destino. 3. Para facilitar a linguagem, indiquemos por P(m, n) = 0 se as esferas m e n têm o mesmo peso e por P(m, n) > 0 se a esfera m pesa mais que a esfera n. Temos então a seguinte solução:

1. Pese as esferas 1 e 2. 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.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.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.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.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.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. Para 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.

1. Chame de A o primeiro número dado. 2. Chame de N o número de elementos da relação 3. Faça P = A. 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.2. Substitua o valor de P por P x A. 5. Calcule M = Raiz(P, N) 6. Forneça M para o valor da média. 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 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 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. 2. Calcule o resto r da divisão de n por 7 3. Se r = 1 forneça como resposta segunda-feira.

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 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:

1. Atravessem um índio e um branco. 2. Retorne o índio. 3. Atravessem dois brancos. 4. Retorne um branco. 5. Atravessem dois índios. 6. Retornem um índio e um branco. 7. Atravessem dois índios. 8. Retorne um branco. 9. Atravessem dois brancos. 10. Retorne um branco. 11. Atravessem dois brancos. 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 origem para auxiliar . 2. Disco 2 da origem para o destino. 3. Disco 1 da auxiliar para o destino. Para o caso n = 3, basta observar que é necessário apenas transportar os dois discos 1 e 2 da origem  para auxiliar  (que é o caso anterior), transportar o disco 3 da origem para o destino e os discos 1 e 2 da torre auxiliar para o destino (que é, novamente, o caso anterior). 1. Disco 1 da origem para destino. 2. Disco 2 da origem para auxiliar . 3. Disco 1 do destino para auxiliar . 4. Disco 3 da origem para destino. 5. Disco 1 da auxiliar  para  para origem. 6. Disco 2 da auxiliar para o destino. 7. Disco 1 da origem para o destino. 3. Para facilitar a linguagem, indiquemos por P(m, n) = 0 se as esferas m e n têm o mesmo peso e por P(m, n) > 0 se a esfera m pesa mais que a esfera n. Temos então a seguinte solução:

1. Pese as esferas 1 e 2. 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.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.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.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.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.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. Para 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.

1. Chame de A o primeiro número dado. 2. Chame de N o número de elementos da relação 3. Faça P = A. 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.2. Substitua o valor de P por P x A. 5. Calcule M = Raiz(P, N) 6. Forneça M para o valor da média. 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 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 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. 2. Calcule o resto r da divisão de n por 7 3. Se r = 1 forneça como resposta segunda-feira.

4. Se r = 2 forneça como resposta terça-feira. 5. Se r = 3 forneça como resposta quarta-feira. 6. Se r = 4 forneça como resposta quinta-feira. 7. Se r = 5 forneça como resposta sexta-feira. 8. Se r = 6 forneça como resposta sábado. 9. Se r = 0 forneça como resposta domingo. 6. 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). 2. V(baterista). 3. A(guitarrista, vocal). 4. V(baixista) 5. A(baixista, baterista)

Capítulo 2 1a. 2 1b. true 2a. {Programa que converte uma temperatura em graus Farenheit para graus Celsius} program ConversaoTemperatura; var Celsius, Farenheit : real; begin writeln('Digite a temperatura em graus Farenheit'); readln(Farenheit); Celsius := 5*(Farenheit - 32)/9; writeln(Farenheit:0:2, ' graus Farenheit correspondem a ', Celsius:0:2, ' graus Celsius'); end. 2b. {Programa para gerar o invertido de um inteiro dado} program InverteInteiro; var Num, Invertido, Unidade, Dezena, Centena : integer; begin writeln('Digite o inteiro (com tres algarismos)'); readln (Num); Unidade := Num mod 10; Dezena := (Num mod 100) div 10; Centena := Num div 100; Invertido := Unidade * 100 + Dezena * 10 + Centena; writeln('O invertido de ', Num, ' eh ', Invertido); end. 2c. {Programa para somar duas fracoes ordinarias} program SomaFracoes; var Num1, Den1, Num2, Den2, Num, Den: integer; begin writeln('Digite as fracoes'); readln (Num1, Den1, Num2, Den2);  Num := Num1 * Den2 + Num2 * Den1; Den := Den1 * Den2; writeln('(', Num1, '/', Den1, ') + (', Num2, '/', Den2,') = (', Num, '/', Den, ')'); end. 2d. {Programa que determina o menor multiplo de um inteiro maior que um outro inteiro} program MenorMultiplo; var n, k, MenorMult : integer; begin writeln('Digite dois inteiros '); readln (n, k); MenorMult := n - n mod k + k; writeln('O menor multiplo de ', k, ' maior que', n, ' ‚ ', MenorMult); end. 2e. {Programa que determina o perimetro de um poligono regular inscrito numa circunferencia} program PerimetroPoligonoInscrito; var NumLados : integer; Raio, Perimetro: real; begin writeln('Digite o numero de lados do poligono'); readln(NumLados); writeln('Digite o raio da circunferencia');

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;

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 writeln(x, ' eh quadrado perfeito de raiz quadrada igual a ', Raiz:0:0)

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);

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 Dias := Dias + 29

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;

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.

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 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 then

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 ', NumMoedas,' moedas de ', Moeda, ' Centavos'); writeln(' 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 = 3 then begin

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 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;

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 Aux[1] := Mat[l];

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 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

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

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

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 Maior) then begin Maior := v[i]; k := i; end; IndiceDoMaiorElemento := k; end; {Comandos do SelectSort}

View more...

Comments

Copyright ©2017 KUPDF Inc.
SUPPORT KUPDF