Ir ao conteúdo
  • Cadastre-se

C++ Cifre e decifre sequência 4 números


BrunoPro10

Posts recomendados

Boas pessoal este foi o novo exercicio em C++ ajudem-me da forma mais simples possivel

O exercicio é Cifre e decifre numa sequencia de 4 dígitos

 

Menu

[1] Cifrar numero

[2]Decifrar numero

[999] Sair do Programa

Supostamente é para usar vectores. E por exemplo a ideia é digitar o numero por exemplo 1765 e fazer  [1] o cfirar pode ser 7651 e este valor seja guardado para ser decifrado por [2] eu estsava a fazer desta forma mas dizem que está mal...

#include <iostream>
#include <locale>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
using namespace std;

int main() 
{
	setlocale(LC_ALL, "Portuguese");
  system ("color 1B");
  int n, i, num[4], cifra[4], decifra[4], op;
  srand(time(NULL));
    
 cout << "--------------Menu----------------\n\n";
  cout << "*************ESCOLHA UMA OPÇÃO**************\n";
  cout << "[1] CIFRAR NÚMERO\n";
  cout << "[2] DECIFRAR NÚMERO\n";
  cout << "[999] SAIR DO PROGRAMA\n";
  cout << "Opção? » "; 
  cin >> op;
  
   switch(op)
  {
  
  	case 1: 
		for ( int i =0; i <4; i++){
			cout <<"Insira o  digitos : ";
			cin >> num[i];
		}
		for (int i=0; i=4;i++){
			cifra[i]= rand () %9;
		}
			
		cout << "Cifra é  " << cifra[0] << cifra[1] << cifra[2] << cifra [3] << "\n";
	break;
		
	case 2: 
	 for( int i=0; i<4;i++){
	 	cout << "Insira o digito";
	 	cin>> num[i];
	 	
	 }
	for (int i=0 ; i<4; i++){
		decifra[i]= rand () %9;
		
		cout << " Decifra é " << decifra[3] <<decifra [2] << decifra[1] <<decifra[0]<< "\n";
	}
	break;
	case 999:
		
		return 0;
	break;
}
}

 

Link para o comentário
Compartilhar em outros sites

Sua cifragem / decifragem são aleatórias - não tem relação nenhum com os números digitados. Se eu digitar o mesmo número, posso ter vários resultados diferentes. Além disso, fica impossível decifrar.

Um modo simples de cifrar seria descolar os números duas casas. Pra decifrar faça a mesma coisa:

#include <iostream>
#include <locale>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
using namespace std;

int main() 
{
	setlocale(LC_ALL, "Portuguese");
  system ("color 1B");
  int n, i, num[4], cifra[4], decifra[4], op;
  srand(time(NULL));
    
 cout << "--------------Menu----------------\n\n";
  cout << "*************ESCOLHA UMA OPÇÃO**************\n";
  cout << "[1] CIFRAR NÚMERO\n";
  cout << "[2] DECIFRAR NÚMERO\n";
  cout << "[999] SAIR DO PROGRAMA\n";
  cout << "Opção? » "; 
  cin >> op;
  
   switch(op)
  {
  
  	case 1: 
		for ( int i =0; i <4; i++){
			cout <<"Insira o  digitos : ";
			cin >> num[i];
		}
		for (int i=0; i<4;i++){
			cifra[(i+2) % 4]= num[i];
		}
			
		cout << "Cifra é  " << cifra[0] << cifra[1] << cifra[2] << cifra [3] << "\n";
	break;
		
	case 2: 
	 for( int i=0; i<4;i++){
	 	cout << "Insira o digito";
	 	cin>> num[i];
	 	
	 }
	for (int i=0 ; i<4; i++){
		decifra[i]= num[(i+2) % 4];
	}		
		cout << " Decifra é " << decifra[0] <<decifra [1] << decifra[2] <<decifra[3]<< "\n";

	break;
	case 999:
		
		return 0;
	break;
}
}

Outra coisa é que você tem que limitar os números digitados para serem sempre menores que 10.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

@Flávio Pedroza Obrigado Flávio, mas como eu faço para no case 1 quando der a cifra, ele passe para o case 2 e não saía do menu?

 

Ou seja, quando o cout << "Cifra é " << cifra[0] << cifra[1] << cifra[2] << cifra [3] << "\n";

 

dê para gravar este cout e seja utilizado para decifrar? e vice e versa?

 

Obrigado mesmo

Link para o comentário
Compartilhar em outros sites

Faz um laço infinito no começo:

 while (1)
 {//comeco do laco
   cout << "--------------Menu----------------\n\n";
  cout << "*************ESCOLHA UMA OPÇÃO**************\n";
  cout << "[1] CIFRAR NÚMERO\n";
  cout << "[2] DECIFRAR NÚMERO\n";
  cout << "[999] SAIR DO PROGRAMA\n";
  cout << "Opção? » "; 
   cin >> op;
   switch(op)
(...)
   case 999:
		
		return 0;
	break;
}
}//fim do laco
}

E na hora de decifrar:

case 2: 
	 
	for (int i=0 ; i<4; i++){
		decifra[i]= cifra[(i+2) % 4];
	}		
		cout << " Decifra é " << decifra[0] <<decifra [1] << decifra[2] <<decifra[3]<< "\n";

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

@Flávio Pedrozadevo estar a fazer algo de errado :(... Pois se abrir while ao inicio mal dá a cifra aparece logo para escolher de novo o menu 1, e ao colocar novo whule no case 2 não aconteceu nada..

 

A ideia é escolher [1] e digitar o número 2345 a cifra é 4523.. E então a ideia é dar outro enter e aparecer Decifra 2345

se escolher [2] fazer o oposto ...

Link para o comentário
Compartilhar em outros sites

Não sei se entendi muito bem, mas veja se está e a solução que procura:

#include <iostream>
#include <locale>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
using namespace std;

int main() 
{
	setlocale(LC_ALL, "Portuguese");
  system ("color 1B");
  int n, i, num[4], cifra[4], decifra[4], op;
  srand(time(NULL));
while (1)    
{
 cout << "--------------Menu----------------\n\n";
  cout << "*************ESCOLHA UMA OPÇÃO**************\n";
  cout << "[1] CIFRAR NÚMERO\n";
  cout << "[2] DECIFRAR NÚMERO\n";
  cout << "[999] SAIR DO PROGRAMA\n";
  cout << "Opção? » "; 
  cin >> op;
  
   switch(op)
  {
  
  	case 1: 
		for ( int i =0; i <4; i++){
			cout <<"Insira o  digitos : ";
			cin >> num[i];
		}
		for (int i=0; i<4;i++){
			cifra[(i+2) % 4]= num[i];
		}
			
		cout << "Cifra é  " << cifra[0] << cifra[1] << cifra[2] << cifra [3] << "\n";
		for (int i=0 ; i<4; i++){
		  decifra[i]= cifra[(i+2) % 4];
	    }		
		cout << " Decifra é " << decifra[0] <<decifra [1] << decifra[2] <<decifra[3]<< "\n";
	break;
		
	case 2: 
	 for( int i=0; i<4;i++){
	 	cout << "Insira o digito";
	 	cin>> num[i];
	 	
	 }
	for (int i=0 ; i<4; i++){
		decifra[i]= num[(i+2) % 4];
	}		
		cout << " Decifra é " << decifra[0] <<decifra [1] << decifra[2] <<decifra[3]<< "\n";
		for (int i=0 ; i<4; i++){
		  cifra[i]= decifra[(i+2) % 4];
	    }		
		cout << " Cifra é " << cifra[0] <<cifra [1] << cifra[2] <<cifra[3]<< "\n";

	break;
	case 999:
		
		return 0;
	break;
}
}
}

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

@Flávio Pedroza peço desculpa pelo trabalho que lhe estou a dar, e por não explicar de forma correcta, mas pelo que percebi não é assim que ele quer.

 

Ou seja ele querMenu   1 Cifra 2 Decifra 999 Sair

escolhemos a  opção 1

insira o digito 4

insira o digito 5

insira o digito 6

insira o digito 7

Cifra 5745

e aqui ele pretende que se escolha oção 2 decifra

 mas que não se insira números mas sim que ele use o valor da cifra para dar o decifra.

Bem como se o inicio for opção 2  omesmo processo

 

Não sei se assim fiz entender...

 

Obrigado

 

 

 

Link para o comentário
Compartilhar em outros sites

Muito Obrigado Flávio pela preciosa ajuda já consegui colocar o programa como pretendia colocar a funcionar.

#include <iostream>
#include <locale>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
using namespace std;

int main() 
{
	setlocale(LC_ALL, "Portuguese");
  system ("color 1B");
  int n, i, num[4], cifra[4], decifra[4], op,o,p;
  srand(time(NULL));
while (1)    
{
 cout << "--------------Menu----------------\n\n";
  cout << "*************ESCOLHA UMA OPÇÃO**************\n";
  cout << "[1] CIFRAR NÚMERO\n";
  cout << "[2] DECIFRAR NÚMERO\n";
  cout << "[999] SAIR DO PROGRAMA\n";
  cout << "Opção? » "; 
  cin >> op;
  
   switch(op)
  {
  
  	case 1: 
		for ( int i =0; i <4; i++){
			cout <<"Insira 4  digitos a vez : ";
			cin >> num[i];
		}
		for (int i=0; i<4;i++){
			cifra[(i+2) % 4]= num[i];
		}
			
		cout << "Cifra é  " << cifra[0] << cifra[1] << cifra[2] << cifra [3] << "\n";
		for (int i=0 ; i<4; i++){
		  decifra[i]= cifra[(i+2) % 4];
	    }	
		cout << "Pretende fazer a DECIFRA do código insira [2], pretende SAIR digite [999] :";
		cin >> op;
		switch(op){
		
	case 2:
			
		cout << " Decifra é " << decifra[0] <<decifra [1] << decifra[2] <<decifra[3]<< "\n";
		break;
		case 999:
			return 0;
			break;
		}
	break;
		
	case 2: 
	 for( int i=0; i<4;i++){
	 	cout << "Insira 4 digitos a vez : ";
	 	cin>> num[i];
	 	
	 }
	for (int i=0 ; i<4; i++){
		decifra[i]= num[(i+2) % 4];
	}		
		cout << " Decifra é " << decifra[0] <<decifra [1] << decifra[2] <<decifra[3]<< "\n";
		
		cout << "Pretende fazer a CIFRA do código insira [1], pretende SAIR insira [999] :";
		cin >> op;
		switch (op){
		case 1:
		for (int i=0 ; i<4; i++){
		  cifra[i]= decifra[(i+2) % 4];
	    }		
		cout << " Cifra é " << cifra[0] <<cifra [1] << cifra[2] <<cifra[3]<< "\n";
		case 999:
			return 0;
			break;
		}

	break;
	case 999:
		
		return 0;
	break;
}
}
}

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!