Dal c a Java (3/3)
-
Upload
marcello-missiroli -
Category
Technology
-
view
178 -
download
1
Transcript of Dal c a Java (3/3)
www.googleslidesppt.com _ 30+ Ready Made Google Slides & PowerPoint Presentation for Free
Dal C/C++ a Java (in 3*30 minuti)Se sapete già programmare...non riscopriamo l'acqua calda!
Parte 3
Marcello Missiroli ([email protected])
Di
che
si
tratta?
01
02
03
04
Ipotesi
Voi conoscete già un linguaggio di
programmazione (C e/o C++)
Tesi
Non occorre rispiegare tutto daccapo:
applicheremo un insegnamento differenziale
Metodologia
Trasformeremo un programma che ben
conoscete (in C/C++) in un programma Java
Verifica
Poi toccherà a voi convertire un programma!
Rubrica
Grande classico, nel quale si introducono
struct e array.
Partiremo da un codice gentilmente offerto
dall'università di Bologna (è C e non C++, ma
poco cambia ai nostri fini).
Partiamo con lo scheletro di un programma
Java funzionante (eliminando quindi già
include e namespace).
Rubrica (C++)
package rubrica;
public class Rubrica {
public static void main(String[] args) {
}
}
Dichiarazione di variabili.
Passo 1
package rubrica;
public class Rubrica {
#define N 4
struct studente{
char Nome[20];
char Cognome[20];
int Voto;};
void leggi(int n, struct studente Vet[]);
float media(int n, struct studente Vet[]);
public static void main(String[] args) {
int i; struct studente V[N];
leggi(N,V);
for(i=0;i<N;i++){
printf("%s\n",V[i].Nome);
printf("%s\n", V[i].Cognome); }
printf("\nVoto medio: %f\n",media(N,V));
}
}
Conversioni note e dichiarazioni di variabili
Passo 1
package rubrica;
public class Rubrica {
public static final int N = 4;
struct studente{
char Nome[20];
char Cognome[20];
int Voto;};
void leggi(int n, struct studente Vet[]);
float media(int n, struct studente Vet[]);
public static void main(String[] args) {
int i; struct studente V[N];
leggi(N,V);
for(i=0;i<N;i++){
System.out.print(V[i].Nome+" ");
System.out.println(V[i].Cognome);}
System.out.println("Voto medio:
"+media(N,V));}
}
Conversioni note e dichiarazioni di variabiliNon esiste equivalente per il define. Per le
costanti si usano variabili modificate da final
Le struct non esistono,
esistono gli OGGETTI,
determinanti dalle classi.
Un oggetto richiede un
file a parte.
Occupiamoci di questo
Passo 2
package rubrica;
public class Studente {
char Nome[20];
char Cognome[20];
int Voto;};
}
Un oggetto equivalente alla struct
Passo 2
package rubrica;
public class Studente {
String nome;
String cognome;
int voto;
}
Un oggetto equivalente alla struct
Qualche convenzione sui nomi:
Package: iniziano con minuscola
Classi: iniziano con Maiuscola
Variabili: iniziano con minuscola,
tranne le final, in MAIUSCOLO
Si usa il CamelCase.
Passo 2
package rubrica;
public class Rubrica {
public static final int N = 4;
struct studente{
char Nome[20];
char Cognome[20];
int Voto;};
void leggi(int n, struct studente Vet[]);
float media(int n, struct studente Vet[]);
public static void main(String[] args) {
int i; struct studente V[N];
leggi(N,V);
for(i=0;i<N;i++){
System.out.print(V[i].Nome+" ");
System.out.println(V[i].Cognome);}
System.out.println("Voto medio:
"+media(N,V));}
}
Torniamo al file originale e adattiamo.
Passo 2
package rubrica;
public class Rubrica {
public static final int N = 4;
void leggi(int n, struct studente Vet[]);
float media(int n, struct studente Vet[]);
public static void main(String[] args) {
int i;
Studente v[];
v=new Studente[N];
leggi(N,V);
for(i=0;i<N;i++){
System.out.print(V[i].Nome+" ");
System.out.println(V[i].Cognome);}
System.out.println("Voto medio:
"+media(N,V));}
}
Torniamo al file originale e adattiamo.
Passo 2
package rubrica;
public class Rubrica {
public static final int N = 4;
void leggi(int n, struct studente Vet[]);
float media(int n, struct studente Vet[]);
public static void main(String[] args) {
int i;
Studente v[];
v=new Studente[N];
leggi(N,V);
for(i=0;i<N;i++){
System.out.print(V[i].Nome+" ");
System.out.println(V[i].Cognome);}
System.out.println("Voto medio:
"+media(N,V));}
}
Torniamo al file originale e adattiamo.Studente non deve essere
Importato perché parte dello stesso
progetto e package
Per usare un array occorrono due istruzioni
Dichiarazione (come è fatta)
Istanziazione (quanti elementi)
Corollario: tutti gli array
in java sono dinamici
Passo 3
void leggi(int n, struct studente Vet[]){
int i,j;
for(i=0;i<n;i++){
printf("Inserisci Nome, Cognome e
Voto");
scanf("%s",Vet[i].Nome);
scanf("%s",Vet[i].Cognome);
scanf("%d",&Vet[i].Voto);
}
}
float media(int n, struct studente Vet[]){
int i;
float m=0.0;
for(i=0;i<n;i++)
m=m+Vet[i].Voto;
return m/n;
}
Tocchi finali: le due funzioni/metodi.
Passo 3
static void leggi(int n, Studente vet[]){
int i,j; Scanner in = new
Scanner(System.in);
for(i=0;i<n;i++){
System.out.println("Inserisci Nome,
Cognome e Voto");
//ATTENZIONE QUI!
vet[i].nome=in.nextLine();
vet[i].cognome=in.nextLine();
vet[i].voto=in.nextInt();
}
}
static float media(int n,Studente vet[]){
int i;
float m=0.0f;
for(i=0;i<n;i++)
m=m+vet[i].voto;
return m/n;}
Tocchi finali: adattiamo parametri...
Passo 3
static void leggi(int n, Studente vet[]){
int i,j; Scanner in = new
Scanner(System.in);
for(i=0;i<n;i++){
System.out.println("Inserisci Nome,
Cognome e Voto");
vet[i]=new Studente();
vet[i].nome=in.nextLine();
vet[i].cognome=in.nextLine();
vet[i].voto=in.nextInt();
}
}
static float media(int n,Studente vet[]){
int i;
float m=0.0f;
for(i=0;i<n;i++)
m=m+vet[i].voto;
return m/n;}
Tocchi finali: adattiamo parametri...
MOLTO IMPORTANTE:
In Java, un array di oggetti non riserva
alcuno spazio di memorizzazione!
Peranto, ogni oggetto va inizializzato
prima di esere usato.
Passo 3
static void leggi(int n, Studente vet[]){
int i,j; Scanner in = new
Scanner(System.in);
for(i=0;i<n;i++){
System.out.println("Inserisci Nome,
Cognome e Voto");
vet[i]=new Studente();
vet[i].nome=in.nextLine();
vet[i].cognome=in.nextLine();
vet[i].voto=in.nextInt();
}
}
static float media(int n,Studente vet[]){
int i;
float m=0.0f;
for(i=0;i<n;i++)
m=m+vet[i].voto;
return m/n;
}
Tocchi finali: e l'I/O
Agenda StyleR
iassu
nto
l Esistono classi, e struct
l Costanti definite tramite
const o #define.
l Array statici (dinamici con
difficoltà)
l
C/C++
l Non esistono struct, solo
classi di oggetti.
l Array dinamici (non esistono
statici). Se si tratta di
oggetti, l’array non
inizializza lo spazio dei
singoli oggetti (riferimenti)
l Non esistono #define
Java
Agenda StyleS
org
en
ti
http://lia.deis.unibo.it/Courses/L
abA0102/esercitazioni/Sol-
sett7.html
Originale C++
https://pastebin.com/iw7pHGui
Versione Java
Avete
le
basi!
Conoscenze del
C/C++
Conoscenze
minimali di Java
Algoritmica
Esercizi
Java è un
linguaggio
complesso, che
richiede una
buona conoscenza
del paradigna di
programmazione a
oggetti! Buon
lavoro!
E’ solo l’inizio...
That’s all folksOra si parte sul serio
Grazie
per l'attenzione
Spero di essere stato chiaro....
Agenda StyleC
om
pit
o
CONVERTITE O SCRIVETE UN
PROGRAMMA CHE LEGGE UNA
STRINGA DI CARATTERI E NE
STAMPA LA SUA CODIFICA IN
LINGUAGGIO MORSE
C++
?
Java