Vai al contenuto
Topos Uranos

Riepilogo

Questa lezione apre la sesta unità del corso, dedicata ai dati composti. Spiega a che cosa serve l’unità: insegnare a rappresentare collezioni di dati (sequenze di dimensione fissa e variabile, tabelle e record) e a elaborarle con gli algoritmi di base, scritti a mano e presi dalla libreria, stimando quanto costano; presenta le sue sei lezioni e il filo che le unisce; ricorda ciò che l’unità dà per scontato, soprattutto i cicli con invariante e il passaggio per riferimento costante; formula il problema che l’unità risolve, quello di un programma che deve conservare dati di cui non conosce la quantità e che, scritto con variabili sciolte, tace in silenzio quelli in eccesso; anticipa il costo come seconda misura di un algoritmo, accanto alla sua correttezza; e mostra dove conduce, nelle unità successive e nel corso Programmazione in C++ II.

Obiettivi di apprendimento

  1. Descrivere la sequenza dei contenuti dell’unità e spiegare che cosa apporta ciascuna lezione alla successiva.
  2. Ricordare i cicli, i loro invarianti e il passaggio dei parametri (per valore, per riferimento e per riferimento costante), e ripassarli se occorre.
  3. Anticipare, con un esempio, il costo di un algoritmo come seconda misura della sua qualità, accanto alla sua correttezza.
  4. Riconoscere che cosa ci si aspetta di saper fare al termine dell’unità, e distinguerlo da ciò che si imparerà nelle unità successive.

Valutazione d’ingresso

Prima di percorrere l’unità conviene misurare il punto di partenza. Questa valutazione è un’autovalutazione: non ha voto, e il suo unico scopo è orientare lo studio. Le prime quattro domande verificano ciò che l’unità dà per scontato: l’invariante del ciclo che cerca un massimo, la modalità di passaggio di un parametro grande, il numero di iterazioni di due cicli annidati e l’aritmetica senza segno. Le sei successive toccano, nell’ordine delle lezioni, le idee centrali dell’unità: gli indici validi di una sequenza, la creazione di un vettore, il numero di volte che una dimensione si può dividere a metà, la ricerca in dati ordinati, il doppio indice di una tabella e il pericolo di conservare in collezioni separate i dati di una stessa entità. Nessuno è tenuto a indovinarle già, e in alcune di esse «non lo so ancora» è una risposta onesta: ogni risposta, giusta o no, spiega il punto e nomina la lezione che lo tratta. Le stesse abilità si misurano di nuovo alla fine, nella lezione di sintesi.

Valutazione d’ingresso

Prima di iniziare l’unità, misura il tuo punto di partenza. È un’autovalutazione breve: non riceve voto e il risultato resta solo nel tuo browser.

  1. Domanda 1Dalle unità precedentiIl frammento int largest{0}; int t{}; while (std::cin >> t) { if (t > largest) { largest = t; } } deve lasciare in largest la più alta delle temperature lette. Con quale input fallisce?

  2. Domanda 2Dalle unità precedentiUna funzione calcola quante vocali ha un testo di un milione di caratteri, conservato in uno std::string, e non lo modifica. Come conviene dichiarare il suo parametro?

  3. Domanda 3Dalle unità precedentiQuante volte si esegue ++count in for (int i{0}; i < 6; ++i) { for (int j{0}; j < i; ++j) { ++count; } }?

  4. Domanda 4Dalle unità precedentiChe cosa scrive std::println("{}", 0u - 1); in un sistema con unsigned int di 32 bit?

  5. Domanda 5In una sequenza di nn elementi numerati come in C++, quali indici ii designano un elemento?

  6. Domanda 6Che cosa contiene v dopo std::vector<int> v(3, 7);?

  7. Domanda 7Quante iterazioni fa for (int m{1024}; m > 1; m /= 2) { ... }?

  8. Domanda 8Un elenco telefonico ha un milione di nomi in ordine alfabetico. Per trovarne uno, lo si apre a metà, si scarta la metà in cui il nome non può stare, e si ripete con l’altra. Quante volte, al massimo, bisogna aprirlo?

  9. Domanda 9Con std::vector<std::vector<int>> t{{1, 2, 3}, {4, 5, 6}};, quanto valgono t[1][0] e t.size()?

  10. Domanda 10Un programma conserva i nomi di un gruppo in un vettore e i loro voti in un altro, in modo che il voto grades[i] sia quello di names[i]. Se ordina solo il vettore dei voti, che cosa succede?