La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

Program. Mod A - Cap. 1 prof. Burattini 1. 2 ALCUNE INFORMAZIONI PRELIMINARI Docente: Ernesto Burattini Durata del corso: dal 26/09/2006.

Presentazioni simili


Presentazione sul tema: "Program. Mod A - Cap. 1 prof. Burattini 1. 2 ALCUNE INFORMAZIONI PRELIMINARI Docente: Ernesto Burattini Durata del corso: dal 26/09/2006."— Transcript della presentazione:

1 Program. Mod A - Cap. 1 prof. Burattini 1

2 2 ALCUNE INFORMAZIONI PRELIMINARI Docente: Ernesto Burattini Durata del corso: dal 26/09/2006 al 22/12/2006 RICEVIMENTO STUDENTI GIOVEDI ORE (Dip. Fisica 2M16)

3 Program. Mod A - Cap. 1 prof. Burattini 3 Libro di testo consigliato: G. Criscuolo, F. Tramontano – Introduzione alla programmazione. Algoritmi iterativi in C++. Ed. Manna Altri libri di testo : Deitel H.M., Deitel P.J. – C++ Fondamenti di programmazione, ed. Apogeo Tucker A.B., Bernat A.P., Bradley W.J., Cupper R.D., Scragg G.W. – Fundamentals of computing I, McGraw-Hill

4 Program. Mod A - Cap. 1 prof. Burattini 4 SVOLGIMENTO DEL CORSO LEZIONI ESAME SCRITTO ESAME ORALE LABORATORIO DI PROGRAMMAZIONE PRENOTAZIONE ESAMI OBBLIGATORIA

5 Program. Mod A - Cap. 1 prof. Burattini 5 EVENTUALI CAMBI DI GRUPPO VANNO FATTI SECONDO LA NORMATIVA ILLUSTRATA SUL SITO DELLA FACOLTA

6 Program. Mod A - Cap. 1 prof. Burattini 6 Ultima osservazione E obbligatorio scrivere in ITALIANO

7 Program. Mod A - Cap. 1 prof. Burattini 7 Programmazione MOD.A gruppo G3 Questi appunti sono solo di supporto ai libri di testo e non li sostituiscono in alcun modo. La maggior parte degli esempi sono tratti dal libro di testo Gli appunti e informazioni varie sono reperibili sul sito mod.a-C++ Inviare esercizi svolti, osservazioni, note o problemi allindirizzo NON RISPONDO A MESSAGGI ANONIMI!!!

8 Program. Mod A - Cap. 1 prof. Burattini 8 PROGRAMMA DEL CORSO Introduzione al C++ Introduzione alla programmazione Procedure e funzioni Le strutture di controllo Introduzione agli stream Gli array a una o più dimensioni Testi: ……………………………………………………...

9 Program. Mod A - Cap. 1 prof. Burattini 9

10 10

11 Program. Mod A - Cap. 1 prof. Burattini 11 BREVE STORIA ABACO500 a.C. x1 x10 x100x x 5 x1

12 Program. Mod A - Cap. 1 prof. Burattini 12 Istruzioni per luso A partire da destra Per ogni colonna - stabilisci il fattore di colonna (1 per la prima, 10 per la seconda, etc.) - moltiplica la somma degli anelli del lato superiore accanto alla sbarra per 5 - somma al numero ottenuto al passo precedente il numero di anelli della parte inferiore accanto alla sbarra (1*5+4)*1=9 (1*5+3)*10= 80 (0*5+1)*100= 100 (0*5+3)*10000= (0*5+2)*100000= (1*5+2)* = (0*5+0)*1000= 0 TOTALE= moltiplica la somma precedente per il fattore di colonna - fai la somma dei risultati ottenuti precedentemente

13 Program. Mod A - Cap. 1 prof. Burattini 13 Alcune buone letture Ettore Picutti - Sul numero e la sua storia - Feltrinelli Universale Economica Simon Singh - Lultimo teorema di Fermat Denis Guedj - Il teorema del pappagallo Hans M. Enzensberger - Il mago dei numeri

14 Program. Mod A - Cap. 1 prof. Burattini 14 Pascal ( )

15 Program. Mod A - Cap. 1 prof. Burattini 15 Pascalina (1642) Realizzata da Blaise Pascal a 19 anni per aiutare il padre contabile.

16 Program. Mod A - Cap. 1 prof. Burattini 16

17 Program. Mod A - Cap. 1 prof. Burattini 17 LEIBNIZ ( ) Macchina Aritmetica VAUCANSON ( ) Anatra meccanica VON KEMPLEN ( ) Giocatore di scacchi GEORGE BOOLE ( ) Algebra Booleana

18 Program. Mod A - Cap. 1 prof. Burattini 18 CHARLES BABBAGE ( )

19 Program. Mod A - Cap. 1 prof. Burattini 19 SISTEMI LOGICI E FORMALIZZAZIONE DEL RAGIONAMENTO FREGE WHITEAD & RUSSEL CHURCH TURING

20 Program. Mod A - Cap. 1 prof. Burattini 20 CALCOLATORE dal latino classico calculus = sassolino dal latino medievale calculare = spostare sassi COMPUTER dal latino medievale computare = tagliare ALGORITMO Da Abu Jafar Mohammed ibn Mûsâ al-Khowârizmî Padre di Jafar, Mohammed, figlio di Moses, nato a Khowârizmî Autore del libro: Kitab al jabr wal-mukabala Regole di sostituzione e riduzione

21 Program. Mod A - Cap. 1 prof. Burattini 21

22 Program. Mod A - Cap. 1 prof. Burattini 22

23 Program. Mod A - Cap. 1 prof. Burattini 23 INPUTOUTPUT Memoria secondaria Memoria principale Unità logico aritmetica Unità di controllo istruzioni dati CPU

24 Program. Mod A - Cap. 1 prof. Burattini 24 CPU MICROFONO RAM HD FD CD-ROM SCHEDA AUDIO SCHEDA VIDEO SCANNER MONITOR TASTIERA MOUSE SCHEDA VIDEO PER CATTURARE IMMAGINI TELECAMERA STAMPANTE HD ESTERNO PORTA MIDI TASTIERA MIDI ALTOPARLANTI

25 Program. Mod A - Cap. 1 prof. Burattini 25 PER MEMORIZZARE LA PAROLA PASCAL NELLA MEMORIA PRINCIPALE E NECESSARIO TRASFORMARE OGNI CARATTERE IN SEQUENZE DI 0 E 1 E METTERE OGNUNO DI ESSO IN UN INDIRIZZO DI MEMORIA. INDIRIZZOCARATTEREBINARIOCODICE 14322P S A C A L Codice ASCII

26 Program. Mod A - Cap. 1 prof. Burattini BIT BYTE

27 Program. Mod A - Cap. 1 prof. Burattini 27 CODICE ASCII (American Standard Code for Information Interchange)

28 Program. Mod A - Cap. 1 prof. Burattini 28 Un generico numero N in base p è rappresentato da una sequenza di cifre a n, a n -1,……………, a 1, a 0 dove ciascun a i rappresenta un numero compreso fra 0 e p-1, a n è la cifra più significativa e a 0 la meno significativa. LA RAPPRESENTAZIONE DEI NUMERI

29 Program. Mod A - Cap. 1 prof. Burattini 29 SISTEMA DECIMALE

30 Program. Mod A - Cap. 1 prof. Burattini 30 SISTEMA BINARIO

31 Program. Mod A - Cap. 1 prof. Burattini 31 CONVERSIONE DECIMALE BINARIO 43 : 2 = 21 con resto di 1 21 : 2 = 10 con resto di 1 10 : 2 = 5 con resto di 0 5 : 2 = 2 con resto di 1 2 : 2 = 1 con resto di 0 1 : 2 = 0 con resto di 1 43 =

32 Program. Mod A - Cap. 1 prof. Burattini 32 SOFTWARE HARDWARE Sistema Operativo Compilatore Utilities - file system, editor, ……. Programmi applicativi Linguaggi di programmazione

33 Program. Mod A - Cap. 1 prof. Burattini 33 HARD DISK La directory I file C:DATI.TXT

34 Program. Mod A - Cap. 1 prof. Burattini 34 PROGRAMMA Una sequenza di istruzioni che il calcolatore esegue per produrre i risultati richiesti per la soluzione di un dato problema.

35 Program. Mod A - Cap. 1 prof. Burattini 35 LINGUAGGIO DI PROGRAMMAZIONE Un insieme di simboli, parole, regole usate per istruire il calcolatore. Linguaggio macchina: il reale linguaggio attraverso il quale il calcolatore esegue le istruzioni di un programma. Linguaggio Assembler: un linguaggio che usa specifiche istruzioni per indicare al calcolatore le operazioni da eseguire le azioni da intraprendere, è dipendente dal calcolatore usato. Linguaggio di alto livello: un linguaggio che possiede istruzioni e regole vicine ai linguaggi naturali ed è indipendente dal calcolatore usato.

36 Program. Mod A - Cap. 1 prof. Burattini 36 PROGRAMMA SORGENTE Programma scritto in un linguaggio di alto livello PROGRAMMA OGGETTO Risultato della compilazione di un programma sorgente

37 Program. Mod A - Cap. 1 prof. Burattini 37 Problema Programma Algoritmo di risoluzione CICLO DI VITA DI UN PROGRAMMA

38 Program. Mod A - Cap. 1 prof. Burattini 38 Problema: disegnare poligoni in un piano. X e Y sono numeri interi relativi. Supponiamo la penna sia alzata Istruzioni: INPUT X,Y abbassa la penna ruota verso destra di y gradi vai avanti di x quadretti vai indietro di x quadretti Linsieme delle istruzioni necessarie per disegnare il quadrato di lato 10 in figura è detto algoritmo. Se pensiamo che il braccio che porta la penna sia localizzato in modo che la penna sia in A e che sia alzata, possiamo assegnare il seguente algoritmo: 1.INPUT lato 2. abbassa la penna 3.vai avanti di lato quadretti 4.ruota verso destra di 90 gradi 5.vai avanti di lato quadretti 6.ruota verso destra di 90 gradi 7.vai avanti di lato quadretti 8.ruota verso destra di 90 gradi 9.vai avanti di lato quadretti 10.ruota verso destra di 90 gradi

39 Program. Mod A - Cap. 1 prof. Burattini 39 A A ruota verso destra di 90 gradi vai avanti di 10 quadretti ruota verso destra di 90 gradi vai avanti di 10 quadretti ruota verso destra di 90 gradi vai avanti di 10 quadretti vai avanti di 10 quadretti abbassa la penna INPUT lato abbassa la penna vai avanti di 10 quadretti ruota verso destra di 90 gradi vai avanti di 10 quadretti ruota verso destra di 90 gradi vai avanti di 10 quadretti ruota verso destra di 90 gradi vai avanti di 10 quadretti ruota verso destra di 90 gradi

40 Program. Mod A - Cap. 1 prof. Burattini 40 UN PO DI STORIA Il C++ è l'evoluzione naturale del C, il quale a sua volta discende da due linguaggi, il BCPL e il B. Il BCPL fu sviluppato nel 1967 da Martin Richards per scrivere sistemi operativi e compilatori. II linguaggio C si sviluppò dal B grazie a Dennis Ritchie, presso i Bell Laboratories. Il C fu noto inizialmente come linguaggio di sviluppo per sistemi operativi. Oggi la maggior parte dei sistemi operativi sono scritti in C e/o in C++. Il C è oggi disponibile sulla maggior parte dei computer ed è indipendente dall'hardware. Nel 1990 si è giunti ad una definizione di standard per il C nota come ANSI/ISO 9899:1990.

41 Program. Mod A - Cap. 1 prof. Burattini 41 Esegue alcune direttive prima della compilazione ad esempio linclusione nel programma di file esterni

42 Program. Mod A - Cap. 1 prof. Burattini 42 Il compilatore GNU C++ e Dev-Cpp GNU C++ è un dialetto del linguaggio ad alto livello C++ funzionante sotto i sistemi operativi Windows e Linux. Un suo ambiente di sviluppo è il Dev-Cpp, disponibile gratuitamente, e funzionante sotto il sistema operativo Windows. Il linguaggio GNU C++ ha una parte di istruzioni in comune agli altri dialetti del C++ in commercio, perché sviluppato secondo le direttive ANSI (American National Standards Institute). Per ottenere gratuitamente il Dev-Cpp è sufficiente andare sul sito scaricare lultima versione in formato exe, lanciarlo scegliendo la lingua e lasciando il resto inalterato.

43 Program. Mod A - Cap. 1 prof. Burattini 43

44 Program. Mod A - Cap. 1 prof. Burattini 44 Struttura di un programma Regole semantiche: insieme di regole che permettono di dare un significato alle istruzioni di un linguaggio di programmazione. Processo: una o più istruzioni codificate in un dato linguaggio che permettono al calcolatore di fornire il risultato richiesto. Oggetto: una o più locazioni di memoria dove vengono memorizzati i valori a cui si farà riferimento nel corso del programma.

45 Program. Mod A - Cap. 1 prof. Burattini 45 // usato per introdurre commenti su un solo rigo Es.// calcola la circonferenza del cerchio Per i commenti su più linee, è necessario utilizzare il simbolo /* allinizio del commento e */ alla fine Es. /* questo è un commento su più linee*/ ELEMENTI DI UN PROGRAMMA C++ Direttive al preprocessore e al compilatore Intestazione del programma main() { Blocco di istruzioni }

46 Program. Mod A - Cap. 1 prof. Burattini 46 Direttive al preprocessore e al compilatore #include avverte il preprocessore di includere un file header #include associa la libreria che gestisce linput e loutput dei tipi standard verso file o verso opportuni dispositivi di ingresso e uscita come stampante, schermo, tastiera. #include associa un file che permette luso di alcuni comandi del sistema operativo (in questo caso MSDOS) di cui è un esempio listruzione finale : system(pause) che lascia il sistema in attesa che si prema un tasto per continuare

47 Program. Mod A - Cap. 1 prof. Burattini 47 using namespace std utilizza gli identificatori della libreria standard (es. cin e cout) senza ulteriori specifiche. Il namespace è una direttiva duso ed è un meccanismo fornito dal C++ per raggruppare dati e funzioni nello spazio dei nomi. Senza using namespace std il compilatore non riconosce i nomi cin e cout; per farli riconoscere si può anche utilizzare il nome completo che utilizza il namespace std ed il risolutore del campo dazione :: (due punti doppi) std::cin std::cout. (dichiarazioni di uso) In sostanza la direttiva duso sta per quando sintende usare la libreria standard, si deve poter riferirsi ad un qualsiasi processo o oggetto di tale libreria digitandone il nome (cout) e non il nome completo (std::cout).

48 Program. Mod A - Cap. 1 prof. Burattini 48 Intestazione del programma main() { Blocco di istruzioni necessarie alla soluzione del problema anche detta istruzione composta } Rappresenta il processo principale del programma identazione

49 Program. Mod A - Cap. 1 prof. Burattini 49 //Calcola la circonferenza #include using namespace std; int main () { const float pi=3.1415; float circonf,raggio; cout << "Inserisci Raggio="; cin >> raggio; circonf=2*pi*raggio; cout << "circonferenza =" <

50 Program. Mod A - Cap. 1 prof. Burattini 50

51 Program. Mod A - Cap. 1 prof. Burattini 51 int

52 Program. Mod A - Cap. 1 prof. Burattini 52 PAROLE RISERVATE IDENTIFICATORI COSTANTI ESPRESSIONI OPERATORI SIMBOLI SPECIALI COMPONENTI DI UN PROGRAMMA C++

53 Program. Mod A - Cap. 1 prof. Burattini 53 PAROLE RISERVATE Termini che non possono essere adoperati dal programmatore solo come previsto dal linguaggio. Esempi: main : indica che il testo che segue rappresenta il codice sorgente del programma. const : sono associate ad oggetti del programma. float: sono associate ad oggetti del programma. PAROLE RISERVATE IDENTIFICATORI COSTANTI ESPRESSIONI OPERATORI SIMBOLI SPECIALI N.B. LE PAROLE RISERVATE sono messe in GRASSETTO IN Dec-Cpp.

54 Program. Mod A - Cap. 1 prof. Burattini 54 IDENTIFICATORI Rappresentano il nome di un oggetto o di un processo. Standard o riservati esempio cin per rappresentare il file standard di input (tastiera,..) cout per rappresentare il file standard di output (monitor,..) Non standard esempio pi è definito nel nostro esempio come costante raggio è definito nel nostro esempio come variabile PAROLE RISERVATE IDENTIFICATORI COSTANTI ESPRESSIONI SIMBOLI SPECIALI

55 Program. Mod A - Cap. 1 prof. Burattini 55 OGGETTI STANDARD Costanti con nome : un valore costante a cui si può far riferimento attraverso il suo identificatore e non può variare nel corso del programma. Esempio const float pi=3.1415; COSTANTI (const) PAROLE RISERVATE IDENTIFICATORI COSTANTI ESPRESSIONI SIMBOLI SPECIALI

56 Program. Mod A - Cap. 1 prof. Burattini 56 un oggetto che può assumere diversi valori nel corso dellelaborazione. VARIABILE Esempio circonf, raggio TIPO insieme dei valori che una variabile può assumere e contemporanea- mente linsieme delle operazioni che si possono effettuare su variabili di quel tipo. PAROLE RISERVATE IDENTIFICATORI COSTANTI ESPRESSIONI SIMBOLI SPECIALI

57 Program. Mod A - Cap. 1 prof. Burattini 57 TIPI STANDARD int numeri interi float --- numeri reali semplice precisione double --- numeri reali doppia precisione char caratteri a boolean valori vero o falso vero PAROLE RISERVATE IDENTIFICATORI COSTANTI ESPRESSIONI SIMBOLI SPECIALI

58 Program. Mod A - Cap. 1 prof. Burattini 58 I tipi interi con segno supportati dal C++ standard sono 1) char 2) short int (o short) 3) int 4) long int (o long) Si ha la possibilità di rappresentare solo i numeri positivi (unsigned) o sia i positivi che i negativi (signed). Può apparire strano vedere il tipo char nella lista degli interi, ma i caratteri sono rappresentati come interi compresi tra -128 e 127 o tra 0 e 255; la scelta del tipo segnato o non segnato dipende dal compilatore. Listruzione cin>>ch dove ch è una variabile di tipo char, accetta un carattere ASCII in ingresso, ma il carattere è memorizzato come un intero nel computer. il tipo char occupa un solo byte; il tipo short occupa almeno due byte; il tipo int occupa almeno tanti byte quanti ne occorrono per memo- rizzare il tipo short; il tipo long occupa almeno quattro byte e non meno di quanti ne occorrono per memorizzare il tipo int.

59 Program. Mod A - Cap. 1 prof. Burattini 59 I tipi reali supportati dal C++ standard sono 1) float 2) double 3) long double il tipo float occupa quattro byte; il tipo double occupa almeno otto byte e non meno del tipo float; il tipo long double occupa almeno otto byte e non meno di quanti ne occorrono per memorizzare il tipo double. La funzione sizeof applicata ad un tipo restituisce la sua lunghezza in byte. Il file da includere (o ) contiene tutti i valori minimi e massimi degli interi: per esempio il minimo valore intero è contenuto in INT_MIN, il massimo in INT_MAX. Il file header contiene i limiti dei tipi float, double e long double. CostanteDescrizione FLT_MINMinimo valore float FLT_MAXMassimo valore float DBL_MINMinimo valore double DBL_MAXMassimo valore double LDBL_MINMinimo valore Long double LDBL_MAXMassimo valore Long double

60 Program. Mod A - Cap. 1 prof. Burattini 60 PAROLE RISERVATE IDENTIFICATORI COSTANTI ESPRESSIONI SIMBOLI SPECIALI COSTANTI Sono le occorrenze di valori costanti in un programma. Possono essere nominate ad Esempio const float pi= oppure anonime, per le quali cioè non è stato dichiarato un nome. Esempio cout << Inserisci raggio

61 Program. Mod A - Cap. 1 prof. Burattini 61 ESPRESSIONI PAROLE RISERVATE IDENTIFICATORI LETTERALI ESPRESSIONI SIMBOLI SPECIALI Rappresentano il valore che si ottiene applicando opportune operazioni ben definite ad uno o più operandi che possono essere costanti o variabili. In una espressione le operazioni vengono indicate con particolari simboli detti operatori. Sono unari gli operatori che agiscono su un solo operando, binari quelli che agiscono su due operandi. aritmetici (+, -, *, /) logici (or, and, not)

62 Program. Mod A - Cap. 1 prof. Burattini 62 OperazioneSimbolo algebrico Simbolo in C++ Espressione algebrica Espressione in C++ Addizione++a+b Sottrazione--a-b Moltiplicazione x*aba*b Divisione:/a:ba/b Modulo mod%a mod ba%b

63 Program. Mod A - Cap. 1 prof. Burattini 63 SIMBOLI SPECIALI PAROLE RISERVATE IDENTIFICATORI LETTERALI ESPRESSIONI SIMBOLI SPECIALI Uno o anche due caratteri consecutivi che sono usati per scopi particolari come ad esempio il punto e virgola (;) che serve ad indicare la fine di una istruzione, le parentesi graffe ({ })che indicano inizio e fine di una istruzione composta, la virgola (,) che è usata come separatore.

64 Program. Mod A - Cap. 1 prof. Burattini 64 DICHIARAZIONI Dichiarazione di costante Ha la seguente sintassi: const type identificatore = valore dove const è una parola riservata, segue type che è il nome del tipo assegnato alla costante, il nome della costante, il simbolo = e il valore assegnatole. Le prime due parole possono anche essere invertite tra loro. const float pi= Dichiarazione di variabile Occorre far precedere al nome della variabile il nome del suo tipo. Si possono dichiarare contemporaneamente più variabili dello stesso tipo separandole con una virgola. Ad esempio: float r1,r2,media; E possibile assegnare un valore iniziale ad una variabile usando loperatore di assegnazione. Ad esempio: int i,j=1,somma;

65 Program. Mod A - Cap. 1 prof. Burattini 65 REGOLA E sempre consigliabile dichiarare tutte le costanti e le variabili nella parte iniziale del programma (o della function che le utilizza). In questo modo chi legge il programma sa dove reperire le informazioni sul tipo delle variabili e delle costanti.

66 Program. Mod A - Cap. 1 prof. Burattini 66 Le variabili hanno un nome (lidentificatore), un tipo (tipi base: interi, reali, caratteri, booleani) una dimensione (che dipende dal tipo), un valore che varia nel corso del programma un indirizzo nella memoria del computer in cui si trova il suo valore. Il tipo int occupa 2 byte Il tipo float prevede 4 byte, Il tipo double ha invece una dimensione di 8 byte. Il tipo boolean 1 byte Il tipo char occupa un 1 byte I caratteri sono rappresentati attribuendo loro un codice numerico (codice ASCII), ad esempio il codice attribuito alla lettera A è 65. Allinterno di un programma una costante di tipo carattere deve essere sempre racchiusa tra due apici, ad esempio: r, Lindirizzo può essere conosciuto inserendo loperatore & (detto operatore di indirizzo) davanti alla variabile; esempio: &raggio.

67 Program. Mod A - Cap. 1 prof. Burattini 67 Se le costanti e le variabili sono tutte dello stesso tipo allora anche il valore dellespressione sarà dello stesso tipo. Se tutte le grandezze presenti nellespressione sono di tipo numerico, anche se diversi, sarà il compilatore ad effettuare tutte le opportune conversioni di tipo. Ad esempio se le variabili n, f, d sono rispettivamente di tipo int, float e double allora nellespressione (n+f)*d, n è convertito a float, successivamente la somma n+f è convertita a double per poter effettuare la moltiplicazione con d (conversione implicita). Nel C++ sono permesse anche espressioni del tipo n+car +b dove n è un intero, car un carattere e b una variabile booleana. Se ad esempio n vale 4, car è la lettera A e b vale true, il valore dellespressione sarà =70. Luso di espressioni contenenti variabili numeriche e non numeriche non è in genere consigliabile e può dare luogo in un programma ad errori che sono difficili da individuare.

68 Program. Mod A - Cap. 1 prof. Burattini 68 REGOLA Non adoperare espressioni in cui sono presenti variabili di tipo diverso.

69 Program. Mod A - Cap. 1 prof. Burattini 69 Espressione booleana semplice: è rappresentata da un confronto tra i valori di due espressioni. La forma sintattica di una espressione booleana semplice è la seguente: espressione1 op espressione2 dove op è un operatore relazionale. Lespressione booleana assume il valore true (vero) se il valore di espressione1 è nella relazione op con il valore di espressione2. Nellesempio si suppone che le variabili assumono i seguenti valori: a=3 ; b=5 ; c1=E ; c2=G ; =Maggiore o uguale dia>=c1a>=EVero >Maggiore dia>b+23>7Falso Operatore relazionale

70 Program. Mod A - Cap. 1 prof. Burattini 70 Esercizi Valutare le seguenti espressioni in C++ 38/ %12 (15*11)/(3*11) 15*11/11*3 (23-5)/3/6 36/6%6

71 Program. Mod A - Cap. 1 prof. Burattini 71 Le istruzioni di I/O standard: cin, cout, printf La forma generale di una istruzione per la lettura da tastiera di n variabili x1 x2 …xn è la seguente: cin>>x1>>x2>>…>>xn ; allorchè il cursore lampeggia per effetto di questa istruzione lutente dovrà immettere uno dopo laltro il valore delle corrispondenti variabili, ognuno separato dallaltro da almeno uno spazio vuoto (blank) e premere il tasto Invio. I caratteri immessi sono inviati in un buffer di ingresso che rappresenta larea di memoria delloggetto cin (canale di input).

72 Program. Mod A - Cap. 1 prof. Burattini 72 L operatore di estrazione >> provvede ad estrarli nel modo seguente: Per ogni variabile x che si deve leggere: Ignora eventuali blank, e/o caratteri di tab iniziali e newline (che indicheremo rispettivamente con ъ, \t,\n) mano a mano che li preleva. Preleva tutti i caratteri successivi che formano una sequenza lecita per il tipo di variabile corrispondente. Si arresta al primo carattere non lecito. La sequenza di caratteri letti è codificata nella corrispondente sequenza di zeri e di uno (che dipende dal tipo della variabile) e questultima è inserita nellindirizzo di memoria corrispondente alla variabile.

73 Program. Mod A - Cap. 1 prof. Burattini 73 ESEMPIO Supponiamo che base e altezza siano due variabili di tipo float. Eseguendo listruzione cin >> base>>altezza; il computer estrae un valore corretto dai caratteri digitati da tastiera finché non incontra il primo carattere spazio: tale valore verrà associato alla variabile base. Ad esempio, se si digita 15.2 ъ12.2[INVIO] il computer provvederà a porre 15.2 nellindirizzo di memoria relativa alla variabile base e 12.2 in quello relativo alla variabile altezza.

74 Program. Mod A - Cap. 1 prof. Burattini 74 REGOLA Far precedere ogni istruzione di lettura da un opportuno messaggio che fornisca informazioni sullinput che ci si aspetta.

75 Program. Mod A - Cap. 1 prof. Burattini 75 La forma generale di una istruzione di lettura tramite cout (canale di output) è la seguente: cout<

76 Program. Mod A - Cap. 1 prof. Burattini 76 ESEMPIO Per far comparire sul monitor i valori delle variabili base, altezza su due linee separate si possono utilizzare le seguenti istruzioni: cout << Base triangolo: << base << endl; cout << Altezza triangolo: << altezza << endl; Si noti che le variabili base e altezza rappresentano in queste istruzioni il loro valore (right value) mentre nellistruzione: cin>>base>>altezza rappresentano il loro indirizzo (left value). Le seguenti istruzioni: cout << Salve! \n; cout << Come va? \n; genereranno il seguente output: Salve! Come va?

77 Program. Mod A - Cap. 1 prof. Burattini 77 REGOLA E opportuno che al termine di una istruzione di stampa il cursore sia situato allinizio della linea successiva

78 Program. Mod A - Cap. 1 prof. Burattini 78 Sequenza di escapeDescrizione \nCarattere di fine linea (è inserito premendo il tasto Invio) \tPosiziona il cursore del video sulla tabulazione successiva (tasto TAB) \aEmette un beep \rPosiziona il cursore allinizio della linea corrente \bIl cursore ritorna indietro di un carattere (tasto Backspace) \\Stampa la barra inversa \Stampa le doppie virgolette

79 Program. Mod A - Cap. 1 prof. Burattini 79 Sequenza di escape Le sequenze di escape sono utili anche per scrivere sul monitor dei caratteri particolari quali la stessa barra inversa (\) o le doppie virgolette (). Per esempio, per far scrivere sul monitor la frase seguente, Stampiamo questi due simboli \ e contenente la barra inversa e le doppie virgolette dobbiamo assegnare la seguente istruzione cout<

80 Program. Mod A - Cap. 1 prof. Burattini 80 Per loutput formattato abbiamo due metodi fondamentali di cout cout.width(ampiezza); cout.precision(cifre); dove ampiezza e cifre sono due interi che rappresentano, lampiezza totale messa a disposizione della variabile il numero massimo di cifre che possono essere visualizzate. Queste istruzioni devono precedere ogni ordine di stampa sul monitor, cioè ogni variabile che deve essere stampata deve essere preceduta dal rispettivo ordine di formattazione. Per esempio, se A= e B= le istruzioni cout.width(10); cout.precision(8); cout<

81 Program. Mod A - Cap. 1 prof. Burattini 81 Listruzione printf(), ha una forma diversa che meglio si presta ad un output formattato. Listruzione corrispondente alla seguente cout << "Area ="<

82 Program. Mod A - Cap. 1 prof. Burattini 82 Per esempio, con questa formattazione, printf(Area =%10.2f\n,area); I valori di area e verrebbero scritti in questo modo arrotondato per eccesso alla seconda cifra decimale Listruzione printf possiede diverse modalità di formattazione; nella tabella successiva ne riportiamo le più significative (il carattere ъ rimpiazza lo spazio vuoto).

83 Program. Mod A - Cap. 1 prof. Burattini 83 Formattazione in printf CarattereTipo argomento da convertireEsempioStampa d, iint diventa intero decimale con segno printf(%8d, 4532) ъъъъ 4532 uint diventa intero decimale senza segno printf(%8d, -532) ъ ъъъъ- 532 X, xint diventa intero esadecimale senza segno printf(%5X, 255) ъъъ FF schar stampa una stringa printf(%10.5, ciao) 10 è lampiezza di campo 5 lampiezza massima della stringa ъъъъъъ ciao fdouble diventa reale printf(%8f, -5.32) ъъъъ -5.32

84 Program. Mod A - Cap. 1 prof. Burattini 84 Osserviamo che cout.width cout.precision possono utilizzare anche delle variabili mentre printf può servirsi soltanto di numeri per formattare un dato; se il numero di cifre n richiamate in cout.precision(n) è inferiore al numero di cifre significative, allora il valore viene espresso in notazione esponenziale; per esempio, se n=3 e si deve stampare il computer mostrerà a video 1.23 e05; cout possiede molte altre istruzioni che consentono una gestione completa della formattazione a scapito della semplicità; printf consente una formattazione semplice ed efficace, anche se non molto ricca;

85 Program. Mod A - Cap. 1 prof. Burattini 85 ESEMPIO #include using namespace std; int main() { double a=sqrt(5), b= ; int conta=6; cout.width(20); cout.precision(conta); cout<

86 Program. Mod A - Cap. 1 prof. Burattini 86

87 Program. Mod A - Cap. 1 prof. Burattini 87

88 Program. Mod A - Cap. 1 prof. Burattini 88 In C++ non esiste il concetto di tastiera, disco, monitor, stampante; questi dispositivi sono raggruppati secondo due tipologie: dispositivi di input; dispositivi di output; In generale avremo dispositivo di input >>x1>>…>>xn; che va inteso come: i valori estratti dal dispositivo di input sono immessi come valore nelle variabili che seguono loperatore >> mentre dispositivo di output << espr1<<…<

89 Program. Mod A - Cap. 1 prof. Burattini 89 Ad esempio se si intende inviare dei dati sulla stampante occorre scrivere la seguente dichiarazione di tipo : ofstream stampante(prn); ed adoperare stampante al posto di cout. Ad esempio: stampante<

90 Program. Mod A - Cap. 1 prof. Burattini 90

91 Program. Mod A - Cap. 1 prof. Burattini 91 Esempi di algoritmi Determinare il passaggio dalla numerazione decimale alla binaria. Prendiamo in considerazione il numero 25 e dividiamolo per 2 più volte: ogni volta il quoziente viene sempre diviso per 2 finché lultimo quoziente è minore del divisore e diverso da zero (e quindi 1). Il numero in base 2 cercato è uguale allultimo quoziente seguito da tutti i resti presi in ordine inverso (le cifre evidenziate in neretto): 25 : : : :

92 Program. Mod A - Cap. 1 prof. Burattini 92 ALGORITMO PER IL MASSIMO COMUN DIVISORE (MCD) Si trovi il MCD tra i numeri e 1843 Si cercano i fattori primi del primo numero Si cercano i fattori primi del secondo numero Si cercano i fattori primi comuni a entrambi i numeri

93 Program. Mod A - Cap. 1 prof. Burattini 93 Ricerca Fattori Primi 93217=31 x 31 x 97

94 Program. Mod A - Cap. 1 prof. Burattini 94 Ricerca Fattori Primi 1843=19 x 97

95 Program. Mod A - Cap. 1 prof. Burattini 95 Massimo Comune Divisore Fattori Primi di 93217= 31*31*97 Fattori Primi di 1843= 19*97 Il MCD tra e 1843 è Numero di passi totale = = 53

96 Program. Mod A - Cap. 1 prof. Burattini 96 N R R R R M MCD= R ALGORITMO DI EUCLIDE

97 Program. Mod A - Cap. 1 prof. Burattini 97 ALGORITMO DI EUCLIDE PER IL MASSIMO COMUN DIVISORE ( 300 A.C.) Siano m ed n due numeri naturali e supponiamo sia m>n 1Si divide m per n 2Se il resto è zero allora n è il MCD tra m e n. 3Se il resto è diverso da zero torna al primo passo scambiando m con n e n con r (cioè dividi n per r)

98 Program. Mod A - Cap. 1 prof. Burattini 98 ESEMPIO MCD tra e 1843

99 Program. Mod A - Cap. 1 prof. Burattini 99 Insieme di regole che, eseguite in un ordine prestabilito permettono di risolvere un dato problema (se la soluzione esiste) o di comunicare lassenza di soluzione (se questa non esiste), in un numero finito di passi. ALGORITMO

100 Program. Mod A - Cap. 1 prof. Burattini 100 PROPRIETA DI UN ALGORITMO Finitezza - Un algoritmo deve sempre terminare dopo un numero finito di passi Precisione - Ogni passo dellalgoritmo deve essere definito con precisione e non in maniera ambigua Input - Un algoritmo può avere molti input come non averne nessuno Output - Un algoritmo deve produrre almeno un dato Eseguibilità - Ogni istruzione deve essere sufficientemente semplice da poter essere eseguita da una persona usando penna e carta in un tempo finito.

101 Program. Mod A - Cap. 1 prof. Burattini 101 1Si divide m per n 2Se il resto è zero allora n è il MCD tra m e n. 3Se il resto è diverso da zero torna al primo passo scambiando m con n e n con r (cioè dividi n per r) RAPPRESENTAZIONE DI UN ALGORITMO pseudo-codice 1[Cerca il resto] Dividi m per n e sia r il resto 2[Il resto è uguale a zero?] Se r=0 allora n è la risposta. Fine 3[Scambia] Poni m n, n r ; torna al passo 1.

102 Program. Mod A - Cap. 1 prof. Burattini 102 Cerca il restoScambia Il resto è uguale a zero? Si Fine No Input DIAGRAMMA DI FLUSSO

103 Program. Mod A - Cap. 1 prof. Burattini 103 Esercizi Scrivere in pseudo codice i due algoritmi per trasformare numeri decimali in numeri binari. Scrivere in pseudo codice lalgoritmo per effettuare laddizione con labaco. Scrivere in pseudo codice un algoritmo che genera tutte le possibili combinazioni di 0 e1 per N variabili.

104 Program. Mod A - Cap. 1 prof. Burattini 104 Soluzione esercizi Cap. 1 Conversione Decimale/Binario metodo successive divisioni. Dichiarazioni Sia N il numero intero decimale da trasformare in binario Sia Q il quoziente intero di N per 2 Sia R il resto della divisione Sia B la stringa che rappresenta il numero binario essa viene riempita da destra verso sinistra (inizialmente è vuota) [Controllo Fine Procedura] Se N=1 allora aggiungi 1 a sinistra di B e fermati. [Costruisci B] [Dividi] Poni in Q N/2 e in R N - Q*2 [Aggiorna B] Aggiungi a sinistra di B il valore di R : B R+B [Scambia] N Q. Ripeti il processo [Controllo Iniziale] Se N=0 allora aggiungi 0 a sinistra di B e fermati.

105 Program. Mod A - Cap. 1 prof. Burattini 105 Soluzione esercizi Cap. 1 Conversione Decimale/Binario metodo potenze di 2. DICHIARAZIONI Sia N il numero intero decimale da trasformare in binario Sia P la potenza a cui due deve essere elevato affinchè meglio approssimi per difetto N Sia D la differenza tra N e 2 P Sia B una stringa di K zeri, con K sufficientemente grande [Controllo Fine Procedure] Se N=0 allora fermati. [Costruisci B] [Calcola P] Poni in P la parte intera del log 2 (N) [Aggiorna B] Contando da destra sostituisci lo 0 di B con 1 nella posizione P+1 [Calcola D] D N - 2 P [Scambia] N D. Ripeti il processo

106 Program. Mod A - Cap. 1 prof. Burattini

107 Program. Mod A - Cap. 1 prof. Burattini 107 Soluzione esercizi Cap. 1Addizione usando un abaco DICHIARAZIONI Supponiamo che labaco abbia k aste. Sia N il primo addendo e M il secondo addendo. Rappresentiamo N=n k ….n 3 n 2 n 1, M=m h ….m 3 m 2 m 1 Sia Q il quoziente di una cifra di N o M per 5 Sia R il resto della divisione precedente [Dividi] Dividi n 1 per 5. Sia Q n 1 /5 e R n 1 - Q*5 [Sposta la palline] Prendi Q palline della parte superiore e prendi R palline della parte inferiore e spostale al centro. [Ripeti i passi precedenti ] Ripeti i passi precedenti per la seconda e terza, … la k-ma asta. [Rappresentazione di N] [Somma M] [Dividi] Dividi la cifra corrente di m 1 per 5. Sia Q m 1 /5 e R m 1 - Q*5 [Aggiungi] Aggiungi Q palline alla parte superiore. Se il numero totale di palline è uguale a due riporta le palline il alto e sposta al centro una pallina della parte inferiore della prima asta a sinistra. [Ripeti i passi precedenti ] Ripeti i passi precedenti per la seconda, terza, …, h-ma asta.

108 Program. Mod A - Cap. 1 prof. Burattini 108 Generazione di tutte le possibili combinazioni di 1 e 0 per N variabili DICHIARAZIONI Sia N il numero di variabili Sia C un numero intero posto inizialmente a 0. [Controlla Fine Elaborazione] Se C = 2 N - 1 allora finisci. [Converti in binario] Chiama la procedura DECBIN(C) per convertire C in binario [Mostra] Scrivi C [Incrementa il contatore] Poni C C + 1 [Ricomincia] Ritorna al passo iniziale.

109 Program. Mod A - Cap. 1 prof. Burattini 109 HD Editor Crea i programma e memorizza su HD Preprocessor HD Esegui il codice HD Compiler Crea il codice oggetto e memorizza su HD HD Linker Collega il codice oggetto con le librerie, crea a.out e memorizza su HD HD Loader Carica nella memoria primaria il programma CPU La CPU esegue sequenzialmente le istruzioni memorizzando nella memoria primaria i dati ottenuti

110 Program. Mod A - Cap. 1 prof. Burattini 110


Scaricare ppt "Program. Mod A - Cap. 1 prof. Burattini 1. 2 ALCUNE INFORMAZIONI PRELIMINARI Docente: Ernesto Burattini Durata del corso: dal 26/09/2006."

Presentazioni simili


Annunci Google