giuseppe persiano...

31
Esercizio 1 La prova di verifica e algoritmi di forza bruta Giuseppe Persiano [email protected] Dipartimento di Informatica ed Appl. ”Renato M. Capocelli” Universit` a di Salerno Giuseppe [email protected]

Upload: others

Post on 03-Feb-2021

3 views

Category:

Documents


0 download

TRANSCRIPT

  • Esercizio 1

    La prova di verifica e algoritmi di forza bruta

    Giuseppe [email protected]

    Dipartimento di Informatica ed Appl. ”Renato M. Capocelli”Università di Salerno

    Giuseppe [email protected]

  • 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 [email protected]

  • 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 [email protected]

  • 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 [email protected]

  • 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 [email protected]

  • 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 [email protected]

  • 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 [email protected]

  • Esercizio 1

    Esercizio 4

    Esercizio

    Scrivere uno script che sostitusce gli elementi della matrice A chesono maggiori di 3 con 5.

    Giuseppe [email protected]

  • Esercizio 1

    Esercizio 4

    ddd.m

    indici_maggiori_3=A > 3;

    A(indici_maggiori_3)=5

    Giuseppe [email protected]

  • 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 [email protected]

  • 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 [email protected]

  • Esercizio 1

    Esercizio 6

    Esercizio

    Scrivere una funzione che prende come argomento n e restituisce lasomma dei primi n numeri primi.

    Giuseppe [email protected]

  • Esercizio 1

    Esercizio 6

    fff.m

    function [somma]=fff(n)

    somma=0;

    p=primi(n);

    somma=sum(p);

    end

    Giuseppe [email protected]

  • 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 [email protected]

  • 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 [email protected]

  • 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 [email protected]

  • Esercizio 1

    Esercizio 8

    hhh.m

    disp(’Gli studenti inseriti sono:’);

    for i=1:length(A)

    disp(A(i));

    end

    Giuseppe [email protected]

  • 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 [email protected]

  • 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 [email protected]

  • 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 [email protected]

  • 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 [email protected]

  • 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 [email protected]

  • 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 [email protected]

  • 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 [email protected]

  • 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 [email protected]

  • 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 [email protected]

  • 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 [email protected]

  • 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 [email protected]

  • 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 [email protected]

  • 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 [email protected]

    Esercizio 1