Jump to content

[C++/CLI] Ajuda: Pesquisar num Array (Resolvido)


Recommended Posts

Posted

Meu primeiro post, e primeira vez a trabalhar em C++/CLI, e tenhu uma duvida...

Tenho o seguinte codigo:

	int Pesquisar(void)
	{
		Byte x;
		Console::WriteLine("Introduza o valor a pesquisar:");
		x=Byte::Parse(Console::ReadLine());
		for (Byte i=0; i<6; i++)
		{
			if (Notas[i]==x)
				Console::WriteLine("O valor {0} existe",x);

		}
		Console::WriteLine(" ");
		Console::WriteLine("Para voltar para o menu carregue no (ENTER)");
		Console::ReadLine();
		Console::Clear();
		Menu();
		return -1;

É usado um array (com 6 casas) para o programa... O objectivo é quando o utilizador introduzir um numero, mostre uma mensagem de confirmaçao a dizer que existe esse mesmo numero no array (apenas uma vez), e se nao existir, que mostre tambem apenas uma vez que nao existe o numero que o utilizador introduziu. O codigo acima funciona, mas mostra apenas se o valor introduzido existir, e repete a mensagem tantas vezes kuantas existe esse numero no array. Por ex. se existir 6 vezes esses numero, mostra a mensagem 6 vezes.

Espero ter sido explicito no que pretendo, e espero ajuda! Tkx in advance..  👍

Posted

Conheces a instrução break? Basta colocá-la dentro do if, depois de apresentares a mensagem, para fazer o que pretendes. Assim:

				if (Notas[i]==x) {
				Console::WriteLine("O valor {0} existe",x);
				break;
			}

Se não sabes, fica aqui uma breve explicação: O break serve para terminar o ciclo iterativo mais próximo do sítio onde é utilizado. Neste caso, vai terminar o for quando entrar no if, depois de escrever a mensagem a dizer que o valor foi encontrado.

Desaparecido.

Posted

Conheces a instrução break? Basta colocá-la dentro do if, depois de apresentares a mensagem, para fazer o que pretendes. Assim:

Não é por nada mas sempre ouvi dizer que usar o break é um mau método de programação, a não ser no caso do switch-case....

"Nunca discutas com um idiota. Eles arrastam-te até ao seu nível e depois ganham-te em experiência"

Posted

É a 1ª vez que oiço tal coisa... Se me falares em gotos, sim, é um péssimo método de programação. Mas não vejo onde possa estar o mal do break. Sempre o vi ser amplamente utilizado em todo o tipo de projectos, profissionais ou não.

Desaparecido.

Posted

desta forma basta olharmos para a instrução for para saber o que pode fazer o ciclo terminar. é por isso que algumas pessoas desaconselham o uso do break.

Isso já faz mais sentido.

Desaparecido.

Posted

Conheces a instrução break? Basta colocá-la dentro do if, depois de apresentares a mensagem, para fazer o que pretendes. Assim:

				if (Notas[i]==x) {
				Console::WriteLine("O valor {0} existe",x);
				break;
			}

Se não sabes, fica aqui uma breve explicação: O break serve para terminar o ciclo iterativo mais próximo do sítio onde é utilizado. Neste caso, vai terminar o for quando entrar no if, depois de escrever a mensagem a dizer que o valor foi encontrado.

Sim, ja conheço o break e até o utilizo (no mesmo programa) mas num switch, e ja exprimentei neste caso... acontece que me foi "quebrar" de tal maneira que depois nao mostra mensagem a dizer que encontra, nem mensagem a dizer que nao encontra...

em vez de colocar o 'break', eu colava uma flag que mudava de valor no if e adicionava a flag à condição de paragem do ciclo.

desta forma basta olharmos para a instrução for para saber o que pode fazer o ciclo terminar. é por isso que algumas pessoas desaconselham o uso do break.

Podias me dar umas "luzes" sobre esse tal de flag ?? tipo sintaxe, como aplicar neste caso, etc...

Thx 👍

Posted

Podias me dar umas "luzes" sobre esse tal de flag ?? tipo sintaxe, como aplicar neste caso, etc...

Thx 👍

for (Byte i=0,flag=true; i<6&&flag; i++)
{
  if (Notas[i]==x)
  {
    Console::WriteLine("O valor {0} existe",x);
    flag=false;
  }
}

Desculpa lá... exprimentei e funcionou perfeitamente.. so me falta introduzir a mensagem de erro, isto é, dizer ao utilizador que o valor nao existe. Sei que é basico, (ou tlv nao...) mas estou a atrofiar um cadito com isso.... Já agora, se nao fosse pedir muito, um simples explicaçao do flag , para poder compreender melhor...

Thz 😄

Posted

Experimentei agora o código que pus lá em cima e funcionou "perfeitamente".

	for (Byte i=0; i<6; i++)
{
	if (Notas[i]==x) {
		Console::WriteLine("O valor {0} existe",x);
		break;
	}

}

Mas para o que queres a seguir o melhor método é mesmo a flag.

Desaparecido.

Posted

yah, tb já vi que o flag é que "funka" bem...  😄 falta me memo saber é akilo que perguntei no post anterior....:

.. so me falta introduzir a mensagem de erro, isto é, dizer ao utilizador que o valor nao existe. Sei que é basico, (ou tlv nao...) mas estou a atrofiar um cadito com isso.... Já agora, se nao fosse pedir muito, um simples explicaçao do flag, para poder compreender melhor...

Thkz  👍

Posted

.. so me falta introduzir a mensagem de erro, isto é, dizer ao utilizador que o valor nao existe. Sei que é basico, (ou tlv nao...) mas estou a atrofiar um cadito com isso.... Já agora, se nao fosse pedir muito, um simples explicaçao do flag, para poder compreender melhor...

Para isso tens que declarar a flag antes do for, e testá-la depois do for: se estiver a true, é porque o valor não foi encontrado; se estiver a false é porque foi encontrado. Neste caso só te interessa testar se está a true, para dares a mensagem a dizer que o valor não foi encontrado. Vou alterar um pouco o código para escrever ambas as mensagens fora do for:

	bool flag=true;
for (Byte i=0; i<6 && flag; i++) {
	if (Notas[i]==x)
		flag=false;
	}
if (flag) Console::WriteLine("O valor {0} nao existe",x);
else Console::WriteLine("O valor {0} existe",x);

O conceito de flag é muito simples, não passa de uma variável que indica se o valor foi encontrado ou não. Quando estás a percorrer o array e encontras o valor pretendido, o valor da variável é colocado a false, fazendo falhar a condição do for e assim terminando-o. Neste caso, como vais utilizar a flag depois de terminar o for, para saber se o valor foi encontrado ou não, convém declará-la fora do ciclo.

Não sei se respondi à tua dúvida, acho que ando numa de divagar... :👍

Desaparecido.

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.