Differences

This shows you the differences between two versions of the page.

Link to this comparison view

pub:labprog:20171106 [2017/11/06 17:16] (current)
atrent created
Line 1: Line 1:
 +====== Metodi ======
  
 +FIXME da completare (prossima volta)
 +
 +Strutturare il proprio programma delegando micro funzionalità a piccoli metodi da invocare costruendo metodi sempre più complessi che si basano su quelli "di base".
 +
 +<code java>
 +
 +/*
 + GOBBY
 + dai pc   ​172.22.83.53 //Da locale funziona
 + da fuori (portatili) atrent.it:​993
 +*/
 +
 +// METODI statici (per ora)
 +
 +/*
 +- (dopo) chiedere all'​utente quale funzione va plottata (sin, cos, tan....)
 +- chiedere all'​utente i limiti per x (min, max)
 +- chiedere all'​utente il carattere da usare per plottare
 +- PLOTTARE funzione (ruotando il piano cartesiano: X in orizzontale)
 + DEVO cioè inventarmi un "​metodo"​ (appunto!) per disegnare sullo schermo in un punto qualsiasi
 +*/
 +
 +import java.util.Scanner;​
 +
 +public class Metodi ​ {
 +
 +    public static final double MINY=-1.5,​MAXY=1.5;​
 +    public static final int WIDTH=80,​HEIGHT=25;​
 +
 +    static double maxX, minX;
 +//ora che le variabili sono esterne al main mantengono il valore dato all'​interno del main anche quando vengono utilizzate in altri metodi?
 +
 +    public static void main(String[] arg)
 +
 +    throws Exception {
 +
 +
 +        // solo a scopo di test
 +        //​plot(10,​15,'​l'​);​
 +        //​plot(3,​5,'​v'​);​
 +
 +        //NON HO CAPITO PERCHÈ DOBBIAMO CALCOLARE A PRIORI LA GRANDEZZA DELL'​AREA DI PLOT, NON POSSIAMO INSERIRLA TRANQUILLAMENTE DA TASTIERA?
 +
 +        //​System.exit(0);​
 +
 +
 +
 +
 +
 +
 +        char carattereDiPlot;​ // not yet implemented
 +
 +
 +
 +        Scanner in = new Scanner(System.in);​
 +
 +        System.out.print("​Inserisci la partenza (minX): ");
 +        minX = in.nextDouble();​
 +        System.out.print("​Inserisci l'​arrivo (maxX): ");
 +        maxX = in.nextDouble();​
 +
 +        in.nextLine();​ // svuotare buffer
 +
 +        System.out.print("​Inserisci il carattere di '​plot':​ ");
 +        carattereDiPlot = in.nextLine().charAt(0);​
 +        //Possiamo prendere il primo carattere della stringa letta
 +
 +        // ipotesi alternativa:​ carattereDiPlot = System.in.read();​
 +
 +
 +        System.out.println(calcolaCXdaX(5));​ // se metto min 0 e max 10 viene 40
 +        System.out.println(calcolaCYdaY(5));​ // viene ...  >25
 +        System.out.println(calcolaCYdaY(-1.5));​ // viene 0
 +        System.out.println(calcolaCYdaY(1.5));​ // viene 25
 +
 +        System.exit(0);​
 +
 +        for(double cursor = minX; cursor<​maxX;​ cursor++) {
 +            plot(cursor,​ Math.sin(cursor),​ carattereDiPlot);​
 +
 +        }
 +
 +
 +
 +
 +
 +    }
 +
 +
 +
 +
 +    /**
 +    "​plotta"​ un singolo "​pixel"​ (carattere su uno schermo) in un particolare punto dello schermo stesso
 +
 +
 +    SCHERMO (0,0)
 +
 +
 +
 +    (80,​25)
 +
 +
 +
 +    ---------------------------------------------------------------------
 +
 +    (...,​MAXY)
 +
 +
 +
 +
 +
 +    Funzione (minX,​F(minX)) (maxX,​F(maxX))
 +
 +
 +
 +
 +
 +    (...,​MINY)
 +
 +    */
 +
 +
 +    static int calcolaCXdaX(double x) {
 +
 +        // WIDTH & (HEIGHT)
 +        // ho la x
 +        // ho minX e maxX
 +
 +        return (int)map(x, maxX, minX, 0, WIDTH);
 +    }
 +    static int calcolaCYdaY(double y) {
 +        return (int)map(y, MAXY, MINY, 0, HEIGHT);
 +    }
 +
 +    /*
 +     ​static void square(double x, double y, double lato){
 +      ...
 +     ​ segment(...);​
 +     ​ segment(...);​
 +     ​ segment(...);​
 +     ​ segment(...);​
 +     }
 +
 +
 +    static void segment(double x1, double y1, double x2, double y2){
 +
 +    ...
 +
 +    plot(...)
 +
 +    ...
 +
 +
 +    }
 +    */
 +
 +    static void plot(double x, double y, char c) {
 +
 +        System.out.print((char)27);​
 +        //​System.out.print("​["​+(int)x+";"​+(int)y+"​H"​);​
 +        System.out.print("​["​+calcolaCXdaX(x)+";"​+calcolaCYdaY(y)+"​H"​);​
 +
 +        /*
 +        // ribaltato (verticalmente)
 +        // tanti a capo quante sono le Y
 +        for(int cursore=0;​cursore<​y;​cursore++)
 +        System.out.println();​
 +        // tanti spazi quante sono le X
 +        for(int cursore=0;​cursore<​x;​cursore++)
 +        System.out.print("​ ");
 +        */
 +
 +
 +
 +        /* x ignorata, per implementazione di "​regressione"​
 +        for(int i=0; i<y; i++)
 +            System.out.print("​ ");
 +        */
 +
 +        System.out.println(c);​
 +    }
 +
 +    /**
 +    x valore ingresso
 +    in_min e in_max range valori in ingresso
 +    out_min e out_max range valori in uscita
 +    */
 +    static double map(double x, double in_min, double in_max, double out_min, double out_max)
 +    {
 +        return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
 +    }
 +
 +
 +}
 +
 +
 +//Si può disabilitare dalle impostazioni la visualizzazione della selezione degli altri users
 +
 +</​code>​
pub/labprog/20171106.txt · Last modified: 2017/11/06 17:16 by atrent
CC Attribution-Share Alike 4.0 International
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0