In questo corso:
Calcolatrici, termometri digitali, telefonini, ecc, hanno in comune:
Da notare:
In alcuni dispositivi, delle parti possono mancare.
Esempio banale: quello che succede quando si preme il tasto +
Nei dispositivi non programmabili succede sempre la stessa cosa. In quelli programmabili dipende dal programma che si sta eseguendo.
Il computer è sempre lo stesso.
Cosa succede se si preme + dipende dal programma che si sta eseguendo.
La calcolatrice fa sempre le stesse cose, il computer può fare cose diverse se opportunamente programmato.
I computer sono in grado di eseguire solo operazioni semplici.
Programma: specifica di cosa deve fare il calcolatore.
Il programma dice al calcolatore che cosa deve fare.
Sono istruzioni che il calcolatore deve eseguire.
Dati i coefficienti di una equazione di secondo grado a, b e c, calcola la radice:
calcola bb - 4ac se viene positivo: calcola la radice quadrata calcola ( -b + radice(bb-4ac) ) / 2ac ...
Sono tutte istruzioni semplici.
Sono combinate a formare un programma che può essere anche complesso.
Vantaggio dei computer: una volta dato il programma, lo si può usare più volte.
Esempio: risolvere 20 equazioni di secondo grado.
Nella prima fase: viene detto al calcolatore cosa deve fare.
Nella seconda fase il calcolatore esegue, ossia fa quello che è stato detto.
La prima fase non è necessaria solo se il programma è stato già scritto da altri.
World, Excel, ecc. sono tutti programmi, scritti da altri.
In questo corso: come si scrivono i programmi.
Come tutti i dispositivi elettronici:
CPU=parte che elabora.
Attenzione! Non è il contenuto del cabinet (uso improprio fatto dai commercianti).
La elaborazione avviene seguendo le istruzioni che stanno scritte nel programma.
Questo programma calcola le soluzioni di una equazione di secondo grado dati i suoi coefficienti a, b e c.
/* Soluzione equazione di secondo grado. */ class SecondoGrado { public static void main (String args[]) { double a=2, b=5, c=3; double d; double s1, s2; d=b*b-4*a*c; if( d==0 ) { s1=(-b - Math.sqrt( b*b -4*a*c ))/(2*a); s2=s1; System.out.println("Soluzioni coincidenti: " + s1); } if( d>0 ) { s1=(-b - Math.sqrt( b*b -4*a*c ))/(2*a); s2=(-b + Math.sqrt( b*b -4*a*c ))/(2*a); System.out.println("Soluzioni reali: " + s1 + " " + s2); } if( d<0 ) { System.out.println("Soluzioni complesse"); } } }
Sembra complicato, ma non lo è!
Da notare:
Tipi di istruzioni:
Ogni istruzione dice al calcolatore una cosa da fare.
Ogni istruzione usa una o più parti del calcolatore.
La compilazione è necessaria perchè il programma, per essere eseguito, deve essere scritto in un linguaggio che il calcolatore è in grado di capire. Esempi si vedranno nel corso di calcolatori elettronici.
Lo vedremo in pratica in laboratorio.
Si apre una finestra che usiamo per scrivere programmi ed eseguirli.
Occorre scrivere il testo del programma.
Per iniziare a scrivere, usare notepad (scrivere notepad nome.java nella finestra nera).
Si apre una finestra in cui possiamo scrivere il programma. Per prima cosa viene chiesto se il file va creato. Rispondere si.
Nella finestra bianca (blocco note), scrivere un programma.
Un esempio di programma:
class Primo { public static void main (String args[]) { System.out.println("Una sequenza di caratteri qualsiasi"); } }
Va scritto nel blocco note.
Paragone:
File->Salva
Il salvataggio è la memorizzazione permanente del programma.
È necessario per poter poi tradurre e usare il programma.
Il programma sta sul calcolatore.
Il calcolatore non lo può eseguire.
Serve un passo di traduzione.
Si dice al calcolatore di eseguire il programma.
Il calcolatore fa quello che gli è stato detto.
Il programma diceva al calcolatore di stampare ABCDEF, e lui l'ha fatto.
Abbiamo semplicemente effettuato i vari passi:
Se notepad è stato già chiuso, lanciarlo di nuovo.
Dato che il file già esiste, non viene chiesto di crearlo.
Scrivere le istruzioni di seguito.
class Primo { public static void main (String args[]) { System.out.println("ABCDEF"); System.out.println("Altra stringa"); } }
Le istruzioni vengono eseguite una per volta, in ordine.
Occorre di nuovo salvare il file.
Il programma va nuovamente tradotto ed eseguito.
Viene stampato:
ABCDEF Altra stringa
Per ora, non diamo la regola generale.
Diciamo solo:
Non diamo la sintassi esatta.
Per ora diciamo che le due parti iniziali e finali di un programma sono fatte cosí:
class nomeprogramma { public static void main (String args[]) { ... } }
Le istruzioni vanno messe in sequenza al posto dei puntini ...
Il nome del programma è il nome del file senza la parte .java
Non si possono mettere spazi all'interno del nome del programma.
Scrivere un programma che stampa, su tre righe diverse, il proprio nome, data di nascita e luogo di residenza.
tempo: 3 minuti.
In aula: scrivere il programma su carta.
In laboratorio: scrivere sul computer, tradurre ed eseguire.
L'istruzione System.out.println("..."); stampa quello che c'è fra le virgolette.
Nel nostro caso, abbiamo tre righe da stampare.
Servono tre istruzioni, da eseguire in sequenza.
class TreRighe { public static void main(String args[]) { System.out.println("Aristide Coluzzi"); System.out.println("4/12/1934"); System.out.println("Rovereto"); } }
Come scrivere, tradurre ed eseguire il programma:
come visto prima.
(notepad, javac, java)
Regola generale: la prima versione di un programma è sbagliata.
class TreRighe { public static void main(String args[]) { System.out.println("Aristde Coluzzi"); System.out.println("4/12/1934"); Systm.out.println("Rovereto"); } }
Ci sono due errori. Trovarli e correggerli.
I due errori sono:
L'effetto del primo errore è che viene stampato il nome sbagliato.
Il secondo errore causa un errore di compilazione:
javac non riesce a tradurre il programma.
javac infatti dà il messaggio:
TreRighe.java:5: cannot resolve symbol symbol : class out location: package Systm Systm.out.println("Rovereto"); ^ 1 error
Paragone con il linguaggio umano: "questo è una tavolo" è un errore sintattico, perchè al posto di una va scritto uno. Però il significato è corretto.
La frase "siamo nell'anno 1998" è sintatticamente corretta (rispetta le regole dell'italiano); è però una affermazione falsa
Attenzione: solo il primo errore è sicuro: gli altri sono solo "possibili" errori.
Un esempio di programma con un errore:
class MoltiErrori { public satic void main(String args[]) { System.out.println("Aristde Coluzzi"); System.out.println("4/12/1934"); Systm.out.println("Rovereto"); } }
Errore: satic invece di static
Messaggio di errore di javac:
=============================================== MoltiErrori.java:2:expected public satic void main(String args[]) { ^ MoltiErrori.java:6: ';' expected } ^ MoltiErrori.java:2: cannot resolve symbol symbol : class satic location: class MoltiErrori public satic void main(String args[]) { ^ 3 errors ===============================================
I primi programmi di 10 righe generano 24 messaggi di errore.
Gli errori veri di solito sono due o tre.
Una volta corretti gli errori sintattici, il programma si può eseguire.
Se java nomeprogramma non fa quello che ci si aspetta, il programma va modificato.
Questi errori possono essere molto difficili da individuare.
È spesso necessario correggere/compilare/eseguire il programma più volte.