Programma auto-scontro

di il
17 risposte

Programma auto-scontro


20190129_125941.jpg
20190129_125941.jpg

salve devo fare questo programma in c .nel forum già c'è questo argomento, ed ho cercato di seguirla.
cmq il programma bene o male l'ho fatto tutto.
l'unica cosa che non riesco a fare è una function che una volta che le auto si scontrano stessa ascissa ed ordinata di questa "scacchiera 7x7"far uscire
la 'x' al posto delle lettere A B C D.oppure sto approcciando male.nel caso scrivo una bozza di questa function.potreste darmi qualke dritta?
premetto che ho studiato ma mi manca ancora quel sesto senso informatico.

typedef struct coord {char p;int x;int y;} Coordinate ;
Coordinate collisione (Coordinate scontro,int 4)
{
int i,j;

for (j=1;j<macchine;j++)
if (scontro.x==scontro[j].x && scontro.y==scontro[j].y)
{
scontro.p='X';
};
}
return scontro;
}

17 Risposte

  • Re: Programma auto-scontro

    Mancano i tag CODE per il codice che non si capisce ...

    E poi comunque, che vuoi dire con

    int 4

    ???
  • Re: Programma auto-scontro

    Scusa il casino , sono molto disordinato visto ke ci provo da molto.quindi mille idee tutte miskiate.
    cmq
    Coordinate collisione (Coordinate scontro,int 4)//queste erano le 4 macchine.
    mi puoi dire per code cosa intendi?le cordinate delle macchine?
    Coordinate kCooIniziali[]= {{'A',6,3}, {'B',3,0}, {'C',0,3}, {'D',3,6}};
  • Re: Programma auto-scontro

    Per CODE devi leggere il regolamento.

    Non hai risposto su int 4 che non ha alcun senso negli argomenti.

    Non avrai molte risposte se non poni meglio la domanda e non spieghi quello che hai scritto in dettaglio
  • Re: Programma auto-scontro

    Se cerchi all'indietro nel forum, trovi altri thread sullo stesso argomento. Anzi, sullo stesso esercizio.
  • Re: Programma auto-scontro

    Scusa raccolgo le idee e cerco di esprimermi meglio.
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <time.h>
    
    #define W_AUTOPISTA     7
    #define H_AUTOPISTA     7
    #define Q_DIREZIONI     4
    #define Q_AUTO          4
    
    // per le coordinate
    typedef struct {
        int x;
        int y;
    } coo_t;
    
    const char kEtVuota = '.';      // l'etichetta che indica una posizione vuota
    const char kEtCollisione = 'X'; // l'etichetta che indica una collisione
    
    // le etichette che indicano le quattro macchine
    const char kEtAuto[Q_AUTO] = { 'A', 'B', 'C', 'D' };
    
    // le coordinate iniziali delle quattro macchine
    const coo_t kCooIniziali[Q_AUTO] = { {3,0}, {6,3}, {3,6}, {0,3} };
    
    // le probabilita' dell'estrazione delle 4 direzioni, per le 4 macchine
    const int kProbabilita[Q_AUTO][Q_DIREZIONI] = {
        { 30, 30, 30, 10 }, // macchina 1
        { 15, 40, 35, 10 }, // macchina 2
        {  5, 30, 45, 20 }, // macchina 3
        { 25, 20, 25, 30 }  // macchina 4
    };
    
    char ap[H_AUTOPISTA][W_AUTOPISTA]; // la mappa dell'autopista
    
    void inizializza( coo_t *coo ) {
        // 1. inizializzo srand()
        // 2. "azzero" la mappa dell'autopista ap con tutti '.'
        // 3. piazzo le quattro lettere segnaposizione A,B,C e D nella mappa ap
        // 4. imposto in coo le quattro macchina con le loro coordinate iniziali
    }
    
    void mostra_autopista( int collisione ) {
        // 1. visualizzo in console il contenuto della mappa dell'autopista ap
        // 2. se collisione e' diverso da zero, aggiungo il messaggio "Collisione!"
    }
    
    void estrai_movimento( coo_t *coo, const int prob[Q_DIREZIONI] ) {
        // in un ciclo che termina solo con l'estrazione di un movimento valido
        // 1. estraggo a sorte un numero a caso compreso tra 0 e 100
        // 2. verifico in quale intervallo percentuale si trova il valore estratto
        // 3. decido di conseguenza la direzione da prendere
        // 4. controllo di non essere finito fuori dalla mappa ap
        // 5. se sono finito fuori dalla mappa ap ripeto il ciclo "over and over"
    }
    
    int muovi( coo_t *coo ) {
        // 1. chiamo estrai_movimento per farmi dire in coo dove devo andare
        // 2. verifico se c'e' stata una collisione
        // 3. in caso di collisione restituisco 1, altrimenti restituisco 0
    }
    
    void aggiorna_autopista( const coo_t *coo, int collisione ) {
        // 1. "azzero" la mappa dell'autopista ap con tutti '.', per eliminare le
        //    vecchie posizioni delle macchine
        // 2. colloco le etichette A,B,C e D nelle nuove posizioni delle macchine
        // 3. se c'e' stata collisione, verifico dove e colloco il segnaposto 'X'
    }
    
    int main() {
        coo_t coo[Q_AUTO];
        int collisione;
    
        inizializza( coo );
        mostra_autopista(0);
        system( "pause" ); // lo so... a tanti system() non piace
    
        do {
            system( "cls" ); // di nuovo system()! ;)
    
            collisione = muovi( coo );
            aggiorna_autopista( coo, collisione );
            mostra_autopista( collisione );
    
            system( "pause" ); // e ancora una volta...
        } while( !collisione );
    
        return 0;
    }
    questo l'ho preso da un vecchio post.
    di questo codice ci sono ancora piccole parti che non riesco a fare.
    come questa
    int muovi( coo_t *coo ) {
        // 1. chiamo estrai_movimento per farmi dire in coo dove devo andare//[b]la function estrai movimento l'ho creata[/b]
        // 2. verifico se c'e' stata una collisione// [b]Come devo fare a verificarlo?[/b]
        // 3. in caso di collisione restituisco 1, altrimenti restituisco 0
        
        void aggiorna_autopista( const coo_t *coo, int collisione ) {
        // 1. "azzero" la mappa dell'autopista ap con tutti '.', per eliminare le
        //    vecchie posizioni delle macchine
        // 2. colloco le etichette A,B,C e D nelle nuove posizioni delle macchine
        // 3. se c'e' stata collisione, verifico dove e colloco il segnaposto 'X' //[b]come devo fare?[/b]
        
    come faccio a vedere se c'è stata una collisione?e a collocare una x?Potreste aiutarmi?
  • Re: Programma auto-scontro

    AldoBaldo ha scritto:


    Se cerchi all'indietro nel forum, trovi altri thread sullo stesso argomento. Anzi, sullo stesso esercizio.
    si ho preso proprio il tuo suggerimento,ma non riesco a fare alcuni passaggi...
    come faccio a verificare se c'è stato una collisione?e come faccio a mettere la 'x' al posto delle etichette?
  • Re: Programma auto-scontro

    La collisione presuppone che almeno due suto occupano le stesse coordinate. Se è così assegni a tali coordinate la x

    Non vedo difficoltà
  • Re: Programma auto-scontro

    oregon ha scritto:


    La collisione presuppone che almeno due suto occupano le stesse coordinate. Se è così assegni a tali coordinate la x

    Non vedo difficoltà
    si per due macchine ci riesco ma il problema è che lo dovrei fare per tutte le macchine,cioè macchina 1 con la 2 la 3 e la 4,la 2 con la 3 e 4 ect.(sono 6 abbinamenti)
    Vorrei sapere come faccio ad automatizzare il processo?o devo scrivere singolarmente ogni abbinamento?tipo:
    
    
    if (auto[0].x==auto[1].x && auto[0].y==auto[1].y)
            {
                scontro[0].p='X';
    scusate la banalità delle domande ma a volte in cose semplici ci si blocca di più.
  • Re: Programma auto-scontro

    Lo fai quando muovi ogni macchina. Quindi controlli che la macchina A vada in una cella libera altrimenti hai una collisione. Devi controllare la cella che devi occupare non tutte le altre auto
  • Re: Programma auto-scontro

    oregon ha scritto:


    Lo fai quando muovi ogni macchina. Quindi controlli che la macchina A vada in una cella libera altrimenti hai una collisione. Devi controllare la cella che devi occupare non tutte le altre auto
    ed una cella libera come la interpreto?io pensavo di incrociare le coordinate auto, ma vedere se una cella è libera non mi viene in mente.
    Aiutino?
  • Re: Programma auto-scontro

    Ma che aiutino scusa...

    Cosa metti nelle celle dell'array per indicare che è libera o c'è un'auto? Lo sai tu
  • Re: Programma auto-scontro

    Io avevo usato un '.', in modo che visualizzando lo schema in console le caselle vuote fossero comunque visibili. In effetti puoi usare qualsiasi altro carattere, basta che poi ti ricordi qual è il carattere che indica la casella vuota. Se controlli, vedi che avevo i "segnaposizione" per le quattro auto ('A', 'B', 'C' e 'D'), uno per le caselle vuote ('.') e uno per le caselle nelle quali si verificavano le collisioni ('X').

    Se per una certa mossa ti ritrovi a dover spostare una "macchina" dove già c'è una delle altre, significa che lì c'è una collisione, allora invece di mettere il segnaposizione della "macchina" in quella casella ci metti una bella 'X' prima di visualizzare la matrice che rappresenta la pista. A voler strafare puoi anche mandare in print() una frase che specifichi quali sono le auto coinvolte nello "scontro".
  • Re: Programma auto-scontro

    Ragazzi grazie mille ho risolto,siete stati eccezionali.Volevo chiedere una cosa soltanto.Con codeblock ho creato un header file e l'ho linkato al main, ma quando ho trasferito la function con la struct Coordinata mi dice che non la riconosce,pero' io l'ho inizializzata nel main del progetto.C'è un'eccezione per le struct per quanto riguarda gli header file?xkè con le altre function non mi da nessun problema.Potreste darmi indicazioni a riguardo?Grazie anticipatamente.
  • Re: Programma auto-scontro

    Non so bene cosa tu abbia fatto e cosa no, però puoi controllare se ti sei ricordato di mettere nell'header ANCHE la definizione della struttura "incriminata". PRIMA della dichiarazione della funzione destinata ad usarla.
Devi accedere o registrarti per scrivere nel forum
17 risposte