Buscar

Exercicios Programacao Pascalzim

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 27 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 27 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 27 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Gustavo Meira - EQ • UEM Algorítmos e Programação de Computadores 
 Exercícios PROG 
 Operações aritméticas simples 
 1. A partir dos valores da base e altura de um triângulo, calcular e exibir sua área. 
 Programa Área_Triangulo; 
 Declare b, h, A: real; 
 Início 
 escreva ('digite o valor da base e altura:'); 
 leia (b, h); 
 A ← (b * h) / 2; 
 escreva ('Áream = ', A); 
 fim . 
 2. Calcular e exibir a média aritmética de quatro valores quaisquer que serão digitados. 
 Programa Media_Aritmetica; 
 Declare a, b, c, d, media: inteiro; 
 Início 
 escreva ('digite o valor dos termos:'); 
 leia (a, b, c, d); 
 media ← (a + b + c + d) div 4; 
 escreva ('Média = ', Media); 
 fim . 
 3. Sabendo que uma milha marítima equivale a um mil, oitocentos e cinqüenta e dois metros e que um quilômetro possui mil 
 metros, fazer um programa para converter milhas marítimas em quilômetros. 
 Programa Milhas_Quilometros; 
 Declare milha, km: real; 
 Início 
 escreva ('digite a quantidade de milhas marítimas:'); 
 leia (milhas); 
 km ← (milhas * 1852) / 1000; 
 escreva ('Quilômetros = ', km); 
 fim . 
 4. A partir do diâmetro de um círculo que será digitado, calcular e exibir sua área. 
 Programa Area_Circulo; 
 Declare diam, r, A: real; 
 Início 
 escreva ('digite o diâmetros:'); 
 leia (diam); 
 r ← diam / 2; 
 A ← Pi * r * r 
 escreva ('Área = ', A); 
 fim . 
 5. Entrar via teclado com o valor da cotação do dólar e uma certa quantidade de dólares. Calcular e exibir o valor 
 correspondente em Reais (R$). 
 Programa Dolar_Real; 
 Declare dol, real, cotacao: real; 
 1 
 Gustavo Meira - EQ • UEM Algorítmos e Programação de Computadores 
 Início 
 escreva ('digite a cotação do Dollar:'); 
 leia (cotacao); 
 escreva ('digite a quantidade de dollares:'); 
 leia (dol); 
 real ← dol * cotacao; 
 escreva ('a quantidade de reais é: ', real, 'R$'); 
 fim . 
 2 
 Gustavo Meira - EQ • UEM Algorítmos e Programação de Computadores 
 Operações com decisão lógica 
 6. Entrar via teclado, com dois valores distintos. Exibir o maior deles. 
 Programa Maior_Valor; 
 Declare n1, n2: real; 
 Início 
 escreva ('digite dois números:'); 
 leia (n1, n2); 
 se (n1 > n2) 
 então escreva (n1, 'é maior'); 
 se (n2 > n1) 
 então escreva (n2, 'é maior'); 
 fim . 
 7. Entrar via teclado, com dois valores distintos. Exibir o menor deles. 
 Programa Menor_Valor; 
 Declare n1, n2: real; 
 Início 
 escreva ('digite dois números:'); 
 leia (n1, n2); 
 se (n1 < n2) 
 então escreva (n1, 'é menor); 
 se (n2 < n1) 
 então escreva (n2, 'é menor); 
 fim . 
 8. Entrar com dois valores quaisquer. Exibir o maior deles, se existir, caso contrário, enviar mensagem avisando que os 
 números são idênticos. 
 Programa Maior_Valor; 
 Declare n1, n2: real; 
 Início 
 escreva ('digite dois números:'); 
 leia (n1, n2); 
 se (n1 > n2) 
 então escreva (n1, 'é maior'); 
 se (n2 > n1) 
 então escreva (n2, 'é maior'); 
 se (n1 = n2) 
 então escreva ('Os números são idênticos'); 
 fim . 
 9. Calcular e exibir a área de um retângulo, a partir dos valores da base e altura que serão digitados. Se a área for maior que 
 100, exibir a mensagem “Terreno grande”, caso contrário, exibir a mensagem “Terreno pequeno”. 
 Programa Tamanho_Terreno; 
 Declare b, h, A: real; 
 Início 
 escreva ('Informe o valor da base e da altura do primeiro retângulo:'); 
 leia (b, h); 
 A ← b * h; 
 se (A > 100.00) 
 então escreva (A, 'Terreno grande') 
 senão escreva (A, 'Terreno pequeno'); 
 fim . 
 10. Entrar via teclado com três valores distintos. Exibir o maior deles. 
 3 
 Gustavo Meira - EQ • UEM Algorítmos e Programação de Computadores 
 Programa Maior_Valor; 
 Declare n1, n2, n3: real; 
 Início 
 escreva ('digite três números:'); 
 leia (n1, n2, n3); 
 se (n1 > n2) e (n1 > n3) 
 então escreva (n1, 'é maior'); 
 se (n2 > n1) e (n2 > n3) 
 então escreva (n2, 'é maior'); 
 se (n3 > n1) e (n3 > n2) 
 então escreva (n3, 'é maior'); 
 fim . 
 11. A partir de três valores que serão digitados, verificar se formam ou não um triângulo. Em caso positivo, exibir sua 
 classificação: “Isósceles, escaleno ou eqüilátero”. Um triângulo escaleno possui todos os lados diferentes, o isósceles, dois 
 lados iguais e o eqüilátero, todos os lados iguais. Para existir triângulo é necessário que a soma de dois lados quaisquer seja 
 maior que o outro, isto, para os três lados. 
 Programa Trilegal; 
 Declare a, b, c: real; 
 Início 
 escreva ('digite três medidas:'); 
 leia (a, b, c); 
 se (a + b > c) e (a + c > b) e (b + c > a) 
 então início 
 se (a = b) e (b = c) 
 então escreva ('triângulo equilátero'); 
 se (a <> b) e (a <> c) e (b <> c) 
 então escreva ('triângulo escaleno'); 
 se ((a = b) e (a <> c)) ou ((a = c) e (a <> b)) ou ((b = c) e (a <> c)) 
 então escreva ('triângulo isóceles'); 
 fim . 
 senão escreva ('não forma um triângulo') 
 fim . 
 12. Uma escola com cursos em regime semestral, realiza duas avaliações durante o semestre e calcula a 
 média do aluno, da seguinte maneira: MEDIA = (P1 + 2P2) / 3. Fazer um programa para entrar via teclado com os valores das 
 notas (P1 e P2) e calcular a média. Exibir a situação final do aluno (“Aprovado ou Reprovado”), sabendo que a média de 
 aprovação é igual a cinco. 
 Programa Aprovado_ou_Reprovado; 
 Declare p1, p2, média: inteiro; 
 Início 
 escreva ('digite quanto você tirou nas duas provas:'); 
 leia (p1, p2); 
 media ← (p1 + (2 * p2)) div 3; 
 se (media >= 50) 
 então escreva (media, 'Aluno Aprovado') 
 senão escreva (media, 'Aluno Reprovado'); 
 fim . 
 https://blockly.games/?lang=pt-br 
 https://blockly.games/?lang=pt-b 
 4 
 Gustavo Meira - EQ • UEM Algorítmos e Programação de Computadores 
 Pascal & Vetores 
 1.Elabore um programa que, dada a idade de um atleta, classifique-o em uma das seguintes categorias: 
 infantil A = [5 – 7] anos 
 infantil B = [8 – 10] anos 
 juvenil A = [11 – 13] anos 
 juvenil B = [14 – 17] anos 
 Master = maiores de 17 anos. 
 Program Atleta; 
 Var age, y: integer; 
 begin 
 writeln ('coloque sua idade'); 
 readln (age); 
 if (age >= 5) and (age <= 7) 
 then writeln ('infantil A') 
 else if (age >= 8) and (age <= 10) 
 then writeln ('infantil B') 
 else if (age >= 11) and (age <= 13) 
 then writeln ('juvenil A') 
 else if (age >= 14) and (age <= 17) 
 then writeln ('juvenil B') 
 else if (age > 17) 
 then writeln ('master'); 
 end . 
 2. Escreva um programa para ler as notas da 1ª e 2ª avaliações de um aluno, calcular e mostrar a média semestral. Faça com 
 que o programa só aceita notas válidas (uma nota válida deve pertencer ao intervalo [0,10]). Cada nota deve ser validada 
 separadamente. Deve ser exibida a mensagem "Nota inválida" caso a nota informada não pertencer ao intervalo [0,10]. 
 Utilize a estrutura Repeat .. Until na construção da repetição de validação. 
 Program Aprovado; 
 Var n1, n2, media: real ; 
 begin 
 writeln ('informe a sua primeira nota:'); 
 readln (n1); 
 if (n1 > 10) or (n1 < 0) 
 then begin 
 repeat 
 writeln ('notan inválida, tente novamente:'); 
 readln (n1); 
 until (n1 <= 10) and (n1 >= 0); 
 end ; 
 Writeln ('informe a sua segunda nota:'); 
 readln (n2); 
 if (n2 > 10) or (n2 < 0) 
 then begin 
 repeat 
 writeln ('nota inválida, tente novamente:'); 
 readln (n2); 
 until (n2 <= 10) and (n2 >= 0); 
 end ; 
 media := (n1 + n2) / 2; 
 writeln ('Media =', media:0:2); 
 end . 
 5 
 Gustavo Meira - EQ • UEM Algorítmos e Programação de Computadores 
 3. Ler um vetor C de 10 nomes de pessoas, após pedir que o usuário digite um nome qualquer de pessoa. Escrever a 
 mensagem ACHEI, se o nome estiver armazenado no vetor C ou NÃO ACHEI, caso contrário. 
 Program Vetor_de_Nomes; 
 Var C: array [1..10] of string; 
 x: string; 
 i: integer; 
 Begin 
 for i := 1 to 10 do 
 begin 
 writeln ('Digite o nome da ', i, 'º pessoa:'); 
 readln (C[i]); 
 end ; 
 write ('Procure alguma pessoa: '); 
 readln (x); 
 if (C[1] = x) or (C[2] = x) or (C[3] = x) or (C[4] = x) or (C[5] = x) or (C[6] = x) or 
 (C[7] = x) or (C[8] = x) or (C[9] = x) or (C[10] = x) 
 then write ('Achei') 
 else write ('Não achei') 
 end . 
 4. Ler um vetor Q de 10 posições (aceitar somente números positivos). Escrever a seguir o valor do maior elemento de Q e a 
 respectiva posição que ele ocupa no vetor. 
 Program Posicao_do_Vetor; 
 Var Q: array[1..10] of integer; 
 i, maior, posicao: integer; 
 Begin 
 for i := 1 to 10 do 
 Begin 
 write ('Digite número positivo: '); 
 readln (Q[i]); 
 if Q[i] < 0 
 then begin 
 repeat 
 write ('Digite outro número: '); 
 readln (Q[i]); 
 until (Q[i] >= 0) 
 end ; 
 end ; 
 maior := Q[1]; 
 posicao := 1; 
 for i := 2 to 10 do 
 begin 
 if Q[i] > maior 
 then maior := Q[i]; 
 if maior = Q[i] then posicao := i 
 end ; 
 writeln ('O maior número é: ', maior); 
 write ('Sua posição é: ', posicao); 
 end . 
 6 
 Gustavo Meira - EQ • UEM Algorítmos e Programação de Computadores 
 Matrizes 
 1. Escreva um algoritmo que receba uma matriz A3x3 de números inteiros e em seguida subtraia de todos seus elementos o 
 número que está armazenado em seu centro. Por fim, o programa deve apresentar a matriz resultante. 
 Program Matriz_1; 
 Var mat : array [1..3,1..3] of integer ; 
 i, j: integer; 
 Begin 
 for i := 1 to 3 do 
 Begin 
 for j := 1 to 3 do 
 Begin 
 write ('Informe a matriz [', i, ',', j, ']: '); 
 readln ( mat[i,j] ); 
 end ; 
 end ; 
 for i := 1 to 3 do 
 Begin 
 for j := 1 to 3 do 
 if ((i = 2) and (j = 2)) 
 then mat[2,2] := mat[2,2] 
 else mat[i,j] := mat[i,j] - mat[2,2]; 
 end ; 
 for i := 1 to 3 do 
 Begin 
 for j := 1 to 3 do 
 Begin 
 write ( mat[i,j]:2 , ' ') 
 end ; 
 writeln (''); 
 end ; 
 end . 
 2. Faça um programa que receba uma matriz A3x4 e um valor real n. O programa deverá construir e apresentar uma matriz B 
 que é n × A. 
 Program Multiplicacao_Escalar; 
 Var matA, matB: array[1..3,1..4] of real; 
 n: real; 
 i, j: integer; 
 Begin 
 write ('Digite o valor do escalar: '); 
 readln (n); 
 for i := 1 to 3 do 
 begin 
 for j := 1 to 4 do 
 begin 
 write ('Digite o valor do elemento [', i, ',', j, ']: '); 
 readln (matA[i,j]); 
 end ; 
 end ; 
 for i := 1 to 3 do 
 begin 
 for j := 1 to 4 do 
 begin 
 matB [i,j] := n * matA [i,j]; 
 write (matB[i,j]:5:1, ' ') 
 end ; 
 7 
 Gustavo Meira - EQ • UEM Algorítmos e Programação de Computadores 
 writeln (''); 
 end ; 
 end . 
 3. Faça um programa que receba as matrizes de números inteiros A3x4 e B3x4. O programa deverá construir e apresentar 
 uma matriz C que é A + B. 
 Program Soma_de_MAtrizes; 
 Var matA, matB, matC: array[1..3,1..4] of integer; 
 i, j: integer; 
 Begin 
 for i := 1 to 3 do 
 begin 
 for j := 1 to 4 do 
 begin 
 write ('Digite o valor do elemento A[', i, ',', j, ']: '); 
 readln (matA[i,j]); 
 end ; 
 end ; 
 writeln (''); 
 for i := 1 to 3 do 
 begin 
 for j := 1 to 4 do 
 begin 
 write ('Digite o valor do elemento B[', i, ',', j, ']: '); 
 readln (matB[i,j]); 
 end ; 
 end ; 
 writeln (''); 
 writeln ('A matriz C é:'); 
 for i := 1 to 3 do 
 begin 
 for j := 1 to 4 do 
 begin 
 matC [i,j] := matA [i,j] + matB [i,j]; 
 write (matC[i,j]:3, ' ') 
 end ; 
 writeln (''); 
 end ; 
 end . 
 4. Construa um programa que receba valores inteiros para uma matriz quadrada M de ordem 3 e, em seguida, calcule e mostre 
 uma matriz R, resultante da multiplicação dos elementos de M pelo seu maior elemento. 
 Program Multiplicacao_Escalar_2; 
 Var M, R: array[1..3,1..3] of integer; 
 maior, i, j: integer; 
 Begin 
 for i := 1 to 3 do 
 begin 
 for j := 1 to 3 do 
 begin 
 write ('Digite o valor do elemento A[', i, ',', j, ']: '); 
 readln (M[i,j]); 
 end ; 
 end ; 
 maior := M[1,1]; 
 for i := 1 to 3 do 
 8 
 Gustavo Meira - EQ • UEM Algorítmos e Programação de Computadores 
 begin 
 for j := 1 to 3 do 
 begin 
 if M[i,j] > maior then maior := M[i,j] 
 end ; 
 end ; 
 writeln (''); 
 writeln (' A matriz é:'); 
 for i := 1 to 3 do 
 begin 
 for j := 1 to 3 do 
 begin 
 R[i,j] := maior * M[i,j] ; 
 write (R[i,j]:3, ' ') 
 end ; 
 writeln (''); 
 end ; 
 end . 
 5. Construa um algoritmo que receba os elementos de uma matriz 5x5 de valores inteiros e mostre separadamente: 
 • Os elementos da diagonal principal. 
 • Os elementos acima da diagonal principal. 
 • Os elementos abaixo da diagonal principal. 
 Dica: observe como os índices dos elementos se comportam em cada uma dessas regiões da matriz. 
 Program Diagonais_da_Matriz; 
 Var mat: array[1..5,1..5] of integer; 
 i, j: integer; 
 Begin 
 for i := 1 to 5 do 
 begin 
 for j := 1 to 5 do 
 begin 
 write ('Digite o valor do elemento mat[', i, ',', j, ']: '); 
 readln (mat[i,j]); 
 end ; 
 end ; 
 writeln (''); 
 writeln ('Os elementos da diagonal principal são:'); 
 for i := 1 to 5 do 
 begin 
 for j := 1 to 5 do 
 begin 
 if ( i = j ) then write (mat[i,j], ' ') 
 end ; 
 end ; 
 writeln (''); 
 writeln ('Os elementos acima da diagonal principal são:'); 
 for i := 1 to 5 do 
 begin 
 for j := 1 to 5 do 
 begin 
 if ( i < j ) then write (mat[i,j], ' ') 
 end ; 
 end ; 
 writeln (''); 
 writeln ('Os elementos abaixo da diagonal principal são:'); 
 for i := 1 to 5 do 
 begin 
 for j := 1 to 5 do 
 9 
 Gustavo Meira - EQ • UEM Algorítmos e Programação de Computadores 
 begin 
 if ( i > j ) then write (mat[i,j], ' ') 
 end ; 
 end ; 
 end . 
 6. Uma indústria estabeleceu um processo de produção de um composto químico em que o ajuste da temperatura é muito 
 importante. A sala em que este composto é fabricado possui um sensor que afere a temperatura ambiente três vezes ao dia: 
 de manhã, de tarde e de noite. Como forma de estabelecer um padrão de qualidade, o gerente de produção quer saber quais 
 foram a menor e maior temperaturas medidas pelo sensor durante a semana, indicando o dia da semana e o período em que 
 foram observadas. Construa um programa que receba as temperaturas medidas durante uma semana (cada dia e período) e 
 apresente o resultado conforme o gerente solicitou. 
 Dica: armazene os nomes dos dias da semana em um vetor e os nomes dos períodos em outro vetor 
 Program Controle_de_Temperatura; 
 Var mat : array[ 1..3,1..7 ] of integer ; 
 dias : array[ 1..7 ] of string ; 
 hora : array[ 1..3 ] of string ; 
 i, j, maior, menor, x1 , x2 , y1 , y2 : integer; 
 Begin 
 dias[1] := 'segunda'; 
 dias[2] := 'terça'; 
 dias[3] := 'quarta'; 
 dias[4] := 'quinta'; 
 dias[5] := 'sexta'; 
 dias[6] := 'sábado'; 
 dias[7] := 'domingo'; 
 hora[1] := 'de manhã'; 
 hora[2] := 'de tarde'; 
 hora[3] := 'de noite'; 
 for i := 1 to 3 do 
 begin 
 for j := 1 to 7 do 
 begin 
 write ('Digite o valor do elemento mat[', i, ',', j, ']: '); 
 readln (mat[i,j]); 
 end ; 
 end ; 
 maior := mat[1,1]; 
 menor := mat[1,1]; 
 for i := 1 to 3 do 
 begin 
 for j := 1 to 7 do 
 begin 
 if mat[i,j] > maior 
 then maior := mat[i,j]; 
 if mat[i,j] = maior 
 then x1 := j; 
 if mat[i,j] = maior 
 then y1 := i; 
 if mat[i,j] < menor 
 then menor := mat[i,j]; 
 if mat[i,j] = menor 
 then x2 := j; 
 if mat[i,j] = menor 
 then y2 := i; 
 end ; 
 end ; 
 10 
 Gustavo Meira - EQ • UEM Algorítmos e Programação de Computadores 
 writeln (''); 
 write ('maior temperatura: ', maior, ' ', dias[ x1 ], ' ', hora[ y1 ]); 
 writeln (''); 
 write ('menor temperatura: ', menor, ' ', dias[ x2 ], ' ', hora[ y2 ]); 
 end . 
 7. Em uma competição de tiro ao alvo 5 atiradores disputam pelo prêmio de atirador mais preciso. Cada atirador tem direito arealizar 3 disparos contra um alvo localizado a 50 metros de distância. O alvo é dividido em 10 regiões concêntricas, cada uma 
 valendo uma pontuação inteira que vai de 1 a 10. A pontuação final do atirador é calculada como sendo a soma de pontos em 
 seus 3 disparos. Construa um programa que receba o nome de cada atirador e a pontuação de cada disparo. Por fim, o 
 programa deve apresentar o nome do atirador vencedor e sua respectiva pontuação. 
 Program Tiro_ao_Alvo; 
 Var mat: array[1..5,1..3] of integer; 
 nome: array[1..5] of string; 
 i, j, x, y, soma, maior: integer; 
 Begin 
 for i := 1 to 5 do 
 Begin 
 write ('Informe o nome do ', i, 'º participante: '); 
 readln (nome[i]) 
 end ; 
 for i := 1 to 5 do 
 Begin 
 for j := 1 to 3 do 
 Begin 
 write ('Informe a ', j, 'º pontuação do ', i, 'º participante: '); 
 readln (mat[i,j]) 
 end ; 
 end ; 
 maior := mat[1,1]; 
 for i := 1 to 5 do 
 Begin 
 j := 1 ; 
 if (mat[i,j] + mat[i,j+1] + mat[i,j+2]) > maior 
 then maior := (mat[i,j] + mat[i,j+1] + mat[i,j+2]); 
 if (mat[i, j ] + mat[i, j+1 ] + mat[i, j+2 ]) = maior 
 then x := i ; 
 end ; 
 writeln (''); 
 write ('O ganhador é: ', nome[ x ], ' com ', maior, ' pontos!'); 
 end . 
 8. Faça um algoritmo que receba os valores de uma matriz C 2×3 e construa a sua transposta C t . 
 Program Transposta_2x3; 
 Var mat: array[1..2,1..3] of integer; 
 i, j: integer; 
 Begin 
 for i := 1 to 2 do 
 Begin 
 for j := 1 to 3 do 
 Begin 
 write ('Digite o elemento de [', i, ',', j, ']: '); 
 read ( mat[i,j] ); 
 end ; 
 end ; 
 writeln (''); 
 11 
 Gustavo Meira - EQ • UEM Algorítmos e Programação de Computadores 
 for i := 1 to 3 do 
 Begin 
 for j := 1 to 2 do 
 Begin 
 write ( mat[j,i] :3, ' '); 
 end ; 
 writeln (''); 
 end ; 
 end . 
 9. Faça um algoritmo que receba os valores de duas matrizes A 4×3 e B 3×6 e construa a matriz C = A × B. 
 Program Multiplicacao_Matricial; 
 Var A: array[1..4,1..3] of integer; 
 B: array[1..3,1..6] of integer; 
 C: array[1..4,1..6] of integer; 
 i, j: integer; 
 Begin 
 for i := 1 to 4 do 
 Begin 
 for j := 1 to 3 do 
 Begin 
 write ('Informe o elemento [', i, ',', j, ']: '); 
 read (A[i,j]); 
 end ; 
 end ; 
 for i := 1 to 3 do 
 Begin 
 for j := 1 to 6 do 
 Begin 
 write ('Informe o elemento [', i, ',', j, ']: '); 
 read (B[i,j]); 
 end ; 
 end ; 
 for i := 1 to 4 do 
 Begin 
 for j := 1 to 6 do 
 Begin 
 C[i,j] := 0 
 end ; 
 end ; 
 for j := 1 to 6 do 
 Begin 
 for i := 1 to 3 do 
 Begin 
 C[1,j] := C[1,j] + A[1,i] * B[i,j] ; 
 end ; 
 end ; 
 for j := 1 to 6 do 
 Begin 
 for i := 1 to 3 do 
 Begin 
 C[2,j] := C[2,j] + A[2,i] * B[i,j] ; 
 end ; 
 end ; 
 for j := 1 to 6 do 
 Begin 
 for i := 1 to 3 do 
 Begin 
 C[3,j] := C[3,j] + A[3,i] * B[i,j] ; 
 12 
 Gustavo Meira - EQ • UEM Algorítmos e Programação de Computadores 
 end ; 
 end ; 
 for j := 1 to 6 do 
 Begin 
 for i := 1 to 3 do 
 Begin 
 C[4,j] := C[4,j] + A[4,i] * B[i,j] ; 
 end ; 
 end ; 
 writeln (''); 
 for i := 1 to 4 do 
 Begin 
 for j := 1 to 6 do 
 Begin 
 write (C[i,j]:3, ' '); 
 end ; 
 writeln (''); 
 end ; 
 end . 
 10. Faça um programa que receba os valores de uma matriz M3×3 e utilize a Regra de Sarrus para calcular seu determinante. 
 Program Determinante_de_Sarrus; 
 Var M: array[1..3,1..3] of integer; 
 i, j, det: integer; 
 Begin 
 for i := 1 to 3 do 
 Begin 
 for j := 1 to 3 do 
 Begin 
 write ('Digite o elemento [', i, ',', j, ']: '); 
 read (M[i,j]) 
 end ; 
 end ; 
 det := (M[1,1]*M[2,2]*M[3,3]) + (M[1,2]*M[2,3]*M[3,1]) + (M[1,3]*M[2,1]*M[3,2]) - 
 (M[3,1]*M[2,2]*M[1,3]) - (M[3,2]*M[2,3]*M[1,1]) - (M[3,3]*M[2,1]*M[1,2]); 
 writeln (''); 
 write ('O determinante é: ', det); 
 end . 
 13 
 Gustavo Meira - EQ • UEM Algorítmos e Programação de Computadores 
 Strings 
 0. Tabela de ASCII: 
 Program TabelaASCII; 
 Var i: Integer; 
 Begin 
 For i:=0 to 127 Do 
 Begin 
 Writeln ('Codigo: ', i, ' => carac: ', chr(i)); 
 End ; 
 End . 
 1. escreva um programa que receba uma string e apresente a quantidade de vogais presentes nela. 
 Program Quantidade_de_Vogais; 
 Var str, maior : string; 
 i, x, k: integer; 
 Begin 
 write ('Digite uma string: '); 
 read (str); 
 maior := upcase ( str ); 
 x := 0; 
 for i := 1 to length ( maior ) do 
 Begin 
 k := ord (maior[i]); 
 if (k = 65) or (k = 69) or (k = 73) or (k = 79) or (k = 85) 
 then x := x + 1 
 end ; 
 writeln (''); 
 write ('A quantidade de vogais é: ', x ); 
 end . 
 2. escreva um programa que receba uma string contendo uma frase e apresente o número de palavras que existem na frase. 
 Considere que duas palavras sempre estão separadas por um único espaço. 
 Program Quantidade_de_Palavras; 
 Var str: string; 
 i, x: integer; 
 Begin 
 write ('Escreva uma frase: '); 
 read (str); 
 x := 1; 
 for i := 1 to length (str) do 
 Begin 
 if (ord(str[i]) = 32) 
 then x := x + 1; 
 end ; 
 writeln (''); 
 write ('A frase tem: ', x, ' palavras'); 
 end . 
 3. escreva uma programa que receba uma string e determine se ela é um palíndromo. Um palíndromo é uma frase ou palavra 
 que se pode ler, indiferentemente, da esquerda para a direita ou vice-versa. 
 Program Palindromo; 
 14 
 Gustavo Meira - EQ • UEM Algorítmos e Programação de Computadores 
 Var str, maior: string; 
 i, y, k: integer; 
 Begin 
 write ('Escreva uma palavra: '); 
 read (str); 
 maior := upcase (str); 
 k := length(maior) div 2; 
 y := 0; 
 for i := 1 to k do 
 Begin 
 if ord (maior[i]) = ord (maior[ length(maior)+1-i ]) 
 then y := y + 1 ; 
 end ; 
 if y <> 0 
 then write ('É palíndromo!') 
 else write ('Não é palíndromo!'); 
 end . 
 15 
 Gustavo Meira - EQ • UEM Algorítmos e Programação de Computadores 
 Agregados Heterogêneos 
 1. Codifique um programa para criar uma variável do tipo Livro capaz de armazenar o título, o autor, a editora e o ano de 
 publicação de um livro. Em seguida, atribua valores aos seus campos e os apresente na tela. 
 Program info_livro; 
 Const N = 3; 
 Type 
 tlivro = record 
 titulo, autor, editora: string ; 
 ano: integer ; 
 end; 
 Var livro: array [1..N] of tlivro ; 
 i: integer ; 
 Begin 
 for i := 1 to N do 
 Begin 
 write ('Qual o título do livro? '); 
 readln (livro[i].titulo); 
 write ('Qual o autor do livro? '); 
 readln (livro[i].autor); 
 write ('Qual a editora do livro? '); 
 readln (livro[i].editora); 
 write ('Qual o ano de publicação do livro? '); 
 readln (livro[i].ano); 
 writeln (''); 
 end ; 
 writeln (''); 
 for i := 1 to N do 
 Begin 
 write (livro[i].titulo, ' / '); 
 write (livro[i].autor, ' / '); 
 write (livro[i].editora, ' / '); 
 write (livro[i].ano, ' '); 
 writeln (''); 
 end ; 
 end . 
 2. Defina um tipo de dados para representar números complexos da forma a + b. i, onde a é a parte real e i a parte imaginária. 
 Crie um programa que seja capaz de realizar a soma de dois números complexos. Ele deve receber dois números complexos e 
 apresentar o resultado da soma entre eles. 
 Program Soma_de_Complexos; 
 Type 
 Tcomplexos = record 
 a, b: integer ; 
 end ; 
 Var complexo: array[1..3] of Tcomplexos ; 
 k: integer ; 
 Begin 
 for k := 1 to 2 do 
 Begin 
 write ('número real: '); 
 readln (complexo[k].a); 
 write ('número imaginário: '); 
 readln (complexo[k].b); 
 16 
 Gustavo Meira - EQ • UEM Algorítmos e Programação de Computadores 
 writeln (''); 
 end ; 
 write ('(', complexo[1].a, ' + ', complexo[1].b, 'i) + (', complexo[2].a, ' + ', 
 complexo[2].b, 'i)'); 
 complexo[3].a := complexo[1].a + complexo[2].a; 
 complexo[3].b := complexo[1].b + complexo[2].b; 
 write (' = (', complexo[3].a, ' + ', complexo[3].b, 'i)'); 
 end . 
 3. Defina um tipode estrutura para armazenar um horário composto de hora, minutos e segundos. Crie um programa que seja 
 capaz de realizar a soma entre dois horários. Ele deve receber dois horários e apresentar o horário resultante da soma entre 
 eles. Exemplo de soma entre horários: 22:18:50 + 05:20:15 = 03:39:05. 
 Program Soma_de_Horarios; 
 Type 
 Thorario = record 
 h, min, s: integer ; 
 end ; 
 Var horario: array[1..3] of thorario ; 
 i, x, y: integer ; 
 Begin 
 for i := 1 to 2 do 
 Begin 
 write ('informe o valor das horas: '); 
 readln (horario[i].h); 
 write ('informe o valor dos minutos: '); 
 readln (horario[i].min); 
 write ('informe o valor dos segundos: '); 
 readln (horario[i].s); 
 writeln (''); 
 end ; 
 x := 0; 
 y := 0; 
 horario[3].s := horario[1].s + horario[2].s; 
 if (horario[3].s > 59) then 
 Begin 
 horario[3].s := horario[3].s - 60; 
 x := 1; 
 end ; 
 horario[3].min := horario[1].min + horario[2].min + x; 
 if (horario[3].min > 59) then 
 Begin 
 horario[3].min := horario[3].min - 60; 
 y := 1; 
 end ; 
 horario[3].h := horario[1].h + horario[2].h + y; 
 if (horario[3].h > 23) then 
 Begin 
 horario[3].h := horario[3].h - 24; 
 end ; 
 write (horario[1].h, ':', horario[1].min, ':', horario[1].s); 
 write (' + ', horario[2].h, ':', horario[2].min, ':', horario[2].s); 
 write (' = ', horario[3].h, ':', horario[3].min, ':', horario[3].s); 
 end . 
 17 
 Gustavo Meira - EQ • UEM Algorítmos e Programação de Computadores 
 4. Faça um programa para receber dados de N alunos. Para cada aluno serão informados nome, quantidade de faltas e 4 
 notas. Após o recebimento dos dados, o programa deverá apresentar, para cada aluno, as seguintes informações: nome do 
 aluno, média das notas e situação (aprovado, reprovado ou exame). Considere que a média para aprovação deve ser de pelo 
 menos 6,0; o limite de faltas é 25 e condição para ficar de exame é ter média entre 3 e 5.9 e não ultrapassado o limite de 
 faltas. 
 Program Aluno_Aprovado; 
 Const N = 2; 
 Type 
 Taluno = record 
 nome: string ; 
 falta: integer ; 
 n1, n2, n3, n4: real ; 
 end ; 
 Var aluno: array[1..N] of Taluno ; 
 media: array[1..N] of real ; 
 i: integer ; 
 Begin 
 for i := 1 to N do 
 Begin 
 write ('Nome: '); 
 readln (aluno[i].nome); 
 write ('Nota 1: '); 
 readln (aluno[i].n1); 
 write ('Nota 2: '); 
 readln (aluno[i].n2); 
 write ('Nota 3: '); 
 readln (aluno[i].n3); 
 write ('Nota 4: '); 
 readln (aluno[i].n4); 
 write ('Faltas: '); 
 readln (aluno[i].falta); 
 writeln (''); 
 end ; 
 for i := 1 to N do 
 Begin 
 media[i] := (aluno[i].n1 + aluno[i].n2 + aluno[i].n3 + aluno[i].n4)/4; 
 end ; 
 for i :=1 to N do 
 Begin 
 if (media[i] >= 60) then 
 if aluno[i].falta <= 25 then 
 write (aluno[i].nome, ': Aprovado') 
 else write (aluno[i].nome, ': Reprovado') 
 else if (media[i] >= 30) and (media[i] <= 59) then 
 write (aluno[i].nome, ': Exame') 
 else if (media[i] < 30) then write (aluno[i].nome, ': Reprovado'); 
 writeln (''); 
 end ; 
 end . 
 18 
 Gustavo Meira - EQ • UEM Algorítmos e Programação de Computadores 
 Trabalho I 
 1. As aulas de educação física, em muitas escolas, acontecem da seguinte maneira: o professor entrega uma bola aos alunos e 
 estes se dividem em times, que irão jogar partidas alternadamente. 
 A maneira como os times são escolhidos também é semelhante em todas as escolas: decide-se quantos times serão 
 formados, e os líderes montarão cada um dos times. Cada líder vai escolher, alternadamente, um dos alunos restantes para 
 fazer parte de sua equipe. Como todos os líderes querem ter uma boa equipe, o líder que vai escolher o próximo membro do 
 time escolhe aquele, dentre os ainda disponíveis, que possui o maior nível de habilidade. Assim, os times acabam ficando 
 relativamente equilibrados na soma do nível de habilidade dos jogadores. 
 Dada uma lista de alunos que serão escolhidos e seus respectivos níveis de habilidade e a quantidade de times que serão 
 formados, mostre como ficarão os times ao final do processo de montagem deles. Considere que os líderes escolhidos são os 
 alunos com os maiores níveis de habilidade. Na escolha dos alunos, em caso de empate, selecione o que foi informado 
 primeiro. 
 Entradas do seu programa: 
 • A quantidade de alunos (n) que participarão (no máximo 20); 
 • A quantidade de times (t) que devem ser formados (no máximo 4); 
 • O nome e nível de habilidade (entre 0 e 100) de cada um dos n alunos; 
 Saída do seu programa: 
 • A lista de alunos escolhidos para cada time e a habilidade média do time. 
 Program Educacao_Fisica; 
 Type 
 Taluno = Record 
 nome: string; 
 habil: integer; 
 end; 
 Var n, t, i, k, nivelador, local: integer; 
 media: array[1..4] of real; 
 tamanhotime: array [1..4] of integer; 
 dados, ordem: array[1..20] of Taluno; 
 time: array[1..4,1..20] of Taluno; 
 Begin 
 {Coleta de dados} 
 write ('Informe a quantidade de alunos [máximo 20]: '); 
 readln (n); 
 write ('Informe a quantidade de times [máximo 4]: '); 
 readln (t); 
 writeln (''); 
 for i := 1 to n do 
 Begin 
 write ('Informe o nome do ', i, 'º aluno: '); 
 readln (dados[i].nome); 
 write ('Informe a habilidade do ', i, 'º aluno [de 1 a 100]: '); 
 readln (dados[i].habil); 
 writeln (''); 
 end; 
 {Ordenação dos nomes por habilidade} 
 for i := 1 to n do 
 Begin 
 nivelador := -2; 
 local := 0; 
 for k := 1 to n do 
 Begin 
 if (dados[k].habil > nivelador) then 
 Begin 
 nivelador := dados[k].habil; 
 local := k; 
 end; 
 if (k = n) then 
 19 
 Gustavo Meira - EQ • UEM Algorítmos e Programação de Computadores 
 Begin 
 dados[local].habil := -1; 
 end; 
 end; 
 ordem[i].habil := nivelador; 
 ordem[i].nome := dados[local].nome; 
 end; 
 {Distribuição dos times por inserção na matriz principal} 
 nivelador := 0; 
 for i := 1 to n do 
 Begin 
 for k := 1 to t do 
 Begin 
 nivelador := nivelador + 1; 
 time[k,i].nome := ordem[nivelador].nome; 
 time[k,i].habil := ordem[nivelador].habil; 
 end; 
 end; 
 {Cálculo do tamanho do time} 
 for i := 1 to t do 
 Begin 
 tamanhotime[i] := 0; 
 for k := 1 to n do 
 Begin 
 if (time[i,k].habil <> 0) then 
 Begin 
 tamanhotime[i] := tamanhotime[i] + 1; 
 end; 
 end; 
 end; 
 {Cálculo da média} 
 for i := 1 to t do 
 Begin 
 media[i] := 0; 
 for k := 1 to n do 
 Begin 
 if (time[i,k].habil <> 0) then 
 Begin 
 media[i] := media[i] + time[i,k].habil; 
 end; 
 end; 
 media[i] := media[i] / tamanhotime[i]; 
 end; 
 {Saída dos dados} 
 for i := 1 to t do 
 Begin 
 writeln ('Time ', i, ' [Habilidade Média: ', media[i]:0:2, ']'); 
 for k := 1 to n do 
 Begin 
 if (time[i,k].habil <> 0) then 
 Begin 
 writeln (time[i,k].nome, ' ', time[i,k].habil); 
 end; 
 end; 
 writeln (' '); 
 end; 
 end. 
 20 
 Gustavo Meira - EQ • UEM Algorítmos e Programação de Computadores 
 21 
 Gustavo Meira - EQ • UEM Algorítmos e Programação de Computadores 
 Subprogramação & Ordenação 
 1. Faça um programa para receber o nome e idade de uma quantidade N de pessoas definida pelo usuário. Após o 
 recebimento destas informações, o seu programa deve apresentar um menu principal que possibilite ao usuário escolher as 
 seguintes opções: 
 [1] Ordenar os dados 
 [2] Apresentar os dados 
 [0] Sair 
 Caso o usuário selecione a opção 1 (Ordenar os dados), deverá ser apresentado a ele as seguintes opções: 
 [N>] Ordenar por nome (crescente) 
 [N<] Ordenar por nome (decrescente) 
 [I>] Ordenar por idade (crescente) 
 [I<] Ordenar por idade (decrescente) 
 Ao selecionar uma destas opções ('N>', 'N<', 'I>' ou 'I<'), o programa deverá ordenar os dados conforme solicitado e então 
 apresentar o menu principal. No menu principal, caso o usuário selecione a opção 2 (Apresentar dados), a lista de pessoas 
 deve ser apresentada na tela, no formato abaixo. 
 Nome / Idade 
 ------------ 
 Ana / 15 
 Beatriz / 22 
 ... 
 Após a lista ter sido apresentada, o menu principal deve voltar a serapresentado. Por fim, no menu principal, caso o usuário 
 selecione a opção 0 (Sair), o programa deve ser encerrado. 
 Program Menu_Ordenacao; 
 Type 
 Tvetor = record 
 nome: string; 
 idade: integer; 
 end; 
 Type 
 Tdados = array[1..100] of Tvetor; 
 Var N, i, optionmenu1: integer; 
 dados: Tdados; 
 Procedure TrocaIdade(var x: integer; var y: integer); 
 Var aux: integer; 
 Begin 
 aux := x; 
 x := y; 
 y := aux; 
 end; 
 Procedure TrocaNome(var x: string; var y: string); 
 Var aux: string; 
 Begin 
 aux := x; 
 x := y; 
 y := aux; 
 end; 
 Procedure OrdemIdadeCres(var x: Tdados); 
 var i, j: integer; 
 Begin 
 for i := 1 to (N-1) do 
 for j := 1 to (N-i) do 
 if dados[j].idade > dados[j+1].idade then 
 Begin 
 TrocaIdade(dados[j].idade, dados[j+1].idade); 
 22 
 Gustavo Meira - EQ • UEM Algorítmos e Programação de Computadores 
 TrocaNome(dados[j].nome, dados[j+1].nome); 
 end; 
 end; 
 Procedure OrdemIdadeDecres(var x: Tdados); 
 var i, j: integer; 
 Begin 
 for i := 1 to (N-1) do 
 for j := 1 to (N-i) do 
 if dados[j].idade < dados[j+1].idade then 
 Begin 
 TrocaIdade(dados[j].idade, dados[j+1].idade); 
 TrocaNome(dados[j].nome, dados[j+1].nome); 
 end; 
 end; 
 Procedure OrdemNomeCres(var x: Tdados); 
 var i, j: integer; 
 Begin 
 for i := 1 to (N-1) do 
 for j := 1 to (N-i) do 
 if dados[j].nome > dados[j+1].nome then 
 Begin 
 TrocaIdade(dados[j].idade, dados[j+1].idade); 
 TrocaNome(dados[j].nome, dados[j+1].nome); 
 end; 
 end; 
 Procedure OrdemNomeDecres(var x: Tdados); 
 var i, j: integer; 
 Begin 
 for i := 1 to (N-1) do 
 for j := 1 to (N-i) do 
 if dados[j].nome < dados[j+1].nome then 
 Begin 
 TrocaIdade(dados[j].idade, dados[j+1].idade); 
 TrocaNome(dados[j].nome, dados[j+1].nome); 
 end; 
 end; 
 Procedure Menu(); 
 Var option: integer; 
 Begin 
 writeln (''); 
 writeln ('OPÇÕES:'); 
 writeln ('[1] Ordenar os Dados'); 
 writeln ('[2] Apresentar os Dados'); 
 writeln ('[0] Sair'); 
 write ('Digite uma das opções: '); 
 readln (optionmenu1); 
 if (optionmenu1 > 2) then 
 Begin 
 writeln (''); 
 writeln ('-------- Opção Indisponível --------'); 
 Menu(); 
 end; 
 end; 
 Procedure MenuOrdem(); 
 Var option: string; 
 Begin 
 writeln (''); 
 writeln ('OPÇÕES:'); 
 writeln ('[N>] Ordenar por nome (crescente)'); 
 23 
 Gustavo Meira - EQ • UEM Algorítmos e Programação de Computadores 
 writeln ('[N<] Ordenar por nome (decrescente)'); 
 writeln ('[I>] Ordenar por idade (crescente)'); 
 writeln ('[I<] Ordenar por idade (decrescente)'); 
 write ('Digite uma das opções: '); 
 readln (option); 
 if (option = 'N>') then 
 OrdemNomeCres(dados) 
 else if (option = 'N<') then 
 OrdemNomeDecres(dados) 
 else if (option = 'I>') then 
 OrdemIdadeCres(dados) 
 else if (option = 'I<') then 
 OrdemIdadeDecres(dados) 
 else MenuOrdem(); 
 end; 
 Procedure ApresentarDados(var x: Tdados); 
 Var i: integer; 
 Begin 
 writeln (''); 
 writeln ('Nome / Idade'); 
 writeln ('-----------------------'); 
 for i := 1 to N do 
 Begin 
 writeln (dados[i].nome, ' / ', dados[i].idade); 
 end; 
 end; 
 Begin 
 write ('Quantidade de Pessoas: '); 
 readln (N); 
 for i := 1 to N do 
 Begin 
 write ('Nome da ', i, 'º pessoa: '); 
 readln (dados[i].nome); 
 write ('Idade da ', i, 'º pessoa: '); 
 readln (dados[i].idade); 
 end; 
 Repeat 
 Menu(); 
 if (optionmenu1 = 1) then 
 MenuOrdem() 
 else if (optionmenu1 = 2) then 
 ApresentarDados(dados); 
 Until optionmenu1 = 0; 
 end. 
 24 
 Gustavo Meira - EQ • UEM Algorítmos e Programação de Computadores 
 Arquivos 
 1. Uma fábrica de bolinhas de gude possui uma máquina que produz bolinhas em série com cores, tamanhos e pesos 
 diferentes. Embora seja muito versátil, a máquina é um pouco descontrolada e acaba produzindo lotes com bolinhas de 
 diferentes configurações. O gerente da fábrica não se importa que a produção seja desordenada, contanto que ele consiga 
 obter algumas informações sobre o lote produzido. Neste quesito, a máquina auxilia gerando um arquivo de texto com as 
 seguintes informações sobre cada bolinha produzida (nesta ordem): 
 ● Cor (azul, verde ou cristal) 
 ● Diâmetro (em centímetros) 
 ● Peso (em gramas) 
 Embora estes dados sejam valiosos para o gerente, ele tem interesse em um relatório com informações mais descritivas, 
 exigindo que estes dados sejam sumarizados. É aí que entra a sua contribuição: você deve construir um programa em que o 
 gerente possa fornecer o arquivo de texto produzido pela máquina e então obter na tela um relatório com as seguintes 
 informações: 
 ● O total de bolinhas produzidas 
 ● O peso total (em gramas) das bolinhas produzidas 
 ● O volume total (em cm3) das bolinhas produzidas 
 ● Para cada cor: 
 ○ A quantidade e porcentagem de bolinhas 
 ○ O peso médio (em gramas) das bolinhas 
 ○ O volume médio (em cm3) das bolinhas 
 ● Para cada tamanho: 
 ● A quantidade e porcentagem de bolinhas 
 A classificação de tamanho das bolinhas é realizada por meio do diâmetro, da seguinte forma: 
 ○ Até 1 cm: Pequena 
 ○ Acima de 1 cm, até 3 cm: Média 
 ○ Acima de 3 cm: Grande 
 A única informação que o usuário do programa irá fornecer é o local (caminho) onde o arquivo com os dados das bolinhas 
 está armazenado. Caso o local fornecido se refira a um arquivo inexistente, isto é, seu programa não consiga abrir o arquivo 
 para leitura, uma mensagem de erro deve ser informada. 
 Program Bolinhas_Programa; 
 Type 
 Tinfo = record 
 cor: string; 
 diametro, peso: real; 
 end; 
 Type 
 Tcor = record 
 quantidade: integer; 
 pesomedio, volumemedio: real; 
 end; 
 Var arq: text; 
 linha: string; 
 numero, pesototal, volumetotal: real; 
 i, total, pequena, media, grande: integer; 
 info: array[1..100] of Tinfo; 
 azul, verde, cristal: Tcor; 
 Begin 
 assign (arq, 'bolinhas.txt'); 
 reset(arq); 
 i := 0; 
 25 
 Gustavo Meira - EQ • UEM Algorítmos e Programação de Computadores 
 total := 0; 
 pesototal := 0; 
 volumetotal := 0; 
 pequena := 0; media := 0; grande := 0; 
 azul.quantidade := 0; verde.quantidade := 0; cristal.quantidade := 0; 
 azul.pesomedio := 0; verde.pesomedio := 0; cristal.pesomedio := 0; 
 azul.volumemedio := 0; verde.volumemedio := 0; cristal.volumemedio := 0; 
 Repeat 
 i := i + 1; 
 readln (arq, linha); 
 info[i].cor := linha; 
 readln (arq, numero); 
 info[i].diametro := numero; 
 readln (arq, numero); 
 info[i].peso := numero; 
 pesototal := pesototal + info[i].peso; 
 volumetotal := volumetotal + 
 ((4/3)*3.14159*(info[i].diametro/2)*(info[i].diametro/2)*(info[i].diametro/2)); 
 total := total + 1; 
 if (info[i].diametro <= 1) then 
 pequena := pequena + 1 
 else if (info[i].diametro <= 3) then 
 media := media + 1 
 else if (info[i].diametro > 3) then 
 grande := grande + 1; 
 if (info[i].cor = 'azul') then 
 Begin 
 azul.quantidade := azul.quantidade + 1; 
 azul.pesomedio := azul.pesomedio + info[i].peso; 
 azul.volumemedio := azul.volumemedio + 
 ((4/3)*3.14159*(info[i].diametro/2)*(info[i].diametro/2)*(info[i].diametro/2)); 
 end; 
 if (info[i].cor = 'verde') then 
 Begin 
 verde.quantidade := verde.quantidade + 1; 
 verde.pesomedio := verde.pesomedio + info[i].peso; 
 verde.volumemedio := verde.volumemedio + 
 ((4/3)*3.14159*(info[i].diametro/2)*(info[i].diametro/2)*(info[i].diametro/2)); 
 end; 
 if (info[i].cor = 'cristal') then 
 Begin 
 cristal.quantidade := cristal.quantidade + 1; 
 cristal.pesomedio := cristal.pesomedio + info[i].peso; 
 cristal.volumemedio := cristal.volumemedio + 
 ((4/3)*3.14159*(info[i].diametro/2)*(info[i].diametro/2)*(info[i].diametro/2)); 
 end; 
 Until EOF(arq) = TRUE; 
 Writeln (''); 
 Writeln ('========= RELATÓRIO =========='); 
 Writeln ('Total de bolinhas: ', total); 
 26 
 Gustavo Meira - EQ • UEM Algorítmos e Programação de Computadores 
 Writeln ('Peso total: ', (pesototal):0:2, ' g'); 
 Writeln ('Volume total: ', (volumetotal):0:2, ' cmˆ3'); 
 Writeln ('------------------------------'); 
 Writeln ('Informações por cor'); 
 Writeln ('> Azul'); 
 Writeln (' - Quantidade:', azul.quantidade, ' (', 
 ((azul.quantidade/total)*100):0:0, '%)'); 
 Writeln (' - Peso médio: ', (azul.pesomedio/azul.quantidade):0:2, ' g'); 
 Writeln (' - Volume médio: ', (azul.volumemedio/azul.quantidade):0:2, ' cmˆ3'); 
 Writeln ('> Verde'); 
 Writeln (' - Quantidade: ', verde.quantidade, ' (', 
 ((verde.quantidade/total)*100):0:0, '%)'); 
 Writeln (' - Peso médio: ', (verde.pesomedio/verde.quantidade):0:2, ' g'); 
 Writeln (' - Volume médio: ', (verde.volumemedio/verde.quantidade):0:2, ' cmˆ3'); 
 Writeln ('> Cristal'); 
 Writeln (' - Quantidade: ', cristal.quantidade, ' (', 
 ((cristal.quantidade/total)*100):0:0, '%)'); 
 Writeln (' - Peso médio: ', (cristal.pesomedio/cristal.quantidade):0:2, ' g'); 
 Writeln (' - Volume médio: ', (cristal.volumemedio/cristal.quantidade):0:2, ' 
 cmˆ3'); 
 Writeln ('------------------------------'); 
 Writeln ('Quantidade por tamanho'); 
 Writeln ('> Pequena: ', pequena, ' (', ((pequena/total)*100):0:0, '%)'); 
 Writeln ('> Média: ', media, ' (', ((media/total)*100):0:0, '%)'); 
 Writeln ('> Grande: ', grande, ' (', ((grande/total)*100):0:0, '%)'); 
 Writeln ('------------------------------'); 
 End. 
 27

Outros materiais