• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

aMeScAS

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

13 mensagens neste tópico

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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 :thumbsup:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

Thx :thumbsup:

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

Thx :thumbsup:

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 :D

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

yah, tb já vi que o flag é que "funka" bem...  :D 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  :thumbsup:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora