Informatica Appunti
Informatica Appunti
SOFTWARE: applicazioni.
HARDWARE: dispositivi fisici che compongono il calcolatore.
Il software specifica operazioni che vengono eseguite dall’hardware.
PROCESSORE: o CPU (“Central Processing Unit”), è il circuito integrato che effettua i calcoli
ed è responsabile di tutte le operazioni. Legge e scrive dati dalla memoria RAM, effettua
operazioni aritmetiche ed è in grado di pilotare le periferiche.
Sintassi
È la “grammatica” del linguaggio, l’insieme delle regole che stabiliscono quali programmi
sono corretti. Es.: In italiano: “maiuscola dopo il punto”, in C++: “le istruzioni si concludono
con “;”. La correttezza sintattica consiste in assenza di errori sintattici e il programma è
eseguibile. Viene verificata dal compilatore o dall’interprete e consente di eliminare gli
errori sintattici.
Semantica
È il “significato” del linguaggio, l’insieme delle regole che stabiliscono come il calcolatore
esegue i programmi corretti. Es.: in italiano: “andrò è un’azione nel futuro”, in C++: cout <<
“Ciao”; . La correttezza semantica (o Logica) implica la correttezza sintattica e il programma
risolve correttamente il problema. Viene verificata dall’esecuzione e “test” del
programma, con prove di funzionamento per controllare che il programma si comporti
correttamente.
Il Concetto di Algoritmo
Il punto di partenza è la descrizione del problema. Il punto di arrivo è l’applicazione
correttamente funzionante. Un passo intermedio fondamentale è concepire una strategia
per la soluzione del problema. L’algoritmo è la strategia per la soluzione del problema, è
una procedura di calcolo che serve a risolvere un problema.
COMMENTI: testi che forniscono informazioni sul programma, ignorati dal compilatore
TIPI DI DATO
- Tipo intero: int (numeri interi)
- Tipo reale: float (numeri reali, precisione singola)
- Tipo reale doppia precisione: double (numeri reali, doppia precisione)
- Tipo carattere: char, le cui variabili rappresentano caratteri come una lettera o una
cifra. I caratteri sono delimitati da ‘a’ Non sono inclusi i simboli estesi, le accentate, e
vale per i singoli caratteri, non per le “stringhe di caratteri”.
- Tipo carattere: string, consente di rappresentare sequenze di caratteri
- Tipo booleano: bool, le cui variabili possono assumere due soli valori: vero, falso, che
sono memorizzate come 0 e 1.
COSTANTI: un dato che assume lo stesso valore per tutta la durata della esecuzione del
programma. Ne esistono due tipi: costanti ordinarie, come numeri, caratteri, stringhe
utilizzati nel programma, e costanti simboliche, ovvero valori costanti a cui viene attribuito
un nome, dichiarate attraverso la parola chiave “const”.
La loro sintassi è: const <tipo> <nome> = <valore>;
Dove:
- <tipo> è uno dei tipi di dato del linguaggio
- <nome> è un identificatore
- <valore> è il valore della costante; deve essere compatibile con il tipo di dati
Il valore viene memorizzato nello spazio di memoria e non può essere cambiato durante
l’esecuzione del programma.
VARIABILI: è un dato che può assumere valori differenti durante l’esecuzione del
programma. Deve essere dichiarata prima di essere utilizzata nel programma.
La loro sintassi è: <tipo> <nome>;
Dove:
- <tipo> è uno dei tipi di dato del linguaggio;
- <nomi> sono identificatori distinti.
Per usare una variabile è necessario attribuirle un valore iniziale, con un’operazione di
inizializzazione. È possibile effettuare l’inizializzazione assieme alla dichiarazione.
La sintassi è: <tipo> <nome> = <valore>;
Operatore di Cast
L'operatore di cast viene utilizzato per convertire un tipo di dato in un altro tipo di dato.
Sintassi: (<tipo>)<valore>
Semantica: il processore trasforma la rappresentazione in memoria del <valore> nella
corrispondente rappresentazione del <tipo> specificato, il risultato dell’applicazione
dell’operatore di cast è un valore del <tipo> specificato.
ISTRUZIONI DI STAMPA: servono per visualizzare i valori delle variabili sui dispositivi di
uscita.
ISTRUZIONI DI LETTURA: servono per acquisire i valori delle variabili dai dispositivi di
ingresso.
Ci sono due tipi di FLUSSO:
- il flusso di uscita, che invia i dati al dispositivo di uscita,
- il flusso di ingresso, che riceve i dati dal dispositivo di ingresso.
I programmi hanno due flussi predefiniti: lo standard output (per la stampa) e lo standard
input (per la lettura).
È possibile stampare dati sullo schermo o su file e leggere dati dalla tastiera o da file.
In C++, per stampare su console si utilizza l'oggetto "cout" e l'operatore "<<" mentre per
leggere dalla tastiera si utilizza l'oggetto "cin" e l'operatore ">>". La sintassi per la stampa è
"cout << argomento;" e per la lettura è "cin >> variabile;".
Durante la lettura, il flusso viene analizzato in base a un formato specificato e i dati vengono
memorizzati temporaneamente in un buffer prima di essere copiati nel flusso. Sono presenti
anche caratteri speciali come spazio, fine riga e tabulatore che possono essere utilizzati per
formattare le stampe. Tuttavia, è importante fare attenzione agli errori durante la lettura,
poiché possono verificarsi condizioni inaspettate che influenzano i valori delle variabili.
String
È una sequenza di caratteri racchiusa tra “ “. È diverso dal il tipo char, che è un singolo
carattere (tra apici singoli).
Sintassi ordinaria: string <nomeVar>; string <nomeVar1>, <nomeVar2>; string <nomeVar> =
<valoreIniziale>;
Semantica: alla variabile viene assegnato uno spazio nella memoria, lo spazio dipende dalla
lunghezza della stringa. La stringa ha un numero di caratteri contenuti. Inizialmente la
stringa viene considerata di lunghezza 0, successivamente viene occupato lo spazio di
memoria necessario per rappresentare il valore.
Funzioni predefinite
Sintassi particolare: <stringa>.<funzione>, es: string s; s.size();
- s.size(): calcola la lunghezza della stringa
- s.insert(x, s1): inserimento di una stringa in un’altra
- s.erase(x, y): cancellazione di una sottostringa
- s.substr(x, y): estrazione di una sottostringa
- s.find(s1): ricerca della posizione di una sottostringa
- s.replace(x, y, s1): sostituzione di una sottostringa con un’altra
Per quanto riguarda la stampa delle stringhe, è possibile farlo in modo ordinario utilizzando
l'operatore "<<". Per quanto riguarda la lettura delle stringhe, è consigliabile evitare
l'utilizzo dell'istruzione "cin >>" per l'input formattato. Questo perché l'input formattato
elimina gli spazi che possono essere rilevanti nelle stringhe. Invece, si utilizza un approccio
diverso, in cui l'input non viene formattato.
Per la lettura di una riga di caratteri non formattata, si utilizza l'istruzione "getline(<flusso>,
<stringa>)". In questa sintassi, "<stringa>" rappresenta una variabile di tipo string, mentre
"<flusso>" rappresenta il flusso da cui leggere, ad esempio "cin".
In breve, per leggere una riga di caratteri non formattata si utilizza l'istruzione
"getline(<flusso>, <stringa>)", mentre per stampare una stringa si utilizza l'operatore "<<".
3
Istruzione if-then-else: esecuzione di blocco di codice oppure di un altro a seconda che una
condizione sia vera o falsa
La Sintassi: if (<condizione>)
<blocco1>
else
<blocco2>
Dove:
- <condizione> è una espressione con valore booleano
- <blocco1> e <blocco2> blocchi di istruzioni
Semantica: se il valore dell’espressione è true si esegue <blocco1>, se il valore
dell’espressione è false si esegue <blocco2>, in entrambi i casi l’esecuzione procede con
l’istruzione immediatamente successiva.
Istruzione if-then: esecuzione di un blocco di codice se la condizione è vera, altrimenti
nessun effetto.
La sintassi: if (<condizione>)
<blocco>
Semantica: se la condizione è vera viene eseguito il blocco e poi si prosegue con l’istruzione
successiva, se la condizione è falsa si prosegue direttamente con l’istruzione successiva
(NON viene eseguita alcuna istruzione).
Tipologie di Iterazione
Ci sono due tipologie di iterazione che vengono comunemente utilizzate nelle applicazioni:
l'iterazione aperta e l'iterazione chiusa (o a conteggio). Queste tipologie corrispondono a
esigenze diverse di programmazione.
- L'iterazione aperta si verifica quando non è possibile stabilire a priori quante volte
dovranno essere eseguite le operazioni da ripetere. Il numero di ripetizioni dipende dal
valore di una condizione. In questa tipologia di iterazione, potrebbero verificarsi 0 ripetizioni
se la condizione non è verificata fin dall'inizio, oppure potrebbero verificarsi ripetizioni
indefinite se la condizione è sempre verificata.
- L'iterazione chiusa o a conteggio, invece, prevede che il numero di ripetizioni sia noto
prima dell'inizio dell'iterazione. Questo viene realizzato attraverso una tecnica di conteggio
utilizzando una variabile intera per "contare" le ripetizioni. Viene fissato un valore iniziale e
un valore finale per la variabile, e la differenza tra questi due valori corrisponde al numero
di ripetizioni da effettuare. Ad ogni ripetizione, il valore della variabile viene incrementato
fino a quando non raggiunge il valore massimo stabilito.
Istruzione WHILE
Sintassi: while (<condizione>) <corpo>
Dove:
- <condizione> è un’espressione booleana
- <corpo> è un blocco di istruzioni
Semantica: quando viene incontrato il ciclo, viene valutata la condizione. Se la condizione
viene trovata vera viene eseguito il corpo del ciclo
Al termine dell’esecuzione del corpo, si torna in cima e si valuta nuovamente la condizione,
se la condizione viene trovata falsa il ciclo si interrompe e si passa all’istr. successiva.
Ci sono casi in cui il corpo del ciclo non viene mai eseguito; Es: digito dubito 0
C sono casi in cui l’esecuzione può andare avanti indefinitamente; es: non digito mai 0
Possono esserci situazioni di errore e condizioni di ciclo infinito, ovvero un ciclo scritto in
modo tale che la condizione è sempre verificata.
Con il while si possono scrivere anche iterazioni
chiuse.
Tecnica standard per realizzarlo:
- uso una variabile intera (es: i) per “contare”
quante volte il ciclo viene eseguito inizialmente
i = 0 e ad ogni esecuzione i = i + 1
- mi fermo quando i raggiunge il valore massimo
ISTRUZIONE FOR
L’istruzione FOR consente di scrivere in modo più compatto il ciclo, ed in particolare i 3
elementi fondamentali.
Sintassi: for (<e1>; <e2>; <e3>) <corpo>
Dove:
- <e1> è l’inizializzazione della variabile
- <e2> è la condizione del ciclo
- <e3> è l’incremento della variabile
- <corpo> è un blocco di istruzioni
Semantica: è equivalente ad un while.
Più in dettaglio:
- viene eseguita l’inizializzazione (e1)
- viene verificata la condizione (e2)
- se la condizione viene valutata come vera, viene eseguito il corpo
- al termine viene effettuato l’incremento (e3)
- viene valutata di nuovo la condizione
- se la condizione viene valutata come falsa, il ciclo termina e si passa all’istruzione succ.
La variabile del ciclo serve per contare, di conseguenza normalmente è una variabile
intera (tipo int).
Le strutture di controllo possono essere nidificate liberamente.
Tecniche Algoritmiche: rappresentano
soluzioni standard a problemi ricorrenti di
programmazione e un bagaglio di conoscenze
riutilizzabili per il programmatore. (es
contatore esami).
Implica l’utilizzo di una variabile intera (es
numeroEsami) all’interno di un ciclo, la
variabile svolge le funzioni di “contatore”, ha
un valore iniziale pari a 0 ed incrementata ad
ogni nuovo elemento.
Tre operazioni:
- reset del conteggio
- incremento del conteggio
- lettura del valore contato
è la stessa tecnica che viene utilizzata per controllare i cicli a conteggio, anche in quel caso
viene utilizzato un contatore.
Somma con Accumulatore: si usa per calcolare la somma dei valori di una collezione (es:
somma dei voti). Si utilizza una variabile intera all’interno di un ciclo come “accumulatore”.
Inizialmente la variabile vale 0, sommo ogni nuovo valore al valore dell’accumulatore fino a
questo punto.
Come fermare il ciclo quando non deve essere
più eseguito:
- utilizzo di una variabile bandiera (“flag”)
viene utilizzata una variabile booleana
inizializzata a true, il ciclo prosegue finchè la
variabile è vera (la var. è la bandiera che da via
libera al ciclo). Ad ogni nuovo voto si controlla
se l’utente vuole interrompere; in questo caso
la variabile diventa falsa)
- utilizzo della programmazione non
strutturata
Istruzione CONTINUE
Sintassi: continue;
Semantica: interrompe l’esecuzione del corpo del ciclo per ritornare in cima e valutare di
nuovo la condizione di uscita.
Differenza con break: non necessariamente termina il ciclo.
4
Sottoprogrammi
Esistono due categorie di sottoprogrammi:
- Funzioni: servono a effettuare calcoli non previsti dalle funzioni predefinite,
restituiscono il risultato del calcolo
- Procedure: servono a eseguire operazioni non previste dalle istruzioni predefinite,
non restituiscono alcun valore
Per usare i sottoprogrammi bisogna per cominciare “definirli” e poi utilizzarli
La definizione di un sottoprogramma descrive il comportamento del sottoprogramma
Un sottoprogramma è un blocco di istruzioni, prevede una serie di “parametri” su cui
eseguire le operazioni specificate. Ai parametri possono essere associati in ogni esecuzione
“argomenti”, ovvero “dati specifici” su cui effettuare concretamente le operazioni.
Dati nei sottoprogrammi:
costanti
variabili
parametri: dati speciali che hanno un legame con argomenti esterni
Oltre ai parametri, ogni sottoprogramma ha i suoi dati “locali”, ovvero dati dichiarati
all’interno del sottoprogramma, i dati sono “privati” e non utilizzabili dagli altri moduli del
programma.
(costanti locali, variabili locali)
Quando viene incontrata una “chiamata” del sottoprogramma, si interrompe l’esecuzione
del programma e avviene il “passaggio dei parametri”. Si avvia l’esecuzione del
sottoprogramma, al termine dell’esecuzione del sottoprogramma riprende l’esecuzione del
programma.
Definizione di Funzioni
Sintassi: <tipoRisultato> <nome> (<parametri>)
<corpo>
Dove:
- <tipoRisultato> è un tipo di dato
- <nome> è un identificatore
- <parametri> è l’elenco dei parametri
- <corpo> è un blocco di istruzioni
Elenco dei parametri: <tipoP1> <nomeP1>, <tipoP2> <nomeP2>...
Dove:
- <tipoP1>, <tipoP2> ... sono tipi di dato
- <nomeP1>, <nomeP2> ... sono identificatori
Ci possono essere sottoprogrammi che NON hanno parametri, in questo caso si utilizzano le
parentesi vuote ().
Istruzione return: il corpo deve contenerne almeno una
Sintassi: return <espressione>;
Dove:<espressione> deve restituire un valore compatibile con il tipo del risultato
Semantica: l’esecuzione dell’istruzione return interrompe l’esecuzione della funzione.
Funzioni Predefinite: sono quelle già fornite dal linguaggio o da specifiche librerie
Per poterla utilizzare devo conoscere:
- il nome della funzione (sin)
- il numero e il tipo degli argomenti (1 argomento di tipo double)
- il tipo del risultato restituito (double)
Definizione di Procedure
Sintassi: void <nome> (<parametri>)
<corpo>
Dove:
- void è una parola riservata del linguaggio
- <nome> è un identificatore
- <parametri> è l’elenco dei parametri
- <corpo> è un blocco di istruzioni
Parametri standard (o “per valore”): <tipoPar> <nomePar>
Parametri per riferimento: <tipoPar> & <nomePar>
Semantica: i parametri per riferimento possono essere utilizzati per modificare i
corrispondenti argomenti, i parametri standard no
Procedure Predefinite: Sono quelle già fornite dal linguaggio o da specifiche librerie.
Per poterla utilizzare devo conoscere:
- il nome della procedura (getline)
- il numero e il tipo degli argomenti (1 argomento di tipo istream, 1 argomento di tipo
string)
- il fatto che il secondo argomento viene modificato.
Chiamata di Funzioni
Sintassi: <nomeFunzione>(<arg1>, <arg2>,...<argn>)
Dove:
- <nomeFunzione> è il nome della funzione
- <arg1>, <arg2>, ...<argn> sono gli argomenti
Argomenti: espressioni generiche, in particolare costanti simboliche o numeriche, oppure
variabili, devono corrispondere in numero e ordinatamente in tipo con i parametri.
In realtà possono anche essere a loro volta parametri.
Chiamata di Procedure
Sintassi: <nomeProcedura>(<arg1>,<arg2>,...<argn>);
Dove:
- <nomeProcedura> è il nome della procedura
- <arg1>, <arg2>, ...<argn> sono gli argomenti
Argomenti: l’argomento è una variabile del modulo chiamante, oppure è un parametro del
sottoprogramma chiamante.
5
ARRAY: sono funzionalità dei linguaggi di programmazione che consentono di dichiarare con
un’unica istruzione molte variabili dello stesso tipo e di manipolarle in modo più efficace
nelle istruzioni. Gli array consentono di passare tutte le variabili ai sottoprogrammi
attraverso un unico parametro. Inoltre, il meccanismo di nomi consente di
snellire le operazioni utilizzando i cicli (nomi uguali con un indice intero che cambia).
Gli array possono avere molte dimensioni. Gli array ordinari hanno un’unica dimensione
(collezione lineare di variabili) e gli array bidimensionali hanno due dimensioni
(concettualmente: riga e colonna). Possono esistere array con più di due dim.
Scansione degli Array: operazione tipica sulle variabili dell’array, consiste nell’utilizzare un
ciclo per poter eseguire la stessa operazione su tutte le componenti dell’array. È possibile
effettuare le stesse operazioni su molte variabili scrivendo un’unica volta le istruzioni
corrispondenti.
Si utilizza un ciclo for con una variabile di controllo (es: i) che varia da 0 fino alla dimensione
dell’array (es: N). Il corpo contiene una istruzione che agisce sulla componente i-esima
dell’array (es: temperature[i])
Array e Stringhe
Il tipo string sequenze di caratteri di lunghezza arbitraria. In effetti per certi versi una
variabile di tipo string è assimilabile ad un array, in particolare un array di variabili di tipo
char. I caratteri di una stringa sono manipolabili come variabili di tipo char.
Ha l’effetto di dichiarare 7
variabili, di cui 6 di tipo int:
matrice[0][0]
matrice[0][1]
matrice[0][2]
matrice[1][0]
matrice[1][1]
matrice[1][2]
Anche per gli array bidimensionali è possibile inizializzare le componenti alla dichiarazione:
inizializzazione “riga” per “riga”.
Es: int matrice[2][3] = { {1, -7, 6}, {12, 45, 6} }
Verifica di Condizioni
Condizione “locale”: condizione su un numero limitato di valori vicini della collezione
Condizione “globale”: condizione sulla collezione nel complesso
Differenza tra i due casi: la verifica di condizioni locali è algoritmicamente intuitiva, posso
effettuarla durante la scansione. La verifica di condizioni globali è meno intuitiva,
sembrerebbe che sia necessario esaminare tutti i valori contemporaneamente.
Attenzione allo sconfinamento: se la condizione locale richiede di ispezionare più di un
elemento alla volta, è necessario fermare il ciclo prima del solito.
Composizione di tecniche
Verifica che i numeri siano tutti diversi, per la soluzione posso comporre due tecniche
Algoritmiche: conteggio (conto il numero di occorrenze di un elemento della giocata) e
verifica di condizione globale per riduzione a condizione locale (non esiste un numero che
compare più di una volta).
6
1
La storia di MatLab ha origine negli anni '70 presso l'Università del Nuovo Messico sotto la
guida di Cleve Moler. Inizialmente, l'obiettivo era fornire agli studenti un modo per utilizzare
le librerie di calcolo numerico senza la necessità di programmare in FORTRAN. MatLab è
l'acronimo di Matrix Laboratory.
Successivamente, Cleve Moler ha fondato la società MathWorks nel 1984. La società ha
riscritto MatLab in linguaggio C e ha avviato la commercializzazione del software.
Attualmente, MatLab è diventato un prodotto commerciale e ha raggiunto la versione 9.x
nel 2020. È una piattaforma molto ricca per la programmazione e il calcolo.
Oltre a MatLab, esistono anche dei "cloni" open-source come Octave e FreeMat, che
offrono funzionalità simili. Octave è un progetto GNU attualmente attivo e supporta
Windows, Linux e MacOS, mentre FreeMat è un progetto fermo al 2013.
MatLab ha diverse "anime" o filosofie di utilizzo. Può essere utilizzato come linguaggio di
programmazione procedurale, consentendo agli utenti di scrivere codice e crearne nuove
funzioni. Offre un ambiente interattivo per il calcolo, simile a una calcolatrice
programmabile, dove è possibile inserire dati, eseguire operazioni e ottenere risultati.
Tutte le variabili in MatLab sono considerate array, anche gli scalari che sono considerati
array di dimensioni 1x1. MatLab fornisce operatori e funzioni che lavorano direttamente su
matrici, semplificando l'elaborazione e l'analisi dei dati.
2
L'utilizzo interattivo di MATLAB si svolge all'interno della finestra della console, che è simile
alla console di un sistema operativo. Durante una sessione di lavoro, gli utenti possono
impartire comandi utilizzando il prompt dei comandi e interagire con l'ambiente MATLAB
come se fosse una calcolatrice programmabile.
Nella console, è possibile eseguire assegnazioni di variabili utilizzando la sintassi
`<variabile> = <espressione>`, ad esempio `a = b + sin(c)`. È anche possibile chiamare
procedure con argomenti, ad esempio `plot(x)`, e utilizzare comandi per interagire con
l'ambiente come `help` e `doc`.
Le espressioni possono includere operatori aritmetici, funzioni predefinite e funzioni
definite dall'utente. Per ottenere aiuto sui comandi disponibili, è possibile utilizzare i
comandi `help <comando>` e ‘doc <comando>`. Il primo fornisce una breve descrizione del
comando, mentre il secondo apre la documentazione completa.
Una particolarità è rappresentata dalle istruzioni senza assegnazione, ad esempio `log(c)` o
`a + 1`. In questo caso, l'interprete assegna il risultato alla variabile predefinita `ans` con la
sintassi `ans = <espressione>`.
Durante l'utilizzo interattivo, l'interprete fornisce un feedback stampando i valori delle
variabili che vengono modificate a seguito di un'istruzione. È possibile disabilitare il
feedback aggiungendo `;` alla fine dell'istruzione.
La sessione di lavoro può essere assimilata alla scrittura di un programma, in cui le istruzioni
vengono eseguite una per una. Le variabili vengono dichiarate man mano che vengono
utilizzate.
È anche possibile salvare e caricare dati o l'intero ambiente di lavoro in un file, utilizzando i
comandi `save` e `load`. Ad esempio, `save nomefile.mat` crea un file contenente lo stato
del workspace, che può essere successivamente caricato utilizzando `load nomefile.mat`.
MATLAB aggiunge automaticamente l'estensione `.mat` ai file salvati, mentre Octave non lo
fa. È possibile salvare singole variabili specificando i nomi delle variabili nel comando `save`.
3
MATLAB offre un linguaggio procedurale interpretato e un ambiente interattivo per il
calcolo.
Procedura per la scrittura di un codice:
- l’utente scrive il codice di un programma (con l’editor del MatLab o un altro editor)
- lo salva in un file <nome>.m (estensione di MatLab)
- lo esegue dall’ambiente interattivo digitando il comando <nome> (senza .m)
- l’utente interagisce con il programma fornendo i dati in ingresso e ottenendo attraverso
l’ambiente interattivo i dati in uscita
Elementi di Base
Commenti: linee precedute da %. Le righe iniziali di commento di un file .m vengono
visualizzati dal comando <help> (es: help cerchio)
MatLab è un linguaggio debolmente tipato, orientato agli array dinamici.
Linguaggio debolmente tipato: le variabili possono essere utilizzate senza essere dichiarate.
Il tipo di dato viene deciso al primo utilizzo, sulla base del valore che gli viene assegnato.
Ma attenzione: tutte le variabili sono sempre considerate array.
Utilizzo del ; il punto e virgola NON è il separatore tra le istruzioni in MatLab, serve a
sopprimere l’output interattivo.
Istruzione MatLab (senza ; finale): dopo l’esecuzione stampa un resoconto delle variabili
modificate sullo standard output, aggiungendo il ; il resoconto viene soppresso.
Identificatori riservati
- i, j (vengono usati per i numeri complessi)
- pi: pigreco, costante predefinita
- ans: variabile predefinita
- Inf, -Inf: valore infinito superiore ed inferiore
- NaN: valore non numerico
Espressioni:
- +, -, *, /, ^ (elevamento a potenza)
- \ : divisione inversa (a \ b = b / a)
- &&, II, ~ (ATTENZIONE al not come tilde) NOTA: è possibile usare anche & e |
- ==, ~=, >, <, >=, <= (tilde: ALT 5)
Strutture di Controllo
Strutture di controllo in MatLab: if-then e if-then-else, for e while.
Strutture condizionali
if <condizione> if <condizione1>
<istruzioni> <istruzioni>
[else [elseif <condizione2>
<istruzioni>] <istruzioni>]
end [else
<istruzioni>]
end
Strutture iterative
4
I sottoprogrammi in MATLAB includono procedure e funzioni, entrambe dichiarate con la
parola chiave "function". Possono avere parametri in ingresso e valori in uscita (le
procedure sono funzioni senza valori in uscita).
Le funzioni che restituiscono più valori possono essere utilizzate per simulare il
comportamento dei parametri per riferimento.
Le regole di visibilità in MATLAB prevedono che ogni funzione abbia dati locali, inclusi
parametri e variabili locali. Per utilizzare variabili globali, è necessario dichiararle con la
parola chiave "global".
L'approccio alla programmazione modulare in MATLAB prevede la creazione di una
collezione di funzioni, organizzando il codice in modo modulare. È possibile adottare due
approcci: tutto in un unico file o utilizzare il collegamento dinamico tra file.m contenenti le
funzioni. È anche possibile creare librerie MATLAB che contengono un insieme di file .m.
È possibile eseguire un programma MATLAB digitando il nome della funzione principale
nell'ambiente interattivo o utilizzando il collegamento dinamico tra file.m presenti nella
directory di lavoro o nelle librerie configurate.
5
Tipi strutturati di MATLAB:
- gli array (tipo principale)
- le stringhe (array di caratteri).
- "cell array", che sono array di componenti con tipi diversi.
Array:
- Gli array in MATLAB sono strutture di dati dinamiche con indicizzazione a base 1.
- È possibile lavorare con gli array componente per componente o manipolare l'intero array
in una singola volta.
Inizializzazione degli array:
Tutto in una volta:
- I modo: elenco esplicito dei valori. A = [0 0; 0 0] (oppure A = [0, 0; 0, 0])
- II modo: solo l’ultima componente. A(2, 2) = 0
- III modo: funzione predefinita. A = zeros(2, 2)
Tuttavia, la vettorizzazione può essere complessa e il codice risultante può essere meno
leggibile rispetto all'approccio tradizionale. È importante comprendere i concetti alla base
della sintassi della vettorizzazione per interpretare il codice complesso. La vettorizzazione è
particolarmente efficace quando si manipolano dati di grandi dimensioni, mentre in altri
casi può essere preferibile utilizzare l'approccio tradizionale più semplice.
Per accedere agli elementi di una matrice, è possibile utilizzare gli indici tradizionali
`A(<riga>, <colonna>)` o l'indicizzazione lineare `A(<posizione>)`, dove la posizione
rappresenta la sequenza lineare degli elementi della matrice per colonne. È importante
notare che in MatLab ogni singolo elemento è un array 1x1.
Considera l’array come una sequenza lineare di elementi scalari in cui la posizione di ciascun
elemento si determina leggendo la matrice per colonne.
L’elemento 1, 1 è in posizione 1
L’elemento 2, 1 è in posizione 2 (1o elemento della 2a riga, 2o elemento della 1a riga)
Array di Indici
Sintassi generale: vettori di indici: A(<array>, <array>), indicizzazione lineare: A(<array>)
È un modo per individuare le componenti dell’array che voglio elaborare, il risultato è un
array di espressioni del tipo A(n, m) oppure A(n) che corrisponde ad un gruppo di
componenti dell’array da elaborare.
Indicizzazione lineare: espressioni del tipo A(<array>)
Semantica: primo passo: espandere l’array di indici per ottenere un vettore P = [P(1), P(2), ...
, P(n)] di n indici
secondo passo: generare il vettore risultato vars = [A(P(1)), A(P(2)), ... , A(P(n))]
L'introduzione tratta dei tipi strutturati in MATLAB, in particolare degli array, delle stringhe e
dei "cell array" (array di componenti con tipi diversi). Successivamente, si passa ad
affrontare gli array in modo più dettagliato. Gli array in MATLAB sono strutture di dati
dinamiche indicizzate a partire da 1. Ci sono due modi principali per lavorare con gli array:
componente per componente o con operazioni sull'intero array. Viene presentata una breve
introduzione all'inizializzazione degli array, con diversi metodi come l'inizializzazione
componente per componente o tramite funzioni predefinite come "zeros". Vengono forniti
esempi di dichiarazione esplicita dei valori degli array, dichiarazione dell'ultima componente
e l'uso di funzioni predefinite come "ones", "rand" e "eye". Altre funzioni utili sugli array
sono illustrate, come "length", "size" e "numel". Viene sottolineato che le funzioni
matematiche sugli array possono lavorare componente per componente o per colonne, a
seconda del tipo di funzione. Vengono forniti esempi di funzioni non aggregative come "sin"
e "abs", e di funzioni aggregative come "sum", "max", "min" e "mean". Gli operatori sugli
array sono presentati, con l'attenzione a utilizzare gli operatori di "array operations"
(preceduti da un punto) per operare su singoli valori degli array. Viene menzionato che le
stringhe in MATLAB sono array di caratteri, e vengono forniti esempi di estrazione di
sottostringhe e concatenazione di stringhe. Infine, vengono evidenziate alcune differenze
tra MATLAB e il linguaggio C++, come il fatto che MATLAB è un linguaggio interpretato,
debolmente tipato e con una vasta libreria di operazioni sugli array. Si menziona anche la
vettorizzazione avanzata in MATLAB per la programmazione su array.
Il testo discute l'aspetto avanzato di MATLAB chiamato "vettorizzazione", che è una tecnica
di programmazione basata sull'utilizzo di operatori e funzioni specifiche di MATLAB per
lavorare su matrici senza l'uso di cicli. La vettorizzazione consente di eseguire operazioni
efficienti su matrici di grandi dimensioni.
Infine, vengono introdotti gli operatori di accesso e modifica delle matrici, inclusi gli indici
per accedere agli elementi specifici di una matrice e l'indicizzazione lineare per trattare
l'array come una sequenza lineare di elementi. Viene fornito un esempio di come utilizzare
gli array di indici per accedere a elementi specifici di una matrice.
Infine, viene illustrato l'utilizzo della funzione "find()" per la ricerca di un elemento in un
array monodimensionale e la conversione degli indici lineari restituiti da "find()" in indici
bidimensionali per le matrici bidimensionali.
Questo testo riassume diversi concetti relativi all'utilizzo di MATLAB per tabulare una
funzione, disegnare il grafico di una funzione e risolvere un sistema lineare.
Questo riassunto fornisce una panoramica delle principali considerazioni e comandi relativi
alla tabulazione di funzioni, al disegno di grafici e alla risoluzione di sistemi lineari
utilizzando MATLAB.