Chuckytah Posted November 15, 2006 at 04:17 PM Report #64517 Posted November 15, 2006 at 04:17 PM 🙂 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*^^*
brink@ero Posted November 15, 2006 at 04:44 PM Report #64522 Posted November 15, 2006 at 04:44 PM 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 🙂
Chuckytah Posted November 15, 2006 at 05:23 PM Author Report #64535 Posted November 15, 2006 at 05:23 PM 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*^^*
Warrior Posted November 15, 2006 at 09:54 PM Report #64623 Posted November 15, 2006 at 09:54 PM 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.
TheDark Posted November 15, 2006 at 11:08 PM Report #64643 Posted November 15, 2006 at 11:08 PM O objectivo da 1ª questão não é ordenar um vector sem utilizar outro? É como eu o interpretaria... Desaparecido.
brink@ero Posted November 16, 2006 at 09:54 AM Report #64681 Posted November 16, 2006 at 09:54 AM 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 🙂
Chuckytah Posted November 16, 2006 at 05:55 PM Author Report #64742 Posted November 16, 2006 at 05:55 PM 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*^^*
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