Sottounità S8 e S9

Discipline: informatica e matematica
Docenti: Giuseppe Frappa e Eda Duriavig

Programmare con parole e programmare con immagini
I segni in matematica

Finalità
Le lezioni mirano più che a migliorare le capacità di programmare degli allievi, a mettere in evidenza come dietro l'interfaccia anche dei programmi più 'confidenziali', dietro i 'bottoni' dell'interfaccia grafica, ci sia un lavoro di programmazione espresso attraverso un linguaggio verbale.
Questo dovrebbe anche rafforzare da un lato la consapevolezza che al momento, i computer che usano gli studenti sono in grado solo di eseguire istruzioni precedentemente fornite e dall'altro a stimolare l'esigenza di essere effettivi interlocutori della macchina.
Il discorso sui segni in matematica mira ad evidenziare come in questa disciplina coesistano e trovino reciproco arricchimento il linguaggio iconico e quello alfabetico.

Metodologia
Lezione frontale con uso di computer e video-proiettore DataDisplay
Lezione interattiva

Strumenti
Hardware: PC dotato delle seguenti caratteristiche minime:
CPU: 200 MHz
RAM: 64 MB
HD: 2 GB
Proiettore DataDisplay collegato al PC
Software: Sistema operativo Windows 95 o successivi;
Delphi 5 Professional;
Impostazioni di sistema:
risoluzione di schermo 640x480 pixels

Prerequisiti per gli allievi
matematici:
- conoscenza del concetto di base numerica;
- consapevolezza della differenza tra valore numerico e sua rappresentazione in un sistema di numerazione;
informatici:
- familiarità con la nozioni fondamentali dell'informatica: byte, file, file system;
- conoscenza di base del sistema operativo Windows 95 e/o successivi, come utente;
- familiarità relativa al ruolo dei file di dati e dei file di programma;
- familiarità con l'interfaccia standard dei programmi Windows;
- familiarità con il linguaggio di programmazione Pascal.

Prerequisiti per gli insegnanti
- conoscenza della programmazione orientata agli oggetti;
- conoscenza delle tecniche della programmazione visuale;
- familiarità con l'ambiente di sviluppo Delphi 5 Professional.

Obiettivi cognitivi
- Far capire la necessità del rigore formale nei linguaggi artificiali;
- Favorire un accostamento critico dello studente al mondo della programmazione visuale;
- Recuperare le conoscenze già acquisite relativamente al linguaggio Pascal e far prendere consapevolezza della necessità di una loro utilizzazione nella costruzione di programmi visuali.

Schema di realizzazione

1. Dapprima si farà scrivere agli allievi un programma in Pascal che permetta di risolvere il problema di trasformare un numero da base decimale a base diversa (All.1) (Per guadagnare tempo, gli allievi possono essere già stati invitati a pensarlo per casa precedentemente o sollecitati a costruire alcune delle procedure e funzioni che verranno utilizzate in esso). Eventuali aiuti sono assicurati dalla co-presenza di due docenti (20')

2. Nella seconda parte della lezione si visualizzerà tramite videoproiettore DataDisplay le singole fasi che consentono di trasformare un programma Turbo-Pascal in un programma Windows fornito di interfaccia grafica.
Nelle varie fasi della costruzione dell'interfaccia grafica sarà di tanto in tanto visualizzato anche il codice sorgente relativo agli oggetti visuali creato automaticamente da Delphi "dietro le quinte". In tal modo lo studente potrà prendere coscienza della presenza di un linguaggio fatto "di parole" inevitabile nella definizione di caratteristiche e comportamenti di oggetti grafici. Oltre a ciò lo studente potrà facilmente apprezzare l'estrema efficacia di un ambiente di sviluppo come Delphi, che consente di semplificare e velocizzare la stesura del codice sorgente relativo agli oggetti visuali, consentendo in tal modo al programmatore di dedicarsi maggiormente all'implementazione degli aspetti più "intelligenti" del programma, che sono quelli relativi ai calcoli e all'elaborazione dei dati.
Man mano che la costruzione del programma procederà, il codice, pure incompleto, verrà compilato e mandato in esecuzione allo scopo di consentire allo studente di valutare direttamente gli esiti delle aggiunte che via via saranno inserite nel codice sorgente. (90')

3. I cambiamenti di base saranno l'occasione per ripensare all'importanza e alle notevoli conseguenze negli sviluppi scientifici della modalità di scrittura dei numeri e dei segni matematici in generale Vengono evidenziate le potenzialità in questa disciplina del linguaggio alfabetico usato nella notazione araba dei numeri (rispetto quella additiva), e di quello iconico-simbolico usato nelle relazioni, operazioni, etc (30')

4. Spazio per la discussione con gli allievi (25')

Contenuti

Punto 1

Si fa riferimento al programma in All. 1. Il programma deve servire unicamente per il successivo punto 2.

Punto 2

1. Avvio di Delphi 5 Professional;

2. Breve esplorazione dell'ambiente di sviluppo:

a. Creazione automatica della finestra principale e del codice ad essa relativo;
b. Visualizzazione del codice "nascosto" creato automaticamente da Delphi;
c. Visualizzazione del codice automaticamente creato da Delphi nella Unit1;
d. Presenza e funzione dell'Object Inspector;
e. Osservazione sommaria dei gruppi di componenti;

3. Primo salvataggio, previa creazione di una cartella specifica (Cambia Base) del Progetto (CambiaBase.dpr) relativo al programma e della Unit (Main.pas) destinata a gestire la finestra principale (e unica) del programma; breve chiarimento sul concetto di "progetto".

4. Prima compilazione ed esecuzione del programma ancora "vuoto", capace cioè soltanto di gestire la finestra principale secondo i comportamenti standard dell'interfaccia di tutti i programmi Windows: trascinamento, ridimensionamento, iconizzazione, massimizzazione;

5. Visualizzazione da sistema operativo dei files presenti in questo momento nella cartella Cambia Base; individuazione del file CambiaBase.exe, costituente il vero e proprio file contenente il programma; confronto tra l'esiguità del codice sorgente testuale contenuto nei files sorgenti (Main.pas, Main.dfm, CambiaBase.dpr) e le dimensioni del file compilato (CambiaBase.exe). Spiegazione del fatto e breve riferimento al concetto di programmazione orientata agli oggetti;

6. Visualizzazione sommaria, tramite il programma di videoscrittura "Wordpad", dei caratteri corrispondenti ai bytes che costituiscono il codice esecutivo contenuto nel file CambiaBase.exe. Constatazione dell'apparente incomprensibilità della serie dei bytes e dell'impossibilità di costruire un programma se non mediante l'aiuto di un compilatore capace di "tradurre" in istruzioni il codice sorgente, fatto di parole, costruito dal programmatore anche con l'aiuto degli automatismi messi a disposizione dall'ambiente di sviluppo visuale. Breve riflessione sulla specificità dei linguaggi di programmazione rispetto ai linguaggi naturali. Breve definizione di programma compilatore.

7. Realizzazione delle prime modifiche alla finestra principale mediante interventi dall'interfaccia grafica:

a. definizione della dimensione e della posizione;
b. modifica, tramite Object Inspector, della proprietà Caption (da Form1 a Cambia Base);
c. reimpostazione a false dell'opzione BorderIcons biMaximize;
d. visualizzazione delle modifiche automatiche al codice sorgente relativo agli oggetti visuali (memorizzato in Main.dfm) medianti click destro e attivazione della voce di menu View as text;

8. Nuova compilazione ed esecuzione del programma. Valutazione delle modifiche apportate.

9. Aggiunta di elementi di codice sorgente nella sezione dichiarativa relativa a variabili globali. Definizione dei tre identificatori Base1, Base2, NumeroAttuale come variabili di tipo integer;

10. Aggiunta, mediante interfaccia visuale, degli oggetti che consentiranno all'utente finale di indicare i valori di due diverse basi comprese tra 2 e 10 e la rappresentazione, sotto le due diverse basi, di un valore numerico compreso tra 0 e 32767. Si tratterà di aggiungere 2 oggetti di tipo TSpinEdit (SpinEdit1 e SpinEdit2) destinati a recepire rispettivamente i valori delle variabili globali Base1 e Base2; saranno poi aggiunti due oggetti di tipo TEdit (Edit1 e Edit2) destinati a recepire la rappresentazione (rispettivamente su base Base1 e su base Base2) del valore numerico indicato dall'utente o visualizzato automaticamente dal programma in seguito a calcolo. Allo scopo di rendere più comoda per l'utente finale l'immissione del numero desiderato, a ciascuno dei due oggetti TEdit sarà accostato un oggetto TUpDown (rispettivamente UpDown1 e UpDown2), che consentirà di aumentare o diminuire di un'unità, mediante click del mouse, il valore numerico che sarà visualizzato rispettivamente su base Base1 in Edit1 e su base Base2 in Edit2.

11. Aggiunta delle scritte esplicative accanto ai suddetti oggetti. Si tratterà di aggiungere 4 oggetti di tipo TLabel nelle opportune posizioni, assegnando alla proprietà Caption di ciascuna di esse, tramite Object Inspector, rispettivamente il valore Base A (sopra Spinedit1), Base B (sopra Spinedit2), Numero su base A (sopra Edit1 e UpDown1) e Numero su base B (sopra Edit2 e UpDown2).

12. Aggiunta di un nuovo oggetto di tipo TLabel in posizione simmetrica rispetto a Edit1 e Edit2, destinato a visualizzare la rappresentazione su base 10 del valore numerico man mano indicato dall'utente. Tramite Object Inspector sarà impostata a "decimale" la proprietà name del nuovo oggetto. Il valore della proprietà caption sarà modificato in fase di esecuzione a ogni modifica del numero indicato dall'utente sia in Edit1 che in Edit2. Allo scopo di rendere più evidente la visualizzazione, saranno assegnati opportuni valori alle proprietà color e size della proprietà Font del nuovo oggetto. Sarà infine aggiunta la scritta esplicativa Su base 10, sempre sotto forma di oggetto TLabel, in posizione opportuna accanto all'oggetto di nome decimale.

13. Assegnazione, tramite Object Inspector, di valori iniziali a SpinEdit1 e SpinEdit2 (rispettivamente 2 e 2) e a Edit1 e Edit2 (rispettivamente 0 e 0).

14. Aggiunta di un oggetto di tipo TStatusBar, destinato alla visualizzazione di suggerimenti all'utente nel momento in cui il cursore del mouse si troverà in corrispondenza degli oggetti visuali SpinEdit1, SpinEdit2, Edit1, Edit2, UpDown1, Updown2. Allo scopo di ottenere tale risultato sarà necessario definire preventivamente, tramite Object Inspector, la proprietà Hint dei suddetti oggetti. I suggerimenti in questione potranno essere "Detta una base compresa tra 2 e 10" per SpinEdit1 e SpinEdit2, "Detta un numero di base A" per Edit1 e UpDown1, "Detta un numero di base B" per Edit2 e UpDown2.

A questo punto la finestra principale dovrebbe presentare l'aspetto seguente:

text

Punto 3

Si inizierà con una breve storia della simbologia matematica i cui segni, introdotti nel periodo rinascimentale e diventati via via più "efficaci" contribuendo, assieme alle leggi della logica, alla costruzione del "sistema scientifico" attuale, da cui deriva anche il "sistema tecnico" da noi oggi utilizzato. (Collegamento con la mostra virtuale "Numeri e Macchine")
Il percorso deve evidenziare come l'insieme dei segni matematici, ideati separatamente in epoche diverse, sia diventato un sistema notazionale fortemente integrato che, a partire dal 1500, consente ricerche, astrazioni, indagini, studi anche molto complessi e generalizzazioni in tutti i campi del sapere. Con l'eliminazione del linguaggio descrittivo dalla matematica, i grandi scienziati hanno creato gradualmente un sistema comunicazionale che non è soggetto ad ambiguità.

E' opportuno far notare anche che il linguaggio della matematica non include soltanto simboli specifici, ma anche grafici e istogrammi, che hanno un alto grado di immediatezza interpretativa e riescono a dare un numero elevato di informazioni in forma più sintetica rispetto il linguaggio verbale

Importante è a questo punto fare una panoramica storica dello sviluppo della simbologia matematica.

Qui di seguito se ne suggerisce una possibile.

Note per gli insegnanti

E' importante ribadire agli allievi l'importanza dell'introduzione dello zero come cifra per poter introdurre il sistema posizionale e sulle difficoltà che si incontrano nell'eseguire le operazioni con i sistemi additivi. Ad es. basta provare ad eseguire una semplice operazione aritmetica con i numeri romani.

CCLVI + DCCLII= MXVIII

  256+
  762=
1.018

Si possono sottolineare i vantaggi e gli svantaggi nell'utilizzo di basi diverse (sistema binario, decimale, esadecimale).

Si evidenzi l'importanza e la difficoltà del lavoro di traduzione dell'algoritmo nel linguaggio di programmazione (coerenza sintattica e semantica). I ragazzi hanno esperienza di lavoro di traduzione da una lingua all'altra, ma quando effettuano la traduzione in linguaggio di programmazione possono meglio capire l'importanza dell'uso corretto della grammatica per esempio, i cui errori non sono più pignolaggini dell'insegnante, ma impedimenti a che il programma possa correre. Il computer poi avvisa della presenza di errori di sintassi , e solo di pochi casi di errori di esecuzione.

Allegati

Stampe
Sarà presentato il codice sorgente del programma esemplificativo (CambiaBase.exe) contenuto nei files CambiaBase.dpr, Main.pas e Main.dfm.

Software
Saranno forniti tutti i files generati da Delphi durante la costruzione del programma esemplificativo.Tali files saranno raccolti in un'unica cartella di nome Cambia Base. Naturalmente sarà presente anche il file CambiaBase.exe, contenente il programma compilato.

Bibliografia essenziale

S. Baruk Dizionario di Matematica Elementare Bologna 1998 Zanichelli
C.B. Boyer Storia della matematica Milano 1980 Arnoldo Mondadori
B. Iaccarino La storia dei segni matematici Napoli 1995 Edizioni Scientifiche Italiane
J.D. Barrow La luna nel pozzo cosmico Milano 1994 Adelphi Edizioni
D. Guedj Il Teorema del Papagallo Milano 2000 Longanesi

Segni matematici e internet

Il sistema di numerazione:
- cinese
- indiano
- mesopotamico
- maya

Sistemi di numerazione

Aritmetica Maya

La natura degli oggetti matematici

Le origini della logica matematica: Boole e Frege

Links utili
Si suggerisce infine il sito ufficiale di Borland come portale iniziale da cui partire allo scopo di raggiungere altri siti internet utili al docente che intenda documentarsi in maniera approfondita sulla programmazione visuale in ambiente Delphi.

Allegato 1

program cambioba;
uses crt; {trasforma un naturale dalla base b alla base b1}
const nmax = 100; {b e b1 comprese fra 2 e 10}
type vett = array[1..nmax]of integer;
var n,nn,b,b1,aa:integer;
  a,ab1:vett;
  flag:boolean;

function potenza(b,k:integer):integer;
var pot,i:integer;
begin
 pot:=1;
 i:=1;
 while i<=k do
  begin
   pot:=pot*b;
   i:=i+1
  end;
 potenza:=pot
end;
procedure cambio10(var num:integer);
var k:integer;
begin
 num:=a[n];
 for k:= n-1 downto 1 do
  num:= num + a[k]*potenza(b,n-k)
end;
procedure cambio(num,b1:integer);
var h,a1,k:integer;
begin
 a1:=num;
 k:=0;
 while a1>0 do
  begin
   k:=k+1;
   ab1[k]:= a1 mod b1;
   a1:= a1 div b1
  end;
 nn:=k
end;
procedure stampa;
var h,k:integer;
begin
 clrscr;
 gotoxy(10,10); 
 textbackground(1);textcolor(white);
 write(' IL NUMERO ');
 if b=10 then write(aa)
 else
  for h:= 1 to n do
   write(a[h]);
 write(' IN BASE ',b,' DIVENTA ');
 for h:= nn downto 1 do
  write(ab1[h]);
 writeln(' IN BASE ',b1,' ');
 writeln;
 textbackground(black);
 textcolor(lightgray);
end;
procedure ingresso;
var i:integer;
    s:string;
begin
 repeat
 flag:=true;
 write('Introduci il numero : ');
 readln(s); n:=length(s);
  for i:=n downto 1 do
   begin
    a[i]:=ord(s[i])-48;
    if (a[i]>=b) or (a[i]<0) then flag:=false
   end;
 if not(flag) then
  writeln('Le cifre inserite non sono compatibili con la base')
 until flag
end;

begin {main}
 clrscr; writeln;writeln;textcolor(yellow);
 writeln(' CAMBIO DI BASE'); writeln;writeln;
 repeat
  flag:=true;
  textcolor(white);
  write('In quale base b, con 2<=b<=10, e'' il tuo numero? ');
  readln(b); writeln;
  if (b<2) or (b>10) then
   begin
    writeln('base non accettabile ');writeln;
    flag:=false
   end
  until flag;
  if b=10 then
   begin
    write('scrivi il numero ');
    readln(aa)
   end
  else
   begin
    ingresso;
    cambio10(aa);
   end;
 repeat
  flag:= true;
  write('in quale base b1 lo vuoi scrivere con 2<=b1<=10? ');
  readln(b1);
  if (b1<2) or (b1>10) then
   begin
    writeln('base non compatibile'); writeln;
    flag:=false
   end
until flag;
cambio(aa,b1);
stampa;
readln
end.

[inizio del testo] [indice]