Vai al contenuto
Topos Uranos

Riepilogo

Questa lezione apre la settima unità del corso, dedicata al testo e ai file. Spiega a che cosa serve l’unità: insegnare a trattare il testo come dato, con la sua codifica reale, e a far sì che un programma legga e scriva file senza rompersi davanti a un input malformato; presenta le sue quattro lezioni e il filo che le unisce; ricorda ciò che l’unità dà per scontato, soprattutto che un carattere è, per la macchina, un numero, e i vettori, i record e le funzioni delle unità 5 e 6; formula il problema che l’unità risolve, quello di un programma dall’aspetto corretto che perde dati senza avvisare, si ferma alla prima riga inattesa e misura male i nomi con gli accenti; anticipa che una lettera non sempre occupa un byte; e mostra dove conduce, nell’unità 8 e nel corso Programmazione in C++ II.

Obiettivi di apprendimento

  1. Descrivere la sequenza dei contenuti dell’unità e spiegare che cosa ogni lezione apporta alla successiva.
  2. Ricordare la rappresentazione dei caratteri come codici numerici (lezione 2.4) e scrivere un codice in binario e in esadecimale.
  3. Anticipare, con un esempio, che una lettera non sempre è un byte, e che perciò contare byte non è contare lettere.
  4. Riconoscere che cosa ci si aspetta di saper fare alla fine dell’unità, e distinguerlo da ciò che si imparerà nell’unità successiva e in Programmazione in C++ II.

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 sei domande verificano ciò che l’unità dà per scontato: il codice di un carattere, la scrittura di un numero in binario e in esadecimale, una maschera di bit, il percorso di un vettore che ne filtra gli elementi, ciò che accade quando una lettura riceve lettere invece di un numero e la definizione di un record. Le quattro successive toccano, nell’ordine delle lezioni, le idee centrali dell’unità: ciò che restituisce una ricerca che non trova nulla, la dimensione di una parola con un accento, la riga vuota che compare quando si mescolano due modi di leggere e il file che non si è potuto aprire. Nessuno è tenuto a indovinare già queste quattro, 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à precedentiChe cosa scrive std::println("{:d} {:d}", 'A', 'a');?

  2. Domanda 2Dalle unità precedentiCome si scrive 233 in binario e in esadecimale?

  3. Domanda 3Dalle unità precedentiQuanto vale 0xB1 & 0xC0?

  4. Domanda 4Dalle unità precedentiChe cosa scrive std::vector<int> v{4, 7, 10, 3}; std::vector<int> w{}; for (const int x : v) { if (x % 2 == 0) { w.push_back(x); } } std::println("{}", w);?

  5. Domanda 5Dalle unità precedentiDopo int n{-1}; std::cin >> n;, l’utente digita abc. Quanto vale n e che cosa accade alle letture successive?

  6. Domanda 6Dalle unità precedentiQuale delle definizioni seguenti dichiara correttamente un record con un titolo e un anno?

  7. Domanda 7Se s è std::string s{"casa azul"};, che cosa restituisce s.find("x")?

  8. Domanda 8Che cosa scrive std::println("{}", std::string{"año"}.size()); in un programma salvato in UTF-8, come quelli di questo corso?

  9. Domanda 9Un programma esegue int age{}; std::string name{}; std::cin >> age; std::getline(std::cin, name); e l’utente digita 36, preme Invio, digita Ana e preme Invio. Che cosa resta in name?

  10. Domanda 10Un programma esegue std::ifstream in{"data.txt"}; int x{-1}; in >> x;, ma data.txt non esiste nella cartella da cui viene eseguito. Che cosa accade?