Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2006
    Messaggi
    86

    Inserire vettore originale e ordinato in tabella

    Buongiorno a tutti ! Ho il seguente problema : sto facendo uno script che chiede all'utente la grandezza del vettore, dopo chiede i valori da inserire all'interno del vettore creato e infine deve stampare all'interno di una colonna della tabella i valori del vettore originale e in un'altra colonna i valori del vettore ordinato. Purtroppo non riesco a stampare in ordine i valori del vettore ordinato. Mi date una mano?

    codice:
    var a = window.prompt("inserisci la grandezza del vettore");
    //parserizzo il numero inserito e lo trasformo in un int
    var b = parseInt(a);
    //creo il primo vettore (non ordinato)
    var vett = new Array(b);
    //creo il secondo vettore( verrà ordinato in seguito
    var vett2 = new Array(b);
    
    //costruisco la tabella
    document.writeln( "<table border = \"1\"" + "width = \"50%\">" );
    document.writeln("<thead><th width = \"100\""+ " align = \"left\">vettore originale<th align = \"left\">" + "vettore ordinato" + "</th></thead><tbody>");
    
    //eseguo un ciclo per inserire i numeri all'interno del vettore
    for (var i=0; i<b; i++)
    {
     	//chiedo all'utente il numero da inserire fino a quando non termina il ciclo
      var x = window.prompt("inserisci il " + i + "° " + "numero");
    	var y = parseInt(x);
    	vett[i] = y;
    	vett2 = vett;
    		
    	//scrivo all'interno della tabella il valore acquisito
    	document.writeln( "<tr><td>"+ y + "</td>" )
    	//ordino il secondo vettore
    	vett2.sort();
    	//scrivo nella tabella il secondo vettore
    	document.writeln( "<td>"+ vett2[i] + "</td></tr>")
    		
    
    }
    
    document.writeln( "</tbody></table>" );

  2. #2
    Non funziona perchè cerchi di fare tutto in un unico ciclo, emtre dovrai usarne almeno due.

    Tu ora fai un ciclo e ad ogni ricorrenza chiewdi il valore del prossimo vettore.
    Fin qua tutto bene, ma poi, nello stesso ciclo mandi in output tale vettore (ok) ma poi chiami il sort (ad ogni cicli) sul contenutp parziale, con risultati imprevedibili.

    In sintesi dovresti fare un ciclo che chiede all'utente i vettori, poi usare il sort (q sola volta) e poi, in un secondo ciclo, popolare la tabella.

    ...ancora una cosa: in javascript la definizione degli array non richiede la specifica della dimensione.
    var xyz=Array(b);
    non inizializza un array di b elementi, ma un array di un solo elemento che vale b.
    Tecnolgie per l'arte.
    Arti per la tecnologia.
    softhare

  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2006
    Messaggi
    86
    ciao softhare, grazie della risposta. Ho provato a seguire il tuo consiglio facendo due cicli separati in cui il primo chiede all'utente di inserire i numeri nel vettore e nel secondo di metterli in tabella però come output, nelle colonne "vettore originale e vettore ordinato" ottengo solo i numeri del vettore ordinato!

    questo è il codice modificato :

    codice:
    //chiedo la grandezza del vettore		
    var a = window.prompt("inserisci la grandezza del vettore");
    //parserizzo il numero
    var b = parseInt(a);
    //creo il primo vettore (non ordinato)
    var vett = new Array(b);
    //creo il secondo vettore( verrà ordinato in seguito)
    var vett2 = new Array(b);
    
    //costruisco la tabella
    document.writeln( "<table border = \"1\"" + "width = \"50%\">" );
    document.writeln("<thead><th width = \"100\""+ " align = \"left\">vettore originale<th align = \"left\">" + "vettore ordinato" + "</th></thead><tbody>");
    
    //eseguo un ciclo per inserire i numeri all'interno del vettore
    for (var i=0; i<b; i++)
    {
     	//chiedo all'utente il numero da inserire fino a quando non termina il ciclo
      var x = window.prompt("inserisci il " + i + "° " + "numero");
    	var y = parseInt(x);
    	vett[i] = y;
    }
    
    //faccio una copia del primo vettore
    vett2 = vett;
    //ordino il secondo vettore
    vett2.sort()
    //scrivo il vettore originale e quello ordinato all'interno della tabella
    for (var i=0; i<b; i++)
    {
    
    
    			 		document.writeln( "<tr><td>"+ vett[i] + "</td><td>"+ vett2[i] + "</td></tr>"  )
    		
    
    }
    document.writeln( "</tbody></table>" );

  4. #4
    Così funziona...

    codice:
    //chiedo la grandezza del vettore		
    var b = window.prompt("inserisci la grandezza del vettore");
    //creo il primo vettore (non ordinato)
    var vett = new Array();
    //creo il secondo vettore( verrà ordinato in seguito)
    var vett2 = new Array();
    
    
    //eseguo un ciclo per inserire i numeri all'interno del vettore
    for (var i=0; i<b; i++)
    {
     	//chiedo all'utente il numero da inserire fino a quando non termina il ciclo
      var x = window.prompt("inserisci il " + i + "° " + "numero");
    	var y = parseInt(x);
    	vett[i] = y;
    }
    
    //faccio una copia del primo vettore
    vett2 = vett;
    //ordino il secondo vettore
    vett2.sort();
    
    //costruisco la tabella
    document.writeln( "<table border = \"1\"" + "width = \"50%\">" );
    document.writeln("<thead><th width = \"100\""+ " align = \"left\">vettore originale<th align = \"left\">" + "vettore ordinato" + "</th></thead><tbody>");
    
    //scrivo il vettore originale e quello ordinato all'interno della tabella
    for (var i=0; i<b; i++)
    {
    document.writeln( "<tr><td>"+ vett[i] + "</td><td>"+ vett2[i] + "</td></tr>"  )
    };
    //chiudo tabella
    document.writeln( "</tbody></table>" );
    ...però è un peccato perchè quasi c'eri...
    Tecnolgie per l'arte.
    Arti per la tecnologia.
    softhare

  5. #5
    Utente di HTML.it
    Registrato dal
    Oct 2006
    Messaggi
    86
    scusami, ma ho provato il tuo codice ma nell'output , sia nella colonna del vettore ordinato sia nella colonan del vettore originale esce sempre il vettore ordianto !

  6. #6
    Utente bannato
    Registrato dal
    Apr 2009
    Messaggi
    530
    Perché gli Array non vanno eguagliati, ma è il secondo che va popolato:

    //faccio una copia del primo vettore
    for (var i=0; i<b; i++){
    &#160; vett2[i] = vett[i];
    }

    o più semplicemente, concludi così il ciclo precedente:

    &#160; &#160; vett[i] = y;
    &#160; &#160; vett2[i] = y;
    }

    Resta il fatto che poi

    //ordino il secondo vettore
    vett2.sort();

    seguirà un criterio alfabetico nell' ordinare; ad esempio, 44 viene prima di 9 considerando il primo carattere che compone 44

  7. #7
    Utente di HTML.it
    Registrato dal
    Oct 2006
    Messaggi
    86
    grazie mille! ora funziona, ti sono riconoscente per le dritte che mi hai dato mi saranno utili in futuro! buona pasqua e buona giornata!

  8. #8
    Utente bannato
    Registrato dal
    Apr 2009
    Messaggi
    530
    Allora posso anche dirti che vi siete dimenticati TR nella sezione THEAD della tabella;
    e che i Tags, sebbene lo facciano in pochi, andrebbero chiusi così &#60;\/tr&#62; col carattere di escape quando sono portati da JavaScript, come lavorando con document.write o innerHTML
    Questo perché il giorno che vorresti far controllare il Documento (completato di !DOCTYPE HEAD e META Tag per il Content-Type) al W3C Validator incorreresti in errore.

    Una cosa che mi piacerebbe conservare del tuo primo codice, è che si aveva la stampa ad ogni inserimento di valore dal prompt; ora invece, l' utente "perde di vista" quanto sta inserendo. Rivede tutto alla fine.
    Una soluzione potrebbe essere così schematizzata:

    &#160; &#160; &#160; &#160; &#160; &#160;Container Tab
    |---------------|---------------|
    | |-----------| | |-----------| |
    | | Unordered | | |&#160; Ordered&#160; | |
    | | &#160; &#160;Tab&#160; &#160; | | |&#160; &#160; Tab&#160; &#160; | |
    | |-----------| | |-----------| |
    |---------------|---------------|


    Una Tabella Contenitrice a 2 celle affiancate, che contengono altre due Tabelle:
    nella prima cella, si parte già a far scrivere la Tabella coi valori inseriti, nel corso del primo for ; che può essere così arrivare ai suoi Tags di chiusura.
    Quindi si fa il .sort()
    si procede con la seconda cella ed infine, si chiude la Tabella dei Valori Ordinati e la Tabella Contenitrice.

    L' allineamento verrebbe mantenuto dalla dimensione/altezza del font, invariato da una tabella all' altra.
    Resterebbe però da fronteggiare il caso in cui l' utente invii il prompt vuoto ("OK") o scelga "Cancel".

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.