Torna indietro   Hardware Upgrade Forum > Software > Programmazione

OPPO Watch X2 Mini, lo smartwatch compatto a cui non manca nulla
OPPO Watch X2 Mini, lo smartwatch compatto a cui non manca nulla
OPPO Watch X2 Mini è uno smartwatch compatto capace di offrire un'esperienza completa di monitoraggio della salute e fitness con una cassa da 43 mm che può adattarsi a qualsiasi tipo di polso, dal più grande al - soprattutto - più piccolo. Con l'architettura dual-chip e un'autonomia che può coprire due giorni con tranquillità, rappresenta la soluzione ideale per chi cerca prestazioni premium in un formato ridotto.
Xiaomi 15T Pro, è lui il nuovo best buy? La recensione
Xiaomi 15T Pro, è lui il nuovo best buy? La recensione
Dopo il recente lancio della serie Xiaomi 15T di Monaco, vi parliamo oggi della versione più performante della nuova famiglia, ovvero Xiaomi 15 T Pro. Vi raccontiamo la nostra prova nel dettaglio, spiegando perché a questo prezzo e in questa fascia, questo smartphone ha davvero senso tenerlo in seria considerazione.
Acer TravelMate P6 14 AI: il Copilot+ PC sotto il chilo per il professionista in movimento
Acer TravelMate P6 14 AI: il Copilot+ PC sotto il chilo per il professionista in movimento
Acer ha ampliato la sua offerta professionale con il TravelMate P6 14 AI, un notebook ultraleggero e robusto pensato per chi lavora in mobilità. Certificato Copilot+ PC, combina design premium, autonomia elevata e piattaforma Intel Core Ultra Serie 2 con funzionalità AI, garantendo sicurezza, affidabilità e produttività per l'utenza business moderna.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 11-04-2002, 15:43   #1
paplo
Member
 
L'Avatar di paplo
 
Iscritto dal: Mar 2001
Città: Pordenone
Messaggi: 73
problema dei 5 giocatori in C

Ciao,

sto cercando di risolvere il seguente problema in C ...

"
Si realizzi mediante thread e sincronizzazione con semafori un processo che
simula 5 giocatori, seduti ad un tavolo circolare, che giocano a carte. Si
supponga a questo proposito di avere un mazzo di 40 carte, la cui estrazione
sia ottenuta per mezzo di un generatore pseudocasuale. Il gioco consiste
nell'assegnare, durante la prima mano, una carta a testa per giocatore da
porre alla sua destra. Un giocatore per poter giocare la sua mano deve poter
disporre di entrambe le carte, alla sua destra e alla sua sinistra
(quest'ultima assegnata al giocatore sinistro). Se sono disponibili le
preleva (per cui non possono essere utilizzate contemporaneamente dai
giocatori che gli stanno accanto) e, quindi, estraendo una carta dal mazzo
ne fa la somma (modulo 40) con le due carte prelevate ai suoi lati e le
ripone sul tavolo. Si simuli la partita per un certo numero di mani.
"

Il problema è molto simile a quello dei 5 filosofi, e su questo problema mi sono basato per trovare una soluzione, ma il programma non funziona ancora.

per questo lancio un SOS.
quale l'errore nel listato e l'eventuale soluzione ???
(il listato è in allegato)

Vi ringrazio per qualsiasi aiuto mi vogliate dare!

Ciao e grazie,
Paplo
__________________
Età : 28 - Sviluppatore PHP
paplo è offline   Rispondi citando il messaggio o parte di esso
Old 11-04-2002, 20:55   #2
MickMacello
Senior Member
 
Iscritto dal: Dec 1999
Messaggi: 139
non mi è ben chiaro il funzionamento del gioco.
__________________
Ingegnere: colui che ha molta familiarità con i modelli e molto poca con le modelle.
MickMacello è offline   Rispondi citando il messaggio o parte di esso
Old 12-04-2002, 08:26   #3
paplo
Member
 
L'Avatar di paplo
 
Iscritto dal: Mar 2001
Città: Pordenone
Messaggi: 73
cosa non capisci???

cosa devono fare i giocatori !?

spero che le righe seguenti ti possano far capire ...
(se ti può consolare, neanche io capisco il prof! )

"Questo esempio è una variante del problema dei cinque filosofi che, nel caso in esame, può ribattezzarsi nel problema dei cinque giocatori. Ogni giocatore,
se lo può fare, prende la propria carta e quella del vicino e le sostituisce con le loro somme successive modulo Cards essendo Cards + 1 il numero di carte del
mazzo."

Ciao,
Paplo
__________________
Età : 28 - Sviluppatore PHP
paplo è offline   Rispondi citando il messaggio o parte di esso
Old 12-04-2002, 10:33   #4
a2000
Bannato
 
L'Avatar di a2000
 
Iscritto dal: Jan 2001
Messaggi: 1976
solo in C eh ?
a2000 è offline   Rispondi citando il messaggio o parte di esso
Old 12-04-2002, 13:15   #5
MickMacello
Senior Member
 
Iscritto dal: Dec 1999
Messaggi: 139
Esistono librerie fortran per scrivere programmi multiprocesso ?
__________________
Ingegnere: colui che ha molta familiarità con i modelli e molto poca con le modelle.
MickMacello è offline   Rispondi citando il messaggio o parte di esso
Old 12-04-2002, 15:40   #6
/\/\@®¢Ø
Bannato
 
L'Avatar di /\/\@®¢Ø
 
Iscritto dal: Jul 2000
Città: Malo (VI)
Messaggi: 1000
L'errore che commetti e' che quando vuoi far prendere le carte al giocatore usi due wait.

In pratica il giocatore prende la prima carta , se non c'e' aspetta, quando ce l'ha prende la seconda , e se non c'e' aspetta.

Di conseguenza per come l'hai impostato tu, ogni giocatore prima prende la carta alla sua destra ( ad esempio ), e poi aspetta in eterno che il suo vicino molli la propria.

Cosa che non accadra' mai

Quindi devi prima limitarti a controllare se la carta e' disponibile , se non lo e' rinunciare, e se invece non lo e' prenderla. Stessa cosa per la seconda. Se riesce a pescarle tutte e due gioca, altrimenti molla l'eventuale carta presa e finisce il proprio turno

Non so il nome della funzione da invocare al posto di wait.
Con i pthread_mutex se non sbaglio c'e' la funzione pthread_mutex_trylock(), nel tuo caso probabilmente si chiamera' trywait()
/\/\@®¢Ø è offline   Rispondi citando il messaggio o parte di esso
Old 12-04-2002, 17:11   #7
paplo
Member
 
L'Avatar di paplo
 
Iscritto dal: Mar 2001
Città: Pordenone
Messaggi: 73
ho indagato per trovare l'errore, e l'ho trovato ....

in pratica sbagliavo quando richiamavo LEFT e RIGHT.
la giusta sintassi infatti è LEFT(i) e RIGHT(i).

dopo aver risolto questo problema, ne abbiamo incontrati altri che abbiamo superato.

adesso il programma restituisce qualcosa, ma qualcosa che non è esatta.
infatti tutti i giocatori accedono al mazzo contemporaneamente e pescano la stessa carta.

penso che il problema sia il wait come dice /\/\@®¢Ø .

allego il listato modificato.
vi ringrazio se potete darci un'occhiata.

Ciao,
Paplo.
__________________
Età : 28 - Sviluppatore PHP
paplo è offline   Rispondi citando il messaggio o parte di esso
Old 12-04-2002, 17:12   #8
paplo
Member
 
L'Avatar di paplo
 
Iscritto dal: Mar 2001
Città: Pordenone
Messaggi: 73
bè ... l'ho allego qui ....
__________________
Età : 28 - Sviluppatore PHP
paplo è offline   Rispondi citando il messaggio o parte di esso
Old 12-04-2002, 17:16   #9
paplo
Member
 
L'Avatar di paplo
 
Iscritto dal: Mar 2001
Città: Pordenone
Messaggi: 73
Quote:
Originariamente inviato da a2000
[b]solo in C eh ?
sì!!!!!

non in FCA o FORTRAN !!!
__________________
Età : 28 - Sviluppatore PHP
paplo è offline   Rispondi citando il messaggio o parte di esso
Old 12-04-2002, 17:18   #10
paplo
Member
 
L'Avatar di paplo
 
Iscritto dal: Mar 2001
Città: Pordenone
Messaggi: 73
Quote:
Originariamente inviato da /\/\@®¢Ø
[b]Quindi devi prima limitarti a controllare se la carta e' disponibile , se non lo e' rinunciare, e se invece non lo e' prenderla. Stessa cosa per la seconda. Se riesce a pescarle tutte e due gioca, altrimenti molla l'eventuale carta presa e finisce il proprio turno
ma se i giocatori a sinistra e a destra fossero più veloci del giocatore al centro, il giocatore al centro non giocherebbe mai?!

Ciao e grazie,
Paplo
__________________
Età : 28 - Sviluppatore PHP
paplo è offline   Rispondi citando il messaggio o parte di esso
Old 12-04-2002, 18:37   #11
/\/\@®¢Ø
Bannato
 
L'Avatar di /\/\@®¢Ø
 
Iscritto dal: Jul 2000
Città: Malo (VI)
Messaggi: 1000
Ah, devono giocare per forza in un dato turno ?
Io pensavo che semplicemente chi puo' gioca e gli altri "s'attaccano"
Un modo naïve può essere quello , con l'algoritmo che ti ho delineato, di continuare a provare fino a che uno non riesce a giocare:
Aspetta la prima carta ( qui va bene il wait ), e cerca poi di prendere la seconda ( trywait o quel che è ): se ce la fa gioca, altrimenti rimetti giu' la carta e riprova. Il discorso fondamentale è che o prendi su entrambi le carte o le lasci giu', non puoi tenerti in mano una sola carta e aspettare che si liberi la seconda, altrimenti non si riesce a giocare.
( sempre che abbia capito correttamente il gioco of course )
/\/\@®¢Ø è offline   Rispondi citando il messaggio o parte di esso
Old 12-04-2002, 18:58   #12
/\/\@®¢Ø
Bannato
 
L'Avatar di /\/\@®¢Ø
 
Iscritto dal: Jul 2000
Città: Malo (VI)
Messaggi: 1000
tanto per capirsi pensavo ad una cosa simile :


void take_cards(int i) /* i= numero del filosofo, 0.. N-1 */
{
bool ok=false;
while( ! ok )
{
if (i == 0){
wait(s[RIGHT(i)]);
printf("Il giocatore %d prende la carta destra.\n", i+1);
if ( trywait(s[LEFT(i)]) ) // controlla come funziona questo !
{
ok = true;
sleep(1); // simula una presa lenta per simulare il deadlock
}
else // la seconda carta non e' disponibile, rimettiamo a posto la prima e riproviamo
signal( s[RIGHT(i)]);

}
...


in questo caso ho ipotizzato che la trywait ritorni TRUE ( non zero ) se riesce a bloccare il semaforo, FALSE altrimenti, dovresti controllare in realta' se e' cosi' o meno
/\/\@®¢Ø è offline   Rispondi citando il messaggio o parte di esso
Old 12-04-2002, 19:40   #13
paplo
Member
 
L'Avatar di paplo
 
Iscritto dal: Mar 2001
Città: Pordenone
Messaggi: 73
/\/\@®¢Ø, avevi capito bene prima.

questa mattina ho chiesto al prof. e in sostanza che prima arriva meglio alloggia.
cmq. è più semplice far saltare il turno ad un giocatore che tenere conto dellle mani, non è vero!?

cmq. nella prima soluzione che hai proposto sono superflui i semafori.
ovvero è neccessario soltanto un array che memorizzi gli stati delle carte.
ho inteso bene?

Ciao e grazie,
Paplo
__________________
Età : 28 - Sviluppatore PHP
paplo è offline   Rispondi citando il messaggio o parte di esso
Old 12-04-2002, 20:40   #14
/\/\@®¢Ø
Bannato
 
L'Avatar di /\/\@®¢Ø
 
Iscritto dal: Jul 2000
Città: Malo (VI)
Messaggi: 1000
No ! I semafori ti servono proprio per accedere a quell'array in modo sincronizzato.

Mi spiego meglio:
Supponiamo che nell'array tu memorizzi 1 se la carta e' disponibile 0 altrimenti. Se memorizzi solo lo stato puo' succedere che due giocatori cerchino di prendere la stessa carta contemporaneamente o quasi, ad esempio A vede 1 e decide di prendere la carta, in quel momento la cpu passa a B che vede anche lui 1, si ritorna ad A che imposta il valore a 0 ( si prende la carta ) , e la cpu ritorna a B che fa lo stesso. Due persone con la stessa carta in mano.
Se invece del contatore usi il semaforo ( che non e' altro che un contatore sincronizzato ) dopo che A "blocca" il semaforo ( la puoi considerare come una operazione "indivisibile" ) B si vede subito 0 e quindi non puo' prendersi la carta.
Spero di non averti confuso le idee ancora di piu'
/\/\@®¢Ø è offline   Rispondi citando il messaggio o parte di esso
Old 12-04-2002, 22:33   #15
a2000
Bannato
 
L'Avatar di a2000
 
Iscritto dal: Jan 2001
Messaggi: 1976
Quote:
Originariamente inviato da paplo
[b]

sì!!!!!

non in FCA o FORTRAN !!!

e in Excel ?
a2000 è offline   Rispondi citando il messaggio o parte di esso
Old 12-04-2002, 22:49   #16
a2000
Bannato
 
L'Avatar di a2000
 
Iscritto dal: Jan 2001
Messaggi: 1976
Quote:
Originariamente inviato da MickMacello
[b]Esistono librerie fortran per scrivere programmi multiprocesso ?
disponibili fin dai primi anni '60:
vedi algoritmi per la risoluzione dell'equazione di Navier-Stokes ai volumi finiti e variabili segregate.


ragazzi col fortran non si gioca, si fa la guerra ! (e la pace)


P.S.
mi sembra poi che, in generale, chi si occupa dei linguaggi di programmazione solo per gestire funzioni di macchina e flussi di dati abbia un certo ritardo culturale, diciamo un delay puro, come le palle dei cani
a2000 è offline   Rispondi citando il messaggio o parte di esso
Old 13-04-2002, 10:06   #17
MickMacello
Senior Member
 
Iscritto dal: Dec 1999
Messaggi: 139
Quote:
Originariamente inviato da a2000
[b]
P.S.
mi sembra poi che, in generale, chi si occupa dei linguaggi di programmazione solo per gestire funzioni di macchina e flussi di dati abbia un certo ritardo culturale, diciamo un delay puro, come le palle dei cani
Che ci vuoi fare, non ci sono più gli insegnanti di una volta...
__________________
Ingegnere: colui che ha molta familiarità con i modelli e molto poca con le modelle.
MickMacello è offline   Rispondi citando il messaggio o parte di esso
Old 13-04-2002, 14:45   #18
paplo
Member
 
L'Avatar di paplo
 
Iscritto dal: Mar 2001
Città: Pordenone
Messaggi: 73
Ciao,

vi chiedo un piccolo favore ancora ....

mi potreste inviare o postare questi file ...

pthread.h
semaphore.h
stdio.h
stdlib.h
time.h

putroppo non ho installato Linux ed il compilatore per Windows non li ha a disposizione.

la mia email è paplo@inwind.it


Vi ringrazio molto!

Ciao,
Paplo
__________________
Età : 28 - Sviluppatore PHP
paplo è offline   Rispondi citando il messaggio o parte di esso
Old 13-04-2002, 16:13   #19
/\/\@®¢Ø
Bannato
 
L'Avatar di /\/\@®¢Ø
 
Iscritto dal: Jul 2000
Città: Malo (VI)
Messaggi: 1000
pthread e' specifico di una libreria e non basta copiarle l'header la devi avere tutta.

Ho trovato un port dei pthread qui , dovresti pure trovare le dll gia' precompilate. "semaphore.h" forse e' un header di linux , pero' nei pthreads ci sono pure i semafori , si tratta solo di cambiare i nomi delle funzioni.

Potresti in alternativa usare le api di win32 , pero' temo che per il tuo progetto non vada bene.


stdlib.h e stdio.h invece dovrebbero essere standard , strano che tu non le abbia.

Se usi un compilatore C++ invece che prova a includere cstdlib e cstdio.

Stessa cosa per time.h. Non so se e' standard, comunque ctime del C++ lo e'.
/\/\@®¢Ø è offline   Rispondi citando il messaggio o parte di esso
Old 13-04-2002, 17:19   #20
paplo
Member
 
L'Avatar di paplo
 
Iscritto dal: Mar 2001
Città: Pordenone
Messaggi: 73
Quote:
Originariamente inviato da /\/\@®¢Ø
[b]stdlib.h e stdio.h invece dovrebbero essere standard , strano che tu non le abbia.
credo anche io che siano standard, ma non ho avuto modo di sapere se vi sono perchè mi restituisce solo un errore per volta il compilatore.

Ciao e grazie,
Paplo
__________________
Età : 28 - Sviluppatore PHP
paplo è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


OPPO Watch X2 Mini, lo smartwatch compatto a cui non manca nulla OPPO Watch X2 Mini, lo smartwatch compatto a cui...
Xiaomi 15T Pro, è lui il nuovo best buy? La recensione Xiaomi 15T Pro, è lui il nuovo best buy? ...
Acer TravelMate P6 14 AI: il Copilot+ PC sotto il chilo per il professionista in movimento Acer TravelMate P6 14 AI: il Copilot+ PC sotto i...
ASUS NUC 15 Pro e NUC 15 Pro+, mini PC che fondono completezza e duttilità ASUS NUC 15 Pro e NUC 15 Pro+, mini PC che fondo...
Cybersecurity: email, utenti e agenti IA, la nuova visione di Proofpoint Cybersecurity: email, utenti e agenti IA, la nuo...
Scarpe che vi faranno correre alla veloc...
MOVA Z60 Ultra Roller Complete: 200€ di ...
Xiaomi SU7 si sposta da sola? Non esatta...
Cheater bannati entro 30 minuti senza ne...
Record di auto elettriche a settembre an...
In Norvegia due nuovi record: auto elett...
Linux sempre più orfano di Intel:...
Tesla conferma il bonus su Model 3: con ...
Anche Huawei prepara il suo smartphone u...
Sondaggio Steam: AMD guadagna ancora ter...
Zeekr si espande in Europa: 001, X e 7X ...
Fino a 17 sterline a telefono: il risarc...
Nintendo Switch 2 sfrutta una variante p...
AMD e OpenAI stringono un accordo strate...
Nest Cam 2K 3a gen: la videocamera da in...
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: 22:24.


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