Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2005
    Messaggi
    69

    [c] Ordinamento in una struct

    Salve, mi sono inbattuto in programma che simula il mescolamento e la distribuzione di un mazzo di carte francesi. il programma funge perfettamente ma usa una funzione per ordinare gli elementi nella struct il cui funzionamento non m'è chiaro.

    la struct:

    struct card{
    char *face[];
    char *suitt[];
    };

    typedef struct card Card;

    ci sono poi due puntatori ad array
    char *face[]= {"Asso", "due"......};
    char *suit[] = {"Picche", Cuori".....};
    Card deck[52];

    e questa è la funzione che inizializza deck in maniera ordinata

    void filldeck( Card *wDeck, char *wface[], char *wsuit)
    {
    int i;
    for (i=0; i <=51; i++)
    {
    wDeck[i].face = wface[i % 13];
    wDeck[i].suit = wsuit[ i / 13];
    }
    }

    domanda come fa a inizializzare ordinatamente l'array di tipo struct utilizzando modulo e divisione? Nello specifico, potete illustrarmi più chiaramente il procedimento? Grazie mille

  2. #2
    Un mazzo di carte consta di 52 carte "normali" (ossia, non jolly), 13 per seme. Se io prendo un numero compreso tra 0 e 51 e lo divido per 13 otterrò quindi un valore compreso tra 0 e 3, corrispondente al seme della carta. Se invece prendo il resto di tale divisione otterrò un numero compreso tra 0 e 12, ossia il numero della carta.
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2005
    Messaggi
    69
    ok, chiaro per quanto riguarda il seme, (anche se quello che ha partorito questo metodo non doveva essere tanto normale), per quanto riguarda invece il resto che dovrebbe essere compreso tra 0 e 12 non mi trovo

    i= 0 0 /13 = 0 --> resto 0
    i=1 1/13 = 0 ---resto 07
    i=2 2/13 = 0 ---resto 15

    Sbagliero qualcosa sicuramente, ma giusto per capire dov'è inghippo?

  4. #4
    Originariamente inviato da liberlux
    ok, chiaro per quanto riguarda il seme, (anche se quello che ha partorito questo metodo non doveva essere tanto normale),
    Cosa dici, questo tipo è un astuto: in due efficienti righe ha risolto perfettamente il problema.
    per quanto riguarda invece il resto che dovrebbe essere compreso tra 0 e 12 non mi trovo

    i= 0 0 /13 = 0 --> resto 0
    i=1 1/13 = 0 ---resto 07
    i=2 2/13 = 0 ---resto 15

    Sbagliero qualcosa sicuramente, ma giusto per capire dov'è inghippo?
    Il resto non è la parte dopo la virgola... :rollo:
    codice:
    dividendo = divisore * quoziente + resto
    
    317 : 2 = 158
    11
     17
     (1) <-- questo è il resto
    Amaro C++, il gusto pieno dell'undefined behavior.

  5. #5
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465
    Come fa ad esserci un resto 15 di una divisione per 13 ??

    Concordo sul fatto che il metodo e' molto efficiente ed astuto ...

  6. #6
    Utente di HTML.it
    Registrato dal
    Jan 2005
    Messaggi
    69
    Uh, grazie mille, ho fatto un attimo confusione, chiedo venia. Quando ho detto che il programmatore non deve essere uno normale, mi riferivo al quoziente intellettivo, come diavolo si fanno a pensare ste cose. Non lo capirò mai.


    P.S piccolo piccolo: ci sarebbe un modo per individuare il resto in maniera immediata o devo mettermi a fare le divisioni ogni volta?

    Ringrazio cmq tutti per le risposte sempre esaurienti, so che probabilmente per voi espertoni sono stupidate ma per me che sto imparando pian pianino sono essenziali.

  7. #7
    Originariamente inviato da liberlux
    P.S piccolo piccolo: ci sarebbe un modo per individuare il resto in maniera immediata o devo mettermi a fare le divisioni ogni volta?
    L'operatore modulo (%) è lì per quello .
    Amaro C++, il gusto pieno dell'undefined behavior.

  8. #8
    Utente di HTML.it
    Registrato dal
    Jan 2005
    Messaggi
    69
    mi rispondo da solo, certo che c'è il metodo per ricavare il resto in maniera immediata, basta farsi un programmino ad hoc

    edit:
    Originariamente inviato da MItaly
    L'operatore modulo (%) è lì per quello .
    mi hai anticipato

  9. #9
    [OT]
    Questo esercizio mi puzza proprio tanto di Deitel&Deitel . . .

    Sul Deitel&Deitel e' commentato benissimo !
    [/OT]
    Se una funzione riceve come argomento un puntatore di puntatore di puntatore quando la invochi ricordati che puo ricevere o un puntatore di puntatore di puntatore o l'indirizzo di un puntatore di puntatore

  10. #10
    Utente di HTML.it
    Registrato dal
    Jan 2005
    Messaggi
    69
    Si infatti deitel&deiter è il manuale principale che sto utilizzando per imparare (da autodidatta), integrandolo opportunamente con altre guide e manuali presenti sul web (compresa la guida presente su questo sito). Per quanto riguarda la spiegazione del programma sul manuale permettimi di dissentire, è spiegato benissimo quel che fa la funzione, ma non è affatto spiegato come lo fa, e non è sempre detto che un utente alle prime armi ci arrivi sempre e comunque da solo.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.