Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Prova GeForce NOW upgrade Blackwell: il cloud gaming cambia per sempre
Prova GeForce NOW upgrade Blackwell: il cloud gaming cambia per sempre
L'abbonamento Ultimate di GeForce NOW ora comprende la nuova architettura Blackwell RTX con GPU RTX 5080 che garantisce prestazioni tre volte superiori alla precedente generazione. Non si tratta solo di velocità, ma di un'esperienza di gioco migliorata con nuove tecnologie di streaming e un catalogo giochi raddoppiato grazie alla funzione Install-to-Play
Ecovacs Deebot X11 Omnicyclone: niente più sacchetto per lo sporco
Ecovacs Deebot X11 Omnicyclone: niente più sacchetto per lo sporco
Deebot X11 Omnicyclone implementa tutte le ultime tecnologie Ecovacs per l'aspirazione dei pavimenti di casa e il loro lavaggio, con una novità: nella base di ricarica non c'è più il sacchetto di raccolta dello sporco, sostituito da un aspirapolvere ciclonico che accumula tutto in un contenitore rigido
Narwal Flow: con il mocio orizzontale lava i pavimenti al meglio
Narwal Flow: con il mocio orizzontale lava i pavimenti al meglio
Grazie ad un mocio rotante che viene costantemente bagnato e pulito, Narwal Flow assicura un completo e capillare lavaggio dei pavimenti di casa. La logica di intellignza artificiale integrata guida nella pulizia tra i diversi locali, sfruttando un motore di aspirazione molto potente e un sistema basculante per la spazzola molto efficace sui tappeti di casa
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 12-01-2009, 18:13   #1
D4rkAng3l
Bannato
 
Iscritto dal: Mar 2004
Città: Roma
Messaggi: 2682
[Java] Esercizio d'esame, va bene secondo voi?

Ciao,
a breve avrò l'esame di linguaggi di programmazione che contiene una parte in Java, vi posto i primi due punti del testo della parte relativa a Java:

"Un insieme di processi condividono un unico buffer in cui possono scrivere e prelevare dati di tipo intero. Il
buffer ha dimensioni limitate, fissate al momento della sua creazione, ed i processi sono sottoposti ai vincoli
seguenti:
1) I processi possono iniziare ad operare solo dopo che il buffer è stato creato
2) Un processo può essere di tipo scrittore (ed in questo caso potrà solo scrivere dati nel buffer) oppure
lettore (ed in questo caso potrà solo leggere dati dal buffer cancellandoli nel contempo)
3) Un processo può scrivere un valore intero dal buffer solo se il buffer non è pieno
4) Un processo può leggere o rimuovere un dato dal buffer solo se il buffer non è vuoto.
Ciascun processo è caratterizzato dal suo tipo (scrittore o lettore) e:
a) Se il processo è di tipo scrittore, allora esso contiene tutti i valori che (eventualmente)
scriverà sul buffer
b) Se il processo è di tipo lettore, allora esso contiene un’area di memoria in cui scrivere i
valori che (eventualmente) preleverà dal buffer.
Problema 1. Si richiede il progetto di un tipo astratto di dato Processo che rappresenti processi del tipo
appena descritto. Le operazioni di interesse per il tipo di dati sono quelle evidenziate nei punti sopra.
Si osserva esplicitamente che, in accordo con i principi di programmazione orientata agli oggetti sui quali è
basato il corso, un tipo di dati deve occuparsi della consistenza e correttezza dei dati che rappresenta rispetto
a tutti gli aspetti considerati. Pertanto il tipo di dati Processo deve opportunamente occuparsi anche della
gestione del buffer.
Problema 2. Si richiede l’implementazione in Java del tipo astratto di dato Processo ."

Vabbè vi risparmio il tipo di dati astratto che sono quasi certo che vada bene e vi posto direttamente la mia soluzione in Java, commentata...mi dite se va bene?

Codice:
public class Processo{
	
	private static int [] buffer = new int[30];	// Creo una variabile di classe di tipo array di int e alloco un array di 30 elementi
	private static int dove;
	
	private boolean scrittore;	// Se scrittore è true allora il processo è di tipo scrittore, se è false è di tipo lettore
	private int [] area;		// E' l'area di memoria interna ad ogni processo
	private int quale;			// Posizione dell'elemento da scrivere o leggere presente nell'area di memoria dei processi
	
	/** Costruttore 1: CREA UN PROCESSO DI TIPO LETTORE quindi dovrà creare un'area di memoria vuota per tale processo
		@param dim di tipo int: è la dimensione dell'area di memoria interna al processo
		@return un oggetto di tipo Processo lettore */
		
	public Processo(int dim){
		
		if(dim > 0){				// Se il valore della dimensione dell'area di memoria ricevuto è coerente
			area = new int[dim];	// allora crea un array di interi di dimensione dim e metti in area il suo riferimento
			quale = -1;				//
			scrittore = false;		// L'oggetto di tipo Processo viene creato come processo lettore
		}
		
		else{						// Se invece il valore della dimensione dell'area di memoria ricevuto non è coerente
			System.err.println("Errore: valore della dimensione dell'area di memoria non coerente");	// Messaggio d'erore
			area = null;
			quale = null;	// Imposta le variabili di istanza a null
		}
	}
	
	/** Costruttore 2: CREA UN PROCESSO DI TIPO SCRITTORE: l'area di memoria del processo scrittore è già esistente e vi
		copiato il contenuto del parametro: un'array, che poi sarà copiato nel buffer
		@param mem di tipo int []: è l'array di interi che deve essere copiato nell'area di memoria del processo
		@return un oggetto di tipo Processo scrittore */
		
	public Processo(int [] mem){
		
		int i;							// Variabile contatore
		scrittore  = true;				// L'oggetto di tipo Processo viene creato come processo scrittore
		quale = 0;						//
		area = new int [mem.length];	// L'array area viene creato avente la stessa dimensione dell'array parametro
		
		for(i = 0; i < area.length; i++)
			area[i] = mem[i];			// Copia tutti gli elementi dell'array ricevuto nell'area di memoria del processo
			
	}
	
	/** Legge i valori dal buffer e li copia nell'area di memoria dell'oggett Processo che riceve il messaggio
		@param void
		@return void */
	
	public void leggi(){
		
		/* Se il processo è di tipo lettore e se l'indice del prossimo elemento dell'area di memoria del processo è minore
		   della dimensione dell'array che la implementa e se il buffer non è vuoto */
		if(!scrittore ^ quale+1<area.length ^ dove>-1){
			area[quale] = buffer[dove];						// Copia un elemento dal buffer all'area di memoria
			quale++;										// Incrementa l'indice nell'area di memoria
			dove--;											// Decrementa l'indice del buffer e svuota la locazione
		}
		
		else
			System.err.println("Errore");					// Altrimenti stampa un messaggio di errore
		
	}
	
	/** Scrivi i valori presenti nell'area di memoria del processo ricevente nel buffer
		@param void
		@return void */
	
	public void scrivi(){
		
		/* Se il processo è di tipo scrittore e se l'indice  del prossimo elemento dell'area di memoria è minore dela
		   dimensione dell'array che la implementa e se l'indice della prossima posizione del buffer è minore della sua
		   dimensione */
		if(scrittore ^ quale < area.length ^ dove+1 < buffer.length){
			buffer[dove+1] = area[quale];		// Copia l'elemento corrente dell'area di memoria nel buffer
			quale ++;						// Incrementa alla prossima locazione di memoria del processo che sarà copiata
			dove ++;						// Incrementa alla prossima locazione del buffer dove copiare il prossimo elemento
		}
		
		else
			System.err.println("Errore");					// Altrimenti stampa un messaggio di errore
		
	}
	
}
Mi dà un errore quando faccio: quale = null;
credo che dipenda dal fatto che quale è di tipo int e il null lo posso assegnare solo a valori di tipo riferimento? eventualmente come risolvere per attribuire un valore nullo ad un intero? gli dò -1 come valore di errore?
Come logica ci può stare queta soluzione?

Grazie
Andrea
D4rkAng3l è offline   Rispondi citando il messaggio o parte di esso
Old 12-01-2009, 18:23   #2
agente mm8
Senior Member
 
Iscritto dal: Mar 2008
Messaggi: 401
Un riassuntino? Non credo che qualcuno in questo forum non abbia così niente da fare da mettersi a leggere stò romanzo...
agente mm8 è offline   Rispondi citando il messaggio o parte di esso
Old 12-01-2009, 18:40   #3
D4rkAng3l
Bannato
 
Iscritto dal: Mar 2004
Città: Roma
Messaggi: 2682
Quote:
Originariamente inviato da agente mm8 Guarda i messaggi
Un riassuntino? Non credo che qualcuno in questo forum non abbia così niente da fare da mettersi a leggere stò romanzo...
Beh in effetti è vero anche se credo sia più corto di quanto scritto perchè del punto 1 non ho postato la soluzione in quanto ce l'ho corretta su carta e non mi interessa.

In pratica devo implementare in Java una classe che mi rappresenta il tipo di dato Processo

Tutti i processi condividono un buffer realizzato mediante una variabile di classe array di interi. Gli oggetti di tipo Processo al loro interno devono avere un'area di memoria (rappresentata sempre con un array di interi, questa volta però si tratta di una variabile di istanza perchè è relativa ad ogni singolo oggetto Processo creato)

I processi possono essere di due tipi: lettore o scrittore, se un processo viene creato come lettore potrà solo copiare nella sua memoria interna il contenuto del buffer.
Se invece è creato come scrittore devo passare al costruttore un array di interi che contiene gli elementi da copiare prima nella sua memoria interna e poi nel buffer condiviso da tutti i processi.

Tnx
Andrea
D4rkAng3l è offline   Rispondi citando il messaggio o parte di esso
Old 12-01-2009, 18:41   #4
Oceans11
Senior Member
 
L'Avatar di Oceans11
 
Iscritto dal: Sep 2005
Città: Torino
Messaggi: 606
Quote:
Originariamente inviato da D4rkAng3l
Mi dà un errore quando faccio: quale = null;
credo che dipenda dal fatto che quale è di tipo int e il null lo posso assegnare solo a valori di tipo riferimento? eventualmente come risolvere per attribuire un valore nullo ad un intero? gli dò -1 come valore di errore?
Come logica ci può stare queta soluzione?
Beh o gli dai un valore che sai essere senza significato in questo particolare programma, oppure utilizzi un wrapper per contenere l'informazione. Per esempio se usi Integer puoi anche impostarlo a null essendo un Integer oggetto
__________________
"Se proprio dovete piratare un prodotto, preferiamo che sia il nostro piuttosto che quello di qualcun altro." [Jeff Raikes]
"Pirating software? Choose Microsoft!"
Oceans11 è offline   Rispondi citando il messaggio o parte di esso
Old 13-01-2009, 08:58   #5
Don[ITA]
Senior Member
 
L'Avatar di Don[ITA]
 
Iscritto dal: Jul 2006
Città: Bergamo
Messaggi: 401
Mmmm....secondo me non è molto corretto il modo in cui hai svolto l'esercizio...
Io leggendo il testo capisco che:
-devo creare una classe Processo astratta che contenga un riferimento a Buffer e qualcosa che mi rappresenta l'area di memoria dove salvare i valori letti o scritti
-devo creare una classe Lettore che estende Processo e implementa i metodi di lettura dal buffer con i relativi controlli specificati
-devo creare una classe Scrittore che estende Processo e implementa i metodi di scrittura nel buffer con i relativi controlli specificati
-devo creare una classe Buffer che abbia al suo interni un array di int che lo rappresenta e i relativi metodi sincronizzati per l'accesso a tale array
Ovviamente così è come lo interpreto io non è detto che abbia ragione

Saluti
__________________
iMac 27" 5K
Don[ITA] è offline   Rispondi citando il messaggio o parte di esso
Old 13-01-2009, 10:00   #6
D4rkAng3l
Bannato
 
Iscritto dal: Mar 2004
Città: Roma
Messaggi: 2682
Quote:
Originariamente inviato da Don[ITA] Guarda i messaggi
Mmmm....secondo me non è molto corretto il modo in cui hai svolto l'esercizio...
Io leggendo il testo capisco che:
-devo creare una classe Processo astratta che contenga un riferimento a Buffer e qualcosa che mi rappresenta l'area di memoria dove salvare i valori letti o scritti
-devo creare una classe Lettore che estende Processo e implementa i metodi di lettura dal buffer con i relativi controlli specificati
-devo creare una classe Scrittore che estende Processo e implementa i metodi di scrittura nel buffer con i relativi controlli specificati
-devo creare una classe Buffer che abbia al suo interni un array di int che lo rappresenta e i relativi metodi sincronizzati per l'accesso a tale array
Ovviamente così è come lo interpreto io non è detto che abbia ragione

Saluti
No...è il primo corso di programmazione orientata agli oggetti ed è la prima volta che usiamo Java...prendilo come un esempio per creare un tipo di dato, per esempio argomenti come le classi astratte e l'ereditarietà non sono trattati in questo corso ma saranno trattati nel secondo modulo al prossimo semestre...
D4rkAng3l è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Prova GeForce NOW upgrade Blackwell: il cloud gaming cambia per sempre Prova GeForce NOW upgrade Blackwell: il cloud ga...
Ecovacs Deebot X11 Omnicyclone: niente più sacchetto per lo sporco Ecovacs Deebot X11 Omnicyclone: niente più...
Narwal Flow: con il mocio orizzontale lava i pavimenti al meglio Narwal Flow: con il mocio orizzontale lava i pav...
Panasonic 55Z95BEG cala gli assi: pannello Tandem e audio senza compromessi Panasonic 55Z95BEG cala gli assi: pannello Tande...
HONOR Magic V5: il pieghevole ultra sottile e completo! La recensione HONOR Magic V5: il pieghevole ultra sottile e co...
Cos'è RSL, il nuovo standard che ...
Nissan Micra EV: da 29.500 a oltre 36.00...
Processo Microsoft-ValueLicensing: cosa ...
L'edizione limitata più ambita da...
Lo sviluppatore di MSI Afterburner svela...
Quando l'AI diventa maestro: così...
Sony WH-1000XM6 già scontate su A...
NVIDIA chiede più velocità...
Windows 11 in soli 2,8 GB: con questo sc...
Panico in casa HYTE: ritirato dal mercat...
OPPO Reno14, debutto tra rooftoop esclus...
3DAIQ, il progetto di Concept Reply e TE...
Il parlamento francese contro TikTok: '&...
Apple Watch SE 2ª gen. Cellular a soli 2...
MotoE sospesa dopo il 2025: fine tempora...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 02:26.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Served by www3v