1 / 52

Algoritmi e basi del C

Algoritmi e basi del C. Marco D. Santambrogio – marco.santambrogio@polimi.it Ver. aggiornata al 8 Marzo 2013. Come non ricordare…. … che giornata sia oggi 8 marzo 1459: nasce Bernardino Corio Storico italiano 8 marzo 1728: muore Giovanni Mario Crescimbeni

muniya
Download Presentation

Algoritmi e basi del C

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Algoritmi e basi del C Marco D. Santambrogio – marco.santambrogio@polimi.it Ver. aggiornata al 8 Marzo 2013

  2. Come non ricordare… • … che giornata sia oggi • 8 marzo 1459: nasce Bernardino Corio • Storico italiano • 8 marzo 1728: muore Giovanni Mario Crescimbeni • Poeta e critico letterario italiano • 8 marzo 1882: Arturo Graf scrive una lettera a Mario Rapisardi • Entrambi scrittori e poeti italiani • Ma è anche: • La festa del maccarone al pomodoro http://rinabrundu.com/2012/03/07/ricorrenze-8-marzo-festa-del-maccarone-al-pomodoro/

  3. Bazinga!!!

  4. Info di servizio • Laboratori: divisione in gruppi • Non stiamo andando benissimo • 9 gruppi il lunedi’ • 3 gruppo il giovedi’ • Feedback sulle lezioni • Se date una valutazione ≤ 3 sul quanto la spiegazione sia risultata chiara, vi chiederei cortesemente di spiegare nelle note a cosa e’ dovuto questo dato • La “Survey” e’ sempre aperta, se volete potete continuare a inserire i vostri dati • No, il “gufo” non diventa milanista… • e’ milanista!!

  5. WAT? WAT • Spiegazioni: 7 su 61 chiedono di andare più piano • Una persona ha trovato utili gli esempi in C e 25 “entrambi” • In 19 su 61 avreste voluto vedere più esempi in C!! WAT

  6. Ripasso di ieri • Concetto ambiguo di informazione • Informazione = dati + istruzioni • Informazione = dati con significato • Esempio: il numero 3 è un semplice dato, diventa entità di informazione quando lo si contestualizza • Programmabilità del calcolatore • Macchina di von Neumann • Comunicazione non ambigua • Calcolo come calcolo di funzioni

  7. Obiettivi • Algoritmi • Pseudocodice • Diagramma di flusso • Una prima introduzione al C • Un primo programma • Tipi di dato • Strutture di controllo

  8. Algoritmi

  9. Algortimo e Programma • Algoritmo • Descrizione della soluzione di problema scritta in modo da poter essere eseguita da un esecutore (eventualmente diverso dall’autore dell’algoritmo) • Sequenza di istruzioni che operano su dati. • Programma • Algoritmoscritto in modo da poter essere eseguito da un calcolatore (esecutore automatico) 9

  10. Acquisto DVD Novita’ Novita’ Azione Dove lo cerco? In quale settore? … Indicatori di settore Trovato il settore, come trovo il mio DVD? Ordine alfabetico

  11. Alogoritmo per l’acquisto DVD • Acquisisci il nome del settore (s) del DVD (d) • Vai al settore (s) • Cerca (t) • Prendi il DVD (d) • Acquisisci e Cerca sono anche loro algoritmi

  12. CERCA: contesto e problema • Contesto • Sei nel settore (s) corretto • Nel settore sono presenti diversi DVD • Il settore puo’ essere visto come un insieme di DVD: s={d0, d1, …, dn} • Problema • Devo trovare il DVD (dt) tra tutti i DVD presenti nel settore (s) • Aiuto: il settore e’ ordinato • I DVD sono ordinati alfabeticamente

  13. Algoritmo CERCA • Noti • s={d0, d1, …, dn}, ord. alfabeticamente • DVD cercato = dt • Ci sono DVD? • Allora • Leggo il titolo del primo DVD in s • Se il titolo e’ il titolo cercato Allora concludo la ricerca con successo Altrimenti passo al DVD successivo • Altrimenti concludo la ricerca con esito negativo

  14. CERCA: osservazioni • Cosa succede se il settore e’ vuoto? • Come funziona la mia ricerca? • Se in s vi sono 10000 DVD e io cerco Zorro? • Scenario ancora peggiore • Voglio cercare il numero del mio professore di IEIM (Santambrogio) nella rubrica telefonica di Milano.. • Esistono diversi modi per risolvere un problema

  15. CERCA… migliorata • Noti • s={d0, d1, …, dn}, ord. alfabeticamente • DVD cercato = dt • Ci sono DVD? • Allora • Leggo il titolo del DVD (dx) nel mezzo di s • Se il titolo di dx e’ il titolo cercato • Allora concludo la ricerca con successo • Altrimenti se dx < dt • allora ricomincio da 1 considerando la meta’ superiore di s • Altrimenti ricomincio da 1 considerando la meta’ inferiore di s • Altrimenti concludo la ricerca con esito negativo

  16. Graficamente: Noti dt s={d0, d1, …, d11} d7 d11 d3 d5 d6 d9 d10 d1 d2 d4 d8 d0

  17. Leggo dx e lo confronto con dt d6 dt = ? dx=d6 NO d6 dt <

  18. Ricomincio sulla meta’ superiore d7 d11 d6 d9 d10 d8 dt dx=d9

  19. Leggo dx e lo confronto con dt d9 dt = ? dx=d9 d9 SI Termino con successo la mia ricerca comprando d9

  20. Come si specifica un algoritmo? • Utilizzando dello pseudocodice • Utilizzando dei diagrammi di flusso (aka schemi a blocchi) Se A > B allora B = A altrimenti A = B Assegnamento Fine Inizio Test Scrivi Leggi

  21. Massimo Comune Divisore • Definizione • Dicesi Massimo Comune Divisore (M.C.D.) il piu’ grande tra i divisori comuni a due o piu’ numeri • Esempi • Dati A=12, B=15 • Divisori comuni: 1, 3 - MCD=3 • Dati A=10, B=30 e C=20 • Divisori comuni: 1, 2, 5, 10 - MCD=10

  22. MCD: pseudocodice • Leggi A e B • min= il minimo tra A e B • tmp = 1 • MCD = 1 • Finche’ tmp < min • tmp = tmp + 1 • Se tmp divide A e B • Allora MCD = tmp • Stampa MCD

  23. MCD: diagramma di flusso min=minimo{A,B} tmp=1 MCD=1 tmp<min? no si tmp = tmp + 1 Inizio Fine no tmp divide A e B Stampa MCD Leggi A e B si MCD = tmp

  24. Benvenuti nel fantastico mondo del C

  25. Il primo programma: ciao mondo

  26. 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.

  27. 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

  28. 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

  29. Ciao Mondo: printf

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

  31. 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

  32. Struttura di un programma C parte dichiarativa globale parte dichiarativa locale parte esecutiva 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; } Ogni programma C deve contenere un modulo int main() {...}

  33. 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 leistruzioni 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, ...)

  34. 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

  35. Variabili e indirizzi • Supponiamo che la dichiarazione riservi la zona di memoria all’indirizzo 1 • var indica il contenuto della cella di memoria • &var indica l’indirizzo della cella di memoria 3 int var; 2 &var var 1 0

  36. 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 =

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

  38. Inserimento dati • Problema • 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”

  39. Pausa… 15’

  40. Inserimento dati • Problema • 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”

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

  42. Un primo errore

  43. Un secondo errore

  44. Un terzo errore

  45. Soluzione corretta L’importanza dei tipi di dato

  46. Tipi di dato 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

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

  48. Tipo carattere e codifica ASCII

  49. Ricordate il “-32”

  50. Un esempio di calcolo

More Related