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

Chuckytah

[How to] Vectores -> determinar e ordenar

7 mensagens neste tópico

:) Boa tarde!

Comecei a estudar vectores esta semana  :P lol e tenho um trabalho de casa pa entregar amanhã que acho que contém erros, e gostava que me ajudassem e explicassem o que fiz de errado.

Os algoritmos que tinha de constuir eram os seguintes:

1-Elabore um algoritmo que ordene um vector descendentemente, eliminando so valores repetidos no vector resultante.

2-Elabore um algoritmo que, dados dois vectores A e B, com elementos distintos, determine o número de elementos de B que não existem em A.

O 2º acho que é simples, ou pelo menos fiz-lo sem hesitar muito  :), agora o 1º  :bored: não percebi como fazer para eliminar os valores que se repetem no vector resultante...  ;)  :down: .

Bem aqui estão os algoritmos que fiz:

1:
Algoritmo "Ordenação descendentemente"
Este algoritmo, dado um vector A, ordena-o de modo descendente para um vector B, e no vector B, elimina os elementos que se repetem.

1.[Definição de constantes]
MAX<-10

2.[Declaração de variáveis]
A, B vectores[1..10] numéricos inteiros
i, j, maior númericos inteiros

3.[inicialização de variáveis]
Para i<-1 ate MAX fazer
     A [ i ] <- 0
Fim
Para j<-1 ate MAX fazer
     B [ i ] <- 0
Fim
maior-<0

4.[Leirura dos elementos do vector A]
Para i<-1 ate MAX fazer
   Inicio
     Escrever('Innsira o valor para o',1,'º elemento.')
     Ler(A [ i ] )
   Fim
Fim

5.[Ordenar o vector A para B]
maior<-A [ 1 ]
Para j<-1 ate MAX fazer
  Inicio
   Para i<-1 ate MAX fazer
     Inicio
       Se A [ i ] > maior
           maior<- A[i]
      FimSe
     Fim
   B [ j ] <- maior
fim

6.[Terminar]
Sair.

2:
Algoritmo "Vectores A e B"
Este algoritmo, dados dois vectores A e B, com valores distintos, determina e imprime o número de elementos de B que não existem em A.

1.[Definição de constantes]
MAX<-10

2.[Declaração de variáveis]
A, B vectores[1..10] numericos inteiros
i, j, acomula numericos inteiros

3.[inicialização de variaveis]
Para i<-1 ate MAX fazer
     A [ i ] <- 0
Fim
Para j<-1 ate MAX fazer
     B  [ j ] <- 0
Fim
acomula<-0

4.[Leitura dos elementos dos dois vectores]
Para i<-1 ate MAX fazer 
  Inicio
   Escrever('Insira o valor para a',i,'ª posição do 1ºvector:')
   Ler( A [ i ] )
Fim
Para j<-1 ate MAX fazer
  Inicio
   Escrever(''Insira o valor para a',j,'ª posição do 2ºvector:')
Fim

5.[Pesquisa do número de elementos de B que não existem em A]
Para j<-1 ate MAX fazer
  Inicio
   Para i<-1 ate MAX fazer
     Inicio
       Se B [ j ] < > A [ i ] então
         acomula<-i+1
      FimSe
   Fim
Fim

6.[impressão do resultado]
Escrever('O número de elementos do 2ºvector que não existem no 1º vector é:',acomula)

7.[Teminar]
Sair.

:hmm:o primeiro não está a funcionar bem de certeza... bem, obrigado pela ajuda. e pelo tempo gasto  :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Bem, como já foi referido devias aprender uma linguagem de programação (acho que pascal era bom para ti)

Assim, podias verificar se o teu algoritmo funciona ou não. Depois com a prática, já consegues desenvolver um algoritmo sem um compilador, já consegues verificar se funciona ou não.

Sem aprenderes a programar, torna-se complicado compilar. Terás de percorrer o código como se fosses o PC e verificar se funciona ou não.

O que está mal no 1.º?

- O algoritmo não faz o que está destinado!

- Se percorreres o código verificas que o resultado final dum vector [2 5 4 1 6 8 9] é [9 9 9 9 9 9 9], se não me engano.

- Experimenta ser um computador e fazer o passo 5 e descobres o erro (eu não digo por enquanto, tenta descobrir).

- Não fizeste nada para remover os números repetidos.

O 2.º parece funcionar bem.

Sobre os número repetidos, primeiro põe por ordem descendente, depois vais reparar que os números iguais estão seguídos, fazes um ciclo e removes o que se repete...

Cumpr. bk@ero  :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O que está mal no 1.º?

- O algoritmo não faz o que está destinado!

- Se percorreres o código verificas que o resultado final dum vector [2 5 4 1 6 8 9] é [9 9 9 9 9 9 9], se não me engano.

- Experimenta ser um computador e fazer o passo 5 e descobres o erro (eu não digo por enquanto, tenta descobrir).

- Não fizeste nada para remover os números repetidos.

Cumpr. bk@ero  :)

Para o primeiro algoritmo, tendo em conta o que disseste fiz as seguintes alterações:

5.[Ordenar o vector A para B]

maior<-A [ 1 ]

Para j<-1 ate MAX fazer

  Inicio

  Para i<-2 ate MAX fazer

    Inicio

      Se A [ i ] > maior e maior < > B [ j ]

          maior<- A[ i ]

      FimSe

    Fim

  B [ j ] <- maior

fim

[localizar e eliminar elementos que se repetem]

Para j<-1 ate MAX fazer

  Inicio

    Se B [ j ] = B [j+1] então

        B [j+1]<-B[j+2]

  FmSe

Fim

bem, quanto a aprender uma lingugem de programação tenho testado em Pascal mas esta semana anda muito às avessas com testes atras de testes e não tenho muito tempo. Mas vou começar a usar mais Visual Basic.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Para algoritmia Visual Basic é muito mau. Não comeces por aí..

Quanto ao teu programa:

Ao encontrares o maior, escreves-lo na posição 1.

Na segunda iteração, o maior vai ser o mesmo. Portanto (julgo ter sido esse o objectivo) colocaste aquela desigualdade, para verificar se era igual ao anterior.

Muito bem, encontraste o segundo.

Na terceira iteração, vais voltar a encontrar o primeiro, porque tu só comparas com o mais recente.

Tenta usar qualquer tipo de marcação para saber se o deves usar ou não. Uma boa ideia seria colocar os valores usados a -1, para não os voltares a apanhar (isto se o vector só contiver números positivos). Tens é que guardar também o seu i, para no final saberes onde te dirigir para marcar..

Esta é a mais comum, mas existe uma outra solução que só envolve remover um caracter do teu código. :)

Quanto à tua remoção de repetidos, não resolve o problema.

Imagina o vector 3 3 3 1 1

Ficas na mesma com números repetidos.

Pensa numa solução que envolva dois ciclos. A solução que usa somente um envolve mais trabalho.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O objectivo da 1ª questão não é ordenar um vector sem utilizar outro? É como eu o interpretaria...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

A única coisa que tinhas de fazer era um reset ao valor maior:

5.[Ordenar o vector A para B]

Para j<-1 ate MAX fazer

  Inicio

  maior<-0 (aqui esta o reset)

  Para i<-1 ate MAX fazer

    Inicio

      Se A [ i ] > maior

          maior<- A[ i ]

          A[ i ] <- 0 (apagar o valor para não voltar a incomodar)

      FimSe

    Fim

  B [ j ] <- maior

fim

Para números repetidos, voltavas a escrever no A que estava todo em zeros

[localizar e eliminar elementos que se repetem]

A[ 1 ] <- B [ 1 ]

i <- 2

Para j<-2 ate MAX fazer

  Inicio

    Se B [ j - 1 ] <> B [ j ] então

        A[ i ] <- B [ j ]

        i <- i + 1

  FmSe

Fim

Isto foi feito à pressa, tenta compreender o raciocínio.

Cumpr. bk@ero  :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O objectivo da 1ª questão não é ordenar um vector sem utilizar outro? É como eu o interpretaria...

não, é mesmo pa usar dois vectores ^^

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