INTRODUZIONE. ALLA PROGRAMMAZIONEColonna 1. in linguaggio C

Documenti analoghi
C O P Y R I G H T ( C ) W W W. F O N D A M E N T I. I N F O

Programmazione strutturata

ELEMENTI DI INFORMATICA L-B. Ing. Claudia Chiusoli

1 PANORAMICA SUL LINGUAGGIO C

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

C espressioni condizionali

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

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

RELAZIONE DELLA PROVA DI LABORATORIO DI INFORMATICA

ALGORITMI E STRUTTURE DATI

Algoritmi e basi del C Struttura di un programma

Corso di Calcolatori Elettronici Un computer è un dispositivo in grado di eseguire dei calcoli e di prendere delle decisioni logiche.

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

Breve Manuale di Riferimento sulla Sintassi Linguaggi C++ e FORTRAN

Lezione 6 Introduzione al C++ Mauro Piccolo

Fondamenti di Informatica 6. Algoritmi e pseudocodifica

Politecnico di Torino Sede di Alessandria Corso di informatica Programmazione in c: introduzione. e mail: sito: users.iol.

INFORMATICA. Strutture iterative

Complementi. - Ridefinizione di tipo - - Costrutto switch - - Programmazione su più file - - Parametri della funzione main - Funzione system -

Laboratorio di programmazione

Linguaggio C: introduzione

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

Unità Didattica 1 Linguaggio C. Fondamenti. Struttura di un programma.

Il linguaggio C. Notate che...

Esercizi. La funzione swapint() primo tentativo

Linguaggio C Informatica Grafica

Laboratorio di Algoritmi e Strutture Dati Ingegneria e Scienze Informatiche - Cesena A.A

Esercizio 2 (punti 7) Dato il seguente programma C: #include <stdio.h> int swap(int * nome, int length);

Corso di Informatica

Informatica (A-K) 7. Linguaggio C - 1

Programmazione di base

Laboratorio di Informatica Ingegneria Clinica Lezione 7/11/2011. Prof. Raffaele Nicolussi

Il linguaggio Java Istruzioni di Controllo

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

Linguaggio C - le strutture di controllo: sequenza, selezione, iterazione

Gocce di Java. Gocce di Java. Selezione e ripetizione. Pierluigi Crescenzi. Università degli Studi di Firenze

Corso di Informatica B - Sezione D. Esercitazioni Linguaggio C

Istruzioni semplici e strutturate

Fondamenti di Informatica

Programmazione I - Laboratorio

Linguaggio C++ Linguaggi di terza generazione

La sintassi del C APPENDICE H

Corso di Fondamenti di Informatica

Alcuni esercizi. 1. Valutazione in cortocircuito 2. If e if innestati 3. Switch 4. Cicli

#include <iostream> // libreria che gestisce flusso di input e output. using namespace std; // uso di librerie standard del C++

PROGRAMMAZIONE: Le strutture di controllo

Primi passi col linguaggio C

Corso di Informatica 1 Esercitazione n. 4

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

Tipi di dati strutturati e Linguaggio C. Record o strutture Il costruttore struct in C

Laboratorio di Algoritmi e Strutture Dati. Aniello Murano. people.na.infn.it/~murano. Murano Aniello LASD 05/06 Seconda Lezione.

Algoritmi, Strutture Dati e Programmi. UD 2.b: Programmazione in Pascal

7. Strutture di controllo

Istruzioni Condizionali in C

Corso di Fondamenti di Informatica Classi di istruzioni 2

Istruzioni di Ciclo. Unità 4. Domenico Daniele Bloisi

Introduzione a Java. Riferimenti

Istruzioni iterative (o cicliche)

Il linguaggio C Il linguaggio C. Caratteristiche del C. Caratteristiche del C. Linguaggi di Programmazione I. Ferdinando Cicalese

Linguaggio C. strutture di controllo: strutture iterative. Università degli Studi di Brescia. Docente: Massimiliano Giacomin

5. Codifica degli Algoritmi in C

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

$QDOLVLGHOSURJUDPPDTXDGUDWR

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

Introduzione a C# Prof. Francesco Accarino IIS Altiero Spinelli Sesto San Giovanni

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

Esercizi C su array e matrici

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

Introduzione alla programmazione in C

Algoritmi e basi del C

Indice PARTE A. Prefazione Gli Autori Ringraziamenti dell Editore La storia del C. Capitolo 1 Computer 1. Capitolo 2 Sistemi operativi 21 XVII XXIX

L'Allocazione Dinamica della Memoria nel linguaggio C

Qualsiasi programma in C++ segue lo schema:

Fondamenti di Informatica T-1 Modulo 2

Informatica 1. Prova di recupero 21 Settembre 2001

Sommario. Introduzione... xv. Giorno 1 Elementi base del linguaggio C

Programmazione, 5 a lezione

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

Le funzioni, e le istruzioni di input/output

Algoritmi e basi del C

Capitolo 2 Introduzione alla programmazione in C

Le basi del linguaggio Java

ESECUZIONE DI PROGRAMMI C SU MACCHINE REALI. Docente: Giorgio Giacinto AA 2008/2009. formalizzazione degli algoritmi in linguaggio C

while Istruzione while Cicli ed iterazioni Istruzioni di ripetizione in C Comportamento del while

Metodi statici. Dichiarazione e chiamata di metodi statici

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

STRUTTURE DI CONTROLLO DEL C++

Funzioni in C. Funzioni. Strategie di programmazione. Funzioni in C. Come riusare il codice? (2/3) Come riusare il codice? (1/3)

C: panoramica. Violetta Lonati

Programmazione di base

Sommario PREFAZIONE...XI CAPITOLO 1: INTRODUZIONE AI COMPUTER, A INTERNET E AL WEB... 1 CAPITOLO 2: INTRODUZIONE ALLA PROGRAMMAZIONE IN C...

Laboratorio di Algoritmi e Strutture Dati

5 - Istruzioni condizionali

ESECUZIONE DI PROGRAMMI C SU MACCHINE REALI. Docente: Giorgio Giacinto AA 2009/2010

Strategie di programmazione

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

<istruzione> ::= <istruzione-semplice> <istruzione> ::= <istruzione-di-controllo> <istruzione-semplice> ::= <espressione> ;

Realizzare un programma che legga da input tre numeri interi e stampi a video la loro somma e la media.

Programmazione I - Laboratorio

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

Transcript:

12 10 8 INTRODUZIONE 6 4 ALLA PROGRAMMAZIONEColonna 1 Colonna 2 Colonna 3 in linguaggio C 2 0 Riga 1 Riga 2 Riga 3 Riga 4 di Mauro Casula {

Scopi del seminario Essere chiaro ed esauriente; Spiegare nei dettagli i concetti della programmazione in generale; Usare tali concetti per trovare soluzioni nel miglior modo possibile; Vedere esempi pratici di programmazione in C (approfondimenti nel Workshop).

Importanza del linguaggio di programmazione Non esiste un linguaggio PERFETTO per risolvere bene tutti i possibili problemi nel miglior modo Quindi bisogna conoscere più linguaggi e usare quello più adatto alla soluzione trovata Quindi avere chiare le implicanze informatiche (anche di programmazione) del problema affrontato

Importanza del linguaggio di programmazione (II) Ogni linguaggio ha: i suoi pregi e i suoi difetti (compilato/interpretato, ottimizzaz., facilità di sviluppo); una sua sintassi specifica (ma i concetti rimangono); le sue librerie native (più quelle aggiuntive); le sue scorciatoie (liste, dizionari...); il suo fascino.

Prevenire è meglio che curare Prima di iniziare a programmare bisogna: pensare e avere chiaro lo scopo del programma da sviluppare; pensare e avere chiaro il modo in cui si intende risolvere il problema (algoritmo) e fissarlo tramite diagramma a blocchi o pseudo-codice; pensare e scegliere il linguaggio/architettura di sviluppo più adatto alla soluzione trovata coi punti precedenti; i problemi nasceranno sempre anche dopo aver pensato, ma almeno si parte in vantaggio (e di molto anche).

Esempio pratico Nel nostro caso: perché usare il C e non un altro linguaggio?

Un po' di curiosità Sviluppato da Dennis Ritchie e Ken Thompson ai Bell Labs nel 1972 per realizzare il sistema operativo UNIX Si chiama C, poiché è l evoluzione di un linguaggio più grezzo, meno funzionale e obsoleto chiamato B (ispirato al BCPL), inventato precedentemente sempre da Ken Thompson

Tipi di dati void: vuoto int / long / short / unsigned: numero intero float / double: numero decimale (reale) bool: booleano (vero/falso)

Istruzioni e Blocchi di istruzione Espressioni come y=5 o i++ sono istruzioni singole e devono essere seguite da un punto e virgola. In C, il punto e virgola quindi è un terminatore di istruzione; L'esecuzione delle istruzioni avviene sempre in modo sequenziale; Un blocco è una sequenza di istruzioni raggruppate all'interno di parentesi graffe { ; Il blocco, se viene eseguito, viene eseguito tutto e solo nel momento in cui il programma entrerà nel blocco e non in altri momenti.

Esempi di istruzioni e blocchi (I) ISTRUZIONI testo = pippo ; a = 210 ; b = 1 ; printf ( pippo ) ; y++ ; printf ( a+b=%d, a+b); if / else, do / while, switch; BLOCCHI { a++ ; printf ( a+b=%d, a+b); { a = 10 ; b = 7 ; printf ( a+b=%d, a+b); break / continue;

Esempi di istruzioni e blocchi (II) BLOCCHI { delta = b * b 4 * a * c ; if ( delta > 0 ) { printf ( Soluzioni distinte in campo Reale ) ; return 1 ; else if ( delta = 0 ) { printf ( Soluzioni coincidenti in campo Reale ) ; return 0 ; else { printf ( Non ha soluzioni in campo Reale ) ; return -1 ;

Struttura di un programma in C #include <stdio.h> #include void funzione1( void ); void funzione2( void ); int main ( int argc, char *argv[ ] ) {... funzione1();... funzione2();... void funzione1( void ){... void funzione2( void ){...

Problema 1 Sviluppare una semplice routine prima in pseudocodice, e poi in C, che chiuda una valvola quando il liquido di un serbatoio raggiunge un certo livello e la apra ad un altro certo livello. I livelli sono scelti da voi. Il serbatoio contiene max 10 litri. Si hanno a disposizione le seguenti funzioni e variabili definite esternamente: chiudi_valvola() apri_valvola() livello

Soluzione 1 (pseudo-codice) Inizio se: livello = 9.5 litri livello = 9.5? SI allora: chiudi_valvola() altrimenti: non fare nulla NO chiudi_valvola() se: livello = 0.5 litri livello = 0.5? SI allora: apri_valvola() altrimenti: non fare nulla NO apri_valvola() Fine

Soluzione 1 (codice C) void gestisci_valvola(void){ if (livello == 9.5){ chiudi_valvola(); if (livello == 0.5){ apri_valvola();

Problema 2 Sviluppare una semplice routine, in pseudo-codice, e poi in C, che stampi dei messaggi personalizzati al raggiungimento di certi livelli del liquido nel serbatoio dell' esempio precedente. I livelli sono scelti da voi. Il serbatoio contiene max 10 litri. Si hanno a disposizione le seguenti funzioni e variabili definite esternamente: printf( Testo da stampare ) livello

Soluzione 1 (pseudo-codice) Inizio se: livello = 9 litri allora: stampa( Quasi pieno ) livello = 9 NO SI stampa( Quasi pieno ) se: livello = 5 litri allora: stampa( Metà ) livello = 5 NO SI stampa( Metà ) se: livello = 1 litri allora: stampa( Quasi vuoto ) livello = 1 NO SI stampa( Quasi vuoto ) Fine

Soluzione 1a (codice C) void verifica_livello( int livello ) { if (livello == 9){ printf( Quasi pieno ); if (livello == 5){ printf( Metà ); if (livello == 1){ printf( Quasi vuoto );

Soluzione 1b (codice C) void verifica_livello(void){ switch(livello){ case 9: printf( Quasi pieno ) break; case 5: printf( Metà ); break; case 1: printf( Quasi vuoto ); break;

Problema 3 Modificare la precedente routine gestione_valvola(), in pseudo-codice, e poi in C, in maniera che il controllo del livello sia continuativo ed interrompibile. I livelli sono scelti da voi. Il serbatoio contiene max 10 litri. Si hanno a disposizione le seguenti funzioni e variabili definite esternamente: chiudi_valvola() apri_valvola() livello

Soluzione 3 (pseudo-codice) inizio ciclo Inizio ciclo se: livello = 9.5 litri allora: chiudi_valvola() se: livello = 0.5 litri allora: apri_valvola() livello = 9.5 NO livello = 0.5 SI SI chiudi_valvola() apri_valvola() se interrotto NO allora: esci altrimenti: torna a Inizio ciclo NO interrotto? SI Fine

Soluzione 3a (codice C) void verifica_livello(void){ while(!interrotto){ if (livello == 9.5) chiudi_valvola(); if (livello == 0.5) apri_valvola(); //while

Soluzione 3b (codice C) void verifica_livello(void){ bool interrotto = false; char input; do{ if (livello == 9.5){ chiudi_valvola(); if (livello == 0.5){ apri_valvola(); input = getch(); if (input == 'E' input == 'e') interrotto=true; while(!interrotto);

Problema 4 Sviluppare una semplice routine (basandosi anche sulle precedenti) in pseudo-codice, e poi in C, che verifichi lo stato dei 3 serbatoi di vernice da 50 litri ciascuno di un apparecchio per il tracciamento delle strisce delle strade. Si hanno a disposizione le seguenti funzioni e variabili definite esternamente: printf( Testo da stampare ) livello0, livello1, livello2, livello3

Soluzione 4 (pseudo-codice) n_serbatoi = 4 n_serbatoi = 4 cont_serb < 4 NO per ciascuno verifica: SI se: livello = 9 litri allora: stampa( Quasi pieno ) se: livello = 5 litri livello = 9 NO SI stampa( Quasi pieno ) allora: stampa( Metà ) livello = 5 SI stampa( Metà ) se: livello = 1 litri NO allora: stampa( Quasi vuoto ) NO livello = 1 SI stampa( Quasi vuoto ) Fine

Soluzione 4a (codice C) int liv_serbatoio, n_serbatoi = 4; for ( int n_ciclo = 0 ; n_ciclo < n_serbatoi ; n_ciclo++ ) { switch (n_ciclo) { case 0: liv_serbatoio = serbatoio0; break; case 1: liv_serbatoio = serbatoio1; break; case 2: liv_serbatoio = serbatoio2; break; case 3: liv_serbatoio = serbatoio3; break; void verifica_livello ( int livello ) { if (livello == 9){ printf( Quasi pieno ); if (livello == 5){ printf( Metà ); if (livello == 1){ printf( Quasi vuoto ); verifica_livello ( liv_serbatoio ) ;

Soluzione 4b (codice C) int liv_serbatoio [ 4 ] ;... assegna_livello ( liv_serbatoio );... for ( int n_ciclo = 0 ; n_ciclo < n_serbatoi ; n_ciclo++ ) { verifica_livello ( liv_serbatoio [ n_ciclo ] ) ; void verifica_livello ( int livello ) { if (livello == 9){ printf( Quasi pieno ); if (livello == 5){ printf( Metà ); if (livello == 1){ printf( Quasi vuoto );

Bibliografia e approfondimenti Il linguaggio C, B. Kernighan, D. Ritchie, 2 a ed., 2004, Pearson/Prentice-Hall C - Corso completo di programmazione, H. Deitel, P. Deitel, 3 a ed., Apogeo, 2007 http://staff.polito.it/claudio.fornaro/corsoc/02- LinguaggioC.pdf https://www.quora.com/what-is-the-most-obfus cated-c-code-you-have-ever-seen

Contatti su FB: https://www.facebook.com/mauro.casula sito: http://www.bodale.it email personale: bodale@gmail.com email personale GULMh: segretario@gulmh.it

FINE