Collegatevi con la vostra login utente aprite un browser (es. Explorer) e andate alla pagina:
http://www.disi.unige.it/person/DelzannoG/LABO_PROG/AA0809/
Provate a navigare nel vostro file system usando il comando cd ed usando /, ~, e .. per far riferimento rispettivamente alla root,
alla vostra home e al padre della dir. corrente.
Usate ls con le diverse sue opzioni (consultate “man ls” per la lista) per visualizzare il contenuto
delle diverse directory ed in particolare per vedere il primo livello del file system e i file (anche quelli nascosti) nella vostra home.
Esempi di comandi:
ls –l visualizza file/directory nella vostra home (eventualmente usate ls –l | less se la lista e’ troppo lunga e poi la barra per proseguire)
ls / visualizza il I livello del file system Linux
cd .. vi posizione nella directory genitore
cd ~ vi posiziona nella vostra home directory
Posizionatevi nella vostra home e create una cartella (directory) Esempi con il comando mkdir (usare “man” per la sintassi).
Entrate nella cartella Esempi e provate ad aprire un editor (nano, pico, gedit o nedit) e a creare e salvare un file salvandolo con il nome prova.
Usate ls –al per visualizzare le informazioni del file prova (es. diritti Unix) file creato e cat prova per vederne il contenuto.
/*
Questo programma mostra il range di valori delle variabili di alcuni tipi base del C++ quali int e unsigned int
*/
#include <iostream>
#include <climits>
using namespace std;
int main()
{
cout << "Intervallo dei valori rappresentabili con il tipo int" << endl;
cout << "Type Minimum Maximum" << endl;
cout << "int" << INT_MIN << " " << INT_MAX << endl;
return 0;
}
Alcuni chiarimenti:
La prima riga del file (la direttiva #include<iostream>
)
serve per poter utilizzare il comando di stampa cout
(e in generale anche
quello di lettura cin
).
La seconda riga del file (la direttiva #include<climits>
) serve per
poter utilizzare le costanti INT_MIN e INT_MAX.La terza riga verrà posta dopo tutti gli #include
nuovamente per usare comandi di stampa e lettura.
Il vero programma è solo la parte fra parentesi
graffe dopo int
main()
, e in questo caso comprende
3 comandi di stampa cout
…
e l’istruzione return 0
(segnalazione che il programma ha fatto
il suo compito con successo).
Le parentesi graffe delineano l'inizio e la fine del programma.
cout
è il canale principale per l'output del
programma tipicamente sarà lo schermo.
Per noi quindi stampare equivale a visualizzare su schermo.
Nel programma mandiamo i messaggi e valori da stampare a cout
usando la
doppia freccetta <<
.
Il testo fra le virgolette viene stampato tale e quale; endl
significa
"a capo", cioè passare all'inizio della riga successiva.
Quindi nella prima istruzione mandiamo in stampa su video la stringa
“Intervallo …. ” e poi andiamo a capo;
nella seconda istruzione mandiamo in stampa su video la stringa “Type Minimum …. ” e poi andiamo a capo;
nella terza istruzione mandiamo in sequenza la stringa “int”, il valore della
costante INT_MIN, uno spazio, il valore di INT_MAX e poi andiamo a capo.
Sul video vedremo quindi un messaggio del tipo (dipende dalla rappresentazione
degli interi):
Intervallo dei
valori rappresentabili con il tipo int
Type Minimum Maximum
int-2147483648 2147483647
Compilate il programma usando il comando
g++ -Wall –pedantic primo.cpp
-o myprog
Nota: primo.cpp e’ il programma C++ sorgente mentre la stringa myprog passata con l’opzione –o e’ il nome
del programma eseguibile (risultato di compilazione e link).
Se non usate il parametro –o il programma eseguibile viene salvato con il nome di default: a.out (in ambiente Unix/Mac) o a.exe (Cigwyn)
L’opzione –Wall serve per ottenere anche possibile “warnings” durante la compilazione
L’opzione –pedantic per utilizzare lo standard C++
Lanciate ora l’eseguibile con il comando
./myprog
Ricordatevi di usare “./” se non lo fate la shell non trovera’ l’eseguibile e dara’ un’errore.
Cioe’ se provate a lanciare direttamente
myprog
nel 99% dei casi (dipende dalla conf. del sistema Linux/Unix sul quale lavorate) il risultato sara’:
bash:
myprog: program not found
Considerate ora il seguente programma (variante al precedente).
#include <iostream>
#include <climits>
using namespace std;
int main()
{
cout << "Intervallo dei valori rappresentabili con il tipo int" << endl;
cout << "Type Minimum Maximum" << endl
cout << "int" << INT_MIN << " " << INT_MAX << endl;
return 0;
}
Questo programma contiene un errore di sintassi. Quale?
Provate a compilarlo comunque per vedere quali messaggi invia il compilatore g++.
/*
Esempio di lettura di un numero da tastiera e scrittura dello stesso (eco) su video
*/
#include <iostream>
using namespace std;
/* per le "istruzioni" di lettura e scrittura */
int n;
/* variabile nella quale memorizziamo il numero da leggere */
int main () {
cout << "Inserire un numero e poi premere Enter: " ;
cin >> n;
cout << "Hai inserito il numero: " << n << "\n";
return (0) ;
}
Questo programma, quando eseguito, legge un numero inserito con la tastiera e visualizza un messaggio su video.
Il programma contiene la dichiarazione di una variabile n di tipo intero (int).
Nel corpo del programma (main) inviamo prima su video il messaggio “Inserire… Enter” per indicare all’utente dove inserire il valore.
Quindi usiamo il comando cin
per leggere il valore inserito
dall’utente (il tasto Enter non ha effetto sul valore associato ad n)
e per memorizzarlo nella variabile n.
Quindi stampiamo il messaggio “Hai inserito …” seguito dal
numero in n e da un a capo.
Compilate il programma usando il comando
g++ -Wall –pedantic prog1.cpp –o myprog1
Lanciate l’eseguibile con il comando
./myprog1
Inserite un numero da tastiera e premete Enter (come notifica invio input al programma).
Nota:
Avrete ``quasi sempre’’ in output lo stesso numero inserito.
Per capire cosa si intende per ``quasi sempre’’ eseguite nuovamente ./myprog per
recuperare il massimo intero
rappresentabile sulla macchina (solitamene 2^31-1).
Rilanciate ./myprog1 inserendo un valore piu grande di tale intero.
/*
Programma che prende in input (da tastiera)
un intero
n > 0 ed n
numeri razionali: a1, a2, ...., an
e produce in output (su video)
la somma:
a1+a2+ ... +an e la media: (a1+a2+ ... +an) / n
La tastiera e` la "sorgente
standard"; essendo standard non
e` necessario specificarla nella "istruzione di scrittura"
l'output e` sulla "destinazione
standard" che quindi non viene
specificata ........
Supponiamo che l'input venga dato
correttamente:
un intero n > 0 seguito da
n valori razionali
*/
#include <iostream>
using namespace std;
int
main ( ) {
int n, k ; /* due variabili di tipo
intero; notare la virgola */
float a, sum;
cin >> n;
/*
cin >> n;
equivale all' istruzione di
lettura leggi( <sorgente
standard> , n )
l'equivalente di una lettura
multipla, tipo
leggi( <sorgente standard> ,
v1, v2, v3 ) e`
cin >> v1 >> v2 >>
v3 ;
*/
sum = 0.0 ;
for(k=1 ;
k<= n ; k= k+1) {
cin >> a;
sum = sum + a ;
}
cout << "somma = " << sum << " media = " << sum/n <<
'\n';
/* cout << .........
equivale a
scrivi la stringa somma =
seguito dal valore dell'espressione
sum
seguito dalla stringa media = seguito .....
*/
return(0) ;
}
/*
con INPUT
:
3 2.0
2.25 2.5
l'OUTPUT
e`:
somma
= 6.75 media = 2.25
NOTARE che i numeri in input sono separati semplicemente
da
uno o piu' spazi bianchi
*/
Questo programma, quando eseguito, legge dal tastiera un numero
N che indica quanti numeri ancora leggere
e in successione N numeri x1,…,xN. Quindi calcola la loro media e poi stampa il
risultato su video.
Compilate il programma usando il comando
g++ -Wall –pedantic p3_media.cpp –o myprog2
Per passare l’input al programma potete usare diverse modalità:
Esercizi per casa:
Scaricate gli altri programmi disponibili sul sito del corso (clicca
qui).
La descrizione di ogni programma e’ commentata nel codice C++.
Compilate ed eseguite i vari
programmi.
Modificate media_pesata.cpp in
modo da poter:
Importante:
Nello scrivere il programma seguite state attenti alla sintassi delle istruzioni C.
Il compilatore non interpreta il linguaggio naturale ma solo la sintassi C++ specificata nella documentazione del linguaggio stesso (manuali. guide, ecc).
Potete usare questa guida rapida per la sintassi dei costrutti principali.
Salvate (ricordate di farlo dopo aver modificato un file!) il nuovo programma, compilate ed eseguite il programma.
Provate le diverse modalità di
input discusse in precedenza.
Copiate media_pesata.cpp in un file ripeti_media_pesata.cpp.
Estendete ora il programma aggiungendo la possibilita’ di ripetere il
calcolo precedente (input di N e delle N coppie, calcolo della media pesata e output) piu’ volte
(senza dover rieseguire il programma ogni volta).
Provate le diverse modalità di input discusse in precedenza.
In particolare provate a ridirezionare l’output su un file myout in modo da memorizzatre i risultati dei vai calcoli.