Vai al contenuto
Topos Uranos

Riepilogo

Questa lezione apre la seconda unità del corso, dedicata ai dati e ai loro tipi. Spiega a che cosa serve l’unità: insegnare che ogni dato di un programma vive nella memoria con un tipo che stabilisce quali valori può assumere, quanto spazio occupa e quali operazioni ammette, e che questi limiti hanno conseguenze osservabili; presenta le sue quattro lezioni e il filo che le unisce, dalla variabile come cella con un nome e un valore fino alle conversioni tra tipi e alle costanti; ricorda ciò che l’unità dà per scontato della prima, cioè scrivere, compilare ed eseguire un programma che legge e scrive; formula il problema che l’unità risolve, quello di un programma corretto in apparenza i cui calcoli non coincidono con quelli della matematica, a cominciare dalla somma 0.1+0.20.1 + 0.2, che in un computer non dà esattamente 0.30.3; 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 ciascuna lezione apporta alla successiva.
  2. Richiamare il necessario dell’unità 1 (il ciclo di compilare ed eseguire, l’output formattato, la lettura con std::cin e la lettura dei messaggi del compilatore) e ripassarlo se occorre.
  3. Spiegare, con un esempio, perché un numero di un programma non è un numero della matematica, e anticipare perché 0.1+0.20.1 + 0.2 non è esattamente 0.30.3 in un computer.
  4. Riconoscere che cosa ci si aspetta di saper fare alla fine 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 della prima: seguire un procedimento passo per passo, scrivere un numero con due decimali, arrotondare e leggere un messaggio di errore. Le sei successive toccano, nell’ordine delle lezioni, le idee centrali dell’unità. Nessuno è tenuto a indovinarle già, e in una 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à precedentiUn procedimento dice: «1. rr assume il valore 17. 2. rr assume il valore r−5r - 5. 3. rr assume il valore r−5r - 5». Quanto vale rr alla fine?

  2. Domanda 2Dalle unità precedentiChe cosa scrive l’istruzione std::println("{:.2f}", 2.0 / 3);?

  3. Domanda 3Dalle unità precedentiSi vuole scrivere 12.34612.346 con due decimali, arrotondando. Che cosa si ottiene?

  4. Domanda 4Dalle unità precedentiUn programma ha alla riga 5 const int pages{12} e alla riga 6 std::println("{}", pages);. Il compilatore scrive 6:5: error: expected ',' or ';' before 'std'. Dov’è il difetto?

  5. Domanda 5Un programma dichiara int a{2}; e int b{7};, e poi esegue a = b; e b = 10;. Quanto vale a alla fine?

  6. Domanda 6Come si scrive il numero 13 in base 2?

  7. Domanda 7Un int di 4 byte contiene 2 147 483 6472\,147\,483\,647, il suo valore massimo, e il programma gli somma 1. Che cosa si può affermare?

  8. Domanda 81/31/3 ha uno sviluppo decimale finito?

  9. Domanda 9Che cosa scrive std::println("{}", 0.1 + 0.2);?

  10. Domanda 10Un programma dichiara const double ratio{7 / 2}; e scrive ratio. Che cosa compare?