View
214
Download
0
Category
Preview:
Citation preview
Bacharelado em Ciência e Tecnologia BC0505 – Processamento da Informação
EXERCÍCIOS
Lista de Exercícios – Modularização + Vetor + Matriz
PARTE 1 – Modularização
[1]. Dado o módulo a seguir, determinar o valor retornado para cada uma das chamadas:
funcao inteiro Equação1 (inteiro A) {
inteiro X
X = (A * A)+(5*A)/ 2
retorne (X)
}
a) Equação1(10)
b) Equação1((3 * 4) – 14 + (8 / 4))
[2]. Construa uma função que retorne o somatório dos primeiros n elementos de qualquer PA, dados o primeiro termo e a
razão.
125
0
Duas possibilidades de interpretação do exercício:
Se desejar retornar o valor da PA após indicados os (n) termos a serem considerados:
public static double PA(double a1, double r) { /*sendo a1 o primeiro termo da PA e r a razão da PA a serem pedidos no main*/ double soma; Scanner sc = new Scanner (System.in); System.out.println(" A função de Soma = " + a1 + "*n + 0.5*n*(n*" + r + " - " + r + ")"); System.out.println("Digite o número (inteiro) de termos da PA: "); int n = sc.nextInt(); soma = ((2 * a1 * n) + (r * n * n) - (r * n)) / 2; System.out.println("Soma dos " + n + " termos da PA é: " + soma); return soma; //retornará o valor da PA após indicado quantos (n) termos serão considerados }
Se desejar retornar apenas a equação da PA:
public static String PA(double a1, double r) { /*sendo a1 o primeiro termo da PA e r a razão da PA a serem pedidos no main*/ String equacao = " A função de Soma = " + a1 + "*n + 0.5*n*(n*" + r + " - " + r + ")"; return equacao; //retornará apenas a equação da PA }
[3]. Construa uma função que retorne se dada letra (minúscula ou maiúscula) é vogal (V) ou não (F).
[4]. Construa uma função que retorne V (true) se o sexo passado por parâmetro for uma letra válida (M ou F)
[5]. Um número é capicua quando pode ser lido da esquerda para a direita ou da direita para a esquerda. Construa uma
função que retorne se dado número é capicua (V) ou não (F)
public static char vogalconsoante(String s){ /*Para minimizar a condição, pode-se transformar a letra em minúscula ou maiúscula:*/ String S = s.toUpperCase(); //deixa tudo maiúsculo /*String S = s.toLowerCase(); // deixa tudo minúsculo*/ if ("A".equals(S)||"I".equals(S)||"U".equals(S)||"E".equals(S)||"O".equals(S)){ char frase = 'V'; return frase; } char frase = 'F'; return frase; }
public static String validacao(String s) { String S = s.toUpperCase(); if("M".equals(S)||"F".equals(S)){ return "V"; } return "Caracter inserido inválido"; } OUTRA FORMA public static boolean validacao(char s) { boolean resp = false; if ("M".equals(s) || "F".equals(s) || "m".equals(s) || "f".equals(s)) { resp = true; } return resp; }
public static boolean validação (int a) { int temp = a, t, capicua = 0; boolean resp = false; while (temp != 0) { t = temp % 10; temp = temp / 10; capicua = (capicua * 10) + t; } if(capicua==a){ resp = true; } return resp; }
[6]. Construa uma função que retorne o valor em binário de um dado número inteiro decimal.
[7]. COMPLETE O PROGRAMA A SEGUIR SEGUINDO AS ORIENTAÇÕES:
a) Note a existência da função LerValorSuperior que faz a entrada de dados de um valor e obriga o usuário a
digitar um valor maior ou igual a um limite inferior (Esta função está pronta).
b) Note que a função VerificaMaior está começada e você deverá completá-la conforme orientações mais
adiante.
PEDE-SE:
i. Complete a função VerificaMaior que deverá ter o seguinte comportamento: Ela está recebendo por parâmetro
DOIS VALORES e deverá retornar o valor 1 se o primeiro valor for maior que o segundo, retornar 2 se o
segundo valor for maior que o primeiro, ou retornar zero se os dois valores forem iguais.
ii. Complete a função inicio:
Faça a chamada da função LerValorSuperior para ler o valor de N2, tendo como limite inferior o valor de
N1. Note que a chamada para a leitura de N1 já está feita e o usuário não conseguirá digitar um valor menor
que zero. No caso de N2, o limite inferior deverá ser o valor de N1. Siga o modelo da chamada.
Faça a chamada da função VerificaMaior, na função início.
Logo a após a chamada verifique o valor retornado e imprima uma das seguintes mensagens: “os valores são
iguais” ou “os valores são diferentes”
programa {
funcao inicio () { inteiro n1, n2, resultado
n1 = LerValorSuperior ("Digite o valor de N1: ", 0)
// completar ...
}
// ------------------------------------------------------------------------------------------------------
funcao inteiro LerValorSuperior (cadeia msg, inteiro inferior) {
inteiro valor
public static int binário (int a) { int temp = a; double bin = 0; int i = 0; while (temp != 0) { int t = temp % 2; temp = temp / 2; bin = bin + (t * Math.pow(10, i)); i++; } int bim = (int) bin; //conversão de double para int return bim; }
escreva(msg)
leia(valor)
enquanto (valor < inferior) {
escreva("Erro: Valor deve ser maior ou igual a ", inferior, "\n") escreva(msg)
leia (valor) }
retorne valor }
// ---------------------------------------------------------------------------------------------------------
funcao inteiro Verifica_maior(inteiro valor1, inteiro valor2)
{ inteiro resposta = 0
// escreva abaixo o codigo da sua função
_____________
____________
retorne resposta }
}
public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n1, n2, resultado; n1 = LerValorSuperior("Digite o valor de N1: ", 0); n2 = LerValorSuperior("Digite o valor de N1: ", n1); resultado = Verifica_maior(n1, n2); if (resultado == 0) { System.out.println("Os valores são iguais"); } else { System.out.println("Os valores são diferentes"); } } //FUNÇÃO VERIFICA MAIOR public static int Verifica_maior(int valor1, int valor2) { if (valor1 < valor2) { return 2; } else if (valor1 > valor2) { return 1; } return 0; } //FUNÇÃO JÁ FEITA public static int LerValorSuperior(String msg, int inferior) { Scanner sc = new Scanner(System.in); System.out.println(msg); int valor = sc.nextInt(); while (valor < inferior) { System.out.println("Erro: Valor deve ser maior ou igual a " + inferior + "\n"); System.out.println(msg); valor = sc.nextInt(); } return valor; }
[8]. Escreva um programa para ler dois números inteiros positivos e mostrar a soma e o produto dos mesmos. Seu
programa deve ter três sub-rotinas (ou módulos):
a) A primeira, chamada Valida_Positivo, deve ler e validar um número (número deve ser positivo). A função deve
ser chamada DUAS vezes no programa principal. Uma para cada número.
b) A segunda, chamada SomaDois_Inteiros, deve receber dois números por parâmetro e retornar a soma
c) A terceira, chamada ProdutoDois_Inteiros, deve receber dois números por parâmetro e retornar o produto.
A função principal (inicio) deve chamar as funções, na sequência correta e imprimir os resultados.
public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println("Digite o primeiro valor inteiro positivo"); int a = sc.nextInt(); int ac = validacao(a); System.out.println("Digite o segundo valor inteiro positivo"); int b = sc.nextInt(); int dc = validacao(b); System.out.println("Soma = " + SomaDois_Inteiros(ac, dc)); System.out.println("Produto = " + ProdutoDois_Inteiros(ac, dc)); } public static int validacao(int a) { Scanner sc = new Scanner(System.in); int valor = a; while (valor <= 0) { System.out.println("Erro: Valor deve ser maior que 0"); System.out.println("Digite outro valor inteiro positivo"); valor = sc.nextInt(); } return valor; } public static int SomaDois_Inteiros(int valor1, int valor2) { return valor1 + valor2; } public static int ProdutoDois_Inteiros(int valor1, int valor2) { return valor1 * valor2; }
PARTE 2 – Modularização + Vetor
[9]. Construa uma função que receba por parâmetro, um vetor e seu tamanho retorne a posição do maior valor (elemento).
[10]. Construa uma função que receba por parâmetro, um vetor e seu tamanho retorne a media dos seus elementos.
[11]. Escreva um programa para ler um VETOR de 10 números inteiros positivos e imprimir o vetor e também a soma
dos elementos do vetor e a media dos elementos. Seu programa deve ter quatro sub-rotinas (ou módulos):
a) A primeira, chamada Valida_Positivo, deve ler e validar um número (número deve ser positivo).
b) A segunda, chamada Leitura_Vetor, deve ler os elementos do vetor. Para validar os números deve fazer uso da
função Valida_Positivo.
c) A terceira, chamada SomaVetor, deve receber o vetor por parâmetro e retornar a soma dos seu elementos
d) A quarta, chamada Imprime_Vetor, deve receber o vetor por parâmetro e imprimir os elementos.
A função principal (inicio) deve chamar as funções, na sequência correta e imprimir a média.
public static int retorna_indice(int A[], int x) { int temp =A[0]; int j=0; for (int i = 1; i < x; i++) { if(temp<A[i]){ temp = A[i]; j=i; } } return j; }
public static double media(double A[], int x) { double media=0; for (int i = 0; i < x; i++) { media = media + A[i]; } media = media/x; return media; }
public static void main(String[] args) { Scanner sc = new Scanner(System.in); int A[] = new int[10]; A = Leitura_Vetor(A); double soma = Soma_Vetor(A); double media = soma / 10; Imprime_Vetor(A); System.out.println("A média dos valores do vetor é: " + media); } public static int validacao(int a) { Scanner sc = new Scanner(System.in); int valor = a; while (valor <= 0) { System.out.println("Erro: Valor deve ser maior que 0"); System.out.println("Digite outro valor inteiro positivo"); valor = sc.nextInt(); } return valor; } public static int[] Leitura_Vetor(int A[]) { Scanner sc = new Scanner(System.in); System.out.println("Digite os valores da matriz"); for (int i = 0; i < 10; i++) { int x = sc.nextInt(); x = validacao(x); A[i] = x; } System.out.println(""); return A; } public static double Soma_Vetor(int A[]) { double soma = 0; for (int i = 0; i < 10; i++) { soma = soma + A[i]; } return soma; } public static void Imprime_Vetor(int A[]) { System.out.println("VETOR"); for (int i = 0; i < 10; i++) { System.out.println(A[i]); } System.out.println(""); }
[12]. Construa uma função que receba por parâmetro, um vetor e seu tamanho, e retorne V (true) se o vetor estiver em
ordem crescente e (F) caso contrário.
[13]. Construa uma função que receba por parâmetro, um vetor e seu tamanho e devolva o vetor ordenado (em ordem crescente)
[14]. Construa uma função que receba por parâmetro, um vetor A e seu tamanho e devolva outros dois vetores APAR e
AIMPAR. O vetor APAR deve conter os elementos pares de A e o vetor AIMPAR, os elementos ímpares de A.
public static boolean verifica(int A[], int a) { int temp =A[0]; for (int i =1;i<a;i++){ if(temp<A[i]){ temp = A[i]; } else{ return false; } } return true; }
public static int[] ordena(int A[], int a) { int temp; for (int j = 0; j < a; j++) { for (int i = 1; i < a; i++) { if (A[i] < A[i - 1]) { temp = A[i]; A[i] = A[i - 1]; A[i - 1] = temp; } } } return A; }
public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println("Digite o tamanho do vetor"); int x = sc.nextInt(); int A[] = new int[x]; System.out.println("Digite os valores do vetor"); for (int i = 0; i < x; i++) { A[i] = sc.nextInt(); } int APAR[] = new int[x]; int AIMPAR[] = new int[x]; int M[][] = Par_Impar(A, x); System.out.println(""); for (int i = 0; i < x; i++) { APAR[i] = M[0][i]; } for (int i = 0; i < x; i++) { AIMPAR[i] = M[1][i]; } }
[15]. Construa uma função que receba por parâmetro, um vetor A e seu tamanho, e retorne a quantidade de valores pares
em X.
[16]. Construa uma função chamada Sucessor que receba por parâmetro, um vetor A, seu tamanho e uma posição “i”, e
retorne o elemento sucessor do elemento “i”. Caso não seja possível retornar o sucessor, retorne o valor -1 e imprima
uma mensagem de erro na tela. Lembre-se de que não é possível retornar o sucessor do último elemento.
public static int[][] Par_Impar(int A[], int a) { //Scanner sc = new Scanner(System.in); int APAR[] = new int[a]; int AIMPAR[] = new int[a]; int M[][] = new int[2][a]; int l = 0; int k = 0; for (int i = 0; i < a; i++) { if (A[i] % 2 == 0) { APAR[l] = A[i]; l++; } else { AIMPAR[k] = A[i]; k++; } } for (int j = 0; j < l; j++) { M[0][j] = APAR[j]; } for (int j = 0; j < k; j++) { M[1][j] = AIMPAR[j]; } return M; }
public static int quantidade(int A[], int a) { int cont = 0; for (int i = 0; i < a; i++) { if (A[i] % 2 == 0) { cont++; } } return cont; }
public static int Sucessor(int A[], int a, int i){ //a - tamanho e i – índice if(i+1>=a){ System.out.println("Erro! Índice indicado maior ou igual ao tamanho da matriz"); return -1; } int s = A[i+1]; return s; }
[17]. Considere a existência de um vetor (de String) contendo o nome de 80 alunos, uma matriz (de double) de 80x2
contendo 2 notas (a nota de cada prova numa coluna ) e um vetor (de int) contendo as respectivas faltas desses alunos.
Escreva funções específicas para:
a. Exibir na tela a média final de cada aluno
b. Imprimir o nome e o total de faltas dos alunos com média acima de 7
[18]. Dada uma sequência de N números entre 0 e 100. Determine qual o valor de maior frequência. Caso haja mais de
um valor que tenha a maior frequência, mostre o maior deles.
Entrada
Na primeira linha ha um inteiro N, 1 ≤ N ≤ 1000000, representando a quantidade números.
Nas N linhas seguintes haverá um numero natural entre 0 e 100 inclusive por linha.
Saída O programa gera apenas duas linhas. Na primeira dela mostre qual foi o valor com maior frequência. E na segunda linha,
mostre a quantidade de vezes que esse número apareceu na sequencia de valores. Apos a impressão deste ultimo valor
quebre uma linha. Caso haja mais de um valor tenha a maior frequência, mostre o maior deles.
Exemplos
ENTRADA SAÍDA 10 1 7 4 29 7 4 7 8 7 29 7
4
18 1 7 7 7 7 7 1 8 8 8 8 8 1 7 8 7 8 1 8
7
15 100 100 1 1 100 100 100 2 5 6 7 11 2 2 100 100
6
15 0 0 1 1 0 0 100 2 5 6 7 11 2 0 100 0
5
15 101 100 1 1 10 10 10 2 5 10 6 7 11 2 2 10
Obs. Note que aqui foram “digitados” 16 números
(ao invés dos 15 sugeridos no primeiro dado) pois o
101 é uma entrada inválida e deve ser rejeitado
10
5
public static double[] Media(double notas[][]) { double B[] = new double[80]; for (int i = 0; i < 80; i++) { double temp = 0; for (int j = 0; j < 2; j++) { temp = temp + notas[i][j]; } B[i] = temp / 2; } System.out.println(""); for (int i = 0; i < 80; i++) { System.out.println(B[i]); } return B; } public static void faltas(double notas[][], String nomes[], int faltas[]) { double B[] = Media(notas); for (int i = 0; i < 80; i++) { if (B[i] > 7.0) { System.out.printf("%s/t%d",nomes[i], faltas[i]); } } }
public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println("Quantos valores serão inseridos de 0 a 10000000"); int N = sc.nextInt(); System.out.println("Quais valores serão inseridos de 0 a 100"); int A[] = new int[N]; for (int i = 0; i < N; i++) { int temp = sc.nextInt(); A[i] = validacao(temp); } valor(A, N); } public static int validacao(int a) { Scanner sc = new Scanner(System.in); int valor = a; while (valor < 0 || valor > 100) { System.out.println("Erro: Valor digitado inválido"); System.out.println("Digite outro valor inteiro positivo"); valor = sc.nextInt(); } return valor; } public static void valor(int A[], int N) { int temp; for (int j = 0; j < N; j++) { for (int i = 1; i < N; i++) { if (A[i] < A[i - 1]) { temp = A[i]; A[i] = A[i - 1]; A[i - 1] = temp; } } } //tenho A ordenado int B[][] = new int[N][2]; int i = 0; int cont = 1; for (int j = 0; j < N - 1; j++) { if (A[j] == A[j + 1]) { cont++; B[i][0] = A[j]; B[i][1] = cont; } else { cont = 1; i++; B[i][0] = A[1 + j]; B[i][1] = cont; } } int comp = B[0][1]; int desem = B[0][0]; for (int k = 1; k < N; k++) { if (comp <= B[k][1]) { if (comp < B[k][1]) { comp = B[k][1]; desem = B[k][0]; }
PARTE 3 – Modularização + MATRIZ
[19]. Construa uma função que receba por parâmetro, uma matriz A e suas dimensões e retorne V (true) se existir alguma
linha com todos os elementos zerados e F (false) caso contrário.
[20]. Construa uma função que receba por parâmetro, uma matriz A e suas dimensões e retorne V (true) se existir alguma
coluna com todos os elementos zerados e F (false) caso contrário.
else { if (desem < B[k][0]) { desem = B[k][0]; } } } } System.out.println(""); System.out.println("O número com maior frequência é: " + desem); System.out.println("A frequencia deste número é: " + comp); System.out.println(""); }
public static boolean zero(int[][] A, int l, int c) { for (int i = 0; i < c; i++) { int cont = 0; for (int j = 0; j < l; j++) { if (A[j][i] != 0) { break; } else { cont++; if (cont == l) { return true; } } } } return false; }
public static boolean zero(int[][] A, int l, int c) { for (int i = 0; i < l; i++) { int cont = 0; for (int j = 0; j < c; j++) { if (A[i][j] != 0) { break; } else { cont++; if (cont == c) { return true; } } } } return false; }
[21]. Construa uma função que receba por parâmetro, uma matriz A, suas dimensões e um número K. Retorne a soma dos
elementos da coluna K.
[22]. Os elementos Aij de uma matriz inteira Anxn representam os custos de transporte da cidade i para a cidade j.
Exemplo: Sendo K= 0, L = 1, M = 3 e F = 0 o custo do itinerário é:
A[K][L] + A[L][M] + A[M][F] =
A[0][1] + A[1][3] + A[3][0] =
1 + 400 + 7 = 408
Construa uma função que receba por parâmetro, uma matriz A, suas dimensões e 4 valores indicando origens e
destinos (K, L, M, F). A função deve retornar o custo para ir de K a F, passando por L e M conforme exemplo.
[23]. Uma matriz de duas colunas pode ser utilizada para representar o resultado de jogos de campeonatos. Na primeira
coluna o número de gols do time1 (mandante do jogo) e na segunda coluna o número de gols do time2 (visitante).
Construa uma função que receba por parâmetro, uma matriz Anx2 e o valor de N e retorne a quantidade de empates.
[24]. Um teatro deseja informatizar o sistema de venda de ingressos. Suponha que o teatro tenha 560 poltronas, ou seja
40 cadeiras em cada uma das 14 filas. Para comprar ou reservar um lugar o usuário deve informar o número da fila
(de 1 a 14) e o número da poltrona na fila (de 1 a 40).
Na reserva ou venda de um ingresso deverá ficar registrado o nome da pessoa que comprou o bilhete para a poltrona.
Inicialmente todas as poltronas estarão preenchidas como “LIVRE”
Construa funções específicas para:
a) Inicializar todas as poltronas do teatro no sistema, com a situação "LIVRE".
b) Vender um determinado ingresso. Aqui o usuário irá informar o número da fila e cadeira. Se estiver livre, solicitar
também o nome da pessoa. Se a poltrona NÃO estiver LIVRE avisar ao usuário.
c) Pesquisar quantas poltronas "consecutivas" livres existem numa determinada FILA. Essa rotina deve informar qual o
número da primeira poltrona livre, e quantas livres "consecutivas" tem ao lado dela.
public static int soma(int[][] A, int l, int c, int k) { Scanner sc = new Scanner(System.in); while (k >= c || k < 0) { System.out.println("Valor digitado inválido, digite novamente"); k = sc.nextInt(); } int temp = 0; for (int i = 0; i < l; i++) { temp = temp + A[l][k]; } return temp; }
public static int custo(int[][] A, int n, int K, int L, int M, int F) { return A[K][L] + A[L][M] + A[M][F]; }
public static int empate(int[][] A, int n) { int cont = 0; for (int i = 0; i < n; i++) { if (A[i][0] == A[i][1]) { cont++; } } return cont; }
public static String[][] inicio(String A[][]) { for (int i = 0; i < 14; i++) { for (int j = 0; j < 40; j++) { A[i][j] = "LIVRE"; } } return A; } public static String[][] compra(String[][] A, int fl, int pc) {//fl e pc são fileira e poltrona escolhidas Scanner sc = new Scanner(System.in); while (!"LIVRE".equals(A[fl][pc])) { System.out.println("Poltrona Ocupada! Escolha outra"); System.out.println("Digite a fila: "); fl = sc.nextInt(); System.out.println("Digite a poltrona: "); pc = sc.nextInt(); } System.out.println("Digite seu nome"); String s = sc.nextLine(); A[fl][pc] = s; System.out.println("Obrigado por assistir conosco"); System.out.println("Pague no caixa ao lado"); return A; } public static void pesquisa(String[][] A, int fl) { int B[][] = new int[20][2]; int i = 0; int cont = 0; int j = -1; while (i != 40) { if ("LIVRE".equals(A[fl][i])) { j++; B[j][0] = i + 1; while ("LIVRE".equals(A[fl][i + 1])) { cont++; i++; } B[j][1] = cont; } i++; } for (int k = 0; k < j; k++) { System.out.println("A poltrona " + B[k][0] + " está livre e existem " + B[k][1] + " poltronas vazias ao seu lado"); } }
PARTE 4 – TESTE DE MESA
[25]. Simule a execução do algoritmo SEGREDO através de “teste de mesa”:
a) Na linha 5 da função inicio preencha os espaços da matriz A com a sequência dos 6 primeiros dígitos da sua
Matrícula
b) Transcreva esses valores para a Matriz Original (na tabela teste de mesa);
c) Simule a execução da chamada da função FSegredo (linha 6) e no ESCOPO FSEGREDO, anote os novos
valores de cada variável e as linhas que as modificam. É obrigatório anotar todas as linhas que modifiquem
um dos valores contidos nas variáveis i, j, aux até que a função seja encerrada.
d) Indique na “Matriz após FSegredo” os valores da Matriz A após a execução de FSegredo.
e) Que valor será impresso na linha 7 da função início? 3
“SEGREDO” TESTE DE MESA
Matriz A Original
0 1 2
0 3 1 0
1 0 0 1 ESCOPO FSEGREDO
LINHA i j aux
11 3
12 0
14 0
19 2
19 4
21 1
14 0
19 2
19 4
21 2
24 0
25 0
25 1
25 2
24 1
25 0
25 1
25 2
Matriz Após FSegredo
0 1 2
0 1 0 0
1 0 0 0
***O valor de matrícula utilizado é fictício.
Recommended