22
Fondamenti di Informatica lesson 25 Exercises 2013/06/23 Prof. Emiliano Casalicchio [email protected]

Fondamenti di Informatica - DidatticaWEBdidattica.uniroma2.it/assets/uploads/corsi/144403/Lezione25-FOI.pdf · Ordinare gli elementi dell’agenda (nome, cognome, numero di telefono)

  • Upload
    buihanh

  • View
    221

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Fondamenti di Informatica - DidatticaWEBdidattica.uniroma2.it/assets/uploads/corsi/144403/Lezione25-FOI.pdf · Ordinare gli elementi dell’agenda (nome, cognome, numero di telefono)

Fondamenti di Informatica

lesson 25

Exercises

2013/06/23

Prof. Emiliano Casalicchio [email protected]

Page 2: Fondamenti di Informatica - DidatticaWEBdidattica.uniroma2.it/assets/uploads/corsi/144403/Lezione25-FOI.pdf · Ordinare gli elementi dell’agenda (nome, cognome, numero di telefono)

Esami

n  Appelli (Prova Scritta - Prova Pratica)

 1 Luglio (ore 9:00) 3 Luglio (ore 14)  15 Luglio (ore 9:00) 17 Luglio (ore 14)

n  Regole

 Alla prova scritta non è consentito consultare ne libri, ne appunti, ne dispositivi elettronici di alcun genere (telefoni, palmari, etc…)

 Alla prova pratica si accede solo se si supera la prova scritta, ossia si consegue un voto >= 18/30

2

Page 3: Fondamenti di Informatica - DidatticaWEBdidattica.uniroma2.it/assets/uploads/corsi/144403/Lezione25-FOI.pdf · Ordinare gli elementi dell’agenda (nome, cognome, numero di telefono)

Esercizi

n  Dato l’andamento giornaliero dello spread degli ultimi 2 anni

  costruire la top 10 ordinata per valore assunto dallo spread e la relativa data

n  Ordinare gli elementi dell’agenda (nome, cognome, numero di telefono) in ordine alfabetico cresente per cognome

n  Dato un sudoku completato, verificare che la soluzione sia corretta. Regole:

  matrice 9x9 divisa in sottomatrici 3x3   ogni sottomatrice deve contenere elementi da 1 a 9

senza ripetizioni   ogni riga deve contenere numeri da 1 a 9 senza

ripetizioni   ogni colonna deve contenere i numeri da 1 a 9 senza

ripetizioni 3

Page 4: Fondamenti di Informatica - DidatticaWEBdidattica.uniroma2.it/assets/uploads/corsi/144403/Lezione25-FOI.pdf · Ordinare gli elementi dell’agenda (nome, cognome, numero di telefono)

Esercizi: Spread

n  Dato l’andamento giornaliero dello spread degli ultimi 2 anni si chiede di determinare

  la top 10 ordinata per valore assunto dallo spread   la top 10 ordinata per data   in entrambi I casi restituire sia il valore dello spread sia

la data

4

Page 5: Fondamenti di Informatica - DidatticaWEBdidattica.uniroma2.it/assets/uploads/corsi/144403/Lezione25-FOI.pdf · Ordinare gli elementi dell’agenda (nome, cognome, numero di telefono)

Analisi del problema: Spread

n  rappresentazione dei dati

  (data,spread) n  rappresentazione della data

 gg, mm, aaaa in struttura?  aaaammgg come numero?

n  rappresentazione della collezione dei dati

 array di strutture? matrice 2xn? 2 array? n  scegliamo una matrice 2xn n  rappresentazione della data aaaammgg n  operazioni

 sort + filter

5

Page 6: Fondamenti di Informatica - DidatticaWEBdidattica.uniroma2.it/assets/uploads/corsi/144403/Lezione25-FOI.pdf · Ordinare gli elementi dell’agenda (nome, cognome, numero di telefono)

Soluzione: spread.m

spreads=[234 233 220 238 257 245 257 259 300 320 ...! 347 356 470 397 350 300 297! 20110701 20110702 20110703 20110704 20110705 ...! 20110706 20110707 20110708 20110709 20110710 ...! 20110711 20110712 20110713 20110714 20110715 ...! 20110716 20110717];! !spreads_sorted=myBubbleSort(spreads,1,'des'); !if length(spreads_sorted)>=10! top10(1,:)=spreads_sorted(1,1:10);! top10(2,:)=spreads_sorted(2,1:10);!else top10=spreads_sorted;!end!

6

Page 7: Fondamenti di Informatica - DidatticaWEBdidattica.uniroma2.it/assets/uploads/corsi/144403/Lezione25-FOI.pdf · Ordinare gli elementi dell’agenda (nome, cognome, numero di telefono)

myBubbleSort

function v = myBubbleSort( v, row ,order)!%Sort the array v along the row specified in the input.!%INPUT: a vector of numbers v!% a row index (1 or 2)!% order 'asc' ascending 'des' descending !%OUTPUT: a vector v of number sorted in descending order! !for i=1:length(v)-1! scambio=false;! for j=2:length(v)-i+1! switch order! case 'des'! if v(row,j-1)<v(row,j)! x1=v(1,j);! x2=v(2,j);! v(1,j)=v(1,j-1);! v(2,j)=v(2,j-1);! v(1,j-1)=x1;! v(2,j-1)=x2;! scambio=true;! end!

7

Page 8: Fondamenti di Informatica - DidatticaWEBdidattica.uniroma2.it/assets/uploads/corsi/144403/Lezione25-FOI.pdf · Ordinare gli elementi dell’agenda (nome, cognome, numero di telefono)

myBubbleSort

!case 'asc'! if v(row,j-1)>v(row,j) ! x1=v(1,j);! x2=v(2,j);! v(1,j)=v(1,j-1);! v(2,j)=v(2,j-1);! v(1,j-1)=x1;! v(2,j-1)=x2;! scambio=true;! end! end! end! if ~scambio! break;! end!end!end!

8

Page 9: Fondamenti di Informatica - DidatticaWEBdidattica.uniroma2.it/assets/uploads/corsi/144403/Lezione25-FOI.pdf · Ordinare gli elementi dell’agenda (nome, cognome, numero di telefono)

Esercizi

n  Ordinare gli elementi di un’agenda (nome, cognome, numero di telefono) in ordine alfabetico cresente per cognome

9

Page 10: Fondamenti di Informatica - DidatticaWEBdidattica.uniroma2.it/assets/uploads/corsi/144403/Lezione25-FOI.pdf · Ordinare gli elementi dell’agenda (nome, cognome, numero di telefono)

Analisi del problema

n  reppresentazione dell’agenda

 struct n  operazioni

 sort su stringhe

10

Page 11: Fondamenti di Informatica - DidatticaWEBdidattica.uniroma2.it/assets/uploads/corsi/144403/Lezione25-FOI.pdf · Ordinare gli elementi dell’agenda (nome, cognome, numero di telefono)

confronto tra stringhe

>> s1='asfsae’;!>> s2='werdf';!>> s1>s2!??? Error using ==> gt!Matrix dimensions must agree.! !>> s1(1:min(length(s1),length(s2)))>s2(1:min(length(s1),length(s2)))!ans =! 0 1 0 1 0!>> strcmp(s1,s2)!ans =! 0!! 11

Page 12: Fondamenti di Informatica - DidatticaWEBdidattica.uniroma2.it/assets/uploads/corsi/144403/Lezione25-FOI.pdf · Ordinare gli elementi dell’agenda (nome, cognome, numero di telefono)

Soluzione del problema

% Inizio Script!%Ordinamento agenda!clear;!agenda=buildData('Agenda.xls');!agenda=mySortCognome(agenda);!% Fine Script!

12

Page 13: Fondamenti di Informatica - DidatticaWEBdidattica.uniroma2.it/assets/uploads/corsi/144403/Lezione25-FOI.pdf · Ordinare gli elementi dell’agenda (nome, cognome, numero di telefono)

mySortCognome

function v = mySortCognome(v)!%Sort the array v along the row specified in the input.!%INPUT: a struct vector containing strings!%OUTPUT: a vector v of number sorted in descending order!for i=1:length(v)-1! scambio=false;! for j=2:length(v)-i+1! if gtStr(v(j-1).cognome,v(j).cognome)! x=v(j);! v(j)=v(j-1);! v(j-1)=x;! scambio=true;! end! end! if ~scambio! break;! end!end!end!!

13

Page 14: Fondamenti di Informatica - DidatticaWEBdidattica.uniroma2.it/assets/uploads/corsi/144403/Lezione25-FOI.pdf · Ordinare gli elementi dell’agenda (nome, cognome, numero di telefono)

Esercizi

n  Dato un sudoku completato, verificare che la soluzione sia corretta

  matrice 9x9 divisa in sottomatrici 3x3   ogni sottomatrice deve contenere elementi da 1 a 9

senza ripetizioni   ogni riga deve contenere numeri da 1 a 9 senza

ripetizioni   ogni colonna deve contenere i numeri da 1 a 9 senza

ripetizioni

14

Page 15: Fondamenti di Informatica - DidatticaWEBdidattica.uniroma2.it/assets/uploads/corsi/144403/Lezione25-FOI.pdf · Ordinare gli elementi dell’agenda (nome, cognome, numero di telefono)

Analisi del problema

n  Input:

 matrice 9x9   regole Sudoku

n  Output True or False n  Operazioni (fold di fold)

 analisi righe: fold  analisi colonne: fold  analisi sottomatrici: fold

15

Page 16: Fondamenti di Informatica - DidatticaWEBdidattica.uniroma2.it/assets/uploads/corsi/144403/Lezione25-FOI.pdf · Ordinare gli elementi dell’agenda (nome, cognome, numero di telefono)

Sudoku.m

%Sudoku!clc;!clear;!sudoku = ...; % MATRICE OMESSA PER MANCANZA DI SPAZIO. VEDI CODICE!%!if ~isempty(find(sudoku>9)) || ~isempty(find(sudoku<1)) ! %controllo se gli elementi del sudoku sono complresi da 1 a 9! fprintf(' Sudoku errato. \n Il sudoku contiene valori >9 o < 1');!elseif controlloRighe(sudoku) && ...! controlloColonne(sudoku) && ...! controlloSottomatrici(sudoku)! fprintf(' Sudoku corretto ');!else! fprintf(' Sudoku errato. Ci sono duplicati non ammessi (righe, colonne sottomatrici)');!end!

16

Page 17: Fondamenti di Informatica - DidatticaWEBdidattica.uniroma2.it/assets/uploads/corsi/144403/Lezione25-FOI.pdf · Ordinare gli elementi dell’agenda (nome, cognome, numero di telefono)

controlloRighe.m

function r = controlloRighe( s )!%Data una matrice s controlla che nelle righe !%non ci siano elementi ripetuti.!%INPUT: matrice s!%OUTPUT: r=true se non ci sono ripetizioni. Altrimenti r=false!r=true;!for i=1:size(s,1) % scorro righe! for j=1:size(s,2) % scorro colonne! if length(find(s(i,:)==s(i,j)))>1! r=false;! break;! end! end! if r==false! break;! end!end! !

17

Page 18: Fondamenti di Informatica - DidatticaWEBdidattica.uniroma2.it/assets/uploads/corsi/144403/Lezione25-FOI.pdf · Ordinare gli elementi dell’agenda (nome, cognome, numero di telefono)

controlloColonne.m

function r = controlloColonne( s )!%Data una matrice s controlla che nelle colonne !%non ci siano elementi ripetuti.!%INPUT: matrice s!%OUTPUT: r=true se non ci sono ripetizioni. Altrimenti r=false!r=true;!for i=1:size(s,2) %scorro colonne! for j=2:size(s,1) %scorro righe! if length(find(s(:,i)==s(j,i)))>1! r=false;! break;! end! end! if r==false! break;! end!end! !

18

Page 19: Fondamenti di Informatica - DidatticaWEBdidattica.uniroma2.it/assets/uploads/corsi/144403/Lezione25-FOI.pdf · Ordinare gli elementi dell’agenda (nome, cognome, numero di telefono)

controlloSottomatrici.m

function r = controlloSottomatrici(s)!%Data una matrice s di dimensione 9x9 controlla che nelle sottomatrici !%di dimensione 3x3 (mod 3) non ci siano elementi ripetuti.!%INPUT: matrice s!%OUTPUT: r=true se non ci sono ripetizioni. Altrimenti r=false!r=true;!if size(s,1)~=9 && size(s,2)~=9! r=false;!else!for i=1:3:size(s,1)! for j=1:3:size(s,2)! if ~controlloMatrice(s(i:i+2,j:j+2))! r = false;! break;! end! if r == false! break;! end! end!end!end! 19

Page 20: Fondamenti di Informatica - DidatticaWEBdidattica.uniroma2.it/assets/uploads/corsi/144403/Lezione25-FOI.pdf · Ordinare gli elementi dell’agenda (nome, cognome, numero di telefono)

controlloMatrice.m

function r = controlloMatrice(m)!r=true;!for i=1:size(m,1)! for j=1:size(m,2)! if length(find(m==m(i,j)))>1! r=false;! break;! end! if r == false! break;! end! end!end!

20

Page 21: Fondamenti di Informatica - DidatticaWEBdidattica.uniroma2.it/assets/uploads/corsi/144403/Lezione25-FOI.pdf · Ordinare gli elementi dell’agenda (nome, cognome, numero di telefono)

Simmetrica

n  Verifica se e’ una matrice simmetrica

  iterativa   ricorsiva

21

Page 22: Fondamenti di Informatica - DidatticaWEBdidattica.uniroma2.it/assets/uploads/corsi/144403/Lezione25-FOI.pdf · Ordinare gli elementi dell’agenda (nome, cognome, numero di telefono)

Esercizi

n  Scrivere una funzione che verifichi la simmetricità di una matrice n  Realizzare una funzione per il calcolo delle disposizioni semplici

Dnk=n!/(n-k)! n  Scrivere una funzione che, dati in input due interi N1 ed N2, restituisca

la somma di tutti gli interi compresi tra N1 ed N2. n  Sia assegnato un vettore A di interi di dimensione N. Scrivere una

funzione ricorsiva che calcoli il massimo valore degli elementi di A n  Scrivere una funzione che verifichi se una parola e un palindromo,

ossia se letta in senso inverso, sia da sinistra sia da destra, rimane identica (per es. oro)

n  Scrivere una funzione che verifichi se un numero intero è palindromo, ovvero se letto in senso inverso, sia da sinistra sia da destra, rimane identico (ad es. 101)

22