8 mag 2015

RICORSIONE

In informatica viene detto algoritmo ricorsivo un algoritmo espresso in termini di se stesso, ovvero in cui l'esecuzione dell'algoritmo su un insieme di dati comporta la semplificazione o suddivisione dell'insieme di dati e l'applicazione dello stesso algoritmo agli insiemi di dati semplificati.
Tale tecnica risulta particolarmente utile per eseguire dei compiti ripetitivi su di un set di variabili in input. L'algoritmo richiama se stesso generando una sequenza di chiamate che ha termine al verificarsi di una condizione particolare che viene chiamata condizione di terminazione, che in genere si ha con particolari valori di input.
La tecnica ricorsiva permette di scrivere algoritmi eleganti e sintetici per molti tipi di problemi comuni, anche se non sempre le soluzioni ricorsive sono le più efficienti. Questo è dovuto al fatto che comunemente la ricorsione viene implementata utilizzando le funzioni, e che l'invocazione di una funzione ha un costo rilevante, e questo rende più efficienti gli algoritmi iterativi.
In alcuni casi la ricorsione è altrettanto efficiente di un ciclo iterativo: linguaggi dei paradigmi funzionali o logici tipicamente non hanno il concetto di ciclo ed usano la ricorsione ottimizzando automaticamente.


0! = 1; 
n! = 1 * 2 * 3 * ...... * n-1 * n;       per n > 0.
 
 
 
Rielaborando:
n! = (1 * 2 * 3 * ...... * n-1) * n;
n! = (n-1)! * n;


 
ESEMPIO DI CODICE:
int FATTiterativo (int n)
      {
         int fatt = 1;
         while (1 <= n)
         {
            fatt = fatt * n;  
            n --;   
         }
         return fatt;
      }



ECCO LE VARIE TIPOLOGIE DI RICORSIONE:

Esistono vari tipi di ricorsione. Si parla di mutua ricorsione quando nell'algoritmo una funzione ne richiama un'altra che a sua volta richiama la prima, altrimenti si parla di ricorsione diretta.
Altra distinzione è quella fra ricorsione lineare, che si ha quando vi è solo una chiamata ricorsiva all'interno della funzione, e non lineare nel caso in cui le chiamate ricorsive siano più di una.
La distinzione più importante ai fini pratici si ha fra ricorsione di coda (tail recursion) e ricorsione non di coda. Si parla di ricorsione di coda quando la chiamata ricorsiva è l'ultima istruzione eseguita nella funzione. Questo tipo di algoritmo ricorsivo è possibile trasformarlo semplicemente in una versione iterativa, che di solito è più efficiente, in quanto non occorre mantenere lo stato della funzione una volta calcolata come è stato fatto nell'esempio precedente. Se l'algoritmo non è ricorsivo di coda, per trasformarlo in una versione iterativa occorre utilizzare un meccanismo di mantenimento dello stato analogo a quello che è utilizzato implicitamente nelle chiamate di funzione.

Ecco qui un video che ci aiuterà a capire: link

Qui si può trovare un PDF sulla ricorsione: link

16 gen 2015

numero aureo

public static void main(String[] args) {
        int n = 11;
        int f[] = new int[n];
        fibonacci(f);
        double a[] = new double[n];
        aureo(f,a);
    }

    public static void fibonacci(int f[]) {
        f[0] = 1;
        f[1] = 1;
        for (int i = 2; i < f.length; i++) {
            f[i] = f[i - 2] + f[i - 1];
        }
        for (int i = 0; i < f.length; i++) {
            System.out.println("nf " + f[i]);
        }
    }
   
    public static void aureo(int f[], double a[]) {
    for (int i = 1; i < a.length; i++) {
            a[i] = (double)f[i] / f[i - 1];
        }
        for (int i = 0; i < a.length; i++) {
            System.out.println("na " + a[i]);
        }
   
  }
}

12 gen 2015

Fibonacci

public static void main(String[] args) {
        int f[]=new int [11];
        f[0]=1;
        f[1]=1;
        for (int i=2; i<f.length;i++){
            f[i]=f[i-2]+f[i-1];
        }
        for (int i=0; i<f.length;i++){
            System.out.println(f[i]);
        }
    }
   
}

4 dic 2014

Rover in Java con grafica 2D

Ecco il progetto del Rover con l'aggiunta dell'interfaccia grafica 2D

Link per scaricare il file jar:
DOWNLOAD

Codice Sorgente:

[Main.java]

import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JButton;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.JLabel;

class MyCanvas extends JComponent {

    public void paint(Graphics g) {
        Main m = new Main();
        // Disegna marte
        g.setColor(new Color(255,128,0));
        g.fillRect(0, 0, 600, 600);
        // Disegna matrice
        for(int i=0;i<10;i++){
              for(int j=0;j<10;j++){
                  if(m.n[i][j]==true){
                     g.setColor(Color.GREEN);
                     g.fillRect(i*60, j*60, 60,60);
                  }
              }
          }
    }
}

public class Main {
   
    static int m[][] = new int[10][10];
    static boolean n[][] = new boolean[10][10];
   
    public static void main(String[] a) {
        Rover analista = new Rover();
       
        analista.inizializzare(m, n);
        analista.controllare(m, n);
        analista.stampare(m, n);

        JFrame window = new JFrame();
        window.setTitle("Rover v1");
        window.setResizable(false);
        window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        window.setBounds(30, 30, 600, 700);
        window.getContentPane().setLayout(null);
        it.simoleoleo.MyCanvas myCanvas = new MyCanvas();
        myCanvas.setBounds(0, 0, 602, 661);
        window.getContentPane().add(myCanvas);
       
        JButton btnGeneraScan = new JButton("Ri-Genera scan");
        btnGeneraScan.addMouseListener(new MouseAdapter() {
            @Override
            public void mouseClicked(MouseEvent arg0) {
                // Evento genera
                analista.inizializzare(m, n);
                analista.controllare(m, n);
                analista.stampare(m, n);
                window.repaint();
            }
        });
        btnGeneraScan.setBounds(228, 613, 140, 37);
        window.getContentPane().add(btnGeneraScan);
       
        JLabel lblCreditiLeonardoPangoni = new JLabel("Team simoleoleo.blogspot.it");
        lblCreditiLeonardoPangoni.setBounds(10, 647, 160, 14);
        window.getContentPane().add(lblCreditiLeonardoPangoni);
        window.setVisible(true);
    }
}

[Rover.java]

package it.simoleoleo;

public class Rover {
    public void controllare (int m[][],boolean n[][]){
    for (int i = 0; i < m.length; i++){
            for (int j=0;j<m.length;j++){
                if(m[i][j]>50){
                    n[i][j]=true;
                }
            }  
    }
}

    public void stampare(int m[][], boolean n[][]) {
        System.out.println("***********************");
        for (int i = 0; i < m.length; i++) {
            for (int j = 0; j < m.length; j++) {
                System.out.print(n[i][j] + " ");
                if (j == 9) {
                    System.out.println(" ");
                }
            }
        }
        System.out.println("***********************");
    }

    public void inizializzare(int m[][], boolean n[][]) {
        for (int i = 0; i < m.length; i++) {
            for (int j = 0; j < m.length; j++) {
                m[i][j] = (int) (Math.random() * 100);
                n[i][j] = false;
            }
        }
    }
}

1 dic 2014

Rover di Marte in Java

[Main.java]



public static void main(String[] args) {
        Rover analista=new Rover();
        int m[][]=new int [10][10];
        boolean n[][]=new boolean [10][10];
        analista.inizializzare(m, n);
        analista.controllare(m, n);
        analista.stampare(m, n);
    }
  
}

______________________________________________

[Rover.java]

public class Rover {
public void controllare (int m[][],boolean n[][]){
    for (int i=0;<m.length;i++){
            for (int j=0;j<m.length;j++){
                if(m[i][j]>50){
                    n[i][j]=true;
                }
            }   
    }
}
public void stampare (int m[][],boolean n[][]){
for (int i=0;i<m.length;i++){
for (int j=0;j<m.length;j++){
System.out.print(n[i][j]+" ");
if(j==9){
System.out.println(" ");
}
}
}
}
public void inizializzare (int m[][],boolean n[][]){
for (int i=0;i<m.length;i++){
for (int j=0;j<m.length;j++){
m[i][j]=(int) (Math.random()*100);
n[i][j]=false;
}
}
}
}

20 nov 2014

ALCUNI RECORD DEGLI ANIMALI

Il pesce più grande: lo squalo balena, che raggiunge i 18m di lunghezza e le 20 tonnellate di peso.
Il rettile più grande: Il coccodrillo marino, che ragiunge gli 8m di lunghezza e le 2 tonnellate di peso.
Il mammifero più grande (e anche probabilmente il più grande animale mai apparso sulla terra): la balenottera azzurra, che misura fino a 33m di lunghezza e pesa anche 130 tonnellate, come 20 elefanti o 180 mucche (il suo cuore è grande come una mucca e la sua aorta è così grande che un uomo ci potrebbe nuotare dentro).
Il ruminante più piccolo: il kancil malese, che misura appena 25cm di altezza e 47cm di lunghezza.
L'uccello più piccolo: il colibrì, lungo appena 5cm per un peso di 1,6g.
Il serpente più lungo: il pitone reticolato, con la misura massima di 10m.
La lucertola più grande: il drago di komodo, che arriva ad una lunghezza di 3,5m per un peso di 130Kg.
Il naso più lungo: quello dell'elefante africano, la cui proboscide può misurare sui 2,5m.
Le corna più lunghe: quelle del muflone di marco polo che, avvolte a spirale, arrivano a 190cm.
Le corna più pesanti: quelle dell'alce, che pesano 45kg.
Il collo più lungo: quello della giraffa che misura 2m ed è composto da sole 7 vertebre lunghe però 27cm l'una.
Le orecchie più grandi: quelle dell'elefante africano, ciascuna ha la superficie di 4mq ed un diametro di 1,80m.
I peli più grossi: il record è conteso tra i baffi del tricheco e i peli della coda dell'elefante, entrambi hanno un diametro alla base di 3mm.
I peli più lunghi: quelli del bue muschiato della groenlandia, la cui pelliccia è formata da peli lunghi 60-90cm.
Il becco più lungo: quello del pellicano australiano, che misura 50cm.
Il becco più colorato: quello del tucano arcobaleno, che ha ben 5 colori.
Le lingue più elastiche: - il formichiere può estrarre una lingua di 60cm.
- la giraffa e l'okapi possono estrarre 2 lingue rispettivamente di 50 e 35cm.
- il camaleonte può estrarre una lingua lunga come il suo corpo.
- i picchi hanno una lingua che può sporgere dal becco di 10cm.
L'occhio più grande: quello del calamaro gigante, di 40cm di diametro.
Gli occhi più numerosi: i ragni possono averne fino a otto.
L'animale più lento: - La lumaca carnivora si muove ad una velocità di 0,90m/h, impiega 46 giorni per percorrere 1km.
- il bradipo si trascina sul ventre ad una velocità di 158m/h, impiega ben 6h e 30 minuti per percorrere 1km.
I record di salto: - tra i mammiferi il record è detenuto dal puma, con un salto di 7m in altezza senza rincorsa.
- il record di salto in lungo, con una misura di 15m, è conteso tra la tigra e il leopardo.
- il record assoluto appartiene alla pulce con un salto di 25cm in altezza e 35cm in lunghezza. Un uomo per eguagliare un tale risultato dovrebbe saltare 290m in altezza e 400m in lunghezza.

17 nov 2014

MajoLinux


Il nostro Team insieme ai tecnici di laboratorio e al professor Marco Palladino sta lavorando per portare Linux nel nostro istituto, il liceo scientifico Ettore Majorana di Moncalieri. Useremo Linux Mint o Linux Xubuntu, il sistema operativo più votato dagli utenti sarà quello finale. Questi due sistemi operativi montano tutti e due il Linux kernel 3.13 e sono pressochè identiche. Linux Mint è il piu usato fra gli utenti Linux e ha un parco software piu ricco mentre Xubuntu punta alla leggerezza e alle performance. Aggiungeremo oltre al software di base anche:

  • Java Runtime Environment 7; Java Development Kit 7
  • NetBeans IDE 
  • Eclipse Luna
  • Android Studio
  • Geany
  • Scratch
  • Arduino IDE
  • Geogebra
Per chi volesse approfondire:

Linux Mint webpage http://linuxmint.com/
Linux Xubuntu webpage  http://www.xubuntu.org/

Screenshots: