1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Saber se um numero ja existe num arreio

Discussão em 'Programação' iniciada por eduino, 23 de Fevereiro de 2007. (Respostas: 39; Visualizações: 3676)

  1. eduino

    eduino Power Member

    Boas ppl gostaria de saber se me poderiam ajudar com este problema!

    gostaria de saber como ficaria um codigo para o seguinte:

    Tenho que inserir um numero e depois tenho que verificar se esse numero ja existe ou nao no arreio!

    alguem pode-me ajudar nisto ?

    obrigado
     
  2. Feiticeiro

    Feiticeiro Power Member

    "Arreio" Talvez "array"?
    Convêm dizer em que linguagem de programação queres fazer isso, mas terás sempre que fazer um ciclo "for" para verificar se um determinado valor existe ou não num "array".
     
  3. HecKel

    HecKel The WORM

    Boas!

    Antes de mais, a inserção só deve ser feita após a verificação do array.

    Tens vários algoritmos possíveis e em quase todos eles terás de usar um ciclo for para percorrer o array.

    Olha o seguinte algoritmo, não é o mais eficaz certamente, mas também não é suposto fazer-te o trabalho, só ajudar-te :P

    Código:
    encontrado = falso
    Para todos os elementos do array faz
       Se valor_a_inserir = valor_na_posição_corrente então
          encontrado = verdadeiro
          interrompe o ciclo (escusa de verificar os restantes elementos)
    fim do Para
    Se encontrado = falso então
       Adiciona elemento ao array
    
    Isto é um pseudo-código demasiado aporteguesado :P Mas serve perfeitamente ;)

    Estuda este algoritmo, tenta aplicá-lo. Certamente existem soluções melhores, esta foi a que me ocorreu neste momento ;)

    abraços, HecKel
     
  4. walterwolf

    walterwolf Power Member


    traduzindo para C fica:

    Código:
     
    ...
    encontrado=0;
    for(i=0;i<contador;i++)
    {
    if(numero==array[i])
    {
     
    encontrado=1;
    i=contador;
    }
     
    }
     
    if(encontrado==1)
    printf("\tnumero ja existe\n");
    else
    {
    a[contador]=numero;
    contador++;
    }
    ...
     
    descriçao:
     
    -encontrado: é uma variavel do tipo inteiro que toma os valores 0 se o numero nao for encontrado e 1 se o numero for encontrado;
     
    -numero: é o numero que queres procurar;
     
    -contador: é o numero de posiçoes ocupadas no array;
    
    qualque coisa apita...:007:
     
  5. HecKel

    HecKel The WORM

    dava jeito fazeres um break (não me recordo se é esta a expressão em C) nesse for quando metes o encontrado = 1, apesar de colocando o i igual ao limite do for resultar..., não gosto é mt de alterar o incrementador :P

    abraços, HecKel
     
  6. walterwolf

    walterwolf Power Member

    nunca usei break dentro do for, so usei break depois de um case, mas vou esperimentar para ver o k acontece
    :)
     
  7. JuSt_Me_AnD_yOu

    JuSt_Me_AnD_yOu What is folding?

    Código:
    for(int i=0; i< tam; i++)
    {
    	if (numero == array[i])
    	{
    		cout << "encontrado";
    		break;
    	}
    }
    isto em C++
    tam é o tamanho do array
    numero é o numero que queres procurar no array.
     
  8. HecKel

    HecKel The WORM

    JuSt_Me_AnD_yOu, de facto dessa forma mostras se foi ou não encontrado, no entanto caso não seja encontrado falta-te algo para controlar a inserção do novo elemento no array, dessa forma nunca consegues (o programa) saber se foi encontrado ou não repetição. Besides, falta a segunda parte do programa ;)

    abraços, HecKel
     
  9. JuSt_Me_AnD_yOu

    JuSt_Me_AnD_yOu What is folding?

    ups nao li o topico do rapaz td...
     
  10. MadOnion

    MadOnion Folding Member

    Já agora em java:

    PHP:
    public boolean existeNum(int[] vectorint num) {
       
    boolean existe false;
       
    int contador 0;

       while ( (
    contador vector.length) && !existe) {
           if (
    vector[contador] == num)
              
    existe true;
           
    contador++;
       }

    return 
    existe;
    }
    Não precisa de breaks, e sai do ciclo mal o valor exista, excusando de correr o vector todo, por causa da expressão boolean !existe.
    deve funcionar, digo eu :)
     
    Última edição: 2 de Março de 2007
  11. walterwolf

    walterwolf Power Member

    atao moço, nao dizes nada das sujestoes que te deram?
     
  12. Em PHP existe a função in_array(), não é preciso andar a criar a RODA.
     
  13. MadOnion

    MadOnion Folding Member

    Ele não disse qual era a linguagem, apresentei uma solução numa linguagem diferente tal como os demais fizeram.
     
  14. Filipe_O

    Filipe_O Power Member

    Buenax

    Se queres em pascal:
    pedes o numero
    fazes um "para" da "variavel inicial" do aray até a "variavel final"
    depois fazes um "se" nome do array='letra' entao
    Escreves o que quiseres, em caso de existir, por exemplo:"writeln('o numero existe no array')"
    E um "else" para a hipotse negativa.

    Entendes?Fika Bem

    Cump Filipe
     
  15. eduino

    eduino Power Member

    serviu :P

    obrigado a todos

    5 estrelas
     
  16. tool

    tool Power Member

    e se resolvessemos este problema em cada uma das linguagens?
    sei que cada um saberá mais que uma linguagem.
    será muito interessante para alguém que queira aprender uma linguagem ver como funciona, neste exemplo por exemplo.
    tentem é não repetir a linguagem!

    Em scheme:

    Código:
    (define (verifica-el vector el)
      (define (percorre-auxiliar vector el posicao)
        (cond ((= posicao (- (vector-length vector) 1)) #f)
              ((= el (vector-ref vector posicao)) #t)
              (else (percorre-auxiliar vector el (+ posicao 1)))))
      (percorre-auxiliar vector el 0))
     
    Última edição: 2 de Janeiro de 2008
  17. OubeLa

    OubeLa Power Member

    Ui, Scheme :lol:

    Em C++ é bastante facil de fazer, tal como exemplificaram em cima. E penso que não é preciso colocar qualquer break.
     
  18. legerdemain

    legerdemain Power Member

    Código:
    :-use_module(library(lists)).
    
    % X = elemento a inserir; L = lista actual; NL = nova lista
    insert_new(X,L,NL):-doesnt_exist(X,L),append(L,[X],NL).
    doesnt_exist(_,[]).
    doesnt_exist(X,[H|SL]):-X\=H,doesnt_exist(X,SL).
    
    só naquela..


    a utilização do break visa a optimização do código
     
    Última edição: 2 de Janeiro de 2008
  19. Excesso

    Excesso Power Member

    Que tal usarem ciclo while em vez de for? Assim n precisam de break pra nada :)
     
  20. legerdemain

    legerdemain Power Member

    o cebola louca já usou
     

Partilhar esta Página