Programmazione Procedurale in Linguaggio C++ 27/03/2017 Programmazione Procedurale in Linguaggio C++ Elementi di Base Parte 7 Dettagli e Approfondimenti versione 2.6 Questo lavoro è concesso in uso secondo i termini di una licenza Creative Commons (vedi ultima pagina) G. Mecca – M. Samela – Università della Basilicata
Sommario Ricapitolazione ANSI C++ Approfondimenti sui Tipi di Dato Elementi di Base: Dettagli e Approfondimenti >> Sommario Sommario Ricapitolazione ANSI C++ Compilatori in Ambiente Linux Approfondimenti sui Tipi di Dato Altri Tipi di Dato Operatore di Cast Espressioni Differenze con il C G. Mecca - Programmazione Procedurale in Linguaggio C++
Ricapitolazione Elementi di Base In sintesi Elementi di Base: Dettagli e Approfondimenti >> Ricapitolazione Ricapitolazione Elementi di Base nozioni sintattiche di base nozioni sulla dichiarazione dei dati nozioni sulle operazioni di base sui dati di un programma In sintesi quello che serve per scrivere programmi che si comportano come una calcolatrice G. Mecca - Programmazione Procedurale in Linguaggio C++
Nozioni Sintattiche di Base Elementi di Base: Dettagli e Approfondimenti >> Ricapitolazione Nozioni Sintattiche di Base Direttive per librerie di sistema e librerie dell’utente #include <iostream.h> (librerie di sistema) #include <fstream.h> (librerie di sistema) #include “equazioniLib.h” (librerie utente) Commenti linea singola // questo è un commento multilinea /* commento */ G. Mecca - Programmazione Procedurale in Linguaggio C++
Nozioni Sintattiche di Base Elementi di Base: Dettagli e Approfondimenti >> Ricapitolazione Nozioni Sintattiche di Base Identificatori nomi degli oggetti di un programma (variabili, costanti, parametri, moduli) Regole sintattiche sequenza di lettere/cifre/_ primo carattere: lettera o _ codice ASCII a 7 bit sensibile alle maiuscole escluse le parole chiave riservate (es: main) G. Mecca - Programmazione Procedurale in Linguaggio C++
Dichiarazione dei Dati Elementi di Base: Dettagli e Approfondimenti >> Ricapitolazione Dichiarazione dei Dati Tipi di dato di base int: 32 bit in complemento a 2, da -2 miliardi a +2 miliardi circa float: 32 bit in v.m., da -1038 a +1038 circa double: 64 bit in v.m., da -10308 a +10308 ca. char: 8 bit, codice ASCII a 7 bit bool: 1 bit Tipo string: classe di oggetti del C++ G. Mecca - Programmazione Procedurale in Linguaggio C++
Dichiarazione dei Dati Elementi di Base: Dettagli e Approfondimenti >> Ricapitolazione Dichiarazione dei Dati Dichiarazioni di costante simbolica const <tipo> <identificatore> = <valore>; es: const float PIGRECO = 3.1415; Semantica spazio nella memoria del tipo specificato, non modificabile, contenente il valore Vantaggi poter cambiare il valore intervenendo solo sulla dichiarazione G. Mecca - Programmazione Procedurale in Linguaggio C++
Dichiarazione dei Dati Elementi di Base: Dettagli e Approfondimenti >> Ricapitolazione Dichiarazione dei Dati Dichiarazioni di variabili <tipo> <identificatore>; <tipo> <identif1>, <identif2>, ... <identifn>; es: int raggio; es: float cerchio, circonf; Semantica spazio nella memoria del tipo specificato modificabile liberamente nel corso del programma (lettura o assegnazione) G. Mecca - Programmazione Procedurale in Linguaggio C++
Dichiarazione dei Dati Elementi di Base: Dettagli e Approfondimenti >> Ricapitolazione Dichiarazione dei Dati Attenzione subito dopo la dichiarazione il valore della variabile è casuale (indefinibile) è necessario inizializzare la variabile leggendone il valore da un flusso o con un’istruzione di assegnazione Esempio int raggio; cin >> raggio; int raggio; raggio = 3; G. Mecca - Programmazione Procedurale in Linguaggio C++
Dichiarazione dei Dati Elementi di Base: Dettagli e Approfondimenti >> Ricapitolazione Dichiarazione dei Dati In alternativa inizializzazione contestuale alla dichiarazione es: int raggio = 0; Equivalente a due istruzioni int raggio; raggio = 0; G. Mecca - Programmazione Procedurale in Linguaggio C++
Dichiarazione dei Dati Elementi di Base: Dettagli e Approfondimenti >> Ricapitolazione Dichiarazione dei Dati Attenzione (2) possibili errori di rappresentazione Varie cause limitatezza dello spazio in memoria (trabocco) natura della rappresentazione in virgola mobile (arrotondamenti) G. Mecca - Programmazione Procedurale in Linguaggio C++
Istruzioni di Base sui Dati Elementi di Base: Dettagli e Approfondimenti >> Ricapitolazione Istruzioni di Base sui Dati Istruzioni di base istruzioni di assegnazione istruzioni di lettura e stampa Istruzioni di assegnazione servono ad assegnare il risultato di un calcolo ad una variabile Istruzioni di lettura e stampa servono ad acquisire e stampare i valori delle variabili G. Mecca - Programmazione Procedurale in Linguaggio C++
Istruzioni di Assegnazione Elementi di Base: Dettagli e Approfondimenti >> Ricapitolazione Istruzioni di Assegnazione Sintassi <nomeVariabile> = <espressione>; Semantica viene calcolato il valore dell’espressione se il valore risultante è compatibile con il tipo della variabile, viene assegnato alla variabile (ovvero: il valore viene scritto nello spazio di memoria associato alla variabile) altrimenti si genera un errore G. Mecca - Programmazione Procedurale in Linguaggio C++
Espressioni Formule per il calcolo di un valore Operandi Operatori Elementi di Base: Dettagli e Approfondimenti >> Ricapitolazione Espressioni Formule per il calcolo di un valore composte di operandi e operatori Operandi costanti variabili Operatori operatori predefiniti funzioni predefinite G. Mecca - Programmazione Procedurale in Linguaggio C++
Istruzioni di Lettura e Stampa Elementi di Base: Dettagli e Approfondimenti >> Ricapitolazione Istruzioni di Lettura e Stampa Basate sul concetto di “flusso” canale di comunicazione tra il processore ed un dispositivo di ingresso o di uscita Standard input flusso standard di ingresso, proveniente dalla tastiera Standard output flusso standard di uscita, diretto verso lo schermo G. Mecca - Programmazione Procedurale in Linguaggio C++
Esegue le istruzioni del Programma Elementi di Base: Dettagli e Approfondimenti >> Ricapitolazione Concetto di Flusso Standard Output Schermo Standard Input Tastiera Flusso di uscita Flusso di ingresso Stampante Esegue le istruzioni del Programma Processore Flusso di uscita File su disco Flusso di ingresso File su disco Flusso di uscita G. Mecca - Programmazione Procedurale in Linguaggio C++
Istruzioni di Stampa Sintassi Semantica Elementi di Base: Dettagli e Approfondimenti >> Ricapitolazione Istruzioni di Stampa Sintassi cout << <espressione>; cout << <espressione1> << <espressione2> ... ; espressione: costante, variabile, espr. complessa Semantica viene calcolato il valore di ciascuna espressione il valore viene inserito nel flusso diretto allo schermo sotto forma di sequenza di caratteri G. Mecca - Programmazione Procedurale in Linguaggio C++
Istruzioni di Lettura Sintassi Semantica: input formattato Elementi di Base: Dettagli e Approfondimenti >> Ricapitolazione Istruzioni di Lettura Sintassi cin >> <variabile>; Semantica: input formattato appena nel flusso è presente almeno una riga, il processore analizza il flusso nell’analisi del flusso ignora eventuali spazi bianchi iniziali gli spazi bianchi vengono utilizzati anche come separatori tra i valori G. Mecca - Programmazione Procedurale in Linguaggio C++
Lettura e Stampa da e verso File Elementi di Base: Dettagli e Approfondimenti >> Ricapitolazione Lettura e Stampa da e verso File ofstream flusso associato ad un file in cui si stampano dati es: ofstream flussoSuFile (“fileDati.txt”); ifstream flusso associato ad un file da cui si leggono dei dati es: ifstream flussoDaFile (“fileDati.txt”); Per utilizzarli è necessario specificare #include <fstream.h> G. Mecca - Programmazione Procedurale in Linguaggio C++
Domande ed Esercizi di Riepilogo Elementi di Base: Dettagli e Approfondimenti >> Ricapitolazione Domande ed Esercizi di Riepilogo G. Mecca - Programmazione Procedurale in Linguaggio C++
ANSI C++ Versione standard del C++ Elementi di Base: Dettagli e Approfondimenti >> ANSI C++ ANSI C++ Versione standard del C++ successiva alla prima introduzione Prevede alcune varianti nella sintassi Alcuni esempi cambiamenti nelle direttive di inclusione introduzione dei “namespace” cambiamenti nella struttura del programma principale G. Mecca - Programmazione Procedurale in Linguaggio C++
Un Semplice Programma in ANSI C++ 27/03/2017 Elementi di Base: Dettagli e Approfondimenti >> ANSI C++ Un Semplice Programma in ANSI C++ // Calcolo della superficie del cerchio #include <iostream> using namespace std; int main() { const float pigreco=3.14; int raggio; float cerchio, circonf; cout << “Immetti la lungh. del raggio” << endl; cout << “(deve essere un numero intero)” << endl; cin >> raggio; cerchio = raggio*raggio*pigreco; circonf = 2*pigreco*raggio; cout << “La circonferenza misura: “ << circonf << endl; cout << “Il cerchio ha superficie: “ << cerchio << endl; return 0; } G. Mecca - Programmazione Procedurale in Linguaggio C++
Elementi di Base: Dettagli e Approfondimenti >> ANSI C++ Le modifiche sono orientate prevalentemente alla programmazione a oggetti Complicano la descrizione del linguaggio es: concetto di namespace Nel seguito NON faremo riferimento al C++ ANSI G. Mecca - Programmazione Procedurale in Linguaggio C++
Compilatori in Ambiente Linux Elementi di Base: Dettagli e Approfondimenti >> ANSI C++ Compilatori in Ambiente Linux Attenzione alcuni compilatori, però, richiedono necessariamente codice ANSI C++ Esempio GCC (GNU C Compiler) compilatore storico per Linux – digerisce solo ANSI C++ Utilizzo compilazione: g++ <sorgente>.cpp esecuzione: ./a.out >> G. Mecca - Programmazione Procedurale in Linguaggio C++
Compilatori in Ambiente Linux Elementi di Base: Dettagli e Approfondimenti >> ANSI C++ Compilatori in Ambiente Linux La particolarità di gcc è una collezione di compilatori Compilatore FORTRAN g77 stesse modalità di funzionamento di gcc Utilizzo compilazione: g77 <sorgente>.for esecuzione: ./a.out >> G. Mecca - Programmazione Procedurale in Linguaggio C++
Approfondimenti sui Tipi di Dato Elementi di Base: Dettagli e Approfondimenti >> Approfondimenti sui Tipi Approfondimenti sui Tipi di Dato Finora ci siamo concentrati solo sui tipi di dato fondamentali del C++ Ma esistono altri tipi di dato le regole di compatibilità sono più complesse di quelle che abbiamo descritto G. Mecca - Programmazione Procedurale in Linguaggio C++
Altri Tipi di Dato Esistono altri tipi Intero corto: short int Elementi di Base: Dettagli e Approfondimenti >> Approfondimenti sui Tipi Altri Tipi di Dato Esistono altri tipi Intero corto: short int esempio: short int raggio; 16 bit di memoria, valori (-32768, +32767) Intero lungo: long int esempio: long int risultato; tipicamente: bit int ≤ bit long int G. Mecca - Programmazione Procedurale in Linguaggio C++
Altri Tipi di Dato Intero con segno/senza segno Elementi di Base: Dettagli e Approfondimenti >> Approfondimenti sui Tipi Altri Tipi di Dato Intero con segno/senza segno signed int risultato; signed short int risultato; unsigned int risultato; unsigned long int risultato; Reali lunghi: long double esempio: long double circonferenza; tipicamente: #bit double ≤ #bit long double G. Mecca - Programmazione Procedurale in Linguaggio C++
Altri Tipi di Dato Caratteri con segno/senza segno Inoltre Elementi di Base: Dettagli e Approfondimenti >> Approfondimenti sui Tipi Altri Tipi di Dato Caratteri con segno/senza segno char car1; unsigned char car2; Inoltre esiste un tipo per rappresentare caratteri al di fuori del set di caratteri ASCII standard tipo wchar_t (“wide char type”) normalmente 16 bit per la rappresentazione dipende dal compilatore G. Mecca - Programmazione Procedurale in Linguaggio C++
Altri Tipi di Dato Attenzione Esempio Elementi di Base: Dettagli e Approfondimenti >> Approfondimenti sui Tipi Altri Tipi di Dato Attenzione a differenza di quanto affermato per semplicità in precedenza, lo spazio assegnato a ciascun tipo di dato non è fisso dipende dal compilatore e dal processore Esempio in alcune macchine int può essere di 32 bit in altre macchine di 16 bit G. Mecca - Programmazione Procedurale in Linguaggio C++
Altri Tipi di Dato Operatore sizeof Sintassi Elementi di Base: Dettagli e Approfondimenti >> Approfondimenti sui Tipi Altri Tipi di Dato Operatore sizeof operatore fornito dal linguaggio per scoprire la dimensione esatta attribuita dal processore ad una variabile o un tipo di dato Sintassi sizeof(<tipo>) sizeof(<variabile>) G. Mecca - Programmazione Procedurale in Linguaggio C++
Altri Tipi di Dato Esempi int i; Elementi di Base: Dettagli e Approfondimenti >> Approfondimenti sui Tipi Altri Tipi di Dato Esempi int i; cout << "i : " << sizeof(i); //4 cout << "short int: " << sizeof(short int); //2 cout << "int : " << sizeof(int); //4 cout << "long int: " << sizeof(long int); //4 cout << "char : " << sizeof(char); //1 cout << "float: " << sizeof(float); //4 cout << "double: " << sizeof(double); //8 cout << "long double:“<< sizeof(long double);//10 G. Mecca - Programmazione Procedurale in Linguaggio C++
Una Classificazione Complessiva Elementi di Base: Dettagli e Approfondimenti >> Approfondimenti sui Tipi Una Classificazione Complessiva Tipi di base del C++ tipi “enumerabili” tipo booleano bool tipi carattere char unsigned char wchar_t tipi interi short int long unsigned short unsigned int unsigned long tipi in virgola mobile float double long double G. Mecca - Programmazione Procedurale in Linguaggio C++
Compatibilità tra Tipi Elementi di Base: Dettagli e Approfondimenti >> Approfondimenti sui Tipi Compatibilità tra Tipi Le regole di compatibilità tra tipi sono più complesse di quanto visto finora tutti i tipi di base sono compatibili tra loro In particolare il tipo char è considerato un tipo numerico (valore di un carattere pari al codice ASCII) il tipo bool è considerato un tipo numerico (valore pari a 0 oppure 1); qualsiasi valore diverso da 0 è considerato true G. Mecca - Programmazione Procedurale in Linguaggio C++
Compatibilità tra Tipi Elementi di Base: Dettagli e Approfondimenti >> Approfondimenti sui Tipi Compatibilità tra Tipi Esempio: int i; bool b; char c; c = ‘a’; i = c; // assegno un char ad un int b = i; // assegno un int ad un bool cout << c << “ “ << i << “ “ b; a 97 1 G. Mecca - Programmazione Procedurale in Linguaggio C++
Compatibilità tra Tipi Elementi di Base: Dettagli e Approfondimenti >> Approfondimenti sui Tipi Compatibilità tra Tipi Gerarchia di Tipi Numerici tipo booleano: bool (tipo meno generale) tipi carattere: char, unsigned char tipi interi: short int, int, long int (tutti signed e unsigned) tipi reali: float, double, long double (tipi più generali) Nelle espressioni sono compatibili troncamento e ampliamento G. Mecca - Programmazione Procedurale in Linguaggio C++
Compatibilità tra Tipi Elementi di Base: Dettagli e Approfondimenti >> Approfondimenti sui Tipi Compatibilità tra Tipi Attenzione queste sono da considerarsi idiosincrasie del C/C++ (non presenti in FORTRAN) è opportuno evitare di utilizzare queste funzionalità (i caratteri sono diversi dagli interi) è importante conoscerle perché a volte nascondono errori (es: assegnazioni errate) G. Mecca - Programmazione Procedurale in Linguaggio C++
Operatore di Cast Riassumendo Esempio: il numero 1 Elementi di Base: Dettagli e Approfondimenti >> Operatore di Cast Operatore di Cast Importante Riassumendo ogni dato trattato dal processore ha un tipo alcuni valori possono essere considerati di tipi diversi Esempio: il numero 1 valore di tipo bool valore di tipo int valore di tipo float valore di tipo double G. Mecca - Programmazione Procedurale in Linguaggio C++
Operatore di Cast In questi casi Conversioni di tipo Elementi di Base: Dettagli e Approfondimenti >> Operatore di Cast Operatore di Cast In questi casi il valore può essere soggetto a conversioni di tipo Conversioni di tipo consistono nella trasformare la rappresentazione in memoria del valore che da quel momento è considerato di tipo diverso rispetto al suo tipo originale G. Mecca - Programmazione Procedurale in Linguaggio C++
Operatore di Cast Normalmente Operazioni di “Cast” Elementi di Base: Dettagli e Approfondimenti >> Operatore di Cast Operatore di Cast Normalmente le conversioni di tipo vengono effettuate automaticamente dal processore ma possono essere richieste esplicitamente dal programmatore Operazioni di “Cast” operazione attraverso cui il programmatore chiede esplicitamente di trasformare la rappresentazione e il tipo di un valore G. Mecca - Programmazione Procedurale in Linguaggio C++
Operatore di Cast Operatori di Cast Esempio Elementi di Base: Dettagli e Approfondimenti >> Operatore di Cast Operatore di Cast Operatori di Cast l’operazione viene realizzata attraverso opportuni operatori unari un operatore per ciascun tipo Esempio es: float x; bool b; x = (float) 3; b = (bool) x; dato di tipo int, valore 3 dato di tipo float, valore 3.0 dato di tipo bool, valore 1 G. Mecca - Programmazione Procedurale in Linguaggio C++
Operatore di Cast Sintassi Semantica Elementi di Base: Dettagli e Approfondimenti >> Operatore di Cast Operatore di Cast Sintassi (<tipo>)<valore> Semantica supponiamo che <valore> sia di tipo <tipo’> il processore trasforma la rappresentazione in memoria del <valore> nella corrispond. rappresentazione del <tipo> specificato da quel momento <valore> è considerato di tipo <tipo> G. Mecca - Programmazione Procedurale in Linguaggio C++
Operatore di Cast Utilizzo Esempio: Elementi di Base: Dettagli e Approfondimenti >> Operatore di Cast Operatore di Cast Utilizzo consentono di controllare le trasformazioni di tipo nelle espressioni Esempio: float media; int sommaVoti, numEsami; sommaVoti = 64; numEsami = 3; media = sommaVoti/numEsami; cout << media; 21 media = (float)sommaVoti/numEsami; cout << media; 21.3334 G. Mecca - Programmazione Procedurale in Linguaggio C++
Operatore di Cast Attenzione l’operatore ha priorità molto alta Elementi di Base: Dettagli e Approfondimenti >> Operatore di Cast Operatore di Cast Attenzione l’operatore ha priorità molto alta attenzione all’ordine di applicazione media = (float)sommaVoti/numEsami; cout << media; 21.3334 media = ((float)sommaVoti)/numEsami; cout << media; 21.3334 media = (float)(sommaVoti/numEsami); cout << media; 21 G. Mecca - Programmazione Procedurale in Linguaggio C++
Espressioni Un altro esempio di stranezza del C/C++ In particolare Elementi di Base: Dettagli e Approfondimenti >> Espressioni Espressioni Un altro esempio di stranezza del C/C++ in C++ tutte le istruzioni sono in effetti considerate espressioni ovvero regole per calcolare un valore In particolare le istruzioni di assegnazione sono complessivamente anche espressioni le istruzioni di lettura e stampa sono complessivamente anche espressioni G. Mecca - Programmazione Procedurale in Linguaggio C++
Assegnazioni Operatore di assegnazione (=) Esempio Elementi di Base: Dettagli e Approfondimenti >> Espressioni Assegnazioni Operatore di assegnazione (=) ha una duplice funzione assegna il valore a destra alla variabile a sinistra restituisce il valore assegnato Esempio int a; a = 1; // assegna 1 ad a e restituisce 1 E’ possibile includere le assegnazioni in espressioni più complesse G. Mecca - Programmazione Procedurale in Linguaggio C++
Assegnazioni Esempio n.1 equivalente a; Esempio n.2 int a, b, c; Elementi di Base: Dettagli e Approfondimenti >> Espressioni Assegnazioni Esempio n.1 int a, b, c; a = (a = 5) + (b = 7); equivalente a; a = 5; b = 7; c = a + b; Esempio n.2 a = (b = (c = 0)); // equivalente a a=b=c=0; c = 0; b = 0; a = 0; G. Mecca - Programmazione Procedurale in Linguaggio C++
Istruzioni di Lettura e Stampa Elementi di Base: Dettagli e Approfondimenti >> Espressioni Istruzioni di Lettura e Stampa Operatore di Lettura (>>) ha una duplice funzione acquisisce il valore da assegnare alla var restituisce 1 se la lettura si è svolta correttamente, 0 se c’è stato un errore Anche in questo caso è possibile combinare le istruzioni di lettura e stampa in espressioni più complesse Esempio int a, b, c; cout << (cin >> a); // stampa 0 se c’è errore G. Mecca - Programmazione Procedurale in Linguaggio C++
Espressioni Possono essere complesse Esempi Elementi di Base: Dettagli e Approfondimenti >> Espressioni Espressioni Possono essere complesse Il C++ fornisce numerosi altri operatori le regole di precedenza sono intricate Esempi operatori “bit a bit”: &, |, ~ operatori di scorrimento: >>, << operatore condizionale: ? operatore “virgola”: , G. Mecca - Programmazione Procedurale in Linguaggio C++
Espressioni Operatori unari con effetti collaterali Elementi di Base: Dettagli e Approfondimenti >> Espressioni Espressioni Operatori unari con effetti collaterali possono essere postfissi o prefissi Operatore postfisso effetto collaterale dopo la valutazione es: a++ (valuta a e poi la incrementa) Operatore prefisso effetto collaterale prima della valutazione es: ++a (incrementa a e poi valuta) G. Mecca - Programmazione Procedurale in Linguaggio C++
Espressioni Esempio 1 int i, j, k; i = 10; j = 20; Elementi di Base: Dettagli e Approfondimenti >> Espressioni Espressioni prima viene valutata la sottoespressione a (valore 10) e poi la variabile viene incrementata Esempio 1 int i, j, k; i = 10; j = 20; k = i++ + j; // k vale 30 k = ++i + j; // k vale 31 prima viene incrementata la variabile a (valore 11) e poi viene valutata la sottoespressione G. Mecca - Programmazione Procedurale in Linguaggio C++
Una Annotazione Importante Elementi di Base: Dettagli e Approfondimenti >> Espressioni Una Annotazione Importante Attenzione è possibile programmare benissimo anche ignorando le stranezze descritte in questa lezione anzi, per molti versi si programma meglio se queste cose non vengono usate servono a rendere più compatto ma anche più incomprensibile il codice G. Mecca - Programmazione Procedurale in Linguaggio C++
Differenze con il C In generale Nel seguito Elementi di Base: Dettagli e Approfondimenti >> Differenze con il C Differenze con il C In generale il C è molto simile al “clean C” che abbiamo approfondito per alcuni aspetti è più spartano e questo lo rende in molti casi più complesso come linguaggio di programmazione Nel seguito l’elenco delle principali differenze G. Mecca - Programmazione Procedurale in Linguaggio C++
Differenze con il C Attenzione Elementi di Base: Dettagli e Approfondimenti >> Differenze con il C Differenze con il C Attenzione imparare a scrivere programmi complessi in C NON è tra gli obiettivi del corso si tratta di un livello secondario le differenze vengono illustrate a scopo di completezza, e per preparare gli studenti che dovessero successivamente programmare in C ad ulteriori approfondimenti G. Mecca - Programmazione Procedurale in Linguaggio C++
Differenze con il C Tipo di ritorno del main Libreria di input/output Elementi di Base: Dettagli e Approfondimenti >> Differenze con il C Differenze con il C Tipo di ritorno del main normalmente int (non void, come ANSI C++) Libreria di input/output #include <stdio.h> Definizione di costanti esiste la parola chiave “const”, ma ha una semantica leggermente diversa normalmente si utilizza la direttiva #define es: #define PIGRECO 3.14 G. Mecca - Programmazione Procedurale in Linguaggio C++
Differenze con il C Istruzioni di lettura e di stampa Elementi di Base: Dettagli e Approfondimenti >> Differenze con il C Differenze con il C Istruzioni di lettura e di stampa sono basate sui flussi standard di ingresso e uscita come in tutti i linguaggi ma ci sono differenze sintattiche Differenza principale non esistono cout e cin (che sono oggetti) istruzione printf per scrivere dati istruzione scanf per leggere dati G. Mecca - Programmazione Procedurale in Linguaggio C++
Istruzione printf Sintassi Stringa formato Esempi Elementi di Base: Dettagli e Approfondimenti >> Differenze con il C Istruzione printf Sintassi printf(<stringa>); printf(<stringaFormato>, argomenti); Stringa formato stringa che descrive la natura degli argomenti successivi Esempi printf(“Immetti il valore \n”); printf(“Il cerchio vale: %d”, cerchio); G. Mecca - Programmazione Procedurale in Linguaggio C++
Istruzione printf Descrittori di formato Attenzione %d: numero intero Elementi di Base: Dettagli e Approfondimenti >> Differenze con il C Istruzione printf Descrittori di formato %d: numero intero %f: numero reale %c: carattere singolo %s: sequenza di caratteri (stringa) Attenzione in C non esiste il tipo stringa le stringhe si rappresentano come array di caratteri G. Mecca - Programmazione Procedurale in Linguaggio C++
Istruzione scanf Sintassi Stringa formato Esempi Nota Elementi di Base: Dettagli e Approfondimenti >> Differenze con il C Istruzione scanf Sintassi scanf(<stringaFormato>, &variabile); Stringa formato analoga a quella della printf Esempi scanf(“%d”, &raggio); Nota è indispensabile la & prima della variabile ATTENZIONE: la mancanza della & è una fonte di errore molto frequente G. Mecca - Programmazione Procedurale in Linguaggio C++
Istruzione scanf Infatti Ma scanf è una procedura Elementi di Base: Dettagli e Approfondimenti >> Differenze con il C Istruzione scanf Infatti scanf è una procedura il secondo argomento deve essere modificato attraverso il corrispond. param. Ma in C esistono solo parametri standard per simulare la semantica dei parametri per riferimento si utilizzano i puntatori G. Mecca - Programmazione Procedurale in Linguaggio C++
Un Semplice Programma in C 27/03/2017 Elementi di Base: Dettagli e Approfondimenti >> Differenze con il C Un Semplice Programma in C // Calcolo della superficie del cerchio #include <stdio.h> #define PIGRECO 3.14 int main() { // Dichiarazioni int raggio; float cerchio, circonf; // Operazioni printf("Immetti la lungh. del raggio\n"); printf("(deve essere un numero intero)\n"); scanf("%d", &raggio); cerchio = raggio * raggio * PIGRECO; circonf = 2 * PIGRECO * raggio; printf("La circonferenza misura: %f \n", circonf); printf("Il cerchio ha superficie: %f \n", cerchio); return 0; } >> G. Mecca - Programmazione Procedurale in Linguaggio C++
Istruzione scanf Attenzione Le stringhe in C Elementi di Base: Dettagli e Approfondimenti >> Differenze con il C Istruzione scanf Attenzione la scanf esegue un input formattato esistono ulteriori procedure per effettuare l’input non formattato nel caso di stringhe Le stringhe in C non esiste il tipo string una stringa è un array di caratteri terminato in maniera particolare (con un carattere ‘\0’) G. Mecca - Programmazione Procedurale in Linguaggio C++
Esempio NOTA: scanf e gets aggiungono automaticamente Elementi di Base: Dettagli e Approfondimenti >> Differenze con il C Esempio NOTA: scanf e gets aggiungono automaticamente il carattere ‘\0’ al termine della stringa letta #include <stdio.h> int main() { char targa[8]; char modello[20]; printf("Immetti la targa : "); scanf("%s", &targa); // input formattato getchar(); // equivalente della ignore printf("Immetti il modello : "); gets(modello); // input non formattato printf("Dati dell'automobile : \n"); printf("Targa : %s\n", targa); printf("Modello : %s\n", modello); return 0; } G. Mecca - Programmazione Procedurale in Linguaggio C++
Istruzione scanf Inoltre Elementi di Base: Dettagli e Approfondimenti >> Differenze con il C Istruzione scanf Inoltre non è possibile effettuare il confronto tra stringhe utilizzando == è necessario utilizzare la funzione strcmp strcmp(s1, s2) ritorna 0 se le due stringhe sono uguali, altrimenti un valore diverso da 0 fa parte (come tutte le principali funzioni sulle stringhe) della libreria string.h G. Mecca - Programmazione Procedurale in Linguaggio C++
Esempio #include <stdio.h> #include <string.h> Elementi di Base: Dettagli e Approfondimenti >> Differenze con il C Esempio #include <stdio.h> #include <string.h> int main() { char targa[8]; printf("Immetti la targa : "); scanf("%s", &targa); // input formattato if (strcmp(targa, "ab762de") == 0) { printf("Auto corretta\n"); } return 0; G. Mecca - Programmazione Procedurale in Linguaggio C++
Riassumendo Ricapitolazione ANSI C++ Approfondimenti sui Tipi di Dato Elementi di Base: Dettagli e Approfondimenti >> Sommario Riassumendo Ricapitolazione ANSI C++ Compilatori in Ambiente Linux Approfondimenti sui Tipi di Dato Altri Tipi di Dato Operatore di Cast Espressioni Differenze con il C G. Mecca - Programmazione Procedurale in Linguaggio C++
Termini della Licenza Termini della Licenza This work is licensed under the Creative Commons Attribution-ShareAlike License. To view a copy of this license, visit http://creativecommons.org/licenses/by-sa/1.0/ or send a letter to Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA. Questo lavoro viene concesso in uso secondo i termini della licenza “Attribution-ShareAlike” di Creative Commons. Per ottenere una copia della licenza, è possibile visitare http://creativecommons.org/licenses/by-sa/1.0/ oppure inviare una lettera all’indirizzo Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA. G. Mecca - Programmazione Procedurale in Linguaggio C++