Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
vuoi
o PayPal
tutte le volte che vuoi
Tipi di errori:
Syntax Errors: errori di sintassi; utilizzo errato del linguaggio di programmazione (es. definire in una funzione un argomento di ingresso che poi non verrà utilizzato; utilizzare una variabile prima di inizializzarla; ecc...) o refuso (es. assenza di virgolette).
Runtime Errors: errori che emergono durante l'esecuzione (es. riferimento di un elemento di un vettore che non esiste o moltiplicare due matrici non moltiplicabili tra loro).
Logical Errors: errori logici ovvero il programma funziona ma porta a risultati errati; più difficili da individuare in quanto il programma si esegue ma il problema sta nella logica in generale o nell'interpretazione che il programmatore ha dato circa la funzione del programma stesso; per individuarli si fanno dei test a campione. (es. per matlab è perché la prima cosa che fa è valutare se x è maggiore di 3; essendo x=-2 3 6 perciò matlab restituisce true)Warning (avvertimento) durante la compilazione di eventuali errori che si stanno commettendo. Permette di visualizzare a video l’esecuzione di una funzione (utile per individuare eventuali errori). Alternativamente si possono utilizzare i breakpoint per eseguire una funzione passo per passo e accedere al workspace locale. Stringhe Stringa: sequenza di caratteri delimitata da due virgolette; è un array di caratteri (char array) ovvero un vettore o una matrice (se le stringhe, che devono però avere lo stesso numero di caratteri ovvero di colonne, sono su più righe); può contenere lettere, numeri, segni di punteggiatura, spazi, caratteri di controllo. Si può utilizzare su di essa la funzione length o size, ottenerne la trasposta, accedere a un suo componente in una determinata posizione, concatenare più stringhe, convertirne le minuscole in maiuscole e viceversa, rimuoverne gli spazi. Posizioni in cui inizia tale parola. String array: sequenza di stringhe delimitate da doppie virgolette; array, ovvero vettore o matrice, di stringhe. Sottostringa: porzione di una stringa. Algoritmi di ordinamento Algoritmi di ordinamento: si occupano di ordinare un insieme di elementi secondo un criterio prestabilito; sono iterativi (cicli) e seguono un preciso criterio di ordinamento basato sul confronto; i più semplici sono quelli che ordinano le sequenze numeriche in ordine crescente e sono di 3 tipi: - Per selezione (Selection Sort): ad ogni iterazione si seleziona l'elemento più piccolo che viene spostato nella posizione i-esima. Dato il vettore di lunghezza n: - Ad inserimento (Insertion Sort): iniziando dal secondo elemento confronta l'elemento che si trova nellaposizione k con quelli precedenti già ordinati e lo inserisce di modo che rispetti l’ordine crescente, facendoscalare gli elementi che lo seguiranno verso destra. L’algoritmo: Il Teorema del Campionamento, formulato da Shannon Nyquist, permette di campionare un segnale in codice binario e renderlo "comprensibile" all'elaboratore. Un segnale periodico può essere scomposto in una sommatoria infinita di segnali sinusoidali, noti come armoniche, utilizzando la serie di Fourier. Lo spettro di un segnale rappresenta il dominio della frequenza del segnale e viene ottenuto componendo il segnale nelle sue componenti basilari. Le frequenze delle armoniche, che sono multipli di una frequenza di riferimento, costituiscono la banda del segnale. La Trasformata di Fourier permette di ricavare lo spettro del segnale a partire dal segnale in funzione del tempo. Se il tempo è discreto, si utilizza la DFT (Discrete Fourier Transform), mentre se si utilizza la FFT (Fast Fourier Transform). Dato un segnale analogico a tempo continuo e a banda limitata, è possibile rappresentarlo completamente (e eventualmente ricostruirlo) utilizzando un segnale a tempo discreto derivato da esso. derivato per tramite di un’operazione di campionamento; se la frequenza di campionamento è maggiore o uguale al doppio della banda del segnale allora il segnale è rappresentato esaustivamente dai suoi campioni; grazie ai filtri passa-basso il segnale originale può essere ricostruito. Filtro passa-basso (prima era analogico, ora è digitale, il che permette di variare più facilmente il filtro): taglia tutti i segnali che hanno una frequenza maggiore di una frequenza fissata detta di taglio. Quantizzazione: permette di trasformare i segnali analogici in bit; associa ad ogni valore campionato un valore numerico memorizzabile dall’elaboratore che gli si avvicina maggiormente; perciò memorizzando in sequenze di bit un segnale si commette un errore che è tanto più grande quanti meno sono i bit a disposizione. Il segnale perciò è rappresentato in maniera esaustiva nelle sequenze numeriche a meno di un errore dovuto Al processo di campionamento e di quantizzazione; esistono convertitori analogico-digitale e digitale-analogico (i secondi permettono ad esempio di creare musica elettronica). Circuito universale: Analog Signal ADC Digital Signal Processing (microprocessore) DAC Analog Signal La trasformazione del segnale dipende da un algoritmo. Microprocessori di diverse categorie: OSS DSP e MCU vengono utilizzati in modo congiunto: MCU si interfaccia col mondo esterno e fa le prime Elaborazione e il DSP esegue il grosso dei calcoli. Possono avere architettura di Von Neumann o di Harvard: Le istruzioni dei microprocessori possono essere: Complessità computazionale Necessità di stabilire quale algoritmo è il migliore per un determinato funzionamento. Complessità computazionale: misura oggettiva della bontà/efficienza di un algoritmo, basata su parametri che ne consentano un confronto con altri algoritmi; tiene conto della quantità minima di risorse sufficienti per il calcolo: tempo (complessità temporale) e spazio nella memoria. (complessità spaziale). Complessità temporale: la misura del tempo impiegato da un compilatore per eseguire l'algoritmo da valutare non è assoluta, in quanto può dipendere da diversi fattori: dimensione e caratteristiche dei dati di ingresso (es. possono richiedere di ripetere più volte un loop), tipo di linguaggio usato (deve o meno compilare), qualità della traduzione in sequenze di bit, velocità dell'elaboratore, tipo di microprocessore e di architettura utilizzati. Per valutare esclusivamente l'efficienza di un algoritmo, si considera il numero delle singole operazioni elementari (aritmetiche, logiche, di confronto, di assegnazione) eseguite dal programma (nello specifico di un solo sottoinsieme di operazioni che ne costituiscono la parte centrale e che sono detti "passi base") in funzione della dimensione n dei dati di ingresso. Noto il numero di passi e la lunghezza n di un vettore di ingresso, assumendo che Per eseguire un singolo passo si impiega lo stesso tempo, si può calcolare il costo temporale di un determinato algoritmo. La valutazione viene solitamente eseguita nel worst case (ovvero quando i dati di ingresso sono i più sfavorevoli, non solo in termini di dimensioni) e utilizzando l'algebra degli O grandi. Nel caso di programmi più semplici si può valutare la complessità temporale di un algoritmo in maniera diretta:concatena le stringhe s e s senza rimuovere alcuno spazio.
[s s ]
1 21 2
concatena le stringhe s e s rimuovendo gli spazi della seconda stringa.
strcat (s ,s )
1 21 2
mette s in una riga e s in quella successiva aggiungendo gli spazi necessari per rendere le due
char(s ,s )
1 21 2
stringhe di pari dimensioni.
crea una stringa di n spazi.
blanks(n)
elimina tutti gli spazi dalla stringa s.
deblank(s)
pone tutti i caratteri della stringa s in caps lock.
upper(s)
pone tutti i caratteri della stringa s in carattere minuscolo.
lower(s)
compara le due stringhe e
strcmp (s ,s )
1 2
restituisce 1 se sono uguali e 0 se non lo sono.
ricerca la lettera x nella stringa s
strfind(s ,'x')
11
e restituisce un vettore i cui elementi sono le posizioni in.
cui si trova la x in s
1
ricerca la sequenza di
strfind(s1, 'stonks')
caratteri "stonks" nella stringa s e restituisce un vettore
1
i cui elementi sono le