Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
CAPITOLO I
INTRODUZIONE ALLINFORMATICA
5) Personal Computer
6) Network Computer
CAPITOLO II
STRUTTURA DI UN COMPUTER
Questi componenti non sono separati tra loro, quindi si parla spesso di sistema
di elaborazione dei dati. Lo schema funzionale stato definito per la prima
volta da John Von Neumann, secondo il seguente diagramma:
UNIT DI CONTROLLO
UNIT
UNIT DI UNIT DI
LOGICO - ARITMETICA
INGRESSO USCITA
MEMORIA CENTRALE
Tastiera
Mouse
Scanner
Fotocamera digitale
Microfono
LA MEMORIA CENTRALE
Memoria ROM
Memoria Cache
Essa viene indicata anche con la sigla ALU e consente di eseguire le quattro
operazioni fondamentali dellaritmetica e le operazioni di confronto logico e di
alternativa o di decisione. Di pertinenza della ALU il trasferimento dei dati
dalla RAM alla ALU stessa e viceversa, e il trasferimento dei dati da registro a
registro
L UNIT DI CONTROLLO
interni, cio racchiusi nel case del pc, oppure esterni e racchiusi in piccole
scatole che si possono collegare al pc tramite la porta USB.
Abbiamo poi i CD-ROM e i DVD, molto simili tra loro ma
differenti nella capacit, che nei dvd e molto maggiore.
CAPITOLO III
LE RETI INFORMATICHE
RETI LOCALI
Le reti locali, generalmente chiamate LAN (Local Area Network), sono reti
private allinterno di un singolo edificio o universit, di dimensioni al pi di
qualche chilometro. Le LAN spesso usano una tecnologia di trasmissione a un
solo cavo al quale tutte le macchine sono collegate.
Sono possibili differenti tipologie per tali reti:
a) a bus
b) ad anello
RETI METROPOLITANE
RETI GEOGRAFICHE
Una rete geografica o WAN (Wide Area Network), copre una grande area
geografica, spesso una nazione o un continente. In una WAN ci sono una serie
di computer chiamati host (ospiti) collegati tra loro in una LAN a sua volta
collegate a sottoreti. Nella maggior parte delle reti geografiche, la sottorete
costituita da due componenti distinte: le linee di trasmissione e gli elementi di
commutazione. Le linee di trasmissione (dette anche circuiti o canali) spostano
bit fra le varie macchine, mentre gli elementi di commutazione sono calcolatori
specializzati usati per collegare due o pi linee di trasmissione. Quando i dati
arrivano su una linea di ingresso, lelemento di commutazione, in base
allindirizzo dei singoli pacchetti, deve scegliere una linea di uscita per farli
proseguire. Il termine usato per definire questi calcolatori Router.
Se due Router che non condividono un cavo desiderano comunicare, devono
farlo in modo indiretto attraverso altri Router intermedi. In questi computer il
pacchetto viene ricevuto interamente, memorizzato fino a che la linea di uscita
richiesta non risulti libera e quindi viene fatto proseguire.
La figura sottostante mostra diversi tipi di topologia:
a) Stella
b) Anello
c) Albero
d) Completa
e) Anelli secanti
f) Irregolare
- 12 -
All'inizio degli anni '70 il Dipartimento della Difesa americano cre una rete di
collegamento chiamata ARPANET che metteva in connessione centri militari e
centri di ricerca. Essa era strutturata in modo insolito e finalizzata, tra l'altro,
a mantenere i collegamenti anche in caso di attacco atomico. Arpanet
funzionava con un criterio di trasmissione dei dati che si chiama TCP/IP
(Trasmission Control Protocol/Internet Protocol). La novit tecnologica rispetto
alla trasmissione telefonica delle informazioni era che i segnali non erano
analogici ma digitali, e che venivano spezzettati in "pacchetti" di segnali
ognuno dei quali conteneva l'indicazione del mittente e del destinatario,
attraverso opportune sigle. Successivamente iniziarono a collegarsi a questa
rete anche le Universit e grandi aziende. Stava nascendo la rete globale
Internet oggi diffusissima anche tra i singoli cittadini. Internet quindi
sostanzialmente una grande rete di reti che sta crescendo a dismisura e che
offre tanti e tali servizi da divenire quasi indispensabile per aziende e per
alcune categorie di privati cittadini (liberi professionisti, giornalisti, etc.). Fino
ad ora abbiamo parlato di pacchetti invece che di dati ma non abbiamo
specificato di cosa si tratta. Quando fu inventata Internet ci si rese subito
conto che mandare i dati cos come erano non era vantaggioso per diversi
motivi. In primo luogo in termini di velocit: ogni nodo intermedio avrebbe
dovuto ricevere lintero file che si voleva trasferire e poi rimandarlo al
successivo nodo.
Questo avrebbe generato molti tempi morti. Inoltre se ad un certo punto il file
veniva perso, il mittente avrebbe dovuto rimandarlo nella sua interezza. Ci si
rese conto quindi che il metodo migliore per trasferire i dati era quello di
dividerli in tanti pacchetti autonomi. Una volta arrivati a destinazione
sarebbero stati riuniti per formare il dato originale.
Questo sistema si chiama Packet Switching e permette inoltre la
comunicazione di pi host contemporaneamente.
Tra la sorgente e la destinazione ci sono i cos detti Router che provvedono a
spedire i pacchetti nella giusta direzione. Il pacchetto, una volta arrivato al
Router, viene inserito in un input buffer, processato e infine messo in un
output buffer. Questo naturalmente crea un ritardo. Se il Router occupato a
processare altri pacchetti, il pacchetto appena arrivato viene messo in coda.
Alcune volte per la coda piena e quindi il nuovo pacchetto viene eliminato e
perso. Il mittente dovr quindi rispedire esclusivamente il pacchetto perso e
non lintero messaggio o file. Ogni pacchetto, per poter essere spedito dal
mittente al destinatario, deve contenere delle informazioni aggiuntive (oltre al
dato originale). Queste vengono inserite nel cos detto Header (intestazione) e
contengono fondamentalmente le informazioni relative allindirizzo del
mittente e del destinatario e un numero che indica la posizione del pacchetto
relativamente al dato originale. Grazie a questo Header il pacchetto pu
arrivare a destinazione ed essere assemblato con gli altri pacchetti ricreando il
dato spedito dal mittente.
- 13 -
I PROTOCOLLI DI INTERNET
Internet offre diversi servizi ognuno dei quali utilizza uno specifico protocollo
(ovvero un insieme di regole per la comunicazione). I servizi pi utilizzati sono
il World Wide Web e la Posta Elettronica (o Email). Con il primo possiamo
visitare accattivanti pagine informative con testo, immagini e animazioni
mentre con lEmail possiamo comunicare in tempo quasi reale con qualsiasi
parte del mondo a bassissimo costo. Vediamo quindi un po meglio i protocolli
che sono alla base di questi importanti servizi.
TCP/IP : E' il protocollo base di rete per le comunicazioni su Internet, colui che
organizza la spedizione dei file, scompattandoli in pacchetti di bit spedibili in
rete. Allinizio e alla fine del pacchetto da mandare vengono messi dei segni di
riconoscimento relativi al mittente e al ricevente. Il pacchetto viene
"instradato" da apparecchi che si chiamano Router e fatto rimbalzare da nodo
a nodo fino a quando non arriva a destinazione.
http: Hyper Text Transfer Protocol il protocollo che permette allutente di
visualizzare sullo schermo le informazioni in formato testo e grafico che
risiedono sul Web. Quando si digita un indirizzo con la sigla "http://" prima del
"www" si vuole indicare lutilizzo del protocollo http.
FTP: File Transfer Protocol consente di trasferire file da un PC ad un altro
accedendo a centinaia di biblioteche di file di ogni tipo: software, giochi,
documenti storici, testi di canzoni, etc.
SMTP: Simple Mail Transfer Protocol il protocollo che serve per spedire
messaggi di posta elettronica dal computer al mail server.
POP3: Post Office Protocoll-versione 3 il protocollo utilizzato per scaricare la
postadal mail server al computer.
Abbiamo pi volte detto che quando un computer in rete vuole comunicare con
un altro computer, anchesso collegato, deve specificare il suo indirizzo. Questo
significa che ad ogni computer collegato viene attribuito un indirizzo univoco
in modo che possa essere contattato senza ambiguit. Ogni computer ha quindi
associato quello che si chiama indirizzo IP, identificato da quattro campi di 8
bit divisi da un punto (ad esempio 124.234.111.65). Se si vuole spedire un
messaggio al computer 124.234.111.65 tutti i pacchetti ad esso destinati
dovranno riportare questo indirizzo. Mentre per i computer agevole lavorare
con i numeri, noi umani preferiamo qualcosa di pi esplicativo e quindi
preferiamo indicare lindirizzo di un computer attraverso un nome mnemonico
(www.yahoo.com). Esistono quindi in rete dei computer che mediante un
database distribuito (DNS ovvero Domain Name System) traducono gli
indirizzi mnemonici in indirizzi IP.
Collegandoci quindi a www.yahoo.com il DNS lo trasforma nellindirizzo IP
relativo e quindi i Router (che leggono solo gli indirizzi IP) possono instradare
correttamente i pacchetti a destinazione.
- 14 -
CAPITOLO IV
I SISTEMI DI NUMERAZIONE
SISTEMA DI NUMERAZIONE DECIMALE
0 1 2 3 4 5 6 7 8 9
0,1 = 1/10 = 10 1
0,01 = 1/100 =10 2
0,001 = 1/1000 = 10 3
e quindi il numero
diventa uguale a
Esempio:
Esempio:
Il sistema di numerazione ottale, ovvero in base otto, si avvale di otto cifre per
rappresentare i valori
0 1 2 3 4 5 67
Per passare dal sistema decimale a quello ottale si procede nel modo usuale:
Per passare dalla base 10 alla base 16 si procede nel medesimo modo illustrato
per il sistema binario e ottale.
ARITMETICA BINARIA
Addizione
0+0 = 0
0+1 = 1
1+0 = 1
1+1 = 0 con riporto di 1
Esempio
1111 +
1101 +
111 =
-----------
100011
Moltiplicazione
0*0=0
1*0=0
0*1=0
1*1=1
18
Esempio:
1101 *
11 =
------------
1101
1101
------------
100111
Si pu notare che con tre bit posso rappresentare tutti e soli i numeri che
vanno da 0 a 7 mentre, con 4 bit, tutti e soli i numeri che vanno da 0 a 15.
Quindi 3 e 4 bit rappresentano rispettivamente tutti e soli i simboli dei sistemi
ottale e esadecimale.
Questo facilita molto la conversione da un sistema ottale/esadecimale a quello
binario e viceversa.
19
Esercizi
CAPITOLO V
INTRODUZIONE ALLA PROGRAMMAZIONE
DEFINIZIONE DI ALGORITMO
ALGORITMO
Per ciascuna persona dellelenco
Leggi il numero telefonico
Componi il numero
A seconda della situazione scrivi sullelenco occupato, numero
errato oppure Ok
22
DIAGRAMMA A BLOCCHI
I simboli:
INIZIO
FINE
Il simbolo:
Il simbolo:
viene usato per operazioni di immissione dati (input) o emissione dati (output).
Il simbolo:
F condizione
V
LA PSEUDOCODIFICA
INIZIO .. FINE.
Oltre ad inizio e fine ci sono una serie di parole chiave che possono essere
presenti in un algoritmo e sono: A, ALLORA, ALTRIMENTI, DA, DI, ESEGUI,
FINCH, MENTRE, PASSO, RIPETI, SE, PER.
24
Dati di input:
base a altezza del rettangolo
Dati di output:
area del rettangolo
ALGORITMO RETTANGOLO
Pseudocodifica
INIZIO
chiedi(base, altezza)
leggi(base, altezza)
area base*altezza
scrivi(area)
FINE
Diagramma a blocchi
INIZIO
chiedi(base, altezza)
leggi(base, altezza)
Area base*altezza
scrivi(area)
FINE
Esercizi
CAPITOLO VI
LE BASI DEL LINGUAGGIO C
Il linguaggio C nato nel 1971 presso i laboratori Bell, ed stato sviluppato
per facilitare la scrittura dei sistemi operativi e per scrivere un codice
compatto ed efficiente. Il linguaggio C un linguaggio compilato, cio prevede
tre fasi: scrittura, compilazione, traduzione in linguaggio macchina.
Appartengono alla categoria di linguaggi compilati, oltre al C, il C++ e il
Pascal. Ci li rende differenti dai linguaggi interpretati, che non sono tradotti
in linguaggio macchina ma sono letti, durante lesecuzione, da un programma
detto interprete che traduce sul momento le istruzioni presenti nel codice
sorgente.
Una volta scritto su carta il codice di un programma, si passa alla fase definita
codifica, nella quale, utilizzando il linguaggio di programmazione C, sono
memorizzate in un file, detto programma sorgente, le istruzioni che
costituiscono il programma. Loperazione appena descritta viene realizzata
utilizzando uno strumento software, che nel nostro caso un compilatore detto
Dev C++, provvisto di un apposito spazio bianco su cui scrivere il codice.
Successivamente si passa alla fase di traduzione del programma che produce il
cosiddetto programma oggetto. Durante la fase di compilazione possono
essere segnalati eventuali errori, classificabili in tre categorie:
#include <stdio.h>
main ( ) {
printf(" Salve, Mondo\n");
}
Vediamo passo per passo il significato delle parole espresse in tale programma.
Notiamo innanzitutto che le istruzioni (in questo caso una sola) terminano con
il punto e virgola.
La funzione main la funzione principale da cui parte lesecuzione di un
programma in C; essa sempre presente in ogni programma o listato.
Il linguaggio c mette a disposizione una serie di librerie predefinite che
consentono di utilizzare molte funzioni gi scritte e testate. Queste librerie
vengono dette librerie di sistema. Linclusione di un file della libreria di
sistema avviene con la direttiva #include<nome_libreria>. Nel nostro esempio
stdio.h la libreria che comprende le funzioni di input/output come printf e
scanf che vedremo in seguito.
La funzione printf permette di stampare a video il valore di una o pi variabili
o di intere frasi, come nel caso del nostro esempio. Essa pu anche ricevere in
ingresso un numero variabile di parametri o anche una stringa di caratteri.
28
salve, mondo.
#include<stdio.h>
main ( ) {
int a, b, q, r;
a = 7;
b = 3;
q = a/b;
printf(Quoziente %d\n, q);
r = a % b;
printf(Resto %d\n, r);
}
Nella sezione dichiarativa abbiamo dichiarato quattro variabili di tipo int, cio
intero,nella sezione esecutiva tali variabili vengono inizializzate
rispettivamente a 7 e a 3 , viene calcolato il loro quoziente (che sar troncato
alla parte decimale), attraverso loperatore di divisione / e il resto con
loperatore modulo %. Loutput di tale programma sar:
2
1
#include <stdio.h>
main ( ) {
int a,b,s;
scanf("%d %d", &a, &b);
29
s = a + b;
printf("%d" ,s); }
Vediamo la presenza di una nuova funzione e cio scanf. Tale funzione una
tra le pi potenti e diffuse nel file stdio.h, assieme alla printf. Il suo compito
quello di analizzare una stringa o uno o pi valori digitati da tastiera, quindi
richiede in ingresso una serie di variabili da caricare precedute dal simbolo &
(tranne che per stringhe dove pu essere omesso).
char nome[n]
int eta;
float statura;
char risposta;
char nome[30];
int contatore = 0;
char nazione[7] = Italia
Esercizi
____________ ( ) {
____________ a, b;
scanf(%d, &a);
b = a*2;
a) main ( ) {
31
int a;
scanf(%d, &a);
a = a +1;
printf(%d\n, a);
}
b) main ( ) {
int a;
scanf(%d, &a);
a = a * a;
printf(%d\n, a);
}
c) main ( ) {
int a, b, s;
scanf(%d, &a, &b);
s = a + b;
printf(%d\n, s);
}
#includere<stdio.h>
main ( ) {
int i;
printf(Introduci un numero);
scanf(%d, i);
i = i *2;
scrivi(%d\n, i);
}
33
CAPITOLO VII
LE STRUTTURE DI CONTROLLO
1) Sequenza
2) Alternativa
3) Ripetizione
SEQUENZA ALTERNATIVA
F V
istruzione1
condizione
istruzione2
RIPETIZIONE
istruzioni
V
condizione
LA SEQUENZA IN C
#include<stdio.h>
main ( ) {
int num1, num2, differenza;
printf ( Inserisci due numeri: );
scanf (%d %d, &num1, &num2);
differenza = num1 num2;
printf (Risultato = %d\n, differenza);
}
LA STRUTTURA DI ALTERNATIVA
if (condizione)
istruzione_1
else
istruzione_2
Pseudocodifica
INIZIO
chiedi (a,b)
leggi (a,b)
SE a<b
ALLORA
scrivi (a)
scrivi (b)
ALTRIMENTI
scrivi (b)
scrivi (a)
FINE SE
FINE
36
Diagramma a blocchi
INIZIO
chiedi(a, b)
leggi(a,b)
F V
a<b
FINE
Codifica in C
#include <stdio.h>
main( ) {
int a,b;
printf("Due numeri: ");
scanf("%d %d", &a, &b);
if (a <b) {
printf("%d\n", a);
printf("%d\n", b);
}
else {
printf("%d\n", b);
printf("%d\n", a);
}
}
SE condizione
ALLORA
istruzione
FINE SE
condizione
istruzione
LA RIPETIZIONE
do {
istruzioni
} while (condizione);
Esempio: Dato un elenco di persone, con lindicazione per ciascuna di esse del
nome e dellet, si devono contare i maggiorenni.
Pseudocodifica
INIZIO
conta 0
ESEGUI
chiedi (nome)
leggi (nome)
chiedi (et)
38
leggi (et)
SE eta >= 18
ALLORA
conta conta + 1
FINE SE
chiedi (elenco finito? (0/1))
leggi (risp)
RIPETI MENTRE risp = 0
scrivi (conta)
FINE
Codifica in C
#include <stdio.h>
main( ) {
char nome[20];
int eta;
int risp;
int conta = 0;
do {
printf("nome: ");
scanf("%s", nome);
printf("Eta': ");
scanf("%d", &eta);
if (eta >= 18)
conta ++;
printf("Elenco finito: 0 = no, 1 = si ? ");
scanf("%d", &risp);
} while (risp == 0);
printf("I maggiorenni sono = %d \n", conta);
}
39
Diagramma a blocchi
INIZIO
Conta 0
chiedi(nome)
leggi(nome)
chiedi(eta)
leggi(eta)
V
eta >= 18
F conta
V conta + 1
leggi (risp)
risp == 0
scrivi (conta)
FINE
40
In molti programmi, inoltre, viene richiesto il calcolo del valor medio di una
serie di numeri. Il valore della media aritmetica si ottiene dividendo la somma
dei valori per il numero dei valori considerati. Ad esempio, indicando con N il
numero delle persone e con SommaEt la somma delle loro et, let media
delle persone si calcola con lespressione:
EtaMedia SommaEta / N
i min
F
i <=max
istruzioni
incrementa i
Esempio:
#include <stdio.h>
main( ) {
int i;
for ( i = 1; i <=30; i++) {
printf("%d\n", i*2);
}
}
Esercizio: Dati in input una serie di N numeri, calcolare il massimo tra essi.
Pseudocodifica
INIZIO
chiedi (quanti dati)
leggi (N)
PER i DA 1 A N ESEGUI
chiedi (dato)
leggi (dato)
43
SE i =1
ALLORA
max dato
FINE SE
SE dato > max
ALLORA
max dato
FINE SE
RIPETI
scrivi (max)
FINE
Codifica in C
#include <stdio.h>
main( ) {
int n;
int dato;
int max;
int i;
printf ("Quanti sono i dati?");
scanf ("%d", &n);
for (i = 1; i < = n; i++) {
printf ("Inserisci il %d. dato: ", i);
scanf ("%d", &dato);
if (i == 1) max = dato;
if (dato > max) max = dato;
}
printf("Il massimo valore e' %d \n", max);
}
44
Diagramma a blocchi
INIZIO
chiedi(nome)
leggi(nome)
i= 1
i<=N F
V
v
chiedi(dato)
leggi(dato)
F V
i=1
max dato
scrivi (conta)
F V
dato > max
max dato
FINE
incrementa i
45
Esercizi
a) a = 5;
b = 3;
if (a > b) c = a b;
else c = b a;
printf (%d\n, c);
b) a = 0;
b = 10;
if (a < b)
printf (%d %d\n, a, b);
else
printf (%d %d\n, b, a);
la statura media
let media
il numero dei maschi e delle femmine
la statura massima e quella minima
la statura massima di quelli che sono maggiorenni
CAPITOLO VIII
LE FUNZIONI IN C E LORGANIZZAZIONE DEI PROGRAMMI
LE FUNZIONI
Quando la funzione ha come tipo di ritorno il tipo void, listruzione return non
seguita da alcun valore o espressione. Il frammento seguente alternativo a
quello precedente e mostra proprio questa differenza:
x = a + b;
printf (Il totale : %d\n, x);
}
int totale;
int tot1;
int tot2;
Anche il main a tutti gli effetti una funzione ma rispetto alle funzioni
quella che viene eseguita per prima allavvio del programma. Listruzione
return pu essere presente anche nella main e sar in genere seguita da zero,
mentre la main verr dichiarata come int.
In un programma le variabili sono dichiarate allinizio, dopo le direttive della
main e al suo esterno, poich esse sono usate anche dalle altre funzioni
presenti nel programma. Questo tipo di variabili vengono dette globali,
mentre quelle dichiarate allinterno delle funzioni o nella main stessa, vengono
dette locali.
Loperazione con la quale la main o altra funzione, invia i valori alla funzione,
assegnandoli ai parametri, viene detta passaggio di parametri. Le variabili
indicate nellintestazione della funzione si chiamano parametri formali,
mentre le variabili che forniscono i valori ai parametri si chiamano parametri
attuali.
funzione
}
49
main ( ) {
Vediamo ora un esempio di programma scritto senza e con uso delle funzioni, e
che esegue lordinamento crescente di tre numeri
Pseudocodifica
INIZIO
chiedi (tre numeri)
leggi (a, b, c)
SE a > b
ALLORA
temp a
a b
b temp
FINE SE
SE a > c
ALLORA
temp a
a c
c temp
FINE SE
SE b > c
ALLORA
temp b
b c
c temp
FINE SE
Scrivi (Numeri ordinati:)
Scrivi (a)
50
Scrivi (b)
Scrivi (c)
FINE
Codifica in C INIZIO
printf("Tre numeri:");
scanf("%d %d %d", &a, &b, &c);
if(a > b) { a>b
temp = a;
a = b; temp a
b=temp;
} a b
if(a > c) {
temp=a;
b temp
a=c;
c=temp;
}
if(b > c) { a>c
temp=b;
b=c; temp a
c=temp;
}
printf("numeri ordinati: \n"); a c
temp b
b c
c temp
scrivi( a,b,c)
FINE
51
Pseudocodifica
Funzione principale
INIZIO
chiedi (tre numeri)
leggi (a, b, c)
Ordina (a,b)
Ordina (a,c)
Ordina (b,c)
Scrivi (Numeri ordinati:)
Scrivi (a)
Scrivi (b)
Scrivi (c)
FINE
INIZIO
SE x > y
ALLORA
temp x
x y
y temp
FINE SE
FINE
Codifica in C
#include <stdio.h>
void Ordina (int*x,int*y) {
int temp;
if(*x>*y) {
temp=*x;
52
*x=*y;
*y=temp;
}
return;
}
int main(void) {
int a,b,c;
printf("Tre numeri:"); INIZIO
scanf("%d %d %d",&a, &b, &c);
Ordina(&a, &b); chiedi (3 num)
Ordina(&a, &c);
Ordina(&b, &c);
printf("numeri ordinati: \n"); leggi (a,b,c)
printf("%d \n", a);
printf("%d \n", b);
Ordina (a,b)
printf("%d \n", c);
return 0;
} Ordina (a,c)
Ordina (b,c)
Diagramma a blocchi
FINE
x>y
temp x
y y
y temp
INIZIO
53
#include <stdio.h>
#include <stdio.h>
int x;
x = 1;
printf("%d \n", x);
Modifica(&x);
printf("%d \n", x);
return 0;
}
Esempio:
#include <stdio.h>
1) Dichiarazione delle funzioni per mezzo dei prototipi: esse vanno poste
in testa al programma, dopo le direttive include e dopo la dichiarazione
delle variabili globali. In questo modo si comunica al compilatore
lintenzione di utilizzare una certa funzione, riservandosi di specificare e
scrivere il codice in seguito
2) Definizione delle funzioni: contiene le istruzioni che compongono la
funzione e viene posta dopo la main
Diamo un esempio di programma completo e corredato di funzioni e che calcola
perimetro e area di un quadrato:
#include <stdio.h>
int Tastiera (void);
void CalcoloArea (int l);
void CalcoloPerimetro (int l);
LE FUNZIONI PREDEFINITE
Pseudocodifica
funzione principale
INIZIO
chiedi (base, esponente)
leggi (base, esponente)
risultato Pot (base, esponente)
scrivi ( base, esponente, risultato)
FINE
INIZIO
potenza 1
PER i DA 1 A y ESEGUI
potenza potenza*x
RIPETI
ritorna potenza
FINE
Codifica in C
#include <stdio.h>
double Pot(double x, double y);
int main(void) {
double base, esponente;
double risultato;
printf("Base:");
scanf("%lf", &base);
printf("Esponente:");
scanf("%lf", &esponente);
risultato = Pot(base, esponente);
printf("Base = %lf \n", base);
57
Diagrammi a blocchi
funzione principale
INIZIO
FINE
58
INIZIO
potenza 1
i 1
F
i <= y
potenza potenza*x
incrementa i
incrementa i
FINE
#include <stdio.h>
#include <math.h>
main( ) {
double base, esponente;
double risultato;
printf("Base:");
59
scanf("%lf", &base);
printf("Esponente:");
scanf("%lf", &esponente);
risultato = pow(base, esponente);
printf("Potenza = %lf \n", risultato);
return 0;
}
Esercizi
INIZIO
x 0
y 0
Varia (x, y)
scrivi (x, y)
FINE
INIZIO
x 0
y 0
Varia (x, y)
scrivi (x, y)
60
FINE
INIZIO
x 0
y 0
Varia (x, y)
scrivi (x, y)
FINE
a) #include <stdio.h>
void Modifica(int y) {
y = y + 5;
}
int main(void) {
int x;
x = 1;
Modifica(x);
printf("%d\n", x);
return 0;
}
b) #include <stdio.h>
void Modifica (int *y) {
*y = *y + 5;
}
int main (void) {
int x;
x = 1;
Modifica (&x);
printf("%d\n",x);
return 0;
}
61
c) #include <stdio.h>
void Modifica(int x,int *y) {
x ;
*y=* y +5;
return;
}
int main(void) {
int a,b;
a = 10;
b = 20;
Modifica(a,&b);
printf("%d %d \n",a,b);
return 0;
}
#include <stdio.h>
float CalcoloArea (int l);
int main (void) {
int lato;
lato = 10;
CalcoloArea (lato);
return 0;
}
void CalcoloArea (int l) {
float area;
area = l*l;
printf ("%10.2f \n", area);
return;
}
8) Costruire una funzione che riceva in input due numeri interi e ne calcoli
il quoziente e il resto.
CAPITOLO IX
STRUTTURE DI DATI: GLI ARRAY
N. NOMI
1 BIANCHI
2 VERDI
3 ROSSI
4 MARTINI
5 MORETTI
6 LISI
INDICE 1 2 3 i n
VALORE d1 d2 d3 di dn
double numeri[3] =
Esempio:
#include <stdio.h>
char stringa[10]= "abcdefghi";
int main(void) {
int i;
for(i = 0; i < 9; i++) {
printf("Stringa[%d]= %c\n", i, stringa[i]);
}
return 0;
}
stringa[0] = a
stringa[1] = b
stringa[2] = c
stringa[3] = d
stringa[4] = e
stringa[5] = f
stringa[6] = g
stringa[7] = h
stringa[8] = i
65
Per quanto riguarda il passaggio di parametri alle funzioni, possiamo dire che
quando un array viene passato come parametro ad una funzione, in realt
viene passato lindirizzo della prima componente dellarray. Il nome dellarray
a tutti gli effetti una variabile contenente un indirizzo o puntatore.
Pseudocodifica
funzione principale
INIZIO
dim ChiediDimensione( )
CaricaVettore (v1, dim)
CaricaVettore (v2, dim)
tot1 Somma (v1, dim)
tot1 Somma (v1, dim)
scrivi (tot1, tot2)
FINE
funzione ChiediDimensione
INIZIO
ESEGUI
chiedi (dimensione)
leggi (d)
RIPETI MENTRE (d<1) OR (d>MAX)
Ritorna d
FINE
INIZIO
PER i DA 0 A d 1 ESEGUI
chiedi (i - esimo elemento)
leggi (v[i])
RIPETI
FINE
66
INIZIO
s 0
PER i DA 0 A d 1 ESEGUI
s s + v[i]
RIPETI
ritorna s
FINE
Codifica in C
#include <stdio.h>
#define MAX 100
int ChiediDimensione (void);
void CaricaVettore (int v[ ], int d);
int Somma (int v[ ], int d);
scanf("%d", &v[i]);
}
return;
} INIZIO
int Somma (int v[ ], int d) {
int i;
int s = 0; chiedi (dimensione)
for (i = 0; i<d; i++) s = s + v[i];
return s;
}
leggi (d)
Diagrammi a blocchi
d<1 o d>MAX
funzione ChiediDimensione
ritorna d
FINE
INIZIO
i 0
i<d
funzione CaricaVettore F
chiedi (i-esimo elem)
leggi (v[i])
incrementa i
FINE
68
funzione somma
INIZIO
s 0
i 0
F
i<d
s s +v[i]
incrementa i
incrementa i
FINE
funzione principale
INIZIO
dim ChiediDimensione()
CaricaVettore(v1, dim)
CaricaVettore(v2, dim)
tot1 Somma(v1,dim)
tot2 Somma(v2,dim)
scrivi(tot1, tot2)
FINE
69
Pseudocodifica
funzione principale
INIZIO
dim ChiediDimensione( )
CaricaVettore (vett, dim)
chiedi ( Valore da cercare)
leggi (n)
trovato Trova (vett, dim)
SE trovato
ALLORA
scrivi (n, si trova alla posizione, posto)
ALTRIMENTI
scrivi (n, non presente nel vettore)
FINE SE
FINE
INIZIO
s 0
posto 0
ESEGUI
SE v[posto] = n
ALLORA
s 1
ALTRIMENTI
posto posto + 1
FINE SE
70
Codifica in C
#include <stdio.h>
#define MAX 10
int n;
int posto;
int ChiediDimensione(void);
void CaricaVettore(int v[ ],int d);
int main(void) {
int dim, i;
int somma = 0;
int prod = 1;
int vett[MAX];
dim = ChiediDimensione( );
printf("Carica gli elementi del vettore \n");
CaricaVettore(vett,dim);
if(i%2 == 0) somma = somma + vett[i];
else prod = prod*vett[i];
printf("Somma componenti = %d\n", somma);
printf("Prodotto componenti = %d\n", prod);
}
int ChiediDimensione(void) {
int d;
do {
printf("Dimensione dell'array:");
scanf("%d", &d);
} while(d<1 || d>MAX);
return d;
}
void CaricaVettore(int v[ ],int d) {
int i;
for(i = 0; i< d; i++) {
printf("Elemento di posto %d: ", i);
scanf("%d", &v[i]);
}
return;
}
71
Diagrammi a blocchi
funzione principale
INIZIO
dim ChiediDimensione()
CaricaVettore(vett, dim)
chiedi (valore)
Leggi(n)
trovato
FINE
72
Funzione Trova
INIZIO
s 0
posto 1
V F
v[posto]=n
posto posto + 1 s 1
posto>d AND s =0
ritorna s
FINE
Ordinare gli elementi di un array (in inglese sort) significa metterli in ordine
alfabetico se sono stringhe, o in ordine di grandezza crescente o decrescente se
sono numeri. Il metodo pi semplice e conosciuto di ordinamento quello di
sostituzione, molto efficace per un numero piccolo di elementi da ordinare.
Questo metodo consiste nel confronto di ciascun elemento, dal primo allultimo,
con tutti gli altri elementi che sono disposti nelle posizioni successive a quella
presa in esame.
Tutte le volte che tra gli elementi successivi si incontra il pi piccolo, si
procede allo scambio dei due, ripetendo il procedimento fino a quando gli
elementi sono tutti ordinati. Diamo di seguito solo la codifica del programma di
ordinamento degli elementi di un array:
#include <stdio.h>
#define MAX 100
int ChiediDimensione(void);
void CaricaVettore(int v[ ], int d);
73
int main(void) {
int dim;
int vett[MAX];
dim = ChiediDimensione( );
printf("Carica gli elementi del vettore \n");
CaricaVettore(vett, dim);
Ordina(vett, dim);
Stampa(vett, dim);
return 0;
}
int ChiediDimensione(void) {
int d;
do {
printf("Dimensione dell'array:");
scanf("%d", &d);
} while(d<1 || d>MAX);
return d;
}
void CaricaVettore(int v[ ],int d) {
int i;
for(i = 0; i < d; i++) {
printf("Elemento di posto %d: ", i);
scanf("%d", &v[i]);
}
return;
}
void Stampa(int v[ ], int d) {
int i;
for(i = 0; i < d; i++) printf("%d ", v[i]);
printf("\n");
return;
}
void Ordina (int v[ ], int d) {
int i, j;
for(i = 0; i< d 1; i++) {
for(j = i + 1; j < d; j++)
if(v[i] > v[j]) Scambia(&v[i], &v[j]);
}
return;
}
void Scambia (int*a, int*b) {
int comodo;
comodo = *a;
74
*a=*b;
*b= comodo;
return;
}
Esercizi
double valori =
double valori[2] =
double valori[3] =
double valori[3]
CAPITOLO X
IL SISTEMA OPERATIVO
Gestione della CPU: tutti i programmi hanno bisogno della CPU per essere
eseguiti, quindi essa viene contesa dai vari processi in esecuzione. Una parte
del sistema operativo si occupa dellassegnazione della CPU ai singoli lavori
che ne richiedono luso, mantiene aggiornato lo stato del processore
(libero/occupato), decide a quale processo assegnare il processore, assegnandolo
in seguito, e riprende il controllo del processore quando il processo terminato
o sospeso.
Per quanto riguarda il caricamento del Sistema Operativo, dobbiamo dire che i
moduli dello stesso sono tutti in memoria centrale tranne la Bootstrap, che
risiede nella ROM e serve per la partenza iniziale del sistema e per controllare
il funzionamento delle varie componenti. Terminate tutte queste operazioni, il
sistema si pone in attesa dei comandi da parte degli utenti.
78
CAPITOLO XI
ORGANIZZAZIONE DEI DATI SULLA MEMORIA DI MASSA
Per poter elaborare tramite un programma i dati presenti nei file, bisogna
prima spostarli nella memoria centrale e viceversa. Ci avviene mediante i
comandi READ (dalla memoria di massa alla centrale) e WRITE (dalla memoria
centrale a quella di massa). Abbiamo sempre parlato di record logico, ma in
realt ci che viene trasferito il record o blocco fisico le cui dimensioni
dipendono dallhardware della macchina. La differenza sostanziale sta nel
fatto che il programmatore vede record composti da campi, mentre il file
system vede dei blocchi. Definiamo come fattore di blocco il numero di record
logici contenuti in un record fisico; quindi i record di un blocco si dicono:
Quelle appena viste sono operazioni fisiche. Le seguenti sono invece operazioni
logiche.
FILE SEQUENZIALI
CAPITOLO XII
LA COMPLESSIT COMPUTAZIONALE
1) Velocit
2) Occupazione di risorse
3) Eleganza
NOTAZIONI ASINTOTICHE
c*g(n)
n0
81
NOTAZIONE ASINTOTICA
T(n)
c*g(n)
NOTAZIONE ASINTOTICA
La funzione T(n) di g(n) se esistono due interi positivi c1, c2 tali che, da un
certo valore di n in poi il prodotto di c1 per g(n) sempre positiva e minore o
uguale a T(n), a sua volta minore o uguale al prodotto di c2 per g(n).
c2*g(n)
T(n)
n0
c1*g(n)
ALGORITMI DI ORDINAMENTO
QUICK SORT: questo ordinamento, molto adatto nel caso medio, ma poco
adatto nel caso peggiore, si pu eseguire in loco, cio senza bisogno di una
struttura dappoggio in cui copiare porzioni di dati. Lalgoritmo prevede che si
scelga, per ogni iterazione, un valore chiamato pivot. Si divide linsieme
originario in due sottoinsiemi, di cui uno contiene valori tutti minori del pivot e
laltro sottoinsieme con valori tutti maggiori del pivot.
Tpeggiore(n) = n*n
Tmedio(n) = n*log2 (n)
HEAP SORT: questo algoritmo su una struttura di dati detta Heap che in
sostanza un albero binario con al massimo due nodi.
Quick Sort:
12 15 22 32 32 44 45 96 ordinati
ok ok ok ok
84
Insertion Sort:
12
12 22
12 22 32
12 15 22 32
12 15 22 32 32
12 15 22 32 32
12 15 22 32 32
12 15 22 32 32 44
12 15 22 32 32 44 45
12 15 22 32 32 44 45 96 Ok!
Heap Sort:
12 32 22 45 96 32 44 15
12 12
32
Ok 2
No Ok
22
12
32
32 Ok No
2
2
12 22
12 22 2
2
45
2
85
32 45
2 2
45 22 32 22
2 2
No
12 12 No
2 2
45 45
2 2
32 22 96 22
2 2
No No
12 12 32
96
2 2
2
96 96
2 2
45 22 45 22
45 2 45 2
12 32 12 32 32
2 No 2 Ok
86
96
96
2
45 32
45 44
45 42
12 32 22 44
12 32 22 32
2
2
96
2
45 44
45 42
96
2
12 32 22 32
2
45 44
45 42
15
2 No
15 32 22 32
2
12
2
Ok , ordinato
Esercizio
Ordinare mediante Merge Sort, Quick Sort, Insertion Sort ed Heap Sort, la
stessa sequenza
12 32 22 45 96 32 44 15
87
CAPITOLO XIII
LE STRUTTURE DATI
LE STRUTTURE DATI STATICHE
RECORD
Citt: Stringa;
}
var mario; Persona;
Mario.Nome : = Mario;
Mario.Cognome : = Rossi;
Mario.Citt : = Roma;
Mario.DataN.giorno : = 29;
Mario.DataN.Mese : = 10;
Mario.DataN.anno : = 1975;
STACK O PILA
CODA
LE LISTE
type nodoInLista {
valore: numero Decimale;
successivo: > nodoInLista;
}
Esistono anche lista dette a doppio link, che hanno il riferimento verso
lelemento successivo, ma anche verso il precedente, in questo modo:
type nodoInLista {
valore: numero Decimale;
successivo: > nodoInLista;
precedente: > nodoInLista;
}
INSERT
Esempio:
4
76
76 4
11
11 76 4 e cos via..
APPEND
Esempio:
76
4 76
11
4 76 11
ORDERED INSERT
4
76
4 76
11
4 11 76
SEARCH
DELETE
SIZE
GLI ALBERI
I I
F I F
F F
Esempio:
26
9 43
Livello 1
2 18 55
55 Livello 2
5
13 18 Livello 3
6
I nodi contenuti in un BST possono essere suddivisi in base alla distanza tra
essi e la radice. In questo modo si opera una suddivisione in livelli, dove in
ogni livello ci sono i nodi aventi tutti la stessa distanza.
Un albero si dice bilanciato se tutte le foglie appartengono allultimo o agli
ultimi due livelli. Se tutte le foglie si trovano allultimo livello, lalbero si dice
completo.
SEARCH
2 < 9: si segue
collegamento di 55
2 18
sinistra 55
5
Valore
13 18
trovato!
6
95
INSERT
passo 1: 26
26
passo 2: <
passo 3: 26
<
9
18
26
passo 4:
43
9
18
26
43
9
passo 5:
55
18
96
passo 6:
26
<
43
9
55
18
<
13
passo 7:
26
<
43
9
55
18
13 18
passo 8: 26
43
9
55
18
2
13 18
albero completato
97
MIN/MAX
DELETE
26
9 43
2 18 55
55
5
13 18
6
26
9 43
2 18 55
55
5
13 18
6
26
9 55
2 18 55
55
5
13 18
6
26
9 43
2 18 55
55
5
13 18
6
Caso 1: sostituzione del nodo con il minore tra i suoi successori maggiori
26
13 43
2 18 55
55
5
13 18
6
Caso 2: sostituzione del nodo con il maggiore tra i suoi successori minori
100
26
2 43
2 18 55
55
5
13 18
6
VISIT
Q = {26} , R = { }
Caso pre order: si inizia dalla radice, per poi proseguire al ramo con valori
minori della radice e infine al ramo con valori maggiori della radice.
Prendendo in considerazione il solito albero come esempio, abbiamo:
R = {26}
R = {26, 9, 2}
R = {26, 9, 2, 18, 13, 22}
R = {26, 9, 2, 18, 13, 22, 43, 55}
Caso in order: si inizia dal ramo con valori minori della radice, per poi
proseguire alla radice e infine al ramo con valori maggiori della radice.
R={}
R = {2, 9}
R = {2, 9, 13, 18, 22}
R = {2, 9, 13, 18, 22, 26}
R = {2, 9, 13, 18, 22, 26, 43, 55}
Caso post order: si inizia dal ramo con valori minori della radice, per poi
proseguire con il ramo con valori maggiori della radice e infine con la radice.
R={}
R = {2}
R = {2, 13, 22, 18}
R = {2, 13, 22, 18, 9}
R = {2, 13, 22, 18, 9, 55, 43}
R = {2, 13, 22, 18, 9, 55, 43, 26}
102
Esercizi
1) Inserire in un BST i valori {12, 32, 22, 45, 96, 32, 44, 15}
F4
B3 L1
1
A1 G1 P5
55
5
N3 Z1
6
N1 P1
6 6
103
CAPITOLO XIV
EVOLUZIONE DEI LINGUAGGI DI PROGRAMMAZIONE
Dicesi SISTEMA una parte del mondo che una persona o gruppo sceglie di
considerare come un intero, costituito da componenti caratterizzate da
propriet e azioni che mettono in relazione la propriet stesse con altre
componenti.
componenti
SCHEMA DI SISTEMA propriet
azioni
correlazioni
Esercizi:
6) Quali sono gli elementi chiave del paradigma logico? E del paradigma
funzionale?
CAPITOLO XV
PROGRAMMAZIONE ORIENTATA AGLI OGGETTI
GLI OGGETTI
Per capire cosa un oggetto, possiamo prendere spunto dalla vita quotidiana.
Unautomobile, un televisore sono oggetti. In particolare un oggetto viene
definito mediante:
velocit = 60
colore = rosso
numeroPorte = 5
Auto1
velocit = 60
colore = rosso
numero Porte = 5
ATTRIBUTI E METODI
INCAPSULAMENTO
CAMBIA
AVVIATI
MARCIA
velocit
colore
carburante
FERMATI
108
LE CLASSI
Diversi oggetti possono avere stessi attributi e metodi e si dice in questo caso
che questi oggetti appartengono ad una stessa CLASSE. In sostanza una
classe rappresenta un modello che descrive una serie di oggetti. Un oggetto
non pu esistere se prima non viene creata una classe a cui lo stesso deve
appartenere; in questi casi loggetto viene detto istanza della classe. La
creazione di un oggetto a partire da una classe si indica in pseudo codifica nel
seguente modo:
Gli attributi possono cambiare mentre i metodi sono gli stessi. La struttura
generale di una classe la seguente:
<nome classe>
<attributo1>
<attributo2>
<metodo1>
<metodo2>
Automobile
velocit
colore
numero Porte
livello
carburante
posizione Marcia
avviati
fermati
accelera
gira
cambia Marcia
rifornisciti
LEREDITARIET
SOPRACLASSE
SOTTOCLASSE SOTTOCLASSE
CAVALLO
bus42.Numpersone = 65
bus42.Accendi( )
IL POLIMORFISMO
LA PERSISTENZA
Non tutti i linguaggi possono essere definiti OOP, ma solo quelli che forniscono
i costrutti per gestire gli oggetti, le classi e lereditariet.
I linguaggi di tipo OOP si distinguono in :
Esercizi
Quadrato
lunghezzaLato
colore
sposta
calcolaPerimetro
CAPITOLO XVI
IL LINGUAGGIO JAVA
Anche i puntatori, che trovavano largo impiego nel linguaggio C, vengono ora
soppiantati dagli oggetti, rendendo il codice sicuramente pi semplice e
dinamico.
GLI IDENTIFICATORI
Gli identificatori e i tipi di dato sono nomi attribuibili alla variabili, ai metodi e
alle classi e sono composti da lettere e numeri, dove il primo carattere deve
obbligatoriamente essere una lettera. Questi nomi non possono essere uguali
alle parole chiave del linguaggio, che i buona parte sono le stesse viste nel
linguaggio C.
Per quanto riguarda gli operatori, essi sono gli stessi utilizzati in C.
Le stringhe possono essere concatenate tra loro mediante loperatore di
concatenazione +.
System.out, gi visto prima, un oggetto associato allo standard output al
quale viene spedito il metodo println( ). In alcuni casi pu essere usato anche il
metodo print( ), ma esso non effettua il ritorno a capo.
Per le operazioni di input, invece, esiste loggetto System.in, che gestisce il
flusso di dati inseriti da tastiera ed obbligatorio non usarlo da solo, ma
assieme ad altri oggetti pi potenti ne seguente modo:
Per effettuare la lettura di una stringa, bisogna scrivere nel seguente modo:
String nome;
nome = tastiera.readLine( );
}
catch(Exception e) {
System.out.println("\nNumero non corretto!");
return;
}
117
Nellesempio che segue, viene effettuata la media di tre numeri interi letti da
tastiera:
import java.io.*;
public class Esempio {
public static void main(String[ ] args) {
InputStreamReader input = new InputStreamReader(System.in);
BufferedReader tastiera = new BufferedReader(input);
int eta1, eta2, eta3;
int media;
System.out.println("Persona 1 ****************");
System.out.print("Eta': ");
try {
String numeroLetto = tastiera.readLine();
eta1 = Integer.valueOf(numeroLetto).intValue();
}
catch(Exception e) {
System.out.println("\nNumero non corretto!");
return;
}
System.out.println("Persona 2 ****************");
System.out.print("Eta': ");
try {
String numeroLetto = tastiera.readLine( );
eta2 = Integer.valueOf(numeroLetto).intValue( );
}
catch(Exception e) {
System.out.println("\nNumero non corretto!");
return;
}
System.out.println("Persona 3 ****************");
System.out.print("Eta': ");
try {
String numeroLetto = tastiera.readLine( );
eta3 = Integer.valueOf(numeroLetto).intValue( );
}
catch(Exception e) {
System.out.println("\nNumero non corretto!");
return;
}
118
LE STRUTTURE DI CONTROLLO
while (true) {
// istruzioni
}
GLI ARRAY
Come abbiamo visto nel linguaggio C, larray viene indicato da un unico nome
collettivo, dove ogni elemento individuato da un indice. In Java, la
dichiarazione di un array pu essere del tipo predefinito (int, float), oppure pu
essere una classe (String, Automobile). Si possono creare array contenenti un
insieme di oggetti tutti della stessa classe. Lallocazione di un array viene
eseguita utilizzando loperatore new.
import java.io.*;
public class parametri {
if(args.length == 0) {
System.out.println("Nessun parametro");
119
return;
}
for(int i = 0; I < args.length; i++) {
System.out.println(args[i]);
}
}
}
LE ECCEZIONI
try {
// istruzione da controllare
}
catch (eccezione) {
// operazioni da eseguire se leccezione si verifica
}
import java.io.*;
public class Eccezione {
try {
a = 15/divisore;
}
catch(ArithmeticException e) {
System.out.println("Divisione impossibile");
return;
}
}
}
120
import java.io.*;
public class Voti {
public static void main(String argv[ ] ) {
InputStreamReader input = new InputStreamReader(System.in);
BufferedReader tastiera = new BufferedReader(input);
Esercizi
CAPITOLO XVII
GLI OGGETTI IN JAVA
Ogni classe viene memorizzata in un file con estensione .java. Una volta
dichiarata una classe, pu essere stabilito il livello di visibilit per accertare da
quale punto del programma possibile creare delle istanze della stessa. Questi
livelli sono:
Se non esiste alcun livello di visibilit, significa che la classe pu essere usata
da tutte le classi allinterno della libreria in cui stata definita.
<tipo> <nome_variabile>
1) Static: sono attributi legati alla classe e di cui esiste una sola copia
2) Final: gli attributi vengono resi delle costanti
Cornice
larghezza
altezza
peso
class Cornice {
private int larghezza, altezza;
public float peso;
}
N.B: la classe appena vista, non contenendo il metodo main, non pu essere
considerata un vero programma, per pu essere usata in altre classi.
124
<livello_visibilit><tipo_restituito><nome_metodo>(<parametri>) {
// variabili
// istruzioni
}
class coppia {
int a,b;
System.out.println(coppia = +a+ , +b);
}
class coppia {
int a,b;
void stampa( ) {
System.out.println(coppia = +a+ , +b);
}
}
125
class temp {
private float temperatura[ ] = new float[5];
public float media( ) {
float somma = 0;
for (int i = 0; i < temperatura.length; i++) {
somma = somma + temperatura[i ];
}
return (float) somma/ temperatura.length;
}
}
import java.io.*;
public class Esempio {
public static void main(String argv[ ] ) {
int numero = 0;
while(numero >= 0) {
numero = (int) (Math.random( )*20);
System.out.println(numero);
if(numero == 4)
return;
}
System.out.println("Questa istruzione non verr mai eseguita");
}
}
Nel linguaggio Java troviamo particolari metodi detti costruttori che vengono
eseguiti automaticamente ad ogni creazione di un nuovo oggetto e che servono
di solito ad inizializzare lo stesso. Un costruttore ha lo stesso nome della
classe, non ha valore di ritorno e non deve essere dichiarato void.
class Esempio {
public static void main(String argv[ ]) {
Libro mate; // dichiarazione
Mate = new Libro(25); // allocazione
// dichiarazioni e/o istruzioni
}
}
class Libro {
public int prezzo;
public Libro (int pr) {
prezzo = pr;
}
}
}
}
Si pu definire int pr con lo stesso nome della variabile, per in questo caso
lattributo deve essere preceduto dalla parola chiave this. Come si pu vedere
nelle tre righe di programma
class cerchio {
protected double raggio;
public cerchio (double r) {
raggio = r;
}
public void setRaggio (double r) {
raggio = r;
}
public double Circonferenza( ) {
double circ = 2 *raggio * Math.PI;
return circ;
}
public double Area( ) {
return (raggio*raggio*Math.PI);
}
}
public class Progcerchio {
double area;
System.out.println("Primo cerchio.");
128
Esempio:
Libro l1 = new Libro(21);
Libro l2 = l1;
Un attributo di tipo static legato alla classe, cio vengono creati diversi
oggetti per quella classe ed esiste una sola copia dellattributo, condiviso da
tutte le istanze della classe. Un esempio costituito dallattributo PI (pi greco)
nella classe Math e visto nel precedente programma. Una dichiarazione pu
essere la seguente:
<nome_classe>. <metodo_static>
ARRAY DI OGGETTI
Diversi oggetti si possono raggruppare per creare degli array di oggetti, cio
array i cui oggetti sono istanze della classe. In riferimento alla classe Libro,
129
Libro collezione[ ] = new Libro[10]; devono essere allocati anche gli oggetti:
EREDITARIET
In Java esiste solo lereditariet singola, cio ogni classe pu avere al pi una
sopraclasse. Una sottoclasse si dichiara aggiungendo nellintestazione il nome
della sopraclasse, con la parola chiave extends. Il prototipo di dichiarazione
il seguente:
Esempio: class a {
public int numA;
}
class b extends a {
public int numB;
}
setRaggio
Circonferenza
Area
Cilindro
altezza
volume
130
Nellesempio seguente viene usata la parola chiave super, che si riferisce alla
sopraclasse della classe in cui viene utilizzata.
Esempio: creare una classe cilindro e scrivere il programma per stampare larea
del cerchi e il volume del cilindro.
class cerchio {
protected double raggio;
public cerchio(double r) {
raggio = r;
}
public void setRaggio(double r) {
raggio = r;
}
public double Area( ) {
return (raggio*raggio*Math.PI);
}
}
class cilindro extends cerchio {
private double altezza;
public cilindro(double raggio, double altezza) {
super(raggio);
this.altezza = altezza;
}
public double Volume( ) {
double vol = Area( ) * altezza;
return vol;
}
}
public class Cilindro {
public static void main(String argv[ ]) {
cerchio c = new cerchio(5.5);
cilindro cil = new cilindro(5.5,7.0);
double area;
double volume;
System.out.println("Area cerchio:");
area = c.Area();
area = (double) Math.round(area*1000)/1000;
System.out.println("Area = "+area);
c.setRaggio(8.0);
volume = cil.Volume( );
System.out.println("Volume cerchio = " +volume); } }
131
IL POLIMORFISMO
Esempio: overridding del metodo Area nella classe cilindro, per calcolare la
superficie totale di un cilindro.
class cerchio {
protected double raggio;
public cerchio(double r) {
raggio = r;
}
public void setRaggio(double r) {
raggio = r;
}
public double Area( ) {
double AreaCer;
AreaCer = raggio*raggio*Math.PI;
return AreaCer;
}
}
public class CilLaterale {
public static void main(String argv[ ]) {
cerchio c = new cerchio(5.5);
cilindro cil = new cilindro(5.5,7.0);
double area;
double supTotale;
System.out.println("Area cerchio:");
area = c.Area();
area = (double) Math.round(area*1000)/1000;
System.out.println("Area = " +area);
c.setRaggio(8.0);
supTotale = cil.AreaTot( );
System.out.println("Superficie totale = " +supTotale);
}
}
Esempio: dichiariamo una classe final come final class ultima { }. Se scriviamo:
class nuova extends ultima { } commettiamo un errore. Anche i metodi possono
essere dichiarati usando la parola chiave final.
LE STRINGHE
String
charAt(int)
equals(String)
length
substring(int,int)
toLowerCase
toUpperCase
import java.io.*;
public class Analisi {
FreqVocali=(double) Vocali/Testo.length( );
FreqVocali=(double) Math.round(FreqVocali*100)/100;
Esercizi
Bicicletta
NumeroMarce
Peso
Esagono
lato
apotema
perimetro
area
12) Dati 10 nomi di persona contare quelli che iniziano con una vocale.
137
CAPITOLO XVIII
LINTERFACCIA GRAFICA AWT
x
(0,0)
600 pixel
LA LIBRERIA AWT
In Java la parte grafica contenuta nel package java.awt, che deve essere
importato in ogni programma che preveda luso di uninterfaccia grafica. Una
GUI formata da due elementi principali:
I CONTENITORI
import java.awt.*;
public class Vuota {
In questo modo si aprir una finestra che pu essere modificata ma non chiusa,
infatti levento di chiusura avviene solo se chiudiamo la finestra del dos che
appare assieme alleseguibile dellapplicazione.
Finestra vuota
Per inserire le componenti allinterno dei contenitori, si usa il metodo add, che
polimorfico. Se ad esempio si vuole aggiungere un pannello p ad una finestra
f si scriver: f.add(p);
import java.awt.*;
public class Sfondo {
LE COMPONENTI
p.add(vuota);
p.add(nome);
p.add(completa);
I metodi usati per le etichette sono i seguenti:
import java.awt.*;
public class Input {
Input
Inserisci il nome :
Inserisci il prezzo :
AREE DI TESTO: le aree di testo sono create dalla classe TextArea e sono
formate da pi righe di testo.
I metodi a disposizione per la classe TextArea sono gli stessi visti per la classe
TextField, con laggiunta del metodo append(String), che consente di
inserire nuovo testo alla fine dellarea senza cancellare il contenuto esistente.
143
import java.awt.*;
public class Area {
Area di testo
import java.awt.*;
class area extend Canvas {
public void paint (Graphics g) {
// metodi
} }
144
import java.awt.*;
class area extends Canvas {
public void paint(Graphics g) {
g.setColor(Color.red);
for(int i=1; i<=5; i++) {
g.drawLine(50, 10*i, 200, 20+10*i);
g.setColor(Color.blue);
g.drawString("LINEE PARALLELE", 50, 100);
}
}
}
public class Disegno {
Disegno
LINEE PARALLELE
Input
rosso
rosso
verde
bianco
arancione
In Java il gestore dei contenitori si chiama Layout Manager, che deve essere
assegnato ad un contenitore, mediante il metodo set Layout, il quale riceve
come parametro un oggetto rappresentante il gestore. Per assegnare ad un
frame f il gestore FlowLayout si procede in questo modo:
f.setLayout(new FlowLayout ( ));
FlowLayout = new FlowLayout ( );
f.setLayout(gestore);
Bottoni
b1 b2 b3
North
South
import java.awt.*;
public class Tabella {
Tabella
Nome
Cognome
Telefono
import.java.awt.event.*;
class GestoreFinestra implements WindowListener { }
Esempio: creare una finestra e registrare il gestore per gli eventi legati ad
essa.
import java.awt.*;
import java.awt.event.*;
public class Vuota1 {
PRESSIONE DI UN BOTTONE
import java.awt.*;
import java.awt.event.*;
public class Bottoni {
}
public void actionPerformed(ActionEvent e) {
String bottone = e.getActionCommand( );
if(bottone.equals("Superiore")) {
a.append("E'statopremuto il bottone *superiore*.\n");
}
if(bottone.equals("Inferiore")) {
a.append("E' stato premuto il bottone *inferiore*.\n");
}
}
}
class GestoreFinestra implements WindowListener {
public void windowIconified(WindowEvent e) { }
public void windowDeiconified(WindowEvent e) { }
public void windowActivated(WindowEvent e) { }
public void windowDeactivated(WindowEvent e) { }
public void windowOpened(WindowEvent e) { }
public void windowClosed(WindowEvent e) { }
public void windowClosing(WindowEvent e) {
System.out.println("Programma terminato.");
System.exit(0);
}
}
Finestra vuota
Superiore
stato premuto il bottone superiore
stato premuto il bottone inferiore
Inferiore
import java.awt.*;
import java.awt.event.*;
151
Gradi centigradi 0
Converti
import java.awt.*;
import java.awt.event.*;
public class Cambia {
public ModificaFrame( ) {
super("Cambia sfondo!");
setSize(400,250);
addWindowListener(new GestoreFinestra( ));
inizializzaCombo( );
c.setBackground(sfondo);
p.add(new Label("Colore di sfondo: "));
p.add(colori);
p.add(cambia);
add(p, "North");
add(c, "Center");
cambia.addActionListener(this);
}
private void inizializzaCombo( ) {
colori.addItem("bianco");
colori.addItem("rosso");
colori.addItem("arancione");
colori.addItem("giallo");
colori.addItem("verde");
colori.addItem("blu");
colori.addItem("nero");
}
public void actionPerformed(ActionEvent e) {
String bottone = e.getActionCommand( );
if (bottone.equals("Cambia")) {
switch (colori.getSelectedIndex( )) {
case 0: sfondo= Color.white; break;
case 1: sfondo= Color.red; break;
case 2: sfondo= Color.orange; break;
case 3: sfondo= Color.yellow; break;
case 4: sfondo= Color.green; break;
case 5: sfondo= Color.blue; break;
case 6: sfondo= Color.black; break;
}
c.setBackground(sfondo);
}
}
}
class GestoreFinestra implements WindowListener {
public void windowIconified(WindowEvent e) { }
public void windowDeiconified(WindowEvent e) { }
public void windowActivated(WindowEvent e) { }
public void windowDeactivated(WindowEvent e) { }
public void windowOpened(WindowEvent e) { }
public void windowClosed(WindowEvent e) { }
public void windowClosing(WindowEvent e) {
System.out.println("Programma terminato.");
154
System.exit(0);
}
}
Cambia sfondo
giallo cambia
Colore di sfondo giallo
bianco
rosso
arancione
verde
blu
nero
Esercizi
nomi, e ogni volta che viene premuto il bottone, i nomi vengono ricopiati
nellarea di testo.
CAPITOLO XIX
LE APPLET JAVA
IL CONCETTO DI IPERTESTO
CARATTERISTICHE DI HTML
Mentre nel primo caso occorre conoscere HTML e scrivere i comandi tramite
leditor di testo, nel secondo caso la conoscenza di HTML non necessaria, in
quanto lapplicazione permette allutente di comporre il documento a partire
dallaspetto risultante: i comandi vengono aggiunti man mano dalleditor a
seconda degli elementi (testo, grafica, ecc) inseriti dallutente.
Il file HTML creato tramite leditor deve essere salvato come documento
testuale con estensione .html o .htm; in caso contrario, il documento verr
visualizzato come testo e non come documento HTML.
COMANDI HTML
I comandi HTML sono detti tag (o marcatori) e devono sempre essere scritti
allinterno di parentesi uncinate (<NOMETAG>). I tag, tranne alcune
eccezioni, devono essere aperti e chiusi, e la loro influenza si esercita sul testo
contenuto al loro interno (tra lapertura e la chiusura del tag, che avviene
facendo precedere il comando dal carattere /).
Inoltre, i tag possono avere degli attributi che assumono dei valori (scritti tra
virgolette). Gli attributi (scelti tra un insieme predefinito) sono scritti di
seguito al nome del comando, allinterno delle parentesi.
STRUTTURA DI UN DOCUMENTO
head (intestazione)
body (corpo del documento)
possibile rendere pi gradevole una pagina inserendo nel body degli attributi
che modificano laspetto del testo e lo sfondo della pagina. Ad esempio, si pu
colorare lo sfondo della pagina, modificare il colore del testo, e laspetto dei
link.
TESTO E FORMATTAZIONE
Tutto ci che viene scritto dentro il corpo del documento, tranne naturalmente
i comandi e i loro attributi, viene visualizzato dal browser come testo. Per
inserire la formattazione (a capo, corsivo, grassetto, centratura del testo, ecc.)
si utilizzano i comandi appositi.
A questo punto opportuno notare come i comandi di HTML possano essere
annidati, cio inscatolati uno nellaltro. Cos facendo si possono ottenere
effetti sofisticati come:
<NOME-TAG>
informazioni
</NOME-TAG >
<HTML>
<HEAD>
descrizione delle caratteristiche del documento 1
</HEAD>
<BODY>
documento vero e proprio 2
</BODY>
</HTML>
Lelemento fondamentale nella parte di head il titolo del documento che
verr visualizzato come titolo nella finestra del browser.
Poich il titolo viene usato anche per costruire gli indici automatici usati
daimotori di ricerca importante che esso sia significativo.
Esempio:
<HEAD>
<TITLE>Titolo della pagina</TITLE>
</HEAD>
Titoli
<H1> titolo1 </H1>
<H2> titolo2 </H2>
...
<H6> titolo6 </H6>
Osservazione: <H1>, ..., <H6> sono usati anche per controllare le dimensioni dei
caratteri: <H1> corrisponde a caratteri grandi, ..., <H6> a caratteri piccoli.
<BR> {a capo}
<P> {a capo e inizio nuovo paragrafo}
Esempio:
<BODY>
<H1> Scienze Matematiche </H1>
<P>Questo documento descrive il corso di laurea.
<BR>Il documento diviso in pi capitoli.
<P>
<H2> Durata del corso </H2>
....
</BODY>
Esempio:
<FONT size="5" color="red" font="Courier">
Questo testo viene visualizzato in rosso, ha dimensione 5 e font Courier
</FONT>
Esistono vari modi per cambiare il formato dei caratteri.
Stili fisici
Stili logici
ALLINEAMENTO
Indici e pedici
Esempio:
<HTML>
<BODY bgcolor="white" text="red">
<BASEFONT size="4">
<H1>
<CENTER> Scienze Matematiche</CENTER>
</H1>
<P align="right">
<FONT size=+1>Laurea triennale nuovo ordinamento</FONT>
162
</P>
Presentazione del <EM> Corso di laurea </EM>
<P>
<H2> Durata </H2>
La durata è di <STRONG> 3 </STRONG> anni. <BR>
Il corso prevede <STRONG> 180 </STRONG> crediti.
<BR>
<FONT size=-1 color="blue">
La laurea specialistica non stata ancora attivata.
</FONT>
<BR>
<ADDRESS>
pagina creata da X Y
</ADDRESS>
</BODY>
</HTML>
IMMAGINI
<IMG
src="pathname o URL dell'immagine"
align="left" | "right" | "center"
alt="text" {testo alternativo all'immagine}
border="numero" {larghezza in pixel del bordo}
height="numero" {altezza in pixel dellimmagine}
width="numero" {larghezza in pixel dellimmagine}
hspace="numero" {spazio in pixel a destra e sinistra dell'immagine}
vspace="numero" {spazio in pixel sopra e sotto l'immagine}
usemap="nome" {permette di creare image map} >
Esempio:
<IMG src="images/foto.gif" align="left" width="100" height="120" vspace="20">
Gli attributi height e width istruiscono il browser sullo spazio che deve essere
lasciato per la visualizzazione dellimmagine. Il caricamento delle pagine
diventa quindi pi veloce perch il browser pu cominciare a scrivere il testo
successivo prima ancora di aver caricato completamente unimmagine (tanto sa
quanto spazio occuper limmagine).
Tuttavia, luso di questi attributi sconsigliato per cambiare le dimensioni
delle immagini perch queste verranno visualizzate in forma distorta o
sgranata. Se si vuole imgrandire o rimpicciolire unimmagine conveniente
163
LEGAMI IPERTESTUALI
Fino ad ora abbiamo visto come creare singole pagine HTML. Per avere un
ipertesto sono necessari dei collegamenti (link) tra le pagine. Prima di vedere
come si definisce un collegamento necessario capire come formato un
indirizzo URL per il Web. Un URL costituito da varie parti:
Esempio:
1)http://www.disi.unige.it/index.html {file index.html sul server
www.disi.unige.it}
2) mailto:ribaudo@disi.unige.it {attiva il programma di invio mail}
3) ftp://ftp.disi.unige.it/didattica/materiale.pdf
{attiva trasferimento del file materiale.pdf che si trova nella cartella didattica
dal server ftp.disi.unige.it}
4) telnet:elios.disi.unige.it {attiva la finestra di interazione remota}
Unesempio di pagina html corredata di tutti i tag visti finora e detta anche
modulo di feedback, presentata di seguito:
<HTML>
<HEAD>
<TITLE>Osservazioni e Commenti</TITLE>
</HEAD>
<BODY BGCOLOR = "FFFFCC">
<H2><B>Mandaci le tue osservazioni</B></H2>
<P>
164
N.B. provare a scrivere tutti gli esempi in html visti finora, ricopiandoli su un
blocco note e salvando il file con estensione.html.
LA CLASSE APPLET
Browser
Finestra
Applet
Pannello
165
import java.applet.*;
public class <nome_applet> extends Applet {
// attributi
// metodi
}
Nelle applet manca il metodo main, che viene sostituito dal metodo init,
contenente di solito le operazioni di inizializzazione, come ad esempio il
posizionamento delle componenti nellapplet e il caricamento delle immagini.
possibile trasformare una delle applicazioni precedentemente viste in
unapplet, spostando semplicemente il contenuto del main nel metodo init.
1) start
2) stop
3) destroy
caricamento
init
start
stop
destroy
166
import java.applet.*;
Lapplet, per essere eseguita, deve essere caricata in una pagina web, quindi
bisogan creare il modulo di feedback contenente i comandi per eseguire e
visualizzare lapplet. Il documento pu essere il seguente:
<HTML>
<HEAD>
<TITLE>Applet di prova</TITLE>
</HEAD>
</BODY>
<CENTER>
<APPLET CODE = applet.class WIDTH = 300 HEIGHT = 150>
Applet non eseguibile
</APPLET>
</CENTER>
</BODY>
</HTML>
Se non si ha a disposizione un browser web o esso molto vecchio e non
riconosce il tag APPLET, possibile usare il programma appletwiewer, che
simula un browser, pur non visualizzando le pagine html.
import java.awt.*;
import java.applet.*;
generaNumeri();
}
public void generaNumeri( ) {
int casuale;
for(int i = 1; i<=10; i++) {
casuale = (int)(Math.random( )*1000);
ta.append(" > " +casuale+ "\n");
}
}
}
Applet avviato
I PARAMETRI
Il tag <APPLET> pu anche contenere dei parametri che devono essere passati
allapplet, e sono molto utili perch permettono di costruire applet generiche
che vengono poi adattate in base ai valori dei parametri. Ad esempio un
parametro pu specificare il colore di sfondo dellapplet, oppure le sue
dimensioni.
La struttura del tag <APPLET> contenente i parametri la seguente:
</APPLET>
Esempio:
import java.applet.*;
public class ordine extends Applet {
I DISEGNI
import java.awt.*;
import java.applet.*;
public class messaggio extends Canvas {
public void paint(Graphics g) {
g.drawString("JAVA", 10, 10);
}
import java.awt.*;
import java.applet.*;
public class disegno extends Canvas {
private int w, h;
public void paint(Graphics g) {
w = getSize( ).width;
h = getSize( ).height;
g.drawLine (0, 0, w 1, h 1);
g.drawLine (0, h 1 , w 1, 0);
}
Applet
Per disegnare figure piene si usano i metodi fillOval per lovale e fillArc per
larco.
Per inserire una scritta in un grafico si usa il metodo drawString, mentre per
il font si usa il metodo setFont(Font).
.
g.drawRect(0, 0, w 1, h 1);
g.setColor(Color.red);
g.drawOval(0, 0, w 1, h 1);
.
g.setColor(Color.red);
g.fillOval(0, 0, w 1, h 1);
.
171
import java.awt.*;
import java.applet.*;
G R A F I C A
172
Nelle applet con luso della grafica, importante gestire linterazione con gli
eventi del mouse, che possono essere:
import java.awt.*;
import java.applet.*;
import java.awt.event.*;
import java.awt.*;
import java.applet.*;
import java.awt.event.*;
import java.util.Vector;
add(a,"Center");}
}
class area extends Canvas implements MouseListener,ActionListener {
private Choice forma;
private Vector punti = new Vector(1,1);
private Vector forme = new Vector(1,1);
private final int lato = 20;
private final int diametro = 20;
punti.removeAllElements( );
forme.removeAllElements( );
repaint( );
}
}
disegno
Applet
cerchio Pulisci
quadrato
Applet avviata
GRAFICI MATEMATICI
Parabola
a
b
c
valuta
import java.awt.*;
import java.applet.*;
import java.awt.event.*;
if (bottone.equals("Disegna")) {
try {
numero = a.getText();
ValA = Double.valueOf(numero).doubleValue( );
numero = b.getText();
ValB = Double.valueOf(numero).doubleValue( );
numero = c.getText();
ValC = Double.valueOf(numero).doubleValue( );
}
catch(Exception exc) {
parab = null;
p.setParabola(parab);
return;
}
parab = new parabola(ValA, ValB, ValC);
p.setParabola(parab);
}
}
}
class piano extends Canvas {
private parabola parab = null;
private final double XMAX = 20.0;
private final double XMIN = -20.0;
private final double YMAX = 18.0;
private double YMIN;
private double UNITA;
private int w, h;
w = getSize( ).width;
h = getSize( ).height;
UNITA = (double) w/(XMAX XMIN);
YMIN = YMAX ((double) h/UNITA);
disegnaAssi(g);
if(parab != null) {
disegnaParabola(g);
}
}
public Point trasforma(double x, double y) {
Point schermo = new Point ( );
schermo.x = (int) Math.round((x XMIN)*UNITA);
schermo.y = (int) Math.round((YMAX y)*UNITA);
return schermo;
}
public void disegnaAssi(Graphics g) {
178
Loutput il seguente:
disegno
Applet
A= 2 B= -3 C= -4 Disegna
Applet avviata
GRAFICI STATISTICI
import java.awt.*;
import java.applet.*;
import java.awt.event.*;
if(totale != 0.0) {
disegnaTorta(g);
}
}
try {
numero = valori[i].getText( );
val[i] = Double.valueOf(numero).doubleValue( );
}
catch(Exception exc) {
val[i] = 0.0;
}
totale = totale + val[i];
}
repaint( );
}
}
}
Statist
Applet
10
23
56
78
14
Disegna
Applet avviata
183
import java.awt.*;
import java.applet.*;
import java.awt.event.*;
double incremento,arrot;
g.setColor(Color.black);
g.drawRect(0, 0, w 1, h 1);
p1 = trasforma(XMIN,0);
p2 = trasforma(XMAX,0);
g.drawLine(p1.x, p1.y, p2.x, p2.y);
p1 = trasforma(0,YMIN);
p2 = trasforma(0,YMAX);
g.drawLine(p1.x, p1.y, p2.x, p2.y);
incremento = (YMAX YMIN)/10;
for(double y = 0; y < YMAX; y = y + incremento) {
p1= trasforma(0, y);
g.drawLine(p1.x-2, p1.y, p2.x+2, p2.y);
arrot = (double) Math.round(y*10)/10;
g.drawString(" " +arrot, p1.x+2, p1.y);
}
for(double y = 0; y>YMIN; y = y incremento ) {
p1= trasforma(0, y);
g.drawLine(p1.x-2, p1.y, p2.x+2 , p2.y);
arrot = (double) Math.round(y*10)/10;
g.drawString(" " +arrot, p1.x+2, p1.y);
}
}
public void actionPerformed(ActionEvent e) {
String bottone = e.getActionCommand( );
String numero;
double spazio;
if (bottone.equals("Disegna")) {
YMAX = 0.0;
YMIN = 0.0;
for(int i = 0; i < val.length; i++) {
try {
numero = valori[i].getText();
val[i] = Double.valueOf(numero).doubleValue( );
}
catch(Exception exc) {
val[i] = 0.0;
}
if(val[i] > YMAX) {
YMAX = val[i];
}
else if(val[i] < YMIN) {
YMIN = val[i];
}
}
spazio = (YMAX YMIN)/10;
YMAX = YMAX + spazio;
186
Loutput il seguente:
disegno
Applet
12 35
30
23
25
8 20
15
31
10
10
5
0
Disegna
Applet avviata
Esercizi
10) Creare unapplet che mostra tre caselle di testo disposte una sotto
laltra.