Laboratorio di Informatica I

Documenti analoghi
Laboratorio di Informatica I

Elementi lessicali. Lezione 4. La parole chiave. Elementi lessicali. Elementi lessicali e espressioni logiche. Linguaggi di Programmazione I

Laboratorio di Informatica I

Dati due punti sul piano calcolare la loro distanza

La sintassi del C APPENDICE H

Dichiarazioni e tipi predefiniti nel linguaggio C

#include <stdio.h> /* l esecuzione comincia dalla funzione main */ int main()

Struttura di un programma C++

Corso di Fondamenti di Informatica Il sistema dei tipi in C++

Linguaggi di programmazione

Unità Didattica 2 Linguaggio C. Espressioni, Operatori e Strutture linguistiche per il controllo del flusso

Introduzione alla programmazione in linguaggio C

Informatica. Stefano Lodi. 16 novembre in linguaggio C

Linguaggio C: Espressioni

Il C nel C++ Struttura di un linguaggio. Elementi lessicali. Spazi. Livello lessicale: Livello sintattico: Livello semantico:

Struttura di un linguaggio

Variabili e Funzioni. Informatica 1 / 19

Programmare in C. Maurizio Palesi Salvatore Serrano. Valori. Operazioni. Un insieme di valori del tipo. Per operare su tali valori Tipi

Introduzione al linguaggio C Primi programmi

Linguaggio C: Espressioni

Laboratorio di Programmazione

PROGRAMMA = ALGORITMO

1

Linguaggio C: Espressioni

Introduzione alla programmazione in C

Linguaggio C. Tipi predefiniti e operatori. Università degli Studi di Brescia. Docente: Massimiliano Giacomin

Sunto della scorsa lezione Il linguaggio C. Un Programma con Errori. Il preprocessore. Linguaggi di Programmazione I.

Qualsiasi programma in C++ segue lo schema:

Un esecutore di un linguaggio simbolico e costituito dalla coppia Compilatore, processore (o Interprete, processore)

Primi programmi in C

I/O da tastiera + Alessandra Giordani Lunedì 2 maggio

Linguaggio C - sezione dichiarativa: costanti e variabili

Elementi di Informatica A. A. 2016/2017

Tipi di dato. Il concetto di tipo di dato viene introdotto per raggiungere due obiettivi:

Lezione 9: Puntatori a funzioni. Tipi enumerativi e orientati ai bit

Laboratorio di programmazione

Struttura dei programmi e Variabili

Introduzione alla programmazione in C(++)

IL LINGUAGGIO JAVA. Introduzione alla sintassi di Java La sintassi formalizza le regole sintattiche per scrivere frasi ben formate

Espressioni ed operatori in C

Lezione 5 e 6. Fabio Scotti ( ) Laboratorio di programmazione per la sicurezza. Valentina Ciriani ( ) Laboratorio di programmazione

Espressioni ed operatori in C

Fondamenti di C++ Input/Output di base

Cast implicito. Il cast è fatto automaticamente quando un tipo più basso viene assegnato ad un tipo più alto. byte short int long float double

Programmazione in Java (I modulo)

Informatica 2 modulo C Massimo Callisto De Donato

Espressioni in Linguaggio C

Flusso logico di un programma

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

IL LINGUAGGIO JAVA. Input, Tipi Elementari e Istruzione Condizionale. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica

Informatica 1 Tipi e dichiarazioni in C++ C++ - Tipi e dichiarazioni 1

Prof. Pagani Corrado INTRODUZIONE AL LINGUAGGIO C

Un esempio per iniziare. Il controllo del programma in C. Altri cenni su printf() Esercizi (printf) printf( 8!=%d, fatt);

Struttura di un. Struttura dei programmi C

Tipi elementari. Stefano Ferrari. Università degli Studi di Milano Programmazione. anno accademico

IL LINGUAGGIO JAVA Input, Tipi Elementari e Istruzione Condizionale

Programmazione C Massimo Callisto De Donato

Introduzione alla programmazione. Alice Pavarani

I cicli. Iterazioni Calcolo della media Istruzioni break e continue

Tipi di dati fondamentali. Tipi di dati fondamentali. Utilità dei tipi di dati nelle dichiarazioni. Il tipo di dati char. Codice ASCII.

$QDOLVLGHOSURJUDPPDTXDGUDWR

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

IL LINGUAGGIO JAVA. Input, Tipi Elementari e Istruzione Condizionale. Primo esempio di un programma Java

Si possono applicare solo a variabili (di tipi interi, floating o puntatori), ma non a espressioni generiche (anche se di questi tipi).

Introduzione al C. Informatica Generale - Introduzione al C Versione 1.0, aa p.1/17

IL LINGUAGGIO C Un elaboratore è un manipolatore di simboli (segni) L'architettura fisica di ogni elaboratore è intrinsecamente capace

Strutture di Controllo Iterative: Istruzione FOR

Lezione 8: Stringhe ed array multidimensionali

Istruzioni iterative (o cicliche)

Laboratorio di informatica Ingegneria meccanica

Parametri passati per indirizzo. Puntatori Vogliamo modificare la parte del codice di bubble che realizza lo scambio dei valori:

PREFAZIONE... IX Lo scopo di questo libro... ix La metodologia di insegnamento... ix Panoramica sul libro... xiii

IL LINGUAGGIO C TIPI DI DATO

Linguaggi di Programmazione

Le basi del linguaggio Java

Laboratorio di Informatica I

Gli Operatori. Linguaggio C. Gli Operatori. Esempi sull uso dell Operatore di Assegnamento. L Operatore di Assegnamento

Espressioni. Espressioni. Valutazione di un espressione. Espressioni semplici

Concetti chiave. Istruzioni Iterative. Strutture di controllo iterative while do-while for Cicli annidati

ELEMENTI DI INFORMATICA L-B. Ing. Claudia Chiusoli

Tipi di dato primitivi

Lezione 6: Array e puntatori

Tipi di dato semplici

Linguaggio C Operatori, Espressioni e Conversioni di tipo

INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica

INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA. Fondamenti di Informatica - Programma

Lezione 6 Introduzione al C++ Mauro Piccolo

ISTRUZIONI ISTRUZIONI SEMPLICI

Capitolo 2 Introduzione alla programmazione in C

Un elaboratore è un manipolatore di simboli (segni) intrinsecamente capace di trattare vari. caratteri char caratteri ASCII unsigned char

Informatica A+B Politecnico di Milano A.A Elenco delle parole chiave definite in ANSI C

Costrutti di Programmazione Strutturata. Informatica 1 / 22

Laboratorio di Informatica I

Informatica AA 2005/06. Programmazione M.A. Alberti. Operatori in Java 1. Operatori in Java. Espressioni aritmetiche. Espressioni booleane

Tipo carattere. Campo di variabilità. Intervallo finito. Tipo. Dimensione (byte) char

Transcript:

Struttura della lezione Lezione 2: Elementi lessicali, casting e while Vittorio Scarano Laboratorio di Informatica I Corso di Laurea in Informatica Università degli Studi di Salerno Soluzione agli esercizi Elementi lessicali e token Costanti Identificatori Operatori operatori di incremento/decremento operatori di assegnamento priorità I tipi di dato: la conversione di tipo Altri idiomi di programmazione: la sentinella ed il ciclo while 2 Esercizi Esercizio numero 1 Scrivere un programma C che (1) chiede in input 10 interi e che ne restituisce il numero di essi che sono > 15 (2) chiede in input un numero di interi N (a richiesta dell utente) e ne trova il massimo (3) chiede in input 10 interi e somma tutti gli interi in posizione pari (4) chiede in input 10 interi e somma tutti gli interi > 0 3 /* Eserc.1: chiede in input 10 interi e * fornisce il numero di essi che sono > 15 #define NUMERO_INTERI 10 int i, appoggio, maggiori_15 = 0; for ( i=0; i< NUMERO_INTERI; i++) if (appoggio > 15) maggiori_15 ++; printf ("Maggiori di 15 sono %d\n", maggiori_15); Costante simbolica facilità modifica Ciclo for stampa intero i+1 condizione senza parentesi 4 Esercizio numero 2 Esercizio numero 3 Input numero interi facilità modifica Il primo intero diventa il massimo! Ciclo for parte da 1! cambio del massimo /* Esercizio 2: chiede in input N interi e ne /* Esercizio 3: chiede in input 10 interi e * restituisce il massimo * somma gli interi in posizione pari #define NUMERO_INTERI 10 int i=0, num_interi, appoggio, massimo; printf ("Quanti interi?"); scanf ("%d", &num_interi); int i, appoggio, somma=0; scanf ("%d", &massimo); for ( i=0; i< NUMERO_INTERI; i++) for ( i=1; i< num_interi; i++) if ( i % 2 == 0) if (appoggio > massimo) massimo = appoggio; printf ("Massimo: %d\n", massimo); 5 6 Costante simbolica Ciclo for se i è divisibile per 2 allora sommo l intero 1

Esercizio numero 4 Sintassi di un linguaggio di programmazione /* Esercizio 4: chiede in input 10 interi e * somma gli interi maggiori di zero #define NUMERO_INTERI 10 int i, appoggio, somma=0; for ( i=0; i< NUMERO_INTERI; i++) if ( appoggio > 0 ) Costante simbolica Ciclo for se appoggio è maggiore di 0 allora sommo l intero 7 Sintassi di un linguaggio insieme di un regole che regolano la composizione di un programma corretto Differenza tra un programma: sintatticamente corretto: obbedisce alle regole sintattiche corretto: risolve tutte le istanze del problema per il quale è stato progettato 8 La compilazione I token del linguaggio C La compilazione è un processo automatico che converte un programma scritto in un linguaggio di programmazione in codice macchina necessità di definire le regole di sintassi del linguaggio (Backus-Naur Form o BNF) Il programma C: sequenza di caratteri Il compilatore raggruppa i caratteri del programma in token token: oggetti del vocabolario di base del linguaggio Sei tipi di token: parole chiave (keywords) identificatori costanti costanti stringa operatori simboli di interpunzione 9 10 Un esempio Un esempio /* File: somma.c * Programma di prova * 11/10/2000 main () int i, j, sum; i = 3; j = 5; sum = i + j; printf ( Somma=%d, sum); I commenti non sono token vengono sostituiti da spazio Direttiva al preprocessore Funzione: identificatore (nome) operatore (parametri) Dichiarazione parola chiave (tipo) identificatore (nome variab.) /* File: somma.c * Programma di prova * 11/10/2000 main () int i, j, sum; i = 3; j = 5; sum = i + j; printf ( Somma=%d, sum); Assegnazione identificatore (variabile) operatore (assegnazione) costante simbolo di interpunzione Chiamata di funzione identificatore (nome funz.) costante stringa identificatore (nome var.) 11 12 2

I token del C: le parole chiave I token del C: identificatori Parole riservate al linguaggio auto do goto signed unsigned break double if sizeof void case else int static volatile char enum long struct while const extern register switch continue float return typedef default for short union Composti da: lettere, cifre e il carattere _ (underscore) Definiscono nomi unici per oggetti in un programma (variabili, funzioni etc.) Devono iniziare per lettera o underscore Lunghezza degli identificatori: in ANSI C: 31 caratteri (almeno) 13 14 Alcuni commenti sugli identificatori I token del C: costanti e costanti stringa È necessario usare identificatori con un significato: Ax2 = fg + (pippo*ghk); totale_lordo = totale + (iva*totale); Rappresentano valori con un tipo Costanti intere: 12-2 0 Costanti virgola mobile: 1.8 212.9 0.0 Costanti carattere: a K ; \n Costanti stringa: Ciao Mondo! E il programma scrisse \ Ciao Mondo!\ A Caratteri ASCII non estesi niente lettere òèùì etc. 15 16 I token del C: interpunzione e operatori Operatori:incremento (++) e decremento (--) Segni di interpunzione: ( ) ;, Operatori: caratteri a cui è associata una operazione Operatori aritmetici: + - * / % Gli operatori separano gli identificatori. Separare operatori con spazi migliora la leggibilità del programma a=k*(9.12+h)/y; a = k * (9.12 + h) / y; Servono a incrementare/decrementare di 1 una variabile. Esempio: num++ var-- Due fasi: Operazione (effettua l incremento/decremento) Valutazione per l uso nella espressione Operatore prefisso: operazione prima della valutazione Operatore postfisso: valutazione prima della operazione --num num-- 17 18 3

Effetti collaterali (side-effects) Priorità ed associatività degli operatori a = 12; b = 15; c = a++ + b; a = 12; b = 15; c = ++a + b; Il valore di a viene prima valutato per la operazione e poi incrementato c vale 27 Il valore di a viene prima incrementato e poi valutato per la operazione c vale 28 Regole per la precedenza nella applicazione A parità di priorità si segue la associatività (che può essere da sinistra o da destra) Operatori Associatività ( ) ++ (postfisso) -- --(postfisso) Da sinistra + - (unari) ++(prefisso) -- --(prefisso) Da destra * / % Da sinistra + - Da sinistra = += -= *= /= %= Da destra 19 20 Operatori di assegnamento Operatori aritmetici di assegnamento Il simbolo = è un operatore variabile = espressione espressione può essere un altro assegnamento var = espr viene valutata con espr Quindi a = 1; b = 3; c = a + b; può essere c = (a = 1) + (b = 3); Assegnazione multipla: a = b = c = 0; Valutato con associatività a destra: a = (b = (c = 0)); Uso comune di assegnazioni e operatori: numero_studenti = numero_studenti + 10; può essere scritto più compattamente come: numero_studenti += 10; Operatori aritmetici e logici (orientati ai bit) += -= *= /= %= >>= <<= &= ^= = = 21 22 Operatori per incremento: differenze Alcuni esempi di espressioni Per incrementare una variabile a si può in maniera equivalente usare: i++; i = i + 1; i += 1; Mentre le seguenti due istruzioni sono diverse: i + 1; non ha alcun effetto su i, è una espressione che viene valutata e basta i++; in questo caso la espressione viene valutata ma il comportamento dell operatore modifica i int a = 1, b = 2, c = 3, d = 4; a * b + c / d (a * b) + (c / d) Risultato: 2 Operatori Operatori Associatività Associatività (()) ++ ++ (postfisso) (postfisso)---(postfisso) Da Da sinistra sinistra + -- ++(prefisso) -- --(prefisso) Da Da destra destra ** // % Da Da sinistra sinistra + -- Da Da sinistra sinistra = += += -= -= *= *= /= /= %= %= Da Da destra destra Operatori * e / con la stessa priorità, associatività da sinistra poi operatore +. Attenzione! Conversione di tipo automatica in intero 23 24 4

Alcuni esempi di espressioni Alcuni esempi di espressioni int a = 1, b = 2, c = 3, d = 4; a * b * c + 1 ( ( a * b) * c) + 1 Operatori Operatori Associatività Associatività (()) ++ ++ (postfisso) (postfisso)---(postfisso) Da Da sinistra sinistra + -- ++(prefisso) -- --(prefisso) Da Da destra destra ** // % Da Da sinistra sinistra + -- Da Da sinistra sinistra = += += -= -= *= *= /= /= %= %= Da Da destra destra Operatori *, associatività da sinistra poi operatore +. Risultato: 7 int a = 1, b = 2, c = 3, d = 4; ++ a - b * c -- (++ a) - (b * (c --)) Operatori Operatori Associatività Associatività (()) ++ ++ (postfisso) (postfisso)---(postfisso) Da Da sinistra sinistra + -- ++(prefisso) -- --(prefisso) Da Da destra destra ** // % Da Da sinistra sinistra + -- Da Da sinistra sinistra = += += -= -= *= *= /= /= %= %= Da Da destra destra Operatore -- postfisso, operatore ++ prefisso, operatore * e - Risultato: -4 e c vale 2 ed a vale 2 Attenzione! L operatore postfisso effettua la operazione dopo la valutazione 25 26 Alcuni esempi di espressioni Conversioni di tipo int a = 1, b = 2, c = 3, d = 4, e =5 ; 30 / -++ e - + 29 % c 30 / (- (++ e)) - (+ 29) % c (30 / (- (++ e))) - ((+ 29) % c) Operatori Operatori Associatività Associatività (()) ++ ++ (postfisso) (postfisso)---(postfisso) Da Da sinistra sinistra + -- ++(prefisso) -- --(prefisso) Da Da destra destra ** // % Da Da sinistra sinistra + -- Da Da sinistra sinistra = += += -= -= *= *= /= /= %= %= Da Da destra destra Operatore ++ prefisso, operatori - e + unario (assoc. da destra) Operatori / e % (assoc. da sinistra) Operatore - Risultato: -7 27 Ogni espressione aritmetica ha: un valore un tipo Ad esempio x+y se x e y sono int, allora anche x+y è int se x è float e y è int, allora x+y è float Regole di conversione aritmetica casting implicito (operato dal compilatore) casting esplicito (richiesto dal programmatore) 28 Casting implicito (operato dal compilatore)) Casting esplicito se uno dei due operandi è long double allora anche l altro viene convertito altrimenti, se uno dei due operandi è double allora anche l altro viene convertito altrimenti, se uno dei due operandi è float allora anche l altro viene convertito altrimenti se uno dei due è unsigned long allora anche l altro viene convertito altrimenti se uno è long e l altro è unsigned si converte a quello di maggiore capacità altrimenti, se uno dei due operandi è long, unsigned o int allora anche l altro viene Si può forzare il compilatore ad utilizzare un tipo diverso per espressioni Esempi: int i; a = (double) i; j = (long) ( A + 10);... x = (float) ( (int) y + 1);... (double) (x = 65); convertito 29 30 5

Alcuni particolarità: Un idioma: il ciclo while Il casting nelle assegnazioni converte se necessario il tipo del rvalue al tipo lvalue int i; float d = 3.14; i = d; /* assegna 3! int i = 3; float d; d = i;/* assegna 3.0 Necessità l idioma ripeti-n-volte permette di effettuare un numero di iterazioni fissato da una costante o una variabile nel programma da un intero scelto dall utente mentre a volte: il numero di iterazioni non è fissato ma dipende da condizioni logiche (vero/falso) l utente può non volere calcolare esplicitamente tale numero di iterazioni 31 32 Un esempio: il calcolo della somma Il ciclo while Supponiamo che si deve calcolare la somma di una lunga lista di interi L utente gradirebbe senza dubbio:: inserire gli interi uno alla volta quando ha finito, segnalare al programma che vuole l output Soluzione: l idioma sentinella ed il ciclo while. Il ciclo while si compone di una condizione logica un corpo Il corpo viene eseguito ripetutamente mentre la condizione risulta vera while ( i > 0 ) condizione logica blocco istruzioni 33 34 Le condizioni logiche Un idioma: la sentinella Risultato di una operazione con operatori relazionali. Ad esempio: while (i > 0) while (i!= 10) while (num == 187) In C, le condizioni logiche vengono espresse da interi: un valore uguale a 0 risulta FALSE qualsiasi valore diverso da 0 risulta TRUE (convenzionalmente fissato a 1) 35 Condizione per l uscita scelta dall utente Il ciclo while deve ciclare all infinito: while (TRUE)... In caso di uscita dal ciclo si usa la istruzione break: if (...) break; 36 6

La somma con la sentinella e while Un errore tipico con il while /* sentinella.c: somma con sentinella #define TRUE 1 int i=0, appoggio, somma=0; Definizione di TRUE come costante > 0 Il ciclo infinito. Uso del contatore con incremento (prefisso!) La sentinella se appoggio è 0 allora esci dal ciclo se continua lo somma while (TRUE) printf("inserire intero n.%d:", ++i); while (appoggio = 1) if ( appoggio == 0 ) break; printf( Digita intero diverso da 1:");... 37 38 /* errore.c: inserisce un numero diverso da 1 e poi fa qualche cosa.. int appoggio=1; Dichiarazione di appoggio L idea: ciclare fino a quando l utente non digita un intero diverso da 1. Il programma invece cicla all infinito! Dove è l errore? Errori tipici: Cosa fa questo programma? Variabili non dichiarate/inizializzate Dimenticare il ; a fine istruzione Non usare l indirizzo di una variabile (il &) nella scanf Confondere assegnazione con test di uguaglianza nei cicli 39 /* errore.c: inserisce un numero diverso da 0 e poi fa qualche cosa.. int appoggio=0; while (appoggio = 0) printf( Digita intero diverso da 0:");... 40 Cosa fa questo programma? Relazione tra ciclo for e while #define TRUE 1 int i=0, appoggio, somma=0; while (TRUE) printf("inserire intero n.%d:", ++i); if ( appoggio = 0 ) break; Il ciclo for: for (inizializzazione ; test ; step) è equivalente al while: inizializzazione; while (test) step; 41 42 7

La somma con la sentinella e for Esercizio 1 /* sentinella2.c: sentinella con il for #define TRUE 1 int i=0, appoggio, somma=0; Cambia solamente il ciclo Sono vuote le condizioni di inizializzazione e lo step Il break funziona anche con il ciclo for Commento: il for non serve solamente per $ a.out for ( ; TRUE ; ) Inserire un intero: 5 * printf("inserire intero n.%d:", ++i); ** *** if ( appoggio == 0 ) break; **** ***** $ 43 44 cicli numerici Scrivere un programma C che prende in input un intero lung e stampa a schermo righe di asterischi di lunghezza crescente da 1 a lung. Esercizio 2 Esercizio 3 Scrivere un programma C che prende in input un intero rig e stampa a schermo rig righe di asterischi (di lunghezza crescente) centrate sul primo: $ a.out Inserire un intero: 5 * *** ***** ******* ********* $ Scrivere un programma C che prende in input due interi b e a e stampa a schermo un quadrato di asterischi con base b ed altezza a: $ a.out Inserire base: 4 Inserire altezza: 3 **** * * **** $ 45 46 8