24
EXERCÍCIOS SOBRE A SINTAXE DA LINGUAGEM DE PROGRAMAÇÃO PASCAL Indique os erros em cada um dos programas Pascal abaixo. A partir dos erros encontrados, elabore um resumo sobre as regras de uso correto dos componentes da linguagem Pascal. 1. Declaração de variáveis/Constantes, Comando de Atribuição e Expressões. Program exemplo1; Const valor:= 90.5; Var Unitário, total, qtde: integer; Nome: char; Teste: boolean; Valor: real; Begin Qtde:=1.5; Total:=3; Unitário:=total/qtde; Quadrado:=total**2; Nome:=’teste’; True:=false; Letra1:=’A’; Letra2:=’B’; Teste:=letra1>letra2; Valor:=valor*letra1; End. 2. Funções do Pascal / Comandos de Entrada e Saída de Dados (com uso de formatação) Program Exemplo2 Var Resp, outro; char; Num1, num2: integer; Resultado: real; Begin Write(‘Entre com os números para o cálculo’, num`, num2); Resultado:=succ num1 + sqrt num2; Write(resp); Write(‘Deseja ver os resultados? (‘S’/ ‘N’)’); Readln(resp); Resp:=’S’; Write(‘O resultado da expressão foi resultado’:6:3); Writeln(‘Deseja outro calculo?’); Upcase(outro):=outro;

Caderno de exercícios

Embed Size (px)

Citation preview

Page 1: Caderno de exercícios

EXERCÍCIOS SOBRE A SINTAXE DA LINGUAGEM DE PROGRAMAÇÃO PASCAL

Indique os erros em cada um dos programas Pascal abaixo. A partir dos erros encontrados, elabore um resumo sobre as regras de uso correto dos componentes da linguagem Pascal.

1. Declaração de variáveis/Constantes, Comando de Atribuição e Expressões.Program exemplo1;Const valor:= 90.5;Var

Unitário, total, qtde: integer;Nome: char;Teste: boolean;Valor: real;

BeginQtde:=1.5;Total:=3;Unitário:=total/qtde;Quadrado:=total**2;Nome:=’teste’;True:=false;Letra1:=’A’;Letra2:=’B’;Teste:=letra1>letra2;Valor:=valor*letra1;

End.

2. Funções do Pascal / Comandos de Entrada e Saída de Dados (com uso de formatação)Program Exemplo2Var

Resp, outro; char;Num1, num2: integer;Resultado: real;

BeginWrite(‘Entre com os números para o cálculo’, num`, num2);Resultado:=succ num1 + sqrt num2;Write(resp);Write(‘Deseja ver os resultados? (‘S’/ ‘N’)’);Readln(resp);Resp:=’S’;Write(‘O resultado da expressão foi resultado’:6:3);Writeln(‘Deseja outro calculo?’);Upcase(outro):=outro;

End.

3. Estrutura de Seleção (IF.....THEN.....ELSE)Program Exemplo3;Var

Sexo, resp_carta: char;Idade, num_reserv, mulheres, num_carta, d_val, m_val, a_val: integer;

Begin

Page 2: Caderno de exercícios

Read(sexo, idade);If sexo=’M’ and idade>=’18’ then

Write(‘Digite o número da carteira de reservista: ‘);Read(num_reserv);

ElseMulheres:=mulheres+1;Write(‘Possui carteira de motorista?`);Read(reso_carta);If resp_carta = ‘S’ or ‘s’ then

Write(‘Digite o número da carteira e a data de validade: ‘);Read(num_carta, d_val, m_val, a_val);If a_val=2013 then

Write(‘Atenção! Você deve renovar sua carteira! ‘);Senão

Write(‘Você deve tirar sua carteira para poder dirigir !’);End.

4. Estrutura de Repetição (WHILE .... DO)Programa Exemplo4;Var

Peso_ideal, altura: real;Sexo: char;

BeginWrite(‘Entre com sua altura (-1 para encerra): ‘);Read(altura);While altura <> 1 doBegin

Write(‘Sexo: ‘);Read(sexo);While (sexo<>’F’) or (sexo<>’f’) or (sexo<>’M’) or (sexo<>’m’) do

Write(‘erro: Digite M ou F para o sexo!’);Read(sexo);

If sexo=’M’ or sexo=’m’ then peso_ideal:=(72.7*altura)-58;

elsepeso_ideal:=(62.1*altura)-44.7;

write(‘Seu peso ideal é: ‘, peso_ideal);End;

End.

ESTRUTURA DE CONTROLE SEQUENCIAL

1. Faça um algoritmo que receba o salário-base de um funcionário, calcule e mostre o salário a receber, sabendp-se que esse funcionário tem gratificação de 5% sobre p salário-base e paga imposto de 7% sobre o total.

Solução 1:salBase, salReceber, grat, imp: real;Início

Leia(salBase)

Page 3: Caderno de exercícios

Grat<-salBase*5/100salReceber<-salBase+grat-impImp<-SalReceber*7/100salReceber<-salReceber-impEscreva(salReceber)

FimSolução 2:salBase, salRecebre, Imp: real;Início

Leia(salBase)SalBase<-(salBase*5/100)Imp<-salReceber*7/100salReceber<-salReceber-impEscreva(salReceber)

Fim

2. Faça um algoritmo que receba o ano de nascimento de uma pessoa e o ano atual, calcule e mortre:

a. A idade dessa pessoa;b. Quantos anos ela terá em 2005.

Solução 1:Ano_atual, ano_nascimento, idade_atual, idade_2005: inteiroInício

Leia(ano_nascimento, ano_atual)Idade_atual<-ano_atual-ano_nascimentoIdade_2005<-2005-ano_nascimentoEscreva(idade_atual)Escreva(idade_2005)

Fim

3. Algoritmo do triângulo: Faça um algoritmo para ler a base e a altura do triângulo. Em seguida, escreva a área do mesmo. Área=(Base*Altura)/2

Algoritmo Triangulo;Var

Base, altura, área: real;Begin

Write(‘Digite a base do triângulo: ‘);Readln(base);Write(‘Digite a altura do triângulo: ‘);Readln(altura);Área:=(base*altura)/2;Write(‘A área do triângulo é: ‘, área:10:2);

End.4. Algoritmo Preço de Automóvel: O preço de um automóvel é calculado pela soma do

preço de fábrica com o preço dos impostos (45% do preço de fábrica) e a percentagem do revendedor (28% do preço de fábrica). Faça um algoritmo que leia o

Page 4: Caderno de exercícios

nome do automóvel e o preço de fábrica e imprima o nome do automóvel e o preço final.Program Preco;Var

Nome; string;Preco_fabrica, preco_final, imposto: real;

BeginWrite(‘Digite nome: ‘);Readln(nome);Write(‘Digite preço de fábrica: ‘);Readln(preco_fabrica);Imposto:=preco_fabrica*(0.45 + 0.28);Preco_final:=preco_fabrica+imposto;Writeln(‘Automóvel: ‘, nome);Writeln(‘Preço de venda: ‘,preco_final:10:2);

End.

ESTRUTURA CONTROLE CONDICIONAL (OU DE SELEÇÃO)

1. Construa um algoritmo que receba a idade do usuário e verifique se ele tem mais de 21 anos.

Program Pzim ;var

idade: integer; Begin

writeln(‘Qual a sua idade?’);readln(idade);if (idade>=21) then

writeln(‘Você é de maior!!’)elsewriteln(‘Você é de menor!!’);

End.

2. Construa um algoritmo que receba três números inteiros e verifique qual o maior.Program Pzim ;var

n1, n2, n3: integer; Begin writeln(‘Entre com o primeiro número:’); readln(n1); writeln(‘Entre com o segundo número:’); readln(n2); writeln(‘Entre com o terceiro número:’); readln(n3); if (n1>n2) then begin if (n2>n3) then begin writeln(‘O ‘, n1, ‘ é o maior.’);

Page 5: Caderno de exercícios

end else if (n1>n3) then begin writeln(‘O ‘, n1, ‘ é o maior.’); end else begin writeln(‘O ‘, n3, ‘ é o maior.’); end; end else if (n2>n3) then begin writeln(‘O ‘, n2, ‘ é o maior.’); end else begin writeln(‘O ‘, n3, ‘ é o maior.’); end; End.

3. Construa um algoritmo que calcule o peso ideal de uma pessoa. Dados de entrada: altura e sexo. Fórmulas para o cálculo do peso:Peso ideal de homem = (72,7 x altura) – 58Peso ideal de mulher = (62,1 x altura) – 44,7

Program Pzim ;var

sexo: integer;peso, altura: real;

Begin writeln(‘Sexo(1-Homem 2-Mulher):’); readln(sexo); //analisa se escolha de sexo é válida

if ((sexo<1) or (sexo>2)) then begin writeln(‘Opção inválida!’); end else begin writeln(‘Qual a sua altura?’); readln(altura); if (sexo=1) then //usuário é homem begin peso:=(72.7*altura)-58; end else //usuário é mulher begin peso:=(62.1*altura)-44.7; end; end; writeln(‘Seu peso ideal é ‘,peso); End.

4. Construa um algoritmo que receba o código de um produto e o classifique de acordo com a tabela abaixo:CÓDIGOS DE CLASSIFICAÇÃO1 – Alimento não-perecível2 a 4 – Alimento perecível

Page 6: Caderno de exercícios

5 e 6 – Vestuário7 – Higiene pessoal8 a 15 – Limpeza e utensílios domésticosQualquer outro código Inválido

Program Pzim ;var

cod: integer; Begin writeln(‘Código do produto:’); readln(cod); Case (cod) of 1: writeln(‘Alimento não-perecível’); 2,3,4: writeln(‘Alimento perecível’); 5,6: writeln(‘Vetuário’); 7: writeln(‘Higiene pessoal’); 8,9,10,11,12,13,14,15: writeln(‘Limpeza e utensílios domésticos’) else writeln(‘Código Inválido!’); end; End.

5. Construa um algoritmo que leia uma quantidade indeterminada de números inteiros positivos e identifique qual foi o maior número digitado. O final da série de números digitada deve ser indicada pela entrada de -1.

Program Pzim ;var

n, maior: integer; Begin maior:=0; repeat writeln(‘Entre com um número inteiro positivo (-1 para terminar):’);

readln(n); if (n>maior) then begin maior:=n; end; until (n<0); writeln(‘O maior é: ‘,maior); End.

6. Construa um algoritmo que leia três valores inteiros e os imprima em ordem crescente.

Program Pzim ;var

n1,n2,n3: integer; Begin writeln(‘Digite o primeiro número:’); readln(n1); writeln(‘Digite o segundo número:’); readln(n2); writeln(‘Digite o terceiro número:’); readln(n3); if (n1>n2) then begin if (n1>n3) then

Page 7: Caderno de exercícios

begin if (n2>n3) then begin writeln(‘Números em ordem crescente: ‘,n3, n2, n1); end else writeln(‘Números em ordem crescente: ‘, n2, n3, n1); endelse

writeln(‘Números em ordem crescente: ‘, n2, n1, n3); end else if (n2>n3) then begin if (n1>n3) then begin writeln(‘Números em ordem crescente: ‘, n3, n1, n2); end else writeln(‘Números em ordem crescente: ‘, n1, n3, n2); end else writeln(‘Números em ordem crescente: ‘, n1, n2, n3); End.

7. Construa um algoritmo que receba um número inteiro e verifique se o mesmo é primo.

8. Dada a fórmula: H = 1 + ½ + 1/3 + ¼ + ... + 1/n. Construa um algoritmo que calcule o número H, dado o número inteiro N.

9. Construa um algoritmo que calcule o fatorial de um número N inteiro e positivo (N!). Saiba que:N! = 1x2x3x...x(n-1)xn0! = 1

10. A série de Fibonacci é formada pela seguinte sequencia: 1,1,2,3,5,8,13,21,34,55,.... Construa um algoritmo que gere a série de Fibonacci até o vigésimo termo.

11. Construa um algoritmo que leia cinco números inteiros e identifique o maior e o menor.

12. Construa um algoritmo que imprima a tabela de equivalência de graus Fahrenheit para centígrados. Os limites dão de 50 a 70 graus Fahrenheit com intervalo de 1 grau.Fórmula: C = 5/9(F-32)

13. Uma rainha requisitou os serviços de um monge, o qual exigiu o pagamento em grãos de trigo da seguinte maneira: os grãos de trigo seriam dispostos em um tabuleiro de xadrez, de tal forma que a primeira casa do tabuleiro tivesse um grão, e as casas seguintes o dobro da anterior. Construa um algoritmo que calcule quantos grãos de trigo a Rainha deverá pagar ao monge.

14. Construa um algoritmo que apure uma eleição com três candidatos. O algoritmo deve realizar as seguintes tarefas:Calcular o total de votos para cada candidato;Calcular a quantidade de votos nulos;Calcular a quantidade de votos em branco;Calcular o percentual de votos em branco e nulos em relação ao total;A votação deve obedecer as seguintes convenções:1,2,3 => votos dos candidatos;4 => votos em branco;

Page 8: Caderno de exercícios

5 => votos nulos;0 => encerramento da apuração;

15. José tem 1,50m e cresce 2 centímetros por ano. Pedro tem 1,10m e cresce 3 centímetros por ano. Construa um algoritmo que calcule em quantos anos Pedro será maior que José.

16. Faça um algoritmo que calcule a média ponderada de um aluno, a partir de duas 3 notas obtidas no curso, sabendo-se que a primeira avaliação tem peso 2, a segunda tem peso 4 e a terceira tem peso 4. Mostre, ao final, a mensagem: “A MÉDIA FINAL DE ... FOI ...”. Informar também se o aluno foi aprovado, mostrando a mensagem “APROVADO” caso a nota final seja maior ou superior a 7,0.

Aluno: caracter;nota1, nota2, nota3, media: realp1, p2, p3: inteiro;Início

P1<-2;P2<-4;P3<-4;Leia(aluno);Leia(nota1, nota2, nota3);Media(nota1*p1+nta2*p2+nota3*p3)/10;Escreva(“A média de ”, aluno, “foi “, media);Se (media>=7,0) então

Escreva(“Aprovado”);Fim se

Fim

17. Elabore um algoritmo usando notação de fluxograma que verifique se um dado número inteiro positivo é PAR ou ÍMPAR.

F

V

Fim

Num “ eh ímpar”

Num “ eh par”

Num mod 2

Num

Início

Page 9: Caderno de exercícios

18. Modifique o algoritmo da média do aluno para informar:APROVADO............... caso a nota final esteja no intervalo [10, 7]RECUPERAÇÃO.......... caso a nota final esteja no intervalo [5, 7]REPROVADO.............. caso a nota final esteja no intervalo [0, 5]

Aluno: caracter;Nota1, nota2, nota3, media: real;Inicio

Leia(aluno);Leia(nota1, nota2, nota3);Media<-(nota1*0.2+nota2*0.4+nota3*0.4)Escreva(“A média de”, aluno, “foi “, media);Se (media>=7,0) então

Escreva(“Aprovado”);Senão

Se(media<7,0 e media>=5,0) entãoEscreva(“Recuperação);

SenãoEscreva(“Reprovado”);

Fim se;Fim se;

Fim

19. Faça um algoritmo que leia 2 valores numéricos e um símbolo. Caso o símbolo seja um dos relacionados abaixo efetue a operação correspondente com os valores. Atenção para a divisão por 0!

“+” operação de soma“-“ operação de subtração“*” operação de multiplicação“/” operação de divisão

Num1, num2: real;Operador: caracter:Início

Leia(num1, num2);Leia(operador);Escolha operador

Caso “+”: escreva(num1+num2);Caso ”-“: escreva(num1-num2);Caso “*”: escreva(num1*num2);Caso “/”: Se num2<>0 então

Escreva(num1/num2)Senão

Escreva(“Divisão indefinida”);Fim se

Fim escolha;Fim

Page 10: Caderno de exercícios

20. Dados 3 valores A, B, C, verifique se podem ser valores de lados de um triângulo e, se for, determine se o triângulo é equilátero, isósceles ou escaleno.

21. Sejam 3 números distintos, A, B, C. Coloque-os em ordem crescente, utilizando seleção encadeada (ou aninhada).

22. Algoritmo 3 Menores: Faça um algoritmo que leia 3 números inteiros e imprima o menor deles.Program Menor_2;Var

N1, n2, n3, menor: integer;Begin

Clrscr;Writeln(‘Digite 3 valores:’);Read(n1, n2, n3);If (n1<n2) and (n1<n3) then

Menor:=n1;Else

If (n2<n1) and (n2<n3) thenMenor:=n2;

ElseMenor:=n3;

Writeln(‘O menor dos valores é: ‘,menor);End.

23. Algoritmo Salário: Uma empresa tem para um determinado funcionário uma ficha contendo o nome, número de horas trabalhadas e o no de dependentes de um funcionário. Considerando que:

a. A empresa paga 12 Reais por hora e 40 Reais por dependentes;b. Sobre o salário são feitos descontos de 8,5% para o INSS e 5% par IR;

Faça um algoritmo para ler o Nome, número de horas trabalhadas e número de dependentes de um funcionário. Após a leitura, escreva qual o Nome, salário bruto, os valores descontados para cada tipo de imposto e finalmente qual o salário líquido do funcionário:Program Salario;Uses

Crt;Var

Nome: string;Numhora, salBruto, salliq: real;Numdep: integer;

BeginClrscr;Write(‘Digite o nome do funcionário: ‘);Read(nome);Write(‘Número de horas trabalhadas: ‘);Read(numhora);Write(Número de dependentes: ‘);

Page 11: Caderno de exercícios

Read(numdep);Writeln;Salbruto:=(12*numhora)+(40*Numdep);Salliq:=salbruto-((salbruto*0.085)+(salbruto*0.05));Write(‘Nome do funcionário: ‘, nome);Writeln;Write(‘Salário Líquido: ‘, salliq);

End.

ESTRUTURA CONTROLE REPETIÇÃO

1. Receber 3 valores numéricos em 3 variáveis A, B e C, e trocar os valores entre as variáveis de forma que, ao final do algoritmo, a variável A possua o menor valor e a variável C o maior.

2. Dado um número inteiro de segundos, mostrar a quantidade de horas, minutos e segundos correspondentes.

3. Considere o seguinte problema:Queremos calcular a média final da segunda unidade dos alunos da 6ª série. Os 40 alunos realizaram três provas. A primeira prova teve peso 2.0, a segunda teve peso 4.0 e a terceira, peso 4.0.I – Ates de elaborar o algoritmo, responda as perguntas a seguir:a) Qual o objetivo do algoritmo?b) Quais são os dados de entrada?c) Qual será o processamento a ser utilizado?d) Quais serão os dados de saída?e) Existem restrições/regras específicas do problema?

II – Agora elabore a parte de declaração de dados do algoritmo, usando pseudocódigo. Crie variáveis e constantes. Lembre que os identificadores devem ser menmônicos!

III – Agora elabore um algoritmo para solucionar o problema. Mesmo sem conhecer as estruturas de controle do Portugol você pode elaborar um algoritmo usando notação que quiser (texto em português, desenhos etc).

IV – Seu algoritmo está correto? Como você pode conferir? Aponte os erros encontrados.

4. Seja a série S= 1/1 – 2!/4 + 3!/9 – 4!/16 + 5!/25 – 6!/36 ... – 10!/100a. Elabore um algoritmo, usando notação de fluxograma, que determine o valor

de S para 10 termos.b. Faça um teste exaustivo do algoritmo feito no item (a) para os 3 primeiros

termos de S, usando uma tabela como no modelo abaixo:Var 1 var2 var3 condição... ... ... ...

Page 12: Caderno de exercícios

5. Escreva um algoritmo em pseudocódigo que receba um número inteiro positivo N e apresente um quadro de números como o que se segue abaixo. Este é o caso de N=5. Considere que o string ‘/n’ indica salto de linha e use o comando escreva (‘/n’) pra executar a ação de saltar uma linha, a fim de imprimir números numa nova linha.1 2 3 4 52 3 4 5 63 4 5 6 74 5 6 7 85 6 7 8 9

6. Desejamos efetuar uma análise estatística a respeito dos livros vendidos por uma livraria em uma determinado mês. Para cada livro são fornecidas as seguintes informações: título do livro, tipo (F=Ficção / N=Não-Ficção / T=Técnico-Científico), preço unitário de venda e quantidade de exemplares vendidos no mês.Elabore um algoritmo em pseudolinguagem que leia as informações sobre os livros e ao final, mostre o seguinte relatório:

a. Quantidade de exemplares de cada tipo (Ficção, Não-Ficção, Técnico-Científico) vendidos no mês;

b. Média de preços de venda de livros por tipo;c. Nome do livro mais vendido com eu preço de venda (Obs.: é preciso

considerar empates);7. O algoritmo abaixo lê um conjunto de CPFs de n pessoas de uma região

(consideramos que o número de n pessoas é sempre maior ou igual a dois) e informa se os CPFs estão organizados em ordem crescente ou decrescente. A leitura dos CPFs deve ser interrompida logo que se identifiquem que eles não estão organizados em ordem crescente ou decrescente (isto é, estão em ordem randômica).Verifique o algoritmo e corrija os 9 erros existentes, acrescentando ou corrigindo os comandos. Não é necessário reescrever todo o algoritmo.

Cpf, menor, maior: inteiro;Cont: real;Decresente, crescente: caracter;Início

Escreva (‘Entre com a quantidade de CPFs do conjunto (maior que 1):’);Leia(n);Escreva(‘Entre um número de CPF:’);

Leia(cpf);Menor<-cpf;Maior<-cpf;Crescente<-verdadeiro;Decrescente<-verdadeiro;Repita

Page 13: Caderno de exercícios

Escreva(‘Entre com um número de CPF:’);Leia(cpf);Se decrescente e (cpf< menor) então

Menor<-cpf;Senão

Decrescente<-falso;Se (cpf> maior) ou crescente então

Cpf<-maior;Senão

Crescente<-falso;Cont<-cont+1;

Até (cont>n) ou not crescente ou not decrescente;Se crescente então

Escreva(‘Os números de CPFs estão em ordem crescente’);Senão

Se decrescente entãoEscreva(‘Os números de CPFs estão em ordem decrescente’);

SenãoEscreva(‘Os números de CPFs estão em ordem randômica’);

Fim.

8. Algoritmo Média Valor: dado uma série de 20 valores reais, faça um algoritmo que calcule e escreva a média aritmética destes valores, entretanto se a média obtida for maior que 8 deverá ser atribuída 10 para a média.Program Media_20Var

Conta: integer;Media, num, soma: real;

BeginClrscr;Conta:=0;Soma:=0;Writeln(‘Digite 20 numeros’);While conta<20 doBegin

Read(num);Soma:=soma+num;Conta:=conta+1;

End;Media:=(soma/20);If media > 8 then

Writeln(‘Média = 10’);Else

Writeln(‘A média é: ‘, media);End.

9. Algoritmo Média Maior que 4: dado um conjunto de n registros cada registro contendo um valor real, faça um algoritmo que calcule a média dos valores maiores que 4.Program Maior4;Uses

Page 14: Caderno de exercícios

CRT;Var

N, aux: integer;Soma,media, numero: real;

BeginClrscr;Write(‘Digite valores diferentes de 999’);Writeln;Aux:=0;Soma:=0;Read(numero);While numero<>999 doBegin

If numero > 4 thenBegin

Soma:=soma+numero;Aux:=aux+1;

End;Read(numero);

End;Media:=(soma/aux);Write(‘Média= ‘,media);

End.

MANIPULAÇÃO DE CADEIAS DE CARACTERES

1. Escreva um programa em Pascal para ler 20 nomes de pessoas na ordem dreta (com até 30 caracteres cada) e imprima os nomes como foram lidos e na forma ‘sobrenome, nome’.

2. Escreva um programa em Pascal para ler frases com até 80 caracteres e determinar se cada frase é um palíndromo perfeito ou não. Encerrar o processamento quando uma mesma frase estiver repetida em linhas adjacentes de entrada. Sugestão: eliminar espaços em branco e demais caracteres não alfabéticos antes de efetuar a verificação. Exemplo de palíndromo: ‘socorram-me, subi no ônibus e Marrocos.

3. Escreva um programa em Pascal para determinar as formas nominais e para conjugar verbos regulares de qualquer conjugação nos vários tempos verbais simples. Estabeleça um diálogo amigável com o usuário, solicitando o verbo e informações para direcionar o processamento.

4. Escreva um programa em Pascal para ler uma lista de vários nomes de 25 caracteres e imprimir os nomes na sequencia de leitura e em ordem alfabética inversa. Encerrar o processamento quando encontrar a palavra final.

5. Escreva um programa em Pascal para determinar o primeiro e o último nomes da classificação alfabética de um grupo de vários nomes, sem ordenar o grupo de nomes. Encerrar o processamento quando encontrar o final do arquivo de entrada.

6. Escreva um programa em Pascal para determinar aquele que seria o penúltimo nome da classificação alfabética num grupo de vários nomes e sua posição relativa de entrada.

7. Escreva um programa em Pascal para criptografar uma frase com até 80 caracteres de acordo com o seguinte algoritmo: - para os primeiros 40 caracteres da frase: cada caracter deve ser substituído pelo caracter que está três posições à sua frente na tabela ASCII. Os três últimos caracteres da tabela ASCII serão substituídos pelo caracter que o

Page 15: Caderno de exercícios

antecede em três posições na tabela ASCII. Os três primeiros caracteres da tabela ASCII serão substituídos pelos três últimos.

8. Escreva um programa em Pascal para decodificar uma frase com 80 caracteres que foi criptografada pelo programa anterior.

9. Escreva um programa em Pascal para ler os nomes dos vários amigos de uma pessoa (até encontrar o final do arquivo de entrada) e determinar as várias maneiras que essa pessoa pode convidar os amigos para jantar. Considere um máximo de 20 amigos.

10. Escreva um programa em Pascal que converta um número inteiro positivo de até 6 dígitos em um número romano. Projete o programa de forma que possa executá-lo repetidamente, até que o valor zero seja fornecido pelo utilizador.Ex.:Entrada Saída5 V12 XII50 L100 C350 CCCL

11. Escreva um programa em Pascal para ler um número em algarismos romanos e determinar seu correspondente em algarismos arábicos.

12. Escreva um programa em Pascal para ler um número real com até 10 dígitos (duas casas decimais) representando uma quantia real e escrever por extenso esta quantia.

13. Escreva um programa em Pascal para ler o nome completo de várias pessoas (até encontrar o final do arquivo) e determinar as pessoas pertencentes às várias famílias do grupo. Lembre-se que uma pessoa geralmente pertence a mais de uma família.

14. Escreva um programa em Pascal para ler as relações de até 100 nomes de pessoas que compareceram a duas festas diferentes. A segunda relação começa com `FESTA 2` e termina após a leitura dos 100 nomes ou com o final do arquivo de entrada. O programa deve imprimir uma listagem das pessoas suspeitas (comparecerem a pelo menos uma das festas); - uma listagem das pessoas pouco suspeitas (compareceram a apenas uma das festas); - uma listagem das pessoas muito suspeitas (compareceram a ambas as festas).

15. Faça uma função em Pascal que se comporte como um vírus, que receba uma frase e retorne a frase com cada uma das palavras duplicadas.

Entrada: EU VOU PARA A MARATONA DE COMPUTAÇÃOSaída: EU EU VOU VOU PARA PARA A A MARATONA MARATONA DE DE COMPUTAÇÃO COMPUTAÇÃO16.

Page 16: Caderno de exercícios

EXERCÍCIOS ENVOLVENTO MATRIZES E VETORES

1. Faça um programa que lei dois vetores Q e R com 12 e 20 elementos inteiros (valores repetidos ou não) respectivamente e, determine o vetor W, onde W=Q R. Ao final, o programa deve mostrar o vetor W obtido, lembrando que ele não pode ter elementos repetidos.

2. Foi realizada uma pesquisa sobre a renda mensal de famílias em salvador. Para cada casa visitada foi perguntada a renda mensal. Com isso obteve-se os valores X1, X2, ... Xn (para n casas entrevistadas). Deseja-se calcular a mediana, a média aritmética simples e o desvio padrão da amostra. Use os procedimentos e fórmulas abaixo:Média=∑xi/nMediana= Mi = o valor central da variável quando os valores são dispostos em ordem (crescente ou decrescente) de magnitude.Método para calcular a mediana em valores não agrupados: Se houver um número ímpar de valores ordenados é só verificar o valor que ocupa a posição central. Se houver um número par de valores ordenados toma-se a média dos 2 valores que estão nas posições centrais.Desvio Padrão = S =√∑¿¿¿

3. Temos uma matriz ALFABETO de 15 linhas e 20 colunas onde cada elemento contém um caracter. Elaborar um programa Pascal para arrumar esta matriz de modo que as letras fiquem ordenadas segundo as linhas da matriz (da esquerda para a direita). Seu algoritmo não deve usar um vetor auxiliar!

4. Deseja-se ler duas cadeias de N caracteres cada e verificar se uma é anagrama da outra, mostrando em seguida os oares que não são anagramas com a indicação “não são anagramas” e os pares que são anagramas com a indicação “são anagramas”.Ex: ALMA LAMA – são anagramas BOLA LOBO – não são anagramas ROMA AMOR – são anagramas*Usar funções do Pascal para manipulação de cadeias de caracteres

5. Faça um programa que utilize a função Random para gerar 1000 números aleatórios e guarde-os num vetor. Ordene o vetor. Leia um número “chute”do teclado e informe se esse número está ou não no vetor. Utilize busca binária para localizar o número.

6. Receber do usuário uma lista de N nomes e idades de pessoas, onde N também é fornecido pelo usuário, e mostrar o nome e a idade da pessoa mais idosa e da pessoa mais jovem.

7. Gerar a matriz transposta de uma matriz 5x5 dada pelo usuário (a transposta é obtida permutando-se as linhas e as colunas de uma matriz).

Page 17: Caderno de exercícios

8. Queremos efetuar a compactação de um vetor V1 de N algarismos 0 e 1 (N<=40) digitado pelo usuário (onde cada algarismo ocupa uma posição do vetor), de forma que o vetor resultante V2 de N elementos (N<=40) possua menos elementos do que o vetor original. A regra de compactação é a seguinte:

a. o primeiro elemento do vetor V2 é o número de algarismos zero que o vetor V1 contém, a partir do seu início, até o primeiro algarismo um;

b. o próximo elemento do vetor V2 é o número de algarismos um que o vetor V1 contem, a partir do último zero encontrado, até o próximo algarismo zero;

c. o próximo elemento do vetor V2 é o número de algarismos zero que o vetor V1 contém, a partir do último um encontrado, até o próximo algarismo um;

d. repete-se os passos b) e c) ate o final do vetor V1.Exemplo: para o vetor digitado V1=(0,0,0,1,1,0,1,0,1,1,0)Obtêm-se V2=(3,2,1,1,1,2,1)Fazer o algoritmo para efetuar esta compactação, recebendo o valor de N e o vetor V1 do usuário e testando se os algarismos digitados são somente 0’s e 1’s.

9. Escreva um algoritmo que calcule a interseção (valores em comum) entre os valores contidos em dois vetores V1 e V2 e armazene estes valores no vetor V3.

10. Faça um algoritmo para receber do usuário 10 nomes de postos de gasolina e os preços da gasolina em cada um deles mostrar os nomes e os respectivos preços em ordem, do menor para o maior preço. (Dica: utilizar dois vetores para armazenar os nomes e os preços).

11. Faça um algoritmo para ordenar um vetor de N inteiros (Dica: encontrar o maior de todos os inteiros e trocá-lo com o último elemento do vetor, repetindo este procedimento N vezes porém descartando, a cada interação, os elementos já ordenados).

12. Uma matriz quadrada A, cujos elementos são designados por Ai,j, é dita simétrica se Ai,j=Ai,j. Construir um algoritmo para ler uma matriz NxN do usuário (onde o valor de N também é fornecido pelo usuário) e determinar se ela é ou não simétrica.

Obs.: funções prontas podem ser utilizadas:Funções de manipulação de literais:LEN(x) – retorna o número de caracteres do literal x.INI(x, n) – retorna um iteral que consiste nos n primeiros caracteres do literal x.FIM(x, n) – retorna um literal que consiste nos n últimos caracteres do literal x.

Operador de concatenação |

Funções de manipulação de inteirosTRUNCA(x)

13. Elabore um programa que efetue a multiplicação de duas matrizes A(3x4) e B(4x3) de números inteiros, onde a matriz A tem valores constantes e a matriz B tem seus valores fornecidos pelo usuário. O programa deve mostrar ao final, a matriz produto.Matriz A: 2 11 8 70

4 22 5 12

Page 18: Caderno de exercícios

3 13 6 6614. Uma locadora de vídeo com 2 filiais precisa reorganizar seu cadastro de clientes, pois

existem duplicações de cadastro de clientes em cada filial. E ela também deseja saber quais os clientes que locam filmes nas duas filiais. Faça um programa (com ou sem o uso de procedimentos) que, usando duas listas de clientes Filial1 e Filial2, retorne uma única lista com todos os clientes da locadora, aparecendo somente uma vez e outra lista com os clientes que locam filmes nas duas filiais (também aparecendo somente uma vez).A locadora mantém as seguintes informações de cada cliente: nome, nuúmero de identidade e nomes dos dependentes (Máx. 3 dependentes).Obs 1: Não é preciso elaborar o cadastro de clientes (inserção de elementos em Filial’ e Filial2). Considere que já está feito.Obs 2: Considere que o cadastro de clientes está duplicado quando o nome do cliente aparece mais de uma vez.

15. Dada uma sequencia de n números reais, determinar os números que compõem a sequencia e o número de vezes que cada um deles ocorre na mesma.Exemplo: n=8Sequencia: -1.7, 3.0, 0.0, 1.5, 0.0, -1.7, 2.3, -1.7Saída:-1.7 ocorre 3 vezes3.0 ocorre 1 vez0.0 ocorre 2 vezes1.5 ocorre 1 vez2.3 ocorre 1 vez

16. Dadas duas sequencias com n números inteiros entre 0 e 9, interpretadas como dois números inteiros de n algarismo, calcular a sequencia de números que representa a soma dos dois inteiros:Exemplo: n=81ª. Sequencia 8 2 4 3 4 2 5 12ª. Sequencia +3 3 7 5 2 3 3 7

1 1 6 1 8 6 5 8 817. Desafio: Você já jogou campo minado? Faça um programa que leia uma matriz 20 x

20 de caracteres do teclado. Cada caracter pode ser: * (asterisco) representa uma bomba na coordenada lida; - (traço) representa um local sem bomba. Crie uma matriz de inteiros 20 x 20 que contenha para cada posição [i,j] o número de bombas na vizinhança. Imprima essa matriz na tela. Cada posição tem no máximo 8 vizinhos (as diagonais contam). Veja o exemplo para uma matriz 5x5:Entrada:* - - - -- - - - -* * * * *- - - - ** - - - *Saída:0 1 0 0 0

Page 19: Caderno de exercícios

3 4 3 3 21 2 2 3 23 4 3 5 30 1 0 2 1