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:
publicstaticdouble 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: publicstatic 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)
publicstaticchar 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; }
publicstatic String validacao(String s) { String S = s.toUpperCase(); if("M".equals(S)||"F".equals(S)){ return"V";
}
return"Caracter inserido inválido"; }
OUTRA FORMA
publicstaticboolean validacao(char s) { boolean resp = false;
if ("M".equals(s) || "F".equals(s) || "m".equals(s) || "f".equals(s)) { resp = true;
}
return resp; }
publicstaticboolean 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
publicstaticint 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 } }
publicstaticvoid 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
publicstaticint Verifica_maior(int valor1, int valor2) {
if (valor1 < valor2) { return 2;
} elseif (valor1 > valor2) { return 1;
} return 0; }
//FUNÇÃO JÁ FEITA
publicstaticint 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.
publicstaticvoid 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)); }
publicstaticint 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; }
publicstaticint SomaDois_Inteiros(int valor1, int valor2) { return valor1 + valor2;
}
publicstaticint 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. publicstaticint 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; }
publicstaticdouble media(double A[], int x) { double media=0;
for (int i = 0; i < x; i++) { media = media + A[i]; }
media = media/x; return media; }
publicstaticvoid main(String[] args) { Scanner sc = new Scanner(System.in); int A[] = newint[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); }
publicstaticint 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; }
publicstaticint[] 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; }
publicstaticdouble Soma_Vetor(int A[]) { double soma = 0;
for (int i = 0; i < 10; i++) { soma = soma + A[i]; }
return soma; }
publicstaticvoid 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.
publicstaticboolean verifica(int A[], int a) { int temp =A[0];
for (int i =1;i<a;i++){ if(temp<A[i]){ temp = A[i]; } else{ returnfalse; } } returntrue; }
publicstaticint[] 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; }
publicstaticvoid main(String[] args) { Scanner sc = new Scanner(System.in);
System.out.println("Digite o tamanho do vetor"); int x = sc.nextInt();
int A[] = newint[x];
System.out.println("Digite os valores do vetor"); for (int i = 0; i < x; i++) {
A[i] = sc.nextInt(); }
int APAR[] = newint[x]; int AIMPAR[] = newint[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.
publicstaticint[][] Par_Impar(int A[], int a) { //Scanner sc = new Scanner(System.in);
int APAR[] = newint[a]; int AIMPAR[] = newint[a]; int M[][] = newint[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; }
publicstaticint quantidade(int A[], int a) { int cont = 0;
for (int i = 0; i < a; i++) { if (A[i] % 2 == 0) { cont++; } } return cont; }
publicstaticint 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 rejeitado10 5 publicstaticdouble[] Media(double notas[][]) {
double B[] = newdouble[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; }
publicstaticvoid 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]); }
} }
publicstaticvoid 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[] = newint[N];
for (int i = 0; i < N; i++) { int temp = sc.nextInt(); A[i] = validacao(temp); }
valor(A, N); }
publicstaticint 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; }
publicstaticvoid 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[][] = newint[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("");
}
publicstaticboolean 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) { returntrue; } } } } returnfalse; }
publicstaticboolean 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) { returntrue; } } } } returnfalse; }
[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.
publicstaticint 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; }
publicstaticint custo(int[][] A, int n, int K, int L, int M, int F) { return A[K][L] + A[L][M] + A[M][F];
}
publicstaticint 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; }
publicstatic String[][] inicio(String A[][]) { for (int i = 0; i < 14; i++) {
for (int j = 0; j < 40; j++) { A[i][j] = "LIVRE"; } } return A; }
publicstatic 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;
}
publicstaticvoid pesquisa(String[][] A, int fl) { int B[][] = newint[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