Jump to content

[How to] Vectores -> determinar e ordenar


Recommended Posts

Posted

🙂 Boa tarde!

Comecei a estudar vectores esta semana  😛 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.

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

*^^*<3@Chuckytuh@<3*^^*

Posted

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  🙂

Posted

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.

*^^*<3@Chuckytuh@<3*^^*

Posted

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.

Posted

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

Desaparecido.

Posted

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  🙂

Posted

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

*^^*<3@Chuckytuh@<3*^^*

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.