Corso Programmazione

Похожие документы
Corso Programmazione

Corso Programmazione

Corso Programmazione

Corso Programmazione

Il linguaggio di programmazione Python

Programmazione C Massimo Callisto De Donato

FONDAMENTI DI INFORMATICA

Informatica 3. LEZIONE 1: Introduzione. Modulo 1: Introduzione al corso Modulo 2: Introduzione ai linguaggi di programmazione

LINGUAGGI DI ALTO LIVELLO. Si basano su una macchina virtuale le cui mosse non sono quelle della macchina hardware

FONDAMENTI DI INFORMATICA

Informatica teorica Lez. n 7 Macchine di Turing. Macchine di Turing. Prof. Giorgio Ausiello Università di Roma La Sapienza

Introduzione. Informatica B. Daniele Loiacono

ELABORAZIONE DELLE INFORMAZIONI (ALGORITMI E LINGUAGGI DI PROGRAMMAZIONE)

CORSO DI PROGRAMMAZIONE E INFORMATICA GENERALE 1

Linguaggi di Programmazione

Unità di apprendimento 6. Dal problema al programma

Linguaggi di programmazione

Corso di Informatica per Biologia

PROBLEMI ALGORITMI E PROGRAMMAZIONE

Appunti del corso di Informatica 1 (IN110 Fondamenti) 3 Modelli di calcolo

Docente: Prof. Marco Patella Tutor: Stefano Pio Zingaro

Docente: Prof. Marco Patella Tutor: Vincenzo Lomonaco

Lez. 5 La Programmazione. Prof. Salvatore CUOMO

Il calcolatore. Architettura di un calcolatore (Hardware)

I Linguaggi di Programmazione

Introduzione alla programmazione strutturata

CONCETTI FONDAMENTALI

Le parole dell informatica: algoritmo e decidibilità

Apprendimento Automatico (Lezione 1)

Introduzione agli Algoritmi

LINGUAGGI DI ALTO LIVELLO

Corso di Fondamenti di Informatica e Laboratorio

Problema: dati i voti di tutti gli studenti di una classe determinare il voto medio della classe.

Introduzione alla programmazione

Altrimenti, il M.C.D. di a e b è anche divisore di r (e.g. a=15,b=6,r=3 che è il M.C.D.)

Programma del corso. Elementi di Programmazione. Introduzione agli algoritmi. Rappresentazione delle Informazioni. Architettura del calcolatore

MODULO 07. La soluzione dei problemi mediante gli algoritmi

Teoria dell Informazione

Linguaggi, Traduttori e le Basi della Programmazione

Programmazione strutturata

Elementi di Informatica

Introduzione alla programmazione. Walter Didimo

Programmazione. Dipartimento di Matematica. Ing. Cristiano Gregnanin. 29 febbraio Corso di laurea in Matematica

Elementi di programmazione

Sistemi di Elaborazione delle Informazioni

Lez. 8 La Programmazione. Prof. Pasquale De Michele (Gruppo 2) e Raffaele Farina (Gruppo 1) 1

CORSO DI FONDAMENTI DI INFORMATICA

Apprendimento Automatico (Intro)

Il concetto di calcolatore e di algoritmo

Fondamenti di Informatica

Problemi, algoritmi, calcolatore

Scrivere il software. Scrivere il software. Interprete. Compilatore e linker. Fondamenti di Informatica

TEORIE E TECNICHE PER LA COMUNICAZIONE DIGITALE

Risolvere un problema significa individuare un procedimento che permetta di arrivare al risultato partendo dai dati Termine algoritmo da:

Транскрипт:

Corso Programmazione 2017-2018 (docente) Fabio Aiolli E-mail: aiolli@math.unipd.it Web: www.math.unipd.it/~aiolli (assistenti laboratorio) M. Dessole, I. Lauriola, L. Righi Dipartimento di Matematica Torre Archimede, Via Trieste 63

Perché siamo qui? Fabio Aiolli PROGRAMMAZIONE 2

Sbocchi professionali di un matematico Didattica Banca assicurazioni e istituti di sondaggi Settore bio-medico Trasporti e logistica Grafica, crittografia e meteorologia Studio di algoritmi di ottimizzazione Data scientist Spin-off Ecc. ecc. Fabio Aiolli PROGRAMMAZIONE 3

Metodo di studio e avvertenze L esperienza è quella cosa meravigliosa che ti permette di riconoscere un errore quando lo commetti di nuovo [Franklin P. Jones] Fabio Aiolli PROGRAMMAZIONE 4

Sul metodo di studio Programmazione, materia piuttosto diversa rispetto ad altre del vostro corso di studio. Metodo matematicologico non sufficiente Apprendimento più simile a quello di una lingua. Bisogna «buttarsi» Frequenza lezioni e laboratori importantissima Evitate di studiare le ultime settimane (non servirebbe) o peggio nei prossimi anni Esperienza pregressa non sempre un plus Approccio diverso dalla scuola superiore Conoscendo altri linguaggi si tende a dare molto per scontato Fabio Aiolli PROGRAMMAZIONE 5

Orario delle lezioni e esercitazioni ~32 ore di lezioni in aula P200 Mercoledi Ore 10:30-11:15 Giovedi,Venerdi Ore 10:30 12:00 ~32 ore di esercitazioni in laboratorio (Paolotti) Martedi, Ore 14:00 17:00 ISCRIVERSI IN LISTA! (maggiori dettagli più tardi) Fabio Aiolli PROGRAMMAZIONE 6

Risorse per il corso A. Downey, J. Elkner, C. Meyers. Pensare da Informatico, Imparare con Python scaricabile liberamente da http://www.python.it/doc/howtothink/howtothink_ita.pdf B. F.Aiolli. Appunti di Programmazione (scientifica) con Python ESCULAPIO (acquistabile in Amazon, Libreria Progetto, ecc.) C. Altri testi saranno eventualmente consigliati nel corso.. Altro materiale sarà disponibile sul sito web del corso: http://www.math.unipd.it/~aiolli/corsi/1718/prgxmat/prg.html Il GOOGLE GROUP del corso: https://groups.google.com/forum/#!forum/prxmat18 7

Il GOOGLE GROUP del corso: http://groups.google.it/group/prxmat18pd ISTRUZIONI x l iscrizione Nickname: <Nome> <Cognome> (separato da spazio) (per esempio, Fabio Aiolli, Michele Donini, ecc.) Inserire indirizzo di posta elettronica 8

Esercizi a Punti (OPZIONALE) Prima di tutto, bisogna iscriversi usando il documento condiviso (istruzioni sul gruppo!!!) REGOLE Ogni settimana: Vengono proposti uno o più esercizi Lo studente può sottomettere una soluzione entro una certa scadenza Un sottoinsieme delle consegne verranno corrette (circa la metà) Valutazione: I progetti che vengono corretti ricevono una valutazione X >= 0 (X dipende dalla difficoltà degli esercizi) I progetti consegnati ma non corretti ricevono Y punti, dove Y è la media dei punti ottenuti dai progetti che sono stati corretti Gli altri studenti ricevono 0 punti! Podio: Le soluzioni di alcuni progetti selezionati verranno pubblicate 9

Esame Scritto Parte Propedeutica Uno o due esercizi semplici, tipicamente sulla sintassi del Python e/o nozioni teoriche di base Parte Obbligatoria Analisi e implementazione di programmi Python Parte Opzionale (vale pochi punti) Analisi e implementazione di algoritmi complessi 10

Contenuti del corso (a spanne) Fondamenti di Programmazione Panoramica sul linguaggio Python Strutture dati ed algoritmi Programmi x il calcolo scientifico e i giochi 11

Due parole su Python http://it.wikipedia.org/wiki/python http://www.python.org/~guido/ Python è un linguaggio di programmazione ad alto livello, orientato agli oggetti Ideato da GUIDO VAN ROSSUM (Matematico/Informatico) all'inizio degli anni novanta. Il nome fu scelto per via della passione di van Rossum per i MONTY PYTHON e per la loro serie televisiva Monty Python s Flying Circus (commedia televisiva britannica di enorme successo dei primi anni settanta) 12

Obiettivi di Python linguaggio semplice, intuitivo e potente quanto i suoi maggiori avversari open source, in modo che ognuno avrebbe potuto partecipare al suo sviluppo un codice facilmente comprensibile, come l'inglese parlato ottimo per i compiti di tutti i giorni, poiché in grado di consentire tempi di sviluppo brevi 13

Noi e Python Adatto alla programmazione scientifica Linguaggio semplice (programmi leggibili e brevi, adatto per la prototipazione) Buon primo linguaggio di programmazione: poche tecnicalità Paradigma OOP, come i linguaggi più avanzati. Stile di programmazione spendibile nel mondo del lavoro 14

Programmazione (scientifica) 15

Iniziamo.. 16

PARTE 1 Definizioni Fondamentali 17

Algoritmo DEFINIZIONE Insieme completo delle regole che permettono la soluzione di un determinato problema DEFINIZIONE OPERATIVA Procedura effettiva che indica le istruzioni (passi) da eseguire per ottenere i risultati voluti a partire dai dati di cui si dispone 18

Algoritmo: Esempi Esempio Culinario: Ricetta x cucinare gli spaghetti Esempio Turistico: Indicazioni per raggiungere un albergo Esempi sui numeri: Insieme di passi per verificare se un numero è dispari, pari, primo, ecc. Altri esempi (piu difficili) : MCD(a,b), mcm(a,b) Per esempio l algoritmo di Euclide per il calcolo del MCD (che può essere usato anche per il calcolo del mcm!) -> mcm(a,b)=(ab)/mcd(a,b) 19

Algoritmo MCD 1) a= a, b= b 2) ordina a e b in modo tale che a > b 3) Finche b rimane diverso da 0 1) t=b 2) b=a mod b 3) a=t 4) MCD(a,b)=a Fabio Aiolli PROGRAMMAZIONE 20

Algoritmo: Caratteristiche Esprimibile con un numero finito di istruzioni Istruzioni eseguibili da un elaboratore Insieme di istruzioni di cardinalità finita Tempo di esecuzione di ogni istruzione finito Elaboratore ha una memoria Calcolo per passi discreti Non esiste limite alla lunghezza dei dati di ingresso Non c e un limite alla memoria disponibile Numero di passi esecuzione eventualmente illimitato (vedere Macchina di Turing it.wikipedia.org/wiki/macchina_di_turing) 21

Macchina di Turing La macchina può agire sopra un nastro che si presenta come una sequenza di caselle nelle quali possono essere registrati simboli di un ben determinato alfabeto finito; essa è dotata di una testina di lettura e scrittura (I/O) con cui è in grado di effettuare operazioni di lettura e scrittura su una casella del nastro Dati iniziali sul nastro La macchina ha uno stato interno Ad ogni passo, dipendentemente dallo stato in cui si trova e dal carattere letto, la macchina Modifica il contenuto della casella Si sposta a destra o sinistra di una posizione Cambia il suo stato interno Si dimostra che essa è equivalente, ossia in grado di effettuare le stesse elaborazioni, a tutti gli altri modelli di calcolo piu complessi!!! Fabio Aiolli PROGRAMMAZIONE 22

Linguaggi LINGUAGGI NON FORMALI (ambigui) Linguaggio Naturale Linguaggio della musica e della pittura Linguaggio del corpo Ecc. LINGUAGGI FORMALI (di programmazione) Linguaggi NON ambigui, regolati da regole grammaticali precise Possono essere classificati in base al loro livello di astrazione 23

Linguaggi di Alto Livello (LAL) ESEMPI FAMOSI Imperativi: PASCAL, FORTRAN,COBOL, C Ad oggetti: CPP, JAVA,Python Appositi software (compilatori) si occupano di tradurre le istruzioni scritte in questi linguaggi (cosiddetto codice sorgente, un file di testo), nell equivalente codice direttamente eseguibile dalla macchina (cosiddetto codice eseguibile, binario) Python e Java sono in realtà interpretati (JVM,PVM)! Compilano in ByteCode (indipendente dalla macchina) 24

Caratteristiche LAL strutturati SEQUENZA Le istruzioni vengono eseguite in sequenza nell ordine in cui compaiono in un blocco di istruzioni SELEZIONE Strutture di controllo decisionali: P.e. Se <espressione> esegui <BloccoIstruzioniV> altrimenti esegui <BloccoIstruzioniF> ITERAZIONE Strutture di controllo iterative: P.e. Fintanto che <espressione> esegui <BloccoIstruzioni> Oppure, Esegui <BloccoIstruzioni> fintanto che <espressione> 25

Complessita degli Algoritmi Complessita Polinomial (P) : Il numero di passi e proporzionale in modo polinomiale alla cardinalita dell input Complessita Non-Deterministic Polinomial (NP) : Sono noti algoritmi che terminano in un numero di passi polinomiale usando un numero indeterminato di macchine in parallelo, oppure utilizzando l algoritmo di Gastone 26

Complessita degli Algoritmi (2) Casi: Ottimo: I dati presentati sono i migliori possibili per l algoritmo Pessimo: I dati presentati sono i piu sfavorevoli per l algoritmo Medio: Comportamento in media al variare dei dati possibili in ingresso Notazione: O(f(n)) : valutazione caso pessimo La quantita di risorse richiesta cresce NON PIU di f(n) Ω(g(n)) : valutazione caso ottimo La quantita di risorse richiesta cresce NON MENO di g(n) θ(h(n)) : casi ottimo e pessimo hanno simili prestazioni La quantita di risorse richiesta cresce COME h(n) 27

Algoritmi di Ricerca Ricerca MIN e MAX Ricerca di un valore in una collezione Ricerca di un valore in una collezione ordinata Ricerca degli zeri di una funzione 28

Algoritmi di Ordinamento Ordinamento degli elementi in una generica collezione Fondere due collezioni ognuna di esse gia ordinata Ordinare senza usare confronti 29

Algoritmi di Ottimizzazione Problema del Commesso Viaggiatore (TSP) Problema dei Cammini Minimi (SP) Problemi IA 30