Ir ao conteúdo

Posts recomendados

Postado

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;
}
}

 

Postado

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
Postado

@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

Postado

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
Postado

@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 ...

Postado

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
Postado

@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

 

 

 

Postado

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

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...