Process synchronization

Slides:



Advertisements
Presentazioni simili
Iterazione Vs Ricorsione
Advertisements

Questi a lato sono i meridiani, delle
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE La Ricorsione Marco D. Santambrogio – Ver. aggiornata al 29 Maggio 2014.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE La Ricorsione Marco D. Santambrogio – Ver. aggiornata al 21 Maggio 2014.
Allievi Elettrici - AA Le funzioni ricorsive in C
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE La Ricorsione Marco D. Santambrogio – Ver. aggiornata al 29 Maggio 2014.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Iterazione Vs Ricorsione Marco D. Santambrogio – Ver. aggiornata al 24 Agosto 2015.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Iterazione Vs Ricorsione Marco D. Santambrogio – Ver. aggiornata al 8 Gennaio 2016.
La rappresentazione Della Terra.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE La Ricorsione Marco D. Santambrogio – Ver. aggiornata al 18 Maggio 2016.
VETTORI: DEFINIZIONI Se ad una grandezza fisica G si associa una direzione ed un verso si parla di vettori: ✔ Le grandezze fisiche possono essere di due.
Huffman Canonico: approfondimento. Come abbiamo visto, Huffman canonico ci permette di ottenere una decompressione più veloce e con un uso più efficiente.
INFORMATICA ALGORITMI, PROGRAMMI, E LINGUAGGI DI PROGRAMMAZIONE.
LE CONICHE : LA PARABOLA. VARIE CONICHE DIFFERENZE TRA CONICHE ● Parabola: nel caso della parabola, il nome è stato dato perché la figura si ottiene.
IL SOFTWARE (FPwin 6.0).
Ambienti di Programmazione per il Software di Base
Le coordinate geografiche
Progettare algoritmi veloci usando strutture dati efficienti
La terra La Terra è un pianeta, cioè un corpo celeste a forma
Nozioni di Cartografia e problemi legati alla navigazione
Le coordinate geografiche
Per comprendere la Geografia
LA TERRA IL NOSTRO PIANETA.
Progettare algoritmi veloci usando strutture dati efficienti
Esempio : Punto A Latitudine: 55°N Longitudine: 040°E Pn
Diagrammi 2D e 3D Funzioni di ordine superiore
Sistema di riferimento su una retta
Le coordinate geografiche
Algoritmi e Strutture Dati
Approcci nella soluzione di un problema
UNITA’ 0.2 PP. 6-8 Prof.ssa Nanci
Programmazione strutturata
Process synchronization
Tipo di dato: array Un array è un tipo di dato usato per memorizzare una collezione di variabili dello stesso tipo. Per memorizzare una collezione di 7.
Diagrammi 2D e 3D Funzioni di ordine superiore
Process synchronization
Recap su: array e puntatori
Manovra evasiva – Caso particolare – presenza di un basso fondale
60 N Vr = 24 Kn V 2 Kn : 1 cm Vp’ 314 – 20 Kn Vr’ 18 Kn
Process synchronization
Process synchronization
iterazione o ricorsione nel pensare per OGGETTI
Process synchronization
Process synchronization
Iterazione Vs Ricorsione
Iterazione Vs Ricorsione
Ricorsione 16/01/2019 package.
Process synchronization
ASTRONOMIA La sfera celeste.
Algoritmo InsertionSort
Process synchronization
Strapazziamo le immagini…
Progettare algoritmi veloci usando strutture dati efficienti
Process synchronization
* 07/16/96 Sez. 2: Ordinamento La consultazione di banche dati è sempre più cruciale in tutte le applicazioni dell’Informatica. Se vogliamo consultare.
Corso di Informatica 2 a.a. 2003/04 Lezione 2
Tano Cavattoni L’Universo Età 13,7 miliardi di anni.
APPUNTI SUL LINGUAGGIO C Implementazioni di Liste Concatenate
Algoritmi e Strutture Dati
Process synchronization
Le coordinate geografiche
Process synchronization
Coordinate geografiche
Process synchronization
Process synchronization
Iterazione Vs Ricorsione
Process synchronization
Process synchronization
Script su vettori Realizza uno script che chiede in input una dimensione d e crea un vettore di d numeri interi casuali. Poi calcola la somma dei due numeri.
Corso di Fondamenti di Informatica
Transcript della presentazione:

Process synchronization Operating System Operating System Lab 6 – Info B Luca M. Cassano – luca.cassano@polimi.it Sadegh M. Astaneh – sadegh.astaneh@unimi.it Matteo Papini – matteo.papini@polimi.it © 2005 William Fornaciari © 2005 William Fornaciari 1

Process synchronization Lab 6: Obiettivi Operating System Introduzione a Matlab/Octave Grafici Funzioni Ricorsive Strutture 2 © 2005 William Fornaciari

Process synchronization Grafici Operating System Superficie di rotazione Disegno 2D Mappamondo 3 © 2005 William Fornaciari

Process synchronization Superficie di rotazione Operating System Scrivere un programma che permetta di visualizzare la funzione bidimensionale sin(r)/r, lungo le due direzioni x e y N.B.: r è la distanza dall'origine nel piano XY 4 © 2005 William Fornaciari

Process synchronization sin(r)/r Operating System 5 © 2005 William Fornaciari

Process synchronization Soluzione Operating System [X,Y] = meshgrid(-8:.5:8); R = sqrt(X.^2 + Y.^2) + eps; Z = sin(R)./R; mesh(X,Y,Z)  6 © 2005 William Fornaciari

Process synchronization Disegno 2D Operating System Scrivere un programma di disegno 2D interattivo: L'utente può scegliere se disegnare un segmento o un cerchio Segmento: l'utente fornisce i due estremi come array di Matlab (e.g. [-1,-1] e [2,3]) Cerchio: l'utente fornisce centro e raggio L'utente sceglie se disegnare altre figure (segmenti e cerchi) o smettere Tutte le figure devono essere disegnate sullo stesso piano   7 © 2005 William Fornaciari

Process synchronization Suggerimenti Operating System Equazione parametrica del segmento: Equazione parametrica del cerchio:   8 © 2005 William Fornaciari

Process synchronization Esempio Operating System   9 © 2005 William Fornaciari

Process synchronization Soluzione Operating System   function [ xx,yy ] = segmento(x0,y0,x1,y1) lambda = 0:.01:1; xx = x0*lambda + x1*(1-lambda); yy = y0*lambda + y1*(1-lambda); end function [xx,yy] = cerchio(x0,y0,r) t = 0:pi/180:2*pi; xx = x0 + r*cos(t); yy = y0 + r*sin(t); end 10 © 2005 William Fornaciari

Process synchronization Soluzione (cont'd) Operating System   figure; hold on; title('Disegno'); again = 1; target = '?'; while(again) target = input('Cosa vuoi disegnare?\n','s'); switch(target) case('segmento') p0 = input('Inserire primo punto\n'); p1 = input('Inserire secondo punto\n'); [xx,yy] = segmento(p0(1),p0(2),p1(1),p1(2)); seg = plot(xx,yy); set(seg,'Linewidth',2); case('cerchio') c = input('Inserisci centro\n'); r = input('Inserisci raggio\n'); [xx,yy] = cerchio(c(1),c(2),r); cer = plot(xx,yy); set(cer,'LineWidth',2); case('esci') again = 0; end 11 © 2005 William Fornaciari

Process synchronization Mappamondo Operating System Scrivere un programma che permetta di visualizzare località sul mappamondo date le coordinate geografiche Rappresentare il mappamondo con una sfera di raggio unitario Visualizzare sulla sfera l'equatore e il meridiano di Greenwich In modo interattivo, l'utente può inserire latitudine (da - 90° a 90°) e longitudine (da -180° a 180°). Visualizzare il punto corrispondente sulla sfera   12 © 2005 William Fornaciari

Process synchronization Un po' di geografia Operating System Latitudine: da -90° (Sud) a 90° (Nord) Longitudine: da -180° (Ovest) a 180° (Est) Equatore: cerchio di latitudine 0 Meridiano di Greenwich: semicerchio di longitudine 0 13 © 2005 William Fornaciari

Process synchronization Suggerimenti Operating System Equazione parametrica del cerchio: Equazione parametrica della sfera: 14 © 2005 William Fornaciari

Process synchronization Esempio Operating System 15 © 2005 William Fornaciari

Process synchronization Soluzione Operating System function [XX,YY,ZZ] = punto_sfera(r,t1,t2) XX = r*cos(t1).*cos(t2); YY = r*cos(t1).*sin(t2); ZZ = r*sin(t1); end 16 © 2005 William Fornaciari

Process synchronization Soluzione (cont'd) Operating System figure; %Sfera r = 1; [t1,t2] = meshgrid(0:pi/180:2*pi); [XX,YY,ZZ] = punto_sfera(r,t1,t2); mesh(XX,YY,ZZ); hold on %Equatore t3 = 0:pi/180:2*pi; xx = r*cos(t3); yy = r*sin(t3); eq = plot(xx,yy); set(eq,'Linewidth',2); %Greenwich t4 = -pi/2:pi/180:pi/2; yy = zeros(length(t4)); xx = r*cos(t4); zz = r*sin(t4); eq = plot3(xx,yy,zz); ... 17 © 2005 William Fornaciari

Process synchronization Soluzione (cont'd) Operating System ... %Punti ii = 1; punti = []; again = ('si'); while(~strcmp(again,'no')) lat = -100; while(lat<-90 || lat>90) lat = input('Inserire latitudine\n'); end lat = pi*lat/180; lon = -200; while(lon<-180 || lon>180) lon = input('Inserire longitudine\n'); lon = pi*lon/180; [x,y,z] = punto_sfera(r,lat,lon); punti(ii) = plot3(x,y,z,'ro'); set(punti(ii),'MarkerFaceColor','r'); again = input('Vuoi disegnare ancora?\n','s'); N.B. La stessa funzione (punto_sfera) può essere usata per generare un luogo di punti o un singolo punto! 18 © 2005 William Fornaciari

Process synchronization Strutture Operating System Scrivere un programma che chieda all’utente di inserire una serie di dati contenenti ognuno i seguenti attributi: città (stringa) giorno (intero positivo) mese (intero positivo) anno (intero positivo) tipo di misurazione (char) valore (reale) 19 © 2005 William Fornaciari

Process synchronization Strutture Operating System Ad esempio, l’utente potrà inserire: Milano 04 12 2017 N 10.5 20 © 2005 William Fornaciari

Process synchronization Strutture Operating System Dopo aver acquisito una certa quantità di dati, il programma dovrà chiedere all’utente il nome di una città e un tipo di misurazione. A questo punto il programma cercherà nell’archivio tutti i record riguardanti la città e il tipo di misurazione richiesti. Stamperà poi a video i dati selezionati ed il relativo valore minimo, massimo e medio dei valori.   21 © 2005 William Fornaciari

Process synchronization Soluzione Operating System function dati = acquisizione_dati_meteo() next = 1; dati = []; ii = 0; while next == 1 ii = ii + 1; dati(ii).city = input('Citta'': ','s'); dati(ii).giorno = input('Giorno: '); dati(ii).mese = input('Mese: '); dati(ii).anno = input('Anno: '); dati(ii).tipo = input('Tipo: ','s'); dati(ii).valore = input('Valore: '); next = input('Per inserire un nuovo record premere 1,altrimenti 0: '); end fprintf('%d dati inseriti.\n', ii);   22 © 2005 William Fornaciari

Process synchronization Soluzione Operating System function [city, tipo] = interrogazione_archivio_meteo() city = input('Citta` di interesse: ', 's'); tipo = input('Tipo misura da selezionare: ', 's'); End function [dati_sel, min, medio, max] = calc_statistiche_meteo(dati, city, tipo) for ii = 1:numel(dati) res(ii) = strcmp(dati(ii).city,city); end indici = res & [dati.tipo] == tipo; dati_sel = dati(indici); minimo = min([dati_sel.valore]); massimo = max([dati_sel.valore]); medio = mean([dati_sel.valore]);   23 © 2005 William Fornaciari

Process synchronization Soluzione Operating System function stampa_statistiche(dati_sel, city, tipo, minimo, medio, massimo) fprintf('Statistiche della misura %c in citta'' %s\n', tipo, city); for r = dati_sel fprintf('%d/%d/%d %f\n', r.giorno, r.mese, r.anno, r. valore); end fprintf('\nMin: %3.2f, med: %3.2f, max: %3.2f\n', minimo,medio, massimo); end  24 © 2005 William Fornaciari

Process synchronization funzioni ricorsive Operating System I numeri di Fibonacci (dinamiche di popolazione) Il Massimo Comun Divisore (algoritmo di Euclide) Il problema delle torri di Hanoi 25 © 2005 William Fornaciari

Process synchronization I numeri di Fibonacci Operating System Idea di base 1) fib(n)=1 se n=0 oppure n=1 2) fib(n)= fib(n-1) + fib(n-2) se n>1 26 © 2005 William Fornaciari

Process synchronization I numeri di Fibonacci Operating System 1) fib(n)=1 se n=0 opp. n=1 2) fib(n)= fib(n-1) + fib(n-2) se n>1 Vengono usati per modellare la crescita di animali per diverse generazioni function [f]=fib (n) if n==1 | n==2 f = 1; else f = fib(n - 2) + fib(n - 1); end 27 © 2005 William Fornaciari

Process synchronization Il MCD Operating System Definizione: 1) MCD(m,n)=m se m=n 2a) MCD(m,n)= MCD(m-n,n) se m>n 2b) MCD(m,n)=MCD(m,n-m) se n>m esempio: MCD(21,56) = MCD(21,35) = MCD(21,14)= = MCD(7,14) = MCD(7,7) = 7 28 © 2005 William Fornaciari

Process synchronization IL MCD Operating System Iterativo: function [M]=MCDeuclid(m,n) while m ~= n if m>n m=m-n; else n=n-m; end M=m; 29 © 2005 William Fornaciari

Process synchronization IL MCD Operating System Ricorsivo: function [M]=MCDeuclidRic(m,n) if m==n M=m; else if m>n M = MCDeuclidRic(m-n,n); else M = MCDeuclidRic(m,n-m); end Iterativo: function [M]=MCDeuclid(m,n) while m ~= n if m>n m=m-n; else n=n-m; end M=m; Attenzione alla condizione di terminazione!!!!! N.B. è sempre possibile trovare un corrispondente iterativo di un programma ricorsivo!!! 30 © 2005 William Fornaciari

Process synchronization Le torri di Hanoi Operating System http://www.cs.cmu.edu/~cburch/survey/recurse/hanoi.html Problema: spostare tutti i dischi dalla torre A alla torre B (usando la torre C come “supporto intermedio”) in modo che si trovino nello stesso ordine 31 © 2005 William Fornaciari

Process synchronization Le torri di Hanoi Operating System Scriveremo una funzione ricorsiva che prende come parametro il numero del disco più grande che vogliamo spostare (da 0 a 5 come nel disegno) La funzione prenderà anche tre parametri che indicano: da quale asta vogliamo partire (source), a quale asta vogliamo arrivare (dest), l’altra asta, che possiamo usare come supporto temporaneo (spare). 32 © 2005 William Fornaciari

Process synchronization L’idea di base Operating System Voglio spostare n anelli dal piolo sorgente, a quello destinazione, usando come appoggio il piolo ausiliario Devo quindi prima spostare n - 1 anelli dal sorgente all'ausiliario, usando come appoggio il piolo destinazione Poi sposto l'unico anello rimasto dal sorgente al piolo destinazione Infine sposto gli n - 1 anelli che si trovano sull'ausilliario all'anello destinazione.. 33 © 2005 William Fornaciari

Process synchronization L’uso della ricorsione Operating System Quando si spostano gli n - 1 anelli la funzione hanoi richiama se stessa, cioè effettua una chiamata ricorsiva, semplificando però il problema perché bisogna spostare un numero di anelli inferiore. In pratica, con la ricorsione il problema viene continuamente ridotto di complessità fino alla soluzione banale in cui rimane solo un anello, che viene semplicemente spostato nel piolo destinazione. 34 © 2005 William Fornaciari

Process synchronization Le torri di Hanoi: strategia Operating System Ridurremo il problema a quello di spostare 5 dischi dalla torre C alla torre B, dopo che il disco 5 è stato già messo nella posizione giusta 35 © 2005 William Fornaciari

Process synchronization Pseudocodice Operating System FUNCTION MoveTower(disk, source, dest, spare): IF disk == 0, THEN: move disk from source to dest ELSE: MoveTower(disk - 1, source, spare, dest) /* (Passo 1) */ move disk from source to dest // /* (Passo 2) */ MoveTower(disk - 1, spare, dest, source) // /* (Passo 3) */ END IF Nota: l’algoritmo aggiunge un caso base: quando il disco è il più piccolo (il numero 0). In questo caso possiamo muoverlo direttamente perché non ne ha altri sopra. Negli altri casi, seguiamo la procedura descritta per il disco 5. 36 © 2005 William Fornaciari

Process synchronization Soluzione in codice MATLAB con simulazione Operating System function []=hanoi(n, da, a, per) if (n>1) hanoi(n-1, da, per, a); end; fprintf('\n sposta un disco dal piolo %d al piolo %d \n', da, a); if (n>1) hanoi(n-1, per, a, da); end; hanoi(3, 1, 2, 3) hanoi(2, 1, 3, 2) hanoi(2, 3, 2, 1) hanoi(1, 1, 2, 3) hanoi(1, 2, 3, 1) hanoi(1, 3, 1, 2) >> hanoi(3, 1, 2, 3) sposta un disco dal piolo 1 al piolo 2 sposta un disco dal piolo 1 al piolo 3 sposta un disco dal piolo 2 al piolo 3 sposta un disco dal piolo 3 al piolo 1 sposta un disco dal piolo 3 al piolo 2 >> 37 © 2005 William Fornaciari