Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Jefferson.F

Matriz - Ordernar carros em ordem crescente através do Ano

Recommended Posts

Bom Dia,

 

preciso de ajuda em saber como exibir o modelo do carro em ordem crescente, já que o mesmo depende do ano.

 

 

 

var carro1 = "CELTA";

var carro2 = "GOL";

var carro3 = "SAVEIRO";

 

var ano1 = 2013;

var ano2 = 2011;

var ano3 = 2012;

 

var meuArray = new Array(3);

 

meuArray[0] = new Array(2);

meuArray[1] = new Array(2);

meuArray[2] = new Array(2);

 

meuArray[0][0] = carro1;

meuArray[1][0] = carro2;

meuArray[2][0] = carro3;

meuArray[0][1] = ano1;

meuArray[1][1] = ano2;

meuArray[2][1] = ano3;

 

 

 

------------------------------------------------------------------------------------

 

Da forma que eu montei a matriz, está correta?

 

Agora como faço para ordernar está matriz, com base no ano?

 

O resultado, deve ser esse: GOL 2011, SAVEIRO 2012, CELTA 2013.

 

Alguém pode me ajudar, por gentileza?

 

Agradeço desde já!

 

Abraço a Todos...!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

:seta: Array.prototype.sort

var carro1 = "CELTA";
var carro2 = "GOL";
var carro3 = "SAVEIRO";

var ano1 = 2013;
var ano2 = 2011;
var ano3 = 2012;

var meuArray = new Array(3);

meuArray[0] = new Array(2);
meuArray[1] = new Array(2);
meuArray[2] = new Array(2);

meuArray[0][0] = carro1;
meuArray[1][0] = carro2;
meuArray[2][0] = carro3;
meuArray[0][1] = ano1;
meuArray[1][1] = ano2;
meuArray[2][1] = ano3;


meuArray.sort(function( curr, next ) {
    
    return curr[1] > next[1];
});

for( var i = 0, len = meuArray.length; i < len; i++ )
    console.log( meuArray[i].join( ' ' ) )

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa Noite JC Mais,

quando abrir o tópico, acabei esquecendo de informar que não posso usar função como o SORT(), ou algum outro. Tem que ser no braço mesmo. De qualquer forma, agradeço pela sua resposta, acabei conhecendo o metodo SORT().

Já que não posso usar o metodo SORT(), fiz desta forma:

function valida(lista) {
    var resp = true;
    for (var i = 0; i < 6; i++) {
        if (lista[i] == "") {
            alert("Todos os campos devem ser preenchidos");
            resp = false;
            break;
        }
    }
    return resp;
}

function principal() {
    var carro1 = "CELTA";
    var carro2 = "UNO";
    var carro3 = "GOL";
    var carro4 = "FUSCA";
    var carro5 = "SAVEIRO";
    var carro6 = "PARATI";
    var ano1 = 2010 * 1;
    var ano2 = 2013 * 1;
    var ano3 = 2009 * 1;
    var ano4 = 2012 * 1;
    var ano5 = 2011 * 1;
    var ano6 = 2008 * 1;
    var matriz = new Array(6);
    var listaCrescente = new Array(6);
    matriz[0] = new Array(2);
    matriz[1] = new Array(2);
    matriz[2] = new Array(2);
    matriz[3] = new Array(2);
    matriz[4] = new Array(2);
    matriz[5] = new Array(2);
    matriz[0][0] = carro1;
    matriz[1][0] = carro2;
    matriz[2][0] = carro3;
    matriz[3][0] = carro4;
    matriz[4][0] = carro5;
    matriz[5][0] = carro6;
    matriz[0][1] = ano1;
    matriz[1][1] = ano2;
    matriz[2][1] = ano3;
    matriz[3][1] = ano4;
    matriz[4][1] = ano5;
    matriz[5][1] = ano6;
    resultado = "";
    for (i = 0; i < matriz.length; i++) {
        listaCrescente[i] = matriz[i];
        document.writeln(matriz[i] + "<br>");
    }

    function ordenaCrescente(lista) {
        for (var i = 0; i < matriz.length; i++) {
            for (var j = 0; j < matriz.length; j++) {
                if (lista[i][j] > matriz[i][j]) {
                    var temp = lista[i][j];
                } else {
                    var temp = matriz[i][j];
                }
            }
        }
    }
    ordenaCrescente(listaCrescente);
    document.writeln("<br>" + listaCrescente + "<br>");
}




Porém, ainda não consegui resolver, ele não tá ordenando. Pelo menos, tenho tentado.

Podem me ajudar?

Agradeço desde já!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Jefferson, não se esqueça de indentar seu código e adicionar a tag CODE, facilita a leitura. :thumbsup:

 

Tá parecendo dever de casa, irei te ajudar no possível.

 

Primeiro, ao meu ver isso aqui é totalmente desnecessário:

var carro1 = "CELTA";
var carro2 = "UNO";
var carro3 = "GOL";
var carro4 = "FUSCA";
var carro5 = "SAVEIRO";
var carro6 = "PARATI";
var ano1 = 2010 * 1;
var ano2 = 2013 * 1;
var ano3 = 2009 * 1;
var ano4 = 2012 * 1;
var ano5 = 2011 * 1;
var ano6 = 2008 * 1;
var matriz = new Array(6);
var listaCrescente = new Array(6);
matriz[0] = new Array(2);
matriz[1] = new Array(2);
matriz[2] = new Array(2);
matriz[3] = new Array(2);
matriz[4] = new Array(2);
matriz[5] = new Array(2);
matriz[0][0] = carro1;
matriz[1][0] = carro2;
matriz[2][0] = carro3;
matriz[3][0] = carro4;
matriz[4][0] = carro5;
matriz[5][0] = carro6;
matriz[0][1] = ano1;
matriz[1][1] = ano2;
matriz[2][1] = ano3;
matriz[3][1] = ano4;
matriz[4][1] = ano5;
matriz[5][1] = ano6;
Porque você não declara logo a array? Tá apenas poluindo o código fazendo desta forma aí, também não entendi as multiplicações por 1.
var matriz = [ ['CELTA', 2010], ['UNO', 2013], ['GOL', 2009], ['FUSCA', 2012], ['SAVEIRO', 2011], ['PARATI', 2008] ];

Não vejo necessidade disso aqui também:

for (i = 0; i < matriz.length; i++) {
    listaCrescente[i] = matriz[i];
    document.writeln(matriz[i] + "<br>");
}
Tá só copiando para uma nova array, porque não usa a array [inline]matriz[/inline] então?

 

Agora ao algoritmo:

function ordenaCrescente(lista) {
    for (var i = 0; i < matriz.length; i++) {
        for (var j = 0; j < matriz.length; j++) {
            if (lista[i][j] > matriz[i][j]) {
                var temp = lista[i][j];
            } else {
                var temp = matriz[i][j];
            }
        }
    }
}
Você está se baseando em uma variável global [inline]matriz[/inline], retire isso daí e use apenas a array passada como parâmetro.

 

Isso: [inline]if (lista[ i ][ j ] > matriz[ i ][ j ]) {[/inline], não irá funcionar, pois [inline]lista === matriz[/inline], sendo assim [inline]lista[ i ][ j ] === matriz[ i ][ j ][/inline] (se lembra que [inline]lista[/inline] é uma cópia de [inline]matriz[/inline]?

 

O algoritmo está errado, dê uma estudada em um algoritmo simples como QuickSort, e tente adaptar para a array que você está usando.

Compartilhar este post


Link para o post
Compartilhar em outros sites

JCMais,

 

obrigado pelas dicas, inclusive a de usar o CODE. Marinheiro de primeira viagem em fórum.

 

Obrigado pela dica em dizer que meu algoritmo tá errado, estou no primeiro período ainda, então, é focar nos estudos. Você deixou mais claro algumas dúvidas que eu tinha. Vou continuar a estudar, e assim que eu consegui, postarei o resultado aqui.

 

Mas, assim, resumindo a resposta, tem que aparecer em um alert a lista original e a baixo dessa lista, no mesmo alert, a lista ordenada dos carros baseadas no ano.

 

JCMais, realmente é um dever de casa, não quero código pronto, quero dicas, e eu mesmo correr atrás do objetivo final.

 

Seu post, tem somado muito para isso. Espero que outros também, caso queiram, possam interagir mais nesse tópico.

 

Abraço a Todos...!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.