Laboratorio di Informatica Ingegneria Clinica Lezione 5/10/2011. Prof. Raffaele Nicolussi

Documenti analoghi
PROGRAMMAZIONE STRUTTURATA

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

Laboratorio di Programmazione Lezione 1. Cristian Del Fabbro

Le Strutture di controllo Del Linguaggio C. Prof. Francesco Accarino IIS Altiero Spinelli Sesto San Giovanni

Linguaggio C: introduzione

Corso di Fondamenti di Informatica Classi di istruzioni 2

Esercitazione 4. Comandi iterativi for, while, do-while

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

Esercizi di programmazione in C

Istruzioni di ciclo. Unità 4. Corso di Laboratorio di Informatica Ingegneria Clinica BCLR. Domenico Daniele Bloisi

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

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1

Un esempio di if annidati

La codifica. dell informazione

Fondamenti di Informatica Ingegneria Clinica Lezione 19/11/2009. Prof. Raffaele Nicolussi

Codice binario. Codice. Codifica - numeri naturali. Codifica - numeri naturali. Alfabeto binario: costituito da due simboli

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

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

Input/output in C e in C++

Somma di numeri floating point. Algoritmi di moltiplicazione e divisione per numeri interi

Esame di INFORMATICA (*) Operazioni Aritmetiche: Somma. Lezione 3. Operazioni Aritmetiche: Somma. Operazioni Aritmetiche: Somma

Cos è un algoritmo. Si dice algoritmo la descrizione di un metodo di soluzione di un problema che sia

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

Istruzioni iterative. Istruzioni iterative

ESAME DI FONDAMENTI DI INFORMATICA I ESAME DI ELEMENTI DI INFORMATICA. 28 Gennaio 1999 PROVA SCRITTA

Lezione 4. Sommario. L artimetica binaria: I numeri relativi e frazionari. I numeri relativi I numeri frazionari

La programmazione nel linguaggio C

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

= < < < < < Matematica 1

Il generatore di numeri casuali

Modulo 1. Concetti base della Tecnologia dell informazione. Prof. Nicolello Cristiano. Modulo 1

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

Programmazione. Cognome... Nome... Matricola... Prova scritta del 22 settembre Negli esercizi proposti si utilizzano le seguenti classi:

Numeri frazionari. sistema posizionale. due modi: virgola fissa virgola mobile. posizionale, decimale

Diagrammi a blocchi 1

Istruzioni di ripetizione in Java 1

Esercitazioni di Reti Logiche. Lezione 1 Rappresentazione dell'informazione. Zeynep KIZILTAN zkiziltan@deis.unibo.it

Informatica/ Ing. Meccanica/ Prof. Verdicchio/ 14/02/2012 / Foglio delle domande / VERSIONE 1

4 GLI ARRAY E LE STRINGHE

linguaggio di programmazione e programma

Programmazione. Cognome... Nome... Matricola... Prova scritta del 11 luglio 2014

Tipi elementari, costanti. Tipi di dati. VALORI: un insieme dei valori del tipo OPERAZIONI: per operare su tali valori. Tipi. intero reale carattere

L accesso ai dispositivi esterni (tastiera, monitor, file,...) viene gestito mediante canali di comunicazione.

Sequenze di controllo C:

Introduzione a Visual Basic Lezione 2 Cicli e anomalie

La divisione esatta fra a e b è l operazione che dati i numeri a e b (con a multiplo di b) permette di trovare un terzo numero c tale che c b = a.

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

Fondamenti di Programmazione

INDICE. Vista Libretto Livello Digitale 2. Importazione di dati da strumento 3. Inserisci File Vari 5. Compensazione Quote 5.

EXCEL: FORMATTAZIONE E FORMULE

METODI E TECNOLOGIE PER L INSEGNAMENTO DELLA MATEMATICA. Lezione n

FILIPPO GIOVANOLLA CLASSE IV A MERCURIO PROGRAMMA PASCAL E C++ DISEQUAZIONI DI PRIMO E SECONDO GRADO

Individuazione di sottoproblemi

Espressioni aritmetiche e ordine delle operazioni

Appunti di informatica. Lezione 4 anno accademico Mario Verdicchio

Introduzione alle macchine a stati (non definitivo)

giapresente( ) leggi( ) char * strstr(char * cs, char * ct) NULL

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

Fondamenti di Informatica. Algoritmi di Ricerca e di Ordinamento

Mini-Corso di Informatica

La gestione dei caratteri in C

Uso di metodi statici. Walter Didimo

I RADICALI QUADRATICI

ACCESS. Database: archivio elettronico, dotato di un programma di interfaccia che facilita la registrazione e la ricerca dei dati.

Procedura operativa per la gestione della funzione di formazione classi prime

Introduzione al C. Introduzione. Linguaggio ad alto livello. Struttura di un programma C

SULL USO DEI CARATTERI. char x; si legge con ( %c,&x) e si stampa con ( %c,x) ma anche con ( %d,x) DUE ESEMPI

04 - Numeri Complessi

Richiami di aritmetica

Espressioni ed Equazioni

Gestione di files Motivazioni

LINGUAGGI DI PROGRAMMAZIONE

PROGETTAZIONE DISCIPLINARE MATEMATICA classe 2^

Il calcolatore. Architettura di un calcolatore (Hardware)

Linguaggio C - Funzioni

Array multidimensionali e stringhe

Introduzione al Linguaggio C ed all IDE DEV-C++

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

Risoluzione di problemi ingegneristici con Excel

Esercitazione 3. Corso di Fondamenti di Informatica

Corso di Esercitazioni di Programmazione

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

UD4 - MATLAB. M-file. Efficienza degli algoritmi. Formati d uscita

Introduzione al linguaggio C

Le quattro operazioni fondamentali

Algoritmi e dintorni: La radice quadrata Prof. Ettore Limoli. Formule iterative

Architettura di un calcolatore e linguaggio macchina. Primo modulo Tecniche della programmazione

Unità Didattica 2 Rappresentazione dei Dati

Esercizio. Sia a R non nullo e siano m, n numeri interi non nulli con m n. Allora a m /a n è uguale a. [1] 1/a n m [2] 1/a m n [3] 1/a n m [4] a n m

FILE BINARI FILE BINARI

Fortran in pillole : prima parte

1 L estrazione di radice

Elementi base per la realizzazione dell unità di calcolo

Don Bosco, A.S. 2013/14 Compiti per le vacanze - 1C

Liceo scientifico Pascal Manerbio Esercizi di matematica per le vacanze estive

CURRICOLO DI MATEMATICA CLASSE PRIMA

Disequazioni in una incognita. La rappresentazione delle soluzioni

DISPENSE DI PROGRAMMAZIONE

Sequenze di controllo C:

Esame Informatica Generale 13/04/2016 Tema A

Transcript:

Laboratorio di Informatica Ingegneria Clinica Lezione 5/10/2011 Prof. Raffaele Nicolussi FUB - Fondazione Ugo Bordoni Via del Policlinico, 147-00161 Roma

Docente Raffaele Nicolussi rnicolussi@fub.it Lezioni Aula 16 Via del Castro Laurenziano, 7 Esercitazioni Aula 15 Via Tiburtina, 205 0654803323 Lunedì, Mercoledì 12:00 13:30 Lunedì 15:30 18:30 Ricevimento: Per appuntamento in FUB, per email, per telefono Sito web: http://w3.uniroma1.it/ingclinfondinf

Correzione esercizi del laboratorio

Errori ricorrenti Salvataggio del programma come.cpp anziché.c

Errori ricorrenti Errata comprensione del testo o definizione dell algoritmo Se il testo mostra un esempio (come il rettangolo fatto di =) non vuol dire che il programma debba fare solo ed esattamente quello riportato nell esempio! Pensare prima a come risolvere il problema e solo dopo implementarne la soluzione 1. individuare l algoritmo 2. scrivere il codice

scanf e printf scanf serve solo per chiedere all utente un dato tra le "" della scanf non posso mettere altro che %d, %f ecc, ma nessuno /n o altri caratteri SI scanf ("%d %c %f", &numero, &car, &nu); NO scanf ("pippo %d %c /n ciao %f", &numero, &car, &nu); in printf devo mettere tanti %tipodato (%d, %f, %s, ) quante sono le variabili che voglio stampare devo poi, alla fine della printf, scrivere tanti nomi di variabile quanti sono i %tipodato indicati

varie Chiudere sempre l ultima finestra in cui il programma è stato eseguito Successive compilazioni ed esecuzioni non funzioneranno Questo perché quando compilo viene creato un programma eseguibile (nome.exe) Se il vecchio nome.exe è in esecuzione il nuovo nome.exe non può essere creato

Separa numero 1. Scrivere un programma che legga da standard input un intero in base 10 di quattro cifre e le visualizzi su standard output una ad una, separandole con un carattere di tabulazione Inserire un numero intero positivo di 4 cifre: 1492 1 4 9 2 Premere un tasto per continuare... 8

Soluzione separa /* Scrivere un programma che legga da standard input un intero in base 10 di quattro cifre e le visualizzi su standard output una ad una, separandole con un carattere di tabulazione */ #include <stdio.h> #include <stdlib.h> int main(void){ int numero; int cifra1, cifra2, cifra3, cifra4; printf("numero da separare : "); scanf("%d",&numero);

Soluzione separa (2) if ( (numero>1000) && (numero<9999) ) { /*il C restituisce solamente la parte intera del risultato. Se esiste un resto, questo è perso */ cifra1 = numero % 10; cifra2 = (numero / 10) % 10; cifra3 = (numero / 100) % 10; cifra4 = (numero / 1000) % 10; printf("il numero %d diviso e\': %d %d %d %d\n", numero, cifra4, cifra3, cifra2, cifra1); } system("pause"); return 0; }

Esercizi (2/5) 3. Scrivere un programma che legga da standard input una temperatura espressa in gradi Fahrenheit e visualizzi su standard output il valore corrispondente in gradi Celsius. La formula per effettuare la conversione da Fahrenheit a Celsius è la seguente: C=temperatura in gradi Celsius F=temperatura in gradi Fahrenheit Valore in gradi Fahrenheit = 451 Valore in gradi Celsius = 232.777786 Premere un tasto per continuare... 11

Esercizi (3/5) 4. Estendere il programma precedente in modo tale che l utente possa scegliere se effettuare la conversione da Farhenheit a Celsius o viceversa. Il programma deve leggere da standard input un intero che identifica la scelta dell utente: nel caso in cui il valore letto sia 1 si deve effettuare la conversione da Fahrenheit a Celsius, nel caso sia 2 si deve effettuare la conversione inversa. La formula per effettuare la conversione da Celsius a Fahrenheit è la seguente: C=temperatura in gradi Celsius F=temperatura in gradi Fahrenheit Premi '1' per trasformare da F a C '2' per trasformare da C a F Scelta: 2 Valore in gradi Celsius = 100 Valore in gradi Fahrenheit = 212.000000 Premere un tasto per continuare... 12

Soluzione es. 2 e 3 int scelta; float F,C; do { printf("1) F->C\n"); printf("2) C->F\n"); printf("3) Esci\n"); scanf("%d",&scelta); if (scelta==1) { printf("f = "); scanf("%f",&f); C = (5.0/9.0) * (F - 32.0); } printf("\n%f F = %f C\n",F,C);

Soluzione es. 2 e 3 if (scelta==2) { printf("c = "); scanf("%f",&c); F = ((9.0/5.0) * C) + 32.0; printf("\n%f C = %f F\n",C,F); } } while (scelta!=3);

Esercizi (4/5) 5. Scrivere un programma che legga da standard input un carattere, che rappresenta un operatore ( *, +, -, / ), e due numeri reali, e stampi su standard output il risultato dell operazione corrispondente al carattere. Inserire l'operazione da effettuare ('+', '-', '*', '/'): * Inserire due numeri reali: 2.2 3.2 2.200000 * 3.200000 = 7.040000 Premere un tasto per continuare... 15

Soluzione es. 4 float n1, n2; char operatore; printf("\noperatore : "); scanf("%c",&operatore); printf("\nnumero 1 : "); scanf("%f",&n1); printf("\nnumero 2 : "); scanf("%f",&n2); printf ("\n%f %c %f = ",n1,operatore,n2); if (operatore=='+') printf ("%f\n",n1+n2); if (operatore=='-') printf ("%f\n",n1-n2); if (operatore=='*') printf ("%f\n",n1*n2); if (operatore=='/') printf ("%f\n",n1/n2);

Esercizi (5/5) 7. Scrivere un programma che, letti da standard input tre numeri interi, visualizzi su stdout, a seconda dei casi, uno dei seguenti messaggi: tutti diversi due uguali e uno diverso tutti uguali Inserire tre numeri interi: 2 5 1 Tutti diversi Premere un tasto per continuare... 17

Soluzione es. 5 int n1, n2, n3; printf("\nnumero 1: "); scanf("%d",&n1); printf("\nnumero 2: "); scanf("%d",&n2); printf("\nnumero 3: "); scanf("%d",&n3); if (( n1 == n2 ) && (n2 == n3)) printf("tutti uguali\n"); else { if ((n1 == n2) (n2 == n3) (n1==n3)) printf("due uguali\n"); else printf("tutti diversi\n"); }

Comportamento dei caratteri #include <stdio.h> int main (void) Intero: 89 Carattere: Y { int a, b, c, e; Differenza: 0 Differenza2:88 char d; a='y'; b=89; c=1; printf("\nintero:%d\t\n", a); printf("carattere: %c\n", a); e=a-b; printf("differenza: %d\n", e); e=a-c; printf("differenza2: %d\n", e); printf("differenza2 in caratteri: %c\n", e); d=a-c; printf("differenza3: %d\n", d); printf("differenza3 in caratteri: %c\n", d); return 0; } Differenza2 in caratteri: X Differenza3: 88 Differenza3 in caratteri:x

Tipi Floating-point (reali) float, double, long double introdotti per rappresentare frazioni e numeri molto grandi 0.356 0.000001 per dichiarare tali valori si possono usare le parole chiave float double double sta per doppia precisione: per rappresentare i numeri con una precisione circa doppia rispetto a float. In genere - float: 4 byte - double: 8 byte long double: per un range e precisione maggiore di double su molte macchine long e double sono sinonimi La rappresentazione dei floating-point è un aspetto poco standardizzato: per individuare l intervallo dei valori ammessi e la precisione si veda la documentazione del compilatore (anche nel file header <limits.h>)

Dichiarazioni Variabili ogni variabile deve essere dichiarata (nome e tipo) prima di essere usata Funzioni int i; int j; float a, b; una funzione viene dichiarata per il tipo di valore che restituisce in mancanza di dichiarazione di tipo per una funzione, viene associato un tipo di dati di default (int) se la funzione non restituisce valori, si usa void void permette di dichiarare esplicitamente una funzione che non restituisce alcun valore void funzione (a,b) {.} indica l assenza di argomenti int main (void) { }

Espressioni Un espressione è una combinazione di operatori, numeri e identificatori che permette di calcolare un valore. Elementi fondamentali: variabili, costanti e chiamate di funzioni 5 j f(.. ) costante variabile chiamata di funzione gli elementi possono essere combinati tramite operatori aritmetici operatori relazionali e di uguaglianza operatori logici Istruzioni di assegnamento lvalue=rvalue; lvalue = rvalue ; locazione di memoria espressione

Operatori aritmetici addizione sottrazione moltiplicazione + a+b - a-b * a*b divisione / a/b parte intera modulo % a%b resto Operatore ( ) *, /, % -, + Priorità - valutate per prime - se nidificate, prima coppia più interna - se allo stesso livello, da sinistra a destra -valutate per seconde - se allo stesso livello, da sinistra a destra -valutate per ultime - se allo stesso livello da sinistra a destra

Divisione intera e reale #include <stdio.h> int main (void) { int primo, secondo, ris, q, r; float d, a=33.567, b=2.898; primo=34; secondo=21; q=primo/secondo; r=primo%secondo; printf("\n\ndivisione: %d\t Resto:%d\n", q, r); d= a/b; printf("divisione tra a e b: %f\n", d); ris=(primo/secondo)*secondo + primo%secondo; printf("valore di ris: %d\n", ris); } return 0;

Dati due interi positivi, calcola quoziente e resto della div. intera #include <stdio.h> int main(void) { int a, b, quoziente, resto; printf("inserisci dividendo: "); scanf("%d", &a); printf("inserisci divisore: "); scanf("%d", &b); quoziente = a / b; resto = a % b; printf("%d : %d = %d con resto di %d\n", a, b, quoziente, resto); } return 0;

Diversi comportamenti per la divisione con 0 #include <stdio.h> int main (void) { int numcor; double nreale; Risposta on TurboC /* La divisione: +INF */ Risposta in VisualC /* error C21: divide or mod by zero numcor=2; nreale = numcor / 0.0; printf("\n\nla divisione: %f\n\n", nreale); } return 1;

Operatori di uguaglianza e relazionali usati nei test gli operatori relazionali hanno stesso livello di priorità gli operatori di uguaglianza hanno un livello più basso entrambi hanno associatività da sinistra a destra Operatori di uguaglianza Uguale a == x == y Diverso da!= x!= y Operatori relazionali Maggiore > x > y Minore < x < y Maggiore o >= x > = y uguale Minore o uguale <= x < = y

Operatori di uguaglianza e relazionali danno risultati booleani, ossia vero o falso in C falso (false) equivale a zero vero (true) equivale a qualsiasi valore diverso da zero (come valore di un test viene usato uno)

Priorità Operatore Associatività ( ) da sinistra a destra * / % da sinistra a destra - + da sinistra a destra < <= > >= da sinistra a destra ==!= da sinistra a destra = da destra a sinistra

Calcolare i valori delle seguenti espressioni Espressione Espressione equivalente Valore j > m j > m m/n < x (m/n) < x j m n (j <= m) >= n j x == m (j <= x) == m -x + j ==y>n m ((-x) + j) == ((y> n) >=m) x = x+ (y n) x = (x+ (y >=n)) j+1 == m y*2 ((j+1) == m)!= (y*2) int j=0, m=1, n=-1; float x=2.5, y=0.0;

Espressione Espressione equivalente Valore j > m j > m 0 m/n < x (m/n) < x 1 j m n (j <= m) >= n 1 j x == m (j <= x) == m 1 -x + j ==y>n m ((-x) + j) == ((y> n) >=m) 0 x = x+ (y n) x = (x+ (y >=n)) 3.5 j+1 == m y*2 ((j+1) == m)!= (y*2) 1 int j=0, m=1, n=-1; float x=2.5, y=0.0;

#include <stdio.h> int main (void) { int j=0, m=1, n=-1, tot; float x=2.5, y=0.0, ris; ris= x + (y>=n); printf("\nrisultato:\t%f\n", ris); tot=((j+1)==m)!=(y*2); Quiz printf("\ntotale:\t%d\n", tot); Prova a calcolare da solo cosa printf("totale in float:\t%f\n", tot); stampano le varie printf ris=((j+1)==m)!=(y*2); printf("\nrisultato intero:\t%d\n", ris); printf("risultato float:\t%f\n", ris); tot= ((-x)+j) == ((y>n)>=m); printf("\ntotale:\t%d\n", tot); printf("totale in float:\t%f\n", tot); return 1; }

#include <stdio.h> int main (void) { int j=0, m=1, n=-1, tot; float x=2.5, y=0.0, ris; ris= x + (y>=n); printf("\nrisultato:\t%f\n", ris); tot=((j+1)==m)!=(y*2); printf("\ntotale:\t%d\n", tot); printf("totale in float:\t%f\n", tot); ris=((j+1)==m)!=(y*2); printf("\nrisultato intero:\t%d\n", ris); printf("risultato float:\t%f\n", ris); tot= ((-x)+j) == ((y>n)>=m); printf("\ntotale:\t%d\n", tot); printf("totale in float:\t%f\n", tot); return 1; } Quiz Prova a calcolare da solo cosa stampano le varie printf Risultato: 3.500000 Totale: 1 Totale in float: -0.000000 Risultato intero: 0 Risultato float: 1.000000 Totale:0 Totale in float: 0.0000000

Spiegazione Quiz int j=0, m=1, n=-1, tot; float x=2.5, y=0.0, ris; ris= x + (y>=n); 2.5 + (0.0 >=-1) 2.5 + 1 = 3.5 tot=((j+1)==m)!=(y*2); ((0+1)==1)!= (0.0 * 2) (1==1)!= (0) 1!= 0 -> 1

Spiegazione Quiz 2 tot= ((-x)+j) == ((y>n)>=m); (( -2.5) + 0 ) == (( 0.0 > -1) >= 1) (-2.5) == (1 >=1) (-2.5) == 1 -> 0

Strutture di controllo flusso normale: esecuzione sequenziale trasferimento di controllo: ci sono istruzioni che permettono di specificare che l istruzione da eseguire non è quella successiva da evitare l uso del goto (rende i programmi illegibili): il teorema di Böhm-Jacopini ha dimostrato che i programmi possono essere scritti senza usare il goto i programmi possono essere scritti usando solo tre strutture di controllo: sequenza, selezione e iterazione Strutture di selezione if if/else switch Strtutture di iterazione while do/while for

Teorema di Böhm-Jacopini Il teorema di Böhm-Jacopini, enunciato nel 1966 dagli informatici Corrado Böhm e Giuseppe Jacopini, afferma che qualunque algoritmo può essere implementato utilizzando tre sole strutture, la sequenza, la selezione ed il ciclo, da applicare ricorsivamente alla composizione di istruzioni elementari

Teorema di Böhm-Jacopini La sequenza è la normale elencazione di istruzioni perché vengano eseguite una di seguito all'altra nell'ordine in cui sono state scritte dal programmatore. La selezione è la scelta fra due percorsi da seguire successivamente, che dipende da una condizione che può essere vera o falsa. Il ciclo, detto anche iterazione, è un blocco di istruzioni che vengono ripetutamente eseguite fino a che una certa condizione cambia di stato.

Strutture di selezione: if/else if (<test>) istruzione1; else istruzione2; istruzione3; Vero ( 0) Falso (0) test istruzione1 istruzione2 istruzione3 Se il <test> è vero (diverso da zero), allora viene eseguita istruzione1; Se il <test> è falso (=0), allora viene eseguita istruzione2;

Strutture di selezione: if, if/else if (<test>) istruzione1; istruzione3; istruzione1 Vero ( 0) test Falso (0) istruzione3 Se il <test> è vero (diverso da zero), allora viene eseguita istruzione1; Se il <test> è falso (=0), allora viene eseguita istruzione3;

Esercizi Dato un intero, verifica se é minore di 100 scrivere un programma per calcolare la radice quadrata di un numero a = sqrt ( b ) ; a = b Dati due interi che rappresentano il mese e l'anno, calcola il mese (ed eventualmente l'anno) successivi Problema: scrivere un programma per calcolare le radici di un equazione di secondo grado