system("pause")

Transcript

system("pause")
Informatica Applicata
Laboratorio 1
Ing. Antonella Dimasi
Ambiente di sviluppo
L’ambiente di sviluppo utilizzato in questo corso è DEVC++.
„
Dev-C++ è un ambiente di sviluppo integrato (IDE) per
la programmazione C/C++. Utilizza come compilatore
il porting Mingw del compilatore GCC (GNU Compiler
Collection).
„
Può creare eseguibili nativi Win32, o eseguibili console
o GUI, come DLLs e librerire statiche. Dev-C++ può
anche essere utilizzato in combinazione con Cygwin o
con altri compilatori GCC based.
„
Dev-C++ è un Free Software distribuito con licenza
GNU General Public License (GPL).
Informatica Applicata
Laboratorio 1
2
Creazione di un file sorgente
Per poter creare un file sorgente, dal menu File cliccare su
Nuovo, poi su File Sorgente. Le operazioni successive sono:
„
„
„
Stesura: consiste nella scrittura del testo del programma nel pannello di
editor. Il programma risultante si chiama file sorgente (.c).
Compilazione: una volta editato il programma è necessario procedere alla
sua compilazione. Dal menù Esegui si seleziona l’opzione Compila. In
questa fase viene verificata la correttezza sintattica (grammaticale) e
semantica (per esempio, compatibilità tra i tipi di variabili) del programma.
In seguito il file sorgente è tradotto generando il file eseguibile (.exe).
Esecuzione: eseguita con successo la fase precedente, il programma può
essere eseguito selezionando dal menù Esegui l’opzione Esegui.
Informatica Applicata
Laboratorio 1
3
Creazione di un progetto
Un progetto è un modo per poter manipolare diversi file sorgente. Aiuta la navigazione
del codice, permette di configurare facilmente i parametri. E’ utile utilizzare un
progetto Dev-C++:
„
se c’è più di un file sorgente, bisogna creare un progetto affinché Dev-C++ possa
linkare tutti i file sorgente dopo la loro compilazione;
„
nel caso in cui si voglia creare una DLL o una libreria statica (static library).
Per poter creare un progetto Dev-C++, dal menu File cliccare su Nuovo, poi su Progetto.
Scegliere quindi il tipo di progetto che si vuole creare:
„
Windows application: crea un programma Windows, utilizando le Win32 API
„
Console Application : crea un programma console
„
Static library: crea un progetto vuoto con le opzioni richieste per la creazione di una
static library
„
DLL: crea un Win32 Dynamic Link Library
„
Empty project: crea un progetto vuoto
„
Selezionare il tipo di progetto, il nome del progetto e il corrispondente linguaggio (C o
C++).
Informatica Applicata
Laboratorio 1
4
Avvertimenti sul DEV-C++
„
„
„
„
Programmi C e C++. Per scrivere programmi in C, è necessario salvare il file con
estensione “.c”. Se non si fa attenzione, il file viene salvato con l’estensione “.cpp”, e
diventa un file C++. Ogni programma corretto in C può essere salvato anche come
programma C++, purchè si includano le librerie tipiche del C, con i comandi: #include
stdlib.h e <#include stdio.h. Se si desidera salvare con estensione ".c" occorre
rimpiazzare l'istruzione #include iostream.h del C++ (inclusa automaticamente dal
Dev-C++) con l'istruzione #include stdio.h del C. Altrimenti il programma scritto sarà
corretto in C++, ma non in C, e verrà quindi considerato errato se gli avete assegnato
estensione ".c".
Nomi dei file. Per i file C/C++, evitate i nomi lunghi, che contengano spazi vuoti o
caratteri speciali. Il compilatore non li legge bene, e rischia di non trovare il file o di
scambiarlo con un altro.
La finestra di output del Dev-C++. Questa finestra ha un difetto: si chiude da sola,
impedendoci di vedere i risultati di un calcolo. Per evitarlo dovete inserire, come
ultima istruzione del main: system("pause") . Questa istruzione fa sì che, terminato il
programma, l’esecuzione si fermi mostrando il risultato, e aspettando un “a capo”.
Programmi non modificabili. Finchè non si darà tale “a capo”, il programma sarà
considerato ancora in esecuzione, e non potrà essere modificato. Potrà capitare di
correggere un errore quante volte vogliamo, salvando le modifiche ogni volta:
eseguendo il programma incontreremo nuovamente l'errore appena eliminato.
Questo perchè, finchè almeno una finestra di output è aperta, ogni modifica che
potremo scrivere sarà, semplicemente, ignorata.
Informatica Applicata
Laboratorio 1
5
Hello World
#include <stdio.h>
È una libreria che dice al compilatore di includere
le informazioni relative alla libreria standard di
input/output
int main(){
/* printf stampa sullo schermo la frase “Hello, World!” */
printf(“Hello, World!\n");
system("PAUSE");
return 0;
}
Informatica Applicata
Laboratorio 1
6
Input/Output (1/4)
Printf()
„
„
int printf(char *format, arg1, arg2, …)
La libreria da includere è stdio.h
printf converte, formatta e stampa sullo standard output i
suoi argomenti sotto il controllo di format. Essa ritorna il
numero di caratteri stampati.
La stringa di formato contiene due tipi di oggetti: caratteri
ordinari, che vengono semplicemente copiati sull’output,
e specifiche di conversione, ognuna delle quali provoca
la conversione e la stampa del successivo argomento di
printf.
… Es: printf(“Salve %c %d %s”,’c’,10,”gente!”);
visualizzerà: Salve c 10 gente!
Informatica Applicata
Laboratorio 1
7
Input/Output (2/4)
Printf()
Ogni specifica di conversione inizia con un % e termina con un
carattere di conversione. Tra il % ed il carattere di
conversione si può trovare nell’ordine:
1.
Un segno meno, che specifica l’allineamento a sinistra
dell’argomento convertito.
2.
Un numero, che specifica l’ampiezza minima del campo.
3.
Un punto, che separa l’ampiezza del campo dalla precisione.
4.
Un numero, la precisione, che specifica il numero di caratteri
da stampare di una stringa, o il numero di cifre dopo il punto
decimale, o il numero minimo di cifre di un intero.
5.
Una h se l’intero deve essere stampato come short, oppure
una l se deve essere stampato come long.
Informatica Applicata
Laboratorio 1
8
Input/Output (3/4)
Alcuni specificatori di formato
%d
%6d
%f
stampa un intero decimale
stampa un intero decimale in un campo di almeno 6 caratteri
stampa un numero frazionario
%6f
stampa un numero frazionario in un campo di almeno 6
caratteri
%.2f
stampa un numero frazionario, con 2 cifre dopo il punto
decimale
%6.2f stampa un numero frazionario, in un campo di almeno 6
caratteri e con almeno 2 cifre dopo il punto decimale
Informatica Applicata
Laboratorio 1
9
Input/Output (4/4)
Scanf()
int scanf(char *format, …)
La funzione scanf() legge caratteri dallo standard input, li
interpreta in base al contenuto della stringa format e
memorizza il risultato di queste operazioni negli
argomenti successivi. Gli argomenti indicano dove deve
essere registrato l’input convertito.
… Es: scanf(“%d%d”, &var1,&var2)
legge due interi assegnandoli alle variabili var1 e var2.
Informatica Applicata
Laboratorio 1
10
Tabella Fahrenheit-Celsius
#include <stdio.h>
#define LOWER 0
#define UPPER 300
#define STEP 20
Sono delle costanti simboliche, non
variabili, quindi non appaiono nelle
variabili.
int main(int argc, char *argv[]){
int fahr;
for(fahr = LOWER; fahr<=UPPER; fahr=fahr+STEP){
float ris = (5.0/9.0)*(fahr-32);
printf("%3d %6.1f\n", fahr, ris);
}
system("PAUSE");
Stampa il primo numero di ogni linea in un
return 0;
campo di tre cifre, ed il secondo in un campo di
}
almeno sei.
Il primo numero è un intero ed il secondo è un
float con una posizione decimale.
Informatica Applicata
Laboratorio 1
11
Casting
#include <stdio.h>
int main(int argc, char *argv[]){
int x=5;
int y=9;
%d indica che il risultato della
divisione x/y è un numero intero
%f indica che il risultato della
divisione 5.0/9.0 è un numero
frazionario
printf(“risultato dell’operazione ‘x/y’: %d\n", x/y);
un punto decimale in una
costante
indica che essa è un
printf(“risultato dell’operazione ‘x/y’: %f\n", 5.0/9.0);
numero frazionario, quindi
printf("risultato dell’operazione (double)x/y: %f\n", (double)x/y );
5.0/9.0 non viene troncato,
printf("risultato dell’operazione (double)x/y: %f\n", (double)(x/y) );
perché è un quoziente tra
due numeri decimali.
printf("risultato dell’operazione ‘x/y+5.0’: %f\n", x/y+5.0 );
printf(" risultato dell’operazione ‘5.0+x/y’: %f\n", 5.0+x/y );
int numero;
conversione dell’intero x in
int lettera = 'A';
double e successiva divisione
numero = (int)lettera;
printf("numero: %d\n", numero);
system("pause");
divisione x/y e successiva
conversione del risultato in
return 0;
double
}
Informatica Applicata
Laboratorio 1
12
scanf
Programma che legge da tastiera un numero intero e lo assegna alla
variabile x. Al termine di questa operazione il programma stampa a
video una sequenza di x asterischi.
#include <stdio.h>
int main (void){
int x;
int i;
printf("Inserisci un numero>\n");
/*scanf legge dalla tastiera un numero intero e lo assegna alla variabile x*/
scanf("%d", &x);
for (i=0; i<x; i++)
printf("*");
printf("\nFine del programma \n ");
system("pause");
}
Informatica Applicata
Laboratorio 1
13
Media
Programma in C che legge da tastiera 2 numeri interi, ne calcola
la media aritmetica e stampa il risultato a video.
#include <stdio.h>
int main (void) {
int x;
int y;
int media;
media=0;
printf(“Inserisci il primo numero>\n”);
scanf(“%d”, &x);
printf(“Inserisci il secondo numero>\n”);
scanf(“%d”, &y);
media=(x+y)/2;
printf(“La media dei due valori e: %d \n”, media);
system(“pause”);
}
Informatica Applicata
Laboratorio 1
14
Calcolo dei primi 100 numeri di
Fibonacci (1/2)
Ricordiamo che la successione dei numeri di Fibonacci è definita come
segue:
• F(0) = 0
• F(1) = 1
• F(n) = F(n-1) + F(n-2) per n>1
L’algoritmo scritto in pseudo codice è:
Per i che va da 2 a 100
( F Å ULTIMO + PENULTIMO;
stampa F;
PENULTIMO Å ULTIMO;
ULTIMO Å F;
)
Informatica Applicata
Laboratorio 1
15
Calcolo dei primi 100 numeri di
Fibonacci (2/2)
#include <stdio.h>
main(){
int ultimo = 1;
int penultimo = 0;
int i, f;
printf(“%d/n”, penultimo);
ultimo = 1;
printf(“%d/n”, ultimo);
for(i=2; i<100; i=i+1){
f = ultimo+penultimo;
printf(“%d\n”, f);
penultimo = ultimo;
ultimo = f;
}
system(“pause”);
Notare che non è possibile stampare
effettivamente 100 numeri, poiché
sicuramente tra i primi cento numeri di
Fibonacci vi sono sicuramente numeri
maggiori degli interi del tipo C int.
}
Informatica Applicata
Laboratorio 1
16