3E e 3I SIA: Gli array paralleli ed esercizio "Inventario"

 

Cosa sono gli Array Paralleli?

Lezione del 9 gennaio 2026 – ore 11 - Laboratorio Cisco Itet A. Bassi di Lodi
prof. Paolo Latella

Gli array paralleli sono due o più array della stessa lunghezza in cui gli elementi corrispondenti (quelli con lo stesso indice) sono logicamente collegati tra loro.

Immagina di voler gestire un database di studenti e i loro voti:

  • L'array studenti conterrà i nomi.
  • L'array voti conterrà i risultati.
  • Se "Mario" è all'indice 0 di studenti, il suo voto sarà all'indice 0 di voti.

Esempio Pratico: Gestione Inventario

Supponiamo di voler gestire un piccolo magazzino di frutta. Abbiamo bisogno di tre informazioni: il nome del prodotto, la quantità disponibile e il prezzo unitario.

1. Dichiarazione degli Array

Per prima cosa, definiamo i nostri dati. È fondamentale che ogni array abbia lo stesso numero di elementi.

JavaScript

let prodotti = ["Mele", "Pere", "Banane"];
let quantita = [50, 30, 100];
let prezzi = [1.50, 2.00, 0.80];

2. Accedere ai dati correlati

Per leggere i dati di un singolo articolo (ad esempio, le Pere), dobbiamo usare lo stesso indice su tutti gli array.

 JavaScript

 let i = 1; // Le "Pere" si trovano all'indice 1

console.log("Prodotto: " + prodotti[i]); // "Pere"
console.log("Disponibilità: " + quantita[i]); // 30
console.log("Prezzo: €" + prezzi[i]); // 2.00

Le Istruzioni Chiave: Il Ciclo for

La potenza degli array paralleli si esprime quando usiamo i cicli. Poiché gli indici coincidono, un singolo ciclo for può processare tutti i dati contemporaneamente.

Visualizzare l'intero inventario

 JavaScript

 for (let i = 0; i < prodotti.length; i++) {

    console.log(`${prodotti[i]}: ${quantita[i]} pezzi a €${prezzi[i]} l'uno.`);
}
Spiegazione del codice:

  • let i = 0: Inizializziamo il contatore dall'indice 0 (il primo elemento).
  • i < prodotti.length: Il ciclo continua finché non abbiamo scorso tutto l'array.
  • i++: Incrementiamo l'indice a ogni passaggio.
  • prodotti[i]: Accediamo dinamicamente all'elemento corrente di ogni array usando la variabile i.

Pro e Contro degli Array Paralleli

Vantaggi

Svantaggi

Molto semplici da capire per i principianti.

Difficili da mantenere (se elimini un elemento in un array e non negli altri, i dati si "sfalsano").

Veloci da implementare per piccoli script.

Non rappresentano bene la realtà (un oggetto "Prodotto" sarebbe più logico).

Utili per algoritmi matematici semplici.

Il codice diventa confusionario all'aumentare delle dimensioni.


  

In questo esercizio, faremo un salto di qualità. Creeremo una piccola interfaccia HTML con dei pulsanti per gestire il nostro inventario (Prodotti e Quantità) usando gli array paralleli.

Ecco il codice completo che puoi copiare in un file .html e aprire nel tuo browser.

HTML

<!DOCTYPE html>

<html lang="it">

<head>

    <meta charset="UTF-8">

    <title>Gestione Inventario Array Paralleli</title>

    <style>

        body { font-family: sans-serif; margin: 20px; line-height: 1.6; }

        .menu { margin-bottom: 20px; padding: 15px; background: #f4f4f4; border-radius: 8px; }

        input { margin: 5px; padding: 8px; }

        button { padding: 8px 15px; cursor: pointer; background: #007bff; color: white; border: none; border-radius: 4px; }

        button:hover { background: #0056b3; }

        .output { margin-top: 20px; border-top: 2px solid #ddd; padding-top: 10px; }

        .item { background: #eee; margin: 5px 0; padding: 10px; display: flex; justify-content: space-between; }

    </style>

</head>

<body>

     <h1>📦 Gestione Inventario</h1>

     <div class="menu">

        <h3>Aggiungi o Modifica Prodotto</h3>

        <input type="text" id="nomeProdotto" placeholder="Nome prodotto (es. Mele)">

        <input type="number" id="quantitaProdotto" placeholder="Quantità">

        <br>

        <button onclick="aggiungiOModifica()">Salva Prodotto</button>

        <button onclick="cancellaProdotto()">Elimina per Nome</button>

        <button onclick="visualizzaInventario()">Aggiorna Lista</button>

    </div>

     <div class="output" id="listaInventario">

        <p>L'inventario è vuoto. Aggiungi un prodotto!</p>

    </div>

     <script>

        // 1. DICHIARAZIONE DEGLI ARRAY PARALLELI

        let nomi = ["Mele", "Pere"];

        let scorte = [50, 30];

         // 2. FUNZIONE PER VISUALIZZARE (READ)

        function visualizzaInventario() {

            const container = document.getElementById("listaInventario");

            container.innerHTML = "<h3>Inventario Attuale:</h3>";

             if (nomi.length === 0) {

                container.innerHTML += "<p>Inventario vuoto.</p>";

                return;

            }

             for (let i = 0; i < nomi.length; i++) {

                container.innerHTML += `

                    <div class="item">

                        <span><strong>${nomi[i]}</strong>: ${scorte[i]} unità</span>

                        <button style="background:red" onclick="eliminaPerIndice(${i})">X</button>

                    </div>`;

            }

        }

         // 3. FUNZIONE PER INSERIMENTO E MODIFICA (CREATE / UPDATE)

        function aggiungiOModifica() {

            const nomeInput = document.getElementById("nomeProdotto").value.trim();

            const quantitaInput = parseInt(document.getElementById("quantitaProdotto").value);

 

            if (nomeInput === "" || isNaN(quantitaInput)) {

                alert("Inserisci dati validi!");

                return;

            }

             // Cerchiamo se il prodotto esiste già (Modifica)

            let indiceTrovato = nomi.indexOf(nomeInput);

 

            if (indiceTrovato !== -1) {

                // Se esiste, aggiorniamo la quantità nell'array parallelo

                scorte[indiceTrovato] = quantitaInput;

                alert("Quantità aggiornata!");

            } else {

                // Se non esiste, aggiungiamo nuovi elementi a entrambi gli array

                nomi.push(nomeInput);

                scorte.push(quantitaInput);

                alert("Prodotto aggiunto!");

            }

 

            pulisciInput();

            visualizzaInventario();

        }

         // 4. FUNZIONE PER CANCELLAZIONE (DELETE)

        function cancellaProdotto() {

            const nomeInput = document.getElementById("nomeProdotto").value.trim();

            let indiceTrovato = nomi.indexOf(nomeInput);

             if (indiceTrovato !== -1) {

                // Rimuoviamo l'elemento da entrambi gli array usando lo stesso indice

                nomi.splice(indiceTrovato, 1);

                scorte.splice(indiceTrovato, 1);

                alert("Prodotto eliminato!");

            } else {

                alert("Prodotto non trovato.");

            }

                       pulisciInput();

            visualizzaInventario();

        }

         function eliminaPerIndice(i) {

            nomi.splice(i, 1);

            scorte.splice(i, 1);

            visualizzaInventario();

        }

 

        function pulisciInput() {

            document.getElementById("nomeProdotto").value = "";

            document.getElementById("quantitaProdotto").value = "";

        }

         // Visualizzazione iniziale

        visualizzaInventario();

    </script>

</body>

</html>

Spiegazione delle istruzioni Javascript usate:

nomi.indexOf(valore): Questa istruzione cerca valore dentro l'array nomi. Se lo trova, restituisce la sua posizione (indice), altrimenti restituisce -1. È fondamentale negli array paralleli perché l'indice trovato in nomi sarà lo stesso da usare in scorte.

nomi.push(valore): Aggiunge un nuovo elemento alla fine dell'array. Per mantenere la "parallelizzazione", dobbiamo fare il push su entrambi gli array contemporaneamente.

nomi.splice(indice, 1): Questa è l'istruzione per la cancellazione. Rimuove 1 elemento a partire dalla posizione indice. Anche qui, va eseguita su entrambi gli array per evitare che i dati si sfalsino.

Il controllo if (indiceTrovato !== -1): È la logica che gestisce sia la modifica che l'inserimento. Se l'indice esiste, sovrascriviamo il valore esistente (scorte[i] = nuovoValore), altrimenti aggiungiamo una nuova riga.

innerHTML: Viene usato per "disegnare" dinamicamente la lista HTML partendo dai dati contenuti negli array Javascript.

 

Commenti

Post popolari in questo blog

Esercizi in Excel e fogli di Google

Le domande (e le risposte) all'orale di informatica esame di stato nei corsi: Sistemi Informativi aziendali (ex programmatori), Itis Informatica (ex Abacus), Liceo Tecnologico