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

Documenti analoghi
Informatica B

Fondamenti di Informatica T-1, 2010/2011 Modulo 2. Prova d Esame 4A di Martedì 21 Giugno 2011 tempo a disposizione 2h

Fondamenti di Informatica T-1, 2010/2011 Modulo 2. Prova d Esame 5A di Mercoledì 13 Luglio 2011 tempo a disposizione 2h

ELEMENTI DI INFORMATICA L-B. Ing. Claudia Chiusoli

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

Fondamenti di Programmazione

Esercizi. Stringhe. Stringhe Ricerca binaria

Matrici. Matrici.h Definizione dei tipi. Un po di esercizi sulle matrici Semplici. Media difficoltà. Difficili

RICERCA DI UN ELEMENTO

Programmazione I - Laboratorio

Fondamenti di Informatica T-1, 2014/2015 Modulo 2. Prova d Esame 2A di Martedì 29 Gennaio 2015 tempo a disposizione 2h

1. Esercizio tipo per prova pratica

Esercizio 1: funzione con valore di ritorno di tipo puntatore

Consideriamo un vettore allocato dinamicamente

Esercizio 1: calcolo insieme intersezione

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

Corso di Laurea in Matematica. LABORATORIO DI INFORMATICA Compito Totale - 21 Marzo Soluzione degli Esercizi

ALGORITMI E STRUTTURE DATI

Linguaggio C - Array. Array: tipo nome_array[num_elementi]

Laboratorio di Programmazione: Linguaggio C Lezione 21 del 19 maggio 2014

Fondamenti di Informatica T-1, 2010/2011 Modulo 2. Prova d Esame 1A di Mercoledì 19 Gennaio 2011 tempo a disposizione 2h

public static boolean occorre (int[] a, int n) { int i = 0; boolean trovato = false;

Informatica 1. Corso di Laurea Triennale in Matematica. Gianluca Rossi

Esercizi C su array e matrici

Esercizio 1 - cicli. Esercizio 1 cicli - Soluzione

Il linguaggio C. Puntatori e dintorni

Tutorato Programmazione 1 Modulo 2

Fondamenti di Informatica T-1, 2011/2012 Modulo 2. Prova d Esame 1A di Giovedì 22 Dicembre 2011 tempo a disposizione 2h

Fondamenti di Informatica T- 1, 2012/2013 Modulo 2

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

Esercizio 1 (15 punti)

Fondamenti di Informatica T-1, 2013/2014 Modulo 2. Prova d Esame 6A di Giovedì 11 Settembre 2014 tempo a disposizione 2h

Aggregati di dati eterogenei: il tipo struct. Esercizi risolti

Politecnico di Torino

Array e puntatori in C

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

ESERCIZIO n. 1. Soluzione: (Uso dei vettori) #include <iostream.h> #include <stdlib.h> #define MAXLEN 100. int main( ) {

Stringhe. In C le stringhe ben formate sono in realtà array di caratteri terminati sempre da un carattere speciale, \0, detto anche

Concetti chiave. Struct. Variabili strutturate: il tipo struct Elementi di una struttura typedef e struct Array di strutture

Puntatori. Un puntatore contiene un numero che indica la locazione di memoria dove è presente la variabile puntata

Corso di Fondamenti di Programmazione canale E-O. Cos è. un vettore (1) un vettore (2) un vettore (3)

Obiettivi di questa esercitazione

Compito di Fondamenti di Informatica

I puntatori. Un puntatore è una variabile che contiene l indirizzo di un altra variabile. puntatore

Fondamenti di Informatica T-1, 2011/2012 Modulo 2. Prova d Esame 2A di Giovedì 12 Gennaio 2012 tempo a disposizione 2h

Esercitazione: Implementazione in linguaggio C dell ADT. Stack con l utilizzo. di linked list

Esercizio 1: Puntatori impiegati che sono manager

Fondamenti di Informatica T-1, 2014/2015 Modulo 2. Prova d Esame 4A di Giovedì 11 Giugno 2015 tempo a disposizione 2h

ALGORITMI DI ORDINAMENTO. Naive sort (o selection sort): Consideriamo algoritmi di ordinamento interni (elementi in memoria centrale).

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

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

Esercitazione 6. Array

Informatica 1. Prova di recupero 21 Settembre 2001

Fondamenti di Informatica T-1, 2011/2012 Modulo 2. Prova d Esame 4A di Martedì 12 Giugno 2012 tempo a disposizione 2h

Fondamenti di Informatica 2

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

Hash Table. Hash Table

Il linguaggio C. Puntatori e dintorni

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

Istruzioni iterative (o cicliche)

Lezione 9: Puntatori a funzioni. Tipi enumerativi e orientati ai bit

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

Elementi lessicali. Lezione 4. La parole chiave. Elementi lessicali. Elementi lessicali e espressioni logiche. Linguaggi di Programmazione I

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

Tipi di dati strutturati e Linguaggio C. Record o strutture Il costruttore struct in C

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

Un esempio per iniziare. Il controllo del programma in C. Altri cenni su printf() Esercizi (printf) printf( 8!=%d, fatt);

Il linguaggio C Puntatori

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

Esercitazione 8. Array come puntatori. Aritmetica dei puntatori. Array multidimensionali. Ricapitolazione su Ricorsione e Array.

Programmazione Procedurale in Linguaggio C++

ARRAY E STRINGHE. ESERCIZIO 2 Scrivere un programma che calcola il numero di doppie e di dittonghi (2 vocali vicine) presenti in una stringa.

Esercitazione 7. Procedure e Funzioni

Capitolo 6 - Array. Copyright by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved.

Dati aggregati. Violetta Lonati

Corso di Fondamenti di Programmazione canale E-O. Un esempio. Funzioni ricorsive. La ricorsione

Fondamenti di Informatica T-1, 2013/2014 Modulo 2. Prova d Esame 5A di Giovedì 10 Luglio 2014 tempo a disposizione 2h

Fondamenti di Informatica. Algoritmi di Ricerca e di Ordinamento

Esercizi riassuntivi (Fondamenti di Informatica 2 Walter Didimo) Soluzioni

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

Esercizi di riepilogo (Fondamenti di Informatica 1 Walter Didimo)

Esercizio 1. Esercizio 1 - Soluzione

Saggio di Informatica Classe 3A (B)

Ricerca binaria ricorsiva!

Si vuole realizzare un programma in grado di verificare se una griglia assegnata rispetta le regole del gioco.

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

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

Stringhe Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR

a.a Codice corso: 21012, 22010

I puntatori e l allocazione dinamica di memoria. Esercizi risolti

PUNTATORI A STRUTTURE

Esercitazione 12. Esercizi di Ricapitolazione

Array multidimensionali e stringhe

Programmazione I - Laboratorio

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

Operatori sui bit. Operatore condizionale. Definizione di vettori in C. Vettori (o array) Tipi di dato strutturati

Ricerca binaria (o dicotomica) di un elemento in un vettore

Client - Interfaccia - Implementazione

È dato un file di testo PEOPLE.TXT che più di 20), una persona per riga

Puntatori a Funzioni e Callback. Massimo Benerecetti

Transcript:

Esercizio 1: Quadrato magico Realizzare una funzione che, presa in input una matrice quadrata, determini se è un quadrato magico Un quadrato magico è una matrice NxN I cui elementi sono TUTTI i numeri interi i da 1 a N 2 in cui Le somme degli elementi per tutte le righe, tutte le colonne e le diagonali sono equivalenti Tale somma è detta magic constant Esercizio 1 - Soluzione (1) #define N 3 typedef int matrice[n][n]; typedef enumfalse, true boolean; typedef boolean covered[n*n]; boolean verifymatrix(matrice m, int dim) covered c; Vettore che verifica la int i, j; presenza, nella matrice, for(i = 0; i < dim*dim; i++) dei numeri da 1 a N 2 c[i] = false; Se c[i] è true significa che il numero i+1 è presente nella matrice 1 2 Esercizio 1 - Soluzione (2) for(j = 0; j < dim; j++) return true; if(m[i][j] < 1 m[i][j] > dim*dim) if( c[ m[i][j] -1] == false) c[ m[i][j] -1] = true; else Controllo sull intervallo dei valori [1,N 2 ] I numeri non devono essere ripetuti 3 Esercizio 1 - Soluzione (3) Essendo il calcolo su righe e colonne molto simile, realizziamo un unica funzione sufficientemente generica La somiglianza è dovuta al fatto che la matrice è quadrata Un ulteriore parametro di questa funzione indica se il conteggio va effettuato sulle righe o sulle colonne boolean verifyrows(matrice m, int dim, int* sum) return verify(m, dim, true, sum); boolean verifycolumns(matrice m, int dim, int* sum) return verify(m, dim, false, sum); 4

Esercizio 1 - Soluzione (4) boolean verify(matrice m, int dim, boolean verifyrows, int* sum) int i, j, partial; *sum = -1; partial = 0; for(j = 0; j < dim; j++) if(verifyrows) partial = partial + m[i][j]; else partial = partial + m[j][i]; if(*sum < 0) *sum = partial; else if (*sum!= partial) Inizializzazione i i della somma return true; Esercizio 1 - Soluzione (5) boolean verifydiagonals(matrice i m, int dim, int* sum) int i, j, sum2 = 0; *sum = 0; *sum = *sum + m[i][i]; sum2 = sum2 + m[i][dim-i-1]; i return (*sum == sum2); 5 6 Esercizio 1 - Soluzione (6) Definizione dei codici di ritorno della funzione #define RESULT int #define NOT_WELL_FORMED 0; #define ROWS_CHECK_FAILED 1; #define COLUMNS_CHECK_FAILED CHECK 2; #define DIAGONALS_CHECK_FAILED 3; #define DIFFERENT_SUM 4; #define MAGIC 5; 7 Esercizio 1 - Soluzione (7) RESULT magicsquared( matrice m, int dim, int*magic_constant) boolean result; int sum, sum2; result = verifymatrix(m, dim); return NOT_WELL_FORMED; result = verifyrows(m, dim, &sum); return ROWS_CHECK_FAILED; result = verifycolumns(m, dim, &sum2); return COLUMNS_CHECK_FAILED; _ 8

Esercizio 1 - Soluzione (8) if(sum!= sum2) return DIFFERENT_SUM; result = verifydiagonals(m, dim, &sum2); return DIAGONALS_CHECK_FAILED; if(sum!= sum2) return DIFFERENT_SUM; *magic_constant = sum; return MAGIC; Esercizio i 2: Algoritmi i di ordinamento Astrazione degli algoritmi di ordinamento Implementare i diversi algoritmi di ordinamento, facendo in modo di astrarre completamente dal tipo degli elementi del vettore e Fare anche in modo che vengano stampate delle statistiche sul numero di confronti e di scambi effettuati Testare la soluzione su un vettore di interi, un vettore di caratteri, un vettore di stringhe 9 10 Esercizio 2 - elementdef.h Nel caso di interi #ifndef ELEMENTDEF #define ELEMENTDEF typedef int Element; Nel caso di stringhe #ifndef ELEMENTDEF #define ELEMENTDEF typedef char* Element; Esercizio 2 - element.h #ifndef ELEMENT #define ELEMENT int compare(element e1, Element e2); void swap(element *e1, Element *e2); void assign(element *lvalue, Element rvalue); void printelement(element e); void printstatistics(); 11 12

Esercizio 2 - element.c (1) #include "elementdef.h" #include <stdio.h> #include <string.h> //se il tipo è stringa int comparecounter = 0; int swapcounter = 0; void incrementcomparecounter() comparecounter++; void incrementswapcounter() swapcounter++; 13 Esercizio 2 - element.c (2) void assign(element *lvalue, Element rvalue) *lvalue = rvalue; void swap(element *e1, Element *e2) Element tmp; assign(&tmp, *e1); assign(e1, *e2); assign(e2, tmp); incrementswapcounter(); 14 Esercizio 2 - element.c (3) Nel caso di interi int compare(element e1, Element e2) incrementcomparecounter(); return e1 - e2; void printelement(element e) printf( %d\n, e); Nel caso di stringhe int compare(element e1, Element e2) incrementcomparecounter(); return strcmp(e1, e2); // e ovviamente printelement con %s 15 Esercizio 2 - altri header commondef.h #ifndef COMMONDEF #define COMMONDEF #define DIM 20 typedef Element Array[DIM]; sort.h void printarray(array a, int dim); void naivesort(array a, int dim); // e tutti gli altri tipi di sort 16

Esercizio i 2 ad esempio printarray #include "elementdef.h" #include "commondef.h" #include "element.h" #include <stdio.h> void printarray(array a, int dim) int i; printf("---vettore---\n"); printelement(a[i]); printf("-------------\n"); 17 Esercizio i 2 ad esempio naivesort void naivesort(array a, int dim) int j, i, posmin; Element min; for (j = 0; j < dim; j++) posmin = j; for ( assign(&min, a[j]), i = j + 1; i < dim; i++) if(compare(a[i], min) < 0) posmin = i; assign(&min, a[i]); if (posmin!= j) swap(&a[j], &a[posmin]); 18