View
4
Download
0
Category
Preview:
Citation preview
Esercizio 1
La prova di verifica e algoritmi di forza bruta
Giuseppe Persianogiuper@dia.unisa.it
Dipartimento di Informatica ed Appl. ”Renato M. Capocelli”Università di Salerno
Giuseppe Persianogiuper@dia.unisa.it
Esercizio 1
Esercizio
Scrivere uno script che pone x = 5 e y = 3 e poi esegue i seguenticalcoli:
a = xy3
x−y
b = 3πx2
c = 4(y−5)3x−6
d = 7(x (13
) +4y 0.58)
f = 8cos(πx4 )
g = 2tan(x)5
Giuseppe Persianogiuper@dia.unisa.it
Esercizio 1
Uno script di conti
aaa.m
x=5;
y=3;
a=(x*y^3)/(x-y);
b=3*pi*x^2;
c=4*(y-5)/(3*x-6);
d=7*(x^(1/3)+4*y^0.58);
f=8*cos((pi*x)/4);
g=2*tan(x)/5;
Giuseppe Persianogiuper@dia.unisa.it
Esercizio 1
Esercizio 2
Esercizio
Scrivere uno script che genera un vettore x di 100 componenti,costituito da numeri reali compresi tra 0 e 2 equispaziati, ed unvettore y di 30 componenti costituito da numeri reali compresi tra10 e 25 equispaziati.Si verifichi, inoltre, la dimensione di x e quella di y .
Giuseppe Persianogiuper@dia.unisa.it
Esercizio 1
Esercizio 2
bbb.m
x=linspace(0,2);
y=linspace(10,25,30);
fprintf(’dimensione di x: %d\n’, size(x,2));
fprintf(’dimensione di y: %d\n’, size(y,2));
Giuseppe Persianogiuper@dia.unisa.it
Esercizio 1
Esercizio 3
Esercizio
Scrivere una funzione che, dato un vettore x, restituisce due vettoria e b, che contengono rispettivamente gli elementi di x in posizionepari e quelli in posizione dispari.
Giuseppe Persianogiuper@dia.unisa.it
Esercizio 1
Esercizio 3
ccc.m
function [x_pari, x_dispari]=ccc(x)
x_pari=x(2:2:end);
x_dispari=x(1:2:end);
end
Giuseppe Persianogiuper@dia.unisa.it
Esercizio 1
Esercizio 4
Esercizio
Scrivere uno script che sostitusce gli elementi della matrice A chesono maggiori di 3 con 5.
Giuseppe Persianogiuper@dia.unisa.it
Esercizio 1
Esercizio 4
ddd.m
indici_maggiori_3=A > 3;
A(indici_maggiori_3)=5
Giuseppe Persianogiuper@dia.unisa.it
Esercizio 1
Esercizio 5
Esercizio
Scrivere uno script che, letto da tastiera un vettore di tre elementiche rappresentano rispettivamente il numero di ore, minuti esecondi, calcoli il numero totale di secondi e lo stampi a video.
Giuseppe Persianogiuper@dia.unisa.it
Esercizio 1
Esercizio 5
eee.m
vettore=input(’Inserisci un vettore con tre numeri \n
indicanti ore, minuti e secondi:\n’);
secondi=vettore(3);
secondi=secondi+vettore(2)*60;
secondi=secondi+vettore(1)*3600;
disp(’Dato il vettore:’);
disp(vettore);
fprintf(’numero di secondi: %d\n’, secondi);
Giuseppe Persianogiuper@dia.unisa.it
Esercizio 1
Esercizio 6
Esercizio
Scrivere una funzione che prende come argomento n e restituisce lasomma dei primi n numeri primi.
Giuseppe Persianogiuper@dia.unisa.it
Esercizio 1
Esercizio 6
fff.m
function [somma]=fff(n)
somma=0;
p=primi(n);
somma=sum(p);
end
Giuseppe Persianogiuper@dia.unisa.it
Esercizio 1
Esercizio 7
Esercizio
Si scriva una funzione che prende in input due numeri naturali n ek, con n >= k e restituisce in output il coefficiente binomiale. Lafunzione restituisce −1 se se n < k. Si ricorda che:
(nk
)= n!k!(n−k)!
Giuseppe Persianogiuper@dia.unisa.it
Esercizio 1
Esercizio 7
ggg.m
function [bin]=ggg(n,k)
if(n
Esercizio 1
Esercizio 8
Esercizio
Si scriva uno script che costruisce un array di strutture studente.Ogni struttura studente ha 4 campi: nome, cognome, matricola,media dei voti degli esami superati. Ogni studente viene letto datastiera. Al termine dell’inserimento di uno studente, bisognachiedere all’utente se vuole inserire un nuovo studente e terminarela funzione in caso contrario.Al termine degli inserimenti lo script deve stampare l’arraycontenente tutti gli studenti inseriti.Nota: lo script non deve ordinare l’array.
Giuseppe Persianogiuper@dia.unisa.it
Esercizio 1
Esercizio 8
hhh.m
A=[];
while(1)
a.cognome=input(’Inserisci il cognome
dello studente: ’, ’s’);
a.nome=input(’Inserisci il nome
dello studente: ’, ’s’);
a.matricola=input(’Inserisci la matricola
dello studente: ’, ’s’);
a.media_voti=input(’Inserisci la media dei
voti dello studente: ’);
A=[A a];
answer=input(’Vuoi inserire un nuovo
studente?(si/no) ’, ’s’);
if(cmpstr(answer, ’no’)==0) break;1end
end
Giuseppe Persianogiuper@dia.unisa.it
Esercizio 1
Esercizio 8
hhh.m
disp(’Gli studenti inseriti sono:’);
for i=1:length(A)
disp(A(i));
end
Giuseppe Persianogiuper@dia.unisa.it
Esercizio 1
N regine
stampare tutte le possibili disposizioni di n regine su una scacchieran × n in modo tale che nessuna regina è attaccabile da un’altra.
NQ.m
function NQ(C,i,n)
if i==n+1
stampasol(C,n);
return;
end
for j=1:n
C(i)=j;
if legal(C,i,j)==1
NQ(C,i+1,n);
end
end
endGiuseppe Persianogiuper@dia.unisa.it
Esercizio 1
N regine
NQ.m
function stampasol(C,n)
for i=1:n
printf(’Regina alla posizione (%d,%d)\n’,i,C(i));
end
printf(’\n’);
end
Giuseppe Persianogiuper@dia.unisa.it
Esercizio 1
N regine
NQ.m
function r=legal(C,i,j)
r=1;
for k=1:i-1
if C(k)==j
r=-1;
return;
end
if(k+C(k)==i+C(i))
r=-1;
return;
end
if(k-C(k)==i-C(i))
r=-1;
return;
end
end
end
Giuseppe Persianogiuper@dia.unisa.it
Esercizio 1
N regine
contare tutte le possibili disposizioni di n regine su una scacchieran × n in modo tale che nessuna regina è attaccabile da un’altra.
contaNQ.m
function c=contaNQ(C,i,n)
if i==n+1
c=1;
return;
end
c=0;
for j=1:n
C(i)=j;
if legal(C,i,j)==1
c=c+contaNQ(C,i+1,n);
end
end
end Giuseppe Persianogiuper@dia.unisa.it
Esercizio 1
N regine
Esempi di utilizzo
octave:2> contaNQ(C,1,1) ans = 1
octave:3> contaNQ(C,1,2) ans = 0
octave:4> contaNQ(C,1,3) ans = 0
octave:5> contaNQ(C,1,4) ans = 2
octave:6> contaNQ(C,1,5) ans = 10
octave:7> contaNQ(C,1,6) ans = 4
octave:8> contaNQ(C,1,7) ans = 40
octave:9> contaNQ(C,1,8) ans = 92
octave:10> contaNQ(C,1,9) ans = 352
octave:11> contaNQ(C,1,10) ans = 724
Giuseppe Persianogiuper@dia.unisa.it
Esercizio 1
N regine
Esempi di utilizzo
octave:19> tic; contaNQ(C,1,1); toc
Elapsed time is 0.01336 seconds.
octave:20> tic; contaNQ(C,1,2); toc
Elapsed time is 0.01195 seconds.
octave:21> tic; contaNQ(C,1,3); toc
Elapsed time is 0.01148 seconds.
octave:22> tic; contaNQ(C,1,4); toc
Elapsed time is 0.01814 seconds.
octave:23> tic; contaNQ(C,1,5); toc
Elapsed time is 0.03653 seconds.
octave:24> tic; contaNQ(C,1,6); toc
Elapsed time is 0.1195 seconds.
Giuseppe Persianogiuper@dia.unisa.it
Esercizio 1
N regine
Esempi di utilizzo
octave:25> tic; contaNQ(C,1,7); toc
Elapsed time is 0.4631 seconds.
octave:26> tic; contaNQ(C,1,8); toc
Elapsed time is 2.185 seconds.
octave:27> tic; contaNQ(C,1,9); toc
Elapsed time is 10.87 seconds.
octave:28> tic; contaNQ(C,1,10); toc
Elapsed time is 56.3 seconds.
octave:29> tic; contaNQ(C,1,11); toc
Elapsed time is 316.1 seconds.
Giuseppe Persianogiuper@dia.unisa.it
Esercizio 1
SUDOKU
origine.m
%calcola il punto di origine
%del riquadro di r,c
function [a,b]=origine(r,c)
a=r;
if rem(r,3)==0 a=a-2; end
if rem(r,3)==2 a=a-1; end
b=c;
if rem(c,3)==0 b=b-2; end
if rem(c,3)==2 b=b-1; end
end
Giuseppe Persianogiuper@dia.unisa.it
Esercizio 1
SUDOKU
legale.m
%%restituisce 1 se e’ legale assegnare A(r,c)=k
function s=legale(A,r,c,k)
s=1;
for j=1:9
if A(r,j)==k %controlla se k
s=-1; %compare nella riga r
return;
end
if A(j,c)==k %controlla se k
s=-1; %compare nella colonna c
return;
end
end
Giuseppe Persianogiuper@dia.unisa.it
Esercizio 1
SUDOKU
legale.m
[a,b]=origine(r,c); %origine del riquadro
for j1=0:2 %controlla se k
for j2=0:2 %compare nel riquadro
if A(a+j1,b+j2)==k
s=-1;
return;
end
end
end
end
Giuseppe Persianogiuper@dia.unisa.it
Esercizio 1
SUDOKU
sudoku.m
function sudoku(A,i)
if (i==82) A
return;
end
[r,c]=rowcol(i);
if A(r,c)~=0
sudoku(A,i+1); return;
end
for k=1:9
%printf(’\tTrying %d at %d %d\n’,k,r,c);
if (legale(A,r,c,k)==1)
A(r,c)=k; sudoku(A,i+1);
end
end
end
Giuseppe Persianogiuper@dia.unisa.it
Esercizio 1
SUDOKU
Esempio
1 0 0 0 0 0 0 7 4
0 9 0 6 0 2 0 0 0
5 0 0 0 9 0 0 0 0
0 0 0 0 0 5 0 0 0
4 3 7 0 2 0 8 1 5
0 0 0 4 0 0 0 0 0
0 0 0 0 8 0 0 0 9
0 0 0 1 0 3 0 4 0
8 2 0 0 0 0 0 0 6
Sudoku di Repubblica del 5 giugno 2011
Giuseppe Persianogiuper@dia.unisa.it
Esercizio 1
SUDOKU
Dopo 25 secondi
1 6 2 3 5 8 9 7 4
7 9 4 6 1 2 5 8 3
5 8 3 7 9 4 6 2 1
2 1 9 8 3 5 4 6 7
4 3 7 9 2 6 8 1 5
6 5 8 4 7 1 3 9 2
3 4 6 2 8 7 1 5 9
9 7 5 1 6 3 2 4 8
8 2 1 5 4 9 7 3 6
Giuseppe Persianogiuper@dia.unisa.it
Esercizio 1
Recommended