![Page 1: 47434253 Respostas Dos Exercicios Do Livro Jaime Evaristo Programando Com Pascal](https://reader035.vdocuments.mx/reader035/viewer/2022081717/5448eb7db1af9f5f618b4c1d/html5/thumbnails/1.jpg)
Aprendendo a
ProgramarProgramando
na Linguagem C
Para Iniciantes
Jaime Evaristo
Respostas dos Exercícios Propostos
![Page 2: 47434253 Respostas Dos Exercicios Do Livro Jaime Evaristo Programando Com Pascal](https://reader035.vdocuments.mx/reader035/viewer/2022081717/5448eb7db1af9f5f618b4c1d/html5/thumbnails/2.jpg)
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 três 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 auxilia.4. Disco 3 da origem para destino.5. Disco 1 da auxiliar para origem.6. Disco 2 da auxiliar para o destino.7. Disco 1 da origem para o destino.
3. Indiquemos por P(m, n) = 0 se m e n têm o mesmo peso e P(m, n) > 0 se a esfera m é mais pesada que a esfera n. Temos então a seguinte proposta:
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.
![Page 3: 47434253 Respostas Dos Exercicios Do Livro Jaime Evaristo Programando Com Pascal](https://reader035.vdocuments.mx/reader035/viewer/2022081717/5448eb7db1af9f5f618b4c1d/html5/thumbnails/3.jpg)
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. A partir daí, a média geométrica é raiz nésima desse produto.
1. Chame de A o primeiro número dado.2. Chame de N o número de elementos da relação3. 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, repetemse em ciclos de 7 dias. Assim, se 01/01/1900 foi uma segundafeira, 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 73. Se r = 1 forneça como resposta segundafeira.4. Se r = 2 forneça como resposta terçafeira.5. Se r = 3 forneça como resposta quartafeira.6. Se r = 4 forneça como resposta quintafeira.7. Se r = 5 forneça como resposta sextafeira.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:
![Page 4: 47434253 Respostas Dos Exercicios Do Livro Jaime Evaristo Programando Com Pascal](https://reader035.vdocuments.mx/reader035/viewer/2022081717/5448eb7db1af9f5f618b4c1d/html5/thumbnails/4.jpg)
1. A(baterista, baixista).2. V(baterista).3. A(guitarrista, vocal).4. V(baixista)5. A(baixista, baterista)
Capítulo 2
1.a) (((9) + sqrt((9)*(9) 4*3*6))/(2*3)) = ((9 + sqrt(81 – 72))/6) = ((9 + sqrt(9))/6) = = ((9 + 3)/6) = (12/6) = 2.
1.b) ((pow(3, 2) == 9) && (acos(0) == 0)) || (4 % 8 == 3) = (1 && 0) || 0 = 0 || 0 = 0.
2.a) /*Programa que converte uma temperatura dada em graus Fahrenheit para graus Celsius */
#include <stdio.h>main(){float Fahrenheit, Celsius;printf("Digite a temperatura em Fahrenheit");scanf("%f", &Fahrenheit);Celsius = 5 * (Fahrenheit 32)/9;printf("A temperatura de %.2f Fahrenheit corresponde a %.2f Celsius ", Fahrenheit,
Celsius);}
2.b) /*Programa que inverte um numero com tres algarismos*/#include <stdio.h>main(){int Num, Invert, Unid, Dez, Cent;printf("Digite o numero a inverter ");scanf("%d", &Num);Unid = Num % 10;Dez = (Num % 100)/10;Cent = Num/100;Invert = Unid*100 + Dez*10 + Cent;printf("Invertendose %d obtemos %d \n", Num, Invert);}
2.c /*Programa para somar duas frações*/#include <stdio.h>main(){int Num1, Den1, Num2, Den2, Num, Den;printf("Digite os termos das fracoes \n");
![Page 5: 47434253 Respostas Dos Exercicios Do Livro Jaime Evaristo Programando Com Pascal](https://reader035.vdocuments.mx/reader035/viewer/2022081717/5448eb7db1af9f5f618b4c1d/html5/thumbnails/5.jpg)
scanf("%d %d %d %d", &Num1, &Den1, &Num2, &Den2);Num = Num1*Den2 + Num2*Den1;Den = Den1*Den2;printf("(%d/%d) + (%d/%d) = (%d/%d)", Num1, Den1, Num2, Den2, Num, Den);}
2.d) /* Programa que determina o maior multiplo de um inteiro menor ou igual a outro inteiro*/
#include <stdio.h>main(){int Num, Divisor, MaiorMultiplo;printf("Digite o inteiro do qual ser o número procurado deve ser multiplo \n");scanf("%d", &Divisor);printf("Digite o inteiro que deve ser maior do o que múltiplo procurado\n");scanf("%d", &Num);MaiorMultiplo = Num Num % Divisor;printf(" \n O maior multiplo de %d menor do que ou igual %d e' %d \n", Divisor, Num,
MaiorMultiplo);}
2.e) /*Programa para calcular o perimetro de um poligono regular de n lados inscrito numa circunferencia de raio r*/
#include <stdio.h>#include <math.h>main(){const float Pi = 3.1416;float r, Perim, Seno;int n;printf("Digite o numero de lados do poligono e o raio \n");scanf("%d %f", &n, &r);Perim = 2*n*r*sin(Pi/n);printf("Perimetro do poligono regular de %d lados inscrito numa circunferencia de raio
%.2f: %.2f \n", n, r, Perim);}
3. /*Programa para permutar os conteudos de duas variaveis sem utilizar uma variavel auxiliar*/
#include <stdio.h>main(){float x, y;printf("Digite os dois numeros \n");scanf("%f %f", &x, &y);printf("Conteudos antes da troca x = %0.1f, y = %0.1f \n", x, y);x = x + y;y = x y;
![Page 6: 47434253 Respostas Dos Exercicios Do Livro Jaime Evaristo Programando Com Pascal](https://reader035.vdocuments.mx/reader035/viewer/2022081717/5448eb7db1af9f5f618b4c1d/html5/thumbnails/6.jpg)
x = x y;printf("Conteudos depois da troca x = %0.2f, y = %0.2f \n", x, y);}
4. /*Programa para determinar entrada mais duas parcelas inteiras de uma compra*/#include <stdio.h>main(){float Compra, Entrada;int Parcelas;printf("Digite o valor da compra: ");scanf("%f", &Compra);Parcelas = Compra/3;Entrada = Compra 2*Parcelas;printf("Entrada = %0.2f, Parcelas %d.00 \n", Entrada, Parcelas);}
5. /*Programa para converter um tempo dado em segundos para horas, minutos e segundos*/
#include <stdio.h>main(){int Tempo, Horas, Minutos, Segundos;printf("Digite o valor do intervalo de tempo (em segundos): ");scanf("%d", &Tempo);Horas = Tempo/3600;Minutos = (Tempo % 3600)/60;Segundos = Tempo % 60;printf("O intervalo de tempo de %d segundos equivale a %d h %d min %d s \n", Tempo,
Horas, Minutos, Segundos);}
6. /*Programa para converter um tempo dado em minutos para horas, minutos e segundos*/#include <stdio.h>main(){float Tempo, Segundos;int Horas, Minutos;printf("Digite o valor do intervalo de tempo (em minutos): ");scanf("%f", &Tempo);Horas = Tempo/60;Minutos = Tempo 60*Horas;Segundos = (Tempo 60*Horas Minutos)*60;printf("O intervalo de tempo de %.2f min equivale a %d h %d min %.2f s \n", Tempo,
Horas, Minutos, Segundos);}
7. /*Programa para discriminar as notas de um saque num caixa eletrônico*/
![Page 7: 47434253 Respostas Dos Exercicios Do Livro Jaime Evaristo Programando Com Pascal](https://reader035.vdocuments.mx/reader035/viewer/2022081717/5448eb7db1af9f5f618b4c1d/html5/thumbnails/7.jpg)
#include <stdio.h>main(){int s, Saque, Notas100, Notas50, Notas10, Notas5, Notas1;printf("Digite o valor do saque: ");scanf("%d", &Saque);Notas100 = Saque/100;s = Saque % 100;Notas50 = s/50;s = s % 50;Notas10 = s/10;s = s % 10;Notas5 = s/5;Notas1 = s % 5;printf("Valor do saque: %d \n Distribuicao da notas: \n %d de 100 \n %d notas de 50 \n %d
notas de 10 \n %d notas de 5 \n %d notas de 1", Saque, Notas100, Notas50, Notas10, Notas5, Notas1);
}
8. /*Programa para determinar a prestação de um financiamento*/#include <math.h>main(){float Valor, i, Coef, Pot, Prestacao;int n;printf("Digite o valor do financiamento: ");scanf("%f", &Valor);printf("Digite o valor da taxa: ");scanf("%f", &i);i = i/100;puts("Digite o número de prestações: ");scanf("%d", &n);Pot = pow(1 + i, n);Coef = (Pot 1)/(i*Pot);Prestacao = Valor/Coef;printf("Financiamento: %.2f\n Taxa: %.2f\n Número de prestações: %d\n Valor da
prestação: %.2f", Valor, 100*i, n, Prestacao);}
Capítulo 3
1. /*Programa que determina o intervalo de tempo decorrido entre dois instantes*/main(){int h1, min1, s1, h2, min2, s2, h, min, s;
![Page 8: 47434253 Respostas Dos Exercicios Do Livro Jaime Evaristo Programando Com Pascal](https://reader035.vdocuments.mx/reader035/viewer/2022081717/5448eb7db1af9f5f618b4c1d/html5/thumbnails/8.jpg)
puts("Digite o instante inicial (horas, minutos e segundos)");scanf("%d %d %d", &h1, &min1, &s1);puts("Digite o instante final (horas, minutos e segundos)");scanf("%d %d %d", &h2, &min2, &s2);h = h2 h1;min = min2 min1;s = s2 s1;if ((h < 0) || ((h == 0) && (min < 0)) || ((h == 0) && (min == 0) && (s < 0)))
puts("Dados invalidos! O segundo instante é anterior ao primeiro");else
{if (s < 0)
{min = min 1;s = s + 60;}
if (min < 0){h = h 1;min = min + 60;}
printf( "Entre os instantes %d h %d min %d s e %d h %d min %d s passaramse %d h %d min %d s", h1, min1, s1, h2, min2, s2, h, min, s);
}}
2. /*Programa para arredondar um numero dado*/#include <stdio.h>main(){float Num, ParteFrac;int Arredondamento;printf("Digite um numero ");scanf("%f", &Num);Arredondamento = Num;ParteFrac = Num Arredondamento;if (ParteFrac >= 0.5)
Arredondamento = Arredondamento + 1;printf("Aredondando %f obtemos %d ", Num, Arredondamento);}
3. /*Programa para verificar se um inteiro dado e um quadrado perfeito*/#include <stdio.h>#include <math.h>main(){
![Page 9: 47434253 Respostas Dos Exercicios Do Livro Jaime Evaristo Programando Com Pascal](https://reader035.vdocuments.mx/reader035/viewer/2022081717/5448eb7db1af9f5f618b4c1d/html5/thumbnails/9.jpg)
float RaizReal, ParteFrac;int Num, RaizInteira;printf("Digite um numero ");scanf("%d", &Num);RaizReal = sqrt(Num);RaizInteira = RaizReal;ParteFrac = RaizReal RaizInteira;if (ParteFrac == 0)
printf("%d eh quadrado perfeito de raiz igual a %d \n", Num, RaizInteira);else
printf("%d nao eh quadrado perfeito \n ", Num);}
4. /*Progrma para determinar o maior de tres numeros dados*/#include <stdio.h>main(){float a, b, c, Maior;printf("Digite tres numeros");scanf("%f %f %f", &a, &b, &c);Maior = a;if ((b > a) || (c > a))
if (b > c)Maior = b;
elseMaior = c;
printf("O maior dos numeros %.2f , %.2f e %.2f e' %.2f \n", a, b, c, Maior);}
5. /*Programa para classificar um triangulo quanto ao comprimento dos lados*/#include <stdio.h>main(){float a, b, c;printf("Digite os comprimentos dos lados: \n");scanf("%f %f %f", &a, &b, &c);if ((a < b + c) && (b < a + c) && (c < a +b))
if ((a == b) && (b == c))printf("O triangulo de lados %0.2f, %0.2f e %0.2f e equilatero", a, b, c);
elseif ((a == b) || (a == c) || (b == c))
printf("O triangulo de lados %0.2f, %0.2f e %0.2f e isosceles", a, b, c);else
printf("O triangulo de lados %0.2f, %0.2f e %0.2f e escaleno", a, b, c);else
printf("Os numeros dados nao sao comprimentos dos lados de um triangulo");}
![Page 10: 47434253 Respostas Dos Exercicios Do Livro Jaime Evaristo Programando Com Pascal](https://reader035.vdocuments.mx/reader035/viewer/2022081717/5448eb7db1af9f5f618b4c1d/html5/thumbnails/10.jpg)
6. /*Programa para verificar se um triangulo de lados dados e retangulo*/#include <stdio.h>main(){float a, b, c, Hip, Cat1, Cat2;printf("Digite os comprimentos dos lados: \n");scanf("%f %f %f", &a, &b, &c);Cat1 = b;Cat2 = c;if ((a < b + c) && (b < a + c) && (c < a +b))
{if ((a > b) && (a > c))
Hip = a;else
if (b > c){Hip = b;Cat1 = a;}
else{Hip = c;Cat2 = a;}
if (Hip*Hip == Cat1*Cat1 + Cat2*Cat2)printf("Triangulo retangulo de hipotenusa %0.2f e catetos %0.2f e %0.2f", Hip,
Cat1, Cat2);else
printf("O triangulo de lados %0.2f, %0.2f e %0.2f nao e retangulo", a, b, c);}
elseprintf("Os numeros dados nao sao comprimentos dos lados de um triangulo");
}
7. /*Programa para determinar as raizes de uma equacao do segundo grau*/#include <stdio.h>#include <math.h>main(){float a, b, c, Imag, Real, Delta, x1, x2;printf("Digite os coeficientes \n");scanf("%f %f %f", &a, &b, &c);if (a != 0){Real = b/(2*a);Delta = b*b 4*a*c;if (Delta >= 0)
![Page 11: 47434253 Respostas Dos Exercicios Do Livro Jaime Evaristo Programando Com Pascal](https://reader035.vdocuments.mx/reader035/viewer/2022081717/5448eb7db1af9f5f618b4c1d/html5/thumbnails/11.jpg)
{Imag = sqrt(Delta)/(2*a);x1 = Real + Imag;x2 = Real Imag;printf("As raizes da equacao de coeficientes %.2f, %.2f e %.2f sao %.2f e %.2f ", a, b,
c, x1, x2);}
else{Imag = sqrt(Delta)/(2*a);printf("As raizes da equacao de coeficientes %.2f , %.2f e %.2f sao %.2f + %.2fi e %.2f
%.2fi ", a, b, c, Real, Imag, Real, Imag);}
}else
printf("A equacao nao e do segundo grau");}
8. /* Programa para determinar a idade de uma pessoa em anos, meses e dias*/#include <stdio.h>main(){int DiaNasc, MesNasc, AnoNasc, DiaAtual, MesAtual, AnoAtual, Anos, Meses, Dias;printf("Digite a data do nascimento \n");scanf("%d %d %d", &DiaNasc, &MesNasc, &AnoNasc);printf("Digite a data de hoje \n");scanf("%d %d %d", &DiaAtual, &MesAtual, &AnoAtual);Anos = AnoAtual AnoNasc;Meses = MesAtual MesNasc;Dias = DiaAtual DiaNasc;if ((Anos < 0) || ((Anos == 0) && (Meses < 0)) || ((Anos == 0) && (Meses == 0) && (Dias
< 0)))printf("Data de nascimento invalida");
else{if (Meses < 0)
{Anos = Anos 1;Meses = Meses + 12;}
if (Dias < 0){if (Meses > 0)
Meses = Meses 1;else
Anos = Anos 1;
![Page 12: 47434253 Respostas Dos Exercicios Do Livro Jaime Evaristo Programando Com Pascal](https://reader035.vdocuments.mx/reader035/viewer/2022081717/5448eb7db1af9f5f618b4c1d/html5/thumbnails/12.jpg)
switch (MesNasc){case 2 :
if (AnoAtual % 4 == 0)Dias = Dias + 29;
elseDias = Dias + 28;
break;case 4: case 6: case 9: case 11:
Dias = Dias + 30;break;
default: Dias = Dias + 31;};
}printf("Idade = %d ano(s), %d mes(es) e %d dia(s)", Anos, Meses, Dias);}
}
9. /*Programa para calular a nota minima de um aluno*/#include <stdio.h>main(){float Bim1, Bim2, Bim3, Bim4, MediaBimestral, NotaMinima;printf("Digite as notas bimestrais: \n");scanf("%f %f %f %f", &Bim1, &Bim2, &Bim3, &Bim4);MediaBimestral = (Bim1 + Bim2 + Bim3 + Bim4)/4;if ((MediaBimestral >= 5) && (MediaBimestral < 7))
{NotaMinima = (55 6*MediaBimestral)/4;printf("O aluno com notas bimestrais %0.2f, %0.2f, %0.2f e %0.2f precisa na final de
%0.2f", Bim1, Bim2, Bim3, Bim4, NotaMinima);}
elseprintf("O aluno com notas bimestrais %0.2f, %0.2f, %0.2f e %0.2f nao esta na prova
final");}
Capítulo 4
1. 51545412363
![Page 13: 47434253 Respostas Dos Exercicios Do Livro Jaime Evaristo Programando Com Pascal](https://reader035.vdocuments.mx/reader035/viewer/2022081717/5448eb7db1af9f5f618b4c1d/html5/thumbnails/13.jpg)
9272618139
2. /*Programa para calcular a soma dos quadrados dos n primeiros inteiros positivos, n dado*/
#include <stdio.h>main(){int n, i, Soma;printf("Digite o valor de n: \n");scanf("%d", &n);Soma = 0;for (i = 1; i <= n; i++)
Soma = Soma + i*i;printf("A soma dos quadrados dos %d primeiros numeros naturais e %d \n", n, Soma);}
3.a) /*Programa para calcular a soma dos n primeiros termos de uma sequencia*/#include <stdio.h>main(){float Soma, Num, Den;int n, i;printf("Digite o valor de n: \n");scanf("%d", &n);Num = 1;Den = 2;Soma = 0.5;for (i = 1; i < n; i++)
{Num = Num + 2;Den = Den + 3;Soma = Soma + Num/Den;}
printf("A soma dos %d primeiros numeros da sequencia dada e %f \n", n, Soma);}
3.b) /*Programa para calcular a soma dos n primeiros termos de uma sequencia*/#include <stdio.h>main(){float Soma;
![Page 14: 47434253 Respostas Dos Exercicios Do Livro Jaime Evaristo Programando Com Pascal](https://reader035.vdocuments.mx/reader035/viewer/2022081717/5448eb7db1af9f5f618b4c1d/html5/thumbnails/14.jpg)
int n, i;printf("Digite o valor de n: \n");scanf("%d", &n);Soma = 0;for (i = 1; i <= n; i++)if (i % 2 == 1)
Soma = Soma + 1.0/i;else
Soma = Soma 1.0/i;printf("A soma dos %d primeiros numeros da sequencia dada e %f \n", n, Soma);}
4. /*Programa para determinar o minimo multiplo comum de dois numeros positivos*/#include <stdio.h>main(){int x, y, a, b, Mmc;printf("Digite os dois numeros \n");scanf("%d %d", &x, &y);a = x;b = y;if (x < y)
{a = y;b = x;}
Mmc = a;while (Mmc % b != 0)
Mmc = Mmc + a;printf("mmc(%d, %d) = %d \n", x, y, Mmc);}
5. /*Programa para determinar os numeros perfeitos menores que um inteiro dado*/#include <stdio.h>main(){int Num, i, Soma, j;Num = 1;while (Num != 1)
{printf("Digite o numero (1 p/ encerrar) \n");scanf("%d", &Num);printf("Numeros perfeitos menores que %d: \n", Num);for (i = 2; i < Num; i = i + 1)
{Soma = i + 1;for (j = 2; j <= i/2; j++)
![Page 15: 47434253 Respostas Dos Exercicios Do Livro Jaime Evaristo Programando Com Pascal](https://reader035.vdocuments.mx/reader035/viewer/2022081717/5448eb7db1af9f5f618b4c1d/html5/thumbnails/15.jpg)
if (i % j == 0)Soma = Soma + j;
if (Soma == 2 * i)printf("%d \n", i);
}}
}
6. /*Programa para listar todos so numeros xyzt tais (xy + zt)*(xy + zt) = xyzt*/#include <stdio.h>main(){int Mil, Cen, i;printf("Numeros xyzt tais (xy + zt)*(xy + zt) = xyzt");for (i = 1000; i < 10000; i++)
{Cen = i % 100;Mil = i/100;if ((Cen + Mil)*(Cen + Mil) == i)
printf("%d \n", i);}
}
7. /*Programa para listar todos os numeros com dois algarismos cujo produto nao se altera se os algarismos sao invertidos*/
#include <stdio.h>main(){int InvertI, InvertJ, i, j;printf("Numeros com dois algarismos cujo produto nao se altera os algarismos sao
invertidos");for (i = 10; i < 100; i++)
{InvertI = (i % 10)*10 + (i/10);for (j = 10; j < 100; j++)
{InvertJ = (j % 10)*10 + (j/10);if (i*j == InvertI*InvertJ)
printf("%d*%d = %d*%d = %d \n", i, j, InvertI, InvertJ, i*j);}
}}
8. /*Programa para determinar o numero de algarismos de um inteiro positivo*/#include <stdio.h>#include <math.h>main(){
![Page 16: 47434253 Respostas Dos Exercicios Do Livro Jaime Evaristo Programando Com Pascal](https://reader035.vdocuments.mx/reader035/viewer/2022081717/5448eb7db1af9f5f618b4c1d/html5/thumbnails/16.jpg)
int Num, NumAlg, n;Num = 1;while (Num != 1)
{printf("Digite o numero (1 p/ encerrar) \n");scanf("%d", &Num);NumAlg = 1;while (pow10(NumAlg) < Num)
NumAlg = NumAlg + 1;printf("%d possui %d algarismo(s) \n", Num, NumAlg);}
}9. /*Programa para verificar se um inteiro maior que 2 e' um produto de dois primos*/#include <stdio.h>#include <math.h>main(){int Num, Fator1, Fator2, r, i;Num = 1;while (Num != 1)
{printf("Digite o numero (1 p/ encerrar) \n");scanf("%d", &Num);r = sqrt(Num);Fator1 = 2;while ((Num % Fator1 != 0) && (Fator1 <= r))
Fator1 = Fator1 + 1;if (Fator1 > r)
printf("%d é primo\n", Num);else
{Fator2 = Num/Fator1;r = sqrt(Fator2);
i = 2;while ((Fator2 % i != 0) && (i <= r))
i = i + 1;if (i <= r)
printf("%d nao e produto de dois primos \n", Num);else
printf("%d e' produto dos primos %d e %d \n", Num, Fator1, Fator2);}
}}
10. /*Programa para determinar a decomposição em fatores primos de um inteiro*/#include <stdio.h>main()
![Page 17: 47434253 Respostas Dos Exercicios Do Livro Jaime Evaristo Programando Com Pascal](https://reader035.vdocuments.mx/reader035/viewer/2022081717/5448eb7db1af9f5f618b4c1d/html5/thumbnails/17.jpg)
{int Num, i, n, Mult;Num = 1;while (Num != 1)
{printf("Digite o numero (1 p/ encerrar) \n");scanf("%d", &Num);n = Num;printf("Decomposicao em fatores primos de %d: \n", Num);i = 2;while (n > 1)
{Mult = 0;while (n % i == 0)
{n = n/i;Mult = Mult + 1;}
if (Mult > 0)printf("%d com multiplicidade %d \n", i, Mult);
i = i + 1;}
}}
11. Ver solução na seção 5.6 do capítulo 5.
12. /* Programa que determina o nesimo termo da sequencia de Fibbonaci*/#include <stdio.h>main(){int n, i, Ant1, Ant2, Termo;printf("Digite n \n");scanf("%d", &n);Termo = 1;Ant1 = 1;Ant2 = 0;i = 1;while (i < n)
{Termo = Ant1 + Ant2;Ant2 = Ant1;Ant1 = Termo;i = i + 1;}
printf(" O termo de ordem %d da sequencia de Fibbonaci e' %d \n", n, Termo);}
![Page 18: 47434253 Respostas Dos Exercicios Do Livro Jaime Evaristo Programando Com Pascal](https://reader035.vdocuments.mx/reader035/viewer/2022081717/5448eb7db1af9f5f618b4c1d/html5/thumbnails/18.jpg)
13. /*Programa para determinar o menor inteiro n tal que a soma dos n primeiros termos da serie harmonica e' maior que um real k dado*/
#include <stdio.h>main(){int i;float Soma, k;k = 1;while (k != 1)
{printf("Digite o valor de k (1 p/ encerrar) \n");scanf("%f", &k);Soma = 0;i = 0;while (Soma <= k)
{i = i + 1;Soma = Soma + 1.0/i;}
printf("O menor inteiro n tal que a soma dos n primeiros termos da serie harmonica e' maior que %.2f e' %d \n", k, i);
}}14. /*Programa para determinar os pares de números amigos menores que um número
dado*/#include <stdio.h>long SomaDivisoresMenores(long int n) /* Ver capítulo 5*/{int i, s s = 1;m = n/2;for (i = 2; i <= m; i++)
if (n % i == 0)s = s + i;
return s;}
main(){long int j, x, y;const long m = 10000;printf("Amigos menores que %ld \n", m);for (j = 2; j < m; j++)
{x = SomaDivisoresMenores(j);if (j < x)
![Page 19: 47434253 Respostas Dos Exercicios Do Livro Jaime Evaristo Programando Com Pascal](https://reader035.vdocuments.mx/reader035/viewer/2022081717/5448eb7db1af9f5f618b4c1d/html5/thumbnails/19.jpg)
if (j == SomaDivisoresMenores(x))printf("%10ld %20ld\n", j, x);
}}
15. /*Programa que gera subconjuntos com tres elementos*/#include <stdio.h>main(){int n, i, j, k;printf("Digite o valor de n: \n");scanf("%d", &n);for (i = 1; i <= n 2; i++)
for (j = i + 1; j <= n 1; j++)for (k = j + 1; k <= n; k++)
printf("{%d, %d, %d}\n", i, j, k);}
Capítulo 5
1. /*Funcao para determinar o kesimo digito de um numero*//*Funcao que retorna o numero de algarismos de um inteiro*/int NumAlg(int n){int i = 1;while (pow10(i) < n)
i = i + 1;return (i);}
int KDigito(int n, int k){int i, Potencia, Resto;if (k <= NumAlg(n))
{Potencia = pow10(k);Resto = n % Potencia;Potencia = pow10(k – 1);return (Resto/Potencia);}
elsereturn(1);
}
2. /*Funcao iterativa para o calculo do fatorial impar*/
![Page 20: 47434253 Respostas Dos Exercicios Do Livro Jaime Evaristo Programando Com Pascal](https://reader035.vdocuments.mx/reader035/viewer/2022081717/5448eb7db1af9f5f618b4c1d/html5/thumbnails/20.jpg)
long int FatImpar(int n){long int Fat;int i;if (n % 2 == 1)
{Fat = 1;for (i = 3; i <= n; i = i + 2) Fat = Fat * i;return (Fat);}
elsereturn(1);
}
/*Funcao recursiva para o calculo do fatorial impar*/long int FatImparRec(int n){if (n % 2 == 1)
if (n == 1)return(1);
elsereturn(n*FatImparRec(n 2));
elsereturn(1);
}
3. /*Programa para determinar o fatorial primo de um inteiro dado*/#include <stdio.h>#include <math.h>/*Funcao que recebe um inteiro e verifica se ele e primo*/int Primo(int x){int j;j = 2;while ((x % j != 0) && (j <= sqrt(x)))
j = j + 1;if (j <= sqrt(x))
return(0);else
return(1);}main(){int Num, j;long FatPrim;printf("Digite o inteiro \n");
![Page 21: 47434253 Respostas Dos Exercicios Do Livro Jaime Evaristo Programando Com Pascal](https://reader035.vdocuments.mx/reader035/viewer/2022081717/5448eb7db1af9f5f618b4c1d/html5/thumbnails/21.jpg)
scanf("%d", &Num);if (Primo(Num))
{FatPrim = 2;for (j = 3; j <= Num; j++)
if (Primo(j))FatPrim = FatPrim*j;
printf("Fatorial primo de %d e igual a %d \n", Num, FatPrim);}
elseprintf("%d nao e primo \n", Num);
}
4. /*Funcao que retorna a soma dos algarismos de um inteiro dado*//*Funcao que retorna o numero de algarismos de um inteiro dado*/int NumAlg(int n){int i = 1;while (pow10(i) < n)
i = i + 1;return (i);}int SomaAlgarismos(int n){int i, Potencia, NumAlgarismos, Soma;NumAlgarismos = NumAlg(n);Soma = n % 10;for (i = 1; i < NumAlgarismos; i++)
{n = n/10;Soma = Soma + n%10;}
return (Soma);}
5. /*Função recursiva para determinar o nesimo termo da sequencia de Fibbonaci*/int FibbRec(int x){if ((x == 1) || (x == 2))
return(1);else
return(FibbRec(x 1) + FibbRec(x 2));}
6. /*Função recursiva para gerar uma tabuada de multiplicação*/void Tabuada(int x){int y;
![Page 22: 47434253 Respostas Dos Exercicios Do Livro Jaime Evaristo Programando Com Pascal](https://reader035.vdocuments.mx/reader035/viewer/2022081717/5448eb7db1af9f5f618b4c1d/html5/thumbnails/22.jpg)
static a = 1, b = 1;if (x <= 9)
{for (y = 2; y <= 9; y++)
{gotoxy(a, b);printf("%d x %d = %d", x, y, x*y);b++;}
if (x % 5 != 0){a = a + 13;b = b 8;}
else{a = 1;b = 10;}
Tabuada(x + 1);}
}
Capítulo 6
0. /*Função recursiva que determina a maior componente de um vetor*/
float MaiorDe2(float x, float y){if (x > y)
return x;else
return y;}float MaiorCompRec(float *v, int t){if (t == 2)
return v[t 1];else
return MaiorDe2(v[t 1], MaiorCompRec(v, t 1));}
1. /*Função que exibe um vetor na ordem inversa*/void InverteVetor(int *v, int t){int i;
![Page 23: 47434253 Respostas Dos Exercicios Do Livro Jaime Evaristo Programando Com Pascal](https://reader035.vdocuments.mx/reader035/viewer/2022081717/5448eb7db1af9f5f618b4c1d/html5/thumbnails/23.jpg)
for (i = t 1; i >= 0; i)printf("%d ", v[i]);
}
2. /*Função que verifica se um vetor é palíndromo*/int VerificaVetorPalindromo(int *v, int t){int i;i = 0;while((v[i] == v[t i 1]) && (i < t/2))
i = i + 1;if (i == t/2)
return (1);else
return (0);}
3. /*Função que decompõe um vetor nas componentes de ordem ímpar e de ordem par*/void DecompVetor(int *v, int t, int *u, int *w){int i;for (i = 0; i < t; i++)if (i % 2 == 0)
u[i/2] = v[i];else
w[((i+1)/2) 1] = v[i];}
4. /Função que decompõe um vetor nas componentes de valor par e de valor ímpar*/void DecompVetor(int *v, int t, int *u, int &k, int *w, int &j){int i;k = j = 0;for (i = 0; i < t; i++)if (v[i] % 2 == 0)
{u[k] = v[i];k = k + 1;}
else{w[j] = v[i];j = j + 1;}
}
5. /*Função que determina a norma de um vetor*/float NormaVetor(int *v, int t)
![Page 24: 47434253 Respostas Dos Exercicios Do Livro Jaime Evaristo Programando Com Pascal](https://reader035.vdocuments.mx/reader035/viewer/2022081717/5448eb7db1af9f5f618b4c1d/html5/thumbnails/24.jpg)
{int i;float Norma = 0;for (i = 0; i < t; i++)
Norma = Norma + v[i]*v[i];return(sqrt(Norma));}
6. /Função que determina o produto escalar de dois vetores*/int ProdutoEscalar(int *v, int *w, int t){int i, ProdEscalar = 0;for (i = 0; i < t; i++)
ProdEscalar = ProdEscalar + v[i]*w[i];return(ProdEscalar);}
7. /*Função que determina a amplitude de uma tabela*//*Função que determina a maior componente de um vetor*/float Maior(float *v, int t){int i;float m;m = v[0];for (i = 1; i < t; i++)
if (v[i] > m)m = v[i];
return(m);}/*Função que determina a menor componente de um vetor*/float Menor(float *v, int t){int i;float m;m = v[0];for (i = 1; i < t; i++)
if (v[i] < m)m = v[i];
return(m);}
float Amplitude(float *v, int t){return(Maior(v, t) Menor(v, t));}
8. /Função que determina o desvio padrão de uma tabela*//*Função que determina a média aritmética de uma tabela*/
![Page 25: 47434253 Respostas Dos Exercicios Do Livro Jaime Evaristo Programando Com Pascal](https://reader035.vdocuments.mx/reader035/viewer/2022081717/5448eb7db1af9f5f618b4c1d/html5/thumbnails/25.jpg)
float Media(float *v, int t){int i;float Soma = 0.0;for (i = 0; i < t; i++)
Soma = Soma + v[i];return(Soma/t);}
float DesvioPadrao(float *v, int t){int i;float *d;float Med;Med = Media(v, t);for (i = 0; i < t; i++)
d[i] = (v[i] Med)*(v[i] Med);return(sqrt(Media(d, t)));}
9. /*Função para determinar as componentes distintas de um vetor*//*Função que verifica se um dado valor está armazenado num vetor*/int PesqSequencial(int v1[30], int t1, int x){int i;i = 0;while ((v1[i] != x) && (i < t1))
i = i + 1;if (v1[i] == x)
return (1);else
return (0);}
int ComponentesDistintas(int v2[30], int Aux[30], int t2){int i, k;Aux[0] = v2[0];k = 0;for (i = 1; i < t2; i++)
if (PesqSequencial(Aux, k + 1, v2[i]) == 0){k = k + 1;Aux[k] = v2[i];}
return(k + 1);}
![Page 26: 47434253 Respostas Dos Exercicios Do Livro Jaime Evaristo Programando Com Pascal](https://reader035.vdocuments.mx/reader035/viewer/2022081717/5448eb7db1af9f5f618b4c1d/html5/thumbnails/26.jpg)
10. /*Função que realiza um sorteio a partir dos algarismos das unidades dos números sorteados pela loteria*/
void LeSorteio(int v[5]){int i;for (i = 0; i < 5; i++)
scanf("%d", &v[i]);}
long NumeroSorteado(int v[5]){int i;long n = 0;for (i = 4; i >= 0; i)
n = n + (v[i] % 10)*(int)pow10(4 i);return (n);}
11. /*Função que insere um valor num vetor numa posição dada*/void InsereComponente(int *v, int &t, int x, int p){int i;t = t + 1;for (i = t; i > p; i)
v[i] = v[i 1];v[p] = x;}
12. /*Função que insere uma componente num vetor ordenado de modo que ele se mantém ordenado*/
void InsereOrdenado(int *v, int t, int x){int i, j;i = 0;while ((v[i] < x) && (i < t))
i = i + 1;t = t + 1;for (j = t; j > i; j)
v[j] = v[j 1];v[i] = x;}
13. /*Função que exclui uma componente de um vetor*/void DeletaComponente(int *v, int &t, int p){int i;if (p < t)
{
![Page 27: 47434253 Respostas Dos Exercicios Do Livro Jaime Evaristo Programando Com Pascal](https://reader035.vdocuments.mx/reader035/viewer/2022081717/5448eb7db1af9f5f618b4c1d/html5/thumbnails/27.jpg)
for (i = p; i < t; i++)v[i] = v[i + 1];
t = t 1;}
}
14. /*Função que determina as componentes comuns de dois vetores*/int PesqSequencial(int *v, int t, int x){int i;i = 0;while ((v[i] != x) && (i < t))
i = i + 1;if (v[i] == x)
return (1);else
return (0);}
void InterseptaVetores(int *v1, int t1, int *v2, int t2, int *v, int &t){int i;t = 0;for (i = 0; i < t1; i++)if (PesqSequencial(v2, t2, v1[i]) == 1)
{v[t] = v1[i];t = t + 1;}
}
15. /*Função que determina a maior diferença entre duas componentes consecutivas de um vetor ordenado*/
int Maior(int *v, int t, int &p){int i;float m;m = v[0];p = 0;for (i = 1; i < t; i++)
if (v[i] > m){m = v[i];p = i;}
return(m);}
![Page 28: 47434253 Respostas Dos Exercicios Do Livro Jaime Evaristo Programando Com Pascal](https://reader035.vdocuments.mx/reader035/viewer/2022081717/5448eb7db1af9f5f618b4c1d/html5/thumbnails/28.jpg)
int MaiorDiferenca(int v[20], int t, int p){int i, Diferencas[20];for (i = 0; i < t 1; i++)
Diferencas[i] = v[i+1] v[i];return(Maior(Diferencas, t 1, p));}
16. /*Função que corrige um teste objetivo*/int Corrige(int v1[50], int v2[50], int t){int Acerto, i;Acerto = 0;for (i = 0; i < t; i++)
if (v1[i] == v2[i])Acerto = Acerto + 1;
return (Acerto);}
17. /*Função que calcula o valor numérico de um polinomio*/float ValNumerico(float *v, int g, float x){int i;float ValorNumerico;ValorNumerico = v[g];for (i = 0; i < g; i++)
ValorNumerico = ValorNumerico + v[i]*pow(x, g i);return (ValorNumerico);}
18. /*Função que determina uma moda de uma relação armazenada num vetor*/float PosicaoMaior(float v[50], int t){int i, m;m = 0;for (i = 1; i < t; i++)
if (v[i] > m)m = i;
return (m);}
float Moda(float v[50], int t){float Freq[50];int i, j, p;for (i = 0; i < t; i++)
{
![Page 29: 47434253 Respostas Dos Exercicios Do Livro Jaime Evaristo Programando Com Pascal](https://reader035.vdocuments.mx/reader035/viewer/2022081717/5448eb7db1af9f5f618b4c1d/html5/thumbnails/29.jpg)
Freq[i] = 0;for (j = 0; j < t; j++)
if (v[j] == v[i])Freq[i] = Freq[i] + 1;
}p = PosicaoMaior(Freq, t);return (v[p]);}
19. /*Função para inverter um numero dado*/long InverteNumero(int m){int i, j, n, Alg[20];long Invert;i = 0;n = m;while (pow10(i) < m)
{Alg[i] = n % 10;n = n/10;i = i + 1;}
i = i 1;Invert = 0;for (j = 0; j <= i; j++)
Invert = Invert + Alg[ij]*pow10(j);return (Invert);}
20. /*Função que converte um numero decimal para o sistema binário*/void DecBin(int n){int i, j, *Bin;i = 0;while (n > 0)
{Bin[i] = n % 2;n = n/2;i = i + 1;}
for (j = i 1; j >= 0; j)printf("%d", Bin[j]);
printf("\n");}
21. /*Função para decompor um número inteiro em fatores primos, armazenando os fatores e suas multiplicidades uma matriz*/
void DecFatPrimos(int n, int Fatores[10][10], int &q)
![Page 30: 47434253 Respostas Dos Exercicios Do Livro Jaime Evaristo Programando Com Pascal](https://reader035.vdocuments.mx/reader035/viewer/2022081717/5448eb7db1af9f5f618b4c1d/html5/thumbnails/30.jpg)
{int i, Mult;i = 2;q = 0;while (n > 1)
{Mult = 0;while (n % i == 0)
{n = n/i;Mult = Mult + 1;}
if (Mult > 0){Fatores[q][0] = i;Fatores[q][1] = Mult;q = q + 1;}
i = i + 1;}
}
22. /*Função que verifica a aprovação de um aluno da Universidade Federal de Alagoas*/float Menor(float v[4], int b){int i, m;m = v[0];b = 0;for (i = 1; i < 4; i++)
if (v[i] < m){m = v[i];b = i;}
return (m);}
void Reavaliacao(float v[4]){int b, MenorNota;char s;float Reav;MenorNota = Menor(v, &b);if (MenorNota < 7)
{printf("O aluno fez reavaliacao (S/N)?");fflush(stdin);
![Page 31: 47434253 Respostas Dos Exercicios Do Livro Jaime Evaristo Programando Com Pascal](https://reader035.vdocuments.mx/reader035/viewer/2022081717/5448eb7db1af9f5f618b4c1d/html5/thumbnails/31.jpg)
scanf("%c", &s);if (toupper(s) == 'S')
{printf("Digite a nota da reavaliacao");scanf("%f", &Reav);v[b] = Reav;}
}}float Media(float v[4]){int i;float m = 0;for (i = 0; i < 4; i++)
m = m + v[i];return(m/4);}
float MediaFinal(float v[4], char *Sit){float NotaFin, MediaFin, MediaBim;char s;Reavaliacao(v);MediaBim = Media(v);if ((MediaBim < 5) || (MediaBim >= 7))
MediaFin = MediaBim;else
{printf("O aluno fez prova final(S/N)?");scanf("%c", &s);if (toupper(s) == 'S')
{printf("Digite a nota da prova final");scanf("%f", &NotaFin);MediaFin = (6*MediaBim + 4*NotaFin)/10;}
}if (MediaFin < 5.5)
*Sit = 'R';else
*Sit = 'A';return(MediaFin);}
23. /*Função que retorna a transposta de uma matriz*/void Transposta(float Mat[10][10], float Transp[10][10], int m, int n){
![Page 32: 47434253 Respostas Dos Exercicios Do Livro Jaime Evaristo Programando Com Pascal](https://reader035.vdocuments.mx/reader035/viewer/2022081717/5448eb7db1af9f5f618b4c1d/html5/thumbnails/32.jpg)
int i, j;for (i = 0; i < m; i++)
for(j = 0; j < n; j++)Transp[j][i] = Mat[i][j];
}
24. /*Função que permuta duas linhas de uma matriz*/void TrocaLinha(float v[10][10], int n, int Lin1, int Lin2){int i;float Aux;for (i = 0; i < n; i++)
{Aux = v[Lin1][i];v[Lin1][i] = v[Lin2][i];v[Lin2][i] = Aux;}
}
25. /*Função que verifica se uma matriz é triangular*/int VerificaMatrizTriangular(float v[10][10], int n){int i = 0, j, Sim = 1;while ((i < n) && (Sim == 1))
{j = i + 1;while((j < n) && (Sim == 1))
if (v[i][j] != 0)Sim = 0;
elsej = j + 1;
i = i + 1;}
return (Sim);}
26. /*Função que verifica se uma matriz é simétrica*/ int VerificaMatrizSimetrica(float v[10][10], int n){int i = 0, j, Sim = 1;while ((i < n) && (Sim == 1))
{j = 0;while((j < n) && (Sim == 1))
if (v[i][j] != v[j][i])Sim = 0;
elsej = j + 1;
![Page 33: 47434253 Respostas Dos Exercicios Do Livro Jaime Evaristo Programando Com Pascal](https://reader035.vdocuments.mx/reader035/viewer/2022081717/5448eb7db1af9f5f618b4c1d/html5/thumbnails/33.jpg)
i = i + 1;}
return (Sim);}
27. /*Função que multiplica duas matrizes*/ void MultMat(float m1[5][5], float m2[5][5], float m3[5][5], int l1, int c1, int l2, int c2){int i = 0, j = 0, k = 0;if (c1 == l2)
{while (i < l1)
{m3[i][j] = 0;while (j < c2 && k < l2)
{m3[i][j] = m3[i][j] + m1[i][k]*m2[k][j];k = k +1;}
k = 0;j = j + 1;if (j == c2)
{i = i + 1;j = 0;}
}}
}
28. /*Função que determina as médias das linhas de uma matriz, armazenandoas numa nova coluna da matriz*/
float Media(float v[10], int t){int i;float Soma = 0.0;for (i = 0; i < t; i++)
Soma = Soma + v[i];return(Soma/t);}
void MediaLinha(float v[10][10], int m, int n){int i;for (i = 0; i < m; i++)
v[i][n] = Media(v[i], n);}
![Page 34: 47434253 Respostas Dos Exercicios Do Livro Jaime Evaristo Programando Com Pascal](https://reader035.vdocuments.mx/reader035/viewer/2022081717/5448eb7db1af9f5f618b4c1d/html5/thumbnails/34.jpg)
29. /*Função que fornece o menor elemento de cada linha de uma matriz, indicando sua coluna*/
float Menor(float v[10], int t, int &p){int i;float m;m = v[0];p = 0;for (i = 1; i < t; i++)
if (v[i] < m){m = v[i];p = i;}
return (m);}void MenorElemento(float v[10][10], int m, int n){int i, Col;float Men;for (i = 0; i < m; i++)
{Men = Menor(v[i], n, &Col);printf("%d \b %.2f \b %d \n", i + 1, Men, Col + 1);}
}
30. /*Programa que determina uma escala para uma viagem entre duas cidades dadas*/#include <stdio.h>#include <conio.h>void LeDistancias(int v[20][20], int n){int i, j;printf("Digite as distancias entre as cidades\n");for (i = 0; i < n; i++)
for (j = i; j < n; j++)if (i == j)
v[i][j] = 0;else
{scanf("%d", &v[i][j]);v[j][i] = v[i][j];}
}void EscreveDistancias(int v[20][20], int n){int i, j;
![Page 35: 47434253 Respostas Dos Exercicios Do Livro Jaime Evaristo Programando Com Pascal](https://reader035.vdocuments.mx/reader035/viewer/2022081717/5448eb7db1af9f5f618b4c1d/html5/thumbnails/35.jpg)
for (i = 0; i < n; i++){for (j = 0; j < n; j++)
printf("%d \t", v[i][j]);printf("\n");}
}
int Escala(int v[20][20], int n, int o, int d){int i, Esc, Menor;Esc = 1;Menor = v[o][o + 1] + v[0][d];for (i = 0; i < n; i++)
if (v[o][i] + v[i][d] < Menor){Menor = v[o][i] + v[i][d];Esc = i + 1;}
return(Esc);}main(){int NumCidades, x, y, Origem, Destino, Esc;int Distancias[20][20];clrscr();printf("Digite o numero de cidades");scanf("%d", &NumCidades);LeDistancias(Distancias, NumCidades);EscreveDistancias(Distancias, NumCidades);printf("Digite a origem e o destino \n");scanf("%d %d", &Origem, &Destino);if (Origem < Destino)
{x = Origem;y = Destino;}
else{x = Destino;y = Origem;}
if (Distancias[x1][y1] > 400){Esc = Escala(Distancias, NumCidades, x, y) + 1;printf("A viagem de %d para %d deve ter uma escala em %d", Origem, Destino, Esc);}
![Page 36: 47434253 Respostas Dos Exercicios Do Livro Jaime Evaristo Programando Com Pascal](https://reader035.vdocuments.mx/reader035/viewer/2022081717/5448eb7db1af9f5f618b4c1d/html5/thumbnails/36.jpg)
elseif (Distancias[x1][y1] == 0)
printf("\aOrigem e destino iguais!");else
printf("A viagem de %d para % deve ser feita sem escalas");}
31. /*Função recursiva para a exibição das combinações de n com taxa k, n e k dados*/#include <stdio.h>void Combinacoes(int n, int k, int i, int s, int v[30]){int m, j;if (i < k)
for (j = s; j <= n k + i + 1 ; j++){v[i] = j;s = j + 1;Combinacoes(n, k, i + 1, s, v);if (i == k 1)
{for (m = 0; m < k; m++)
printf("%d ", v[m]);printf("\n");}
}}
Capítulo 7
1. /*Fumção que realiza uma pesquisa "pessimista" num vetor*/int PesquisaPessimista(int *v, int t, int x){int i;i = 0;while((v[i] != x) && (v[t i 1] != x) && (i < t/2))
i = i + 1;if (v[i] == x)
return (i);elseif (v[t i 1] == x)
return (t i 1);else
return(1);
![Page 37: 47434253 Respostas Dos Exercicios Do Livro Jaime Evaristo Programando Com Pascal](https://reader035.vdocuments.mx/reader035/viewer/2022081717/5448eb7db1af9f5f618b4c1d/html5/thumbnails/37.jpg)
}
2. /*Função que implementa o insertsort*//*Função que insere um elemento num vetor ordenado*/void InsereOrdenado(int v1[500], int &t, int x){int i, j;i = 0;while ((v1[i] < x) && (i < *t ))
i = i + 1;t = t + 1;for (j = t; j > i; j)
v1[j] = v1[j 1];v1[i] = x;}void InsertSort(int v[500], int t){int Aux[500];int i, j = 1;Aux[0] = v[0];for (i = 1; i < t; i++)
InsereOrdenado(Aux, &j, v[i]);for (i = 0; i < t; i++)
v[i] = Aux[i];}
3. /*Versão recursiva do selectsort*/void SelectSortRec(int *v, int t){int Pos, m;if (t > 1)
{MaiorElemento(v, t 1, m, Pos);if (v[t 1] < v[Pos])
{v[Pos] = v[t 1];v[t 1] = m;}
SelectSortRec(v, t 1);}
}
Capítulo 8
![Page 38: 47434253 Respostas Dos Exercicios Do Livro Jaime Evaristo Programando Com Pascal](https://reader035.vdocuments.mx/reader035/viewer/2022081717/5448eb7db1af9f5f618b4c1d/html5/thumbnails/38.jpg)
1. /*Programa que verifica se uma palavra é palídroma*/ #include <stdio.h>#include <string.h>char *InverteString(char *s){int i, Comp;char *St;Comp = strlen(s);for (i = 0; i < Comp; i++)
St[i] = s[Comp 1 i];St[Comp] = '\0';return (St);}
main(){char Str[40], Aux[40];printf("Digite a string\n");gets(Str);strcpy(Aux, Str);strupr(Aux);if (strcmp(InverteString(Aux), Aux) == 0)
printf("%s e palindroma", Str);else
printf("%s nao e palindroma", Str);}2. /*Programa que determina o número de palavras de um texto dado*/#include <stdio.h>#include <string.h>int ContaPalavras(char s[1000]){int i, Cont = 0, Comp;Comp = strlen(s);for (i = 1; i <= Comp; i++)
if ((s[i 1] != ' ') && (s[i] == ' '|| s[i] == '\0'))Cont = Cont + 1;
return (Cont);}main(){int NumPalavras;char Texto[1000];printf("Digite o texto\n");gets(Texto);NumPalavras = ContaPalavras(Texto);printf("O texto %s tem %d palavras\n", Texto, NumPalavras);
![Page 39: 47434253 Respostas Dos Exercicios Do Livro Jaime Evaristo Programando Com Pascal](https://reader035.vdocuments.mx/reader035/viewer/2022081717/5448eb7db1af9f5f618b4c1d/html5/thumbnails/39.jpg)
}
3. /*Programa para converter um número do sistema decimal para o sistema binário*/#include <stdio.h>char *InverteString(char *s){int i, Comp;char *St;Comp = strlen(s);for (i = 0; i < Comp; i++)
St[i] = s[Comp 1 i];St[Comp] = '\0';return (St);}
char *DecBin(int n){int i, j;char *Bin;i = 0;while (n > 0)
{if (n % 2 == 1)
Bin[i] = '1';else
Bin[i] = '0';n = n/2;i = i + 1;}
Bin[i] ='\0';Bin = InverteString(Bin);return(Bin);}
main(){int Num;char *Binario;printf("Digite o numero \n");scanf("%d", &Num);Binario = DecBin(Num);printf("%d = (%s)2 \n", Num, Binario);}
4. /*Programa para converter um número do sistema binário para o sistema decimal*/#include <stdio.h>#include <math.h>
![Page 40: 47434253 Respostas Dos Exercicios Do Livro Jaime Evaristo Programando Com Pascal](https://reader035.vdocuments.mx/reader035/viewer/2022081717/5448eb7db1af9f5f618b4c1d/html5/thumbnails/40.jpg)
int *BinDec(char *s){int i, Comp, Dec = 0;Comp = strlen(s);for (i = 0; i < Comp; i++)
if (s[i] == '1')Dec = Dec + pow(2, Comp i 1);
return (Dec);}
main(){char *Binario;int Decimal;printf("Digite o numero do sistema binario");gets(Binario);Decimal = BinDec(Binario);printf("%s no sistema decimal: %d \n", Binario, Decimal);}
5. /*Função que verifica se uma conta foi digitada corretamente*/int ArmazenaDigitos(char *s, int *v){int i, Comp;Comp = strlen(s);for (i = 0; i < Comp; i = i + 1)
v[i] = (int) (s[i] '0');return(i);}
char CalculaDigito(char *s){char c;int t, i, j, Digito, *v;t = ArmazenaDigitos(s, v);Digito = 0;j = 2;for (i = t 1; i >= 0; i = i 1, j = j + 1)
Digito = Digito + v[i]*j;Digito = Digito % 11;Digito = 11 Digito;if ((Digito == 10) || (Digito == 11))
Digito = 0;c = (char) Digito + '0';return (c);}
![Page 41: 47434253 Respostas Dos Exercicios Do Livro Jaime Evaristo Programando Com Pascal](https://reader035.vdocuments.mx/reader035/viewer/2022081717/5448eb7db1af9f5f618b4c1d/html5/thumbnails/41.jpg)
int VerificaConta(char *s){int Comp;char Dv, UltDigito;char Conta[30];Comp = strlen(s);UltDigito = s[Comp 1];strncpy(Conta, s, Comp 1);Conta[Comp 1] = '\0';Dv = CalculaDigito(Conta);if (UltDigito == Dv)
return (1);else
return (0);}
6. /*Programa que substitui uma palavra de um texto*/#include <stdio.h>#include <string.h>int Pos(char *s1, char *s2){char *Aux;Aux = strstr(s1, s2);if (Aux != NULL)
return(Aux s1);else
return (1);}
void DeletaCaracteres(char *s, int n, int p){int i, Comp;char *Aux;Comp = strlen(s);if (p + n <= Comp)
{i = p;while (i <= Comp n)
{s[i] = s[i + n];i = i + 1;}
}else
s[p + 1] = '\0';}
![Page 42: 47434253 Respostas Dos Exercicios Do Livro Jaime Evaristo Programando Com Pascal](https://reader035.vdocuments.mx/reader035/viewer/2022081717/5448eb7db1af9f5f618b4c1d/html5/thumbnails/42.jpg)
void InsereCadeia(char *s1, char *s2, int p){int Comp;char Aux1[50], Aux2[50];Comp = strlen(s1);if (p <= Comp)
{Comp = strlen(s1);strncpy(Aux1, s1, p);Aux1[p] = '\0';strcpy(Aux2, s1);DeletaCaracteres(Aux2, p, 0);strcat(Aux1, s2);strcat(Aux1, Aux2);strcpy(s1, Aux1);}
}
int Substituir(char *s1, char *s2, char *s3){int p, Comp;p = Pos(s1, s2);if (p != 1)
{Comp = strlen(s2);DeletaCaracteres(s1, Comp, p);InsereCadeia(s1, s3, p);}
elseprintf("Palavra nao encontrada");
return (p);}
main(){char Texto[1000], Str1[1000], Str2[1000];int i;printf("Digite o texto: ");gets(Texto);printf("Substituir: ");gets(Str1);printf("Substituir por: ");gets(Str2);printf("Texto original: %s \n", Texto);i = Substituir(Texto, Str1, Str2);if (i != 1)
printf("Novo texto: %s \n", Texto);
![Page 43: 47434253 Respostas Dos Exercicios Do Livro Jaime Evaristo Programando Com Pascal](https://reader035.vdocuments.mx/reader035/viewer/2022081717/5448eb7db1af9f5f618b4c1d/html5/thumbnails/43.jpg)
}
7. /*Programa que converte um nome para o formato ultimo sobrenome/nome*/#include <stdio.h>#include <string.h>char *Copia(char *s, int n, int p){char *Aux;int Comp;Comp = strlen(s);if (p < Comp)
{Aux = &s[p];if (p + n < Comp)
Aux[n] = '\0';else
Aux[strlen(Aux)] = '\0';return(Aux);}
elsereturn (NULL);
}
char *UltimoSobrenome(char *s){int i, n, Comp;char *Aux;Comp = strlen(s);i = Comp 1;n = 0;while (s[i] != ' ')
{i = i 1;n = n + 1;}
Aux = Copia(s, n, i + 1);return (Aux);}
char *PrimeiroNome(char *s){int i, n;char *Aux;i = 0;while (s[i] != ' ')
i = i + 1;Aux = Copia(s, i, 0);
![Page 44: 47434253 Respostas Dos Exercicios Do Livro Jaime Evaristo Programando Com Pascal](https://reader035.vdocuments.mx/reader035/viewer/2022081717/5448eb7db1af9f5f618b4c1d/html5/thumbnails/44.jpg)
return (Aux);}
main(){char Nome[40], Identificacao[40];int i;printf("Digite o nome: ");gets(Nome);strcpy(Identificacao, UltimoSobrenome(Nome));strcat(Identificacao, "/");strcat(Identificacao, PrimeiroNome(Nome));printf("Identificacao: %s \n", Identificacao);}
8. /*Programa que converte um nome dado para o formato de referência bibliográfica*/#include <stdio.h>#include <string.h>char *Copia(char *s, int n, int p){char *Aux;int Comp;Comp = strlen(s);if (p < Comp)
{Aux = &s[p];if (p + n < Comp)
Aux[n] = '\0';else
Aux[strlen(Aux)] = '\0';return(Aux);}
elsereturn (NULL);
}
/*Funcao que retorna o ultimo sobrenome de um nome de uma pessoa*/char *UltimoSobrenome(char *s){int i, n, Comp;char *Aux;Comp = strlen(s);i = Comp 1;n = 0;while (s[i] != ' ')
{i = i 1;
![Page 45: 47434253 Respostas Dos Exercicios Do Livro Jaime Evaristo Programando Com Pascal](https://reader035.vdocuments.mx/reader035/viewer/2022081717/5448eb7db1af9f5f618b4c1d/html5/thumbnails/45.jpg)
n = n + 1;}
Aux = Copia(s, n, i + 1);return (Aux);}
/*Funcao que retorna as iniciiais dos nomes e dos sobrenomens, exceto do último sobrenome*/
char *Iniciais(char *s){int i, k, Comp;char Aux[40];Aux[0] = s[0];Aux[1] = '.';Aux[2] = ' ';Comp = strlen(s);k = 3;for (i = 1; i < Comp 1; i++)if ((s[i] == ' ') && (s[i+1] != ' '))
{Aux[k] = s[i+1];Aux[k+1] = '.';Aux[k+2] = ' ';k = k + 3;}
Aux[k 3] = '\0';return (Aux);}
void DeletaCaracteres(char *s, int n, int p){int i, Comp;char *Aux;Comp = strlen(s);if (p + n <= Comp)
{i = p;while (i <= Comp n)
{s[i] = s[i + n];i = i + 1;}
}else
s[p + 1] = '\0';}
![Page 46: 47434253 Respostas Dos Exercicios Do Livro Jaime Evaristo Programando Com Pascal](https://reader035.vdocuments.mx/reader035/viewer/2022081717/5448eb7db1af9f5f618b4c1d/html5/thumbnails/46.jpg)
/*Funcao para verificar se uma string esta contida numa outra string*/int Pos(char *s1, char *s2){char *Aux;Aux = strstr(s1, s2);if (Aux != NULL)
return(Aux s1);else
return (1);}
/*Funcao para deletar as particulas de, do, dos, da, das, e*/void DeletaParticulas(char *s, char *Part){int Comp, p;p = Pos(s, Part);Comp = strlen(Part);if ((p != 1) && (s[p1] == ' ') && (s[p + Comp] == ' '))
DeletaCaracteres(s, Comp, p);}
main(){char Nome[40], Aux[40], Autor[40];printf("Digite o nome: ");gets(Nome);strcpy(Aux, Nome);DeletaParticulas(Aux, "de");DeletaParticulas(Aux, "da");DeletaParticulas(Aux, "das");DeletaParticulas(Aux, "do");DeletaParticulas(Aux, "dos");DeletaParticulas(Aux, "e");strcpy(Autor, UltimoSobrenome(Aux));strcat(Autor, ", ");strcat(Autor, Iniciais(Aux));printf("Referencia bibliografica: %s \n", Autor);}9. /*Função que retorna uma palavra no formato P A L A V R A*/ #include <string.h>#include <ctype.h>char *Aviso(char *s){int c, i;c = strlen(s);for (i = c; i >= 0; i)
![Page 47: 47434253 Respostas Dos Exercicios Do Livro Jaime Evaristo Programando Com Pascal](https://reader035.vdocuments.mx/reader035/viewer/2022081717/5448eb7db1af9f5f618b4c1d/html5/thumbnails/47.jpg)
{s[2*i] = toupper(s[i]);s[2*i 1] = ' ';}
s[2*i + 1] = '\0';return s;}
Capítulo 9
2. /*Funcao que reune dois arquivos de mesma estrutura (definida em struct TRegistro)*/void ReuneArquivos(char s[12], char s1[12], char s2[12]){FILE *p, *p1, *p2;struct TRegistro r;int Tam;Tam = sizeof(r);p1 = fopen(s1, "rb");p2 = fopen(s2, "rb");p = fopen(s, "wb");fread(&r, Tam, 1, p1);while (!feof(p1))
{fwrite(&r, Tam, 1, p);fread(&r, Tam, 1, p1);}
fread(&r, Tam, 1, p2);while (!feof(p2))
{if (ConsultaRegistro(r.Mat, s1) == 1)
fwrite(&r, Tam, 1, p);fread(&r, Tam, 1, p2);}
fclose(p);fclose(p1);fclose(p2);}
3. /*Programa que gera, a partir de um arquivo contendo nomes e salarios, um arquivo com os salarios maiores que 5.000,00*/
#include <stdio.h>#include <string.h>struct TRegistro
{char Nome[40];float SalBruto;
![Page 48: 47434253 Respostas Dos Exercicios Do Livro Jaime Evaristo Programando Com Pascal](https://reader035.vdocuments.mx/reader035/viewer/2022081717/5448eb7db1af9f5f618b4c1d/html5/thumbnails/48.jpg)
};
void GeraArquivoAltosSalarios(char *s, char *s1){FILE *p, *t;struct TRegistro r;t = fopen(s, "rb");if (t == NULL)
printf("Arquivo %s nao existe", s);else
{p = fopen(s1, "rb");if (p != NULL)
printf("Arquivo ja existe");else
{p = fopen(s1, "wb");fread(&r, sizeof(r), 1, t);while (!feof(t))
{if (r.SalBruto > 5000)
fwrite(&r, sizeof(r), 1, p);fread(&r, sizeof(r), 1, t);}
}}
fclose(p);fclose(t);}
main(){char NomeArq[12];printf("Digite o nome do arquivo\n");scanf("%s", NomeArq);GeraArquivoAltosSalarios(NomeArq, "AltoSal.arq");}
4. /*Função que inclui um registro num arquivo ordenado de modo que ele se mantém ordenado*/
/*Função que copia o último registro no final do arquivo*/void CopiaUltimoRegistro(char s[12]){struct TRegistro r;FILE *p;long Byte, Tam;p = fopen(s, "rb");
![Page 49: 47434253 Respostas Dos Exercicios Do Livro Jaime Evaristo Programando Com Pascal](https://reader035.vdocuments.mx/reader035/viewer/2022081717/5448eb7db1af9f5f618b4c1d/html5/thumbnails/49.jpg)
Tam = sizeof(r);fseek(p, Tam, SEEK_END);fgetpos(p, &Byte);fsetpos(p, &Byte);fread(&r, Tam, 1, p);fclose(p);p = fopen(s, "ab");fwrite(&r, Tam, 1, p);fclose(p);}
/*Função que determina a posição de inclusão do novo arquivo*/long PosicaoDeInclusao(struct TRegistro Reg, char s[12]){struct TRegistro r;long Tam, Byte, Pos;FILE *p;p = fopen(s, "rb");Byte = 0;Tam = sizeof(r);fread(&r, Tam, 1, p);while ((!feof(p)) && (strcmp(Reg.Mat, r.Mat) > 0))
{Byte = Byte + Tam;fread(&r, Tam, 1, p);}
fclose(p);return (Byte);}
void IncluiRegistroOrdenado(struct TRegistro Reg, char s[12]){struct TRegistro r;long Tam, Byte, Pos;FILE *p;Tam = sizeof(r);Byte = PosicaoDeInclusao(Reg, s);CopiaUltimoRegistro(s);p = fopen(s, "rb+");fseek(p, 3*Tam, SEEK_END);fgetpos(p, &Pos);while (Pos >= Byte)
{fsetpos(p, &Pos);fread(&r, Tam, 1, p);fgetpos(p, &Pos);fsetpos(p, &Pos);
![Page 50: 47434253 Respostas Dos Exercicios Do Livro Jaime Evaristo Programando Com Pascal](https://reader035.vdocuments.mx/reader035/viewer/2022081717/5448eb7db1af9f5f618b4c1d/html5/thumbnails/50.jpg)
fwrite(&r, Tam, 1, p);fgetpos(p, &Pos);Pos = Pos 3*Tam;}
fsetpos(p, &Byte);fwrite(&Reg, Tam, 1, p);fclose(p);}
5. /*Programa para reunir dois arquivos ordenados num terceiro arquivo também ordenado*/
#include <stdio.h>#include <string.h>struct TRegistro
{char Mat[4];char Nome[40];};
/*Funcao que verifica se um registro com matricula dada pertence ao arquivo*/
int ConsultaRegistro(char s[12], char s1[12]){FILE *p;int Achou = 0;struct TRegistro r;fpos_t Byte;p = fopen(s1, "rb");fgetpos(p, &Byte);fread(&r, sizeof(r), 1, p);while (!feof(p) && !Achou) if (strcmp(s, r.Mat) == 0)
Achou = 1;else
{fgetpos(p, &Byte);fread(&r, sizeof(r), 1, p);}
if (Achou == 0)return (1);
elsereturn(Byte);
}
/*Funcao que copia o ultimo registro no final do arquivo*/void CopiaUltimoRegistro(char s[12]){
![Page 51: 47434253 Respostas Dos Exercicios Do Livro Jaime Evaristo Programando Com Pascal](https://reader035.vdocuments.mx/reader035/viewer/2022081717/5448eb7db1af9f5f618b4c1d/html5/thumbnails/51.jpg)
struct TRegistro r;FILE *p;long Byte, Tam;p = fopen(s, "rb");Tam = sizeof(r);fseek(p, Tam, SEEK_END);fgetpos(p, &Byte);fsetpos(p, &Byte);fread(&r, Tam, 1, p);fclose(p);p = fopen(s, "ab");fwrite(&r, Tam, 1, p);fclose(p);}/*Funcao que determina a posicao de inclusao de um novo registro*/long PosicaoDeInclusao(struct TRegistro Reg, char s[12]){struct TRegistro r;long Tam, Byte, Pos;FILE *p;p = fopen(s, "rb");Byte = 0;Tam = sizeof(r);fread(&r, Tam, 1, p);while ((!feof(p)) && (strcmp(Reg.Mat, r.Mat) > 0))
{Byte = Byte + Tam;fread(&r, Tam, 1, p);}
fclose(p);return (Byte);}
/*Funcao que inclui um registro num arquivo ordenado de modo que ele se mantenha ordenado*/
void IncluiRegistroOrdenado(struct TRegistro Reg, char s[12]){struct TRegistro r;long Tam, Byte, Pos;FILE *p;Tam = sizeof(r);Byte = PosicaoDeInclusao(Reg, s);CopiaUltimoRegistro(s);p = fopen(s, "rb+");fseek(p, 3*Tam, SEEK_END);fgetpos(p, &Pos);while (Pos >= Byte)
![Page 52: 47434253 Respostas Dos Exercicios Do Livro Jaime Evaristo Programando Com Pascal](https://reader035.vdocuments.mx/reader035/viewer/2022081717/5448eb7db1af9f5f618b4c1d/html5/thumbnails/52.jpg)
{fsetpos(p, &Pos);fread(&r, Tam, 1, p);fgetpos(p, &Pos);fsetpos(p, &Pos);fwrite(&r, Tam, 1, p);fgetpos(p, &Pos);Pos = Pos 3*Tam;}
fsetpos(p, &Byte);fwrite(&Reg, Tam, 1, p);fclose(p);}
void GeraArquivoOrdenado(char s1[12], char s2[12], char s[12]){int Tam;FILE *p1, *p2, *p;struct TRegistro r;Tam = sizeof(r);p1 = fopen(s1, "rb");p = fopen(s, "wb");fread(&r, Tam, 1, p1);while (!feof(p1))
{fwrite(&r, Tam, 1, p);fread(&r, Tam, 1, p1);}
fclose(p);p2 = fopen(s2, "rb");while (!feof(p2))
{fread(&r, Tam, 1, p2);if (ConsultaRegistro(r.Mat, s) == 1)
IncluiRegistroOrdenado(r, s);}
fclose(p1);fclose(p2);fclose(p);}
main(){struct TRegistro NovoRegistro;char NomeArq1[12], NomeArq2[12], NomeArq[12];printf("Digite os nomes dos arquivos a serem reunidos\n");scanf("%s", NomeArq1);
![Page 53: 47434253 Respostas Dos Exercicios Do Livro Jaime Evaristo Programando Com Pascal](https://reader035.vdocuments.mx/reader035/viewer/2022081717/5448eb7db1af9f5f618b4c1d/html5/thumbnails/53.jpg)
scanf("%s", NomeArq2);printf("Digite o nome do novo arquivo");scanf("%s", NomeArq);GeraArquivoOrdenado(NomeArq1, NomeArq2, NomeArq);}
6. /*Programa que gera um arquivo contendo os registros comuns a dois arquivos de mesma estrutura*/
#include <stdio.h>#include <string.h>struct TRegistro
{char Cpf[12];char Nome[40];};
/*Funcao que verifica se um registro com matricula dada pertence ao arquivo*/int ConsultaRegistro(char s[12], char s1[12]){FILE *p;int Achou = 0;struct TRegistro r;fpos_t Byte;p = fopen(s1, "rb");fgetpos(p, &Byte);fread(&r, sizeof(r), 1, p);while (!feof(p) && !Achou)if (strcmp(s, r.Cpf) == 0)
Achou = 1;else
{fgetpos(p, &Byte);fread(&r, sizeof(r), 1, p);}
if (Achou == 0)return (1);
elsereturn(Byte);
}
void CruzaArquivos(char s1[12], char s2[12], char s[12]){long Tam;struct TRegistro r;FILE *p, *p1, *p2;Tam = sizeof(r);p1 = fopen(s1, "rb");p2 = fopen(s2, "rb");
![Page 54: 47434253 Respostas Dos Exercicios Do Livro Jaime Evaristo Programando Com Pascal](https://reader035.vdocuments.mx/reader035/viewer/2022081717/5448eb7db1af9f5f618b4c1d/html5/thumbnails/54.jpg)
p = fopen(s, "wb");fread(&r,Tam, 1, p1);while (!feof(p1))
{if (ConsultaRegistro(r.Cpf, s2) != 1)
fwrite(&r,Tam, 1, p);fread(&r,Tam, 1, p1);}
fclose(p1);fclose(p2);fclose(p);}
main(){ char NomeArq1[12], NomeArq2[12];printf("Digite o nome do arquivo \n");scanf("%s", NomeArq1);printf("Digite o nome do segundo arquivo");scanf("%s", NomeArq2);CruzaArquivos(NomeArq1, NomeArq2, "RegCom");}
7. /*Funcao que permuta as posições de dois registros de um arquivo*/int ConsultaRegistro(char s[12], char s1[12]){FILE *p;int Achou = 0;struct TRegistro r;fpos_t Byte;p = fopen(s1, "rb");fgetpos(p, &Byte);fread(&r, sizeof(r), 1, p);while (!feof(p) && !Achou)
if (strcmp(s, r.Mat) == 0)Achou = 1;
else{fgetpos(p, &Byte);fread(&r, sizeof(r), 1, p);}
if (Achou == 0)return (1);
elsereturn(Byte);
}
![Page 55: 47434253 Respostas Dos Exercicios Do Livro Jaime Evaristo Programando Com Pascal](https://reader035.vdocuments.mx/reader035/viewer/2022081717/5448eb7db1af9f5f618b4c1d/html5/thumbnails/55.jpg)
void TrocaRegistros(char s1[12], char s2[12], char s[12]){int Tam;FILE *p;struct TRegistro r1, r2;fpos_t Byte1, Byte2;p = fopen(s, "rb+");Tam = sizeof(r1);Byte1 = ConsultaRegistro(s1, s);if (Byte1 != 1)
{Byte2 = ConsultaRegistro(s2, s);if (Byte2 != 1)
{fsetpos(p, &Byte1);fread(&r1, Tam, 1, p);fsetpos(p, &Byte2);fread(&r2, Tam, 1, p);fsetpos(p, &Byte1);fwrite(&r2, Tam, 1, p);fsetpos(p, &Byte2);fwrite(&r1, Tam, 1, p);}
elseprintf("Registro nao encontrado");
}else
printf("Registro nao encontrado");fclose(p);}
8. /*Função para ordenar um arquivo*/ /*Funcao que copia o ultimo registro no final do arquivo*/void CopiaUltimoRegistro(char s[12]){struct TRegistro r;FILE *p;long Byte, Tam;p = fopen(s, "rb");Tam = sizeof(r);fseek(p, Tam, SEEK_END);fgetpos(p, &Byte);fsetpos(p, &Byte);fread(&r, Tam, 1, p);fclose(p);p = fopen(s, "ab");fwrite(&r, Tam, 1, p);
![Page 56: 47434253 Respostas Dos Exercicios Do Livro Jaime Evaristo Programando Com Pascal](https://reader035.vdocuments.mx/reader035/viewer/2022081717/5448eb7db1af9f5f618b4c1d/html5/thumbnails/56.jpg)
fclose(p);}
/*Funcao que determina a posicao de inclusao de um novo registro*/long PosicaoDeInclusao(struct TRegistro Reg, char s[12]){struct TRegistro r;long Tam, Byte, Pos;FILE *p;p = fopen(s, "rb");Byte = 0;Tam = sizeof(r);fread(&r, Tam, 1, p);while ((!feof(p)) && (strcmp(Reg.Mat, r.Mat) > 0))
{Byte = Byte + Tam;fread(&r, Tam, 1, p);}
fclose(p);return (Byte);}/*Funcao que inclui um registro num arquivo ordenado de modo que ele se mantenha
ordenado*/void IncluiRegistroOrdenado(struct TRegistro Reg, char s[12]){struct TRegistro r;long Tam, Byte, Pos;FILE *p;Tam = sizeof(r);Byte = PosicaoDeInclusao(Reg, s);CopiaUltimoRegistro(s);p = fopen(s, "rb+");fseek(p, 3*Tam, SEEK_END);fgetpos(p, &Pos);while (Pos >= Byte)
{fsetpos(p, &Pos);fread(&r, Tam, 1, p);fgetpos(p, &Pos);fsetpos(p, &Pos);fwrite(&r, Tam, 1, p);fgetpos(p, &Pos);Pos = Pos 3*Tam;}
fsetpos(p, &Byte);fwrite(&Reg, Tam, 1, p);fclose(p);
![Page 57: 47434253 Respostas Dos Exercicios Do Livro Jaime Evaristo Programando Com Pascal](https://reader035.vdocuments.mx/reader035/viewer/2022081717/5448eb7db1af9f5f618b4c1d/html5/thumbnails/57.jpg)
}
void OrdenaArquivo(char s[12]){int Tam;FILE *p, *Aux;struct TRegistro r;Tam = sizeof(r);p = fopen(s, "rb");Aux = fopen("Temp.tmp", "wb");fread(&r, Tam, 1, p);while (!feof(p))
{IncluiRegistroOrdenado(r, "Temp.tmp");fread(&r, Tam, 1, p);}
fclose(p);fclose(Aux);remove(s);rename("Temp.tmp", s);}
9. /*Função que remove comentarios, linha a linha, de um programa em C*/void DeletaComentarios(char *s){int Pos1, Pos2;FILE *p, *Aux;char Linha[80];int i, Tamanho;p = fopen(s, "rt");Aux = fopen("Temp.tmp", "wt");Tamanho = TamanhoArquivo(s);i = 0;while (i < Tamanho)
{fgets(Linha, 80, p);i = i + strlen(Linha);Pos1 = Pos(Linha, "/*");if (Pos1 != 1)
{Pos2 = Pos(Linha, "*/");if (Pos2 != 1)
DeletaCaracteres(Linha, Pos2 Pos1 + 3, Pos1);}
fwrite(Linha, strlen(Linha), 1, Aux);}
fclose(p);
![Page 58: 47434253 Respostas Dos Exercicios Do Livro Jaime Evaristo Programando Com Pascal](https://reader035.vdocuments.mx/reader035/viewer/2022081717/5448eb7db1af9f5f618b4c1d/html5/thumbnails/58.jpg)
fclose(Aux);remove(s);rename("Temp.tmp", s);}
Capítulo 10
1. /*Função que calcula a média aritmética de uma relação de números armazenada num lista*/
float Media(){float Md = 0;int i = 0;Prox = Inicio;while (Prox != NULL)
{i = i + 1;Md = Md + (*Prox).Valor;Prox = (struct TElemento *) (*Prox).p;}
return(Md/i);}
2. /*Função que insere um elemento numa lista ordenada*//*Função que determina a posição de inserção de um elemento numa lista ordenada*/struct TElemento *Posicao(int n){struct TElemento *Aux, *Ant;int i = 0;Prox = Inicio;Ant = Inicio;while ((Prox != NULL) && ((*Prox).Valor > n))
{Ant = Prox;i = i + 1;Prox = (*Prox).p;}
return(Prox);}
void Insere(int n){struct TElemento *Aux, *Ant;Aux = Posicao(n);if (Aux == NULL)
![Page 59: 47434253 Respostas Dos Exercicios Do Livro Jaime Evaristo Programando Com Pascal](https://reader035.vdocuments.mx/reader035/viewer/2022081717/5448eb7db1af9f5f618b4c1d/html5/thumbnails/59.jpg)
{Prox = (struct TElemento *)malloc(5);(*Prox).Valor = n;(*Ant).p = Prox;(*Prox).p = NULL;}
elseif (Ant != Prox)
{Prox = (struct TElemento *)malloc(5);(*Prox).Valor = n;(*Prox).p = (*Ant).p;(*Ant).p = Prox;}
else {
Prox = (struct TElemento *)malloc(5);(*Prox).Valor = n;(*Prox).p = Inicio;Inicio = Prox;}
}