Autoscontro in C

di il
9 risposte

Autoscontro in C

Salve, per l'esame di programmazione 1 devo preparare un progetto in c, devo simulare un autoscontro.
La traccia dice questo

Si supponga di avere quattro macchine al centro dei quattro lati opposti di una griglia
(vedi figura). Le macchine possono muoversi in una della quattro posizioni vicine.
La griglia è formata da mura esterne ed è di 8x8 caselle.
Si supponga che ogni macchina si muova seguendo le seguenti regole:
o La macchina 1 può andare a destra con probabilità 20% a sinistra con
probabilità del 10%, in avanti con probabilità del 30 % e indietro con
probabilità del 40%.
o La macchina 2 osserva i movimenti della macchina 1 e con una probabilità
del 30% sceglie la stessa direzione.
o La macchina 3 può andare a destra con probabilità 30% a sinistra con
probabilità del 20%, in avanti con probabilità del 5 % e indietro con
probabilità del 45%.
o La macchina 4 osserva le direzioni delle altre auto e si sposta nella direzione
di minima distanza (usare un algoritmo ricorsivo per calcolare la minima
distanza).
La simulazione finisce quando si verifica uno scontro tra almeno due macchine.
L’algoritmo usa la function rand() in stdlib per generare numeri casuali: si
ricorda che, per esempio, se numero_casuale è un int, la chiamata
numero_casuale=rand()%11; genera un numero casuale intero (distribuzione
uniforme) nell’insieme (0,1,2,3,4,5,6,7,8,9,10). Usare sempre la srand() per rendere
automatica la scelta iniziale del seed della sequenza di numeri casuali. Effettuare almeno
5 simulazioni.

Vorrei capirci di più su come strutturare l'algoritmo. Devo prima di tutto sviluppare una mappa di gioco quindi dovrò utilizzare un array 2d. Da lì in poi non so praticamente come andare avanti neanche concettualmente, è il primo programma un pò più serio che viene proposto nel mio corso di studi, gli esercizi precedenti nel corso erano molto più banali.
Le varie macchine devono essere dei punti dell'array che devo inizializzare io e farle muovere simulando con srand gli spostamenti? Ringrazio chi mi renderà un pò più chiara la traccia.

9 Risposte

  • Re: Autoscontro in C

    Non dice cosa fa la macchina 2 nel 70% dei casi e poi cosa intendi con minima distanza? E poi non sai di quante caselle spostarle?
  • Re: Autoscontro in C

    Avevo dimenticato un pezzo della traccia, comunque no non dice cosa fa la seconda macchina nel 70% dei casi e non so neanche di quante caselle spostarle. Sono passato da algoritmi come il merge o l'ordinamento per inserimento a questa cosa qui che devo far per l'esame e devo consegnare in una settimana e ho non poche difficoltà.
  • Re: Autoscontro in C

    Ma allora qual è il senso del programma? Cosa succede se due macchine si toccano? Come fai a farle muovere se non sai di quanto? E poi non mi è chiaro cosa sia la minima distanza
  • Re: Autoscontro in C

    Se due macchine si toccano il programma deve terminare l'esecuzione, perchè c'è stato appunto lo scontro. Per minima distanza credo sia essendo che la 4° macchina si sposta in base alla direzione delle altre auto, si sposterà nella direzione con distanza più piccola sempre rispetto alle altre 3 macchine, cioè se ha la macchina uno a 2 caselle, la macchina due a 3 caselle e la macchina tre a 4 caselle si sposterà di 2 caselle, ovvero la distanza minima. Così l'ho interpretato.
  • Re: Autoscontro in C

    Allora scrivi un algoritmo che controlli la distanza di ogni macchina dalla quarta, poi la fai muovere di quella distanza (non si sa in che direzione però). Diciamo che questo esecizio non è molto chiaro. Io comunque farei delle funzioni in un ciclo che ad ogni esecuzione muove le macchine di 1 casella nella direzione randomizzata, e alla fine la quarta macchina con quell'algoritmo, e poi eseguirlo finché non si scontrano due o più macchine

    Edit

    Ovviamente il calcolo della distanza devi farlo in diagonale secondo me, perché la griglia è 2D quindi la distanza non è sempre orizzontale o verticale
  • Re: Autoscontro in C

    Ok ti ringrazio già mi è un pò più chiaro, l'unica cosa quale sarebbe poi la condizione di un eventuale ciclo per far si che il programma randomizzi gli spostamenti? Dovrebbe essere quando una qualsiasi macchina si scontra con un'altra, come faccio a scrivere questa cosa?
  • Re: Autoscontro in C

    Li devi randomizzare a ogni esecuzione. La distanza delle prime 3 macchine è sempre 1, la direzionea randomizzi come detto dall'esercizio a ogni esecuzione dek ciclo
  • Re: Autoscontro in C

    Ora che rileggo il testo, credo che la quarta macchina si debba muovere sempre di una casella, ma la direzione è scelta in base alla macchina che le sta più vicina
  • Re: Autoscontro in C

    maxilrosso ha scritto:


    - la distanza della 4 dalle altre è calcolata come somma delle distanze
    - la distanza tra due macchine è in "metrica del tassista" e non in "metrica euclidea"; quindi ti muovi solo in orizzontale e vericale e non in diagonale.
    E da cosa lo hai capito?
Devi accedere o registrarti per scrivere nel forum
9 risposte