Sou novato,então não sei como é formato da comunidade… Eu so queria uma ferramenta (ou onde procurar ) no java na qual posso armezanar um serie de numero em diferentes variaveis. A questão é do livro Deitel.
Pagina 118 Exercicio (fazendo a diferença) 4.38
O Exercico O crescimento explosivo das comunicações pela Internet e do armazenamento de dados nos computadores conectados à Internet aumentou muito a preocupação com a privacidade. O campo da criptografia trata da codificação de dados para torná-los difíceis (ou impossíveis, com os esquemas mais avançados) de serem lidos por usuários não autorizados. Nesse exercício, você investigará um esquema simples de codificação e decodificação de dados. Uma empresa que queira enviar dados pela Internet lhe pediu que escrevesse um programa que os codificasse para que pudessem ser transmitidos com mais segurança. Todos os dados são transmitidos como inteiros de quatro dígitos. Sua aplicação deverá ler um inteiro de quatro dígitos informado pelo usuário e codificá-lo da seguinte forma: substitua cada dígito pelo resultado da soma de 7 ao dígito e calcular o módulo depois de dividir o novo valor por 10. Depois, troque o primeiro dígito pelo terceiro e troque o segundo dígito pelo quarto. A seguir, imprima o inteiro codificado. Escreva outra aplicação que receba um inteiro de quatro dígitos codificado e o decodifique (invertendo o esquema de codificação) para formar o número original. [Projeto de leitura opcional: pesquise ‘criptografia de chave pública’ em geral e o esquema de chave pública PGP (Pretty Good Privacy) específico. Você também poderá querer investigar o esquema RSA, que é bastante usado em aplicações de peso industrial.
Qual edição do livro? O exercício é o “mil trezentos e trinta e um” mesmo? O número está correto? Não há nenhum ponto para separar o capítulo etc.?
Desculpe a falta de informação.
É o livro deitel edição 8 (como programar em java)
Pagina 118 Exercicio (fazendo a diferença) 4.38
o exercicio - O crescimento explosivo das comunicações pela Internet e do armazenamento de dados nos computadores conectados à Internet aumentou muito a preocupação com a privacidade. O campo da criptografia trata da codificação de dados para torná-los difíceis (ou impossíveis, com os esquemas mais avançados) de serem lidos por usuários não autorizados. Nesse exercício, você investigará um esquema simples de codificação e decodificação de dados. Uma empresa que queira enviar dados pela Internet lhe pediu que escrevesse um programa que os codificasse para que pudessem ser transmitidos com mais segurança. Todos os dados são transmitidos como inteiros de quatro dígitos. Sua aplicação deverá ler um inteiro de quatro dígitos informado pelo usuário e codificá-lo da seguinte forma: substitua cada dígito pelo resultado da soma de 7 ao dígito e calcular o módulo depois de dividir o novo valor por 10. Depois, troque o primeiro dígito pelo terceiro e troque o segundo dígito pelo quarto. A seguir, imprima o inteiro codificado. Escreva outra aplicação que receba um inteiro de quatro dígitos codificado e o decodifique (invertendo o esquema de codificação) para formar o número original. [Projeto de leitura opcional: pesquise ‘criptografia de chave pública’ em geral e o esquema de chave pública PGP (Pretty Good Privacy) específico. Você também poderá querer investigar o esquema RSA, que é bastante usado em aplicações de peso industrial.]
Legal. Seu problema é separar os dígitos. Os exercícios dos Deitel são ótimos e eles cobram o que vc viu nos capítulos. Só te faltou enxergar como resolver o que foi proposto com o que foi aprendido.
Imagina o número 3867. Vc quer separar 3, 8, 6 e 7, certo? Se você dividir 3867 por 1000, qual número vc obterá? Se vc dividir 867 por 100, qual número obterá? E se dividir 67 por 10, qual número obterá? Pegou a ideia? Falta um detalhe. Como vc obteria 867 a partir de 3867? Ou então, como vc obteria 67 a partir de 3867 ou mesmo 867? Lembra do operador de resto/módulo? 3867 % 1000 é igual a???
Tenta ai
Ah,obrigado por me dar uma direção não tinha pensado dessa maneira vou da relida nos capítulos anterior.
3867 % 1000 = 867. Assim posso separar-los
3867 % 1000 = 867
3867 % 100 = 67
3867 % 10 = 7
Desculpe de eu fazer outra pergunta, mas como possar juntar os valores codificado em uma unica String (ficou mais ou menos assim)
import java.util.Scanner;
public class Ex438 {
public static void main(String [] args ) {
Scanner inter = new Scanner(System.in);
System.out.println("Digite um inteiro com 4 numero ");
int number = inter.nextInt();
int mid0 = number / 1000;
float mid1 = (float) number%1000f;
int mid2 = (int) mid1/100;
float mid3 = (float) number%100f;
int mid4 = (int) mid3/10;
int mid5 = number%10;
float mid0new = (float) ((mid0 +7)%10f);
float mid2new = (float) ((mid2 +7)%10f);
float mid4new = (float) ((mid4 +7)%10f);
float mid5new = (float) ((mid5 +7)%10f);
// So para eu visualizar os numeros que estão sendo codificado.
System.out.println("-----------------------");
System.out.println(mid0new);
System.out.println(mid2new);
System.out.println(mid4new);
System.out.println(mid5new);
System.out.println("-----------------------");
// Fiz a troca dos valores do 1° com o 3° e o 2° com o 4°
int temp = (int) mid0new;
mid0new = mid4new;
mid4new = temp;
int temp1 = (int) mid2new;
mid2new = mid5new;
mid5new = temp1;
System.out.println(mid0new);
System.out.println(mid4new);
System.out.println(mid2new);
System.out.println(mid5new);
}
}
Pra que float?
int numero = 3867;
int milhar = numero / 1000; // milhar recebe 3
numero = numero % 1000; // numero recebe 867
int centena = numero / 100; // centena recebe 8
numero = numero % 100; // numero recebe 67
int dezena = numero / 10; // dezenha recebe 6
int unidade = numero % 10; // unidade recebe 7
Sobre sua dúvida:
String codificado = String.format( "%d%d%d%d", milhar, centena, dezena, unidade );
Uma solução para o problema seria essa aqui:
import java.util.Scanner;
public class Exercicio4p38 {
public static void main( String[] args ) {
Scanner scan = new Scanner( System.in );
System.out.println( "Entre com um inteiro de quatro digitos: " );
int numero = Integer.parseInt( scan.nextLine() );
int numeroCodificado = codificar( numero );
int numeroDecodificado = decodificar( numeroCodificado );
System.out.printf( "Número %d codificado = %d\n", numero, numeroCodificado );
System.out.printf( "Número %d decodificado = %d\n", numeroCodificado, numeroDecodificado );
scan.close();
}
private static int codificar( int numero ) {
int m = numero / 1000;
int c = numero % 1000 / 100;
int d = numero % 100 / 10;
int u = numero % 10;
m = ( m + 7 ) % 10;
c = ( c + 7 ) % 10;
d = ( d + 7 ) % 10;
u = ( u + 7 ) % 10;
return d * 1000 + u * 100 + m * 10 + c;
}
public static int decodificar( int numero ) {
int m = numero / 1000;
int c = numero % 1000 / 100;
int d = numero % 100 / 10;
int u = numero % 10;
m = ( m - 7 + 10 ) % 10;
c = ( c - 7 + 10 ) % 10;
d = ( d - 7 + 10 ) % 10;
u = ( u - 7 + 10 ) % 10;
return d * 1000 + u * 100 + m * 10 + c;
}
}
1 curtida
fico agradecido pelo tempo destinado ao meu problema e vou rever essa codigo para ver se eu aprendo.
Sobre a questão do float,quando esta fazendo ocorria erro de declaração.