2. Spiegare brevemente qual è la funzione del compilatore e la sua importanza per il programmatore.



Documenti analoghi
Informatica B. Sezione D. Scuola di Ingegneria Industriale Laurea in Ingegneria Energetica Laurea in Ingegneria Meccanica

Introduzione al MATLAB c Parte 2

Esame di Informatica Generale 9 CFU 21 Giugno 2011 Professori: Carulli, Fiorino, Mazzei

Per scrivere una procedura che non deve restituire nessun valore e deve solo contenere le informazioni per le modalità delle porte e controlli

Strutture. Strutture e Unioni. Definizione di strutture (2) Definizione di strutture (1)

Corso di Laurea in Matematica

Problem solving elementare su dati vettoriali

Fondamenti di Informatica 2

Gli array. Gli array. Gli array. Classi di memorizzazione per array. Inizializzazione esplicita degli array. Array e puntatori

void funzioneprova() { int x=2; cout<<"dentro la funzione x="<<x<<endl; }

Laboratorio di Fondamenti di Informatica anno accademico Esercizi proposti il

dall argomento argomento della malloc()

Funzioni in C. Violetta Lonati

Record in C: il costruttore struct.

Quotazione compareto( ) Quotazione piurecente( ) Quotazione Quotazione Quotazione non trovato count( )

Tipi primitivi. Ad esempio, il codice seguente dichiara una variabile di tipo intero, le assegna il valore 5 e stampa a schermo il suo contenuto:

INFORMATICA 1 L. Mezzalira

CREARE UNA LIBRERIA IN C

FONDAMENTI di INFORMATICA L. Mezzalira

LISTE, INSIEMI, ALBERI E RICORSIONE

Prof. Giuseppe Chiumeo. Avete già studiato che qualsiasi algoritmo appropriato può essere scritto utilizzando soltanto tre strutture di base:

Compito di Fondamenti di Informatica

3. La sintassi di Java

Corso di Laurea in Ingegneria Gestionale Esame di Informatica a.a settembre 2011

Thread: sincronizzazione Esercitazioni del 09 Ottobre 2009

Appello di Informatica B

[MANUALE VISUAL BASIC SCUOLA24ORE PROF.SSA PATRIZIA TARANTINO] 14 dicembre 2008

SOMMARIO Coda (queue): QUEUE. QUEUE : specifica QUEUE

Nascita di Java. Che cos e Java? Caratteristiche di Java. Java: linguaggio a oggetti

3) Il seguente numerale A1F0 in base 16 a quale numero in base 10 corrisponde?

Studente (Cognome Nome): Corso di Informatica Corso di Laurea in Ingegneria Gestionale a.a Secondo Compitino 21 Dicembre 2006

Vettori Algoritmi elementari di ordinamento

File di testo e file binari Directory

Dall Algoritmo al Programma. Prof. Francesco Accarino IIS Altiero Spinelli Sesto San Giovanni

Programmazione I - Laboratorio

RICERCA DI UN ELEMENTO

Breve riepilogo della puntata precedente:

Programmazione I / Informatica generale Prova scritta 11 Giugno 2008

Puntatori Passaggio di parametri per indirizzo

Prova di recupero di Informatica B Corsi di Laurea in Ingegneria Meccanica prof. Francesco Amigoni 20 febbraio 2004

PROCEDURA INVENTARIO DI MAGAZZINO di FINE ESERCIZIO (dalla versione 3.2.0)

Laboratorio di programmazione

L espressione torna invece sempre vera (quindi la soluzione originale) se cambiamo contemporaneamente il verso: 1 < 0.

Introduzione alla programmazione in C

APPUNTI DI MATEMATICA ALGEBRA \ INSIEMISTICA \ TEORIA DEGLI INSIEMI (1)

I sistemi di numerazione

Politecnico di Torino

Arduino: Programmazione

Matematica - SMID : Programmazione Febbraio 2009 FOGLIO RISPOSTE

Grafico della parabola

Fondamenti di Informatica T-1, 2009/2010 Modulo 2 Prova d Esame 5 di Giovedì 15 Luglio 2010 tempo a disposizione 2h30'

Permette l inserimento delle fatture e delle note di accredito ricevute e dei relativi incassi e pagamenti.

Esercizi di programmazione in C

GUIDA ALLA PROGRAMMAZIONE GRAFICA IN C

Definire all'interno del codice un vettore di interi di dimensione DIM, es. int array[] = {1, 5, 2, 4, 8, 1, 1, 9, 11, 4, 12};

Introduzione al linguaggio C Gli array

IL MIO PRIMO SITO: NEWS

Parte 1. Vettori di bit - AA. 2012/13 1.1

10 - Programmare con gli Array

Le funzioni in C. I programmi C sono costituiti da definizioni di variabili e funzioni.

Grammatica di base: Pointers

Linguaggio C. Fondamenti. Struttura di un programma.

Esercitazione 7. Procedure e Funzioni

Introduzione a ROOT. 1. Informazioni generali

Algoritmi su array / 2

puntatori Lab. Calc. AA 2007/08 1

Corso di Informatica Medica Esercitazione 1I ! Alessandro A. Nacci - alessandronacci.com

Allocazione dinamica della memoria - riepilogo

Politecnico di Milano Facoltà di Ingegneria Industriale INFORMATICA B

STAMPA UNIONE DI WORD

Corso di Fondamenti di Informatica Algoritmi su array / 2

SCHEDA DI RECUPERO SUI NUMERI RELATIVI

CONCETTO DI ANNIDAMENTO

La gestione della memoria

Relazioni tra oggetti e classi : Composizione. Relazioni tra oggetti e classi : esempio di Aggregazione. classe contenitore

Ricorsione. (da lucidi di Marco Benedetti)

Compito Scritto di Ingegneria del Software. 12 settembre Parte teorica, punti 14

( x) ( x) 0. Equazioni irrazionali

La struttura dati ad albero binario

Laboratorio di Algoritmi e Strutture Dati

Lezione 8. La macchina universale

Il programmatore che c e in noi Lezione 12 Statements

Corso di Informatica Corso di Laurea in Ingegneria Gestionale a.a Secondo Compitino 17 Dicembre 2005

Esercizio 1. Esercizio 1

Gestione dei File in C

Monitor. Introduzione. Struttura di un TDA Monitor

Realizzazione di Politiche di Gestione delle Risorse: i Semafori Privati

1: /* Nome del programma: gestione_articoli_01.cpp 2: Realizzato da: Gaetano Della Cerra 3: Data: 06/02/ III Informatica Serale I.T.I.S.

Linguaggio C - Stringhe

Funzioni. Il modello console. Interfaccia in modalità console

Informatica B. Sezione D. Scuola di Ingegneria Industriale Laurea in Ingegneria Energetica Laurea in Ingegneria Meccanica

APPELLO SCRITTO DI PROGRAMMAZIONE 1 CORSO DI LAUREA IN MATEMATICA UNIVERSITÀ DEGLI STUDI DI MILANO XI.2015

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2

TUTORIAL: COME USARE UN LM35 PER MISURARE UNA TEMPERATURA SU TUTTA LA SCALA CENTIGRADA

Algoritmo. I dati su cui opera un'istruzione sono forniti all'algoritmo dall'esterno oppure sono il risultato di istruzioni eseguite precedentemente.

COGNOME E NOME (IN STAMPATELLO) MATRICOLA

Alcune regole di base per scrivere un programma in linguaggio C

Esercitazioni di Calcolo Numerico 23-30/03/2009, Laboratorio 2

I puntatori e l allocazione dinamica di memoria

C. P. U. MEMORIA CENTRALE

Transcript:

1 Esercizio 1 1. Immaginate di avere una calcolatore che invece che poter rappresentare i classici due valori per ogni bit (0/1) possa rappresentare 7 valori per ogni bit. (a) Quanti bit gli occorreranno per rappresentare i numeri naturali fino a 300? Per rappresentare 300 in base 7 sono necessari 3 bit infatti con 2 bit posso rappresentare numeri fino a 48 (7 2 = 49) mentre con 3 bit posso rappresentare numeri fino a 342 (7 3 = 343). (b) Quanti bit risparmia rispetto ad una macchina che invece usa la classica rappresentazione binaria? Per rappresentare 300 in base 2 ho bisogno almeno di 9 bit (2 8 = 256 e 2 9 = 512). Quindi risparmio 6 bit. 1

2. Spiegare brevemente qual è la funzione del compilatore e la sua importanza per il programmatore. Vedere libro di testo. 3. Spiegare, magari con un esempio, il significato di ognuna delle fasi del ciclo fetch-decode-execute nella macchina di Von Neumann. Vedere libro di testo. 2

2 Esercizio 2 Si scrivano, nel linguaggio C, le dichiarazioni di tipo necessarie per rappresentare un punto in uno spazio tridimensionale usando la rappresentazione in coordinate cartesiane (si chiami Punto il tipo corrispondente) ed un insieme di, al massimo, 100 punti (si chiami InsiemePunti il tipo corrispondente). Si scriva un programma in linguaggio C che, data una variabile di tipo InsiemePunti, permetta all utente di immettere un numero grande a piacere di elementi di tipo Punto (ovviamente tale numero non può essere superiore a 100), e che, alla fine dell immissione, stampi quanti, tra gli elementi di tipo Punto immessi, hanno la caratteristica di avere lo stesso valore delle tre coordinate cartesiane (si pensi ad esempio ad un punto con coordinate x=3 y=3 z=3) e quali di questi è il più lontano dall origine degli assi. #include <stdio.h> #define MAX_PUNTI 100 typedef struct { int x; int y; int z; Punto; typedef struct { Punto lista[max_punti]; int dim; InsiemePunti; void main() { int i, contauguali, distanza; int max, maxindice;; char risposta; InsiemePunti punti; /* L array è vuoto, quindi inizializzo a zero la sua dimensione effettiva */ punti.dim = 0; contauguali = 0; i = 0; /* Tutti i punti avranno distanza maggiore di -1 */ max = -1; printf("vuoi inserire un punto (s per continuare)? "); 3

scanf("%c%*c", &risposta); /* Leggo le coordinate dei punti */ while((i < MAX_PUNTI) && (risposta == s )) { printf("inserisci la coordinata x: "); scanf("%d%*c", &punti.lista[i].x); printf("inserisci la coordinata y: "); scanf("%d%*c", &punti.lista[i].y); printf("inserisci la coordinata z: "); scanf("%d%*c", &punti.lista[i].z); /* Ogni volta che inserisco un elemento devo incrementare la dimensione effettiva */ punti.dim = punti.dim + 1; printf("vuoi inserire un punto (s per continuare)? "); scanf("%c%*c", &risposta); i = i + 1; /* Cerco gli elementi con coordinate uguali e tra questi trovo quello con distanza massima dall origine (NB: il for procede fino a punti.dim, cioè fino alla dimensione effettiva) */ for(i = 0; i < punti.dim; i = i + 1) { if((punti.lista[i].x == punti.lista[i].y) && (punti.lista[i].y == punti.lista[i].z)) { contauguali = contauguali + 1; /* Questo test mi serve per gestire correttamente i punti con coordinate negative */ if(punti.lista[i].x < 0) { distanza = punti.lista[i].x * (-1); else { distanza = punti.lista[i].x; if(distanza > max) { max = distanza; maxindice = i; printf("hai inserito %d punti uguali\n", contauguali); if(contauguali > 0) { printf("tra questi il punto più lontano è il punto %d (%d, %d, %d)\n", 4

maxindice, punti.lista[maxindice].x,punti.lista[maxindice].y, punti.lista[maxindice].z); 5

3 Esercizio 3 Sia dato il seguente programma in C: void main(){ int x, y, z; int *p1, *p2, *p3; x=3; y=4; z=5; /* Queste erano le istruzioni da inserire */ p1 = &y; p3 = &z; p2 = &x; /******************************************/ printf("%d %d %d %d %d %d \n",x,y,z,*p1,*p2,*p3); if (*p2 == 5) { *p1 = *p2; else { p3=&x; printf("%d %d %d %d %d %d \n",x,y,z,*p1,*p2,*p3); 6

1. Lo si completi scrivendo le istruzioni che fanno puntare p1 a y, p3 a z e p2 a x e, dopo averlo completato, si dica qual è l output del programma. La prima printf stampa 3, 4, 5, 4, 3, 5 La seconda printf stampa 3, 4, 5, 4, 3, 3 2. Se avessi un puntatore dichiarato come int ** pp; potrei assegnare a tale puntatore l indirizzo di p2? e potrei assegnare, sempre a tale puntatore, il valore contenuto in p3? Giustificare brevemente le risposte (non saranno accettate risposte del tipo si/no) La prima risposta è si: pp è un puntatore ad un puntatore ovvero può contenere l indirizzo di un puntatore. Quindi l istruzione qq = &p2 è corretta. Viceversa la seconda risposta è no: infatti non si può assegnare il valore contenuto in p3, ovvero l indirizzo di una variabile intera, ad un puntatore a puntatore, che come detto può contenere solo indirizzi di altri puntatori. 7