Baixe o app para aproveitar ainda mais
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
Compartilhar