INFORMATICA Altre Istruzioni di I/O

Slides:



Advertisements
Presentazioni simili
File Linguaggio C.
Advertisements

Introduzione al linguaggio C++
LINGUAGGIO DI PROGRAMMAZIONE C
INFORMATICA Algoritmi fondamentali
Funzioni e procedure Ogni linguaggio di programmazione ad alto livello mette a disposizione del programmatore questi strumenti, ed il C non è da meno!
INFORMATICA Strutture condizionali
Nel C non esiste un dato primario di tipo stringa; queste sono rappresentate con un array monodimensionale di caratteri (tipo char). Così per definire.
Introduzione al linguaggio C
© 2007 SEI-Società Editrice Internazionale, Apogeo Unità F2 Selezione.
Iterazione A. Ferrari.
Stringhe di caratteri In linguaggio C.
Introduzione alla programmazione A. Ferrari. Il linguaggio C Nel 1972 Dennis Ritchie nei Bell Laboratories progettò il linguaggio C Il linguaggio possiede.
Sviluppo di programmi strutturati
MATLAB.
MATLAB. Scopo della lezione Programmare in Matlab Funzioni Cicli Operatori relazionali Esercizi vari.
Introduzione al linguaggio C
La ricorsione Simulazione. Il Main /* Programma che usa una funzione ricorsiva*/ #include #define MAX_N 8 main() int valore, dato; printf(Introduci n:
INFORMATICA Strutture iterative
INFORMATICA I file.
Programmazione Procedurale in Linguaggio C++
Caratteri e stringhe di caratteri
Argomenti dalla linea dei comandi Gli argomenti possono essere passati a qualsiasi funzione di un programma, compresa la main(), direttamente dalla linea.
Prof.ssa Chiara Petrioli -- Fondamenti di programmazione, a.a. 2009/2010 Corso di Fondamenti di programmazione a.a. 2009/2010 Prof.ssa Chiara Petrioli.
Algoritmi Politecnico di Milano C Primi programmi Politecnico di Milano.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE File Marco D. Santambrogio – Ver. aggiornata al 9 Maggio 2012.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Funzioni e Procedure Marco D. Santambrogio – Ver. aggiornata al 18 Aprile 2012.
Informatica 2. Concetti fondamentali di programmazione Programmare vuol dire scrivere un algoritmo in un linguaggio che faccia funzionare un calcolatore.
Laboratorio di Linguaggi lezione VI Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea in.
Laboratorio di Linguaggi lezione XI: I/O Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea.
MATLAB. …oggi… Programmare in Matlab Programmare in Matlab m-file m-file script script Funzioni Funzioni Cicli Cicli Operatori relazionali Operatori relazionali.
MATLAB. …oggi… Programmare in Matlab Programmare in Matlab Funzioni Funzioni Cicli Cicli Operatori relazionali Operatori relazionali Esercizi vari Esercizi.
Introduzione agli stream e alle classi
INFORMATICA Esercizi.
INFORMATICA I file. © Piero Demichelis 2 File Per rendere più uniforme possibile il comportamento dei programmi in relazione alla grande varietà dei dispositivi.
INFORMATICA Altre Istruzioni di I/O. © Piero Demichelis 2 Funzioni di I/O Per la lettura e la scrittura da videoterminale il C prevede numerose istruzioni.
A.A. 2010/2011Ambienti di Programmazione per il Software di Base1 (Es. – 6) Ambienti di Programmazione per il Software di Base Le Stringhe in C Input.
Strutture di controllo nel C
Esercizi FUNZIONI Passaggio di parametri per valore, variabili e tipi locali e globali, prototipo.
Strutture di controllo in C -- Flow Chart --
Esercizi Puntatori, struct con campi puntatore, puntatori a struct, rapporto tra array e puntatori. FUNZIONI Passaggio di parametri per indirizzo, passaggio.
I File.
Le funzioni.
Espressioni condizionali
Fondamenti di Informatica Laurea in Ingegneria Civile e Ingegneria per lambiente e il territorio Ambienti di programmazione Stefano Cagnoni e Monica Mordonini.
Corso di PHP.
Equazione di secondo grado.
In molti casi è utile assegnare a degli identificatori dei valori che restino costanti durante tutto il programma e che non possano essere cambiati nemmeno.
Il linguaggio C Le funzioni C Language Il passaggio dei parametri
Prof.ssa Chiara Petrioli -- Fondamenti di programmazione, a.a. 2009/2010 Corso di Fondamenti di programmazione a.a. 2009/2010 Prof.ssa Chiara Petrioli.
1 Gestione dei File. 2 Perché i file? Sono strutture dati persistenti Sono solitamente memorizzati sui dischi –Si usano dall'interno dei programmi Realizzano.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Array e stringhe Marco D. Santambrogio – Ver. aggiornata al 9 Agosto 2013.
Esercizi su File.
1Piero Scotto - C14. Finalità del corso Programma Materiale Requisiti Spendibilità 2Piero Scotto - C14.
Gestione dei file di testo, matrici e struct
1 Esempi domande di esame. 2 Dato il seguente programma #include int main(){ int *p,j=9,i=5; p=&j; *p=i; printf("%d %d %d\n", i,j,*p); scanf("%d",p);/*
Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni – BCOR Ingegneria Elettronica – BELR Introduzione al C Esercitazione 5 D. Bloisi, A.
Ripetizione La vera potenza dei programmi per computer risiede nella capacità di ripetere lo stesso calcolo o sequenza di istruzioni più volte, ogni volta.
Prof.ssa Chiara Petrioli -- corso di programmazione 1, a.a. 2006/2007 Corso di Programmazione 1 a.a.2006/2007 Prof.ssa Chiara Petrioli Corso di Laurea.
Introduzione a Javascript
Corso di Algoritmi e Strutture Dati APPUNTI SUL LINGUAGGIO C
Informatica B Allievi Elettrici - AA Fondamenti della programmazione in linguaggio C (II) Istruzioni e strutture di controllo.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE File Marco D. Santambrogio – Ver. aggiornata al 21 Maggio 2014.
Fabio Scotti – Università degli Studi – Laboratorio di programmazione per la sicurezza 1 Lezione 13 e 14 GESTIONE DEI FILE A) Nozioni sulla gestione dei.
1 Fabio Scotti ( ) Laboratorio di programmazione per la sicurezza Valentina Ciriani ( ) Laboratorio di programmazione Lezione 13 e 14 -
1 Il linguaggio C Precisazioni sull’esperienza in laboratorio.
Operatori di incremento e decremento
Linguaggio C: Le basi Stefano Cagnoni e Monica Mordonini
Informatica 4 La ricorsione. Definizione di ricorsione Ricorsione è la proprietà di quei programmi che, all’interno delle istruzioni che li compongono,
Il C `e un linguaggio di programmazione di uso generale, originariamente sviluppato per la scrittura del sistema operativo Unix, ed oggi disponibile su.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Algoritmi e basi del C Marco D. Santambrogio – Ver. aggiornata al 24 Agosto 2015.
Transcript della presentazione:

INFORMATICA Altre Istruzioni di I/O

Funzioni di I/O Per la lettura e la scrittura da videoterminale il C prevede numerose istruzioni tra cui scanf e printf che, come abbiamo già visto, agiscono su tutti i tipi di dato semplici.   scanf e printf sono in realtà funzioni di tipo int e, come tali, ritornano un valore intero attraverso il loro nome. La scanf restituisce il numero di parametri letti correttamente: se la si richiama con un unico parametro (si intende leggere un solo dato), il valore restituito è 1 se la lettura è andata a buon fine, 0 in caso di errore. La printf restituisce invece il numero di bytes che ha inviato in output, oppure 0 in caso di errore.

Funzioni di I/O Nel seguente frammento di programma: int ndati, dato; ....... ndati = scanf (“%d”, &dato); in ndati verrebbe restituito il valore 1. Nella lettura di dati da tastiera non è previsto alcun codice particolare per segnalare il fatto che i dati in ingresso sono finiti.   Generalmente per questo evento si una combinazione particolare di caratteri: ad esempio i tasti CTRL (control) e Z (che il Sistema Operativo interpreta come valore particolare chiamato EOF e definito internamente).

Esempio Programma che calcola il valor medio di un certo numero di dati reali (non noto a priori) terminanti con EOF, introdotti da terminale.   #include <stdio.h> #define VERO 1 #define FALSO 0 float numero, somma, media; int numdati, stato; int fine_lettura; main() { fine_lettura = FALSO; /* inizializza flag, */

Esempio somma = 0.0; /* accumulatore risultato */ numdati = 0; /* contatore dei dati introdotti */ printf ("Introduci i dati (reali), CTRL+Z per finire:\n"); while (!fine_lettura) /* continua fino al CTRL+Z */ { stato = scanf ("%f", &numero); /* in stato numero dati letti */ if (stato == 1) somma += numero; /* accumula in somma */ numdati++; /* incrementa numdati (dati letti correttamente) */ } else fine_lettura = VERO; /* fine lettura */ } /* fine di while NOT fine_lettura */

Esempio if (numdati == 0) printf ("Media non calcolabile\n"); else { media = somma / numdati; printf ("La media su %d dati e': %f\n", numdati, media); } Oltre alla scanf e alla printf il C possiede numerose altre funzioni di lettura e scrittura sia di caratteri sia di altri tipi di dato.

getchar() Lettura di un carattere da tastiera: La funzione senza parametri getchar è definita in stdio.h di tipo intero (int) e restituisce un numero intero corrispondente al codice del tasto premuto.   In caso di fine file fornisce il valore particolare EOF (per la maggior parte dei sistemi vale -1) il quale è predefinito come simbolo in stdio.h. Se si esclude il caso dell'EOF è lecito assegnare il valore fornito da questa funzione ad una variabile di tipo carattere (char).

Esempio #include <stdio.h> int carat;   main() { printf ("Inserisci dei caratteri, CTRL+Z per finire\n "); while ( ( carat = getchar() ) != EOF) printf ("%c", carat); } Nella condizione del while, prima è valutato l'assegnamento di getchar a carat, poi il risultato di questa operazione è confrontato con EOF.

Input di caratteri L'esecuzione di questo programma produce uno strano effetto: i caratteri appaiono sullo schermo man mano che sono introdotti; quando poi si preme <RETURN> (“invio”) viene visualizzata di nuovo tutta la riga.   La giustificazione sta nel fatto che la gestione fisica dell'input, è operata dal Sistema Operativo il quale legge i caratteri provenienti da tastiera, ne fa l'eco sul video e li immagazzina in un vettore interno (buffer di tastiera). I caratteri introdotti sono trasmessi al programma solo dopo che è stato introdotto un carattere terminatore (come per esempio <RETURN>, ecc.).

Input di caratteri In questo modo si consente all'utente l'eventuale modifica della sequenza dei caratteri già introdotti fino a quando non invia un <RETURN>: questa funzionalità è nota col nome di editing di linea.   I caratteri <RETURN>, <CONTROL>+ Z, <CONTROL>+ C, <BREAK> costituiscono “eventi significativi ” di tastiera. Le procedure interne attivate da scanf e getchar “aspettano ” che ci sia un “evento significativo ” prima di eseguire le operazioni alle quali sono preposte.

putchar(<carattere>); Visualizzazione di un carattere sul monitor: putchar(<carattere>); La funzione di tipo intero putchar prevede un parametro di tipo char, quello appunto che si vuole inviare al video.   In realtà la definizione in stdio.h rivela che il tipo carattere del parametro viene internamente convertito ad intero. Il valore restituito da putchar coincide con il carattere stesso se l'operazione di output ha successo, altrimenti vale EOF. 

Esempio #include <stdio.h> char carat; main() {   main() { printf ("Visualizzazione dei caratteri ASCII:\n "); carat = ‘ ’; while (carat <= ‘ ~ ’) putchar (carat); carat++; } putchar(‘ \n ’); /* new-line finale */

Confronto tra le istruzioni di I/O scanf e printf sono “costruite” a partire da getchar/putchar scanf/printf sono utili quando è noto il formato (tipo) del dato che viene letto. getchar/putchar sono utili quando non è noto il formato, ad esempio: un testo in cui sono presenti spazi e punteggiatura e che pertanto non è trattabile con semplicità da scanf e printf.

gets (<stringa>); Input di testi Se si deve leggere un testo (inclusi spazi e punteggiatura) la scanf non è utilizzabile e la getchar è scomoda da usare. Per introdurre testi il C fornisce un’apposita istruzione, la gets (<stringa>); che legge da tastiera una riga intera, compresi spazi e punteggiatura, fino all’introduzione di <RETURN> (INVIO); la sequenza di caratteri letti viene trasmessa al programma sottoforma di stringa in <stringa>, senza il carattere ‘\n’.

Input di testi Poiché come al solito non ci sono controlli sugli indici, la stringa deve essere dimensionata opportunamente. Non è tuttavia possibile limitare il numero di caratteri che l’utente introduce e pertanto si è esposti a eventuali danni causati dal travalicamento dei limiti. La <stringa> così introdotta è una stringa a tutti gli effetti: infatti la gets inserisce il carattere di fine stringa NULL (ovvero ‘\0’). Pertanto <stringa> può essere normalmente elaborata.

Output di testi Anche per visualizzare testi il C fornisce un’apposita istruzione, la puts ( <stringa> ); che visualizza sul monitor <stringa>, aggiungendo alla fine della stringa un ‘\n’. L’istruzione puts (stringa); produce lo stesso output di printf (“%s\n”, stringa);

I/O di testi - Esempio #include <stdio.h> main() { char riga[80]; printf (“Introduci una riga di testo:\n”); gets (riga); printf (“Hai scritto:\n”); puts (riga); }

sprintf (<stringa>, <format>, <lista variabili>); sprintf e sscanf Importanti sono anche le due funzioni sprintf e sscanf, che operano come la printf e la scanf, effettuando una conversione pilotata da un format; la differenza sta nel riferimento: stringa invece di stream (tastiera o monitor).   La sintassi di sprintf è: sprintf (<stringa>, <format>, <lista variabili>); Genera in <stringa> la stessa sequenza di caratteri che genererebbe la printf sul monitor. Alla fine chiude la stringa appena generata col carattere ‘\0’ (NULL).

sprintf e sscanf Ad esempio, eseguendo il seguente frammento di programma: int giorno, mese, anno; char data[80]; ……… giorno = 12; mese = 2; anno = 2005; sprintf(data,"Torino %2d-%2d-%4d", giorno, mese, anno); La stringa data sarà formata dalla seguente sequenza di caratteri: “Torino 12- 2-2005\0”.

sscanf (<stringa>, <format>, <lista variabili>); sprintf e sscanf La sintassi di sscanf è: sscanf (<stringa>, <format>, <lista variabili>); Le variabili della lista vengono lette interpretando i caratteri contenuti in <stringa> secondo le modalità fissate dagli specificatori di formato contenuti nel format.   Esempio: int giorno, mese, anno; char data[10] = {‘2’, ‘0’, ‘ ’, ‘7’, ‘ ’, ‘2’, ‘0’, ‘0’, ‘5’, ‘\0’} ……..; sscanf (data,”%d%d%d”, &giorno, &mese, &anno); giorno vale 20, mese vale 7 e anno vale 2005.

Dati sulla linea di comando Abbiamo già avuto occasione di osservare come il main sia in realtà una funzione. Come le altre funzioni il main è in grado di ricevere dei parametri che devono essere indicati tra le parentesi tonde che devono seguire la parola chiave main. Questi parametri vanno scritti di seguito al nome del programma sulla linea di comando e separati tra loro dallo spazio. Si tratta evidentemente di un’utile alternativa all’introduzione dei dati da tastiera. Esempio: bmi 72.60 175

Dati sulla linea di comando I parametri così indicati vengono passati dal sistema operativo al main tramite la seguente coppia di parametri: int argc argument counter char *argv[] argument vector argc è una variabile intera che contiene il numero di parametri contenuti nel vettore di stringhe argv. argv è un vettore di stringhe. Queste due variabili devono essere dichiarate come parametri della funzione main: int main (int argc, char *argv[])

Dati sulla linea di comando argc indica il numero di parametri presenti sulla riga di comando, incluso il nome del programma (pertanto vale sempre almeno 1). il vettore argv[ ] (in realtà è una matrice di caratteri) contiene i parametri veri e propri sottoforma di stringhe di caratteri secondo il seguente formato: argv[0] è il nome del programma; argv[n] è la stringa che rappresenta l’ennesimo parametro dopo il nome del programma. I parametri pertanto sono sempre delle stringhe: per trasformarli in rappresentazioni numeriche occorre usare le funzioni approppriate (atoi, atol, atof) o la sscanf.

Dati sulla linea di comando Struttura Esempio: c:\> programma.exe 3 pippo.dat 3.2 argc = 4 argv[0] “programma.exe\0” argv[1] “3\0” argv[2] “pippo.dat\0” argv[3] “3.2\0”

Dati sulla linea di comando Scrivere un programma che legga sulla linea di comando due interi N e D, e visualizzi tutti i numeri minori di N che sono divisibili per D. Il programma dovrà pertanto essere eseguito con il seguente comando: myprog N D dove myprog è il nome del programma, N e D sono i due valori richiesti per il funzionamento del programma.

Dati sulla linea di comando #include <stdio.h> int main(int argc, char *argv[]) { int N, D, i; if (argc != 3) printf (”Numero argomenti errato\nSintassi: myprog N D”); return 1; } N = atoi (argv[1]); /* converte N */ D = atoi (argv[2]); /* converte D */ for (i = 1; i < N; i++) if ((i % D) == 0) printf (”%d\n”, i); Test per verificare che l’utente ha introdotto il numero esatto di dati