Exercícios de Java

Page 1


Estruturas Repetitivas Para T=1 até Triangulos Para Carat=1 até Linha Trian:=Trian+ '*' FimPara Trian:=Trian+"\t" FimPara Trian:=Trian+"\n" FimPara Escrever(Trian)

 PROGRAMA TRIANGULOSRETANGULOS public class R15 {public static void main(String[] args) {final char C='*'; int A=6; int Triangulos=5; String Trian=""; for (int Linha=1; Linha<=A; Linha++) {for (int T=1; T <= Triangulos; T++) {for (int Carat=1; Carat <= Linha; Carat++) Trian += C; Trian += "\t";} Trian+="\n";} System.out.println(Trian);}}

 EXECUÇÃO * ** *** **** *****

* ** *** **** *****

* ** *** **** *****

* ** *** **** *****

* ** *** **** *****

? EXERCÍCIO 16: ÁRVORE Elabore um programa que imprima a seguinte árvore:

* * * * * * * * * *

* * * * *

* * * * * *

* * * * *

* * * * * * * * * * © FCA – Editora de Informática

109


Exercícios de Java: Algoritmia e Programação Estruturada  TOP-DOWN 1. 2. 3. 4.

Ler o número de linhas da árvore Determinar a coluna do ecrã onde será impresso o topo da árvore Inicializar o primeiro ímpar Para cada linha da árvore 4.1. Imprimir espaços até ao início da linha 4.2. Imprimir um número ímpar de asteriscos 4.3. Preparar a impressão da linha seguinte 4.3.1. Gerar o próximo ímpar 4.3.2. Determinar o início da próxima linha

 CONSTANTES E VARIÁVEIS Constante C Espaco Variável A Carat Esp Impar Inicio L

Tipo char char

Tipo int int int int int int

 ALGORITMO ARVORE C:= '*' Espaco:=' ' Ler(A) Impar:=1 Inicio:=((A-1)*2+1)/2 Para l=1 até A Para Esp=1 até Inicio Escrever(Espaco) FimPara Para Carat=1 até Impar Escrever(C) FimPara Impar:=Impar+2 Inicio:=Inicio-1 FimPara 110

© FCA – Editora de Informática

Significado Caráter da árvore Espaço

Valor *

Significado Altura da árvore Contador de asteriscos Contador de espaços Número de asteriscos de cada linha Coluna para início de cada linha da árvore Contador de linhas


Estruturas Repetitivas  PROGRAMA ARVORE import java.util.Scanner; public class R16 {public static void main(String[] args) {final char C='*'; final char Espaco=' '; int A, Impar, Inicio; Scanner LerS=new Scanner(System.in); System.out.print("Número de linhas da árvore "); A=LerS.nextInt(); Impar=1; Inicio=(int) ((A *2-1)); for(int L=1; L<=A; L++) {for (int Esp=1; Esp<=Inicio; Esp++) System.out.print (Espaco); for (int Carat=1; Carat <= Impar; Carat++) System.out.print(C); System.out.println(); Impar+=2; Inicio--;}}}

 EXECUÇÃO Número de linhas da árvore 10 * *** ***** ******* ********* *********** ************* *************** ***************** *******************

? EXERCÍCIO 17: MULTIPLICAÇÃO RUSSA Antigamente, os camponeses russos usavam um algoritmo da multiplicação que implicava, apenas, o conhecimento da tabuada do 2. Assim, para multiplicarem X por Y, dividiam (divisão inteira) X sucessivamente por 2 até obterem o quociente 1 e multiplicavam Y por 2; adicionavam os valores de Y sempre que X era ímpar. © FCA – Editora de Informática

111


Exercícios de Java: Algoritmia e Programação Estruturada ? EXERCÍCIO 35: PALÍNDROMO Elabore um programa que verifique se determinada palavra é um palíndromo. Um palíndromo é uma palavra ou frase que se lê da mesma maneira, quer da esquerda para a direita, quer da direita para a esquerda. Por exemplo: osso, ovo e socos. Â TOP-DOWN 1. Ler a palavra 2. Determinar o comprimento da palavra 3. Enquanto a palavra puder ser um palíndromo 3.1. Extrair o caráter mais à esquerda 3.2. Extrair o caráter mais à direita 3.3. Comparar os dois carateres 3.3.1. Se os dois carateres forem diferentes, a palavra não é um palíndromo 3.3.2. Se os dois carateres forem iguais, passar à extração do próximo par de carateres 4. Imprimir se a palavra é ou não um palíndromo

 VARIÁVEIS Variável

Tipo

C Dirta Esq Numcarat Palavra

int char char int String

Significado Contador de carateres Caráter à direita Caráter à esquerda Comprimento da palavra Palavra a verificar se é um palíndromo

 ALGORITMO PALINDROMO Ler(Palavra) Numcarat:=Palavra.comprimento Palindromo:=verdade Para C=0 até Numcarat/2-1 e Palindromo=verdade Esq:=palavra.subString(C,1) Dirta:=Palavra.subString(Numcarat-1-C,1) Se Esq<>Dirta Então Palindromo:=falso FimSe FimPara Escrever(Palavra, Palindromo) 148

© FCA – Editora de Informática


Estruturas Repetitivas  PROGRAMA PALINDROMO import java.util.Scanner; public class R35 {public static void main(String[] args)throws Exception {char Esq, Dirta; String Palavra; boolean Palindromo=true; Scanner LerS=new Scanner(System.in); System.out.print("Digite uma palavra "); Palavra=LerS.next().toLowerCase(); int Numcarat=Palavra.length(); for (int C=0; (C<Numcarat / 2 && Palindromo == true); C++) {Esq=Palavra.charAt(C); Dirta =Palavra.charAt(Numcarat-1-C); if (Esq != Dirta) Palindromo=false;} System.out.println (Palavra+String.valueOf(Palindromo ==true ? " é palíndromo": " não é palíndromo"));}}

 EXECUÇÃO Digite uma palavra radar radar é palíndromo

© FCA – Editora de Informática

149


Exercícios de Java: Algoritmia e Programação Estruturada ? EXERCÍCIO 12: PESQUISA BINÁRIA Elabore um programa que procure um valor num vetor de números reais que se encontra ordenado por ordem crescente. Utilize a pesquisa binária. Por exemplo, procure o número 160 no seguinte vetor: A=

100

110

120

140

160

200

220

Procura do número 160: 100

110

120

140

160

200

220

Procura do número 130:

 TOP-DOWN 1. Formar um vetor de N números inteiros 2. Ler o número a procurar 3. Procurar o número enquanto não o encontrarmos e for possível encontrá-lo 3.1. Determinar o índice que ocupa a posição do meio do vetor 3.2. Comparar o elemento do meio com o número a procurar 3.2.1. Se o valor a procurar for maior do que o elemento do meio, dirigir a procura para o subconjunto da direita 3.2.2. Se o valor a procurar for menor do que o elemento do meio, dirigir a procura para o subconjunto da esquerda 3.2.3. Se o valor a procurar for igual ao elemento do meio, encontramos o número 4. Imprimir o índice do elemento que for igual ao valor procurado e, em caso de não o termos encontrado, imprimir uma mensagem apropriada

172

© FCA – Editora de Informática


Vetores e Matrizes  VARIÁVEIS Variável

Tipo

Significado

A Exito I Inf M

double[] lógica int int int

N Sup X

int int double

Vetor de números reais Resultado da pesquisa Índice de cada elemento do vetor Limite inferior de cada subconjunto Índice do elemento do meio de cada subconjunto Número de elementos do vetor Limite superior de cada subconjunto Valor a procurar

 ALGORITMO PESQUISABINARIA A:={100,110,120,140,160,200,220} N:=A.comprimento Ler(X) Inf:=0 Sup:=N-1 Exito:=falso Enquanto Exito=falso E Inf<=Sup M:=Int((Sup+Inf)/2) Se X>A(M) Então Inf:=M+1 Senão Se X<A[M] Então Sup:=M-1 Senão Exito:=verdade Fimse Fimse FimEnq Se Exito=verdade Então Escrever(X, " é o elemento índice",M," do vetor") Senão Escrever(X, " não existe no vetor!!") Fimse

 PROGRAMA PESQUISABINARIA import java.util.Scanner; public class VM12 {public static void main(String[] args)throws Exception {int N=7, Inf=0, Sup=N-1, M=0; double[]A={100,110,120,140,160,200,220}; © FCA – Editora de Informática

173


Exercícios de Java: Algoritmia e Programação Estruturada double X; boolean Exito=false; Scanner LerS= new Scanner(System.in); System.out.print("Digite o valor a procurar "); X = LerS.nextDouble(); while (Exito==false && Inf<=Sup) {M=(Sup+Inf)/2; if (X>A[M]) Inf=M+1; else if (X<A[M]) Sup=M-1; else Exito=true;} if (Exito==true) System.out.print(String.format("%3.1f é o elemento índice %d do vetor\n",X, M)); else System.out.print(String.format("%3.1f não existe no vetor!!\n",X));}}

 EXECUÇÃO Digite o valor a procurar 160 160,0 é o elemento índice 4 do vetor

? EXERCÍCIO 13: ORDENAÇÃO ALFABÉTICA Elabore um programa que ordene por ordem alfabética um vetor de nomes, aplicando o algoritmo de ordenação por seleção. Por exemplo, ordenação da seguinte lista de K nomes por ordem alfabética: João

Teresa

Pedro

Passagem 1

Paulo

Beatriz

Lista de nomes Beatriz

2 3 4 5

174

Maria

© FCA – Editora de Informática

Teresa

Pedro

Maria

Paulo

João

João

Pedro

Maria

Paulo

Teresa

Maria

Pedro

Paulo

Teresa

Paulo

Pedro

Teresa

Pedro

Teresa


Exercícios de Java: Algoritmia e Programação Estruturada ? EXERCÍCIO 24: TORRES DE HANÓI Elabore um procedimento recorrente que resolva o jogo das torres de Hanói. O jogo consiste em mudar uma torre com vários discos, dispostos por ordem descrescente de diâmetro, para uma outra torre, usando uma torre intermédia. A mudança de um disco de uma torre para a outra tem de ser feita sempre por ordem decrescente de diâmetro, isto é, um disco só pode ser mudado para uma torre vazia ou para cima de um outro disco com diâmetro maior (ver figura seguinte).

 TOP-DOWN HANOI 1. Se só houver um disco, muda-se da torre onde está para a torre de destino 2. Nos outros casos 2.1. Chamar o procedimento Hanoi, com menos um disco de altura e mudar o disco da origem para a torre intermédia 2.2. Escrever o registo da mudança efetuada 2.3. Chamar o procedimento Hanoi, com menos um disco de altura e mudar o disco da torre intermédia para a torre de destino 342

© FCA – Editora de Informática


Recorrência  PARÂMETROS Parâmetro Altura De Para Usando

Tipo int char char char

Significado Número de discos da torre inicial Designação da torre de origem Designação da torre de destino Designação da torre intermédia

 SUBALGORITMO HANOI(ALTURA, DE, PARA, USANDO) Se Altura=1 Então Escrever ("Mudar o disco", De, Para) Senão Hanoi(Altura-1, De, Usando, Para) Escrever ("Mudar o disco", De, Para); Hanoi(Altura-1, Usando, Para, De) FimSe

 SUBPROGRAMA HANOI public static void Hanoi(int Altura, char De, char Para, char Usando) {if (Altura==1) System.out.printf("Mudar o disco de %c para %c\n", De, Para); else {Hanoi(Altura-1, De, Usando, Para); System.out.printf("Mudar o disco de %c para %c\n", De, Para); Hanoi(Altura-1, Usando, Para, De);}

 INVOCAÇÃO DO SUBPROGRAMA public class RC24 {public static void Hanoi(int Altura, char De, char Para, char Usando) {if (Altura==1) System.out.printf("Mudar o disco de %c para %c\n", De, Para); else {Hanoi(Altura-1, De, Usando, Para); System.out.printf("Mudar o disco de %c para %c\n", De, Para); Hanoi(Altura-1, Usando, Para, De);}} public static void main(String[] args) {int Altura = 4; Hanoi(Altura, 'A', 'C', 'B');}} © FCA – Editora de Informática

343


Exercícios de Java: Algoritmia e Programação Estruturada  EXECUÇÃO Mudar Mudar Mudar Mudar Mudar Mudar Mudar Mudar Mudar Mudar Mudar Mudar Mudar Mudar Mudar

o o o o o o o o o o o o o o o

disco disco disco disco disco disco disco disco disco disco disco disco disco disco disco

de de de de de de de de de de de de de de de

A A B A C C A A B B C B A A B

para para para para para para para para para para para para para para para

B C C B A B B C C A A C B C C

? EXERCÍCIO 25: ORDENAÇÃO RÁPIDA Elabore um procedimento recorrente que ordene um vetor por ordem crescente. Aplique o método de ordenação rápida (quick sort). Por exemplo, a ordenação por ordem crescente de: Vetor={10, 90, 67, 45, 78, 32, 17, 89, 100, 108, 21} Consiste nas seguintes transformações, em que se sublinha o elemento inicial de cada chamada da função recorrente: 10 10 10 10 10 10 10 10 10 10 10 10

90 21 21 21 17 17 17 17 17 17 17 17

67 67 17 17 21 21 21 21 21 21 21 21

45 45 45 32 32 32 32 32 32 32 32 32

78 78 78 78 78 78 78 78 45 45 45 45

32 32 32 45 45 45 45 45 78 67 67 67

17 17 67 67 67 67 67 67 67 78 78 78

89 89 89 89 89 89 89 89 89 89 89 89

100 108 21 100 108 90 100 108 90 100 108 90 100 108 90 100 108 90 100 108 90 100 108 90 100 108 90 100 108 90 100 90 108 90 100 108

Vetor ordenado={10, 17, 21, 32, 45, 67, 78, 89, 90, 100, 108} 344

© FCA – Editora de Informática


Turn static files into dynamic content formats.

Create a flipbook
Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.