Docsity
Docsity

Prepara i tuoi esami
Prepara i tuoi esami

Studia grazie alle numerose risorse presenti su Docsity


Ottieni i punti per scaricare
Ottieni i punti per scaricare

Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium


Guide e consigli
Guide e consigli


Appunti Informatica b, Appunti di Reti informatiche

Appunti completi delle lezione del professore Federico Terraneo per la materia informatica b. Quindi informatica per ingenera meccanica/energetica. Linguaggio C++ e Matlab con teoria. Anno 2023/2024

Tipologia: Appunti

2023/2024

Caricato il 28/03/2026

guido-marini
guido-marini 🇮🇹

1 documento

1 / 31

Toggle sidebar

Questa pagina non è visibile nell’anteprima

Non perderti parti importanti!

bg1
1
Informa(ca
Che cos’è l’informa2ca?
È una scienza, ovvero una conoscenza sistema2ca di tecniche/metodi.
In par2colare, è la scienza che si occupa della rappresentazione e del processamento efficiente ed
automa2co dell’informazione.
Due conceA chiave:
Rappresentazione dell’informazione (da2)
Elaborazione dell’informazione (algoritmi)
L’informa2ca è una scienza astraJa, ma che ha trovato nel calcolatore eleJronico lo strumento
aJualmente più adaJo al processamento dell’informazione. In passato (o per certe applicazioni
par2colari), l’elaborazione dell’informazione è stata effeJuata con altre tecnologie, come quella
meccanica o anche pneuma2ca.
L’eleJronica si è prestata facilmente alla miniaturizzazione, rendendo disponibili disposi2vi di
calcolo sempre più poten2, piccoli, a basso consumo energe2co.
AJualmente, si possono costruire su un singolo chip in silicio più di 10 miliardi di transistor.
Come riferimento, un circuito in gradi di sommare due numeri a 8 bit richiede circa 250 transistor.
Cosa è l’informazione?
L’informazione contenuta in un messaggio misura quanto questo ci può sorprendere.
Un modo per misurare questa cosa è capire quanto sia difficile indovinare
l’informazione.
L’informa2ca si occupa del processamento automa2co dell’informazione. Occorre quindi saper
codificare l’informazione in modo compa2bile con lo strumento di calcolo scelto.
Tre 2pi di codifica vis2:
- riempi
- riempi
- codifica a virgola mobile
Codice binario
Il calcolatore eleJronico funziona u2lizzando la logica binaria, quindi è in grado di processare
l’informazione in un alfabeto di solo due simboli, 0 e 1.
Il grande successo dell’informa2ca è dovuto allo sviluppo di metodi in grado di codificare
informazioni in una vas2tà di domini applica2vi.
Nozioni su conversione numeri naturali in codice binario, senza usare virgole basandosi su numeri
0 ed 1.
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18
pf19
pf1a
pf1b
pf1c
pf1d
pf1e
pf1f

Anteprima parziale del testo

Scarica Appunti Informatica b e più Appunti in PDF di Reti informatiche solo su Docsity!

Informa(ca Che cos’è l’informa2ca? È una scienza, ovvero una conoscenza sistema2ca di tecniche/metodi. In par2colare, è la scienza che si occupa della rappresentazione e del processamento efficiente ed automa2co dell’informazione. Due conceA chiave: Rappresentazione dell’informazione (da2) Elaborazione dell’informazione (algoritmi) L’informa2ca è una scienza astraJa, ma che ha trovato nel calcolatore eleJronico lo strumento aJualmente più adaJo al processamento dell’informazione. In passato (o per certe applicazioni par2colari), l’elaborazione dell’informazione è stata effeJuata con altre tecnologie, come quella meccanica o anche pneuma2ca. L’eleJronica si è prestata facilmente alla miniaturizzazione, rendendo disponibili disposi2vi di calcolo sempre più poten2, piccoli, a basso consumo energe2co. AJualmente, si possono costruire su un singolo chip in silicio più di 10 miliardi di transistor. Come riferimento, un circuito in gradi di sommare due numeri a 8 bit richiede circa 250 transistor. Cosa è l’informazione? L’informazione contenuta in un messaggio misura quanto questo ci può sorprendere. Un modo per misurare questa cosa è capire quanto sia difficile indovinare l’informazione. L’informa2ca si occupa del processamento automa2co dell’informazione. Occorre quindi saper codificare l’informazione in modo compa2bile con lo strumento di calcolo scelto. Tre 2pi di codifica vis2:

  • riempi
  • riempi
  • codifica a virgola mobile Codice binario Il calcolatore eleJronico funziona u2lizzando la logica binaria, quindi è in grado di processare l’informazione in un alfabeto di solo due simboli, 0 e 1. Il grande successo dell’informa2ca è dovuto allo sviluppo di metodi in grado di codificare informazioni in una vas2tà di domini applica2vi. Nozioni su conversione numeri naturali in codice binario, senza usare virgole basandosi su numeri 0 ed 1.

Posso rappresentare numeri 2**(M-1) Il modo più semplice per conver2re anche i numeri nega2vi è aggiungere un bit a sinistra che andrà a far variare il segno del numero. Il bit m-1 è quello più sinistra, che indica il segno del numero. 1 = - invece 0 = + Quando si converte un numero in codice binario bisogna conver2re, impegnando tu le “caselle” vale a dire che si u2lizzano 8 bit :

  • La prima “casella” a sinistra indica il segno
  • Le altre 7 sono il numero in sé Nel caso in cui un numero si converte riempendo meno caselle bisogna riempire le restan2 con degli 0. Codifica a virgola mobile Un numero in R può essere sempre scriJo in notazione esponenziale (ES = 123.45 = 1,2345•10**2) Il numero si chiama man2ssa: 1, Il 2 è deJo esponente o caraJeris2ca La codifica delle stringhe Per codificare una stringa basta codificare in sequenza ogni caraJere. Dato che il numero di caraJeri è limitato, basta enumerarli e assegnarli un numero corrispondente secondo una certa convenzione. Esempio: ASCII codifica ogni caraJere con un numero di bit à Limitata alla lingua inglese visto che non è in grado di rappresentare leJere accentate e nemmeno alfabe2 diversi da quello la2no. Piu semplicemente ogni leJera è rappresentata con una sequenza di 7 bit. E dunque possibile avere 128 caraJeri.

ArchiteJure e linguaggi per calcolatori La differenza tra una calcolatrice ed un computer è il faJo che la calcolatrice è progeJata per eseguire solo un insieme finito di funzioni, invece un computer è programmabile. Dato che la memoria può essere scriJa in ogni momento, è possibile estendere quello che può fare il calcolatore per risolvere problemi sempre nuovi, anche problemi che non erano nemmeno sta immagina2 quando il calcolatore è stato costruito. In questo corso non ci soffermeremo su uno specifico calcolatore, ma descriveremo un modello astraJo di calcolatore deJo macchina di von Neumann, composta da 4 componen2:

  • La CPU o Central Processing Unit, adibita a eseguire i comandi
  • La memoria centrale che la CPU u2lizza per accedere a da2 e programmi
  • Le periferiche che la CPU u2lizza per comunicare col mondo esterno
  • Il bus, una astrazione delle interconnessioni tra la CPU e memoria e periferiche La CPU è l’“esecutore” di algoritmi nella macchina di von Neumann. Ogni CPU è in grado di comprendere un insieme finito di istruzioni deJe instruc2on set. Agisce nel seguente modo:
  • Preleva una istruzione dalla memoria
  • Decodifica l’istruzione per comprendere di quale si traJa, tra quelle che conosce
  • Esegue l’istruzione richiesta
  • Torna al primo step I registri della CPU hanno una funzione par2colare:
  • Contatore di programma (PC): con2ene l’indirizzo di memoria dell’istruzione da eseguire
  • Registro istruzione corrente (CIR): con2ene l’istruzione da eseguire
  • Registro di stato (SR): con2ene informazioni sull’ul2ma operazione aritme2co/logica
  • (overflow, segno del risultato, zero...)
  • Registro indirizzi AR: connesso alla memoria tramite il bus, consente alla CPU di chiedere quale cella di memoria leggere/scrivere
  • Registro da2 (DR): connesso alla memoria tramite il bus, con2ene la parola da scrivere in memoria o la parola leJa dalla memoria Aritme2ca del calcolatore NB: In codice binario 1+1 = 0 e si riporta 1 alla riga successiva In caso di overflow, se si tronca al numero di bit inziale si ritrova lo stesso risultato. Dunque, bisogna ignorare l’overflow. L’overflow si constata quando la somma di due numeri concordi, da un risultato di segno opposto. NB: TuJo a sinistra il primo se 1 = nega2vo invece se 0 = posi2vo Vedere bene pagine 26 e dintorni

Linguaggi di programmazione per calcolatori Tali linguaggi, esaJamente come l’Italiano o l’Inglese, hanno una sintassi e una seman2ca. Il linguaggio naturale però può essere ambiguo, perché l’essere umano è in grado di inferire il senso giusto dal contesto. I linguaggi di programmazione invece sono molto più formali e privi di ambiguità perché il calcolatore è in grado solo di “eseguirli alla leJera”. Salendo ancora come astrazione troviamo i linguaggi ad alto livello, le cui istruzioni non si mappano 1 a 1 con le l’insieme di istruzioni della macchina. Una singola istruzione ad alto livello potrebbe tradursi anche in decine o cen2naia di istruzioni macchina: un intero soJoprogramma. Per esempio: la somma di due numeri potrebbe essere espressa con la seguente istruzione (dove a e b sono variabili): b = a + b C è un linguaggio: compilato, fortemente 2pizzato ed impera2vo Mathlab è un linguaggio: interpretato, non fortemente 2pizzato ed impera2vo Nei linguaggi fortemente 2pizza2 bisogna sempre il 2po delle variabili che non può cambiare nel corso del programma, al contrario dei linguaggi non fortemente 2pizza2. Le basi del C Anche prinq è una funzione, solo che in questo caso è un soJo-algoritmo chiamato dal main. prinq è un soJo-algoritmo “di libreria” nel senso che qualcuno lo ha già definito per noi, e verrà aggiunto al nostro programma nella fase di linking. Per poter usare algoritmi di libreria dobbiamo però includere la libreria corrispondente. #include include la libreria di input/output standard che comprende prinq e #include vanno messe tuJe in cima al file) return non è una funzione, ma una keyword del linguaggio C (parola chiave) che segna la terminazione dell’algoritmo. Al ritorno del main il programma termina.

I nomi delle variabili devono iniziare con una leJera o un “underscore” (traAno basso _). A par2re dal secondo caraJere possono anche contenere numeri. Non si possono chiamare due variabili con lo stesso nome. Il C è case sensi2ve, ossia considera come differen2 le maiuscole e minuscole: var, Var e VAR sono tre variabili diverse. Il C comprende i seguen2 2pi base, ognuno definito tramite delle keyword dedicate:

  • int interi con segno (solitamente a 32 bit)
  • unsigned int interi senza segno (solitamente a 32 bit)
  • float numeri a virgola mobile (solitamente a 32 bit)
  • double numeri a virgola mobile (solitamente a 64 bit)
  • char caraJere (solitamente a 8 bit)
  • short int interi con segno (solitamente a 16 bit)
  • long long int (solitamente a 64 bit) Per tuA i 2pi base, incluso char sono predefinite anche un certo numero di operazioni:
  • Operazioni aritme2che: somma, soJrazione, mol2plicazione, divisione: + - * /
  • Resto della divisione intera: %
  • Shorthand delle operazioni, esempio i++ che significa i=i+1, i+=2 che significa i=i+
  • Per i 2pi a virgola mobile, includendo la libreria math.h sono disponibili soJo forma di funzioni molte altre operazioni come log, sin, ... Inoltre sono definite le operazioni di cast (conversione fra 2pi). La sintassi di un cast è quello di meJere il 2po di des2nazione tra parentesi, per esempio: Esempio di un po’ di operazioni:

La funzione prinq:

  • È una funzione la cui firma acceJa un numero variabile di parametri.
  • Il primo parametro è forzatamente una stringa
  • Gli altri parametri possono essere di vari 2pi, ma devono essere specifica2 nella stringa usando delle stringhe di formaJazione o format strings. Elenco delle più̀ comuni format string:
  • %d per stampare interi
  • %f per stampare numeri a virgola mobile
  • %c per stampare caratteri
  • %s per stampare stringhe Per andare a capo nella funzione prinq si meJe: /n La funzione scanf:
  • È usata per chiedere valori all’utente dal terminale.
  • È una funzione la cui firma acceJa un numero variabile di parametri.
  • Il primo parametro è forzatamente una stringa con un elenco di format strings.
  • Gli altri parametri sono i valori da leggere, da specificare nella format string.
  • Per scegliere quale variabile definire bisogna inserire: & Alcuni caraJeri speciali u2lizzabili in C sono:
  • ‘\0’ terminatore
  • ‘\n’ a capo
  • ‘\t’ tab
  • ‘\r’ carriage return
  • ‘\b’ backspace Com’è struJurato un programma?
  1. Input ß Algoritmo / programma: - Ges2one memoria
  • Calcoli
  • Input/output
  • Ges2one flusso di controllo
  1. Output Esercizio: Scrivere un programma che legga da tas2era base e altezza di un triangolo e stampi a schermo l’area del triangolo stesso.

La condizione switch: PermeJe di scegliere fra molte alterna2ve. Il break serve a terminare la sequenza di istruzioni da eseguire, invece il default è opzionale e viene eseguito nel caso in cui non si verifica nessuno dei preceden2 casi. Il ciclo for: Serve ad eseguire un blocco di codice un certo numero di volte, senza dover ricopiare tante volte lo stesso.

  • Iniz = cifra da cui inizia a contare
  • Term = fino a quale cifra andare
  • Agg = passo con cui avanza la cifra Il ciclo while: Ad esempio in questo programma il programma converte una leJera maiuscola in minuscola ma smeJe di andare (grazie al ciclo while) nel momento in cui l’utente non inserisce una leJera minuscola come input. Il ciclo do-while:

Gli array: Offrono la possibilità di rappresentare in maniera compaJa una collezione di variabili. La posizione deve essere di 2po intero (o compa2bile) e parte da 0 fino alla dimensione dell’array meno 1. Ogni singolo elemento dell’array è del tuJo analogo ad una variabile di 2po semplice. È possibile inizializzare un array in fase di dichiarazione, specificandone tuA gli elemen2 fra parentesi graffe e separa2 da virgole: array nome[N] = {val1,...,valN}; La leJura e scriJura degli array avviene un elemento alla volta, per questo è molto conveniente ricorrere all’uso del ciclo for. La leJura e la scriJura di ogni singolo elemento dell’array è del tuJo analoga a quella di una variabile di 2po semplice Le stringhe Gli array di 2po char sono deA anche stringhe, visto che sono molto usa2, il C meJe a disposizione funzioni specifiche per questo 2po di dato. In C, le costan2 di 2po stringa si rappresentano come una sequenza di caraJeri racchiusi tra “”. Esempio: “anna” è una costante di 2po stringa. Esercizio: Scrivere un programma che, inserito un anno, determini se è bises2le oppure no

Le matrici Le matrici sono struJure da2 bidimensionali. Vengono rappresenta2 come array di array. Sono dei veJori bidimensionali Come per glia array la leJura avviene un elemento alla volta, richiedono dunque due cicli for innesta2: Le matrici si possono anche sommare: Le struct La struct permeJe di rappresentare in maniera compaJa ed incapsulata 2pi di da2 con una struJura

complessa. RispeJo agli array, gli elemen2 non sono numera2 ma hanno un nome e possono essere di 2po diverso. Per accedere ad un campo di una struct si usa la seguente sintassi: . Esempio: leggere i da2 di una biblioteca e trovare il libro più vecchio Algebra booleana Esercizio: Scrivere un programma che stampi i numeri da 0 a 1 (inclusi) con passo di 0.1 (cioè 0, 0.1, 0.2, e così via).

Esercizio 1: Esercizio 2: Esercizio 3: Esercizio: Scrivere un programma che legga da tas2era una sequenza di numeri terminata da un numero nega2vo, li memorizzi in un array, e poi calcoli il minimo e il massimo tra i numeri inseri2. Si supponga che l’utente non inserisca mai più di 100 numeri (ecceJo il terminatore). Se l’utente non inserisce nessun numero prima del terminatore, deve essere stampato un messaggio di errore.

Esercizio: Scrivere un programma che, dato un array di lunghezza 15 in ingresso, stampi lo stesso array ma ordinato in ordine crescente usando l’algoritmo Ordinamento a Selezione (Selec2on Sort). Sistemi opera2vi È un intermediario fra i programmi e i componen2 fisici (hardware) del calcolatore. Finora abbiamo visto i programmi che abbiamo scriJo come se avessero tuJo il calcolatore a disposizione, ma in realtà i programmi che abbiamo scriJo girano in dei processi, una astrazione creata dal sistema opera2vo per poter avere più programmi in esecuzione contemporaneamente. Fra i conceA principali che si incontrano nell’ambito dei sistemi opera2vi vi sono:

  • concorrenza: è la caraJeris2ca di un insieme di funzioni/algoritmi/applicazioni che potenzialmente possono essere eseguite simultaneamente. Non implica parallelismo ’effeAvo’.
  • sincronizzazione: è l’insieme di tecniche u2lizzate per ordinare temporalmente le operazioni; necessario quando più operazioni concorren2 necessitano di accedere alla stessa risorsa. Il sistema opera2vo ha il compito di ges2re (prevenire/risolvere confliA nell’accesso alle risorse) e astrarre (rendere possibile la scriJura di codice indipendente dall’hardware) le risorse di calcolo, rendendole disponibili alle applicazioni. Laboratorio del 24/10: Esercizio 1:

Esercizio: Scrivere un programma che legga da tas2era una matrice 5 × 5 di interi (le celle in ordine da sinistra a destra e dall’alto in basso) e verifichi se è un quadrato magico. Esercizio: Scrivere un programma che legga una stringa da tas2era e la ristampi coi caraJeri in ordine inver2to (il primo caraJere diventa l’ul2mo e così via). Si supponga che l’utente non inserisca mai stringhe più lunghe di 100 caraJeri.

Laboratorio del 31/10/2023: Esercizio 1: La base di Matlab CaraJeris2che:

  • Matlab è uno strumento per il calcolo numerico
  • È un linguaggio di alto livello (come il c) intrepretato
  • Non è fortemente 2pizzato
  • Si scrive in file con estensione .m
  • Scrivi clc nel prompt per pulire la console/ clear per pulire il workspace Il punto e virgola Un comando terminato da punto e virgola non stampa nulla, a meno che non sia un comando di stampa come disp(). Un comando senza punto e virgola stampa automa2camente il risultato del comando. Nel caso in cui ci fossero più comandi nella stessa riga bisogna usare il punto e virgola. Creazione ed inizializzazione di una variabile Si può inizializzare una variabile con: