1. Date due matrici S e T di uguali dimensioni, definiamo la somma delle differenze assolute: numrighe. numcol SAD=5&

Documenti analoghi
Informatica B

1 (12) 2 (6) 3 (4) 4 (4) 5 (6)

Esercitazione 6. Array

Esercizio 1: calcolo insieme intersezione

Fondamenti di Informatica T-1 Modulo 2

ARRAY E TYPEDEF. A volte è utile definire un nuovo tipo di dato come array. Si usa la solita sintassi del linguaggio C

Esercizi C su array e matrici

Il presente plico contiene 3 esercizi e deve essere debitamente compilato con cognome e nome, numero di matricola.

Fondamenti di Programmazione

PROGRAMMAZIONE: ESERCITAZIONE N. 6

Laboratorio di Calcolatori 1 Corso di Laurea in Fisica A.A. 2006/2007

il precedente programma dichiara un vettore di interi di dimensione 10 e successivamente inserisce il valore 4 nel secondo elemento del vettore.

Array Tipi di dato semplici e strutturati strutturati array elementi omogenei numero d ordine indice lunghezza dimensione

ESERCIZI DI PROGRAMMAZIONE. - condizionali e cicli -

Esercitazione 11. Liste semplici

Non ci sono vincoli sul tipo degli elementi di un vettore Possiamo dunque avere anche vettori di

- int nbrani = 0; //numero di brani presenti in archivio. int creaplaylist(tipobrano[] playlist, int n, TipoGenere g, TipoFile t);

3 Costrutti while, for e switch

Tutorato Programmazione 1 Modulo 2

Obiettivi di questa esercitazione

Esercitazione 7. Tutor: Ing. Diego Rughetti. Anno Accademico 2007/2008

Fondamenti di Informatica A.A. 2016/17

Linguaggio C++ 8. Matrici

Unità Didattica 4 Linguaggio C. Vettori. Puntatori. Funzioni: passaggio di parametri per indirizzo.

Ogni parte non cancellata a penna sarà considerata parte integrante della soluzione.

UNIVERSITÀ DEGLI STUDI DI PAVIA FACOLTÀ DI INGEGNERIA. Matlab: esempi ed esercizi

Breve Manuale di Riferimento sulla Sintassi Linguaggi C++ e FORTRAN

Esercitazioni con GNU Octave

Sommario FONDAMENTI DI INFORMATICA 1. Il tipo FILE. Passaggio da standard I/O. LINGUAGGIO C Gestione dei file

IEIM Esercitazione XI Ricorsione e Ripasso. Alessandro A. Nacci -

Esercizio 1 (15 punti)

Stringhe di caratteri

Politecnico di Torino Sede di Alessandria Corso di informatica Programmazione in c: introduzione. e mail: sito: users.iol.

a.a Codice corso: 21012

Matricola Nome Cognome Aula Fila (dalla cattedra) Posto (dalla porta)

Esercitazioni di Algebra e Geometria

Ogni parte non cancellata a penna sarà considerata parte integrante della soluzione.

Programmazione I - Laboratorio

Esercizi proposti. Funzioni. Esercizio Confronto tra date. Esercizi proposti. Analisi. Controlli

Esercizio 1: funzione con valore di ritorno di tipo puntatore

ELEMENTI DI INFORMATICA LB ESERCITAZIONE (del 09/03/2007) Files, Strutture e Liste

Introduzione al C. Esercitazione 6. Raffaele Nicolussi. Corso di Fondamenti di Informatica Ingegneria Clinica

while Istruzione while Cicli ed iterazioni Istruzioni di ripetizione in C Comportamento del while

Esercitazioni di Algebra e Geometria

Programmazione I - Laboratorio

Esercitazione 8. Array multidimensionali

Esercizio 1: Puntatori impiegati che sono manager

Terminiamo gli esercizi dell ultima lezione. (LUCIDI) Calcolare, se possibile, AC, CA, CH e HC. (LUCIDI)

MATRICI E VETTORI APPROFONDIMENTO PER IL CORSO DI LABORATORIO DI INFORMATICA SARA POLTRONIERI

Multidimensionali. Array Multidimensionali. Tipi di array. Matrice: array bidimensionale. Array multidimensionale. Dichiarazione di una matrice

una matrice quadrata, determini se è un Un quadrato magico è una matrice NxN

Esercizi. La funzione swapint() primo tentativo

Consideriamo un vettore allocato dinamicamente

Università degli Studi di Brescia. Vettori di variabili. ! Sono variabili aggregate in grado di memorizzare una collezione (organizzata) di oggetti

1. Descrivere il significato della seguente istruzione se x è un vettore di 10 elementi reali:

Esercizio n.1 FONDAMENTI DI INFORMATICA 1. Esercizio n.2. Soluzione. LINGUAGGIO C Funzioni e gestione file: esercitazione

Fondamenti di Programmazione

1 (4) 2 (4) 3 (7) 4 (5) 5 (5) 6 (7)

Esercizi di programmazione in linguaggio C - Costrutto iterazione

int ninv; /* numero di inventario */

RICERCA DI UN ELEMENTO

Esercizi proposti. Esercizio Confronto tra date Esercizio Quadrato Esercizio Indovina numero

ELEMENTI DI INFORMATICA L-B. Ing. Claudia Chiusoli

1 (4) 2 (4) 3 (12) 4 (6) 5 (6)

Array. Maurizio Palesi Salvatore Serrano. In C si possono definire tipi strutturati Vi sono due costruttori fondamentali

Esercizio 1 - Soluzione

Fondamenti di Informatica L-A

Esercizio 2 (punti 7) Dato il seguente programma C: #include <stdio.h> int swap(int * nome, int length);

Capitolo 10 - Strutture

RIGA COLONNA MATRICOLA

7 Riepilogo. Questa dispensa propone esercizi riepilogativi sui concetti visti finora ovvero: costrutti condizionali (if,switch);

Traccia 1. Nome Cognome Matricola Firma. Spazio Riservato alla Commissione. Esercizio 1 Esercizio 2 Esercizio 3 Esercizio 4 Esercizio 5 Totale

Scrittura formattata - printf

Linguaggio C. strutture di controllo: strutture iterative. Università degli Studi di Brescia. Docente: Massimiliano Giacomin

acquisizione numero elementi del primo insieme e del secondo insieme, finché elprimoinsieme oppure elsecondoinsieme > EL_INS

IL PRIMO PROGRAMMA IN C

ESERCIZI DI PROGRAMMAZIONE DA TEMI D ESAME - vettori -

Problema. Vettori e matrici. Vettori. Vettori

Il presente plico contiene 4 esercizi e deve essere debitamente compilato con cognome e nome, numero di matricola.

PROVA SCRITTA DEL CORSO DI CORSO DI LAUREA IN INGEGNERIA BIOMEDICA ED ELETTRICA 9/6/2008

Fondamenti di Informatica

ERRATA CORRIGE. void SvuotaBuffer(void); void SvuotaBuffer(void) { if(getchar()!=10) {svuotabuffer();} }

Esercizi di riepilogo (Fondamenti di Informatica 1 Walter Didimo)

Esercitazione 5. Corso di Fondamenti di Informatica. Laurea in Ingegneria Informatica

1 (7) 2 (6) 3 (6) 4 (7) 5 (6)

Il linguaggio C. Puntatori e dintorni

Politecnico di Milano Facoltà di Ingegneria Industriale INFORMATICA B Prima prova in itinere COGNOME E NOME. 13 novembre 2006 RIGA COLONNA MATRICOLA

Linguaggio C. Condizioni composte (operatori logici)

Esercizio 1. Esercizio 1 - Soluzione

Introduzione al C. Esercitazione 8. Domenico Daniele Bloisi Raffaele Nicolussi. Corso di Laboratorio di Informatica Ingegneria Clinica

Programmi su più moduli - Esempio

Dipartimento di Elettronica, Informazione e Bioingegneria Politecnico di Milano

Strutture Dati Dinamiche

Fondamenti di Informatica

ESERCIZIO 1. Si considerino le seguenti definizioni:

Capitolo 2 Fondamenti di Informatica - Esercizi

Politecnico di Milano Facoltà di Ingegneria Industriale INFORMATICA B Prova in itinere del 8 Novembre 2010 COGNOME E NOME RIGA COLONNA MATRICOLA

Array di array. Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1. Dispensa 03. A. Miola Febbraio 2008

Le funzioni, e le istruzioni di input/output

ESERCITAZIONE CON EXCEL SULLE MATRICI

Transcript:

Esercitazione: 19/06/2015 1. Date due matrici S e T di uguali dimensioni, definiamo la somma delle differenze assolute: SAD(T, S) = numrighe i=1 numcol j=1 S(i, j) T(i, j) Scrivere un programma C che implementa l algoritmo per il template matching: (a) Il programma acquisisce una matrice A 5x5 e poi una seconda matrice B 2x2. (b) Il programma individua la sottomatrice 2x2 di A che minimizza la somma delle differenze assolute mostrando a video le coordinate in A dell elemento in alto a sinistra della sottomatrice individuata. SAD=9& SAD=5& & 1 2 3# $! & 2 5# A = $ 4 5 6! B = $! $ % 7 8 9! % 7 7 " " SAD=3& SAD=6& Output%=%(2,%1)% Scrivere una funzione Matlab templatematching che riceve in ingresso due matrici A e B, e restituisce una coppia di valori (x, y) nel modo seguente: Se B ha più righe o più colonne di A, (x, y) è pari a (-1, -1). Altrimenti, (x, y) è la posizione del primo elemento della sottomatrice S di A con le stesse dimensioni di B che minimizza il valore di SAD(T, B). Scrivere inoltre uno script che: Richiede all utente di inserire due matrici. Invoca la funzione templatematching su tali matrici e stampa a video il risultato ottenuto. 1

Soluzione C # include <stdio.h> #include <stdlib.h> # define DIMA 5 # define DIMB 2 void main() { int a[ DIMA][ DIMA], b[ DIMB][ DIMB]; // def matrici int sad, minsad; int i, j, k, l, mini, minj; // carico matrici for(i=0;i<dima;i++) for(j=0;j<dima;j++) scanf("%d", &a[i][j]); for(i=0;i<dimb;i++){ for(j=0;j<dimb;j++){ scanf("%d", &b[i][j]); // // DIMA - DIMB e di quanto posso muovermi for(i = 0; i <= DIMA - DIMB; i++){ for(j=0; j <= DIMA - DIMB; j++){ // calcolo la sad sad = 0; for(k=0; k < DIMB; k++) for(l=0; l < DIMB; l++) sad = sad + abs(a[i+k][ j+l] - b[k][ l]); if(( i==0 && j==0) sad < minsad){ minsad = sad; mini = i; minj = j; printf(" Posizione trovata: (%d, %d)\ n", mini, minj); 2

Soluzione Matlab f u n c t i o n [ x, y ] = templatematching (A, B) [ ra, ca ] = s i z e (A, 1 ) ; [ rb, cb ] = s i z e (B, 1 ) ; i f rb > ra cb > ca x = 1; y = 1; e l s e dr = ra rb + 1 ; dc = ca cb + 1 ; f o r i i = 1 : dr f o r j j =1: dc % e s t r a z i o n e d e l l a s o t t o m a t r i c e A1 = A( i i : i i+rb 1, j j : j j+cb 1) ; sad = abs (sum(sum(a1 B) ) ) ; i f i i ==1 && j j ==1 sad < minsad minsad = sad ; x = i i ; y = j j ; 3

2. Scrivere un programma in C in grado di determinare se in una matrice 3x3 acquisita da tastiera vi sono sottomatrici quadrate (di dimensioni qualsivoglia) in cui la somma degli elementi è nulla. In particolare: (a) prima il programma acquisisce da tastiera i valori della matrice 3x3 (b) e poi inizia la ricerca delle sottomatrici nulle parto dalla sottomatrice di dimensioni 1x1 fino alla quella 3x3. (c) Per ogni sottomatrice a somma nulla il programma stampa a video le coordinate dell elemento in alto a sinistra. Relizzare uno script Matlab che: (a) chieda all utente il nome del file.mat contenente una matrice quadrata (b) carichi tale matrice verificando che sia effettivamente una matrice quadrata (in caso non lo sia si generi un errore) (c) come nel caso di C ricerchi tutte le sottomatrici nulle di tutte le dimensioni e per ogni sottomatrice nulla stampi a schermo le coordinate dell elemento in alto a sinistra. 4

Soluzione C # include <stdio.h> # define MAXD 3 void main(){ int matr[maxd][maxd]; int i, j, k, h, currdim, somma; // acquisizione matrice for(i = 0; i < MAXD; i++) for(j = 0; j < MAXD; j++) scanf("%d", &matr[i][j]); // // devo considerare tuttel le possibili dimensioni for( currdim = 1; currdim <= MAXD; currdim ++){ printf(" Matrici di dimensione %d:\ n", currdim); // per non andare oltre la dim della matrice for(i = 0; i + currdim <= MAXD; i++){ for(j = 0; j + currdim <= MAXD; j++){ somma = 0; for(k=0; k < currdim; k++) for(h=0; h < currdim; h++) somma = somma + matr[i+k][ j+h]; if( somma == 0) printf("%d,%d\n", i, j); 5

Soluzione Matlab c l e a r ; f i l e n a m e = input ( ' I n s e r i r e nome f i l e : ', ' s ' ) ; matr = load ( f i l e n a m e ) ; dim = length ( matr ) ; a s s e r t ( a l l ( dim==s i z e ( matr ) ) ) ; f o r currdim = 1 : dim disp ( [ ' Matrici di dimensione ' num2str ( currdim ) ] ) ; f o r i i = 1 : dim currdim + 1 f o r j j = 1 : dim currdim + 1 submatr=matr ( i i : i i+currdim 1, j j : j j+currdim 1) ; i f sum( submatr ( : ) )==0 disp ( [ num2str ( i i ) ', ' num2str ( j j ) ] ) ; 6

3. Scrivere un programma in C e in Matlab che riceve in ingresso il contenuto di una matrice quadrata 5x5 di interi. Il programma calcola e visualizza le coordinate dei massimi locali della matrice. Il massimo locale è definito come un elemento della matrice i cui elementi adiacenti sono tutti minori o uguali ad esso. Per esempio 2 3 7 4 3 2 1 1 9 6 4 3 M = 65 9 3 1 6 7 49 8 2 4 35 4 2 8 4 1 ha come output: M[1,1] = 9 M[2,1] = 9 M[2,4] = 6 M[3,0] = 9 M[4,2] = 8 7

Soluzione C # include <stdio.h> # define MAX 5 int main(){ int matrice[max][max]; int i, j, k, h, ismax; // carico la matrice for(i=0; i < MAX; i++) for(j=0; j < MAX; j++) scanf("%d", &matrice[i][j]); for(i=0; i<max; i++) for(j=0; j<max; j++){ ismax = 1; for(k=-1; k <2; k++) for(h=-1; h <2; h++) if(ismax && i+k >= 0 && i+k < MAX && j+h >= 0 && j+h < MAX && // elemento interno matrice[i][ j] < matrice[i+k][ j+h]){ ismax = 0; if( ismax) printf("m[% d %d] = %d \n", i,j, matrice[i][ j]); 8

Soluzione Matlab c l e a r ; f i l e n a m e = input ( ' I n s e r i r e nome f i l e : ', ' s ' ) ; matr = load ( f i l e n a m e ) ; %% a s c i i f i l e only dim = s i z e ( matr, 1 ) ; a s s e r t ( a l l ( dim==s i z e ( matr ) ) ) ; f o r i i = 1 : dim f o r j j = 1 : dim l o w i i = max( i i 1, 1) ; l o w j j = max( j j 1, 1) ; h i g h i i = min ( i i +1, dim ) ; h i g h j j = min ( j j +1, dim ) ; i f a l l ( matr ( l o w i i : h i g h i i, l o w j j : h i g h j j ) <= matr ( i i, j j ) ) disp ( [ 'M( ' num2str ( i i ) ', ' num2str ( j j ) ' ) = ' num2str ( matr ( i i, j j ) ) ] ) ; 9

4. Si realizzi in linguaggio C un programma in grado di simulare il movimento di un topolino. Data una matrice Q, di dimensione N x N, che descrive le caratteristiche di una certa area: in ciascuna cella Q(x,y) della matrice vi è la quota del quadratino di superficie posto alle coordinate (x,y). A partire da una posizione iniziale del topolino, (x0,y0), si stampino le coordinate di tutti i quadratini toccati dal topolino se esso segue le seguenti regole di movimento: il topolino si sposta ad ogni passo di un solo quadratino, nelle 8 direzioni possibili; il topolino sceglie il quadratino su cui muoversi determinando il quadratino di quota massima tra gli 8 adiacenti; se tutti i quadratini adiacenti sono ad una quota inferiore (oppure uguale) rispetto al quadratino attuale, il topolino si ferma. 10

# include <stdio.h> #define N 5 typedef struct { int riga; int colonna; t_pos; int main(){ int lab[n][n]; t_pos pos; int esci =0, trovato, x, y; pos. riga =0; pos. colonna =0; while( esci!= 1){ printf("\n(%d,% d)", prox. riga, prox. colonna); trovato =0; for(x=pos. riga -1; x <= pos. riga +1; x++) for(y=prox. colonna -1; y <= prox. colonna +1; y++) if(!trovato && x>=0 && x<n && y>=0 && y<n && x!= prox. riga && y!= prox. colonna && lab[x][ y] > lab[ prox. riga][ prox. colonna]){ prox. riga=x; prox. colonna =y; trovato = 1; if(! trovato) esci =1; 11