Docsity
Docsity

Prepare-se para as provas
Prepare-se para as provas

Estude fácil! Tem muito documento disponível na Docsity


Ganhe pontos para baixar
Ganhe pontos para baixar

Ganhe pontos ajudando outros esrudantes ou compre um plano Premium


Guias e Dicas
Guias e Dicas

Algoritmo, Notas de estudo de Algoritmos

- - - - - - -

Tipologia: Notas de estudo

Antes de 2010

Compartilhado em 12/11/2008

fabiano-ivoglo-12
fabiano-ivoglo-12 🇧🇷

4

(1)

3 documentos

1 / 18

Documentos relacionados


Pré-visualização parcial do texto

Baixe Algoritmo e outras Notas de estudo em PDF para Algoritmos, somente na Docsity! Para todos os exercícios propostos, apresente a resolução em pseudo-código e o respectivo fluxograma: Algoritmos para Problemas Gerais 1) Escreva um algoritmo para mudar uma lâmpada fundida de um candeeiro. 2) Escreva um algoritmo para mudar um pneu vazio de um automóvel 3) Escreva um algoritmo para depositar um cheque no banco 4) Escreva um algoritmo para escrever um texto (utilizando o Word) num dado computador que inicialmente se encontra desligado. 5) Escreva um algoritmo para encontrar o número do telefone correspondente a um determinado nome, numa lista telefónica Algoritmos Sequenciais e Condicionais 6) Escreva um algoritmo para calcular o maior de dois números inteiros (X e Y). 7) Escreva um algoritmo para calcular o maior de três números inteiros. 8) Escreva um algoritmo para calcular o maior de quatro números inteiros. 9) Escreva um algoritmo para calcular o maior e o menor de três números inteiros. 10) Escreva um algoritmo para calcular, dados três números inteiros, a soma dos dois maiores. 11) 12) Construa um algoritmo que leia a idade de uma pessoa expressa em anos, meses e dias e mostre-a expressa apenas em dias. 13) Construa um algoritmo que leia a idade de uma pessoa expressa em dias e expresse-a em anos, meses e dias. 14) Construa um algoritmo que leia as 3 notas de um aluno e calcule a média final deste aluno. Considerar que a média é ponderada e que o peso das notas é: 2,3 e 5, respectivamente. 15) Construa um algoritmo que leia o tempo de duração de um evento numa fábrica expresso em segundos e mostre-o expresso em horas, minutos e segundos. 16) O custo ao consumidor de um carro novo é a soma do custo de fábrica com a percentagem do distribuidor e dos impostos (aplicados ao custo de fábrica). Supondo que a percentagem do distribuidor seja de 28% e os impostos de 45%. Escrever um algoritmo que leia o custo de fábrica de um carro e escreva o custo ao consumidor. 17) Calcule a média aritmética das 3 notas de um aluno e mostre, além do valor da média, uma mensagem de "Aprovado", caso a média seja igual ou superior a 6, ou a mensagem "reprovado", caso contrário. 18) Elaborar um algoritmo que lê 2 valores a e b e os escreve com a mensagem: “? E ? São múltiplos” ou “? E ? Não são múltiplos”. 19) Elabore um algoritmo que dada a idade de um nadador classifica-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; adulto = maiores de 18 anos 20) Escreva um algoritmo que leia o código de um aluno e suas três notas. Calcule a média ponderada do aluno, considerando que o peso para a maior nota seja 4 e para as duas restantes, 3. Mostre o código do aluno, suas três notas, a média calculada e uma mensagem "APROVADO" se a média for maior ou igual a 5 e "REPROVADO" se a média for menor que 5. 21) Construa um algoritmo que leia um nº inteiro e mostre uma mensagem indicando se este número é par ou ímpar, ese é positivo ou negativo. 22) Tendo como dados de entrada a altura (h) e o sexo de uma pessoa (M - masculino e F - feminino), construa um algoritmo que calcule seu peso ideal, utilizando as seguintes fórmulas: * para homens: (72.7*h)-58 * para mulheres: (62.1*h)-44.7 23) Um banco concede um crédito especial aos seus clientes, variável com o saldo médio no último ano. Construa um algoritmo que leia o saldo médio de um cliente e calcule o valor do crédito de acordo com a tabela abaixo. Mostre uma mensagem informando o saldo médio e o valor do crédito. Saldo médio Percentagem - de 0 a 200 nenhum crédito - de 201 a 400 20% do valor do saldo médio - de 401 a 600 30% do valor do saldo médio - acima de 601 40% do valor do saldo médio 24) Um vendedor necessita de um algoritmo que calcule o preço total devido por um cliente. O algoritmo deve receber o código de um produto e a quantidade comprada e calcular o preço total, usando a tabela abaixo: Os códigos dos produtos e Preços unitários € são( 1001 5,32 €; 1324 6,45 €; 6548 2,37 €; 0987 5,32 € ;7623 6,45 €) 25) Um vendedor precisa de um algoritmo que calcule o preço total devido por um cliente. O algoritmo deve receber o código de um produto e a quantidade comprada e calcular o preço total, usando a tabela abaixo. Mostre uma mensagem no caso de código inválido. Código Preço Unitário ’ABCD’ 5,30 € ’XYPK’ 6,00 €_ ’KLMP’ 3,20 € ’QRST’ 2,50 € 26) Uma empresa concede aumentos de salário aos seus funcionários, variáveis de acordo com o cargo. Construa um algoritmo que leia o salário e o cargo de um funcionário e calcule o novo salário. Se o cargo do funcionário não estiver na tabela, ele deverá, então, receber 10% de aumento. Mostre o salário antigo, o novo salário e a diferença. Os cargos considerados (e seus códigos) são: 101 Gerente 25% ; 102 Engenheiro 20%; 103 Técnico 15% 27) Elaborar um algoritmo que leia 3 valores a, b, c (correspondentes às dimensões dos três lados de um triângulo) e verifique se eles formam ou não um triângulo. Supor que os valores lidos são inteiros e positivos. Caso os valores formem um triângulo, calcular e escrever a área deste triângulo. Se não formam triângulo escrever os valores lidos. ( se a > b + c não formam triângulo algum, se a é o maior). 28) Escrever um algoritmo que lê a hora de início de um jogo e a hora do final do jogo (considerando apenas horas inteiras) e calcula a duração do jogo em horas, sabendo-se que o tempo máximo de duração do jogo é de 24 horas e que o jogo pode iniciar em um dia e terminar no dia seguinte. 29) Escrever um algoritmo que lê um conjunto de 4 valores i, a, b, c, onde i é um valor inteiro e positivo e a, b, c, são quaisquer valores reais e os escreva. A seguir: a) Se i=1 escrever os três valores a, b, c em ordem crescente. b) Se i=2 escrever os três valores a, b, c em ordem decrescente. c) Se i=3 escrever os três valores a, b, c de forma que o maior entre a, b, c fique entre os outros dois. 30) O departamento que controla o índice de poluição do meio ambiente mantém 3 grupos de indústrias que são altamente poluentes do meio ambiente. O índice de poluição aceitável varia de 0,05 até 0,25. Se o índice sobe para 0,3 as indústrias do 1o grupo são intimadas a suspenderem suas actividades, se o índice cresce para 0,4 as do 1o e 2o grupo são intimadas a suspenderem suas actividades e se o índice atingir 0,5 todos os 3 grupos devem ser notificados a paralisarem suas actividades. Escrever um algoritmo que lê o índice de poluição medido e emite a notificação adequada aos diferentes grupos de empresas. 31) Escrever um algoritmo que leia um valor e calcule qual o menor número possível de notas e moedas de 100, 50, 20, 10, 5, 2 e 1 em que o valor lido pode ser decomposto. Escrever o valor lido e a relação de notas necessárias. 32) Escrever um algoritmo que lê a hora de início e hora de término de um jogo, ambas expressas em horas e minutos. Calcular e escrever a duração do jogo, também em horas e minutos, considerando que o tempo máximo de duração de um jogo é de 24 horas e que o jogo pode iniciar em um dia e terminar no dia seguinte. 33) Escreva um algoritmo que leia um carácter '+', '−', '*' ou '/' que indica uma operação aritmética a efectuar com os dois números que são introduzidos a seguir e apresente o resultado da operação. Algoritmos com Ciclos 1) Escreva um algoritmo para calcular a soma dos números positivos, de 1 a N (dado pelo utilizador) 2) Escreva um algoritmo para calcular a soma dos números positivos, inferiores ou iguais a 1000. 3) Escreva um algoritmo para calcular a soma dos números positivos, de X a Y (dados pelo utilizador), inclusive. 4) Escreva um algoritmo para, dado um número N, calcular a soma de todos os números positivos pares, inferiores ou iguais a esse número N. 5) Construir um algoritmo que calcule a média aritmética de vários valores inteiros positivos, lidos externamente. O final da leitura acontecerá quando for lido um valor negativo. 6) Escreva um algoritmo para calcular o máximo divisor comum de dois números inteiros. 7) Escreva um algoritmo para calcular o mínimo múltiplo comum de dois números inteiros. 8) Escreva um algoritmo que calcule a capicua de um número (inverta a ordem dos algarismos que constituem esse número). 9) Escreva um algoritmo para, dado um número N (entre 1 e 10), apresentar a tabuada dos N. Ex: Para N=5 deverá apresentar: 1x5=5 , 2x5=10 , 3x5=15 , 4x5=20 , 5x5=25 , 6x5=30 , 7x5=35 , 8x5=4 , 9x5=45 , 10x5=50 a) Utilizando unicamente as instruções mínimas do pseudo-código ; b) Utilizando a instrução: Repita ... Até ... ; raiz quadrada. 44) Escreva um algoritmo que leia 500 valores inteiros e positivos e: a) encontre o maior valor; b) encontre o menor valor; c) calcule a média dos números lidos. 45) Escrever um algoritmo que gera e escreve os números ímpares entre 100 e 200. 46) Escrever um algoritmo que lê 10 valores, um de cada vez, e conta quantos deles estão no intervalo [10,20] e quantos deles estão fora do intervalo, escrevendo estas informações. 47) Escrever um algoritmo que lê 5 pares de valores a, b, todos inteiros e positivos, um par de cada vez, e com a < b, escreve os inteiros pares de a até b, incluindo o a e o b se forem pares. 48) Escrever um algoritmo que leia 5 conjuntos de 2 valores, o primeiro representando o número de um aluno, e o segundo representando a sua altura em centímetros. Encontre o aluno mais alto e o mais baixo. Mostre o número do aluno mais alto e do mais baixo, junto com suas alturas. 49) Escrever um algoritmo que calcula e escreve o produto dos números primos entre 92 e 1478. 50) Escreva um algoritmo que leia uma sequência de valores positivos, terminada por um número negativo ou nulo, e determine o maior elemento dessa sequência e o seu número de ordem: a) Usando um ciclo "Enquanto ... Faça ..."; b) Usando um ciclo "Repita ... Até ...". Exemplo: Número 1 ? 11 Número 2 ? 14 Número 3 ? 3 ... Número 10 ? –1 O maior elemento da sequência lida é 14. O seu número de ordem é 2. 51) Escrever um algoritmo que gera e escreve os 5 primeiros números perfeitos. Um número perfeito é aquele que é igual a soma dos seus divisores. (Ex.: 6 = 1+2+3; 28= 1+2+4+7+14 etc). 52) Escrever um algoritmo que lê um valor n que indica quantos valores devem ser lidos para m, valores inteiros e positivos, com leitura de um valor de cada vez. Escreva uma tabela contendo o valor lido, o somatório dos inteiros de 1 até m e o factorial de m. 53) Construa um algoritmo que leia as três notas de 50 alunos de uma turma. Para cada aluno, calcule a média ponderada, como segue: MP = ( n1*2 + n2*4 + n3*3 ) / 10 Além disso, calcule a média geral da turma. Mostre a média de cada aluno e uma mensagem "Aprovado", caso a média seja maior ou igual a sete, e uma mensagem "Reprovado", caso contrário. No final, mostre a média geral. 54) Fazer um algoritmo que leia 5 grupos de 4 valores (A,B,C,D) e mostre-os na ordem lida. Em seguida, ordene-os em ordem decrescente e mostre-os novamente, já ordenados. 55) Foi feita uma estatística nas 50 principais cidades portuguesas para recolher dados sobre acidentes de trânsito. Foram obtidos os seguintes dados: - código da cidade - distrito (PO, LI, BR, ...) - número de veículos de passeio (em 2001) - número de acidentes de trânsito com vítimas (em 2001) Deseja-se saber: a) qual o maior e o menor índice de acidentes de trânsito e a que cidades pertencem b) qual a média de veículos nas cidades portuguesas c) qual a média de acidentes com vítimas nas cidades do distrito do Porto 56) Uma loja tem 150 clientes registrados e deseja mandar uma correspondência a cada um deles anunciando um bónus especial. Escreva um algoritmo que leia o nome do cliente e o valor das suas compras no ano passado e calcule um bónus de 10% se o valor das compras for menor que 1000€ e de 20%, caso contrário Algoritmos com Vectores e Matrizes 1) Escreva um algoritmo que leia dois vectores de 10 posições e faça a multiplicação dos elementos de mesmo índice, colocando o resultado em um terceiro vector. Mostre o vector resultante. 2) Escreva um algoritmo que leia e mostre um vector de 20 elementos inteiros. a seguir, conte quantos valores pares existem no vector. 3) Escreva um algoritmo que leia um vector de 100 posições e mostre-o ordenado com ordem crescente. 4) Elaborar um algoritmo que lê um conjunto de 30 valores e os coloca em 2 vectores conforme forem pares ou ímpares. O tamanho do vector é de 5 posições. Se algum vector estiver cheio, escrevê-lo. Terminada a leitura escrever o conteúdo dos dois vectores. Cada vector pode ser preenchido tantas vezes quantas for necessário. 5) Escreva um algoritmo que leia um vector de 13 elementos inteiros, que é o resultado correcto de um boletim do totobola, contendo os valores 1(coluna 1), 2 (coluna 2) e 3 (coluna do meio). Leia, a seguir, para cada apostador, o número do seu cartão e um vector de Respostas de 13 posições. Verifique para cada apostador o números de acertos, comparando o vector de resultados correctos com o vector de Respostas. Escreva o número do apostador e o número de acertos. Se o apostador tiver 13 acertos, mostrar a mensagem "Ganhador". 6) Escreva um algoritmo que leia um vector de 20 posições e mostre- o. Em seguida, troque o primeiro elemento com o último, o segundo com o penúltimo, o terceiro com o antepenúltimo, e assim sucessivamente. Mostre o novo vector depois da troca. 7) Escreva um algoritmo que leia um vector de 50 posições de números inteiros e mostre somente os positivos. 8) Escreva um algoritmo que leia um vector de 80 elementos inteiros. Encontre e mostre o menor elemento e sua posição no vector. 9) Escreva um algoritmo que leia um vector inteiro de 30 posições e crie um segundo vector, substituindo os valores nulos por 1. Mostre os 2 vectores. 10) Escreva um que leia um vector G de 20 elementos caracter que representa o gabarito de uma prova. A seguir, para cada um dos 50 alunos da turma, leia o vector de respostas (R) do aluno e conte o número de acertos. Mostre o nº de acertos do aluno e uma mensagem APROVADO, se a nota for maior ou igual a 6; e mostre uma mensagem de REPROVADO, caso contrário. 11) Escrever um algoritmo que gera os 10 primeiros números primos acima de 100 e os armazena num vector de X(10) escrevendo, no final, o vector X. 12) Escrever um algoritmo que lê 2 vectores de tamanho 10 e os escreve. Crie, a seguir, um vector de 20 posições que contenha os elementos dos outros 2 vectores em ordem crescente. 13) Escrever um algoritmo que lê 2 vectores X(10) e Y(10) e os escreve. Crie, a seguir, um vector Z que seja a) a união de X com Y; b) a diferença entre X e Y; c) a soma entre X e Y; d) o produto entre X e Y; e) a intersecção entre X e Y. Escreva o vector Z depois de cada cálculo. 14) Escrever um algoritmo que lê um vector K(15) e o escreve. Crie, a seguir, um vector P, que contenha todos os números primos de K. Escreva o vector P. 15) Escrever um algoritmo que lê um vector X(20) e o escreve. Escreva, a seguir, cada um dos valores distintos que aparecem em X dizendo quantas vezes cada valor aparece em X. 16) Construa um algoritmo que leia dois vectores de 200 posições de caracteres. A seguir, troque o 1º elemento de A com o 200º de B, o 2º de A com o 199º de B, assim por diante, até trocar o 200º de A com o 1º de B. Mostre os vectores antes e depois da troca. 17) Construa um algoritmo que leia um código numérico inteiro e um vector de 50 posições de números reais. Se o código for zero, termine o algoritmo. Se o código for 1, mostre o vector na ordem normal. Se o código for 2, mostre o vector na ordem inversa. 18) Construa um algoritmo que leia um vector (A) de 100 posições. Em seguida, compacte o vector, retirando os valores nulos e negativos. Coloque o resultado no vector B. 19) Construa um algoritmo que leia um vector de 500 posições de números inteiros e divida todos os seus elementos pelo maior valor do vector. Mostre o vector após os cálculos. 20) Construa um algoritmo que leia um vector de 80 posições e encontre o menor valor. Mostre-o juntamente com seu número de ordem. 21) Construa um algoritmo que leia dois vectores (A e B) de 50 posições de números inteiros. O algoritmo deve, então, subtrair o primeiro elemento de A do último de B, acumulando o valor, subtrair o segundo elemento de A do penúltimo de B, acumulando o valor, e assim por diante. Mostre o resultado da soma final. 22) Uma empresa de aluguer de vídeos tem guardada, num vector de 500 posições, a quantidade de filmes retirados por seus clientes durante o ano de 2001. Agora, esta empresa está a fazer uma promoção e, para cada 10 filmes retirados, o cliente tem direito a um aluguer grátis. Construa um algoritmo que crie um outro vector contendo a quantidade de alugueres gratuitos a que cada cliente tem direito. 23) Escreva um algoritmo para ler uma sequência de valores reais, positivos, inferiores ou iguais a 100 (percentagensobtidas por um conjunto de alunos num exame), terminados por um valor negativo, e guardar a sequência num vector. Em seguida deve determinar a média e o desvio padrão dos valores lidos e quantos valores estão compreendidos nos intervalos [0..10[, [10..20[, ..., [90..100]. Admita que o número de alunos não é superior a 500. Construa em seguida um histograma para os intervalos considerados. 24) Escreva um algoritmo que leia 10 caracteres para um vector e os escreva depois, no ecrã, em ordem inversa. 25) Escreva um algoritmo para gerar uma aposta no totoloto, constituída por 6 números inteiros, não repetidos, pertencentes ao intervalo [1..49]. (Sugestões: utilize a função de geração de números inteiros aleatórios Random). 26) Altere o algoritmo anterior de forma a evitar que surjam números repetidos na chave fornecida. Para tal utilize um vector de Booleanos para manter informação sobre os números que vão sendo gerados. 27) Considere um conjunto de pontos de coordenadas (xi,yi). Escreva um algoritmo que determine os dois pontos mais distantes, utilizando a) Dois vectores lineares, X[] e Y[], para guardar as coordenadas; b) um único vector bidimensional (matriz), Coordenadas[]. (a distância entre dois pontos de coordenadas (xi,yi) e (xj,yj) é dada por d= (xi-xj)2+(yi-yj) 2 ) 28) Escreva um algoritmo que preencha um vector com uma sequência de números positivos terminada por zero e que seguidamente elimine todos os valores repetidos. a) Suponha que a sequência de valores não repetidos é guardada num outro vector. b) Suponha que a sequência de valores não repetidos é guardada no mesmo vector. 29) Escreva um algoritmo que leia duas vectores e efectue a sua fusão eliminando todos os elementos que estejam repetidos. 30) Escreva um algoritmo que leia uma matriz de 5∞5, representando as altitudes de uma determinada região e determine as coordenadas do(s) ponto(s) mais alto(s). A leitura dos elementos da matriz deve ser feita de tal modo que a posição do écran onde são lidos os elementos corresponda à posição desses elementos na matriz 31) Construa uma função que calcule a soma dos elementos da diagonal principal de uma matriz quadrada nxn 32) Escreva um algoritmo que permita efectuar a leitura de um vector e em seguida permita efectuar a sua ordenação por ordem decrescente ou crescente (selecção efectuada pelo utilizador). 33) Considere um conjunto de N pontos, de coordenadas (xi,yi). Escreva um algoritmo que determine os parâmetros da recta de regressão (recta que melhor se ajusta ao conjunto de pontos), y(x), de acordo com as fórmulas seguintes (Σ representa o somatório de 1 até N): y=a0+a1x a1=(N⋅Σ(xi⋅yi)−Σxi⋅Σyi)/(N⋅Σxi2−(Σxi)2) a0=(Σyi−a1Σxi)/N Calcule também o coeficiente de correlação, que indica a qualidade do ajuste da recta de regressão ao conjunto de pontos, o qual é dado por: r=(N⋅Σ(xi⋅yi)−Σxi⋅Σyi)/[ N⋅Σxi2−(Σxi)2⋅ N⋅Σyi2−(Σyi)2] 34) Elaborar um algoritmo que lê uma matriz M(6,6) e um valor A e multiplica a matriz M pelo valor A e coloca os valores da matriz multiplicados por A em um vector de V(36) e escreve no final o vector V. 35) Escreva um algoritmo que leia um número inteiro A e uma matriz V 30x30 de inteiros. Conte quantos valores iguais a A estão na matriz. Crie, a seguir, uma matriz X contendo todos os elementos de V diferentes de A. Mostre os resultados. 36) Escreva um algoritmo que lê uma matriz M(5,5) e calcula as somas: a) da linha 4 de M b) da coluna 2 de M c) da diagonal principal d) da diagonal secundária e) de todos os elementos da matriz M Escrever essas somas e a matriz. 37) Escrever um algoritmo que lê uma matriz A(15,5) e a escreva. Verifique, a seguir, quais os elementos de A que estão repetidos e quantas vezes cada um está repetido. Escrever cada elemento repetido com uma mensagem dizendo que o elemento aparece X vezes em A. 38) Escrever um algoritmo que lê uma matriz M(10,10) e a escreve. Troque, a seguir: a) a linha 2 com a linha 8 b) a coluna 4 com a coluna 10 c) a diagonal principal com a diagonal secundária d) a linha 5 com a coluna 10. Escreva a matriz assim modificada. 39) Construa um algoritmo que gere a seguinte matriz: 1 1 1 1 1 1 1 2 2 2 2 1 1 2 3 3 2 1 1 2 3 3 2 1 1 2 2 2 2 1 1 1 1 1 1 1 40) Escrever um algoritmo que lê uma matriz M(12,13) e divida todos os 13 elementos de cada uma das 12 linhas de M pelo maior elemento em módulo daquela linha. Escrever a matriz lida e a modificada. 41) Escrever um algoritmo que lê uma matriz M(5,5) e cria 2 vectores SL(5) e SC(5) que contenham, respectivamente, as somas das linhas e das colunas de M. Escrever a matriz e os vectores criados. 3 x N = 3*N ... 10 x N = 10*N 18) Construa uma função que recebe, por parâmetro, um valor inteiro e positivo e retorna o número de divisores desse valor. 19) Escreva uma função que recebe, por parâmetro, um valor inteiro e positivo e retorna o somatório desse valor. 20) Escreva uma função que recebe por parâmetro um valor inteiro e positivo N e retorna o valor de S. S = 1 + ½ + 1/3 + ¼ + 1/5 + 1/N. 21) Escreva uma função que recebe por parâmetro um valor inteiro e positivo N e retorna o valor de S. S = 1 + 1/1! + ½! + 1/3! + 1 /N! 22) Escreva uma função que recebe por parâmetro um valor inteiro e positivo N e retorna o valor de S. S = 2/4 + 5/5 + 10/6 + 17/7 + 26/8 + ... +(n2+1)/(n+3) 23) Escreva um procedimento com a definição: Procedure Esc_Volume (Comp, Larg, Alt: Integer); que dado o comprimento, largura e altura de um paralelepípedo, determine (e escreva no écran) o seu volume. 24) Escreva um procedimento com a seguinte definição: Procedure Troca (Var x, y: Integer); que dados dois números inteiros, troque os seus valores. Construa um algoritmo para efectuar a ordenação de vectores pelo método “Bubble Sort” que utilize o procedimento definido para efectuar as trocas de valores. 25) Escreva uma função que verifique se uma determinada data fornecida na forma DD/MM/AA é ou não correcta. 26) Escreva uma função que dada uma determinada data fornecida na forma DD/MM/AA, calcule o dia seguinte ao fornecido. 27) Escreva uma função que dada uma determinada data (na forma DD/MM/AA) e um determinado número de dias (DD), retorne qual a data correspondente à soma entre esses dois valores. 28) Escreva uma função que dadas duas datas (na forma DD/MM/AA), retorne o número de dias de intervalo entre essas datas. 29) Escreva uma função que receba uma string representando um número romano e retorne o valor decimal correspondente. 30) Escreva um subalgoritmo que determine o máximo e o mínimo de três números que lhe são passados como parâmetros e que retorne aquele valor. Qual o tipo de subalgoritmo que lhe parece mais adequado para resolver este problema? Justifique a sua resposta. 31) Escreva um procedimento “ EscDinheiro” que aceite como parâmetro um valor real, representando um quantia em dinheiro, e que apresente o valor no écran com um '$' a separar a parte inteira da parte decimal, sendo esta apresentada com 2 dígitos. Após a escrita o cursor deve ficar a seguir ao último digito do valor apresentado. Exemplo: Resultado de EscDinheiro (263421.5) ∅ 263421$50 Resultado de EscDinheiro (2147) ∅ 2147$00 32) Escreva um subalgoritmo que determine o máximo de três números que lhe são passados como parâmetros e que retorne aquele valor ao algoritmo principal. Resolva este problema recorrendo a: a) Um procedimento; b) Uma função. 33) Sabendo que ab = eb*ln(a), escreva uma função que dados a e b, calcule ab. Escreva um algoritmo de teste desta função. 34) Escreva funções que lhe permitam pesquisar vectores segundo os dois métodos estudados (“ pesquisa sequencial” e “ pesquisa binária” ). As funções devem fornecer como resultado a posição do elemento pesquisado (caso este exista no vector) ou um valor nulo caso o elemento a pesquisar não se encontre no vector. 35) Como sabe, as instruções Read e Readln da linguagem Pascal não podem ser usadas directamente para ler um valor booleano. a) Escreva um procedimento que leia um valor booleano representado pela introdução dos caracteres 'F' ou 'f', significando o valor False, e 'T' ou 't', significando o valor True, e que retorne uma variável booleana Valor_Bool de acordo com o valor lido. b) Utilize o procedimento escrito na alínea anterior para calcular o valor da expressão booleana x AND (y OR z) para qualquer conjunto de valores das variáveis x, y e z, indicado pelo utilizador, através do teclado. 36) Escreva as versões recursiva e não recursiva da função que calcula o factorial de um número. 37) Escreva as versões recursiva e não recursiva da função que calcula x*n (pelo método tradicional, ou seja, multiplicando x, n vezes) sendo x e n (inteiros) parâmetros da função. 38) Escreva as versões recursiva e não recursiva de uma função que receba um número inteiro e inverta a ordem dos algarismos desse número. Exemplo: Entrada: 14863 Resultado: 36841 39) a) Escreva um subalgoritmo que calcule o valor da função f(x)=x2-5x+3 para um valor de x (real) dado. Execute também um algoritmo que teste este subalgoritmo. b) Escreva um procedimento que, usando o subalgoritmo da alínea anterior, determine os valores máximo e mínimo de f(x) num intervalo cujos limites lhe são passados como parâmetros, com uma precisão de 0.1 no valor de x. 40) a) Escreva um subalgoritmo que calcule a tangente de um ângulo. Admita que o argumento passado para o subalgoritmo nunca conduz a valores infinitos para a tangente. Escreva um algoritmo que teste este subalgoritmo. O ângulo poderá estar em graus ou radianos consoante o valor de uma variável global Ang, do tipo Angulo=(Graus, Radianos). b) Altere o algoritmo desenvolvido na alínea anterior de modo a que as unidades em que o ângulo está expresso constituam um dos parâmetros do subalgoritmo. c) Altere o subalgoritmo da alínea anterior de modo a contemplar as situações em que a tangente é infinita. Para isso, o subalgoritmo deve retornar um segundo valor que indique a ocorrência ou não desta situação. 41) Pretende-se simular o funcionamento de uma máquina automática de venda de mercadorias. A máquina deve, em função de uma quantia entregue por um comprador para pagar a mercadoria por ela fornecida e de uma quantia a pagar, fornecer o número mínimo de moedas que perfazem o troco. Considere que a máquina aceita e fornece moedas de 200, 100, 50, 20, 10, 5 e 1 escudos. Escreva um algoritmo que simule o funcionamento da máquina. O algoritmo deve: a) apresentar repetidamente um menu de produtos, com indicação do preço respectivo e pedir ao utilizador que seleccione um produto; b) pedir ao utilizador que introduza moedas que perfaçam um montante igual ou superior ao preço do produto e aceitar as moedas que o utilizador vai introduzindo sucessivamente, até que o total o preço do produto seja atinjido ou ultrapassado; c) calcular o troco e determinar o número de moedas de cada tipo a fornecer. O algoritmo deverá ser constituído à custa de pelo menos quatro subalgoritmos, implementando as seguintes operações: a) apresentação do menu, retornando o preço do produto seleccionado; b) aceitação das moedas, uma a uma, retornando a quantia total introduzida; c) determinação do número de moedas de cada tipo que constituem o troco, calculado previamente, se a venda for possível; d) "fornecimento" das moedas ao utilizador. Algoritmos com Vectores, Matrizes, Procedimentos e Funções 1) Construa um procedimento que recebe, por parâmetro, 2 vectores de 10 elementos inteiros e que calcule e retorne, também por parâmetro, o vector união dos dois primeiros. 2) Construa um procedimento que recebe um vector X de 30 elementos inteiros, por parâmetro, e retorna, também por parâmetro, dois vectores A e B. O vector A deve conter os elementos pares de X e o vector B, os elementos ímpares. 3) Construa uma função que recebe um vector X(15) de inteiros e retorna a quantidade de valores pares em X. 4) Construa uma função que recebe um vector X(20) de reais , por parâmetro, e retorna a soma dos elementos de X. 5) Construa um procedimento que recebe 2 vectores A e B de tamanho 15 de inteiros, por parâmetro. O vector B deve conter o somatório de cada elemento de A . A 4 1 0 5 .... B 10 1 0 15 ... 6) Construa um procedimento que recebe, por parâmetro, um vector A(50) de reais e retorna-o ordenado em ordem crescente. 7) Construa um procedimento que recebe, por parâmetro, um vector A(25) de inteiros e substitui todos os valores negativos de A por zero. O vector A deve retornar alterado. 8) Construa um procedimento que gera os 10 primeiros primos acima de 100 e retorna-os em um vector X(10), por parâmetro. 9) Construa um procedimento que recebe 2 vectores A e B de tamanho 10 de inteiros, por parâmetro. O procedimento deve retornar um vector C, por parâmetro, que contém os elementos de A e B em ordem decrescente. 10) Construa um procedimento que recebe, por parâmetro, 2 vectores de 10 elementos inteiros e que calcule e retorne, também por parâmetro, o vector intersecção dos dois primeiros. 11) Construa um procedimento que recebe, por parâmetro, 2 vectores de 10 elementos inteiros e que calcule e retorne, também por parâmetro, o vector diferença dos dois primeiros. 12) Construa um procedimento que recebe, por parâmetro, 2 vectores de 20 elementos inteiros e que calcule e retorne, também por parâmetro, o vector soma dos dois primeiros. 13) Construa um procedimento que recebe, por parâmetro, 2 vectores de 15 elementos inteiros e que calcule e retorne, também por parâmetro, o vector produto dos dois primeiros. 14) Construa um procedimento que receba, por parâmetro, um vector K(15) e retorna, também por parâmetro, um vector P contendo apenas os valores primos de K. 15) Construa um procedimento que receba um vector A(100) de inteiros e retorna esse mesmo vector compactado, ou seja, sem os seus valores nulos(zero) e negativos. 16) Construa um procedimento que receba, por parâmetro um vector B(50) de reais e calcula o maior valor do vector. A seguir, o procedimento deve dividir todos os elementos de B pelo maior encontrado. O vector deve retornar alterado. 17) Construa uma função que recebe, por parâmetro, uma matriz A(5,5) e retorna a soma dos seus elementos. 18) Construa uma função que recebe, por parâmetro, uma matriz A(6,6) e retorna a soma dos elementos da sua diagonal principal e da sua diagonal secundária. 19) Construa uma função que recebe, por parâmetro, uma matriz A(7,6) e retorna a soma dos elementos da linha 5 e da coluna 3. 20) Construa uma função que recebe, por parâmetro, uma matriz A(6,6) e retorna o menor elemento da sua diagonal secundária. 21) Construa um procedimento que recebe, por parâmetro, uma matriz A(8,8) e calcula o maior elemento da sua diagonal principal. A seguir, o procedimento deve dividir todos os elementos de A pelo maior encontrado. O procedimento deve retornar a matriz alterada. 22) Construa um procedimento que receba, por parâmetro, duas matrizes A(4,6) e B(6,4) e retorna uma matriz C, também por parâmetro, que seja o produto matricial de M por N. 23) Construa um procedimento que receba, por parâmetro, duas matrizes A(4,6) e B(6,4) e retorna uma matriz C, também por parâmetro, que seja a soma de M com N. 24) Construa um procedimento que receba, por parâmetro, duas matrizes A(4,6) e B(6,4) e retorna uma matriz C, também por parâmetro, que seja a diferença de M com N. 25) Construa um procedimento que recebe, por parâmetro, uma matriz M(6,6) e um valor A . O procedimento deve multiplicar cada elemento de M por A e armazenar em um vector V(36). O vector V deve retornar por parâmetro. 26) Construa um procedimento que receba uma matriz A(10,10), por parâmetro, e realize as seguintes trocas: * a linha 2 com a linha 8; * a coluna 4 com a coluna 10; * a diagonal principal com a secundária; * a linha 5 com a coluna 10; O procedimento deve retornar a matriz alterada. 27) Construa uma função que receba, por parâmetro, uma matriz B(9,9) de reais e retorna a soma dos elementos das linhas pares de B. 28) Construa um procedimento que receba, por parâmetro, uma matriz A(12,12) e retorna, também por parâmetro, um vector com a soma de cada uma das linhas de A . 29) Construa um procedimento que receba, por parâmetro, uma matriz A(6,6) e multiplica cada linha pelo elemento da diagonal principal daquela linha. O procedimento deve retornar a matriz alterada. 30) Construa um procedimento que receba, por parâmetro, uma matriz 61x10. O procedimento deve somar individualmente as colunas da matriz e armazenar o resultado na 61a linha da matriz. O procedimento deve direita. 20) Escreva um algoritmo que leia um vector de strings ST e em seguida uma string S que indica qual (quais) os valores a procurar no vector. Esta string S pode englobar o caracter *, o qual pode substituir qualquer string incluindo a string vazia (tipo * do MSDOS). A saída do algoritmo deve consistir em todos os elementos do vector ST que possam ser identificados pela string S. Considere que a string S só pode conter (no máximo) um símbolo *. Exemplo: ST = (‘Antonio’, ‘Antonio Sequeira’, ‘Paulo Oliveira’, ‘Alberto Mouta’, ‘Antonio Reis’) Entrada (S) Saída Paulo Oliveira Paulo Oliveira Luis Reis O Nome não consta da lista Antonio* Antonio Antonio Sequeira Antonio Reis *eira Antonio Sequeira Paulo Oliveira A*a Antonio Sequeira Alberto Mouta Variáveis, Constantes e Tipos de Dados 1) Quais das seguintes declarações de variáveis são correctas em Pascal? a) VAR 1a, 2a, 3a : char; b) VAR num1 : real; c) VAR mod : char; d) VAR numint : integer; e) VAR H20 : char; f) VAR var : integer; g) VAR primeira vez : real; h) VAR taxa_de_juro : real; 2) Quais das seguintes declarações de constantes são válidas? a) CONST maximo = 1000; b) CONST minimo_valor = 0 or 1; c) CONST caracter1 : ‘d’ ; d) CONST maximovalor = 500.0; minimovalor = -500.0; 3) Considere as seguintes declarações: VAR m1, m2, m3 : integer; total : real; cad1, cad2 : char Tendo em conta os tipos definidos para as variáveis, analise as expressões apresentadas em seguida e indique se estão ou não correctas: a) total := m1 + m2 + m3; b) total := m1 + 4.2; c) total := m3 / m1; d) total := m3 div m1; e) m2:= m3 / m2; f) m2 := total + m1; g) m1 := total / 2; h) cad1 := m1; i) cad2 := ‘a’ + ‘b’ ; 5) Justifique porque é que as seguintes expressões estão incorrectas em Pascal: a) w := x ( y + z ); b) numero := num1 *+ num2; c) res := [ ( a + b ) * ( a - b ) ] / 5; 6) Considere a seguinte declaração: VAR m1, m2 : integer; Supondo que m1 é igual a 2 e m2 é igual a 4, indique o resultado das seguintes expressões: a) res1 := m1 = m2; b) res2 := m1 <> m2; c) res3 := m1 <= m2; d) res4 := m1 >= m2; e) res5 := m1 < m2; f) res6 := m1 > m2; g) res7 := (m1>1) and (m2<6); h) res8 := (m1>1) or (m2<6); i) res9 := (m1>5) and (m2<6) or (m2<=4); j) res10 := (m1>5) or (m2<6) and (m2<=4); l) res11 := not(m1>5) and (m2<6) or (m2=m1); m) res12 := False or (m2>m1) and True 7) Simplifique as seguintes expressões: a) not( (x>5) or (y<7) ) b) not( (x<=6) and (y=10) ) c) False and (x<=1) and (True or (y>6)) 8) Verifique quais os valores das expressões seguintes tendo como base o seguinte código: VAR a, b, c : integer; x, y : real; BEGIN a := 10; b := -15; c:= 7; x := 1.85e10; y := 0.2; ... a) abs(b - 10) + a mod (c - 1) b) a + 103 div sqr(a - c) c) trunc (x*y + 1.0) - a d) x / y * 0.342 + x e) x * 10.0 / 5.0 * 2.5 / 4.0 * 2.0 Algoritmos com Registos e Ficheiros 1) Escreva um algoritmo que permita a criação de um ficheiro binário com uma sequência de valores reais, positivos, inferiores ou iguais a 100 (percentagens obtidas por um conjunto de alunos num exame). O algoritmo deve também permitir efectuar a leitura do ficheiro, guardando a sequência de valores lidos, num vector. Em seguida deve determinar a média e o desvio padrão dos valores lidos e quantos valores estão compreendidos nos intervalos ]0..10], ]10..20], ..., ]90..100]. Admita que o número de alunos não é superior a 500. Construa em seguida um histograma para os intervalos considerados. 2) Considere as seguintes declarações (em Pascal) ou equivalentes numa outra linguagem: TYPE NOME=STRING[30]; DISCIPLINAS=(MAT,FIS,QUI,POR,FRA,ING,FIL,CIE,EFI); ALUNO=RECORD NOME_AL:NOME; NOTAS:ARRAY[DISCIPLINAS] OF INTEGER END; F_ALUNOS=FILE OF ALUNO; a) Escreva um programa que crie um ficheiro do tipo F_ALUNOS, contendo os nomes e as notas dos alunos de uma escola. b) Escreva um procedimento que determine para cada uma das disciplinas, a média das notas, o número de aprovações e o número de reprovações. c) Altere o programa anterior incluindo um procedimento que determine também, para cada aluno, o número de disciplinas a que obteve aprovação. d) Crie ainda um novo procedimento que dado um nome de um aluno, permita calcular a média de todas as disciplinas a que obteve aprovação. 3) Os elementos de dois ficheiros são registos contendo um nome e um salário: TYPE ELEMENTO=RECORD NOME_AL: STRING[30]; SALARIO:REAL; END; Ambos os ficheiros estão ordenadas por ordem alfabética crescente de nomes. Construa um programa que funda os dois ficheiros, criando um ficheiro de texto com todos os nomes (e respectivos salários) contidos nos dois ficheiros, ordenados por ordem alfabética. Deve ser colocado um nome e um salário em cada uma das linhas do novo ficheiro criado. 4) Escreva um programa que crie um ficheiro binário contendo todas as datas dos anos entre 1900 e 1999. Para tal utilize o seguinte tipo: TYPE DATA = RECORD DIA : 1..31; MES : 1..12; ANO : 1900..1999; END; O cálculo de todas as datas deve ser realizado de forma automática. 5) Considere as seguintes declarações de um programa escrito em Pascal: TYPE AREAS_INTERESSE=(MÚSICA,LITERATURA,PINTURA,CINEMA,DESPORTO); PESSOA=RECORD NOME : STRING[50]; IDADE : INTEGER; SEXO : (MASC,FEM); A_INT : ARRAY[1..5] OF AREAS_INTERESSE END; F_PESSOA = FILE OF PESSOA; Uma agência de casamentos pretende fazer uma lista de casamentos possíveis entre as pessoas constantes de um ficheiro FP do tipo F_PESSOA. O ficheiro é de acesso aleatório (binário). Considera-se que um casamento é possível entre duas pessoas se elas forem de sexo diferente, se a sua diferença de idades não for superior a 20 anos e se tiverem pelo menos duas áreas de interesse em comum (no ficheiro não constam pessoas casadas!). a) Escreva um programa que construa um ficheiro do tipo apresentado. b) Escreva um programa que, usando o ficheiro construído na alínea anterior, gere a referida lista de possíveis casamentos, guardando-a num ficheiro de texto, com a formatação que se indica a seguir: Ficheiro de Texto Exemplo: 1 - MANUEL 30 M música cinema desporto Pode Casar-se com: JOANA 45 F cinema desporto LUÍSA 21 F música pintura cinema 2 - JOAO 25 M cinema pintura Fica solteiro ! 3 - PAULO ... ... ................ ... 24 - JOANA 45 F cinema desporto Pode Casar-se com: MANUEL 30 M música cinema desporto RAUL 33 M pintura cinema desporto ... 6) Escreva um programa que crie um ficheiro de acesso directo (‘FUTEBOL.DAT’ ) contendo a seguinte informação acerca dos clubes que disputam um campeonato de futebol: Nome do clube; Número de golos marcados; Número de golos sofridos; Pontuação O programa deverá ler o nome de cada um dos clubes e escrevê-lo no ficheiro, inicializando com o valor 0 cada um dos restantes campos de cada registo. Os nomes devem ser introduzidos por ordem alfabética. Quando houver nomes de clubes com mais do que uma palavra, as palavras serão escritas sem espaço entre si (ex: VITORIAGUIMARAES). 7) Escreva um programa que actualize o ficheiro criado pelo programa anterior e que, no final escreva o conteúdo do ficheiro actualizado. Após cada jornada é preparado um ficheiro de texto (‘RESULT.DAT’ ), contendo os resultados da jornada, com o aspecto que se exemplifica a seguir: Ficheiro Exemplo: PORTO 4 BENFICA 0 VITORIAGUIMARAES 1 SPORTING 1 BELENENSES 0 BOAVISTA 1 ... O programa deverá ler o ficheiro ‘RESULT.DAT’ e actualizar o ficheiro ’ PONTOS.DAT’ . O programa deverá conter subprogramas que executem as seguintes tarefas: Ler uma linha do ficheiro RESULT.DAT e decompô-la nos seus elementos (admita que entre estes existe apenas um espaço); Procurar um clube no ficheiro PONTOS.DAT; Actualizar um registo do ficheiro PONTOS.DAT; Escrever o conteúdo do ficheiro PONTOS.DAT. 8) Reformule o problema da ordenação pelo método Bubblesort de modo a que os elementos do vector a ordenar sejam lidos a partir de um ficheiro texto, com o nome ‘Entrada.txt’ ” . Escreva 2 versões do programa: a) uma em que os resultados sejam escritos no écran; b) outra em que os resultados sejam escritos noutro ficheiro de texto ‘Saida.txt’ . 9) Os elementos de dois ficheiros de texto são palavras com o máximo de 20 caracteres. As sequências de palavras dos dois ficheiros estão ordenadas por ordem alfabética crescente. Faça um programa que funda as duas sequências e escreva o resultado num ficheiro do mesmo tipo. 10) Escreva um algoritmo que leia de um ficheiro de texto um conjunto de nomes de pessoas, converta todas as letras minúsculas para maiúsculas e elimine as partículas ‘E’ , ‘DE’ , ‘DA’ , ‘DO’ , ‘DOS’ , ‘DAS’ e ‘D’ . Os nomes devem ser lidos um por um. Escreva os resultados noutro ficheiro de texto.
Docsity logo



Copyright © 2024 Ladybird Srl - Via Leonardo da Vinci 16, 10126, Torino, Italy - VAT 10816460017 - All rights reserved