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

Chuckytah

[Ajuda] Detectar a posição dum elemento num vectores

28 mensagens neste tópico

Boa noite! :)

Olá, já comecei a dar vectores  :D lol mas já me deparo com uma duvida... como faço um algoritmo que após a introdução dos n elementos do vector, me corra esses elementos e que após introduzido o valor x ele me diga em que posição se encontra no vector.

é algo assim deste género?:

Algoritmo "ex_vector"

1.[Declaração de variaveis]
vector[1..10] : numerico inteiro
i, x : numericos inteiros

2.[inicialização das variaveis]
x<-0
Para i<-1 ate 10 fazer
        vector[i]<-0
FimPara.

3.[Leitura da variavel x]
Escrever('Introduza um número:')
Ler(x)

4.[Calculo e impressão]
Para i<-1 ate 10 fazer
       Se vector[i]=x então 
                 Escrever ('0 valor',x,'encontrava-se na',i,'ªposição')
       FimSe
FimPara

5.[Terminar]
Sair.

Gostava de saber o que tenho mal,lol e o k n preciso de modificar.Muito obrigada. :thumbsup:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Pareceu-me tudo correcto, porque dizes que esta mal?

EDIT:

Será que te esqueceste de colocar os "[]" no vector ? Tipo:

2.[inicialização das variaveis]
x<-0
Para i<-1 ate 10 fazer
        vector<-0
FimPara.

Não deverias ter em vez de teres só "vector", deverias ter "vector[ i ] "

e aqui também:

4.[Calculo e impressão]
Para i<-1 ate 10 fazer
       Se vector=x então
                 Escrever ('0 valor',x,'encontrava-se na',i,'ªposição')
       FimSe
FimPara

Será que  é isto?

Cumps

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Alem do que o Nugun respondeu (de facto deveria ser vector(i) (ou vector[ i ], dependendo da notação)) tens um outro problema.

Repara, tu estás a ler o valor para a variável X, percorres todo o vector à procura desse valor (como o vector está todo a zero, não encontras), e paras.

Ou seja, tu vais estar sempre a procurar um número num vector só com 0s.

Não quererás adicionar dois passos?

1º: Colocar tudo dentro de um grande ciclo. Desde a leitura, até à pesquisa, de modo a poderes ler e pesquisar mais do que um valor.

2º: Caso o valor não tenha sido encontrado, adiciona-lo na primeira posição livre do vector.

Se for isto que pretendes, faz as alterações que dissemos e diz que nós ajudamos no que for possível.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Pareceu-me tudo correcto, porque dizes que esta mal?

EDIT:

Será que te esqueceste de colocar os "[]" no vector ? Tipo:

2.[inicialização das variaveis]
x<-0
Para i<-1 ate 10 fazer
        vector<-0
FimPara.

Não deverias ter em vez de teres só "vector", deverias ter "vector[ i ] "

e aqui também:

4.[Calculo e impressão]
Para i<-1 ate 10 fazer
       Se vector=x então
                 Escrever ('0 valor',x,'encontrava-se na',i,'ªposição')
       FimSe
FimPara

Será que  é isto?

Cumps

sim, lol esqueci-me lol foi mesmo distracção eu sei que tem de ter :thumbsup: obrigada

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Algoritmo "ex_vector"

1.[Declaração de variaveis]
vector[1..10] : numerico inteiro
i, x : numericos inteiros

2.[inicialização das variaveis]
x<-0
Para i<-1 ate 10 fazer
        vector[i]<-0
FimPara.

3.[Leitura da variavel x]
Escrever('Introduza um número:')
Ler(x)

4.[Calculo e impressão]
Para i<-1 ate 10 fazer
Inicio
       Escrever('Insira um valor:')
       Ler (vector[i])
       Se vector[i]=x então 
                 Escrever ('0 valor',x,'encontrava-se na',i,'ªposição')
       FimSe
FimPara

5.[Terminar]

Sair.

bem é assim, axo eu. Pois, lol à bocado todas os indices do vector corrrespondiam a elementos com o nr 0, pois, mas o objectivo é introduxir valores para cada indice e depois ver s algum é igual a x. então age ta correcto n é? ^^

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

:S ? não entendo porque não fica vector... eu escrevi mas n ficou :S

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Algoritmo "ex_vector"

1.[Declaração de variaveis]

vector[1..10] : numerico inteiro

i, x : numericos inteiros

2.[inicialização das variaveis]

x<-0

Para i<-1 ate 10 fazer

        vector [ i ] <-0

FimPara.

3.[Leitura da variavel x]

Escrever('Introduza um número:')

Ler(x)

4.[Calculo e impressão]

Para i<-1 ate 10 fazer

Inicio

      Escrever('Insira um valor:')

      Ler (vector [ i ] )

      Se vector [ i ] =x então

                Escrever ('0 valor',x,'encontrava-se na',i,'ªposição')

      FimSe

FimPara

5.[Terminar]

Sair.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Mas como o Warrior continuas a ter o vector só com zeros!

Repara:

Para i<-1 ate 10 fazer
        vector [ i ] <-0
FimPara.

Cumps

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Mas como o Warrior continuas a ter o vector só com zeros!

Repara:

Para i<-1 ate 10 fazer
        vector [ i ] <-0
FimPara.

Cumps

aí é so a inicialização, mas depois com isto:

4.[Calculo e impressão]

Para i<-1 ate 10 fazer

Inicio

      Escrever('Insira um valor:')

      Ler (vector [ i ] )

      Se vector [ i ] =x então

                Escrever ('0 valor',x,'encontrava-se na',i,'ªposição')

      FimSe

FimPara

vou atribuir valores aos indices do vector, n é?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Pois.... esquece la isso, não reparei nessa parte  :-[

Penso que já esta correcto  ;)

Cumps

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Pois.... esquece la isso, não reparei nessa parte  :-[

Penso que já esta correcto  ;)

Cumps

não há problema. lol vou imprimir entao ^^ bigada

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não devias ler primeiro todos os valores do vector com um Para, e depois noutro Para procurar pelo valor? É que neste momento estás a ler um valor e a comparar, depois lês outro valor e comparas...

No 1º Para devias pedir logo os valores do vector, em vez de lá pores 0. Depois pedias x como estás a fazer e no 2ª Para era percorrer as posições do vector como fizeste no código anterior que aí puseste.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Bem afinal não está bem falta coisas...

Algoritmo "ex1_vector"

Este algoritmo, após a insersão de um valor x, corre os índices todos de um vector com 10 elementos, e se existir algum desses elementos igual a x, ele determina e imprime a sua posição.

1.[Declaração de variáveis]

vector[1..10] : numérico inteiro

i, x : numéricos inteiros

2.[inicialização das variáveis]

x<-0

Para i<-1 ate 10 fazer

        vector [ i ] <-0

FimPara.

3.[Leitura de variáveis]

Para i<-1 ate 10 fazer

Inicio

      Escrever('Insira um valor:')

      Ler (vector [ i ] )

Fim

Escrever('Introduza um número:')

Ler(x)

4.[Pesquisa através do vector para determinar se existe algum elemento igual a x]

i<-1

Enquanto vector[ i ] < > x fazer

Se vector [ i ] = x então

                Escrever ('0 valor',x,'encontrava-se na',i,'ªposição')

Senão

Escrever(‘Não existe nenhum elemento igual a’,x)

FimSe

i<-i+1

FimEnquanto.

5.[Terminar]

Sair.

pf vejam se tenho erros e digam^^

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Só duas coisas: Uma coisa:

4.[Pesquisa através do vector para determinar se existe algum elemento igual a x]

i<-1

Enquanto vector[ i ] < > x fazer

Se vector [ i ] = x então

                Escrever ('0 valor',x,'encontrava-se na',i,'ªposição')

Senão

Escrever(‘Não existe nenhum elemento igual a’,x)

FimSe

i<-i+1

FimEnquanto.

Não percebi nada disto...

Talvez seja necessário criar uma flag com valor false e depois:

Para i<-1 ate 10 fazer
       Se vector [ i ] =x então
                 Escrever ('0 valor',x,'encontrava-se na',i,'ªposição')
                 flag = true
       FimSe
FimPara

Senão flag
     Escrever(‘Não existe nenhum elemento igual a’,x)
FimSenão

[iGNORAR]

3.[Leitura de variáveis]

Para i<-1 ate 10 fazer

Inicio

      Escrever('Insira um valor:')

      Ler (vector [ i ] )

Fim

Escrever('Introduza um número:')

Ler(x)

Bem, não há necessidade desta última instrução:

Escrever('Introduza um número:')
Ler(x)

Normalmente o primeiro índice dos vectores é 0, por isso seria mais:

Para i<-0 ate 10 fazer
Inicio
       Escrever('Insira um valor:')
       Ler (vector [ i ] )
Fim

Ou se não:

Para i<-1 ate 11 fazer
Inicio
       Escrever('Insira um valor:')
       Ler (vector [ i ] )
Fim

Dependendo da linguagem e de como queres fazer, agora temos de tirar todo o aproveito do ciclo para.

[/iGNORAR]

Isto é uma sugestão...

Cumpr. bk@ero  ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Bem, não há necessidade desta última instrução:

Escrever('Introduza um número:')
Ler(x)

O x que está a ser lido é o valor a procurar em seguida no array. Há necessidade, devia era estar numa outra secção do algoritmo.

Normalmente o primeiro índice dos vectores é 0, por isso seria mais:

Para i<-0 ate 10 fazer
...

Ou se não:

Para i<-1 ate 11 fazer
...

O array está definido como

vector[1..10] : numérico inteiro

por isso terá mesmo que ser

Para i<-1 ate 10

Quanto à parte da flag, concordo plenamente, senão é repetidamente escrita a mensagem a dizer que o número não existe no array até que seja encontrado, e nesse caso sai do Enquanto sem dizer que encontrou o número. E se o valor nao estiver no array, nunca sai do Enquanto... o que é grave.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

LOL

Esquece a minha 2.ª nota... pensei que estavas a escrever o 10.º elemento no vector... dá... estás é ler a variável X...

Cumpr. bk@ero  ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não percebi nada disto...

Talvez seja necessário criar uma flag com valor false e depois:

Para i<-1 ate 10 fazer
       Se vector [ i ] =x então
                 Escrever ('0 valor',x,'encontrava-se na',i,'ªposição')
                 flag = true
       FimSe
FimPara

Senão flag
     Escrever(Não existe nenhum elemento igual a,x)
FimSenão

... :S o k é uma flag :S n faço a minima... lol por isso lol, concluindo n percebi o codigo... para ja n kero fazer o programa em nenhum tipo d linguagem de programação, é só mesmo o algoritmo... mas obrigado, lol e ja agora o k é uma "flag"?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Uma flag é uma variável de controlo que só toma dois valores, true ou false.

Eu dei uma sugestão de criares uma flag com valor por default false que indicava se existe ou não existe o elemento X no vector.

Se não detectasses nada, então o valor da flag mantinha-se inalterado, ou seja, false.

Comecemos pela primeira parte:

Para i<-1 ate 10 fazer
       Se vector [ i ] =x então
                 Escrever ('0 valor',x,'encontrava-se na',i,'ªposição')
                 flag = true
       FimSe
FimPara

É fazer o varrimento do vector, e sempre que encontrar valores iguais->escreve na consola o que encontrou e poe a flag a true (existe o elemento X no vector).

Se não encontrar nada igual, não faz nada.

E esta instrução:

Senão flag
     Escrever(‘Não existe nenhum elemento igual a’,x)
FimSenão

É por outras palavras é feita esta questão à flag:

  Foi encontrado algum valor de X ?

A flag responde com o seu valor false ou true

Se a flag estiver false, então ele escreve a mensagem de que não foi encontrado nenhum valor.

Se for true, não faz nada.

Espero ter esclarecido...

Cumpr. bk@ero  :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Uma pergunta um pouco à parte...

Uma flag é uma variável de controlo que só toma dois valores, true ou false.

Eu pensava que uma flag podia tomar vários valores, por exemplo o comando Dir da linha de comandos podemos utilizar várias letras depois do comando para especificarmos preferências como por exemplo as letras O e P. Isto são flags ou argumentos ou o que são?

Cumps

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Uma flag é uma variável de controlo que só toma dois valores, true ou false.

Eu dei uma sugestão de criares uma flag com valor por default false que indicava se existe ou não existe o elemento X no vector.

Se não detectasses nada, então o valor da flag mantinha-se inalterado, ou seja, false.

Comecemos pela primeira parte:

Para i<-1 ate 10 fazer
       Se vector [ i ] =x então
                 Escrever ('0 valor',x,'encontrava-se na',i,'ªposição')
                 flag = true
       FimSe
FimPara

É fazer o varrimento do vector, e sempre que encontrar valores iguais->escreve na consola o que encontrou e poe a flag a true (existe o elemento X no vector).

Se não encontrar nada igual, não faz nada.

E esta instrução:

Senão flag
     Escrever(Não existe nenhum elemento igual a,x)
FimSenão

É por outras palavras é feita esta questão à flag:

Foi encontrado algum valor de X ?

A flag responde com o seu valor false ou true

Se a flag estiver false, então ele escreve a mensagem de que não foi encontrado nenhum valor.

Se for true, não faz nada.

Espero ter esclarecido...

Cumpr. bk@ero  :P

obrigado pela explicação, mas como ainda não aprendi isso o meu professor não deve querer isso... não há outra maneira de fazer? que é que tá errado no meu algoritmo? obrigado.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

1.[Declaração de variáveis]

vector[1..10] : numérico inteiro

i, x : numéricos inteiros

2.[inicialização das variáveis]

x<-0

Para i<-1 ate 10 fazer

        vector [ i ] <-0

FimPara.

3.[Leitura de variáveis]

Para i<-1 ate 10 fazer

Inicio

      Escrever('Insira um valor:')

      Ler (vector [ i ] )

Fim

Escrever('Introduza um número:')

Ler(x)

4.[Pesquisa através do vector para determinar se existe algum elemento igual a x]

i<-1

Enquanto vector[ i ] < > x fazer

Se vector [ i ] = x então

                Escrever ('0 valor',x,'encontrava-se na',i,'ªposição')

Senão

Escrever(‘Não existe nenhum elemento igual a’,x)

FimSe

i<-i+1

FimEnquanto.

5.[Terminar]

Sair.

Este método que tu usaste, se reparares bem, na pesquisa, possui um problema.

Ao iterar através do vector à procura do elemento, em cada posição, tu comparas. Caso seja igual, escreves que o encontraste na posição i, caso contrário, escreve que não o encontraste. Ou seja, pode ser que escreva que nao o encontraste várias vezes ao longo do vector. Não sei se me fiz perceber.

Outro promenor.

i<-1

Enquanto vector[ i ] < > x fazer

Se vector [ i ] = x então

                Escrever ('0 valor',x,'encontrava-se na',i,'ªposição')

Senão

Escrever(‘Não existe nenhum elemento igual a’,x)

FimSe

i<-i+1

FimEnquanto.

Se ele encontra, não sai imediatamente do ciclo (na prática nunca chega a encontrar).

Repara (vários problemas):

1º: se o elemento que procuras estiver na posição 1, ele nunca entra no enquanto, logo não escreve qualquer mensagem.

2º: se estiver na posição 2, ele diz que nao o encontrou no inicio, e de seguida, ao incrementar o i, fa-lo sair imediatamente na segunda iteração, sem escrever onde o encontrou.

3º: se não existir, entras no do forever, simplesmente encrava.

Eu propunha o seguinte: inicia o ciclo a 0, em vez de ser a 1, e incrementa no inicio, e não no final.

Para detectares se encontraste ou não, tens duas soluções:

- colocas uma segunda condição no ciclo (vector[ i ] <> x E i <= 10)

e no final podes comparar se o i=11. Se for, é porque saiu pela segunda condição e nao encontrou.

- colocas vector[11] = x

Porquê? Evitas a segunda condição (i<=10) porque ele encontra o elemento obrigatoriamente na posição 11, e sai fora.

Podes verificar como disse em cima, se i=11, então, não existe.

Espero ter sido útil.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu propunha o seguinte: inicia o ciclo a 0, em vez de ser a 1, e incrementa no inicio, e não no final.

Para detectares se encontraste ou não, tens duas soluções:

- colocas uma segunda condição no ciclo (vector[ i ] <> x E i <= 10)

e no final podes comparar se o i=11. Se for, é porque saiu pela segunda condição e nao encontrou.

- colocas vector[11] = x

Porquê? Evitas a segunda condição (i<=10) porque ele encontra o elemento obrigatoriamente na posição 11, e sai fora.

Podes verificar como disse em cima, se i=11, então, não existe.

Espero ter sido útil.

ah percebi, lol muito obrigada. alterei assim:

Algoritmo "ex1_vector"

Este algoritmo, após a insersão de um valor x, corre os índices todos de um vector com 10 elementos, e se existir algum desses elementos igual a x, ele determina e imprime a sua posição.

1.[Declaração de variáveis]

vector[1..10] : numérico inteiro

i, x : numéricos inteiros

2.[inicialização das variáveis]

x<-0

Para i<-1 ate 10 fazer

        vector [ i ] <-0

FimPara.

3.[Leitura de variáveis]

Para i<-0 ate 10 fazer

Inicio

      Escrever('Insira um valor:')

      Ler (vector [ i ] )

Fim

Escrever('Introduza um número:')

Ler(x)

4.[Pesquisa através do vector para determinar se existe algum elemento igual a x]

i<-0

Enquanto vector[ i ] < > x  e i<=10 fazer

Inicio

i<-i+1

Se vector [ i ] = x então

                Escrever ('0 valor',x,'encontrava-se na',i,'ªposição')

FimSe

Se  i = 11

Escrever(‘Não existe, em posição alguma, um elemento igual a’,x)

FimSe

Fim

FimEnquanto.

5.[Terminar]

Sair.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não..

Vais chegar lá :P

Para i<-0 ate 10 fazer

Inicio

      Escrever('Insira um valor:')

      Ler (vector [ i ] )

Fim

Desta forma, do 0 ao 10, estás a ler 11 números. Tenta fazer de 1 a 10.

Enquanto vector[ i ] < > x  e i<=10 fazer

  Inicio

i<-i+1

Se vector [ i ] = x então

                Escrever ('0 valor',x,'encontrava-se na',i,'ªposição')

FimSe

Se  i = 11

Escrever(‘Não existe, em posição alguma, um elemento igual a’,x)

FimSe

FimEnquanto.

O objectivo é comparar se i = 11 fora do ciclo. Tu só depois de percorreres os elementos todos, é que podes concluir se encontraste ou não, verdade?

PS: Eu recomendava-te começar a aprender uma linguagem de programação. Algoritmia é muito engraçado, mas a programar é que se aprende. Se soubesses programar uma linguagem já agora, podias escrever esses programas nessa linguagem e sabias logo se estava correcto ou errado. Pergunta ao teu professor que linguagem vão aprender (provavelmente PASCAL) e começa. Se não for Pascal eu pessoalmente recomendo C.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

PS: Eu recomendava-te começar a aprender uma linguagem de programação. Algoritmia é muito engraçado, mas a programar é que se aprende. Se soubesses programar uma linguagem já agora, podias escrever esses programas nessa linguagem e sabias logo se estava correcto ou errado. Pergunta ao teu professor que linguagem vão aprender (provavelmente PASCAL) e começa. Se não for Pascal eu pessoalmente recomendo C.

ja de-mos pascal, mas para agora o sor so quer algoritmia... =(, e vamos começar a dar noçoes basicas d Vb6 :P. obrigado vou seguir os teus conselhos.

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