Array

PHP, Java, JavaScript, XML, XHTML, HTML, CSS, ASP, Delphi, Assembly, LaTeX, C, UML, Flash, Perl, SQL, Python, Zope, Pascal, WML. Se conhece mais de 3 siglas referidas, este é o forum para si.

Moderadores: Administradores, Moderadores

Array

Mensagempor luis7 » Quinta Abr 09, 2009 20:43

Olá pessoal, :wink:

Estou a precisar da vossa ajuda, para o seguinte: Tenho um array com 20 numeros inteiros e queria q o programa me indicasse onde começa a primeira serie de numeros crescentes:

Por exemplo para este array de 14 numeros:

8 5 6 2 4 6 9 4 2 0 8 9 10 12, etc

A primeira serie crescente começa no indice 3 do array e vai até ao indice 6 (q sao os numeros 2 4 6 9) e a segunda começa no indice 9 e vai até ao 13 (numeros 0 8 9 10 12).

Eu queria obter como resultado a serie crescente mais longa, q neste caso seria a segunda q dei como exemplo( numeros 0 8 9 10 12).

Alguém sabe como fazer?

Muito obrigado e boa páscoa.
luis7
Novato
Novato
 
Mensagens: 1
Registado: Quinta Abr 09, 2009 20:22

Mensagempor vamosAeles » Quinta Abr 09, 2009 21:02

Boas,
percorres o array e vais mantendo o indice da serie mais longa até ao momento tipo:

int nums[] = {........};
int indice = 0;
int maiorComp = 0;
int compAct = 1;
for(int i = 1; i < numsl.lenght; i++){
if(nums[i] > nums[i]){
compAct++;
}
else{
if(compAct > maiorComp){
maiorComp = compAct;
indice = i - maiorComp; 1 2 3 2 3 4 5 6 7
}
compAct = 1;
}
}
if(compAct > maiorComp){
maiorComp = compAct;
indice = numsl.lenght - maiorComp; 1 2 3 2 3 4 5 6 7
}

Será algo assim, testa a ver se funca ;)

[[[]]]
vamosAeles
Membro de Prata
Membro de Prata
 
Mensagens: 206
Registado: Quarta Jan 04, 2006 21:29
Localização: Lisboa/Proença

Mensagempor LuisFilipe » Sexta Abr 10, 2009 0:02

Vamos ver se entendo
Código: Seleccionar todos
int nums[] = {........};               // array com numeros
int indice = 0;                        // inicio seq
int maiorComp = 0;                     // num de numeros seq
int compAct = 1;                       // comprimento actual
for(int i = 1; i < numsl.lenght; i++){ // ciclo 1 .. max-1
  if(nums[++i] > nums[i]){             // num seg > num actual
.................................^^ faltava ?
Código: Seleccionar todos
    compAct++;                         // incrementa comp Actual
  }
  else{                                // se não (quebra na seq)
    if(compAct > maiorComp){           // se o novo com > que o maior
       maiorComp = compAct;            // actualiza o Maior comp
       indice = i - maiorComp;         // inicio da sequencia
    }
    compAct = 1;                       // reinicia compAct
  }
}
if(compAct > maiorComp){               // verificar de novo
  maiorComp = compAct;                 // actualiza o Maior comp
  indice =  numsl.lenght - maiorComp;  // inicio da sequencia
}
LuisFilipe
Membro Diamante
Membro Diamante
 
Mensagens: 1270
Registado: Domingo Set 04, 2005 22:12

Mensagempor jmsr » Sexta Abr 10, 2009 7:47

Olá,

Obrigado pelas respostas. Quando executo o código, ele diz sempre q a posição onde começa a maior série de numeros crescentes é 1, o q n é verdade :(

Alguém sabe dizer o que está mal?

Código: Seleccionar todos
public static void maiorSerie()
   {
      int [] tab1= {1, 0, 4, 2, 9, 3, 2, 4, 8};

      int indice = 0;                        // inicio seq
      int maiorComp = 0;                     // num de numeros seq   
      int compAct = 1;                       // comprimento actual

      for(int i = 1; i < tab1.length; i++) // ciclo 1 .. max-1
      {
         if(tab1[++i] > tab1[i]) // num seg > num actual
         {             
            compAct++;                         // incrementa comp Actual
         }
         else  // se não (quebra na seq)
         {                               
            if(compAct > maiorComp) // se o novo com > que o maior
            {           
               maiorComp = compAct;            // actualiza o Maior comp
               indice = i - maiorComp;         // inicio da sequencia
            }
            compAct = 1;                       // reinicia compAct
         }
         
      }
      if(compAct > maiorComp)  // verificar de novo
      {             
         maiorComp = compAct;                 // actualiza o Maior comp
         indice =  tab1.length - maiorComp;  // inicio da sequencia
      }
      
      System.out.println("Posição onde começa a maior série de números por ordem crescente é: " +indice);
   }
jmsr
Novato
Novato
 
Mensagens: 3
Registado: Sexta Abr 10, 2009 0:32

Mensagempor bigslb » Sexta Abr 10, 2009 12:30

kek usas(usam) para executar isso??
P4 775 3.0
Albatron PX915PC Pro-G
4x512 DDR400 VData/G.Skill ZX
Sapphire X700Pro
WD 320Gb SATA II 16MB
All in a Aerocool Extremeengine 3t
bigslb
Membro Diamante
Membro Diamante
 
Mensagens: 1426
Registado: Quinta Ago 18, 2005 17:16
Localização: Massamá

Mensagempor vamosAeles » Sexta Abr 10, 2009 13:19

Código: Seleccionar todos
if(tab1[++i] > tab1[i]) // num seg > num actual


Essa condição não esta correcta :p
++i incrementa a variavel i (não é o mesmo que i + 1)
ie, essa condição nunca vai ser verdadeira
Assim como o i se inicia a 1, já nunca irá verificar a posicao 0, mesmo que em vez de ++1 estivesse i + 1 ;)


Já agora, no esboço que pus, onde está 'if(nums[i] > nums[i]){ ' deveria ser 'if(nums[i] > nums[i-1]){ '... óbvio que tinha posto mal.


PS - o código postado no post antes é compativel com JAVA

[[[]]]
vamosAeles
Membro de Prata
Membro de Prata
 
Mensagens: 206
Registado: Quarta Jan 04, 2006 21:29
Localização: Lisboa/Proença

Mensagempor LuisFilipe » Sexta Abr 10, 2009 14:17

vamosAeles Escreveu:
Código: Seleccionar todos
if(tab1[++i] > tab1[i]) // num seg > num actual


Essa condição não esta correcta :p
++i incrementa a variavel i (não é o mesmo que i + 1)
ie, essa condição nunca vai ser verdadeira
Assim como o i se inicia a 1, já nunca irá verificar a posicao 0, mesmo que em vez de ++1 estivesse i + 1 ;)


Já agora, no esboço que pus, onde está 'if(nums[i] > nums[i]){ ' deveria ser 'if(nums[i] > nums[i-1]){ '... óbvio que tinha posto mal.


PS - o código postado no post antes é compativel com JAVA

[[[]]]
Tens razão ó 31 quem ferve a 90º é o ângulo recto...

claro que poderia ser if(nums[--i] > nums[++i]) :roll:

Acho que é costume usar o seguinte

for(int i = 0; i < numsl.lenght;){
if(nums[i] > nums[++i]){

ou seja o incremento de i é feito na comparação e esta vai de 0 ao maximo -1 ou seja num array com 10 ele compara i[9] com i[++9] e quebra no proximo for, digo eu.

ou então tem que acabar em <= numsl.lenght;
caso contrário nunca compara o ultimo

e ainda usas numsl.lenght não deveria ser nums.lenght

julguei que era C, sendo assim não sei se // serve de comentário
LuisFilipe
Membro Diamante
Membro Diamante
 
Mensagens: 1270
Registado: Domingo Set 04, 2005 22:12

Mensagempor vamosAeles » Sexta Abr 10, 2009 15:06

LuisFilipe Escreveu:Tens razão ó 31 quem ferve a 90º é o ângulo recto...

claro que poderia ser if(nums[--i] > nums[++i]) :roll:

Acho que é costume usar o seguinte

for(int i = 0; i < numsl.lenght;){
if(nums[i] > nums[++i]){

ou seja o incremento de i é feito na comparação e esta vai de 0 ao maximo -1 ou seja num array com 10 ele compara i[9] com i[++9] e quebra no proximo for, digo eu.

ou então tem que acabar em <= numsl.lenght;
caso contrário nunca compara o ultimo

e ainda usas numsl.lenght não deveria ser nums.lenght

julguei que era C, sendo assim não sei se // serve de comentário


take it easy...


1) "claro que poderia ser if(nums[--i] > nums[++i]) :roll: "
Nunca disse o contrário

2) "for(int i = 0; i < numsl.lenght;){
if(nums[i] > nums[++i]){ ""
Repara que no último ciclo ele vai tentar aceder a uma posição(indice) que já não faz parte do array.


3) // tb serve em Java ;) As tags pros coments em C e Java são as mesmas

[[]]
vamosAeles
Membro de Prata
Membro de Prata
 
Mensagens: 206
Registado: Quarta Jan 04, 2006 21:29
Localização: Lisboa/Proença

Mensagempor LuisFilipe » Sexta Abr 10, 2009 15:38

vamosAeles Escreveu:take it easy...
No sweat...

vamosAeles Escreveu:1) "claro que poderia ser if(nums[--i] > nums[++i]) :roll: "
Nunca disse o contrário
Claro que não mas ninguém programa assim --i; ++i; só se for a brincar (era só para emendar a mão) :lol:

vamosAeles Escreveu:2) "for(int i = 0; i < numsl.lenght;){
if(nums[i] > nums[++i]){ ""
Repara que no último ciclo ele vai tentar aceder a uma posição(indice) que já não faz parte do array.
Discordo visto que ... pera ái... pois é, o tamanho é 10 e vai de 0 a 9, pronto está entendido... mea culpa.
portanto comparas com o anterior OK.

Só falta o l de numsl.lenght é engano ou é mesmo assim ?

de qualquer forma foi bom discutir :)
LuisFilipe
Membro Diamante
Membro Diamante
 
Mensagens: 1270
Registado: Domingo Set 04, 2005 22:12

Mensagempor bigslb » Sexta Abr 10, 2009 16:16

LuisFilipe Escreveu:
vamosAeles Escreveu:
1) "claro que poderia ser if(nums[--i] > nums[++i]) Rolling Eyes "
Nunca disse o contrário

Claro que não mas ninguém programa assim --i; ++i; só se for a brincar (era só para emendar a mão)


if(nums[--i] > nums[i+1]) normalmente faz-se assim. o fazer ++i ou i++ estamos a afectar a variável, fazer somente i+1 não, só é afectada na próxima iteração do for...


LuisFilipe Escreveu:Só falta o l de numsl.lenght é engano ou é mesmo assim ?



em JAVA nums.length visto k a variavel é nums...
P4 775 3.0
Albatron PX915PC Pro-G
4x512 DDR400 VData/G.Skill ZX
Sapphire X700Pro
WD 320Gb SATA II 16MB
All in a Aerocool Extremeengine 3t
bigslb
Membro Diamante
Membro Diamante
 
Mensagens: 1426
Registado: Quinta Ago 18, 2005 17:16
Localização: Massamá

Mensagempor vamosAeles » Sexta Abr 10, 2009 18:17

bigslb Escreveu:
em JAVA nums.length visto k a variavel é nums...


Sem a mínima dúvida.
numsl nao era nenhuma variavel q tinha declarado

[[]]
vamosAeles
Membro de Prata
Membro de Prata
 
Mensagens: 206
Registado: Quarta Jan 04, 2006 21:29
Localização: Lisboa/Proença


Voltar para Programação

Quem está ligado:

Utilizador a ver este Fórum: Nenhum utilizador registado e 1 visitante

cron