PROGRAMMAZIONE I · 1. Progetto in C da consegnare su GitHub Classroom üAssegnato a Dicembre üLa...

43
PROGRAMMAZIONE I A.A. 2019/2020

Transcript of PROGRAMMAZIONE I · 1. Progetto in C da consegnare su GitHub Classroom üAssegnato a Dicembre üLa...

Page 1: PROGRAMMAZIONE I · 1. Progetto in C da consegnare su GitHub Classroom üAssegnato a Dicembre üLa scadenza per consegnare ciascun progetto è qualche giorno dopo la prova scritta

PROGRAMMAZIONE I

A.A. 2019/2020

Page 2: PROGRAMMAZIONE I · 1. Progetto in C da consegnare su GitHub Classroom üAssegnato a Dicembre üLa scadenza per consegnare ciascun progetto è qualche giorno dopo la prova scritta

INFO

Programmazione I con Laboratorio: 73 ore (9 CFU)Pagina Web corso: http://www.dmi.unipg.it/francesco.santini/progI.html

Unistudium: https://www.unistudium.unipg.itOrario martedì 14-17, mercoledì 9-11, giovedì 11-13

Recuperi … da decidere

Canali per comunicare (più lenti):üRicevimento Mercoledì 14-17 (meglio su appuntamento)ü[email protected] o [email protected]

Page 3: PROGRAMMAZIONE I · 1. Progetto in C da consegnare su GitHub Classroom üAssegnato a Dicembre üLa scadenza per consegnare ciascun progetto è qualche giorno dopo la prova scritta

TELEGRAM (PIÙ VELOCE)

Telegram: @safranCanale: https://telegram.me/programmazione1_PG

Usato come metodo veloce per comunicare con me (@safran) e per comunicazioni generali (il canale)

ISCRIVETEVI !!!

Page 4: PROGRAMMAZIONE I · 1. Progetto in C da consegnare su GitHub Classroom üAssegnato a Dicembre üLa scadenza per consegnare ciascun progetto è qualche giorno dopo la prova scritta

PROGRAMMA

Programming in CüLanguage Basics üTypesüLiteralsüType conversionsüExpressions and operatorsüStatementsüLoopsüFunctionsüArraysüPointersüStructures, UnionsüDynamic Memory ManagementüInput and OutputüPre-processing directives

Lang

uage

Page 5: PROGRAMMAZIONE I · 1. Progetto in C da consegnare su GitHub Classroom üAssegnato a Dicembre üLa scadenza per consegnare ciascun progetto è qualche giorno dopo la prova scritta

PROGRAMMA

General programming conceptsüInterpreted and compiled languagesüScopeüRecursionThink like a programmer: problem solvingProgramming in C part IIüCompiling with GCCüDebugging C Programs with GDBLinked ListsüDifferent representationsüCommon operations

Page 6: PROGRAMMAZIONE I · 1. Progetto in C da consegnare su GitHub Classroom üAssegnato a Dicembre üLa scadenza per consegnare ciascun progetto è qualche giorno dopo la prova scritta

OBIETTIVI APPRENDIMENTO

1. Problem solving2. General programming languages concepts

3. C language

4. Use of a compiler and debugger

5. Linked Lists

Saper programmare (in C)

Page 7: PROGRAMMAZIONE I · 1. Progetto in C da consegnare su GitHub Classroom üAssegnato a Dicembre üLa scadenza per consegnare ciascun progetto è qualche giorno dopo la prova scritta

MATERIALE

Slide (su mia pagina Web e Unistudium), upload PRIMA della lezione

Libri (proposti successivamente)

Esercitazioni in classeEsercitazioni a casa

Page 8: PROGRAMMAZIONE I · 1. Progetto in C da consegnare su GitHub Classroom üAssegnato a Dicembre üLa scadenza per consegnare ciascun progetto è qualche giorno dopo la prova scritta

LIBRO PRINCIPALE

Il Linguaggio C – Fondamenti e tecniche di programmazioneBy Paul J. Deitel and Harvey M. DeitelPublisher: Pearson, 8th edition (August 2016)Pages: 637Euro: 33,15 (Amazon)

ITA

Page 9: PROGRAMMAZIONE I · 1. Progetto in C da consegnare su GitHub Classroom üAssegnato a Dicembre üLa scadenza per consegnare ciascun progetto è qualche giorno dopo la prova scritta

RIFERIMENTO VELOCE

C in a NutshellBy Peter Prinz, Ulla Kirch-PrinzPublisher: O'Reilly MediaFinal Release Date: November 2002Pages: 144Euro: 8,32 (Amazon)

EN

Page 10: PROGRAMMAZIONE I · 1. Progetto in C da consegnare su GitHub Classroom üAssegnato a Dicembre üLa scadenza per consegnare ciascun progetto è qualche giorno dopo la prova scritta

ALTRI LIBRI

Il linguaggio C. Principi di programmazione e manuale di riferimento

By B. Kernighan, D. RitchiePublisher: Pearson2nd edition (January 2004)Pages: 313Euro: 22,95 (Amazon IT)

ITA

Page 11: PROGRAMMAZIONE I · 1. Progetto in C da consegnare su GitHub Classroom üAssegnato a Dicembre üLa scadenza per consegnare ciascun progetto è qualche giorno dopo la prova scritta

HELLO, WORLD

Page 12: PROGRAMMAZIONE I · 1. Progetto in C da consegnare su GitHub Classroom üAssegnato a Dicembre üLa scadenza per consegnare ciascun progetto è qualche giorno dopo la prova scritta

ALTRI LIBRI

ITA

C didattica e programmazione

By A. Kelly, I. PohlPublisher: Pearson??nd edition (??)Pages: ~672Euro: ~33,15 (Amazon IT)

Page 13: PROGRAMMAZIONE I · 1. Progetto in C da consegnare su GitHub Classroom üAssegnato a Dicembre üLa scadenza per consegnare ciascun progetto è qualche giorno dopo la prova scritta

ALTRI LIBRI

C in a nutshell

By P. Prinz, T. CrawfordPublisher: O’Reilly2nnd edition (March 2015)Pages: 812Euro: 45,63 (Amazon IT)

EN

Page 14: PROGRAMMAZIONE I · 1. Progetto in C da consegnare su GitHub Classroom üAssegnato a Dicembre üLa scadenza per consegnare ciascun progetto è qualche giorno dopo la prova scritta

WHY WILL SLIDES BE IN ENGLISH?

Page 15: PROGRAMMAZIONE I · 1. Progetto in C da consegnare su GitHub Classroom üAssegnato a Dicembre üLa scadenza per consegnare ciascun progetto è qualche giorno dopo la prova scritta

DOVE AIUTARSI

https://stackoverflow.com

http://www.cprogramming.com/tutorial/c-tutorial.htmlhttp://www.w3schools.in/c-tutorial/

https://www.tutorialspoint.com/cprogramming/

Page 16: PROGRAMMAZIONE I · 1. Progetto in C da consegnare su GitHub Classroom üAssegnato a Dicembre üLa scadenza per consegnare ciascun progetto è qualche giorno dopo la prova scritta

ESAME

1. Progetto in C da consegnare su GitHub ClassroomüAssegnato a Dicembre

üLa scadenza per consegnare ciascun progetto è qualchegiorno dopo la prova scritta (chiusura automatica su GitHub)

2. Prova scritta

3. Prova di Laboratorio su progetto consegnato + orale

Registrazione su SOL: https://www.segreterie.unipg.it

Date:ü14 Gennaio, 28 Gennaio, 12 Febbraio, 15 Aprile, Giugno,

Luglio, Settembre, Novembre

Page 17: PROGRAMMAZIONE I · 1. Progetto in C da consegnare su GitHub Classroom üAssegnato a Dicembre üLa scadenza per consegnare ciascun progetto è qualche giorno dopo la prova scritta

ESAMI PASSATI CON CORREZIONI

http://www.dmi.unipg.it/francesco.santini/progI.html

Page 18: PROGRAMMAZIONE I · 1. Progetto in C da consegnare su GitHub Classroom üAssegnato a Dicembre üLa scadenza per consegnare ciascun progetto è qualche giorno dopo la prova scritta

ESEMPIO

Page 19: PROGRAMMAZIONE I · 1. Progetto in C da consegnare su GitHub Classroom üAssegnato a Dicembre üLa scadenza per consegnare ciascun progetto è qualche giorno dopo la prova scritta

REGOLE

Nome e cognome su testo e tutti i fogli protocollo usatiScrivere svolgimento su foglio protocolloü Senza un’idea di svolgimento vale 0 puntiCopiare solo la soluzione nel riquadro dell’eserciziocorrispondente nel testoüOppure “Vedi foglio”Durata ~ 2:20 ore

Sul banco, consentita solo una penna (E BASTA)

Page 20: PROGRAMMAZIONE I · 1. Progetto in C da consegnare su GitHub Classroom üAssegnato a Dicembre üLa scadenza per consegnare ciascun progetto è qualche giorno dopo la prova scritta

PROGETTO

Progetto valutato da 1 a 4 (+ se aggiunte altre feature), ma üSe non compila a causa di errori, valutato non sufficiente: no

ammessi all’oraleüSe alcune funzioni sono sbagliate, valutato non sufficiente:

no ammessi all’oralePunti sommati al voto dello scritto

In generale il progetto riguarda lo sviluppo di variefunzioni su una lista dinamica, ma non sempre (vedianno scorso)Prova anti-plagio

Page 21: PROGRAMMAZIONE I · 1. Progetto in C da consegnare su GitHub Classroom üAssegnato a Dicembre üLa scadenza per consegnare ciascun progetto è qualche giorno dopo la prova scritta

TOOL

Niente orale per entrambi

Page 22: PROGRAMMAZIONE I · 1. Progetto in C da consegnare su GitHub Classroom üAssegnato a Dicembre üLa scadenza per consegnare ciascun progetto è qualche giorno dopo la prova scritta

PROVA LABORATORIO

1. Vi chiederò di modificare il progetto assegnato a casaEsempio di domandeüCreare una nuova funzione che invece di inserire in testa

alla lista (come nel testo del progetto) inserisce in fondo allalista

üCreare una funzione che scorre la lista e aggrega dei campi: per esempio somma il campo X per tutti gli elementi dellalista

Durata: 1 ora2. Alcune domandeüAlcuni punti in più (o in meno)

Page 23: PROGRAMMAZIONE I · 1. Progetto in C da consegnare su GitHub Classroom üAssegnato a Dicembre üLa scadenza per consegnare ciascun progetto è qualche giorno dopo la prova scritta

SE NON SAPETE MODIFICARE IL VOSTRO PROGETTO NEL TEMPO ASSEGNATO: ESAME FALLITO

Page 24: PROGRAMMAZIONE I · 1. Progetto in C da consegnare su GitHub Classroom üAssegnato a Dicembre üLa scadenza per consegnare ciascun progetto è qualche giorno dopo la prova scritta

LET’S START

Page 25: PROGRAMMAZIONE I · 1. Progetto in C da consegnare su GitHub Classroom üAssegnato a Dicembre üLa scadenza per consegnare ciascun progetto è qualche giorno dopo la prova scritta

ALGORITHMS

A procedure for solving a mathematical problem (as of finding the greatest common divisor) in a finite number of steps that frequently involves repetition of an operation.A flowchart is a type of diagram that represents an algorithm, showing the steps as boxes of various kinds, and their order by connecting them with arrows.

Sequence of operations from top to bottom

Euclid’s Elements 300 BC

Page 26: PROGRAMMAZIONE I · 1. Progetto in C da consegnare su GitHub Classroom üAssegnato a Dicembre üLa scadenza per consegnare ciascun progetto è qualche giorno dopo la prova scritta

WHERE ALGORITHM COMES FROM

It comes from Al-Khwārizmī (Persian: خوارزمی , c. 780–850), a Persian mathematician, astronomer, geographer, and scholar.

Page 27: PROGRAMMAZIONE I · 1. Progetto in C da consegnare su GitHub Classroom üAssegnato a Dicembre üLa scadenza per consegnare ciascun progetto è qualche giorno dopo la prova scritta

ANSI/ISO 1970 (REVISED 1985)

Page 28: PROGRAMMAZIONE I · 1. Progetto in C da consegnare su GitHub Classroom üAssegnato a Dicembre üLa scadenza per consegnare ciascun progetto è qualche giorno dopo la prova scritta

EXAMPLE OF A PROGRAM IN C#include <stdio.h>

int main(){

int a, b;

printf("Enter first positive integer: \n");scanf("%d", &a); printf("Enter second positive integer: \n");scanf("%d", &b);

while(b != 0) {

if(a > b)a = a - b;

else b = b - a;

} printf("GCD = %d\n", a);

return 0;

}

Page 29: PROGRAMMAZIONE I · 1. Progetto in C da consegnare su GitHub Classroom üAssegnato a Dicembre üLa scadenza per consegnare ciascun progetto è qualche giorno dopo la prova scritta
Page 30: PROGRAMMAZIONE I · 1. Progetto in C da consegnare su GitHub Classroom üAssegnato a Dicembre üLa scadenza per consegnare ciascun progetto è qualche giorno dopo la prova scritta

1. Ricevimento2. Seconda prova

No

Page 31: PROGRAMMAZIONE I · 1. Progetto in C da consegnare su GitHub Classroom üAssegnato a Dicembre üLa scadenza per consegnare ciascun progetto è qualche giorno dopo la prova scritta

FLOWCHART RESOURCES

https://en.wikipedia.org/wiki/Flowcharthttps://www.draw.io

Page 32: PROGRAMMAZIONE I · 1. Progetto in C da consegnare su GitHub Classroom üAssegnato a Dicembre üLa scadenza per consegnare ciascun progetto è qualche giorno dopo la prova scritta

PROGRAMMING

Programming is the process of taking an algorithm and encoding it into a notation, a programming language, so that it can be executed by a computer.

Problem solving

A program is a collection of instructions

ProblemThink

about the algorithm

Choose the right language

Start Program

ming

Page 33: PROGRAMMAZIONE I · 1. Progetto in C da consegnare su GitHub Classroom üAssegnato a Dicembre üLa scadenza per consegnare ciascun progetto è qualche giorno dopo la prova scritta

TIPS: HOW TO LEARN PROGRAMMING

1. Look at the Example Code: When you're first learning to program, you should make sure to look at, and try to understand, every example. Read the code examples before the text, and try to figure out what they did. (NOW)

2. Don't Just Read Example Code--Run It: Then type the sample code into a compiler--if you type it, instead of copying and pasting it, you will really force yourself to go through everything that is there. (NOW)

3. Write your Own Code as Soon as Possible: start writing sample programs that use every point we did. (NOW)

4. Learn to Use a Debugger: A debugger will allow you to step line by line through a piece of code (not now)

5. Seek out More Sources: tutorials, examples, books, man. Program code ALWAYS with handbook and/or Internet. (NOW)

Page 34: PROGRAMMAZIONE I · 1. Progetto in C da consegnare su GitHub Classroom üAssegnato a Dicembre üLa scadenza per consegnare ciascun progetto è qualche giorno dopo la prova scritta

WHY C

Page 35: PROGRAMMAZIONE I · 1. Progetto in C da consegnare su GitHub Classroom üAssegnato a Dicembre üLa scadenza per consegnare ciascun progetto è qualche giorno dopo la prova scritta

HOW MANY SPOKEN LANGUAGES

~7097https://www.ethnologue.com/guides/how-many-languages

Page 36: PROGRAMMAZIONE I · 1. Progetto in C da consegnare su GitHub Classroom üAssegnato a Dicembre üLa scadenza per consegnare ciascun progetto è qualche giorno dopo la prova scritta

HOW MANY PROGRAMMING LANGUAGES?

Wikipedia has a list of 700 programming languagesühttps://en.wikipedia.org/wiki/List_of_programming_languagesTiobe has a list of 250 languagesüTIOBE tracks a programming language if it passes 3 tests: it

must have its own Wikipedia page, it must be Turing complete, and a Google search for it must return over 5,000 search results.

http://codelani.com/posts/how-many-programming-languages-are-there-in-the-world.htmlüTheir current estimate for active general purpose

programming languages is between 500 and 2,000.üTheir current estimate for all active computer languages is

between 5,000 and 25,000.

Page 37: PROGRAMMAZIONE I · 1. Progetto in C da consegnare su GitHub Classroom üAssegnato a Dicembre üLa scadenza per consegnare ciascun progetto è qualche giorno dopo la prova scritta

WHAT IS THE BEST LANGUAGE?

It depends:üWeb: Javascriptü(data) science/mining, machine learning: PythonüLow level and fast applications: C/C++üWrite once run everywhere, Android: JavaüServer-side for the Web: PHPüProductivity for backend development (Airbnb, GitHub):

Ruby

Page 38: PROGRAMMAZIONE I · 1. Progetto in C da consegnare su GitHub Classroom üAssegnato a Dicembre üLa scadenza per consegnare ciascun progetto è qualche giorno dopo la prova scritta

TIOBE INDEX

https://www.tiobe.com/tiobe-index/

Page 39: PROGRAMMAZIONE I · 1. Progetto in C da consegnare su GitHub Classroom üAssegnato a Dicembre üLa scadenza per consegnare ciascun progetto è qualche giorno dopo la prova scritta

C PERFORMANCE

Page 40: PROGRAMMAZIONE I · 1. Progetto in C da consegnare su GitHub Classroom üAssegnato a Dicembre üLa scadenza per consegnare ciascun progetto è qualche giorno dopo la prova scritta

BITCOIN CORE

https://bitcoincore.orghttps://github.com/bitcoin/bitcoin

Page 41: PROGRAMMAZIONE I · 1. Progetto in C da consegnare su GitHub Classroom üAssegnato a Dicembre üLa scadenza per consegnare ciascun progetto è qualche giorno dopo la prova scritta

JOBS

Page 42: PROGRAMMAZIONE I · 1. Progetto in C da consegnare su GitHub Classroom üAssegnato a Dicembre üLa scadenza per consegnare ciascun progetto è qualche giorno dopo la prova scritta

JOBS

Page 43: PROGRAMMAZIONE I · 1. Progetto in C da consegnare su GitHub Classroom üAssegnato a Dicembre üLa scadenza per consegnare ciascun progetto è qualche giorno dopo la prova scritta

JOBS