Esercizio. Vogliamo scrivere delle funzioni che ci permettano di estrarre delle informazioni statistiche da un vettore (array) di dati:

Documenti analoghi
Funzioni. Unità 1. Domenico Daniele Bloisi. Corso di Programmazione e Metodi Numerici Ingegneria Aerospaziale BAER

Esercizio 2: Algebra dei Puntatori e Puntatori a Puntatori

Programmazione modulare

La scrittura di un programma Modellizzazione del programma Scrittura del codice Esercizi. Sperimentazioni I. Alberto Garfagnini, Marco Mazzocco

APPELLO SCRITTO DI PROGRAMMAZIONE 1 CORSO DI LAUREA IN MATEMATICA UNIVERSITÀ DEGLI STUDI DI MILANO VI.2015

Università degli Studi di Cassino Corso di Fondamenti di Informatica Tipi strutturati: Stringhe. Anno Accademico 2010/2011 Francesco Tortorella

L Allocazione Dinamica della Memoria

ERRATA CORRIGE. void SvuotaBuffer(void); void SvuotaBuffer(void) { if(getchar()!=10) {svuotabuffer();} }

Pr1: determinare il maggiore di n numeri interi n. Fondamenti di Informatica Prof. Vittoria de Nitto Personè

Istituto Tecnico Industriale M. M. Milano Polistena. Classe III D a.s. 2015/2016 C++ Guida Base

prova.c #include <stdio.h> char funzione(char); codice oggetto del main()

Codifica: dal diagramma a blocchi al linguaggio C++

Corso di Fondamenti di Informatica. Puntatori e Allocazione Dinamica

Variabili. Unità 2. Domenico Daniele Bloisi. Corso di Programmazione e Metodi Numerici Ingegneria Aerospaziale BAER

Gestione di files Motivazioni

Laboratorio di Informatica

Informatica! Appunti dal laboratorio 1!

Prova di Laboratorio del [ Corso A-B di Programmazione (A.A. 2004/05) Esempio: Media Modalità di consegna:

Le stringhe. Le stringhe

Esercizio 1 - cicli. Esercizio 1 cicli - Soluzione

Ricerca binaria (o dicotomica) di un elemento in un vettore

ELEMENTI DI INFORMATICA L-B. Ing. Claudia Chiusoli

IL PRIMO PROGRAMMA IN C

Informatica! Appunti dal laboratorio 1!

Esercizi C su array e matrici

Corso di Fondamenti di Informatica

24/2/2015 Pastebin.com - Printed Paste ID:

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

Corso di VIDEOGAMES. PROGETTO Labirinto. Guida alla creazione di un VIDEOGAMES. Parte PRIMA Definiamo il personaggio. prof.

Matematica - SMID : Programmazione Febbraio 2009 FOGLIO RISPOSTE

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

nome (lista_parametri) Funzioni funzioni predefinite: sqrt(x) log(x) usare queste funzioni significa: specificare il valore degli argomenti

Esame Informatica Generale 13/04/2016 Tema A

HOMEWORKS. in modo che il programma stampi N ripetizioni della stringa HelloWorld (su righe diverse), con N inserito dall utente.

Fondamenti di Informatica

Array. Maurizio Palesi Salvatore Serrano. In C si possono definire tipi strutturati Vi sono due costruttori fondamentali

ESERCIZI DI PROGRAMMAZIONE C/C++ per le classi seconde

Cenni sul preprocessore e il suo utilizzo

Algoritmi in C++ (prima parte)

Passaggio parametri puntatore

Funzioni, Stack e Visibilità delle Variabili in C

Esercizio 1: funzione con valore di ritorno di tipo puntatore

Unità F1. Obiettivi. Il linguaggio C. Il linguaggio C++ Linguaggio C. Pseudolinguaggio. Primi programmi

Esercitazione 12. Esercizi di Ricapitolazione

Primo passo: il preprocessor. Il preprocessore. Esempi di direttive al preprocessore: #include. Esempi di direttive al preprocessore: #define

Università degli Studi di Cassino Corso di Fondamenti di Informatica Puntatori. Anno Accademico 2010/2011 Francesco Tortorella

PROGRAMMAZIONE: Le strutture di controllo

Lezione 9 programmazione in Java Classi come contenitori

Introduzione a ROOT. 1. Informazioni generali

Fondamenti di Informatica T-1. Classi & vettori

Programmazione I - Laboratorio

Allocazione Dinamica della Memoria

Introduzione ai puntatori in C Definizione

Linguaggio C: le funzioni

Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR Introduzione al C Esercitazione 7

Programmazione Procedurale in Linguaggio C++

Prova Scritta del 19/07/10

IEIM Esercitazione IX Ordinamento vettori e Struct Complesse. Alessandro A. Nacci -

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

INFORMATICA DI BASE Linguaggio C Prof. Andrea Borghesan

a.a Codice corso: 21012, 22010

Introduzione a. Funzioni di Ingresso e Uscita. Compilazione

APPELLO SCRITTO DI PROGRAMMAZIONE 1 CORSO DI LAUREA IN MATEMATICA UNIVERSITÀ DEGLI STUDI DI MILANO VI.2014

Fondamenti di Informatica T-1 Modulo 2

Programmazione I / Informatica generale Prova scritta 11 Giugno 2008

uguale livello gerarchico non vi sono funzioni più importanti di altre main main

Errori frequenti Cicli iterativi Array. Cicli e array. Laboratorio di Programmazione I. Corso di Laurea in Informatica A.A.

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

Laboratorio di Programmazione Lezione 2. Cristian Del Fabbro

Confronto tra stringhe. (modulo) Calcolo della media e della varianza. Ecco un elenco di codici Matlab: - Calcolo valore assoluto (modulo)

Risoluzione di problemi ingegneristici con Excel

Vittoria de Nitto Personè. Esercizi proposti per il corso Fondamenti di informatica

Introduzione alla programmazione in C(++)

Definizione di metodi in Java

float somma_float(float a, float b) int get_ascii(char c)

Programmi su più moduli - Esempio

a.a Codice corso: 21012, HOMEWORKS

PROGRAMMA SVOLTO DI INFORMATICA ANNO SCOLASTICO 2013/2014. DOCENTE: Villani Chiara

Università di Roma Tor Vergata L6-1. iterazione: struttura di controllo per ripetere più volte uno stesso comando

Le Funzioni e la Ricorsione

Introduzione al C. Esercitazione 6. Raffaele Nicolussi. Corso di Fondamenti di Informatica Ingegneria Clinica

Laboratorio di Informatica

Debug di un programma

Ricerca sequenziale di un elemento in un vettore

Il generatore di numeri casuali

Informatica 1. Prova di recupero 21 Settembre 2001

Zeri di una funzione. Funzioni continue - Proprietà. certo intervallo dell'asse x. da: a ξ. cui f(x)=0. precisione desiderata (iterazione( iterazione)

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

Template (1) Molte volte l operato di una funzione o le proprietà di una classe non dipendono dal tipo dei dati coinvolti

Bloodshed Dev-C++ Bloodshed Dev-C++ è l IDE usato durante le esercitazioni/laboratorio. IDE = Integrated Development Environment. Codice corso: 21012

Il linguaggio C. Notate che...

La gestione dei caratteri in C

Introduzione all uso delle funzioni in C++

Uso di metodi statici. Walter Didimo

Laboratorio 1. 2) All interno della directory c:\temp\cognome\codici creare il file sorgente hello.c contenente il seguente codice:

Definizione Allocazione e deallocazione di variabili Allocazione e deallocazione di vettori

Il compilatore Dev-C++

Elementi di C++ di base

1 (6) 2 (7) 3 (7) 4 (7) 5 (6)

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.

Transcript:

Esercizio Vogliamo scrivere delle funzioni che ci permettano di estrarre delle informazioni statistiche da un vettore (array) di dati: Media e deviazione standard Mediana Vogliamo poi provare l utilizzo di tali funzioni

File sorgente per le funzioni statistiche Creiamo un file.cpp in cui scriveremo le funzioni richieste: chiamiamolo ad es. stats.cpp, e includiamo le intestazioni delle librerie I/O standard di C++, le <iostream> #include <iostream> using namespace std;

File stats.cpp #include <iostream> using namespace std;

Funzione per calcolare media e deviazione standard Definisco il momento di ordine k di una serie di N dati [x 1,...,x N ] la quantità M k 1 N x k i N i = 1 = In tale maniera la media è M 1 mentre la varianza (il quadrato della deviazione standard) è M 2 -M 1 2

Funzione per calcolare media e deviazione standard: parametri di ingresso Per prima cosa pensiamo che la funzione deve agire sui dati di un vettore, che deve essere uno dei parametri di ingresso La dimensione del vettore deve essere anch esso un parametro di ingresso Dal momento che si vuole restituire media E deviazione standard, è necessario prevedere un modo per salvare due risultati: le variabili dove i risultati verranno scritti saranno due variabili passate per riferimento (e quindi modificabili) alla funzione

Funzione per calcolare media e deviazione standard Nel file stats.cpp possiamo cominciare a scrivere la funzione: tipo di dato restituito dalla funzione nome della funzione Parametri passati per riferimento dove salverò i risultati int MediaStD(double *vettore, int dimensione, double &media, double &std) return 0; La funzione per ora non fa nulla e restituisce il valore 0

File stats.cpp #include <iostream> using namespace std; int MediaStD(double *vettore, int dimensione, double &media, double &std) return 0;

Funzione per calcolare media e deviazione standard Scriviamo il corpo della funzione: int MediaStD(double *vettore, int dimensione, double &media, double &std) int i; double M1, M2; M1=0; M2=0; for (i=0; i<dimensione; i++) M1=M1+vettore[i]; M2=M2+vettore[i]*vettore[i]; M1=M1/dimensione; M2=M2/dimensione; media = M1; std=sqrt(m2-m1*m1); return 0; Inizializzo i valori di M1 ed M2 a zero Calcolo i momenti di ordine 1 e 2 dei dati La funzione radice quadrata (sqrt), è definita nelle librerie matematiche del C++. Per utilizzarla devo includere i prototipi contenuti in <cmath>

File stats.cpp #include <iostream> #include <cmath> using namespace std; int MediaStD(double *vettore, int dimensione, double &media, double &std) int i; double M1, M2; M1=0; M2=0; for (i=0; i<dimensione; i++) M1=M1+vettore[i]; M2=M2+vettore[i]*vettore[i]; M1=M1/dimensione; M2=M2/dimensione; media = M1; std=sqrt(m2-m1*m1); return 0;

File di intestazione per le funzioni statistiche Creiamo ora un file.h che contenga i prototipi delle funzioni che sono presenti nel file stats.cpp, in modo da poterle utilizzare nel programma principale

File stats.h #include <iostream> #include <cmath> int MediaStD(double *vettore, int dimensione, double &media, double &std);

File sorgente del programma principale Creiamo un file.cpp in cui scriveremo il programma principale per provare le funzioni statistiche: chiamiamolo ad es. principale.cpp, e includiamo le intestazioni delle librerie I/O standard di C++, le <iostream>

File principale.cpp #include <iostream> using namespace std; int main() return 0; La funzione per ora non fa nulla e restituisce il valore 0

Programma principale Vorremmo fare in modo di: Chiedere all utente la dimensione del vettore Far inserire i dati nel vettore dall utente Calcolare media e deviazione standard con la funzione scritta Visualizzare a schermo i risultati

File principale.cpp #include <iostream> #include <new> using namespace std; Creo un vettore di dimensione opportuna allocando dinamicamente la memoria con l operatore new, il cui prototipo è contento in <new> int main() int dimensione; double *vettore; cout<< Inserisci la dimensione del vettore \n ; cin >> dimensione; vettore = new double[dimensione]; delete [] vettore; return 0; Appena alloco l array, scrivo anche l istruzione per la sua cancellazione prima dell uscita dal programma

File principale.cpp #include <iostream> #include <new> using namespace std; int main() int dimensione,i; double *vettore; cout<< Inserisci la dimensione del vettore \n ; cin >> dimensione; vettore = new double[dimensione]; for(i=0;i<dimensione;i++) cout<< Inserisci un dato: ; cin >> vettore[i]; delete [] vettore; return 0; Riempio l array con dati inseriti dall utente

File principale.cpp #include <iostream> #include <new> #include stats.h using namespace std; int main() int dimensione,i; double *vettore; double media, std; Per utilizzare la funzione che calcola media e deviazione standard devo includere il file di intestazione che contiene il suo prototipo cout<< Inserisci la dimensione del vettore \n ; cin >> dimensione; vettore = new double[dimensione]; for(i=0;i<dimensione;i++) cout<< Inserisci un dato: ; cin >> vettore[i]; Calcolo media e std e visualizzo i loro valori a video MediaStD(vettore,dimensione,media,std); cout << La media dei dati inseriti e << media << \n ; cout << La deviazione standard dei dati inseriti e << std << \n ; delete [] vettore; return 0;

Compilazione A questo punto bisogna compilare il codice del programma principale ed il codice della funzione MediaStd: >> g++ principale.cpp stats.cpp o prova >> Se tutto è corretto non dovrei avere errori, che altrimenti vanno individuati e corretti, e sono pronto a provare il programma

Funzione per calcolare la mediana La mediana è il dato per cui metà dei valori nell array gli sono inferiori e metà superiori. Può essere calcolata in modo semplice prendendo il valore che sta nella posizione centrale di un array ordinato Per calcolare la mediana di un array di dimensione N bisogna dunque: 1. Ordinare l array 2. Individuare la posizione centrale dell array ordinato e prenderne il valore

Funzione per ordinare un vettore Per prima cosa pensiamo che la funzione deve agire sui dati di un vettore, che deve essere uno dei parametri di ingresso La dimensione del vettore deve essere anch esso un parametro di ingresso

File stats.cpp #include <iostream> #include <cmath> using namespace std; int MediaStD(double *vettore, int dimensione, double &media, double &std)... int Ordina(double *vettore, int dimensione) int i,j; double tmp; Utilizzo BubbleSort per ordinare un vettore for (i=1;i<dimensione;i++) for(j=dimensione-1;j>i;j--) if(vettore[j-1]>vettore[j]) tmp=vettore[j-1]; vettore[j-1]=vettore[j]; vettore[j]=tmp; return 0;

File stats.h #include <iostream> #include <cmath> int MediaStD(double *vettore, int dimensione, double &media, double &std); int Ordina(double *vettore, int dimensione);

Funzione per calcolare la mediana di un vettore La funzione ha bisogno di un vettore e della sua dimensione come parametri di ingresso Deve restituire il valore mediano del vettore che è un double

File stats.cpp #include <iostream> #include <cmath> #include stats.h using namespace std; La funzione Mediana ha bisogno della funzione di ordinamento. Il suo prototipo si trova in stats.h, cha va dunque incluso int MediaStD(double *vettore, int dimensione, double &media, double &std)... int Ordina(double *vettore, int dimensione)... double Mediana(double *vettore, int dimensione) int centro; Ordina(vettore,dimensione); centro=dimensione/2; Calcolo della mediana: ordinamento dell array e restituzione del valore centrale return vettore[centro];

File stats.h #include <iostream> #include <cmath> int MediaStD(double *vettore, int dimensione, double &media, double &std); int Ordina(double *vettore, int dimensione); double Mediana(double *vettore, int dimensione);

File principale.cpp #include <iostream> #include <new> #include stats.h using namespace std; int main() int dimensione,i; double *vettore; double media, std, mediana; Calcolo della mediana e sua visualizzazione a video cout<< Inserisci la dimensione del vettore \n ; cin >> dimensione; vettore = new double[dimensione]; for(i=0;i<dimensione;i++) cout<< Inserisci un dato: ; cin >> vettore[i]; MediaStD(vettore,dimensione,media,std); cout << La media dei dati inseriti e << media << \n ; cout << La deviazione standard dei dati inseriti e << std << \n ; mediana=mediana(vettore,dimensione); cout << La mediana dei dati inseriti e << mediana << \n ; delete [] vettore; return 0;

Compilazione Perchè le modifiche al codice siano attuate, bisogna ri-compilare i due files che contengono il codice C++: >> g++ principale.cpp stats.cpp o prova >> Se tutto è corretto non dovrei avere errori, che altrimenti vanno individuati e corretti, e sono pronto a provare il programma

Esercizio 1 Provare ad aggiungere la funzione statistica che calcola il p-esimo valore percentile di un array. Se N è il numero di elementi di un array, il suo p- esimo percentile è l elemento che sta nella posizione p*n/100, con p variabile da 1 a 100. Da notare che il 50-esimo percentile corrisponde alla mediana

Esercizio 2 Aggiungere la funione statistica che calcoli il il momento centrale di ordine k di una serie di N dati [x 1,...,x N ] : N 1 m = ( x M ) k i 1 N i = 1 k In cui M 1 è la media dei dati