aMeScAS Posted November 6, 2006 at 11:20 PM Report #62575 Posted November 6, 2006 at 11:20 PM 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.. 👍
TheDark Posted November 6, 2006 at 11:26 PM Report #62579 Posted November 6, 2006 at 11:26 PM 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.
Hipnoted Posted November 6, 2006 at 11:30 PM Report #62581 Posted November 6, 2006 at 11:30 PM 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"
TheDark Posted November 6, 2006 at 11:34 PM Report #62582 Posted November 6, 2006 at 11:34 PM É 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.
Rui Carlos Posted November 6, 2006 at 11:38 PM Report #62584 Posted November 6, 2006 at 11:38 PM 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. Rui Carlos Gonçalves
TheDark Posted November 6, 2006 at 11:48 PM Report #62587 Posted November 6, 2006 at 11:48 PM 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.
aMeScAS Posted November 6, 2006 at 11:50 PM Author Report #62588 Posted November 6, 2006 at 11:50 PM 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 👍
Rui Carlos Posted November 7, 2006 at 12:16 AM Report #62593 Posted November 7, 2006 at 12:16 AM 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; } } Rui Carlos Gonçalves
aMeScAS Posted November 7, 2006 at 12:48 AM Author Report #62596 Posted November 7, 2006 at 12:48 AM 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 😄
TheDark Posted November 7, 2006 at 01:15 AM Report #62600 Posted November 7, 2006 at 01:15 AM 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.
aMeScAS Posted November 7, 2006 at 01:27 AM Author Report #62603 Posted November 7, 2006 at 01:27 AM 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 👍
TheDark Posted November 7, 2006 at 02:26 AM Report #62605 Posted November 7, 2006 at 02:26 AM .. 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.
aMeScAS Posted November 7, 2006 at 12:28 PM Author Report #62641 Posted November 7, 2006 at 12:28 PM 😄🙂 :) ja está a funcionar perfeitamente... obrigado pela ajuda! 👍
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now