Sorgenti esercitazioni - Note

In questa pagina verranno raccolti i sorgenti scritti in classe durante le esercitazioni del venerdì svolte da Gabriele. Il wiki è aperto ed è possibile modificare direttamente il testo. Nel caso in cui, invece, si avessero problemi a scaricare i file nella tabella (link inesistente/file corrotto/sorgente scorretto etc..) scrivetemi a giovanni.lombi@studenti.unimi.it e provvederò alle modifiche il prima possibile (per evitare che la mail sia gettata tra gli spam è preferibile anteporre UNIMI al testo dell'oggetto). Enjoy!

Credits

Thank's to:
Alessandro Marelli per avermi fornito i primi codici scritti a lezione che non erano in mio possesso.
Gabriele per la sua chiarezza e bravura.

Downloads

Sorgenti

Ubriaco

Un ubriaco cammina su una griglia quadrata di lato L dato in input. Parte dalla posizione (1,1) e vuole arrivara a casa, ovvero in posizione (L/2,L/2). Dato il numero di test N da effettuare calcolare il tempo medio di arrivo (in numero di passi) ipotizzando che gli spostamenti possano avvenire in orizzontale, verticale o diagonale, e che l'ubriaco “strisci” sui bordi se ci va a sbattere (cioè non esce dalla griglia).

import prog.io.*;

import java.util.Random;



public class Ubriaco {

	public static void main(String[] args) {

		// Le console:

		ConsoleInputManager in = new ConsoleInputManager();

		ConsoleOutputManager out = new ConsoleOutputManager();



		// Variabili:

		int N, L, x, y, dx, dy, x1, y1, nPassi, i, totPassi = 0;

		Random rand = new Random();



		// Leggo l'input:

		do {

			out.println("Inserire N>=1:");

			N = in.readInt();

		} while (N<1);

		do {

			out.println("Inserire L>=1:");

			L = in.readInt();

		} while (L<1);



		// Effettuo N simulazioni:

		for (i=0; i<N; i++) {

			// Inizio simulazione:

			x = 1; y = 1;



			// Ripeto gli spostamenti:

			nPassi = 0;

			while (x!=L/2 || y!=L/2) {

				// Ripeto finchè non mi sposto veramente:

				do {

					// Passo di spostamento casuale:

					dx = rand.nextInt(3) - 1;

					dy = rand.nextInt(3) - 1;



					// Mi sposto (per finta):

					x1 = x + dx;

					y1 = y + dy;



					// Controllo di non essere fuori dalla griglia:

					if (x1<1) x1 = 1;

					if (x1>L) x1 = L;

					if (y1<1) y1 = 1;

					if (y1>L) y1 = L;

				} while (x1==x && y1==y);



				// Mi sposto veramente:

				x = x1;

				y = y1;

				nPassi++;



				// Dico dove sono:

				// out.println(x+","+y);

			} // ciclo di una simulazione



			// Visualizzo il numero di passi:

			out.println("N° passi: " + nPassi);



			// Accumulo il totale passi:

			totPassi += nPassi;

		} // ciclo sulle simulazioni



		// Visualizzo la media:

		out.println("Media passi: " + (double)totPassi/N);

	} // main

}

Numeri primi gemelli

Dato un numero intero positivo N>2, si determinino le coppie di numeri primi gemelli compresi tra 2 e N. Si ricorda che i numeri primi sono divisibili solo per 1 e sé stessi e che due numeri primi sono gemelli se la loro distanza é 2.

import prog.io.*;



public class Primi {

	public static void main(String args[]) {

		// Dichiaro le console:

		ConsoleInputManager in = new ConsoleInputManager();

		ConsoleOutputManager out = new ConsoleOutputManager();



		// Mi faccio fornire un numero:

		int N, i, j, primoPrecedente = -1;

		boolean numeroPrimo;

		do {

			out.println("Inserire N intero e >2: ");

			N = in.readInt();

		} while(N<=2);



		// Itero con i tra 2 e N:

		for (i=2; i<=N; i++) {

			// Controllo se i contiene un numero primo:

			// Itero tra 2 e i-1:

			numeroPrimo = true;

			for (j=2; j<i; j++) {

				// Test di divisibilità:

				if (i%j==0) {

					// Non è primo:

					numeroPrimo = false;

					break;

				}

			} // for di test di primalità



			// Solo sui numeri primi:

			if (numeroPrimo) {

				// Controllo se ho dei primi gemelli:

				if (i-primoPrecedente==2) {

					// Visualizzo:

					out.println(primoPrecedente+" "+i);

				}



				// Aggiorno il primo precedente:

				primoPrecedente = i;

			}

		} // for sui primi 

	} 

}

Ordinamento numeri

Scrivere un programma che ordini N numeri inseriti dall'utente in ordine crescente.

import prog.io.*;

class Ordina {
	public static void main(String[] args) {
		// Le console:
		ConsoleInputManager in = new ConsoleInputManager();
		ConsoleOutputManager out = new ConsoleOutputManager();

		// Variabili:
		int A[] = new int[10], i, j, tmp, nScambi;

		// Acquisisco:
		for (i=0; i<A.length; i++) {
			// Acquisisto e salvo in A[i]:
			A[i] = in.readInt("Inserisci il "+i+"o numero: ");
		}
		
		// Ordino:
		for (i=0;i<A.length; i++) { // Itero N volte:
			// Inizializzo:
			nScambi = 0;

			// Sposto la "mollettina dei confronti":
			for (j=0; j<A.length-1-i; j++) {
				// Controllo se devo scambiare:
				if (A[j+1]<A[j]) {
					// Scambio:
					tmp = A[j];
					A[j] = A[j+1];
					A[j+1] = tmp;

					// Me ne ricordo:
					nScambi++;
				} // if
			} // ciclo sulla molletta

			// Se ho finito esco:
			if (nScambi==0) break;
		} // N iterazioni

		// Visualizzo:
		for (i=0; i<A.length; i++) {
			out.print(A[i] + " ");
		}
		out.println();
	}
}

Frattale

Scrivere un programma che generi un frattale.

import prog.io.*;

public class Mandel {
	public static void main(String[] args) {
		// Le console:
		ConsoleInputManager in = new ConsoleInputManager();
		ConsoleOutputManager out = new ConsoleOutputManager();
		
		// Parametri:
		int NR = 40, NC = 80, R, C, maxIters=100, numIters, colore;
		double minX = -1.5, maxX = 0.5, minY = -1, maxY = 1,
		       x, y, xs, ys, xt, yt;

		// La palette:
		char[] palette = new char[] {'@','#','&','/','.',' '};

		// Itero sulle righe:
		for (R=0; R<NR; R++) {
			// Visualizzo i caratteri di una riga:
			for (C=0; C<NC; C++) {
				// Calcolo le coordinate:
				x = C*(maxX-minX)/NC + minX;
				y = R*(maxY-minY)/NR + minY;

				// Calcolo il colore:
				xs = x; ys = y;

				// Itero l'aggiornamento:
				numIters = 0;
				while (Math.sqrt(xs*xs+ys*ys)<2.0 && numIters<maxIters) {
					// Calcolo (nelle temporanee):
					xt = xs*xs-ys*ys+x;
					yt = 2*xs*ys+y;

					// Aggiorno:
					xs = xt; ys = yt;
					numIters++;
				}

				// Calcolo l'indice del colore che mi interessa:
				colore = palette.length*numIters/(maxIters+1);

				// Visualizzo:
				out.print(palette[colore]);
			}

			// Vado a capo:
			out.println();
		}
	}
}
sorgentiesercitazioni.txt · Last modified: 2008/11/29 18:03 by sliv3r
CC Attribution-Noncommercial-Share Alike 3.0 Unported
chimeric.de = chi`s home Creative Commons License Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0