Algoritmi e basi del C Struttura di un programma

Slides:



Advertisements
Presentazioni simili
Introduzione al linguaggio C++
Advertisements

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Lab 1: Marzo 2013 Marco D. Santambrogio – Gianluca Durelli -
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Algoritmi e basi del C Marco D. Santambrogio – Ver. aggiornata al 3 Ottobre 2013.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Lab 1 – Info B Marco D. Santambrogio – Riccardo Cattaneo –
Informatica 2. Concetti fondamentali di programmazione Programmare vuol dire scrivere un algoritmo in un linguaggio che faccia funzionare un calcolatore.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Lab 1: Marzo 2014 Marco D. Santambrogio – Gianluca Durelli -
Algoritmi e basi del C Struttura di un programma
Algoritmi e basi del C Struttura di un programma
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Codifica binaria dell’informazione Marco D. Santambrogio – Ver. aggiornata al 11.
Codifica binaria dell’informazione
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Lab 1 – Info B Marco D. Santambrogio – Matteo Ferroni –
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Codifica binaria dell’informazione Marco D. Santambrogio – Ver. aggiornata al 11.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Codifica binaria dell’informazione Marco D. Santambrogio – Ver. aggiornata al 24.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Algoritmi e basi del C Marco D. Santambrogio – Ver. aggiornata al 24 Agosto 2015.
Script bash I file di comandi in Linux. BASH  Bourne Again Shell  Modalità interattiva o batch (file di comandi)  Ambiente di programmazione “completo”
Un semplice programma C /* Programma che stampa un saluto */ #include main() { printf(“Hello World!\n”); }
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Lab 3 – Info B Marco D. Santambrogio – Matteo Ferroni –
Process synchronization
Process synchronization
© 2007 SEI-Società Editrice Internazionale, Apogeo
Introduzione al linguaggio C
Process synchronization
7. Strutture di controllo Ing. Simona Colucci
Script Marco D. Santambrogio –
IL CONCETTO DI ALGORITMO
Array n-dimensionali e tipi di dati strutturati
Array n-dimensionali e tipi di dati strutturati
Commenti Ogni riga che comincia con il simbolo # non viene letta dall’interprete per cui rappresenta un modo per commentare il listato # Questo è un esempio.
Process synchronization
L’AMBIENTE CODE BLOCKS E L’IO
TIPI PRIMITIVI TIPI STRUTTURATI
JAVA usa una rappresentazione in VIRGOLA MOBILE
Process synchronization
PROGRAMMAZIONE BASH – ISTRUZIONE IF
Process synchronization
Algebra di Boole ed elementi di logica
Informatica A.A. 2016/17 Prof. Italo Epicoco
Recap su: array e puntatori
Lezione 9 – A.A. 2016/2017 Prof. Giovanni Acampora
Primo Programma in C.
realizzato dal prof.Conti Riccardo
Programmare.
Linguaggio C++ Selezione.
© 2007 SEI-Società Editrice Internazionale, Apogeo
Strutture di Controllo
Secondo Programma in C.
Process synchronization
© 2007 SEI-Società Editrice Internazionale, Apogeo
Programmazione e Laboratorio di Programmazione
Process synchronization
Process synchronization
Algoritmi e strutture dati APPUNTI SUL LINGUAGGIO C
Algebra di Boole ed elementi di logica
Process synchronization
Sistemi Digitali.
La struttura dei primi programma in C
APPUNTI SUL LINGUAGGIO C Esercizi su File e Alberi Binari
Process synchronization
Processi decisionali e funzioni di controllo
Programmazione e Laboratorio di Programmazione
Process synchronization
Array n-dimensionali e tipi di dati strutturati
Fondamenti di Informatica
Process synchronization
Programmazione e Laboratorio di Programmazione
Array e Stringhe Linguaggio C.
Process synchronization
Process synchronization
Programmazione e Laboratorio di Programmazione
Programmazione Procedurale
Transcript della presentazione:

Algoritmi e basi del C Struttura di un programma Process synchronization Operating System Algoritmi e basi del C Struttura di un programma Marco D. Santambrogio – marco.santambrogio@polimi.it Ver. aggiornata al 13 Marzo 2016 © 2005 William Fornaciari

Sulla semantica… Che giorno è oggi? 14 Marzo o anche… 14.3 3.14

Piattaforme utilizzate… Indirizzo base: base = home.deib.polimi.it/santambr/dida/ieim/2016 Strumenti usanti per sviluppare codice/esercitarsi base/tools.htm

Scriviamo il programma

Scriviamo il programma E come???

Scriviamo il programma Virtual Desktop https://virtualdesktop.polimi.it

Per macchine PoliMI https://virtualdesktop.polimi.it

Scriviamo il programma Virtual Desktop https://virtualdesktop.polimi.it Lanciando CodeBlock http://tinyurl.com/1st-codeblock

Scriviamo il programma Virtual Desktop https://virtualdesktop.polimi.it Lanciando CodeBlock http://tinyurl.com/1st-codeblock Usando la VM (e.g. Didattica) e quindi lanciando Geany

Desktop “VM”

Come eseguire Geany

Come eseguire Geany “Cliccando” l’icona

Come eseguire Geany Dal menù

Ecco Geany

Scriviamo il programma Virtual Desktop https://virtualdesktop.polimi.it Lanciando CodeBlock http://tinyurl.com/1st-codeblock Usando la VM (e.g. Didattica) e quindi lanciando Geany Usando la VM (e.g. Didattica) e aprendo un editor di testo

Come si lanciano…

Ambiente – “Linux” o VM Editor: gedit Shell: bash

Il primo programma: ciao mondo

HowTo: compilare ed eseguire Per poter eseguire il nostro programma, bisogna tradurlo in codice macchina Questa operazione viene eseguita dal compilatore (e.g., gcc) Scritto e salvato il file sorgente (e.g., sul Desktop, nel file primo.c), Dobbiamo compilare ed eseguire un programma utilizzando una shell (e.g., bash) $ cd Desktop $ gcc primo.c –o exe $ ./exe

Benvenuti nel fantastico mondo del C

Il primo programma: ciao mondo

Ciao Mondo: stdio.h Come prima cosa, dobbiamo includere le librerie necessarie al funzionamento del nostro programma. La libreria stdio.h Standard Input Output Permette di utilizzare I comandi necessari per richiedere dati o visualizzare dei messaggi.

Ciao Mondo: main Tutti i programmi in C contengono un elemento principale: Il main main contiene le istruzioni che verranno eseguite all’avvio del nostro programma

Ciao Mondo: main La sequenza di istruzioni che caratterizzano il main sono racchiuse tra parentesi graffe Tale blocco di istruzioni e’ anche noto come corpo Ogni istruzione deve essere seguita da un punto e virgola

Ciao Mondo: printf

Ciao Mondo: printf Stampa a video il mesaggio “Ciao Mondo!” printf e’ contenuta in stdio.h Il messaggio da stampare e’ contenuto tra “”

Ciao Mondo: printf return e' un comando che ci permette di comunicare con il sistema ospite In questo caso viene utilizzato per comunicare lo stato di terminazione del programma 0 indica una terminazione corretta del nostro programma

Struttura di un programma C

Struttura di un programma C Parte dichiarativa: contiene le dichiarazioni degli elementi del programma Dati, ed eventualmente funzioni (ma solo nella parte globale)

Struttura di un programma C parte dichiarativa globale inclusione librerie / per poter invocare funzioni utili (i/o, ...) / dichiarazione di variabili globali e funzioni

Struttura di un programma C parte dichiarativa globale inclusione librerie / per poter invocare funzioni utili (i/o, ...) / dichiarazione di variabili globali e funzioni int main ( ) { } Ogni programma C deve contenere un modulo int main() {...}

Struttura di un programma C parte dichiarativa globale inclusione librerie / per poter invocare funzioni utili (i/o, ...) / dichiarazione di variabili globali e funzioni int main ( ) { dichiarazione di variabili locali } parte dichiarativa locale Ogni programma C deve contenere un modulo int main() {...}

Struttura di un programma C Parte dichiarativa: contiene le dichiarazioni degli elementi del programma Dati, ed eventualmente funzioni (ma solo nella parte globale) Parte esecutiva: contiene le istruzioni da eseguire, che ricadono nelle categorie: Istruzioni di assegnamento () Strutture di controllo: Condizionali (if-then-else e switch) Iterative, o cicli (while, do e for) Istruzioni di Input/Output (printf, scanf, ...)

Struttura di un programma C parte dichiarativa globale inclusione librerie / per poter invocare funzioni utili (i/o, ...) / dichiarazione di variabili globali e funzioni int main ( ) { dichiarazione di variabili locali istruzione 1; / tutti i tipi di operazioni, e cioè: / istruzione 2; / istr. di assegnamento / istruzione 3; / istr. di input / output / istruzione 4; / istr. di controllo (condizionali, cicli) / ... istruzione N; } parte dichiarativa locale parte esecutiva Ogni programma C deve contenere un modulo int main() {...}

Istruzioni semplici e composte Sequenze di istruzioni semplici Ogni istruzione semplice termina con ; ; è detto il “terminatore” dell’istruzione Si possono raggruppare più istruzioni in sequenza tra { e } a costituire un blocco Il blocco costituisce una “super-istruzione” Non è necessario il ; dopo }, in quanto il blocco è già una istruzione e non necessita del terminatore per diventarla

Mostra caratteri Problema Si scriva un programma che richieda l’inserimento di un carattere e lo mostri a video

Mostra caratteri Problema Sotto-problema Si scriva un programma che richieda l’inserimento di un carattere e lo mostri a video Sotto-problema Dove salvo il carattere???

Variabili e assegnamenti Le variabili non sono altro che dei contenitori (aree di memoria) identificati da un nome univoco. Le variabili vengono definite da un tipo e da un nome.

Mostra caratteri Problema Sotto-problema Si scriva un programma che richieda l’inserimento di un carattere e lo mostri a video Sotto-problema Dove salvo il carattere??? Come inserisco il carattere???

Come interagiamo con “l’esterno”? Output printf viene utiizzata per fornire un output del programma a video

Come interagiamo con “l’esterno”? Output printf viene utiizzata per fornire un output del programma a video input scanf viene utilizzato per fornire degli input, e.g. da tastiera, al nostro programma

Mostra caratteri Problema Si scriva un programma che richieda l’inserimento di un carattere e lo mostri a video

Mostra caratteri Problema Si scriva un programma che richieda l’inserimento di un carattere e lo mostri a video

Mostra caratteri Problema Si scriva un programma che richieda l’inserimento di un carattere e lo mostri a video

&… di cosa si tratta Variabili: non sono altro che dei contenitori (aree di memoria) identificati da un nome univoco

&… di cosa si tratta Variabili: non sono altro che dei contenitori (aree di memoria) identificati da un nome univoco Dato il nome di una variabile, &nome, restituisce la sua posizione in memoria

Zoom sulle variabili e loro valore Problema Come assegno un valore ad un variabile???

Esecuzione degli assegnamenti valutazione dell’espressione che compare a destra del simbolo = il valore delle variabili che vi compaiono si trova memorizzato nelle celle corrispondenti, e da lì è letto memorizzazione del risultato dell'espressione nella variabile a sinistra del simbolo =

Esempi di assegnamento x = 23; w = 'a'; y = z; alfa = x + y; r3 = ( alfa * 43 – xgg ) * ( delta – 32 * j ); x = x + 1; Abbreviazioni (operatori di assegnamento): a = a + 7; a = a * 5; a = a + 1; a = a - 1; a += 7; a *= 5; ++a; --a; Istruzioni della forma variabile = variabile operatore espressione; si possono scrivere come: variabile operatore = espressione;

Aritmetica (1/2) Operatori aritmetici in C: * per la moltiplicazione e / per la divisione La divisione tra interi elimina il resto (quoziente): 13 / 5 è uguale a 2 L’operatore modulo calcola il resto della divisione: 13 % 5 è uguale a 3 Precedenza degli operatori: Come in aritmetica, moltiplicazione e divisione hanno priorità su addizione e sottrazione si usano le parentesi quando c’è ambiguità Per esempio: la media aritmetica di a, b, c: a + b + c / 3 NO !!!! (a + b + c ) / 3 SI

Aritmetica (2/2) + f+7 f + 7 - p-c p – c * bm b * m / x/y x / y % Operazione Operatore C Espressione aritmetica Espressione C Addizione + f+7 f + 7 Sottrazione - p-c p – c Moltiplicazione * bm b * m Divisione / x/y x / y Modulo % r mod s r % s Operatori C Operazioni Precedenza ( ) Parentesi Valutate per prime. Se ci sono degli annidamenti, si valuta prima la coppia più interna. Se ci sono più coppie allo stesso livello, si valuta da sinistra a destra. * , / , % Moltiplicazione, Divisione, Modulo Valutate per seconde. Se ce ne sono diverse, si valutano da sinistra a destra. + , – Addizione, Sottrazione Valutate per ultime. Se ce ne sono diverse, si valutano da sinistra a destra.

Vero e falso in C In C non esiste un tipo di dato specifico per rappresentare i concetti vero e falso Una condizione assume un valore intero pari a 0 se la condizione è falsa 1 se la condizione è vera In generale, ogni valore diverso da zero è considerato vero ( 3 ) VERO ( 1 ) VERO ( a – a ) FALSO

Problema Si scriva un programma in C che, dato un numero, dica se questo è positivo o negativo

Soluzione Si inserisca N N è maggiore di 0? Vero: N è positivo Falso: N non è positivo

In C: positivo int main() { int n; printf (“Inserisci un numero\n"); scanf ("%d", &n ); if ( n > 0 ) printf ("Un numero positivo ! \n"); else printf ("Un numero negativo o nullo\n"); printf ("Fine del programma\n"); return 0; } condizione

Inserimento dati Problema Richiedi all’utente la sua altezza in centrimentri e mostrala a video in metri

Inserimento dati Problema Pseudocodice Richiedi all’utente la sua altezza in centrimentri e mostrala a video in metri Pseudocodice Scrivi “quanto sei alto?” Leggi altezzacm Altezzam = alteccacm/100 Scrivi “sei alto: altezzam”

Pseudocodice vs Codice C Scrivi “quanto sei alto?” Leggi altezzacm Altezzam = alteccacm/100 Scrivi “sei alto: altezzam”

Perché %d!

Perché %d! Tra “” ci si aspetta una sequenza di caratteri

Perché %d! Tra “” ci si aspetta una sequenza di caratteri Provate ad inserire -1347

Perché %d! Tra “” ci si aspetta una sequenza di caratteri Provate ad inserire -1347 Si sino premuti 6 caratteri: -, 1, 3, 4, 7, enter

Perché %d! Tra “” ci si aspetta una sequenza di caratteri Provate ad inserire -1347 Si sino premuti 6 caratteri: -, 1, 3, 4, 7, enter Abbiamo quindi inserito una sequenza di caratteri!

Perché %d! Tra “” ci si aspetta una sequenza di caratteri Provate ad inserire -1347 Si sino premuti 6 caratteri: -, 1, 3, 4, 7, enter Abbiamo quindi inserito una sequenza di caratteri! %d dice al calcolatore di interpretare questa sequenza come un intero

Torniamo all’esempio… Pseudocodice Scrivi “quanto sei alto?” Leggi altezzacm Altezzam = alteccacm/100 Scrivi “sei alto: altezzam”

Un primo errore

Un secondo errore

Un terzo errore

Soluzione corretta L’importanza dei tipi di dato

Tipi di dato “classici” in C In C esistono diversi tipi di dato built-in, tra cui int: numeri interi float: numeri con virgola (singola precisione) double: numeri con virgola (doppia precisione) char: caratteri (sono interi che possono variare tra 0-255) Inoltre il C fornisce anche la possibilità di definire dei nuovi tipi di dato

Tipo carattere e codifica ASCII

Tipo carattere e codifica ASCII

In realtà… Tutto è “numeri”, il calcolatore ragione su questi dati!

In realtà… Tutto è “numeri”, il calcolatore ragione su questi dati! I numeri sono Interi (con segno, o senza) In virgola mobile

In realtà… Tutto è “numeri”, il calcolatore ragione su questi dati! I numeri sono Interi (con segno, o senza) In virgola mobile Ma quindi… come rappresento un dato? quanto è grosso?

Chi ha “inventato” il bit? Codifica binaria Chi ha “inventato” il bit?

Chi ha “inventato” il bit? Codifica binaria Chi ha “inventato” il bit? Claude Shannon nel 1948 nel paper: “A Mathematical Theory of Communication”

Codifica binaria Alfabeto binario: usiamo dispositivi con solo due stati Problema: assegnare un codice univoco a tutti gli oggetti compresi in un insieme predefinito (e.g. studenti) Quanti oggetti posso codificare con k bit: 1 bit  2 stati (0, 1)  2 oggetti (e.g. Vero/Falso) 2 bit  4 stati (00, 01, 10, 11)  4 oggetti 3 bit  8 stati (000, 001, …, 111)  8 oggetti … k bit  2k stati  2k oggetti Quanti bit mi servono per codificare N oggetti: N ≤ 2k  k ≥ log2N  k = log2N (intero superiore) Attenzione: ipotesi implicita che i codici abbiano tutti la stessa lunghezza

Esempio di codifica binaria DiP - Sistemi Informativi Esempio di codifica binaria 4/23/2018 Problema: assegnare un codice binario univoco a tutti i giorni della settimana Giorni della settimana: N = 7  k ≥ log27  k = 3 Con 3 bit possiamo ottenere 8 diverse configurazioni: Ne servono 7, quali utilizziamo? Quale configurazione associamo a quale giorno? Attenzione: ipotesi che i codici abbiano tutti la stessa lunghezza La formalizzazione dell'informazione

I giorni della settimana in binario (1) DiP - Sistemi Informativi I giorni della settimana in binario (1) 4/23/2018 000 00 Lunedì Lunedì Lunedì Martedì 001 Lunedì Martedì Martedì Giovedì 010 Domenica Mercoledì Giovedì 01 Mercoledì Sabato Martedì Mercoledì 011 Giovedì 100 Venerdì Sabato Venerdì Sabato 10 Mercoledì Domenica Venerdì 101 1 Sabato Venerdì Giovedì 110 Domenica Domenica 11 111 1 bit 2 “gruppi” 2 bit 4 “gruppi” 3 bit 8 “gruppi” La formalizzazione dell'informazione

I giorni della settimana in binario (2) DiP - Sistemi Informativi I giorni della settimana in binario (2) 4/23/2018 000 00 Lunedì Giovedì 001 Giovedì Martedì Giovedì 010 Domenica Sabato 01 Sabato Martedì Sabato Martedì 011 Sabato Martedì 100 Venerdì Domenica Domenica Domenica 10 Mercoledì Mercoledì 101 1 Mercoledì Mercoledì Venerdì Giovedì 110 Venerdì Venerdì 11 Lunedì Lunedì 111 Lunedì 1 bit 2 “gruppi” 2 bit 4 “gruppi” 3 bit 8 “gruppi” La formalizzazione dell'informazione

E quindi… Tutto è “numeri”, il calcolatore ragione su questi dati! I numeri sono Interi con segno int8_t, int16_t, int32_t, int64_t Interi senza segno uint8_t, uint16_t, uint32_t, uint64_t In virgola mobile float — standard 32-bit floating point double – standard 64-bit floating point

Maiuscolo Scrivere un programma che, letto un carattere minuscolo, lo riporta in maiuscolo

Maiuscolo Scrivere un programma che, letto un carattere minuscolo, lo riporta in maiuscolo Osservazione Proviamo a stampare il valore ASCII di un carattere minuscolo e del suo corrispettivo maiuscolo

Maiuscolo: codice

Maiuscolo: exe

Maiuscolo: exe

Maiuscolo: exe

Dato un carattere minuscolo, dato Il corrispetivo maiuscolo è: dato-32

Maiuscolo: codice

Maiuscolo: con i char

Problemi di fine giornata… Scrivere un programma che, letti due numeri, individua quello maggiore Rappresentare in pseudocodice l’agoritmo che, letti 3 numeri, ne calcola il minimo comune multiplo

Fonti per lo studio + Credits How to C in 2016 https://matt.sh/howto-c Informatica arte e mestiere, S. Ceri, D. Mandrioli, L. Sbattella, McGrawHill Capitolo 3 Introduzione ai sistemi informatici, D. Sciuto, G. Buonanno, L. Mari, 4a Ed, McGrawHill Capitolo 3, 4 The Art & Craft of Computing, S. Ceri, D. Mandrioli, L. Sbattella, Addison-Wesley