Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Oracle AI World 2026: in Europa prima la sovranità, poi la sicurezza e solo dopo l'IA
Oracle AI World 2026: in Europa prima la sovranità, poi la sicurezza e solo dopo l'IA
In tre giorni a Las Vegas Oracle ha presentato agenti che eseguono il lavoro, l'alleanza con OpenAI e un cloud aperto agli acceleratori di tutti. Ma i clienti europei chiedono garanzie prima ancora delle funzionalità
DS N°7 E-Tense: il SUV premium made in Melfi che punta su autonomia e comfort
DS N°7 E-Tense: il SUV premium made in Melfi che punta su autonomia e comfort
Fino a 740 km WLTP con la batteria da 97,2 kWh, sospensioni che leggono la strada con una telecamera e un abitacolo da salotto parigino. La nuova DS N°7 raccoglie l'eredità della DS 7 e la porta, per la prima volta, nel mondo 100% elettrico. Ecco come è fatta, cosa offre e quanto costa.
Recensione Samsung Galaxy Tab S12 Ultra: non chiamatelo tablet... è molto di più
Recensione Samsung Galaxy Tab S12 Ultra: non chiamatelo tablet... è molto di più
Abbiamo provato Samsung Galaxy Tab S12 Ultra nella versione 12 GB + 256 GB con tastiera, e il risultato è un tablet che in questa configurazione si comporta come un notebook con la fluidità tipica di Android. Spessore di 5,1 mm, display Dynamic AMOLED 2X da 14,6 pollici, MediaTek Dimensity 9500 e un software senza incertezze compongono un prodotto di vertice, con prezzi da 1.539 euro, frenato solo da un'autonomia nella parte bassa del confronto
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 09-06-2009, 12:00   #1
lucadue
Senior Member
 
L'Avatar di lucadue
 
Iscritto dal: Mar 2006
Città: Saluzzo (Cuneo) - Trattative ok: 51
Messaggi: 3656
[C] progetto porto

Ho bisogno di due dritte per iniziare il progetto e su come risolverso... non richiedo la soluzione ma se mi aiutate ad organizzare su come vanno gestite le cose...

Scopo del progetto è gestire il transito delle imbarcazioni in un porto seguendo le
specifiche qui riportate.
All'inizio dell'esecuzione il porto è vuoto. Vengono generate tramite un processo
un certo numero di imbarcazioni che cercano di entrare nel porto. NB: il numero
di moli è limitato quindi al più 10 imbarcazioni possono soggiornare
contemporaneamente nel porto. Dopo un po' di tempo trascorso a riva (variabile
da imbarcazione a imbarcazione), ogni imbarcazione prende il largo liberando il
molo che occupava.
L'accesso al porto avviene tramite un canale gestito come senso unico alternato.
Ad intervalli regolari vengono fatte entrare alcune imbarcazioni nel porto e poi
fatte uscire alcune imbarcazioni. La durata dei periodi di ingresso ed uscita è
identica. Quindi quando è il turno degli ingressi, le navi ferme al largo iniziano a
entrare, e continuano a farlo per un certo tempo prefissato (a patto che ci siano
moli liberi). Allo scadere del tempo, l'ingresso viene bloccato e si consente alle
navi pronte a partire di uscire, sempre per un tempo prefissato.
Ogni imbarcazione attraccata, avvisa la capitaneria di porto inviando un
messaggio su di una coda (unica per tutte le imbarcazioni e per la capitaneria),
indicante il nome della nave, il carico ed eventuali altre informazioni ritenute
utili. La capitaneria di porto registra tali messaggi in un'area di memoria
condivisa (il registro della capitaneira).
A campione, la capitaneria di porto effettua dei controlli su di alcune
imbarcazioni. A tal fine il processo si forka generando un controllore. Controllore
e nave si scambiano alcune informazioni secondo il protocollo descritto nel
seguito. Il controllore riporta nel registro tutti i passi.
Messaggio 1: da capitaneria a nave: CHECK_START
Messaggio 2: da nave a capitaneira: materiale trasportato + quantità
Messaggio 3: da capitaneira a nave: OK oppure MULTA
La terminazione di tutti i processi figli va intercettata dal corrispodente genitore,
che in tale occorrenza esegue la wait/waitpid.


datemi una mano grazie mille

Luca
lucadue è offline   Rispondi citando il messaggio o parte di esso
Old 09-06-2009, 14:19   #2
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Quote:
Originariamente inviato da lucadue Guarda i messaggi
datemi una mano grazie mille
Fai delle domande specifiche e/o posta una tua almeno parziale soluzione/pseudo-implementazione.

Questo perchè in questo Forum è vietato postare soluzioni intere di esercizi, e tantomeno chiedere soluzioni intere di esercizi.
Posta domande e dubbi specifici, spezzoni di codice, e vedrai che l'aiuto non mancherà.
__________________

As long as you are basically literate in programming, you should be able to express any logical relationship you understand.
If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it.
(Chris Crawford)
banryu79 è offline   Rispondi citando il messaggio o parte di esso
Old 09-06-2009, 14:50   #3
lucadue
Senior Member
 
L'Avatar di lucadue
 
Iscritto dal: Mar 2006
Città: Saluzzo (Cuneo) - Trattative ok: 51
Messaggi: 3656
ma infatti io non ho chiesto la soluzione completa dato che conosco molto bene il regolamento e non mi sognerei mai di infrangerlo. La mia questione era semplicemente, se così si può definire, ottenere un elenco di "azioni" da svolgere in sequenza visto che il mio problema sta proprio nel cominciarlo. Credo che una volta ottenuto questo input avrò sicuramente le idee ben più chiare per implementare l'intero lavoro e se a quel punto avrò dubbi particolari riguardanti uno specifico problema li posterò direttamente. Grazie mille a tutti..
lucadue è offline   Rispondi citando il messaggio o parte di esso
Old 09-06-2009, 17:22   #4
tapper
Junior Member
 
Iscritto dal: Jun 2009
Messaggi: 17
Puoi cominciare con la creazione del processo server (il molo) e con l'algoritmo che gestisce l'arrivo delle navi......


-----------------------------------
Coding Art...

Tetti
tapper è offline   Rispondi citando il messaggio o parte di esso
Old 09-06-2009, 19:05   #5
lucadue
Senior Member
 
L'Avatar di lucadue
 
Iscritto dal: Mar 2006
Città: Saluzzo (Cuneo) - Trattative ok: 51
Messaggi: 3656
ok grazie mille mi metto al lavoro e appena butto giu qualcosa ve lo posto
lucadue è offline   Rispondi citando il messaggio o parte di esso
Old 09-06-2009, 22:35   #6
-hide-
Senior Member
 
L'Avatar di -hide-
 
Iscritto dal: Sep 2008
Città: Messina
Messaggi: 991
Quote:
Scopo del progetto è gestire il transito delle imbarcazioni in un porto seguendo le
specifiche qui riportate.
All'inizio dell'esecuzione il porto è vuoto. Vengono generate tramite un processo
un certo numero di imbarcazioni che cercano di entrare nel porto. NB: il numero
di moli è limitato quindi al più 10 imbarcazioni possono soggiornare
contemporaneamente nel porto. Dopo un po' di tempo trascorso a riva (variabile
da imbarcazione a imbarcazione), ogni imbarcazione prende il largo liberando il
molo che occupava.
L'accesso al porto avviene tramite un canale gestito come senso unico alternato.
Ad intervalli regolari vengono fatte entrare alcune imbarcazioni nel porto e poi
fatte uscire alcune imbarcazioni. La durata dei periodi di ingresso ed uscita è
identica. Quindi quando è il turno degli ingressi, le navi ferme al largo iniziano a
entrare, e continuano a farlo per un certo tempo prefissato (a patto che ci siano
moli liberi). Allo scadere del tempo, l'ingresso viene bloccato e si consente alle
navi pronte a partire di uscire, sempre per un tempo prefissato.
Ogni imbarcazione attraccata, avvisa la capitaneria di porto inviando un
messaggio su di una coda (unica per tutte le imbarcazioni e per la capitaneria),
indicante il nome della nave, il carico ed eventuali altre informazioni ritenute
utili. La capitaneria di porto registra tali messaggi in un'area di memoria
condivisa (il registro della capitaneira).
A campione, la capitaneria di porto effettua dei controlli su di alcune
imbarcazioni. A tal fine il processo si forka generando un controllore. Controllore
e nave si scambiano alcune informazioni secondo il protocollo descritto nel
seguito. Il controllore riporta nel registro tutti i passi.
Messaggio 1: da capitaneria a nave: CHECK_START
Messaggio 2: da nave a capitaneira: materiale trasportato + quantità
Messaggio 3: da capitaneira a nave: OK oppure MULTA
La terminazione di tutti i processi figli va intercettata dal corrispodente genitore,
che in tale occorrenza esegue la wait/waitpid.
Questo programma è un vero bordello, già solo leggendo il testo
Se non mi studio realmente Fondamenti 2 posso sognarmelo. Dopo che avrò preso la materia in mano tornerò su questo programma, promesso!
__________________

PC/HTPC: Mac Mini 3,1 late 2009 | My Book Studio 2TB | LG M237WD monitor/tv | Logitech Z4 | Apple Magic Mouse | Apple Wireless Keyboard | Apple Remote
Mobile: Samsung Galaxy Wonder i8150 cm9
LinkedIn
-hide- è offline   Rispondi citando il messaggio o parte di esso
Old 11-06-2009, 15:29   #7
lucadue
Senior Member
 
L'Avatar di lucadue
 
Iscritto dal: Mar 2006
Città: Saluzzo (Cuneo) - Trattative ok: 51
Messaggi: 3656
ho pensato di organizzare il tutto in nave.c, capitaneria.c, porto.c e ho iniziato a scrivere nave.c che sara quello che genera le navi e gli assegna i vari attributi

ho creato libporto.h (che verra man mano completato)
Codice:
#ifndef molo
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>
#include <unistd.h>
#define molo

typedef struct {
	int quantita;
	char merce[10];
	int identificatore;
} boat;

#endif
nave.c
Codice:
#include "libporto.h"

char *get_merce ()    //metodo che assegna in modo casuale un tipo di merce
{
	char *prodotto;    //stringa a cui si assegna il tipo di prodotto
    int valore;    //valore a cui si assegnera il numero casuale				
	srand (getpid());    //senza di cio il random restituisce sempre lo stesso num ???
    valore = rand()%5 + 1;    //assegna un valore casuale da 1 a 5 a valore

	switch(valore)    //assegna il tipo di prodotto in base al numero generato
	{
		case 1: 
				prodotto = ("TABACCO");
				break;

		case 2: 
				prodotto = ("ACCIAIO");
				break;

		case 3: 
				prodotto = ("FERRO");
				break;

		case 4: 
				prodotto = ("AUTOMOBILI");
				break;

		case 5: 
				prodotto = ("BOMBE");
				break;

		deafult:
				printf("errore \n"); 
				break;
	}
return prodotto;    //restituisce il prodotto

}

int get_quantita()
{
    int t;    //tonnellate
    srand(getpid());    //senza di cio il random restituisce sempre lo stesso num ???
    t = rand()%120 + 1;    //assegna un valore casuale da 1 a 120 a valore
    return t;
}
ora devo passare a fare il main di nave.c per gestire la creazione delle navi.. cosa mi consigliate di fare?
lucadue è offline   Rispondi citando il messaggio o parte di esso
Old 11-06-2009, 19:11   #8
lucadue
Senior Member
 
L'Avatar di lucadue
 
Iscritto dal: Mar 2006
Città: Saluzzo (Cuneo) - Trattative ok: 51
Messaggi: 3656
ho implementato un primo main

Codice:
main()
{
	int pid;	//variabile sulla quale eseguo fork()
	int n;		//utilizzato per assegnare la wait
	boat nave;    //dichiarazione variabile nave

	pid = fork();	//fork() su pid per creare il figlio
	
	if (!pid)	//se pid == 0
	{
		printf("Sono il figlio %d\n", getpid());	//e' stato creato il figlio del quale stampo il pid
		nave.identificatore = getpid();    //assegna all'identificatore della nave l'identificatore del processo
		nave.merce = get_merce();    //assegna un tipo random di merce con la funzione get merce
		nave.quantita = get_quantita();    //assegna una quantita random di merce con la funzione get quantita
		printf("identificatore nave ---> %d \n", 1);    //stampa l'identificatore
		printf("merce contenuta sulla nave: %s \n", nave.merce);    //stampa la merce trasportata
		printf("quantità di merce contenuta sulla nave: %d \n", nave.quantita);    //stampa la quantita
	}
			
	else	 
		printf("padre %d\n", getppid());	//stampo il pid del padre
	
	n = wait(0);
	
	if(n > 0) 
		printf("Terminato figlio %d\n", n);
}
in questo modo fa quello che deve generandomi una nave con un identificatore, una merce e una quantita...
se voglio espandere questo a dieci navi e non solo una cosa devo modificare? mi date una mano?
lucadue è offline   Rispondi citando il messaggio o parte di esso
Old 12-06-2009, 13:38   #9
lucadue
Senior Member
 
L'Avatar di lucadue
 
Iscritto dal: Mar 2006
Città: Saluzzo (Cuneo) - Trattative ok: 51
Messaggi: 3656
lucadue è offline   Rispondi citando il messaggio o parte di esso
Old 12-06-2009, 17:46   #10
lucadue
Senior Member
 
L'Avatar di lucadue
 
Iscritto dal: Mar 2006
Città: Saluzzo (Cuneo) - Trattative ok: 51
Messaggi: 3656
edit: il lavoro ora è a questo punto.. come dite di proseguire?

Codice:
#include "libporto.h"

/* metodo che assegna in modo casuale un tipo di merce */
char *get_merce()
{
	char *prodotto;    //stringa a cui si assegna il tipo di prodotto
    int valore;    //valore a cui si assegnerà un numero casuale				
	
	srand(getpid());    //senza questo il random restituisce sempre lo stesso num ???
    valore = rand() % 5 + 1;    //assegna un valore casuale da 1 a 5 alla variabile valore

	switch(valore)    //assegna il tipo di prodotto in base al numero generato
	{
		case 1: 
				prodotto = ("TABACCO");
				break;

		case 2: 
				prodotto = ("ACCIAIO");
				break;

		case 3: 
				prodotto = ("FERRO");
				break;

		case 4: 
				prodotto = ("AUTOMOBILI");
				break;

		case 5: 
				prodotto = ("PNEUMATICI");
				break;

		deafult:
				printf("*****ERRORE*****\n"); 
				break;
	}

return prodotto;    //restituisce il prodotto

}

/* metodo che assegna in modo casuale una quantità ad un carico di merce */
int get_quantita()
{
    int t;    //variabile contenente il peso della merce in tonnellate
    srand(getpid());    //senza questo il random restituisce sempre lo stesso num ???
    t = rand() % 120 + 1;    //assegna un valore casuale da 1 a 120 alla variabile t
    
	return t;    //restituisce le tonnellate
}

/* metodo che crea in modo casuale un numero di navi da un minimo di 1 ad un massimo di 15 */
int get_numnavi()
{
    int n;    //variabile contenente il numero delle navi
    srand(getpid());    //senza questo il random restituisce sempre lo stesso num ???
    n = rand() % 15 + 1;    //assegna un valore casuale da 1 a 15 alla variabile n
    
	return n;    //restituisce il numero di navi
}

/* metodo che crea una nave */
boat crea_nave(int val)
{
	boat barca;    //struttura contenente la nave da creare
		
	barca.identificatore = getpid();    //assegna all'identificatore della nave l'identificatore del processo
	barca.merce = get_merce();    //assegna un tipo random di merce con la funzione get merce
	barca.quantita = get_quantita();    //assegna una quantita random di merce con la funzione get quantita
	printf("Identificatore nave ---> %d \n", val);    //stampa l'identificatore della nave
	printf("Merce contenuta sulla nave ---> %s \n", barca.merce);    //stampa la merce trasportata dalla nave
	printf("Quantità di merce contenuta sulla nave ---> %d tonnellate\n", barca.quantita);    //stampa la quantità della merce contenuta sulla nave
	fflush(stdout);
	
	return barca;    //ritorna la nave appena creata
}

/* metodo che crea la coda di messaggi necessaria per le comunicazioni tra nave e capitaneria */
int crea_codamsg()
{
	int q_uid;    //variabile alla quale assegnare il risultato della funzione msgget()
	
	q_uid = msgget(ID_CODA, IPC_CREAT | 0666);
	
	if(q_uid == -1)
		return 0;
	else
		return 1;	
}

int main()
{    //APERTURA MAIN
	int pid;	//variabile alla quale assegnare il risultato della funzione fork()
	int n;		//variabile alla quale assegnare il risultato della funzione wait()
	boat nave;    //struttura contenente i dati della nave
	int i;    //variabile contenente l'indice necessario per il ciclo for
	int num_navi;    //variabile contenente il numero di navi create    
	int coda_msg;    //variabile contenente il valore buon fine o meno del risultato della creazione della coda
	
	coda_msg = crea_codamsg();
	
	if(coda_msg)    //if(coda_msg == 1)
	{    //APERTURA IF(1)
	
		num_navi = get_numnavi();
	
		for (i = 1; i <= num_navi; )    //ciclo for necessario per creare 10 processi figlio
		{    //APERTURA FOR

			pid = fork();	//fork() su pid per creare il figlio
	
			if (!pid)	//if(pid == 0) entro nel codice del processo figlio
			{
				printf("\n\nSono il figlio %d \n", getpid());	//e' stato creato il figlio del quale stampo il pid
				nave = crea_nave(i);	
				i = num_navi + 1;    //serve per farmi uscire dal ciclo, ovvero il figlio non effettua ulteriori fork()
			}
			
			else    //if(pid == 1) entro nel codice del processo padre
			{
				i++;    //incremento l'indice del ciclo for per evitare il loop
				printf("Sono il padre %d\n", getppid());	//stampo il pid del padre
				fflush(stdout);
			
				n = wait(0);	//il processo padre aspetta la terminazione del processo figlio
				fflush(stdout);
			
				if(n > 0)	//se la variabile contiene un numero maggiore di zero (pid del figlio)
					printf("Terminato il figlio %d\n", n);    //allora significa che il processo figlio è terminato
			}
		}    //CHIUSURA FOR
	}    //CHIUSURA IF(1)
	
	else    //if(coda_msg == 0)
		printf("*****ERRORE CREAZIONE CODA*****\n");

	return 0;
}    //CHIUSURA MAIN
e questa la libporto.h

Codice:
#ifndef molo
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>
#include <unistd.h>
#define molo
#define ID_CODA 1234

typedef struct {
	long type;
	int npid;
	char str[30];
} msg;

typedef struct {
	int quantita;
	char *merce;
	int identificatore;
} boat;

boat crea_nave(int);
char *get_merce();
int get_quantita();
int get_numnavi();
int crea_codamsg();

#endif

Ultima modifica di lucadue : 15-06-2009 alle 16:19.
lucadue è offline   Rispondi citando il messaggio o parte di esso
Old 15-06-2009, 16:21   #11
lucadue
Senior Member
 
L'Avatar di lucadue
 
Iscritto dal: Mar 2006
Città: Saluzzo (Cuneo) - Trattative ok: 51
Messaggi: 3656
help me per favore
lucadue è offline   Rispondi citando il messaggio o parte di esso
Old 16-06-2009, 14:30   #12
lucadue
Senior Member
 
L'Avatar di lucadue
 
Iscritto dal: Mar 2006
Città: Saluzzo (Cuneo) - Trattative ok: 51
Messaggi: 3656
iniziato a gestire il porto... datemi una mano ad implementare i semafori

Codice:
#include "libporto.h"

int crea_semafori()
{
	int s_uid;
	s_uid = semget(ID_SEM, 2, IPC_CREAT | 0666);
	
	if(s_uid == -1)
		return -1;
	else
		return s_uid;
}

int main()
{
	int id_semafori;
	
	id_semafori = crea_semafori();
	
	if (crea_semafori >= 0)
	{
		
	}

	else printf ("*****ERRORE CREAZIONE POOL DI SEMAFORI*****\n");
	
	printf ("l'id del pool dei semafori è %d\n", id_semafori);

	return 0;

}
ora che faccio?
lucadue è offline   Rispondi citando il messaggio o parte di esso
Old 19-06-2009, 11:13   #13
lucadue
Senior Member
 
L'Avatar di lucadue
 
Iscritto dal: Mar 2006
Città: Saluzzo (Cuneo) - Trattative ok: 51
Messaggi: 3656
lucadue è offline   Rispondi citando il messaggio o parte di esso
Old 20-06-2009, 18:04   #14
=KaTaKliSm4=
Senior Member
 
L'Avatar di =KaTaKliSm4=
 
Iscritto dal: Jul 2006
Città: Altamura
Messaggi: 919
che bello sarebbe stato usare gli oggetti in questa situazione eh
__________________
Trattative : http://swdev.altervista.org/VenditeAcquisti.txt Blog Tecnico : http://blogs.dotnethell.it/SwDev/
Desktop : i7 920,GTX580 PALIT, Obsidian 800D, 6GB Corsair, OCZ Vertex 3 240gb.
Desktop 2 : iMac 27'' MID 2011 i5, 4GB
=KaTaKliSm4= è offline   Rispondi citando il messaggio o parte di esso
Old 21-06-2009, 11:21   #15
lucadue
Senior Member
 
L'Avatar di lucadue
 
Iscritto dal: Mar 2006
Città: Saluzzo (Cuneo) - Trattative ok: 51
Messaggi: 3656
se mi date due dritte su come si fa posso modificarlo...
lucadue è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Oracle AI World 2026: in Europa prima la sovranità, poi la sicurezza e solo dopo l'IA Oracle AI World 2026: in Europa prima la sovrani...
DS N°7 E-Tense: il SUV premium made in Melfi che punta su autonomia e comfort DS N°7 E-Tense: il SUV premium made in Melfi...
Recensione Samsung Galaxy Tab S12 Ultra: non chiamatelo tablet... è molto di più Recensione Samsung Galaxy Tab S12 Ultra: non chi...
Hyundai IONIQ 5 N, l'elettrica che finge di essere termica (e ci riesce da paura) Hyundai IONIQ 5 N, l'elettrica che finge di esse...
CES Unveiled Milan, l'IA diventa tecnologia fondativa e il commercio torna centrale CES Unveiled Milan, l'IA diventa tecnologia fond...
Alphabet perde 500 miliardi di dollari i...
Reddit cambia strategia dopo il calo del...
Calcolo quantistico, Intel annuncia l'ac...
DirectX Raytracing si aggiorna: pi&ugrav...
Honda lancerà nuovamente il proto...
La prima missione Amazon Leo con il razz...
Invia il tuo nome su Titano, la luna di ...
Starship: Ship 42 e Super Heavy Booster ...
Chrome, meno tab switching con la nuova ...
L'IA agentica spopola fra le aziende, ma...
ASUS UGen300 arriva in Italia a 299 euro...
Iliad aggiorna la gamma di offerte per I...
Stop ai social per i minori, perché Brux...
Google Chrome integra Gemini in Enhanced...
Meta lancia Waddle World e Style Sketch,...
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: 05:32.


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