-
Notifications
You must be signed in to change notification settings - Fork 0
/
Semana5.java
181 lines (148 loc) · 4.66 KB
/
Semana5.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
public class Semana5{
//Trabalho prévio A
//criar um vector de tamanho n preenchido com determinado carácter
static char[] charVector(char c, int n) {
char[] v = new char[n];
for(int i = 0; i < n; i++)
v[i] = c;
return v;
}
//Trabalho prévio B
//definir um procedimento para preencher todo o vector com determinado
//carácter
static void fill(char c, char[] v){
for(int i = 0; i < v.length; i++)
v[i] = c;
}
//Trabalho prévio C
//Definir um procedimento para substituir todas as ocorręncias de
//determinado carácter por outro.
static void replace(char a, char b, char[] v){
for(int i = 0; i < v.length; i++)
if (v[i] == a)
v[i] = b;
}
//Exercício A
//Defina uma funçăo para criar um vector com os caracteres consecutivos
//a partir de um carácter dado como argumento, de comprimento n.
static char[] sequence(char c, int n){
char[] v = new char[n];
for (int i = 0; i < n; i++)
v[i] = (char)(c + i);
return v;
}
//Exercício B
//Defina procedimentos sobre vetores que permitam:
//Substituir a primeira ocorręncia de determinado carácter por outro
static void replaceFirstAwithB(char a, char b, char[] v){
for(int i = 0; i < v.length; i++)
if (v[i] == a){
v[i] = b;
return;
}
}
//Substituir a última ocorręncia de determinado carácter por outro
static void replaceLastAwithB(char a, char b, char[] v){
for(int i = v.length - 1; i >= 0; i--)
if (v[i] == a){
v[i] = b;
return;
}
}
//Rodar os seus elementos para a esquerda (o primeiro elemento
//passa a último)
static void shiftLeft(char[] v){
char tmp = v[0];
for (int i = 0; i < v.length - 1; i++)
v[i] = v[i + 1];
v[v.length - 1] = tmp;
}
//Rodar os seus elementos para a direita (o último elemento passa
//a primeiro)
static void shiftRight(char[] v){
char tmp = v[v.length - 1];
for (int i = v.length - 1; i > 0; i--)
v[i] = v[i - 1];
v[0] = tmp;
}
//Trocar os valores de duas posiçőes do vector
static void swap(int a, int b, char[] v){
char tmp = v[a];
v[a] = v[b];
v[b] = tmp;
}
//Inverter a ordem dos seus elementos
static void invert(char[] v){
for (int i = 0; i < v.length / 2; i++)
swap(i, v.length - 1 - i, v);
}
//Exercício C
//Algoritmo de baralhaçăo. Implemente um procedimento de baralhaçăo
//para vectores de carateres com o algoritmo de Fisher-Yates. Neste
//contexto é útil definir uma funçăo auxiliar para obter um número
//inteiro aleatório entre zero e um dado número máximo (inclusive),
//bem como a utilizaçăo do procedimento definido anteriormente que
//troca duas posiçőes do vetor.
static int randomIndex(int n){
return (int)(Math.random() * (n + 1));
}
static void FisherYates(char[] v){
for (int i = v.length - 1; i > 0; i--)
swap(i, randomIndex(v.length - 1), v);
}
//Exercício D
//Algoritmo de ordenaçăo. Implemente um procedimento de ordenaçăo
//(crescente) para vectores de carateres, através do algoritmo Bubble Sort.
static void bubble(char[] v){
boolean swapped;
do{
swapped = false;
for (int i = 0; i < v.length - 1; i++){
if (v[i] > v[i + 1]){
swap(i, i + 1, v);
swapped = true;
}
}
}while(swapped);
}
//Exercícios extra // A // a
//Definir função que permita acrescentar um carácter ao final de um vector
//de caracteres, obtendo um vector novo.
static char[] concatEnd(char[] v, char c){
char[] res = new char[v.length + 1];
for (int i = 0; i < v.length; i++)
res[i] = v[i];
res[res.length - 1] = c;
return res;
}
//Exercícios extra // A // b
//Acrescentar um carácter no início de um vector de caracteres, obtendo um
//vector novo
static char[] concatBegin(char[] v, char c){
char[] res = new char[v.length + 1];
res[0] = c;
for (int i = 0; i < v.length; i++)
res[i + 1] = v[i];
return res;
}
//Exercícios extra // B
//Defina um procedimento que substitui o valor de uma posição aleatória do
//vector por um dado carácter c.
static void replaceRandom(char a, char[] v){
v[(int)(Math.random() * v.length)] = a;
}
//Exercícios extra // C
//Defina um procedimento que "troca as metades" de um vector de caracteres.
static void swapHalfs(char[] v){
for (int i = 0; i < v.length / 2; i++)
swap(i, v.length / 2 + i + v.length % 2, v);
}
public static void main(String[] args){
char[] vec1 = {'a', 'b', 'c', 'd', 'e'};
char[] vec2 = {'a', 'z', 'b', 'c', 'x', 'd', 'e', 'm'};
char[] vec3 = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i'};
System.out.println(vec3);
swapHalfs(vec3);
System.out.println(vec3);
}
}