























Studia grazie alle numerose risorse presenti su Docsity
Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium
Prepara i tuoi esami
Studia grazie alle numerose risorse presenti su Docsity
Prepara i tuoi esami con i documenti condivisi da studenti come te su Docsity
Trova i documenti specifici per gli esami della tua università
Preparati con lezioni e prove svolte basate sui programmi universitari!
Rispondi a reali domande d’esame e scopri la tua preparazione
Riassumi i tuoi documenti, fagli domande, convertili in quiz e mappe concettuali
Studia con prove svolte, tesine e consigli utili
Togliti ogni dubbio leggendo le risposte alle domande fatte da altri studenti come te
Esplora i documenti più scaricati per gli argomenti di studio più popolari
Ottieni i punti per scaricare
Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium
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
1 / 31
Questa pagina non è visibile nell’anteprima
Non perderti parti importanti!
























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:
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 :
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:
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:
La funzione prinq:
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.
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:
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: