lpr-b:lpr-b-09:soluzioni
Differenze
Queste sono le differenze tra la revisione selezionata e la versione attuale della pagina.
| Entrambe le parti precedenti la revisioneRevisione precedenteProssima revisione | Revisione precedente | ||
| lpr-b:lpr-b-09:soluzioni [22/10/2009 alle 19:59 (16 anni fa)] – Andrea Corradini | lpr-b:lpr-b-09:soluzioni [22/10/2009 alle 20:42 (16 anni fa)] (versione attuale) – Andrea Corradini | ||
|---|---|---|---|
| Linea 1: | Linea 1: | ||
| ====== Alcune soluzioni proposte ====== | ====== Alcune soluzioni proposte ====== | ||
| - | ===== Tasks e Threads | + | |
| + | [[esercizi|Torna alla pagina degli esercizi proposti]] | ||
| + | |||
| + | [[FAQ|FAQ]] | ||
| + | |||
| + | |||
| + | ====== Tasks e Threads | ||
| + | |||
| + | ===== PrintTask | ||
| < | < | ||
| Linea 52: | Linea 60: | ||
| </ | </ | ||
| - | ===== Tasks e Threads Es 2 ===== | + | ===== SleepTask |
| < | < | ||
| Linea 91: | Linea 99: | ||
| System.out.println(" | System.out.println(" | ||
| } | } | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | ===== PITask2 ===== | ||
| + | |||
| + | < | ||
| + | public class PITask2 implements Runnable | ||
| + | { | ||
| + | private double piEstimate = 0.0; | ||
| + | private long iteration = 0; | ||
| + | private int sign = -1; | ||
| + | private double accuracy; | ||
| + | private Thread main; | ||
| + | |||
| + | public PITask2(double accuracy, Thread main) | ||
| + | { | ||
| + | this.accuracy = accuracy; | ||
| + | this.main = main; | ||
| + | } | ||
| + | |||
| + | public void run() | ||
| + | { | ||
| + | System.out.println(" | ||
| + | while(!Thread.currentThread().isInterrupted() | ||
| + | && | ||
| + | { | ||
| + | iteration++; | ||
| + | sign = -sign; | ||
| + | piEstimate += sign * 4.0 / ((2 * iteration) - 1); | ||
| + | } | ||
| + | if(Math.abs(piEstimate - Math.PI) > accuracy) | ||
| + | System.out.println(" | ||
| + | else | ||
| + | main.interrupt(); | ||
| + | System.out.println(" | ||
| + | } | ||
| + | |||
| + | public static void main(String[] args) | ||
| + | { | ||
| + | double accuracy = 0.000000001; | ||
| + | long sleepTime = 5000; | ||
| + | if(args.length > 1) | ||
| + | { | ||
| + | accuracy = Math.pow(10, | ||
| + | sleepTime = Integer.parseInt(args[1]) * 1000; | ||
| + | } | ||
| + | System.out.println(" | ||
| + | PITask2 task = new PITask2(accuracy, | ||
| + | Thread t = new Thread(task); | ||
| + | t.start(); | ||
| + | try | ||
| + | { | ||
| + | t.join(sleepTime); | ||
| + | if(t.isAlive()) t.interrupt(); | ||
| + | }catch(InterruptedException x) | ||
| + | { | ||
| + | System.out.println(" | ||
| + | } | ||
| + | System.out.println(" | ||
| + | } | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | ====== Thread Pool ====== | ||
| + | |||
| + | ===== AsynchronousCalculator ===== | ||
| + | |||
| + | < | ||
| + | import java.io.BufferedReader; | ||
| + | import java.io.IOException; | ||
| + | import java.io.InputStreamReader; | ||
| + | import java.util.concurrent.*; | ||
| + | |||
| + | public class AsynchronousCalculator | ||
| + | { | ||
| + | public static void main(String[] args) | ||
| + | { | ||
| + | ExecutorService exec = Executors.newCachedThreadPool(); | ||
| + | boolean quit = false; | ||
| + | while(!quit) | ||
| + | { | ||
| + | System.out.println(" | ||
| + | BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); | ||
| + | String s = null; | ||
| + | try | ||
| + | { | ||
| + | s = br.readLine(); | ||
| + | }catch(IOException e) | ||
| + | { | ||
| + | e.printStackTrace(); | ||
| + | return; | ||
| + | } | ||
| + | if(s.startsWith(" | ||
| + | { | ||
| + | int value; | ||
| + | try | ||
| + | { | ||
| + | value = Integer.parseInt(s.substring(s.indexOf(':' | ||
| + | }catch(Exception e) | ||
| + | { | ||
| + | System.out.println(" | ||
| + | continue; | ||
| + | } | ||
| + | exec.execute(new PITask(value)); | ||
| + | } | ||
| + | else if(s.startsWith(" | ||
| + | { | ||
| + | int value; | ||
| + | try | ||
| + | { | ||
| + | value = Integer.parseInt(s.substring(s.indexOf(':' | ||
| + | }catch(Exception e) | ||
| + | { | ||
| + | System.out.println(" | ||
| + | continue; | ||
| + | } | ||
| + | exec.execute(new FibTask(value)); | ||
| + | } | ||
| + | else if(s.startsWith(" | ||
| + | { | ||
| + | int value; | ||
| + | try | ||
| + | { | ||
| + | value = Integer.parseInt(s.substring(s.indexOf(':' | ||
| + | }catch(Exception e) | ||
| + | { | ||
| + | System.out.println(" | ||
| + | continue; | ||
| + | } | ||
| + | exec.execute(new FactTask(value)); | ||
| + | } | ||
| + | else if(s.equalsIgnoreCase(" | ||
| + | { | ||
| + | quit = true; | ||
| + | } | ||
| + | else | ||
| + | { | ||
| + | System.out.println(" | ||
| + | } | ||
| + | } | ||
| + | exec.shutdown(); | ||
| + | System.out.println(" | ||
| + | } | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | |||
| + | ===== Task ===== | ||
| + | |||
| + | < | ||
| + | import java.text.SimpleDateFormat; | ||
| + | import java.util.Date; | ||
| + | |||
| + | public abstract class Task implements Runnable | ||
| + | { | ||
| + | public long creationTime; | ||
| + | public long startTime; | ||
| + | public long endTime; | ||
| + | public String result; | ||
| + | |||
| + | public Task() | ||
| + | { | ||
| + | this.creationTime = System.currentTimeMillis(); | ||
| + | } | ||
| + | |||
| + | public abstract void compute(); | ||
| + | |||
| + | public void setResult(String result) | ||
| + | { | ||
| + | this.result = result; | ||
| + | } | ||
| + | |||
| + | public void run() | ||
| + | { | ||
| + | this.startTime = System.currentTimeMillis(); | ||
| + | compute(); | ||
| + | this.endTime = System.currentTimeMillis(); | ||
| + | printResult(); | ||
| + | } | ||
| + | |||
| + | public void printResult() | ||
| + | { | ||
| + | SimpleDateFormat formatter = new SimpleDateFormat(" | ||
| + | String creationString = formatter.format(new Date(this.creationTime)); | ||
| + | String startString = formatter.format(new Date(this.startTime)); | ||
| + | String endString = formatter.format(new Date(this.endTime)); | ||
| + | |||
| + | System.out.println(Thread.currentThread().getName() | ||
| + | + ", creationTime = " + creationString + ", startTime = " | ||
| + | + startString + ", endTime = " + endString + ", " + result); | ||
| + | } | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | ===== PITask ===== | ||
| + | |||
| + | < | ||
| + | public class PITask extends Task | ||
| + | { | ||
| + | private double piEstimate = 0.0; | ||
| + | private long iteration = 0; | ||
| + | private int sign = -1; | ||
| + | private double accuracy; | ||
| + | |||
| + | public PITask(int precision) | ||
| + | { | ||
| + | this.accuracy = Math.pow(10, | ||
| + | } | ||
| + | |||
| + | public void compute() | ||
| + | { | ||
| + | while(Math.abs(piEstimate - Math.PI) > accuracy) | ||
| + | { | ||
| + | iteration++; | ||
| + | sign = -sign; | ||
| + | piEstimate += sign * 4.0 / ((2 * iteration) - 1); | ||
| + | } | ||
| + | setResult(" | ||
| + | } | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | ===== FibTask ===== | ||
| + | |||
| + | < | ||
| + | public class FibTask extends Task | ||
| + | { | ||
| + | int value; | ||
| + | |||
| + | public FibTask(int value) | ||
| + | { | ||
| + | this.value = value; | ||
| + | } | ||
| + | |||
| + | private int fib(int n) | ||
| + | { | ||
| + | if(n == 0 || n == 1) return n; | ||
| + | if(n == 1) return 1; | ||
| + | return fib(n - 1) + fib(n - 2); | ||
| + | } | ||
| + | |||
| + | public void compute() | ||
| + | { | ||
| + | int result = this.fib(value); | ||
| + | setResult(" | ||
| + | } | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | |||
| + | ===== FactTask ===== | ||
| + | |||
| + | < | ||
| + | public class FactTask extends Task | ||
| + | { | ||
| + | int value; | ||
| + | |||
| + | public FactTask(int value) | ||
| + | { | ||
| + | this.value = value; | ||
| + | } | ||
| + | |||
| + | private long fact(int n) | ||
| + | { | ||
| + | if(n == 0) return 1; | ||
| + | if(n == 1) return 1; | ||
| + | return(n * fact(n - 1)); | ||
| + | } | ||
| + | |||
| + | public void compute() | ||
| + | { | ||
| + | long result = this.fact(value); | ||
| + | setResult(" | ||
| + | } | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | ====== Indirizzi IP ====== | ||
| + | |||
| + | ===== ListInterface ===== | ||
| + | < | ||
| + | import java.util.Enumeration; | ||
| + | import java.net.*; | ||
| + | |||
| + | public class ListInterface | ||
| + | { | ||
| + | public static void main(String[] args) | ||
| + | { | ||
| + | try | ||
| + | { | ||
| + | Enumeration< | ||
| + | if(interfaceList == null) | ||
| + | { | ||
| + | System.out.println(" | ||
| + | } | ||
| + | else | ||
| + | { | ||
| + | while(interfaceList.hasMoreElements()) | ||
| + | { | ||
| + | NetworkInterface iface = interfaceList.nextElement(); | ||
| + | System.out.println(" | ||
| + | Enumeration< | ||
| + | while(addrList.hasMoreElements()) | ||
| + | { | ||
| + | InetAddress address = addrList.nextElement(); | ||
| + | System.out.print(" | ||
| + | | ||
| + | System.out.println(": | ||
| + | } | ||
| + | } | ||
| + | } | ||
| + | }catch(SocketException e) { System.out.println(e); | ||
| + | } | ||
| } | } | ||
| </ | </ | ||
lpr-b/lpr-b-09/soluzioni.1256241597.txt.gz · Ultima modifica: 22/10/2009 alle 19:59 (16 anni fa) da Andrea Corradini
