-
Notifications
You must be signed in to change notification settings - Fork 0
/
Código
329 lines (286 loc) · 10.8 KB
/
Código
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
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
algoritmo embaralhadorCesar;
// Síntese
// Objetivo: Receber uma ou mais palavras ou frases, cifrá-las seguindo a cifra de Cesar e embraralhar esse conjunto de palavras seguido uma certa chave;
// Entrada : Palavras que serão cifradas e embraralhadas;
// Saída : Escrever o código resutante dessa cifra se os procedimentos estiverem corretos ou dar uma mensagem de erro se tiver incorreto;
principal
// Declarações
// 1) Declarar todas as variavies que serão usadas no codigo;
texto palavras[20], palacif[20], opcoes, opcoesM, codigo, repalavras[20], frase;
inteiro salto, chaveemb, i, j, qtdPalavras, vetLetras[20], fim1, qtdLetras, regular, tamanhoPalavra, caracterNumero, letranum, pose;
logico controle, controleFra;
caracter fim, numeroCaracter, letra;
// Instruções
// 2)Criar um loop para ficar repetindo a sequencia de informações;
controle = verdadeiro;
faca
//2.1) Inicio do codigo, boas vindas!;
escreval("-----> Bem vindo(a) ao embaralhador de Cesar! <-----");
escreval("--> Você deseja codificar ou decodificar uma palavras?");
escreva("=> ");
leia(opcoes);
escreval("");
opcoesM = maiusculo(opcoes);
//2.2)estrutura de comparação de codificar ou decodificar;
se(comparaTexto(opcoesM, "CODIFICAR") == 0)entao
escreval("--> Para começar, digite a quantidade de palavras que serão digitadas!");
escreval("-> DIgite um valor inferior a 20");
escreva("=> ");
leia(qtdPalavras);
escreval("");
// 2.2.1)Se codificar, determinar se a quantidade de palavras é igual ou inferior a 20;
se(qtdPalavras <= 20) entao
//2.2.1.1) Ler o salto da Cifra de Cesar;
se(qtdPalavras > 0)entao
escreval("--> Agora, digite o salto da cifra de Cesar que será usada!");
escreva("=> ");
leia(salto);
escreval("");
//2.2.1.1.1)Ler a frase a ser cifrada;
se(salto > 0)entao
escreval("--> Por fim, digite a frase a ser cifrada.");
escreval("->ATENÇÃO: Pela falta de acentos e caracteres especiais na tabela Ascii, não digite letras com acentos ou caracteres especiais como o (ç)");
escreva("=> ");
leia(frase);
escreval("");
//2.2.1.1.1.1)Estrutura de repetição para criar os vetores e inserir as palavras nos mesmos;
qtdLetras = tamanhoTexto(frase);
pose = 0;
para(i de 0 ate qtdPalavras - 1 passo 1) faca
palavras[i] = "";
controleFra = verdadeiro;
enquanto(controleFra == verdadeiro e pose < qtdLetras) faca
letranum = caracterAscii(caracterTexto(frase, pose));
se(letranum == 32)entao
controleFra = falso;
pose = pose + 1;
senao
letra = asciiCaracter(letranum);
palavras[i] = palavras[i] + letra;
pose = pose + 1;
fimSe
fimEnquanto
fimPara
//2.2.1.1.1.2)Orientação das palavras codificadas na cifra de cesar
para(i de 0 ate qtdPalavras-1 passo 1) faca
palacif[i] = cifraCesar(palavras[i], salto);
vetLetras[i] = tamanhoTexto(palacif[i]);
fimPara
//2.2.1.1.1.3) Resultado da codificação
escreval("--> O código é:");
escreval("->", anagrama(palacif, vetLetras, qtdPalavras));
escreval("");
//2.2.1.1.1.4) Fim da codificação perguntnado se deseja continuar codificando e determinando respostas invalidas
fim1 = 0;
enquanto(fim1 != 83 e fim1 != 78) faca
escreval("--> VOCÊ CONTINUAR USANDO O EMBARALHADOR DE CESAR?");
escreval("(Digite S para CONTINUAR ou N para SAIR)");
escreva("=> ");
leiaCaracter(fim);
escreval("");
fim1 = caracterAscii(maiusculoCaracter(fim));
se(fim1 == 83) entao
controle = verdadeiro;
senao
se(fim1 == 78) entao
controle = falso;
senao
escreval("-> Resposta Inválida");
escreval("");
fimSe
fimSe
fimEnquanto
//2.2.1.1.2) Caso a estrutura anterior saia do padrão, valor da resposta incorreto;
senao
escreval("-> Procedimento Invalido, digite uma chave maior que 0");
escreval("");
fimSe
//2.2.1.2) Caso a estrutura anterior saia do padrão, valor da resposta incorreto;
senao
escreval("-> Quantidade invalida, digite um valor igual ou inferior a 20!");
escreval("");
fimSe
//2.2.2) Caso a estrutura anterior saia do padrão, valor da resposta incorreto;
senao
escreval("-> Procedimento Invalido, digite uma chave maior que 0");
escreval("");
fimSe
//2.3) Caso o usuário deseje decodificar alguma palavra;
senao
//2.3.1)Determinação das variáveis decodificadoras.
se(comparaTexto(opcoesM, "DECODIFICAR") == 0)entao
escreval("--> Digite a quantidade de palavras que serão decifradas:");
escreva("=> ");
leia(qtdPalavras);
escreval("");
escreval("--> Agora, digite o salto da cifra de Cesar:");
escreva("=> ");
leia(salto);
escreval("");
escreval("Digite a palavra que você deseja descriptografar:");
escreva("=> ");
leia(codigo);
escreval("");
//2.3.2)Determinação dos vetores;
qtdLetras = tamanhoTexto(codigo);
regular = 0;
para(i de 0 ate qtdPalavras - 1 passo 1) faca
repalavras[i] = "";
palacif[i] = "";
fimPara
//2.3.3)Orientação das palavras em espaços do vetor;
faca
para(i de 0 ate qtdPalavras-1 passo 1) faca
repalavras[i] = repalavras[i] + caracterTexto(codigo, regular);
regular = regular + 1;
fimPara
enquanto(regular < qtdLetras);
//2.3.4)Retirada das | das palavras;
para(i de 0 ate qtdPalavras-1 passo 1) faca
regular = 0;
tamanhoPalavra = tamanhoTexto(repalavras[i]);
para(j de 0 ate tamanhoPalavra-1 passo 1) faca
caracterNumero = caracterAscii(caracterTexto(repalavras[i], regular));
se(caracterNumero != 124) entao
numeroCaracter = asciiCaracter(caracterNumero);
palacif[i] = palacif[i] + numeroCaracter;
fimSe
regular = regular + 1;
fimPara
fimPara
//2.3.5)Resultado da decodificação;
cesarDescif(palacif, salto, qtdPalavras);
escreval("");
//2.3.6)Fim da codificação perguntnado se deseja continuar codificando e determinando respostas invalidas;
fim1 = 0;
enquanto(fim1 != 83 e fim1 != 78) faca
escreval("VOCÊ DESEJA CONTINUAR USANDO O EMBARALHADOR DE CESAR?");
escreval("(Digite S para CONTINUAR ou N para SAIR)");
escreva("=> ");
leiaCaracter(fim);
escreval("");
fim1 = caracterAscii(maiusculoCaracter(fim));
se(fim1 == 83) entao
controle = verdadeiro;
senao
se(fim1 == 78) entao
controle = falso;
senao
escreval("-> Resposta Inválida");
escreval("");
fimSe
fimSe
fimEnquanto
//2.4)Se todas as estruturas anteriores forem falsas, resposta inválida.
senao
escreval("-> Opção invalida, digite Codificar se você quiser codificar um conjunto de palavras ou decodificar se quiser decodificar um conjunto de palavras");
escreval("");
fimSe
fimSe
enquanto(controle == verdadeiro);
fimPrincipal
//3)Função que cifra as palavras seguindo a cifra de Cesar;
funcao texto cifraCesar(texto palavra,inteiro chave1)
//Declarações
// 3.1) Declarar todas as variavies que serão usadas na Cifra de Cesar;
inteiro i, textoTam, embaralhar, tabelaAscii, restoSub;
texto carac, cript;
caracter carcinicial;
//Instruções
//3.2) Definir o valor inicial das variaveis;
carac = "";
textoTam = tamanhoTexto(palavra);
//3.3) Embaralhador da cifra de Cesar
para(i de 0 ate textoTam-1 passo 1) faca
carcinicial = caracterTexto(palavra, i);
tabelaAscii = caracterAscii(carcinicial);
embaralhar = tabelaAscii + chave1;
//3.3.1) se o valor for maior ou igual a 122 na tabela Ascii, o codigo subtrai a quantidade a quantidade de saltos já realizados e acrescenta no valor 33, valor inicial da tabela Ascii;
se(embaralhar > 122)entao
restoSub = embaralhar - 122;
embaralhar = 33 + restoSub;
fimSe
carac = carac + asciiCaracter(embaralhar);
fimPara
//3.4)Retorna a letra saltada;
retorna carac;
fimFuncao
//4)Função do anagrama;
funcao texto anagrama(texto palavrascif[], inteiro vetqtdLetras[], inteiro qtdPalavras)
//Declarações
//4.1) Declarar todas as variavies que serão usadas no anagrama;
texto textoresult;
inteiro i, j, qtdLetras, letras,regular, diferenca;
caracter caracterUnico;
//Intruções
//4.2) Definir o valor inicial das variaveis;
letras = tamanhoTexto(palavrascif[0]);
//4.3) Determinação da quantidade de letras em cada vetor;
para(i de 0 ate qtdPalavras-1 passo 1) faca
qtdLetras = tamanhoTexto(palavrascif[i]);
se(qtdLetras > letras)entao
letras = qtdLetras;
fimSe
fimPara
regular = 0;
textoresult = "";
//4.4) Inserção do caracter | em relação a quantidade de letras faltantes comparando a palavra com a maior palavra;
para(i de 0 ate qtdPalavras - 1 passo 1)faca
diferenca = letras - vetqtdLetras[i];
para(j de 0 ate diferenca - 1 passo 1) faca
palavrascif[i] = palavrascif[i] + asciiCaracter(124);
fimPara
fimPara
//4.5) Ordenação em uma unica palavra juntamente com o embaralhamento dos caracteres da palavra;
para(i de 0 ate letras-1 passo 1) faca
para(j de 0 ate qtdPalavras-1 passo 1) faca
textoresult = textoresult + caracterTexto(palavrascif[j], regular);
fimPara
regular = regular + 1;
fimPara
//4.6)a palavra cifrada;
retorna textoresult;
fimFuncao
//5) desembaralhador
procedimento cesarDescif(texto conjunto[], inteiro codigo, inteiro qtdPalavras)
//Declarações
//5.1) Declarar todas as variavies que serão usadas no desembaralhador;
inteiro i, j , embaralhar, tabelaAscii, textoTam, desembaralhar, palavrasTam[20], restoSub;
texto carac, palavra, descriptografado[20], frase;
caracter carcinicial, desembaralharCar;
//Instruções
//5.2) Definir o valor inicial das variaveis;
carac = "";
frase = "";
textoTam = 0;
para(i de 0 ate qtdPalavras - 1 passo 1) faca
descriptografado[i] = "";
palavrasTam[i] = 0;
fimPara
//5.3) Decodificador;
para(i de 0 ate qtdPalavras-1 passo 1) faca
palavrasTam[i] = tamanhoTexto(conjunto[i]);
palavra = conjunto[i];
//5.3.1) Recebida as palavras, hora de desembaralhar as letras em um vetor;
para(j de 0 ate palavrasTam[i]-1 passo 1) faca
carcinicial = caracterTexto(palavra, j);
tabelaAscii = caracterAscii(carcinicial);
desembaralhar = tabelaAscii - codigo;
se(desembaralhar < 33)entao
restoSub = 33 - desembaralhar;
desembaralhar = 122 - restoSub;
fimSe
desembaralharCar = asciiCaracter(desembaralhar);
descriptografado[i] = descriptografado[i] + desembaralharCar;
fimPara
//5.3.2) Ordenação das palavras em uma Frase;
se(i == qtdPalavras-1)entao
frase = frase + descriptografado[i];
senao
frase = frase + descriptografado[i] + " ";
fimSe
fimPara
//5.4) Retorno da frase descriptogradada;
escreval("--> A frase descriptografada é:");
escreval("=> ", frase);
fimProcedimento