APPLEZ 1.0 - DIARIO DI BORDO
Transcript
APPLEZ 1.0 - DIARIO DI BORDO
CLASSE: 3-A MATERIA: INFORMATICA APPLEZ 1.0 - DIARIO DI BORDO (al 5/11/2014) BOZZA ( in revisione continua ) LEZIONE DEL 19/09 (DALLE 09.30 ALLE 10.30): Perché fare un corso di informatica che dura tre anni? Resterà deluso chi si aspetta di smanettare. La domanda di rigore: Perché si studia? Alcuni alunni intervengono fornendo risposte piuttosto diverse. Interno VS. esterno: cosa è più importante? Rappresentazione insiemistica: U(Universo del discorso), I (Individuo) E (Esterno). LEZIONE DEL 22/09 (DALLE 08.30 ALLE 10.30): Appello. Si chiude l’intervista. Sul metodo: Perché manca la volontà? A che serve fare un qualsiasi corso se manca la voglia? E’ tempo perso: Meglio dedicarsi a qualche attività che potrà riempire il cuore o le tasche forse non lo spirito. Molto spesso si passano ore davanti al computer lunghe veglie notturne a far che? A studiare? Forse i genitori pensano che sia così ma NOI SAPPIAMO CHE COSI’ NON E’. “La vostra stanza è un’area off-limits”. Come e quanto si può perdere tempo al computer. Se siete ignoranti rischiate di non essere liberi. Rischiate di essere asserviti a qualche forma di potere. “Alzate il livello di guardia quando andate nella piazza virtuale” Importanza dell’attività di laboratorio. La materia che avete scelto è l’unica a permettervi di avere un intero laboratorio a casa vostra. La parola d’ordine dello studente di informatica è: “Proff FUNZIONA!” e invece non funziona mai. NON C’E’ SALVEZZA AL DI FUORI DI NOI STESSI. Non pensate di affidare a delle macchine la soluzione dei vostri “reali” problemi. Le macchine NON SONO LIBERE. [Come e perché si studia: si dovrebbe studiare per se stessi; gli orizzonti professionali e tecnici della disciplina sempre più orientati alla collaborazione in Rete; il rapporto tra l’uomo e la macchina: l’uomo decide la macchina esegue; l’uomo pensa la macchina esegue la codifica del pensiero; ] DOMANDA (DI UN ALUNNO [Loddo]): QUANTI di TERZA ARRIVANO A DIPLOMARSI? L’ingegnere deve progettare non può improvvisare; anche l’informatico lo fa; l’attività di laboratorio non si improvvisa richiede applicazione a casa; gli appunti devono essere rivisti in continuazione. Ripetere un anno non è un disonore anzi può essere un bene ma di certo è uno spreco: di intelligenza, di soldi, di tasse, di tempo. Il mercato del lavoro oggi è molto difficile molto di più di qianto non lo sia stato per i vostri genitori. Alle porte dell’Occidente stanno premendo altre civiltà, altre culture, altre genti… Indiani (non gli indiani d’America ma indiani dell’India), Arabi, Cinesi… il grado di cultura di queste persone soprattutto in certi settori si accresce di giorno in giorno… la tendenza è sempre più quella di aprire le frontiere del lavoro prelevando o risorse [umane] dall’estero oppure usando all’estero lì dove sono le risorse [umane] è possibile con gli strumenti che si hanno oggi creare delle parterniship con aziende all’estero stando seduti, lavorando al computer, esclusivamente attraverso i media è possibile creare collaborazioni con programmatori indiani, cinesi, è possibile farlo, ci sono aziende che lo fanno, e che stanno prosperando. Le vostre competenze la vostra sete, il vostro desiderio di conoscenza di competenza dovrebbe misurarsi con queste sfide, è inutile nasconderlo… se non volete accettare la sfida siete finiti… potrete rivolgervi al sindacato andrete ad occupare le liste di disoccupazione, sarete, come dire, vittime del ricatto politico perché anche di questo si parla da noi, non del merito ma del ricatto politico se mi dai un voto se… Siamo allo schifo e lo schifo ci sta salendo sino alla bocca. Ragazzi siate uomini e contate sulle vostre forze avete le capacità per rifiutare i ricatti politici ma lo dovete fare sin da subito Io non ho chiesto niente a nessuno e vorrei che fosse la stessa cosa per voi (…) UOMINI, UOMINI riflettete su questo. C’è in generale tutto quello che vo potrà servire non solo in informatica. DECALOGO 1) Lo studio dell’informatica prescinde in larga misura dall’uso del computer che dovrà essere visto come un mezzo di approfondimento per ricerche in Rete 2) L’attività di programmazione a parte la fase di testing non richiede l’uso del computer al punto che paradossalmente potremmo dire che: 3) Si programma senza computer (!) [il computer non è un DEUS EX MACHINA, la programmazione che è fondamentalmente attività di progettazione deve essere fatta con il computer spento) la programmazione solo in parte è ripetitiva è una disciplina che richiede ragionamento] Preferiamo sempre il sentiero alla giungla L’algoritmo prescinde completamente dal linguaggio di programmazione mentre dipende dall’esecutore (eventualmente umano) 4) Strumenti fondamentali dell’informatico: carta+gomma+matita [+ righello/normografo] Carta= quaderno bella + quaderno brutta Gomma = per l’attività critica, la revisione Matita = perché in genere gli algoritmi e i codici sono prodotti rivedibili e manutenibili cioè modificabili Importanza degli appunti e della loro rielaborazione: il corso di informatica sarà “liscio” con passaggi facili, graduali e regolari; senza rielaborazione la comprensione degli argomenti sarà superficiale e temporanea e si sarà costretti a rincorrere Il profitto che è cosa diversa dall’intelligenza perché dipende molto dallo studio sarà misurato su scritto orale e pratico. Nessuno di noi è un genio siamo solo delle persone che si sforzano di far bene: se ci riconosciamo in questo quadretto avrete più di sei in questa materia altrimenti nel ritratto non vedrete nulla. Suggerimento: quaderno ad anelli anche per mettere nelle buste i programmi che scriverete e le relazioni che svolgerete : in questo raccoglitore potrete mettere tutto. LEZIONE DEL 24/09 (DALLE 10.30 ALLE 12.30): (1H) Definizione di RAM: numerosi gli interventi e le approssimazioni. (2H) Storia del calcolo automatico: Pascal, Leibniz, Babbage, Ada, Turing LEZIONE DEL 29/10 (DALLE 10.30 ALLE 12.30): Storia dell’informatica: dalle prime macchine calcolatrici alla macchina analitica di Charles Babbage e ai primi programmi della storia del calcolo scritti da Ada contessa di Lovelace; Turing padre dell’intelligenza artificiale e primo decrittatore in senso moderno. LEZIONE DEL 01/10 (DALLE 11.30 ALLE 12.30): Alcuni allievi vengono chiamati ad esporre sinteticamente i principali contenuti della lezione precedente alla luce dei risultati delle ricerche in Rete. La storia del calcolo è trattata da due di essi soltanto e limitatamente alle conquiste dall’ottocento in poi. Informatica: dalla parola agli automi al golem a Frankestein sino ad HAL9000 tra storia letteratura e leggenda. LEZIONE DEL 02/10 [LABORATORIO] Completamento della scheda tecnica (1h); Poligoni regolari di N lati: calcolo del perimetro e determinazione approssimata del numero trascendente PI GRECO. Uso del foglio di calcolo e ricerca sulla Rete. [COMPITI ASSEGNATI] Miglioramento della presentazione dei risultati. Ricerche ed approfondimenti sulla Rete. LEZIONE DEL 06/10 [ARGOMENI DELLA LEZIONE] Problemi, algoritmi e programmi: presentazione e discussione di alcuni concetti chiave del corso di informatica. Il problema come punto di partenza e punto di arrivo, come domanda che merita una risposta che coinvolge integralmente le capacità del risolutore (obbligo, impegno, responsabilità, creatività, conoscenza). L’algoritmo come rappresentazione grafico-concettuale della strategia risolutiva di un problema. Il programma come traduzione "meccanica" (nel senso della necessità e dell’adeguata corrispondenza) di un algoritmo (mediante le regole , il lessico ed i meccanismi di un linguaggio di programmazione) destinata ad un esecutore automatico. [COMPITI ASSEGNATI] Ricerche ed approfondimenti sulla Rete dei concetti e delle parole chiave evidenziati nel corso della lezione. [RIFLESSIONI] Un ALGORITMO è la descrizione “precisa” (sufficientemente dettagliata) delle AZIONI (PASSI) di un PROCESSO RISOLUTIVO (la strategia, la risoluzione del PROBLEMA) destinata ad un ESECUTORE dotato di certe CAPACITÀ. Un ALGORITMO è una descrizione linguistica della RISOLUZIONE di un PROBLEMA fatta attraverso un LINGUAGGIO : tale descrizione deve essere comprensibile da parte di un ESECUTORE. Il LINGUAGGIO usato per questa descrizione è di natura qualsiasi: può essere un LINGUAGGIO NATURALE (quello parlato da una comunità umana, ad esempio l’ITALIANO, il CINESE, l’ARABO), può essere un linguaggio comprensibile da una MACCHINA (un LINGUAGGIO DI PROGRAMMAZIONE) oppure un qualsiasi altro sistema di comunicazione tra uomini, tra macchine, tra uomini e macchine. Ad esempio un ALGORITMO può essere descritto attraverso un DIAGRAMMA DI FLUSSO (Strutturato o NON) che evidentemente non è né un linguaggio naturale né un linguaggio di programmazione. Un DIAGRAMMA di FLUSSO esprime la risoluzione di un PROBLEMA attraverso una modalità GRAFICOCONCETTUALE servendosi di particolari di “forme grafiche” che servono a veicolare IDEE/CONCETTI/ATTIVITÀ/FLUSSI/CAMBIAMENTI. Il DIAGRAMMA di FLUSSO codifica una strategia risolutiva in modo indipendente dal LINGUAGGIO DI PROGRAMMAZIONE; codifica in modo indipendente tutti gli aspetti legati al CALCOLO (e più in generale alla ELABORAZIONE delle INFORMAZIONI), per questa sua indipendenza da uno specifico linguaggio di programmazione si considera l’algoritmo dato attraverso un DIAGRAMMA di FLUSSO come un METALINGUAGGIO ovvero un linguaggio che serve a descriverne un altro. Una importantissima conseguenza di ciò è data dal fatto che: Un diagramma di flusso può essere sempre tradotto in un qualsiasi CODICE di PROGRAMMA. Il fatto che i diagrammi di flusso servano a fornire la risoluzione generale di un problema servano cioè a descrivere ALGORITMI e NON PROGRAMMI è stato più volte sottolineato evidenziando la differenza tra i simboli che compaiono nei BLOCCHI di un FLOWCHART e quelli che compaiono nelle ISTRUZIONI di un codice di programma: ESEMPIO: L’operatore relazione di confronto è rappresentato dal simbolo ‘=’ lo stesso che può comparire in un BLOCCO DI DECISIONE (“ROMBO/LOSANGA”); mentre l’operatore di confronto del LINGUAGGIO C è rappresentato come “= =”: l’operazione è la stessa ma una è quella più ASTRATTA possibile (la relazione matematica di UGUAGLIANZA), l’altra è una operazione CONCRETA una operazione, cioè che richiede una MACCHINA FISICA (leggi CALCOLATORE /COMPUTER / ELABORATORE). REGOLA: un DIAGRAMMA di FLUSSO NON DEVE mai contenere i SIMBOLI OPERATORI propri di uno specifico LINGUAGGIO di PROGRAMMAZIONE. Ogni violazione di questa regola implica sempre una perdita di generalità e la generalità è una delle caratteristiche degli algoritmi. LEZIONE DEL 07/10 [ARGOMENI DELLA LEZIONE] Dalla "macchina nuda" sino al SW applicativo attraverso la catena di livelli di astrazione crescente delle risorse del sistema. Gli ambienti di sviluppo integrato del software (IDE): funzionalità di base. Dal problema al programma: la risoluzione algoritmica del problema (Flow Chart), la generazione del Codice Sorgente (Text-Editor), la traduzione del codice (Interprete o Compilatore), l’esecuzione del file binario, la verifica dei risultati ottenuti. [RIFLESSIONI] La “macchina nuda” (“bare machine”) è il computer fisicamente dato, il computer come MACCHINA CONCRETA, come solo HARDWARE (HW): metallo, plastica, LED, silicio, rame, transistor, porte logiche, registri di memoria, piste, scheda madre, processori, banche di memoria centrale, apparati di dissipazione termica, unità di memorie esterne, … Questa macchina, per quanto NATIVAMENTE PROGRAMMABILE sarebbe tuttavia praticamente inutilizzabile da parte di un UTENTE FINALE perché la sua effettiva PROGRAMMAZIONE comporterebbe problemi e difficoltà PRATICAMENTE INSORMONTABILI: ricordiamo che Le macchine (tutte le macchine) nascono per risolvere problemi, non per crearne. La “macchina nuda” dunque rappresenta la base, il sostrato fisico al di sopra del quale viene realizzata una macchina realmente orientata ai BISOGNI (come pure ai PIACERI) dell’UOMO, una macchina (computer) cioè in grado di essere usata con “relativa” facilità, in modo “sicuro” ed anche efficace. Per conseguire questi obiettivi (e si noti che ci si lavora di continuo nel tentativo di migliorarli costantemente) è necessario dotare la macchina della LOGICA necessaria a favorire l’INTERAZIONE con l’UOMO (INTERAZIONE UOMO- MACCHINA): questa logica prende il nome di SOFTWARE (SW) che si combina con l’HARDWARE per dare origine a quella macchina molto speciale che chiamiamo ELABORATORE o CALCOLATORE o COMPUTER. Come tutti gli abiti, anche il SW è fatto di STRATI (LAYERS) sovrapposti, cioè non si presenta come una struttura monolitica ma come un sistema di parti organizzate secondo una precisa GERARCHIA in modo che ciascuna di esse per poter svolgere la propria FUNZIONE abbia bisogno di appoggiarsi sulla parte sottostante immediatamente adiacente. Un esempio “superficiale” di ciò è costituito dalla struttura di un edificio a più piani: ogni piano richiede la presenza del piano sottostante (questo in un certo senso vale anche per il piano terra che a ben guardare richiede la presenza di un “livello base” (un vero e proprio “ground zero”) senza il quale non potrebbe esistere: questo livello base nel caso dell’elaboratore è costituito dalla “macchina nuda”. Tecnicamente si dice che ogni strato implementa una diversa MACCHINA VIRTUALE (“virtual machine”) cioè una differente MACCHINA ASTRATTA le cui CAPACITÀ sono definite nei termini delle capacità della MACCHINA VIRTUALE sottostante. Un modello grafico del sistema di macchine virtuali (o alternativamente degli strati funzionali di un elaboratore) fa riferimento alla struttura interna di una pianta molto “profumata”: la cipolla: provatene a tagliare una a metà e capirete perché. Per questo motivo si parla di “struttura/organizzazione/architettura a buccia di cipolla” ( “onion-skin architecture”) LEZIONE DEL 08/10 [ARGOMENI DELLA LEZIONE] Diagrammi A Blocchi (DAB/DABS): generalità;blocchi di Inizio/Fine; blocchi di Input/Output; blocco di azione; freccia di connessione interblocco (trasferimento del controllo). [COMPITI ASSEGNATI] Ricerca e approfondimenti sulla Rete [RIFLESSIONI] I diagrammi di flusso che useremo per descrivere algoritmi (e gli algoritmi stessi, quando non vi sia possibilità di confusione) li chiameremo con gli acronimi DAB o DABS che significano rispettivamente: Diagrammi A Blocchi e Diagrammi A Blocchi Strutturati. DAB è sinonimo di Diagramma di Flusso (Flowchart). La parola “Strutturato” in DABS serve ad aggiungere delle ulteriori regole di “struttura” ai DAB semplici: l’assenza di queste regole ha dato origine ad un tipo di programmazione che è nota come “spaghetti programming”: alla lettera “programmazione a spaghetti”. LEZIONE DEL 09/10 [LABORATORIO] Esercitazione alle macchine in linguaggio C sui poligoni regolari di N lati: determinazione del perimetro come misura approssimata della costante numerica PI GRECO. LEZIONE DEL 13/10 [ARGOMENI DELLA LEZIONE] Operazioni di Input/Output Valorizzazione di variabili di programma mediante operazioni di lettura (INPUT) di valori esterni. Produzione di messaggi (stringhe di testo) costanti e valori di variabili diretti all’utente mediante operazioni di scrittura (OUTPUT). Operazioni di I/O in C: puts() vs. printf(). Le stringhe in C: generalità. LEZIONE DEL 14/10 [ARGOMENI DELLA LEZIONE] DAB e DABS: il blocco condizionale. Algoritmi strettamente sequenziali vs. algoritmi con diramazioni e flussi alternativi del controllo. Il blocco condizionale e la logica booleana. Le espressioni condizionali come espressioni di tipo speciale. Definizione di espressione. Definizione di espressione logica. Regola del trasferimento del flusso del controllo per i blocchi condizionali. Rappresentazione grafica del flusso del controllo in DAB con condizioni. Presenza di percorsi alternativi sullo stesso DAB per esecuzioni con input diversi. Numeri e numeri di macchina: i limiti della rappresentazione dell’informazione nel calcolatore. [COMPITI ASSEGNATI] Prendere in considerazione il test di parità/disparità per numeri interi, discutere il problema, definire un DAB/DABS e provarne il comportamento con valori di input diversi tracciando con colori diversi tutti i possibili percorsi del flusso del controllo. LEZIONE DEL 15/10 [ARGOMENI DELLA LEZIONE] Riepilogo della lezione precedente. Presentazione del problema: Test di Parità/Disparità. [COMPITI ASSEGNATI] Produzione del flowchart relativo alla risoluzione del problema: "Test di Parità/Disparità" LEZIONE DEL 16/10 [LABORATORIO] Esercitazione alle macchine: programmazione in C. Traduzione del DABS relativo all’algoritmo di PARITA’/DISPARITA’ attraverso l’istruzione di selezione if-else. Osservazioni sulle convenzioni di codifica in C e sulla documentazione del codice : caratteri di spaziatura, commenti (/**/), indentazione (allineamento rientrato del testo). Osservazioni e miglioramento delle interfacce utente usate per l’immissione di valori e la produzione di messaggi. Il file di intestazione <limits.h> ed i limiti (inferiore e superiore) di rappresentazione dei numeri interi di macchina: le costanti INTMIN e INTMAX. Uso delle costanti INTMIN e INTMAX per migliorare l’interfaccia del programma. [COMPITI ASSEGNATI] 1) Riformulare l’algoritmo di PARITA’/DISPARITA’ ricorrendo all’operazione Modulo (resto della divisione intera) e al corrispondente operatore del C; 2) Riformulare lo stesso algoritmo prevedendo un intervallo di valori di ammissibilità cioè un intervallo di interi del tipo [minimo, massimo] in cui "minimo" e "massimo" sono 2 numeri scelti e prefissati dal risolutore del problema che serviranno a stabilire l’insieme dei valori da usare per il Test di PARITA’/DISPARITA’: l’algoritmo questa volta dovrà decidere come prima cosa se il valore immesso è un valore idoneo oppure no: nel primo caso si effettuerà il test di PARITA’ nel secondo no e si produrrà un adeguato messaggio di output. LEZIONE DEL 21/10 [ARGOMENI DELLA LEZIONE] Dai DAB ai DABS: caratteristiche generali dei DAB Strutturati. Unicità dei punti di ingresso e di uscita. Accoppiamento sequenziale di due DABS; DABS per la Selezione a 1 via; DABS per la Selezione a 2 vie. Costrutti di programmazione C per la traduzione dei DABS di selezione: "if" e "if-else". Esempi di traduzione: da DABS a C. Blocco di Azione condizionato: elementare oppure composto (Macrozazione).Traduzione del Blocco di Azione condizionato. Trasformazione di un DABS di "Selezione a 1 via" non standard. Un esempio d’uso della macroazione: lo SWAP tra variabili. DABS per lo swap con variabile ausiliaria. Lo swap come macroazione condizionata nel problema dell’inversione degli estremi di un intervallo numerico. Discussione completa del DABS. Traduzione del DABS in codice C. Discussione del problema dell’appartenenza di un numero N arbitrario ad un intervallo numerico. Dati di input campione e risultati correlati. Formulazione del DABS di massima. Traduzione "parziale" del DABS. [COMPITI ASSEGNATI] PROBLEMA: Dato un intervallo di numeri interi di estremi P1 e P2, dato un numero intero arbitrario N, decidere se N è interno o esterno all’intervallo assegnato. - Discussione della traccia - Individuazione delle variabili - Scelta dei campioni di dati di input e determinazione degli output associati - Realizzazione di un Algoritmo risolvente attraverso la stesura di un DABS - Traduzione del DABS in codice sorgente C; - Compilazione - Prove di Esecuzione - Documentazione LEZIONE DEL 22/10 [ARGOMENI DELLA LEZIONE] Verifica dello stato delle consegne. Il concetto di variabile di programma: nome+valore+tipo. Variabili Primitive e NON Primitive. Variabili di tipo primitivo in C. Le operazioni sulle variabili (Lettura/Scrittura) e le loro proprietà. Le operazioni di scrittura: interna (assegnamento) esterna (attraverso un dispositivo di input, ad esempio la tastiera). L’operazione di assegnamento interno ed il suo significato. [COMPITI ASSEGNATI] Fare da zero oppure completare oppure integrare oppure perfezionare la risoluzione dei problemi già assegnati. Sistemare gli appunti delle lezioni. LEZIONE DEL 23/10 [LABORATORIO] Esercitazione alle macchine in C: implementazione, verifica e miglioramento del programma sul "Test di Appartenenza". I SOLUZIONE (proposta): II SOLUZIONE (con macroazioe di SWAP): Introduzione di messaggi di testo più precisi nelle stringhe di output. Introduzione di commenti nel codice sorgente. Incolonnamento differenziato del codice sorgente (la cosiddetta “indentazione del testo”): questa operazione si rivela di estrema importanza per le attività di comprensione “ a posteriori” del programma: è uno dei requisiti fondamentali della scrittura di un codice di programma quallo di poterlo scrivere in modo strutturato cioè in modo da dare al codice di programma una “struttura” una “forma” che permetta di comprendere le dipendenze tra le istruzioni e più in generale consenta di seguire agevolmente il flusso del controllo. Impensabile scrivere un programma utilizzando un linguaggio di alto livello come se si trattasse di un linguaggio di basso livello (ad esempio Assembly). Successivamente si chiede di poter dotare il programma di una sorta di "disclaimer" che ne condizioni l’uso in base ad una decisione dell’utente finale. [COMPITI ASSEGNATI] Progettare e programmare la risoluzione dei seguenti problemi: 1) min(/max) tra due variabili; 2) max(/min) fra tre variabili; 3) Test di Appartenenza di un punto di coordinate (X,Y) ad un quadrato di cui è noto il vertice alto sinistro e la misura del lato 4) Acquisizione mediante input dei valori di età dei membri della famiglia e generazione di una tabella costituita da coppie del tipo < n° membro, età> da produrre su righe distinte in una cornice di caratteri scelti a piacere. LEZIONE DEL 27/10 Elezioni del Consiglio di Classe, del Consiglio di Istituto e della Consulta provinciale. LEZIONE DEL 28/10 [LABORATORIO] Esercitazione in C sui problemi assegnati. In particolare, con riferimento al problema n° 3 si discute la NON RISOLVIBILITA’ del Test di appartenenza di un punto ad un rettangolo - per l’insufficienza dei dati noti. Nel caso di rettangoli il problema quindi viene riformulato fornendo alternativamente: a) Un vertice e le misure dei lati che originano nel vertice stessoi; b) Le coordinate di due vertici opposti (ovvero le coordinate dei vertici di una diagonale). Vengono presentate le funzionalità di base di un semplice editor di flowchart. [COMPITI ASSEGNATI] Affrontare e/o completare e/o migliorare l’esecuzione delle consegne non ancora sviluppate. Affrontare ex novo il problema del "Test di appartenenza di un punto ad un rettangolo". Utilizzando un editor di flowchart definire il DABS relativo al problema n°2 (min/max fra 3 (tre) numeri) LEZIONE DEL 29/10 Numeri interi come sequenze di cifre; Numeri interi in base dieci: nozione di base, cifra, significatività (esponente della potenza intera in base B); cifra più significativa (MSD), cifra meno significativa (LSD); numero e valore del numero; valore numerico come somma di prodotti; metodo divisivo per la determinazione delle cifre di un numero in ordine di significatività crescente (da destra verso sinistra, nella serie delle cifre del numero); la divisione ela divisone intera; i termini della divisione intera: dividendo (D), divisore (d), quoziente (q), resto(r); la "formula" della divisione intera: D = d x q + r; la determinazione di ciascuna cifra col metodo divisivo; una nuova operazione aritmetica: il modulo tra due numeri interi X ed Y (X MODULO Y); l’operazione modulo nei flowchart; l’operazione modulo in C: l’"operatore percentuale" (%); impostazioni di progetto preliminari per il problema della "Determinazione delle cifre di un numero intero di 4 cifre". [COMPITI ASSEGNATI] Discutere, progettare (formulare l’algoritmo con un DABS), programmare in C e validare con dati di prova, una soluzione per il problema della separazione delle cifre di un numero di 4 cifre. LEZIONE DEL 30/10 Riepilogo dei principali contenuti della lezione precedente. Generalizzazione della formula per il calcolo del valore di un numero in base B: l’operatore "sommatoria" e le cifre di ordine ’i’ (in simboli: "c con i " dove ’i’ è pedice generico della cifra). Proposta di risoluzione algoritmica mediante DABS per il problema assegnato nella lezione precedente. Il DABS proposto integra un test di ammissibilità per il numero a 4 cifre (test di appartenenza all’intervallo [1000,9999]; il DABS usa una "Legenda" per definire il simbolo ’A’ usato nelle due ellissi (quella di "Inizio" e quella di "Fine"), un commento (elemento grafico: parentesi quadra chiusa con arco di connessione al blocco) per descrivere la condizione di appartenenza, ed un punto di prosecuzione (elemento grafico: circoletto). Il test di appartenenza è espresso attraverso due costrutti di selezione a due vie nidificati; le variabili utilizzate sono tutte di tipo intero: 4 variabili per le cifre, 1 per il numero, 1, per il dividendo, 1 per il quoziente ed 1 per il resto. Per ogni cifra si richiede il calcolo del resto; per ogni cifra, esclusa la cifra LSD si richiede la determinazione del nuovo dividendo. Un unico blocco di output per la visualizzazione delle cifre in ordine inverso. [COMPITI ASSEGNATI] Traduzione del DABS proposto in linguaggio C; scelta di un campione significativo di dati di Input e validazione del codice di programma; documentazione del codice di programma. Proposta di una soluzione alternativa nella quale si utilizza una sola variabile per tutte e quattro le cifre, e si produce in Output il suo valore prima che esso cambi (1 variabile + 4 Output al posto di 4 variabili + 1 Ouput): anche per questa soluzione si chiede DABS + Programma.