FILE DI TESTO e SOTTOPROGRAMMI

Documenti analoghi
Gestione di files Motivazioni

Files in C++ Fondamenti di Informatica. R. Basili. a.a

Unità Didattica 3 Linguaggio C. Generalità sulle Funzioni. Variabili locali e globali. Passaggio di parametri per valore.

Linguaggio C - Funzioni

3. Terza esercitazione autoguidata: progetto gestione voli

ISTITUTO TECNICO INDUSTRIALE STATALE LA GESTIONE DEI FILE DI TESTO IN C++

Programmazione Orientata agli Oggetti in Linguaggio Java

IL CONCETTO DI FILE. È illecito operare oltre la fine del file.

Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica. Programmazione I - corso B a.a prof.

Appunti del corso di Informatica 1. 6 Introduzione al linguaggio C

Appunti del corso di Informatica 1 (IN110 Fondamenti) 6 Introduzione al linguaggio C

I file Laboratorio di Linguaggi di Programmazione a.a. 2001/2002

Informatica B. Sezione D. Scuola di Ingegneria Industriale Laurea in Ingegneria Energetica Laurea in Ingegneria Meccanica

ESERCIZIO 1 (Definizione funzioni passaggio parametri per copia)

PIANO DI LAVORO. a.s / 2016

BOZZA. cin per la comunicazione dal dispositivo di input standard, la tastiera, al programma (stream di input standard)

Sottoprogrammi: astrazione procedurale

Funzioni. Il modello console. Interfaccia in modalità console

Input/output in C e in C++

Prova Scritta del 19/07/10

Gestione dei File in C

Il programma OCTAVE per l insegnamento dell algebra lineare nella Scuola Secondaria p. 1

2) FILE BINARI: è una sequenza di byte avente una corrispondenza uno a uno con la sequenza ricevuta dal dispositivo esterno.

VBA è un linguaggio di scripting derivato da Visual Basic, da cui prende il nome. Come ogni linguaggio ha le sue regole.

TUTORATO di LINGUAGGI I

puntatori Lab. Calc. AA 2007/08 1

Prof. Pagani Corrado HTML

Concetto di Funzione e Procedura METODI in Java

4 Le liste collegate 4.0. Le liste collegate. 4 Le liste collegate Rappresentazione di liste 4.1 Rappresentazione di liste

I puntatori e l allocazione dinamica di memoria

Gli array. Gli array. Gli array. Classi di memorizzazione per array. Inizializzazione esplicita degli array. Array e puntatori

1: /* Nome del programma: gestione_articoli_01.cpp 2: Realizzato da: Gaetano Della Cerra 3: Data: 06/02/ III Informatica Serale I.T.I.S.

MAGAZZINO.CPP January 2, 2008 Page 1

Corso di Informatica Medica Esercitazione 1I ! Alessandro A. Nacci - alessandronacci.com

Java Native Interface Appunti

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica

1. Soluzione esercizio XYZ SpA

void funzioneprova() { int x=2; cout<<"dentro la funzione x="<<x<<endl; }

Grammatica di base: Pointers

Funzioni. Corso di Fondamenti di Informatica

Informatica Medica C++ Informatica Medica I semestre Docenti: Fabio Solari e Manuela Chessa. Sviluppo di un applicazione eseguibile

Esercizi di programmazione in C

Gestione dei File. dischi nastri cd

Gian Luca Marcialis studio degli algoritmi programma linguaggi LINGUAGGIO C

Sistemi Web per il turismo - lezione 3 -

Dall Algoritmo al Programma. Prof. Francesco Accarino IIS Altiero Spinelli Sesto San Giovanni

Programmazione I / Informatica generale Prova scritta 11 Giugno 2008

FUNZIONI. La libreria standard del C fornisce una ricca collezione di funzioni, come le funzioni:

La struttura dati ad albero binario

Breve riepilogo della puntata precedente:

Le funzioni in C. I programmi C sono costituiti da definizioni di variabili e funzioni.

Cos è una stringa (1) Stringhe. Leggere e scrivere stringhe (1) Cos è una stringa (2) DD Cap. 8 pp KP Cap. 6 pp

Laboratorio di Programmazione Lezione 1. Cristian Del Fabbro

Le funzioni. Funzioni. Funzioni. Funzioni. Funzioni. Funzioni

Codifica: dal diagramma a blocchi al linguaggio C++

La gestione dell input/output da tastiera La gestione dell input/output da file La gestione delle eccezioni

LICEO SCIENTIFICO "LEONARDO DA VINCI" - RC PROGRAMMA DI INFORMATICA A.S. 2014/15 - CLASSE: I Q - Indirizzo Scienze applicate Prof Miritello Rita

Corso di Programmazione ad oggetti

Connessione ad internet

SOLUZIONE ESERCIZIO 1

ESERCIZI DI PROGRAMMAZIONE C IN AMBIENTE UNIX

Tipi primitivi. Ad esempio, il codice seguente dichiara una variabile di tipo intero, le assegna il valore 5 e stampa a schermo il suo contenuto:

Alcune regole di base per scrivere un programma in linguaggio C

Input / Output attraverso stream. I/O in C vs. I/O in C++

Il calcolatore. Architettura di un calcolatore (Hardware)

Struttura di un programma Java

I/O su Socket TCP: read()

Strutture. Strutture e Unioni. Definizione di strutture (2) Definizione di strutture (1)

Laboratorio di Programmazione Gruppo III, Ml-ZZ. Alberto Finzi

LABORATORIO DI PROGRAMMAZIONE 1 CORSO DI LAUREA IN MATEMATICA UNIVERSITÀ DEGLI STUDI DI MILANO V Indice

Funzioni in C. Violetta Lonati

Libreria standard Java possiede un enorme libreria di classi standard organizzata in vari package che raccolgono le classi secondo un organizzazione

3) Il seguente numerale A1F0 in base 16 a quale numero in base 10 corrisponde?

GESTIONE INFORMATICA DEI DATI AZIENDALI

INFORMATICA E PROGRAMMAZIONE PROF. M. GIACOMIN ESPERIENZA IN AULA: ELABORAZIONE DI IMMAGINI A COLORI IN LINGUAGGIO C

Sistemi Operativi Anno Accademico 2011/2012. Segnali: Interrupt software per la gestione di eventi asincroni

12 - Introduzione alla Programmazione Orientata agli Oggetti (Object Oriented Programming OOP)

Mobile Programming. Prova scritta del 22/01/2016. Prof. De Prisco. Corso di laurea in Informatica

Come ragiona il computer. Problemi e algoritmi

LINGUAGGI DI PROGRAMMAZIONE

3. La sintassi di Java

AA LA RICORSIONE

Introduzione a Visual Basic Lezione 1 Concetti base e istruzioni condizionali

CARATTERI E STRINGHE Caratteri e stringhe Funzioni della libreria standard I/O Funzioni della libreria di gestione delle stringhe

Creare una funzione float square(float x). La funzione deve restituire il quadrato del parametro x.

Corso di Informatica

Laboratorio di programmazione

Puntatori Passaggio di parametri per indirizzo

Le Liste. Elisa Marengo. Università degli Studi di Torino Dipartimento di Informatica. Elisa Marengo (UNITO) Le Liste 1 / 31

Laboratorio di Programmazione 1. Docente: dr. Damiano Macedonio Lezione 18 31/03/2014

Esercizi Java. class somma2 { static int somma(int a,int b) {return a+b; }

Introduzione al Linguaggio C

Fondamenti di Informatica 2

Esame di Informatica Generale 25 giugno 2010 Professori: Carulli, Fiorino, Mazzei

Introduzione al linguaggio C Gli array

AE RZT QSO RKPT SQZC

PROGRAMMA DI SCIENZE E TECNOLOGIE APPLICATE 2015/2016 Classe 2ª Sez. C Tecnologico

costruttori e distruttori

DESCRIZIONE CREAZIONE APP Si suddivide in 4 fasi di lavoro: 1. PIANIFICAZIONE; 2. PROGETTAZIONE; 3. SVILUPPO; 4. DISTRIBUZIONE.

Transcript:

FILE DI TESTO e SOTTOPROGRAMMI Prof. Enrico Terrone A. S: 2008/09 I file di testo in C++ I file di testo sono una forma di input/output alternativa alla tastiera e al monitor (con il vantaggio della persistenza). Per utilizzare i file di testo in C++ occorre includere la libreria fstream.h (cfr. libro p. 528) Dopo di che, occorre creare degli oggetti di tipo ifstream per l input e ofstream per l output. Es. ifstream fin; // si può usare un nome diverso da fin ofstream fout; // si può usare un nome diverso da fout I file vanno aperti all inizio del main con open (meglio se con controllo di errore) e si chiudono alla fine con close. All interno del programma, fin e fout (o altri nomi usati) si usano con la stessa sintassi di cin e cout.

I file di testo in C++ int main ifstream fin; fin.open( dati.txt ); if (! fin ) cout << Errore apertura file ; [ ] fin.close(); Note: 1) Il file dati.txt deve essere creato con un editor (p. es. notepad) e salvato nella stessa cartella dell eseguibile creato dal compilatore (file.exe). 2) Di solito i file si usano solo nel main, non nei sottoprogrammi. La funzione eof() La funzione eof (acronimo di End Of File) dà come risultato vero se si è giunti alla fine del file, falso in caso contrario. È utile per caricare dati da file quando non si conosce la quantità di elementi. int main ifstream fin; char v[200][20]; int i; fin.open( dati.txt ); for ( i=0;! fin.eof( ); i++ ) fin >> v[i]; [ ] fin.close();

I sottoprogrammi in C++ Un sottoprogramma è un blocco di istruzioni a sé stante con un proprio nome. Il main (= sottoprogramma principale) è un caso particolare di sottoprogramma, che ha la proprietà di essere eseguito all avvio del programma. Gli altri sottoprogrammi sono eseguiti soltanto se richiamati attraverso il main. Definizione Si può pensare il main come un programma-padrone che chiede al proprio sottoprogramma-servo di fare un lavoro particolare. Oppure si può pensare il sottoprogramma come uno strumento che viene costruito e usato nell ambito del programma principale. A sua volta il sottoprogramma può schiavizzare altri sottoprogrammi esattamente come il main schiavizza lui. In generale, possiamo pensare al sottoprogramma come a un istruzione aggiuntiva che viene creata dal programmatore.

La scrittura del sottoprogramma <tipo_risultato> <nome> (<parametri>) // questa parte si chiama intestazione del // sottoprogramma variabili e istruzioni // questa parte si chiama corpo del sottoprogramma Le variabili definite all interno del sottoprogramma esistono e sono visibili soltanto all interno del sottoprogramma (lo stesso discorso vale per il main). Le uniche variabili che permettono al sottoprogramma di comunicare con l esterno sono i parametri. La scrittura del sottoprogramma I parametri sono variabili speciali definite fra parentesi dopo il nome del sottoprogramma: (<tipo_p1> <nome_p1>, <tipo_p2> <nome_p2>, ) Quando si scrive un sottoprogramma, bisogna per prima cosa capire quali sono i parametri (dati del problema che il sottoprogramma deve risolvere) e quali le variabili interne (valori di supporto per la risoluzione del problema); fra le variabili interne, ce ne deve essere una che contiene il risultato del problema; questa variabile sarà infine restituita al programma chiamante attraverso l istruzione: return <espressione del risultato> ;

L uso del sottoprogramma Nel programma-chiamante (che per noi sarà quasi sempre il main), il sottoprogramma può essere usato come se fosse un istruzione aggiuntiva. Quando lo si vuole usare, occorre scrivere il suo nome e indicare dei valori in corrispondenza dei parametri (importante: l associazione valori-parametri è fatta in base alla posizione nella lista). double media (int a, int b) double m; m = (a+b)/2; return m; x = media (n1, n2); L uso del sottoprogramma A questo punto, il programma-chiamante si interrompe e attende l esecuzione del sottoprogramma; quando il sottoprogramma è terminato, il valore da esso calcolato viene sostituito al suo nome e si continua con l esecuzione del programma principale. Perché il programma-chiamante possa usare il sottoprogramma, occorre che nel file il sottoprogramma (o almeno la sua intestazione, che si chiama prototipo ) sia scritto prima del programmachiamante.

Il passaggio dei parametri Ci sono due modalità di passaggio dei parametri: per valore e per riferimento. Per il momento vediamo soltanto la modalità più basilare: il passaggio per valore. Quando il programma-chiamante usa il sottoprogramma, indica il suo nome e fra parentesi una serie di valori. Questi valori vengono usati in base alla loro posizione per dare un valore iniziale ai parametri, che sono le variabili speciali del sottoprogramma. Le funzioni Una funzione è un oggetto matematico che associa a ogni elemento di un insieme A (dominio) uno e un solo elemento di un insieme B (codominio). La funzione matematica può essere rappresentata con una tabella o con un grafico. Nei linguaggi di programmazione, la funzione è realizzata attraverso un sottoprogramma che ha come parametri l elemento (o gli elementi) di A e come risultato l elemento di B corrispondente.

Le funzioni Una funzione si dice booleana se il suo risultato è del tipo vero/falso (in C/C++ si usa solitamente il numero 1 per significare Vero e il numero 0 per significare Falso ). Una funzione si dice ricorsiva se fra le proprie istruzioni contiene anche una chiamata a se stessa. Una funzione ricorsiva deve sempre avere una selezione che permette di scegliere il caso non ricorsivo (altrimenti andrebbe avanti all infinito). Un esempio tipico di funzione ricorsiva è il calcolo del fattoriale. Le procedure Le procedure sono sottoprogrammi che non calcolano un risultato ma producono altri effetti come ad esempio la stampa su schermo o la modifica di variabili. Il tipo del risultato in questo caso viene indicato come void. Perché una procedura possa modificare le variabili, queste devono essere passate per riferimento (argomento che affronteremo in seguito). Nota: un modo semplice per usare un sottoprogramma consiste nel costruire un main che contiene un ciclo do-while che chiede all utente di inserire numeri di prova per il sottoprogramma, e di andare avanti fino a quando l utente non sceglie di terminare.

Usare i sottoprogrammi nel main Un modo semplice per usare un sottoprogramma consiste nel costruire un main che contiene un ciclo do-while che chiede all utente di inserire numeri di prova per il sottoprogramma, e di andare avanti fino a quando l utente non sceglie di terminare. Un modo più raffinato consiste nel creare un menu di sottoprogrammi e permettere di scegliere un sottoprogramma attraverso l istruzione switch. Le procedure int main() do // Declare variables int choice; float speed, seconds = 0, distance; //Display program details and menu choice printf("menu\n"); printf("1...1n"); printf("2...\n"); printf("3...\n"); printf("4...\n"); printf("5 END \n"); printf("enter a choice 1-5: "); scanf("%i",&choice);

Le procedure switch(choice) case 1:... break; case 2:... break; case 3:... break; case 4:... break; case 5: printf("end of Program\n"); break; default: printf("you entered an invalid number \n"); while (choice!= 5); return 0; Esercizi sulle funzioni 1) Scrivere e usare le funzioni geometriche area del rettangolo, perimetro del rettangolo 2) Scrivere e usare la funzione potenza 3) Scrivere e usare la funzione booleana che dice se due numeri hanno lo stesso segno 4) Scrivere e usare la funzione progressione aritmetica a n termini di origine a e di ragione d, cioè la somma di tutti gli n termini che si trovano partendo da a e aumentando ogni volta di d: a + (a+d) + (a+2d) + 5) Scrivere e usare la funzione progressione geometrica a n termini di origine a e di ragione q, cioè la somma di tutti gli n termini che si trovano partendo da a e moltiplicando ogni volta per q: a + (aq) + (aq²) +

Esercizi sulle procedure 1) Scrivere e usare una procedura che riceve un numero e stampa tanti asterischi quant è il numero. 2) Scrivere e usare una procedura che riceve i valori di base e altezza e stampa un rettangolo fatto di asterischi corrispondente a questi valori. (suggerimento: usare la procedura del punto 1) 3) Scrivere e usare una procedura che stampa un rettangolo che ha gli asterischi soltanto come contorno (suggerimento: usare la procedura del punto 1 per le righe piene e una seconda sottoprocedura per le righe bucate ) Puntatori e passaggio per riferimento A differenza del passaggio per valore (quello visto sinora), il passaggio per riferimento permette di modificare le variabili passate. Il passaggio per riferimento si basa sulla nozione di puntatore. Un puntatore è una variabile speciale che contiene l indirizzo di memoria di un altra variabile. I puntatori si creano specificando il tipo della variabile puntata seguito da asterisco. Es. int x; int *p; [ ] p 195 x

Vettori e puntatori Il nome del vettore è in realtà un puntatore al suo primo elemento. Es. int v[4]; v 39 v[0] 195 v[1] 0 v[2] 74 v[3] Vettori e sottoprogrammi Il passaggio dei vettori a un sottoprogramma avviene sempre come passaggio per riferimento. Nell intestazione del sottoprogramma occorre mettere un puntatore al vettore nella forma <tipo> *pv oppure nella forma <tipo> pv[ ]. Nel programma chiamante basta invece scrivere soltanto il nome del vettore (che abbiamo visto essere un puntatore al suo primo elemento). Trattandosi di un passaggio per riferimento, le modifiche effettuate sul vettore nel sottoprogramma rimangono memorizzate nel vettore originario.

Vettori e sottoprogrammi Esempio void aumenta (int pv[ ], int x, int n) int i; for (i=0; i<n; i++) pv[i] = pv[i] + x; int main () int v[30]; [ ] aumenta(v, 5, 30); [ ] Esercizi Scrivere dei sottoprogrammi per i seguenti procedimenti su vettori di interi; usarli in un unico main con menu. 1) Caricamento del vettore da tastiera 2) Azzeramento del vettore 3) Trovare la posizione del valore più grande 4) Trovare la posizione del valore più piccolo 5) Quante volte è presente nel vettore un valore dato X 6) Somma di tutti gli elementi 7) Conteggio di tutti gli elementi maggiori di un dato X 8) Stampa del vettore sullo schermo