Linguaggi di programmazione

Slides:



Advertisements
Presentazioni simili
Training On Line - CONP. 2 Richiesta Da Menu: Conferimenti ad inizio anno termico > Agosto > Pluriennali > Nuova Richiesta Si accede alla pagina di Richiesta.
Advertisements

Introduzione al linguaggio C++
Dipartimento di Ingegneria Idraulica e Ambientale - Universita di Pavia 1 Caduta non guidata di un corpo rettangolare in un serbatoio Velocità e rotazione.
1 MeDeC - Centro Demoscopico Metropolitano Provincia di Bologna - per Valutazione su alcuni servizi erogati nel.
1 Pregnana Milanese Assessorato alle Risorse Economiche Bilancio Preventivo P R O P O S T A.
Linguaggi di programmazione
MATLAB. Scopo della lezione Programmare in Matlab Funzioni Cicli Operatori relazionali Esercizi vari.
Algoritmi e Programmazione
1 Semantica Operazionale di un frammento di Java: lo stato.
Informatica Generale Marzia Buscemi
1 Informatica Generale Susanna Pelagatti Ricevimento: Mercoledì ore presso Dipartimento di Informatica, Via Buonarroti,
Frontespizio Economia Monetaria Anno Accademico
Programmazione Procedurale in Linguaggio C++
1 Istruzioni, algoritmi, linguaggi. 2 Algoritmo per il calcolo delle radici reali di unequazione di 2 o grado Data lequazione ax 2 +bx+c=0, quali sono.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Puntatori Marco D. Santambrogio – Ver. aggiornata al 21 Marzo 2013.
Algebra di Boole ed elementi di logica
Informatica di base A.A. 2003/2004 Algoritmi e programmi
Algoritmi.
File.
Università degli Studi di Bergamo Facoltà di Lingue e Letterature Straniere Facoltà di Lettere e Filosofia A.A Informatica generale 1 Appunti.
Informatica 2. Concetti fondamentali di programmazione Programmare vuol dire scrivere un algoritmo in un linguaggio che faccia funzionare un calcolatore.
Canale A. Prof.Ciapetti AA2003/04
Corso di Laurea in Biotecnologie Informatica (Programmazione)
Corso di Informatica (Programmazione)
1 Corso di Laurea in Biotecnologie Informatica (Programmazione) Problemi e algoritmi Anno Accademico 2009/2010.
Programmazione Un programma descrive al computer, in estremo dettaglio, la sequenza di passi necessari a svolgere un particolare compito L’attività di.
Il linguaggio Fortran 90: 4. Array: Vettori e Matrici
Introduzione alla programmazione lll
Procedure e funzioni nei linguaggi di alto livello Lab Programmazione - turno /2006.
Unità Didattica 2 I Linguaggi di Programmazione
JavaScript: Array JavaScript: Array.
Cos’è un problema?.
Strutture di controllo in C -- Flow Chart --
Esercizi Puntatori, struct con campi puntatore, puntatori a struct, rapporto tra array e puntatori. FUNZIONI Passaggio di parametri per indirizzo, passaggio.
Dichiarazioni e tipi predefiniti nel linguaggio C
CAPITOLO 7.
Le funzioni.
Espressioni condizionali
Algoritmi e Programmazione (in C) Stefano Cagnoni e Monica Mordonini
Introduzione alle basi di dati
Elementi di Informatica
CHARGE PUMP Principio di Funzionamento
Dall’algoritmo al programma.
1 Negozi Nuove idee realizzate per. 2 Negozi 3 4.
Elementi di Informatica di base
ORDINE DI CHIAMATA a 1minuto e 2 minuti PRINCIPALI TEMPI DELLA COMPETIZIONE ORDINE DI CHIAMATA a 1minuto e 2 minuti PRINCIPALI TEMPI DELLA COMPETIZIONE.
CODIFICA Da flow-chart a C++.
2000 Prentice Hall, Inc. All rights reserved. Capitolo 10 (Deitel) Strutture, unioni ed enumerazioni Sommario Introduzione Definire le strutture.
PROBLEMA ALGORITMO PROGRAMMA LINGUAGGI di PROGRAMMAZIONE
ISTITUTO STATALE DI ISTRUZIONE SUPERIORE F. ENRIQUES CORSO JAVA – PROVA INTERMEDIA DEL 12 MARZO 2007 NOME: COGNOME: ________________________________________________________________________________.
QUIZ – PATENTE EUROPEA – ESAME WORD
Un trucchetto di Moltiplicazione per il calcolo mentale
Unità Didattica 3 Linguaggio C
21 marzo 2002 (ri-)Avvisi: Giovedi 28 marzo la lezione e sospesa. Nuovo indirizzo di Spedire messaggi e esercizi solo.
14 marzo 2002 Avvisi:.
Esempi risolti mediante immagini (e con excel)
Fopndamenti di programmazione. 2 La classe String Una stringa è una sequenza di caratteri La classe String è utilizzata per memorizzare caratteri La classe.
1Piero Scotto - C14. Finalità del corso Programma Materiale Requisiti Spendibilità 2Piero Scotto - C14.
Sviluppare un programma in C che, dato un array da 100 elementi interi caricato con numeri casuali compresi tra [10,100], sia in grado di cercare il valore.
ISTITUTO STATALE DI ISTRUZIONE SUPERIORE F. ENRIQUES CORSO JAVA – PROVA INTERMEDIA DEL 12 MARZO 2007 NOME: COGNOME: ________________________________________________________________________________.
NO WASTE Progetto continuità scuola primaria scuola secondaria Salorno a.s. 2013_
Il linguaggio Fortran 90: 3. Procedure e Funzioni
A.P. cat. B - 1 Per chi vuole: Libro di testo D.P. Curtis, K. Foley, K. Sen, C. Morin Informatica di base 2° edizione Mc Graw-Hill Companies.
Dal problema all’ algoritmo
Tecnologie Informatiche ed Elettroniche per le Produzioni Animali
1 Il linguaggio C Precisazioni sull’esperienza in laboratorio.
Operatori di incremento e decremento
Esercizi.
Informatica e Informatica di Base
Programmazione dei Calcolatori Elettronici
Transcript della presentazione:

Linguaggi di programmazione

Da linguaggio macchina a linguaggio assembly Linguaggi macchina (prima generazione) Codici operativi mnemonici, identificatori al posto di indirizzi di memoria, nomi per i registri All’inizio, solo su carta e poi traduzione in lunguaggio macchina Poi, traduzione automatica (programma assemblatore) Linguaggi assembly (seconda generazione)

Linguaggi assembly Dipendenti da Numero dei registri Istruzioni del linguaggio macchina  Non trasportabili su un altro calcolatore Descrizione di un algoritmo con primitive che rappresentano passi molto piccoli Meglio primitive piu’ ad alto livello, e poi traduzione in concetti piu’ dettagliati

Linguaggi di terza generazione Es.: FORTRAN (FORmula TRANslator), COBOL (COmmon Business Language) Insieme di primitive ad alto livello, ognuna traducibile in una sequenza di primitive in linguaggio macchina Es.: pesolordo  pesocarico + pesoveicolo Due load, una add, una store Programma traduttore (compilatore): traduce il programma in linguaggio macchina Interprete: traduce ogni primitiva ed esegue subito le primitive corrispondenti del l.m., senza memorizzare la traduzione Trasportabili da una macchina all’altra, basta cambiare compilatore

Paradigmi di programmazione Imperativo (procedurale): programma = sequenza di comandi che descrive un algoritmo pensato dal programmatore Es.: pseudocodice, linguaggio macchina, Pascal, C Dichiarativo: Basta descrivere il problema e non il suo algoritmo Algoritmo generale per risolvere i problemi Ambiti ristretti o linguaggi basati su logica matematica (programmazione logica, Prolog)

Paradigma funzionale Funzioni, con ingresso e uscita Connesse in modo da costruire funzioni complesse a partire da funzioni elementari Es.: media di una lista di valori Somma: dato un elenco di valori, genera la somma Conta: data una lista di valori, gnera il loro numero Dividi: dati due valori, genera il quoziente della loro divisione In LISP: (dividi (somma numeri) (conta numeri))

Paradigma orientato agli oggetti Dati associati a procedure per gestirli (oggetti) Es.: elenco di nomi Procedure per inserire un nuovo nome, eliminarne uno, vedere se l’elenco e’ vuoto, ordinare l’elenco, ... Un programma accede all’elenco e usa le sue procedure per gestirlo

Paradigma orientato agli oggetti Es.: interfaccia grafica Icone: oggetti, con procedure che vengono attivate da eventi (clic del mouse, ...) Ogni oggetto e’ un’entita’ autonoma Costruzione modulare del software Comunicazione tra oggetti tramite messaggi Adatta al sistema client-server Ogni procedura: programma imperativo C++: C con funzionalita’ orientate agli oggetti

Cronologia dei paradigmi

Concetti dei programmi imperativi Tre categorie di istruzioni: Istruzioni dichiarative: dichiarano i nomi usati nel programma, di solito all’inizio Istruzioni imperative: passi dell’algoritmo Commenti: spiegano i passi del programma

Variabili e tipi Nomi che indicano una cella di memoria Cambiando il valore in una posizione di memoria, cambia il valore associato al nome  variabile Dichiarazione di una variabile e del tipo di dato che sara’ memorizzato nella posizione di memoria associata alla variabile Es.: tipo intero (integer), reale (real o float), ... Operazioni diverse su tipi diversi (es. ADD e FADD)

Variabili e tipi Es.: LimitePeso variabile con valore intero C, C++, Java, C#: int LimitePeso; Es.: FineDellaLista variabile con tipo booleano (vero o falso) Tipi usati per selezionare le operazioni giuste e per scoprire errori Es.: somma di due variabili di tipi carattere

Strutture dati Variabili come nomi per dati o strutture dati vari dati organizzati es: una lista di numeri o una matrice di nomi Array omogeneo: blocco di valori dello stesso tipo Lista monodimensionale Tabella bidimensionale con righe e colonne Tabella multidimensionale Per creare un array: nome, lunghezza delle dimensioni Es.: (C) int Punteggio[2] [9]; In FORTRAN: INTEGER Punteggio(2,9)

Accesso ad un array Nome per l’intero array Nome + indici (tanti quante le dimensioni) per un singolo elemento Linguaggi diversi hanno diversi valori iniziali degli indici Es.: per elemento in riga 2 e colonna 4: In C: Punteggio[1][3] In FORTRAN: Punteggio(2,4) Flessibilita’ nell’intervallo degli indici Es. (Pascal): Punteggio: array [3..4,12..20] of integer; Elemento in seconda riga e quarta colonna: Punteggio[4,15]

Array eterogeneo (record) Blocco di dati di tipo possibilmente diverso Es.: Dipendente Nome, tipo carattere Eta, tipo intero Valutazione, tipo reale Accesso tramite nome del campo e non indice Es.: Dipendente.Eta

Costanti Nome associato ad un valore costante Es.: Uso della costante: Ada: Max constant Integer := 200; Java: final int Max = 200; C++ e C#: cost Max = 200; Uso della costante: A < Max Se si vuole modificare il massimo, basta cambiare la dichiarazione della costante

Istruzioni di assegnamento Mette un valore nell’area di memoria associata ad una variabile Es. (C, C++, C#, Java) Z = X + Y; Ada, Pascal Z := X + Y; APL Z X + Y

Espressione nell’assegnamento Qualunque espressione algebrica, con +, -, *, / ES.: 2*4+6/2 7 se valutata da sinistra a destra, 14 se da destra a sinistra Precedenza degli operatori (prima * e /, poi + e -)  11 Parentesi nei linguaggi Es.: 2*(4+6)/2  10

Istruzioni di controllo Passi elementari dell’algoritmo Istruzione goto: salto incondizionato Pericolosa in un linguaggio ad altro livello Genera programmi difficili da capire, modificare e correggere

Esempio di goto goto 40 20: Applica la procedure Scappa goto 70 40: If (livello < max) then goto 60 goto 20 60: Applica la procedura Salva 70: ...

Esempio di goto Programma equivalente: If (livello < max) then (applica la procedura Salva) else (applica la procedura Scappa)

Strutture di controllo (C, C++, C#, Java)

Strutture di controllo (C, C++, C#, Java): case

For Il corpo del ciclo viene eseguito un numero fissato di volte, per tutti i valori di una variabile intera (contatore) in un certo intervallo

Esempio di for in vari linguaggi

Procedure Programma + nome, che puo’ essere eseguito in vari posti del programma Chiamata o attivazione di procedura Programma chiamante e chiamato La chiamata fa iniziare l’esecuzione della procedura chiamata e sospende l’esecuzione del programma chiamante Alla fine, si ritorna all’esecuzione del programma chiamante

Programma chiamante e procedura chiamata

Procedure Una procedura e’ fatta come un programma: dichiarazioni e istruzioni Variabili dichiarate nella procedura: variabili locali Usabili solo all’interno di quella procedura

Parametri Le procedure sono scritte usando parametri generici (formali) Al momento della chiamata si dicono i dati su cui eseguire la procedura (parametri attuali) Es.: procedure Ordina(Lista) Lista puo’ essere una lista di nomi, o un elenco di numeri telefonici, ...

Esempio di procedura in C Es. di chiamata: ProjectPopulation(0.03)

Passaggio dei parametri Trasferimento dati tra parameri attuali e formali Un modo (passaggio per valore): duplicato dei parametri attuali, passato alla procedura  modifiche fatte dalla procedura non si riflettono sui dati del programma chiamante

Passaggio dei parametri Parametri di grandi dimensioni  non efficiente fare un duplicato  accesso diretto ai dati del programma chiamante (passaggio per riferimento) La procedura puo’ modificare i dati del programma chiamante Es.: Ordina(Lista)

Esercizio Procedura: Procedure Modifica(Y) Y  7; Stampa(Y). Programma chiamante: X  5; Modifica(X); Stampa(X). Parametro passato per valore: 7, 5 Parametro passato per riferimento: 7, 7

Funzioni Scopo di una procedura: eseguire vari comandi Scopo di una funzione: calcolare un valore Una funzione passa questo valore all’unita’ chiamante Es.: nel programma chiamante: A = Somma(Lista); Somma calcola la somma dei valori nella lista Oppure: if (A < Somma(Lista)) then ... Dichiarazione: nome + parametri + tipo del risultato Istruzione che calcola il risultato (es.: return)

Esempio di funzione (C) Float volumecilindro(float raggio, float altezza); {float volume; volume = 3.14 * raggio * raggio * altezza; return volume; } Uso nel programma chiamante: Costo = costounitario * volumecilindro(3.45,12.7);

Input/output Le procedure piu’ usate sono predefinite Ad esempio quelle di input/output Es. (Pascal) Readln(Valore) legge dalla tastiera e lo assegna alla variabile Valore Writeln(Valore) visualizza sullo schermo il valore della variabile Valore In C: scanf e printf

Traduzione Traduzione di un programma da un linguaggio ad un altro Da programma sorgente a programma oggetto Tre fasi: Analisi lessicale Analisi sintattica (parsing) Generazione di codice

Fasi della traduzione

Analisi lessicale Da programma come stringa di caratteri a sequenza di entita’ (ognuna una stringa di caratteri) Es.: 154 vano visti come una singola entita’, un numero Unita’ singole (token): numeri, parole chiave, nomi di comandi, identificatori, ...

Analisi sintattica Input: sequenza di token Raggruppa i token in istruzioni Aiuto: parole chiave per indicare l’inizio delle istruzioni, punto e virgola per la fine, ... Regole per definire la sintassi di un linguaggio Diagrammi sintattici per definire le regole

Diagramma sintattico per if-then-else

Diagrammi sintattici per le espressioni

Albero sintattico per x+(y*z) Fa vedere come una stringa di tokens rispetta le regole Analisi sintattica: costruisce l’albero sintattico del programma sorgente

Generazione del codice Da istruzioni generate dall’analisi sintattica a istruzioni in linguaggio macchina Anche ottimizzazione del codice

Programmazione orientata agli oggetti Oggetto: dato + procedure che agiscono sul dato Esempi in C++, Java, C#

Esempio Videogioco: dobbiamo proteggere la terra da alcune meteore sparando con un laser Il laser ha una sorgente di alimentazione interna, limitata Ogni volta che il laser spara, consuma parte della sua energia Quando l’energia finisce, il laser non puo’ piu’ sparare Il laser deve poter rispondere a comandi per puntare a destra, a sinistra, e per ativare il raggio laser

Esempio Ogni laser e’ un oggetto con Valore della potenza rimasta Procedure per modificare la direzione e sparare Classe per descrivere un laser generico Sintassi (C++, Java, C#): Class Nome { ...}

Esempio classe Laser { int Potenzarimasta = 100; void puntadestra ( ) {...} void puntasinistra ( ) void fuoco ( ) }

Esempio Qualsiasi oggetto creato secondo lo schema della classe Laser contiene: Una variabile intera Potenzarimasta Tre procedure (metodi) puntadestra, puntasinistra, fuoco Oggetto: istanza di una classe

Esempio Nel programma, tre variabili L1, L2, L3 di tipo Laser Sintassi: Laser L1, L2, L3; Vengono creati tre oggetti secondo lo schema della classe Laser Per far sparare il laser 1: L1.fuoco(); Per far spostare a sinistra il laser 2: L2.puntasinistra();

Programmazione dichiarativa Algoritmo generale basato sulla logica formale Es.: Carlo e’ al lavoro o e’ ammalato Carlo non e’ al lavoro  Carlo e’ ammalato Risoluzione

Simboli A e not(A), OR, AND,  (per implicazione): asserzioni Risoluzione: P OR Q R OR not(Q) P OR R Se (P OR Q) e (P OR not(Q)) sono vere, allora (P OR R) vera Q vero  not(Q) falso  R vero Q falso  P vero  O R o P sono vere

Risoluzione

Clausole Si applica solo ad asserzioni del tipo A OR B (clausole) Qualunque formula della logica del primo ordine puo’ essere scritta come una clausola Es.: P  Q diventa not(P) OR Q

Consistenza Un insieme di asserzioni e’ inconsistente se non e’ possibile che tutte le asserzioni siano vere Es.: P e not(P) Usando la risoluzione ripetutamente, posso scroprire se l’insieme e’ inconsistente: se produco la clausola vuota

Esempio di inconsistenza

Implicazione Vogliamo provare che un insieme di asserzioni S implica P Implicare P equivale a contraddire not(P), cioe’ far vedere che S unito a not(P) e’ inconsistente Applico la risoluzione a S unito not(P), e vedo se genero la clausola vuota

Unificazione Per applicare la risoluzione a (Carlo e’ un X) OR not(Paolo e’ un X) (Paolo e’ uno studente) Devo solo fare l’associazione X=studente Il risultato e’ (Carlo e’ uno studente) Unificazione: assegnazione di valori a variabili

Prolog PROgramming in LOGic: linguaggio di programmazione dichiarativa il cui algoritmo generale e’ basato sull’uso ripetuto della risoluzione Programma Prolog: insieme di asserzioni S Goal: asserzione P di cui provare l’implicazione Esecuzione del programma: risoluzione ripetuta applicata a S unito not(P)

Asserzioni in Prolog Predicati e argomenti, con valore vero o falso Es.: genitore(bruno, maria). Vero se bruno e’ genitore di maria Fatto Prolog: singolo predicato Regola Prolog: implicazione Es.: saggio(X) :- vecchio(X). Significa: se X e’ vecchio, allora X e’ saggio Es. regole e fatti: piuveloce(X,Y) :- piuveloce(X,Y), piuveloce(y,z). piuveloce(coniglio, tartaruga). Programma Prolog: fatti e regole

Esempio piuveloce(tartaruga,lumaca). piuveloce(coniglio, tartaruga). piuveloce(X,Z) :- piuveloce(X,Y), piuveloce(Y,Z). Goal1: piuveloce(tartaruga, lumaca).  OK Goal2: piuveloce(coniglio, tartaruga).  OK Goal3: piuveloce(consiglio, lumaca).  OK Goal4: piuveloce(X, lumaca).  OK se X=tartaruga o X=coniglio Goal5: piuveloce(coniglio,Z)  OK se Z=lumaca Goal6: piuveloce(V,W)  Ok se ...

Esercizio Insieme di asserzioni consistente? P OR Q OR R not(R) OR Q R OR not(P) not(Q)

Esercizio femmina(carla). femmina(susanna). maschio(bruno). maschio(giovanni). genitore(giovanni,carla). genitore(susanna, carla). mamma(X,Y) :- genitore(X,Y), femmina(X). papa(X,Y) :- genitore(X,Y), maschio(X). Goal1: mamma(susanna, carla). Goal2: papa(giovanni,bruno).

Esempi su linguaggi

Efficienza: somma dei primi n numeri 1, ..., n 1. Leggi n 2. Inizializza S a 0 3. Inizializza I a 1 4. Esegui S = S+I 5. Incrementa I (I=I+1) 6. Se I<n torna a 4, altrimenti se I=n esegui 7 7. Stampa S Richiede n somme  O(n)

Secondo algoritmo Uso la proprieta’ S = n x (n+1) /2 1. Leggi n 2. Calcola S = n x (n+1)/2 3. Stampa S Una sola somma, 1 prodotto, 1 divisione: solo 3 operazioni aritmetiche  piu’ efficiente (tempo costante)

Esercizio: programma per somma (C++) Main() { Int X=10, Y=25, Zero=0; X=X+Y; If (X > Zero) Y=X); }

Esercizio: minimo esponente e tale che 2 alla e superi X (C++) Main() { Int X=10, p=1, e=0; While (X>p) p=p*2; esponente++; }

Esempio: stampa dei numeri da 1 a 10 main() { Int i; For (i=0;i<10;i++) Printf(“%d\n,i+1); }

Esempio: funzione per xy (in Pascal) Function potenza (base: real, esponente: integer): real; Var risultato: real; begin risultato := 1; While (esponente >0) Risultato := risultato * base; Esponente := esponente –1; End; Potenza : = risultato

Esempio: funzione per xy (in C) Float potenza (float base, int esponente) { Float risultato = 1.0; While (esponente >0) Risultato = risultato * base; Esponente = esponente –1; } Return risultato; Es. di chiamata: z = potenza(x,3);

Esempio (C): inizializzazione a 0 degli elementi di una matrice 20x20 #define Max 20 #define zero 0.0; main() { int i,j; float A[Max][Max]; for (i=0;i<Max;i++) for j=0; j<Max; J++) A[i][j] = zero } Macro: ogni occorrenza di Max e zero viene sostituita con 20 e 0.0 prima di iniziare a compilare (pre-processore)

Esempio (C++): determinare la posizione del massimo in un array di interi (while) #include <iostream> il pre-processore include la libreria di funzioni iostream main() { int a[]={10,0,5,-12,45,-9,23}; int i=1, max=A[0], pos_max=0; while (i<7) if (A[i]>max) max=A[i]; pos_max=i; } i++; cout<<‘’Il massimo e’:’’<<max<<‘’ in posizione:’’ <<pos_max<<endI; Output standard (video) Funzione << di scrittura

Esempio (C++): determinare la posizione del massimo in un array di interi (for) #include <iostream> main() { int a[]={10,0,5,-12,45,-9,23}; int max=A[0], pos_max=0; for (int i=1;i<7;i++) if (A[i]>max) max=A[i]; pos_max=i; } cout<<‘’Il massimo e’:’’<<max<<‘’ in posizione:’’ <<pos_max<< endI;

Esempio (C): prodotto degli elementi di un vettore di interi main() { int num[100]={10,0,5,-12,45,-9,23, ...}; float prod = 1.0; for (i=0;i<100;i++) prod= prod*num[i]; printf(“il Prodotto e’”,prod); }

Esempio (C): minimo e massimo di un vettore main() { int V[10]={10,0,5,-12,45,-9,23,8,10,9}; int min=max=V[0]; for (i=1;i<10;i++) if (V[i]<min) min=V[i]; if (V[i]>max) max=V[i]; }

Esempio (C): trovare la posizione di un elemento in un vettore main() { int val = 45, pos, i, T[10]={10,0,5,-12,45,-9,23,8,10,9}; pos=-1; i=0; do if (val ==T[i]) pos=i; i++; } Numero di confronti O(n): 1 nel caso migliore, n nel caso pessimo (val non e’ contenuto in T)

Numero di confronti O(log2(n)) Esempio (C): trovare la posizione di un elemento in un vettore ordinato – ricerca binaria main( ) { int sn, dx, ct, N=10, val = 45, pos, i, T[10]={10,0,5,-12,45, 9,23,8,10,9}; pos=-1; sn = 0; dx = N-1; do ct = (sn+dx+1)/2; if (val ==T[ct]) pos = ct; if (val < T[ct]) dx = ct-1 else sn=ct+1; } while (sn<=dx); Numero di confronti O(log2(n))

Esempio (C++): numero di elementi <0 in un array main() { int num=0,T[10]={10,0,5,-12,45, 9,23,8,10,9}; for (i=0;i<10;i++) if (T[i] < 0) num=num+1; }

Esercizio: trovare il minimo e il massimo di una matrice main() { int V[10][20]={10,0,5, ...}; int min=max=V[0][0]; for (i=0;i<10;i++) for (j=0;j<20;j++) if (V[i][j]<min) min=V[i][j]; if (V[i][j]>max) max=V[i][j]; }

Esercizio: inizializzare una matrice a righe crescenti main() { int V[4][4]; for (i=0;i<4;i++) for (j=0;j<4;j++) V[i][j] = j +1 + i*4; } 9 10 11 12 5 6 7 8 1 2 3 4 13 14 15 16

Domande Cos’e’ un algoritmo? Che differenza c’e’ tra un algoritmo e un programma? Come si misura l’efficienza di un algoritmo? Un algoritmo che ha complessita’ O(n) e’ piu’ o meno efficiente di uno che ha complessita’ O(logn)? E di uno che e’ O(n2) o O(2n)? Cosa sono le parole chiave di un linguaggio di programmazione?

Domande Cos’e’ la sintassi di un linguaggio di programmazione? E la semantica? Cosa si intende per linguaggi imperativi? Cos’e’ una variabile? Cos’e’ un’espressione Booleana? Cos’e’ un assegnamento?

Domande Descrivere il costrutto di selezione a uno, due o piu’ rami Descrivere i tre costrutti per l’iterazione, specificando le loro differenze A cosa servono le dichiarazioni in un programma? Cos’e’ un sottoprogramma? Che differenza c’e’ tra una procedura e una funzione? Cosa succede quando viene chiamato un sottoprogramma? Cosa si intende per sottoprogramma ricorsivo?

Domande Qual e’ la funzione di un compilatore? Cosa succede durante la fase di analisi lessicale? E quella di analisi sintattica? Fare degli esempi di tipi di dati semplici Cosa sono i tipi di dati strutturati? Fare degli esempi Quali sono le principali caratteristiche di un array? Cosa contiene la dichiarazione di un array? Quali sono le principali differenze tra array e record?