Scarica Fondamenti di informatica e più Appunti in PDF di Fondamenti di informatica solo su Docsity! 1 LEZIONE 2, 2/03/2022 IL DATO: • Descrizione codificata di un’informazione • È un valore che può essere elaborato e/o trasformato da un elaboratore elettronico • Oggetto specifico su cui interviene l’algoritmo • Vanno descritti in maniera precisa e ordinata BIT: • Zeri e uno che creano un pannern chiamato bit (binary digit) • Astrazione • Le stringhe di bit sono flussi di zeri e uno dette flussi binari • Le rappresentazioni sono presentate tramite MEMORIA: • Costituita da unità gestibili dette celle costituita da 1 byte (8 bit) • L’estremità sinistra è detta ordine alto (bit più significativo), quella di destra è l’ordine basso NOTAZIONE BINARIA e RAPPRESENTAZIONE DEI VALORI: • Usa solo cifre 0 e 1 • Bisogna definire un pattern per essere sicuri di avere a disposizione e riconoscere l’informazione completa LEZIONE 3, 4/03/2022 ALGORITMO: • Insieme ordinato di operazioni non ambigue ed effettivamente non computabili che, quando eseguito, produce un risultato e si arresta in un tempo finito • Caratteristiche: o Atomicità: costituito da passaggi semplici o Non ambiguità: i passaggi devono essere ben definiti e non devono cambiare in funzione della macchina che lo esegue o Effettivamente computabile: deve esistere un processo computazionale in grado di eseguire l’algoritmo o Finezza: costituito da un numero finito di passaggi o Terminazione: deve terminare dopo un tempo finito o Efficienza: arrivare alla soluzione del problema nel modo più veloce possibile e sfruttando la minor quantità di risorse possibili o Il linguaggio dell’algoritmo deve essere adeguato alle caratteristiche del suo esecutore DIAGRAMMI DI FLUSSO (FLOW CHART) • Rappresentazione grafica dei passi dell’algoritmo e serve per la loro descrizione • Ogni istruzione è rappresentata all’interno di un blocco elementare con forme diverse a seconda del tipo di istruzione: o Trasferimento di informazione (lettura dati, scrittura risultati, visualizzazione di dati intermedi) o Esecuzione di calcoli o Assunzione di decisioni o Esecuzione di iterazioni 2 • I blocchi sono collegati da linee di flusso (munite di frecce) che indicano il susseguirsi di azioni elementari • Forme dei blocchi o Inizio e fine à cerchio/ovale o Lettura dei dati e azioni à quadrato/rettangolo o Decisioni e confronti à rombo • Per definire l’algoritmo: 1) Condurre un’attenta analisi del problema 2) Individuare i possibili ingressi 3) Precisare le uscite 4) Definire completamente e dettagliatamente la sequenza dei passi che portano alla soluzione 5) Dividere il problema in sotto problemi di dimensione inferiore à posso governare meglio le complessità 6) Risolvere i sotto problemi 7) Combinare le soluzioni dei sotto problemi per ottenere la soluzione al problema principale LEZIONE 4, 9/03/2022 LINGUAGGIO DI PROGRAMMAZIONE: • Consentono la descrizione degli algoritmi, attraverso il linguaggio posso scrivere gli algoritmi sotto forma di programmi che devono essere eseguiti dal calcolatore • Tabella ASCII: mostra la corrispondenza tra numero e carattere • Variabili (contenitori di dati attraverso cui si possono varie operazioni) o Lessico: vocabolo del linguaggio o Sintassi: struttura delle istruzioni o Semantica del linguaggio: significato delle istruzioni o Il processo di creazione si chiama dichiarazione (in funzione di ciò che dichiaro ho una locazione diversa dei byte), riservo un’aerea specifica per un dato specifico, o inserisco un valore nella variabile si dice assegnazione (variabile a sinistra poi = e il valore da assegnare) à il sistema converte il dato in base binaria o L’inizializzazione di una variabile è la prima associazione di una variabile a un valore, è il primo valore noto associato o Mantiene in memoria un dato o I nomi delle variabili sono caratteri alfanumerici e underscore: il primo valore della variabile deve essere o una lettera o l’underscore FUNZIONE: n.b. le stringhe vanno messe tra virgolette • Detta anche routine • Costrutto sintattico di un determinato linguaggio di programmazione che permette di raggruppare in un programma una sequenza di istruzione in un univo blocco per espletare una specifica operazione e/o elaborazione sui dati del programma che da determinati input restituisce un output • Nome_funzione(arg1, arg2, …) • I nomi delle funzioni sono caratteri alfanumerici e underscore: il primo valore della funzione deve essere o una lettera o l’underscore, la funzione dopo il nome ha sempre delle parentesi tonde, nelle variabili no • disp(): o Stampa a video un valore (se esso è una variabile ne stampa il contenuto, se è una stringa (testo) ne stampa il testo all’interno della stringa) o A=10 disp(A) à 10 o Disp(“hello”) à hello • fprintf(): 5 LEZIONE 6, 16/03/2022 STRUTTURE ITERATIVE: • For: numero di iterazioni è noto a priori for variabile = m : s : n blocco_istruzioni (blocco di codice che verrà ripetuto) end o M: valore iniziale della variabile o S: valore dell’incremento o N: valore finale che la variabile deve assumere e/o non deve superare • While: numero di iterazioni non è noto a priori, il ciclo finisce quando una certa condizione è soddisfatta while condizione blocco_istruzioni end • Break blocca il ciclo se l’affermazione è falsa o anche nel mezzo, saltando all’end finale LEZIONE 7, 30/03/2022 CREARE UNA MATRICE: 1. Scrivere in fila le righe poi a capo senza virgola per creare le colonne 2. Scrivo in fila le righe poi ; per scrivere un’altra colonna Ad esempio A=[1, 2, 3, 4; 5, 6, 7, 8] oppure A=[1, 2, 3 4, 5 ,6] • Posso avere anche zeros, ones, e rand à zeros/one/rands=(rumero righe, numero colonne) • Funzione eye=(numero righe, numero colonne) crea una matrice identità • Cat(n, A, B, C, …) concatena le matrici lungo la dimensione n (n=1 righe, n=2 colonne) • Se voglio trovare un valore devo indicare x=(r, c) dove x è la matrice, r è l’indice di riga e c quello di colonna • x ( r , : ) seleziono l’intera riga r • x ( : , c ) seleziono l’intera colonna c • per eliminare una colonna o una riga A( n, : )=[ ]à cancella una riga n. A( :, n )=[ ] à cancella una colonna n • trasposizione di una matrice x à y=x ` • max (A) e min(A) trovano il massimo o min della matrice per ogni colonna, se voglio trovare il massimo di tutta la matrice devo fare max(max(A)) • posso anche avere mean che trova la media di ogni colonna, per trovare la media di una riga devo implemetare mean (A,n) con n numero della riga • sum (A) somma tutti i valori • sum(A, dim) somma gli elementi di A per colonna se dim=1, per riga se dim=2 • sort(A) ordina ogni colonna della matrice in maniera crescente • size(A) restituisce un array riga contenente il numero di righe e di colonne • length(A) dice il numero massimo tra righe e colonne • numel(A) dice il numero di elementi • find(A) mi da un array con gli indici dei numeri non nulli (andando per riga dall’alto verso il basso) • any(A) mi restituisce un array di zeri e uni se in una colonna c’è almeno un numero non nullo • any/A, dim) specifico se voglio riga o una colonna per colonna se dim=1, per riga se dim=2 • fliplr() è la funzione che riflette la matrice in orizzontale • diag() seleziona gli elementi sulla diagonale principale • diag(fliplr()) seleziona la diagonale secondaria di una matrice 6 • posso sommare o sottrarre le matrici e avrà una matrice risultato • moltiplicazione scalare tra matrici e con un vettore con l’operatore * • moltiplicazione elemento per elemento uso l’operatore .* LEZIONE 8, 1/04/2022 NUMERI DECIMALI I numeri in virgola mobile sono la rappresentazione approssimata dei numeri reali e dei dati usati dai processori per compiere operazioni matematiche à in memoria non ho esattamente il numero che vedo ma una rappresentazione approssimata I numeri in virgola fissa viene usata in base 2 e può essere considerata l’analogo binario della notazione scientifica in base 10 NUMERO IN VIRGOLA MOBILE: • costituito da: 𝑎 = 𝑀 × 𝑏! o mantissa M o campo esponente e • errori principali: o arrotondamenti § numeri non rappresentabili (0,1 non sono soggetti ad arrotondamenti) § arrotondamento di operazioni aritmetiche o assorbimento o cancellazione o overflow o underflow o operazioni impossibili o problematiche nelle uguaglianze: § per ovviare al problema posso indicare a quale decimale arrotondare LEZIONE 9, 8/04/2022 FILE: • contenitori permanenti di informazioni • il sistema operativo li gestisce e li fa aprire, leggere, scrivere, ecc • prima di fare ogni azione bisogna verificare se il file è aperto correttamente (che sia esistente) comandi: • fopen o apre un file memorizzato nel percorso indicato da percorso_del_file e nella modalità di apertura specificata da modalita_apertura § la modalità di apertura può essere: • ‘w’ scrittura (sovrascrittura) • ‘r’ lettura • ‘w+’ o ‘r+’ scrittura e lettura • ‘a’ append à apre un file esistente o crea un nuovo file in scrittura posizionandosi alla fine del file (non sovrascrivo il file) o Restituisce il valore fid (file identifider o puntatore), cioè un indicatore associato al file aperto • fclose o Chiude il file identificato da fid dopo aver fatto le operazioni necessarie o È necessario chiudere il file (vedi la rimozione sicura delle chiavette) perche altrimenti lascio in sospeso il puntatore 7 o Ci sono dei buffer che raccolgono le azioni di lettura e scrittura, se non chiudo le operazioni nel buffer non vengono implementate al file • Operazioni per la scrittura: (n.b. il file deve essere precedentemente aperto con fopen) o Fprintf: scrive su file secondo un formato specificato dall’utente o fwrite: scrive un array passato come parametro su un file specificato • operazioni per la lettura: (n.b. il file deve essere precedentemente aperto con fopen) o fread: legge direttamente un’array, di lunghezza specificata, da un file indicato tramite parametro o fscanf: legge da file, specificando esplicitamente il formato dei dati • passi per copiare un file in un altro: o aprire il file dorgente e file destinazione § fid=fopen(percorso_del_file, modalita_apertura); o leggere le linee del file sorgente, una per una, e memorizzarle in una variabile § linea= fgetl(fid); o scrivere le linee nel file di destinazione § fprintf(fid, formato, variabili); o chiudere il file sorgente e destinazione § fclose(fid) • ischar(linea) dice se una riga ha dei caratteri (quindi se è leggibile o se è finito il testo) • devo fare un if che dice se un file è corretto, devo fare un permesso di scrittura e di lettura • importdata: importa dati testuali ecc ecc senza che necessariamente il file sia stato precedentemente aperto perché lo apre in automatico, restituisce anche un file strutturato suddiviso in dati e testo LEZIONE 10, 13/04/2022 • con fread o fwrite devo mettere (fileID, 1, ‘double’) dove 1 è il valore dello spostamento (può essere qualsiasi altro numero) • fseek sposta il puntatore del file dove voglio io o eof: end ond file o bof: beginning of file • ftell dice quanti bit si hanno in un file à per avere il numero di elementi devo dividere per 4 se gli interi sono gestiti d a 32 bit, se ho 64 bit devo dividere per 8 • isfof siamo a fine del file (usato nella modalità binaria) • fgets legge tutta la riga e l’andare a capo • fgetl legge solo la riga non l’andare a capo • double mi restituisce il codice ASCII di un carattere • strcat(double) presa una stringa di numeri la traduce nell’effettivo valore numerico LEZIONE 11, 20/04/2022 ARCHITETTURA DI VON NEUMANN: (modello semplificato dei calcolatori moderni) • memoria centrale: memorizza e fornisce l’accesso ai dati • unità centrale di elaborazione (CPU): esegue istruzioni per l’elaborazione dei dati e svolge funzione di controllo • interfacce di uscita e ingresso (periferiche): collegano le periferiche con il calcolatore • bus: trasferisce dati e info di controllo tra le componenti suddette CPU: • dispositivo sincroni regolato dal clock che dice quante operazioni si possono fare nell’unità di tempo • lavora a tot GHz • tre elementi fondamentali: o ALU: effettiva unità di memoria