Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    [C] Struttura Dati

    ciao a tutti,

    sono nuovo del forum e come vedete dal nik ho appena iniziato con la programmazione (da circa due mesi ) Ora sono arrivato all argomento dei puntatori e qui sto sbattendo la testa di brutto.
    Per la cronaca, sapreste in che maniera si puo implementare questa struttura dati? (sempre che si possa implementare....)

    [1]-->[dato1]-->[datoA]
    [2]-->[dato2]-->[datoB]
    [3]-->[dato3]-->[datoC]
    [4]-->[dato4]-->[datoD]
    [n]-->[daton]-->[daton]

    Detta in parole, sarebbe un vettore di puntatori che puntano a un dato (in questo caso il numero di una carta da gioco, es dato1),ma come posso fare a partire dal numero della carta a puntare anche al seme della carta?( es datoA).
    E possibile creare questa struttura SOLO usando puntatori? (e non cose piu avanzate come struct liste etc, ho sbirciato il libro -.-). Vi faccio questa domanda perche sono allo studio del capitolo del puntatori e il problema si deve risolvere con i mezzi fin qui studiati. Nel caso in cui la risposta sia negativa allora mi sa ke dovro' cambiare approccio (alias algoritmo) per risolvere il mio problema.

    Grazie a tutti per l attenzione!!!!!

    Saluti!!!

    The Beginner


    PS se qualcuno e interessato a discutere sul mio problema, cioe a una simulazione di poker, ben venga

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: [C] Struttura Dati

    Originariamente inviato da UltraBeginner
    [1]-->[dato1]-->[datoA]
    [2]-->[dato2]-->[datoB]
    [3]-->[dato3]-->[datoC]
    [4]-->[dato4]-->[datoD]
    [n]-->[daton]-->[daton]

    Detta in parole, sarebbe un vettore di puntatori che puntano a un dato (in questo caso il numero di una carta da gioco, es dato1),ma come posso fare a partire dal numero della carta a puntare anche al seme della carta?( es datoA).
    E possibile creare questa struttura SOLO usando puntatori? (e non cose piu avanzate come struct liste etc, ho sbirciato il libro -.-). Vi faccio questa domanda perche sono allo studio del capitolo del puntatori e il problema si deve risolvere con i mezzi fin qui studiati. Nel caso in cui la risposta sia negativa allora mi sa ke dovro' cambiare approccio (alias algoritmo) per risolvere il mio problema.
    Allora ... in effetti i puntatori sono l'argomento più complesso del linguaggio "C" e .... bisogna capirli a fondo per poterli usare!!

    Fatta questa premessa, veniamo al tuo problema. Tu dici che vuoi risolvere la cosa con dei puntatori ma ... la soluzione migliore non è questa. Devi pensare a quali sono i dati da gestire e a come sono rapportati tra di loro.
    Prendiamo una carta da gioco: essa ha 2 caratteristiche: il numero e il seme. Questi due dati non sono collegati tra di loro. Non ha senso dire che il numero 1 è "collegato" al seme "fiori". È la carta che ha numero 1 e seme "fiori".
    Quindi il modo migliore è usare una semplice struttura. Ad esempio:

    codice:
    typedef struct
    {
        short numero;
        char *seme;
    } CARTA;
    
    CARTA carte[2] = { { 1, "fiori" }, { 2, "fiori" } };
    Nota: ho usato una stringa per identificare il seme. Nulla vieta di usare un valore numerico (es. 1, 2, 3, 4). Dipende dall'uso che se ne deve fare!

    Originariamente inviato da UltraBeginner
    PS se qualcuno e interessato a discutere sul mio problema, cioe a una simulazione di poker, ben venga
    Personalmente, no, grazie ... non so giocare a poker.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Credo che usando solo i puntatori sia un po' dura. Se mi concedi una struct farei qualcosa del genere (assumo che dato1 e dato A siano delle stringhe e che dato A sia il seme della carta dato1), in fondo le struct me le studierei per andare avanti
    codice:
      struct carta
      {
         char carta[20];
         char *seme;
      };
      
      struct carta *carte[n]; // mettici il numero di carte.
      char *semi[4] = { "CUORI", "PICCHE", "QUADRI", "FIORI" }; // Direi che i semi sono quattro.
    Se voglio usare definire la carta Donna di quadri nella posizione 0 di carte farei così:
    codice:
      strcpy(carte[0].carta, "Donna");
      carte[0].seme = semi[2];
    Se proprio non vuoi usare la struct allora qualcosa del genere:
    codice:
      char carte[n][20]; // mettici il numero di carte.
      char semi_carte[n][20]; // mettici il numero di carte.
      char *semi[4] = { "CUORI", "PICCHE", "QUADRI", "FIORI" }; // Direi che i semi sono quattro.
    Se voglio usare definire la carta Donna di quadri nella posizione 0 di carte farei così:
    codice:
      strcpy(carte[0], "Donna");
      strcpy(semi_carte[0], semi[2]);
    Ovviamente questa soluzione è più brutta e spreca più memoria e funziona solo se poi i semi non cambiano (se no te li devi cambiare tu a mano uno per uno in semi_carte).
    Prova un po' se funziona...


    Opps ho visto troppo tardi che ti aveva risposto Andbin

  4. #4

    Thanks!!!

    Grazie per la rispo!

    spiegazione molto chiara!! Preso atto che bisogna usare la struct
    (che per ora non posso usare perche il capitolo 'non me lo consente' -.-) rileggo per la milionesima volta il testo del problema e cerco un algoritmo con matrici e vettori!!!

    Ti faccio poi sapere se ne cavo qualcosa dal buco!!

    A presto!!!

    PS Vista l ora, buon pranzo lol

  5. #5
    Originariamente inviato da fastcoder
    Credo che usando solo i puntatori sia un po' dura. Se mi concedi una struct farei qualcosa del genere (assumo che dato1 e dato A siano delle stringhe e che dato A sia il seme della carta dato1), in fondo le struct me le studierei per andare avanti
    codice:
      struct carta
      {
         char carta[20];
         char *seme;
      };
      
      struct carta *carte[n]; // mettici il numero di carte.
      char *semi[4] = { "CUORI", "PICCHE", "QUADRI", "FIORI" }; // Direi che i semi sono quattro.
    Se voglio usare definire la carta Donna di quadri nella posizione 0 di carte farei così:
    codice:
      strcpy(carte[0].carta, "Donna");
      carte[0].seme = semi[2];
    Se proprio non vuoi usare la struct allora qualcosa del genere:
    codice:
      char carte[n][20]; // mettici il numero di carte.
      char semi_carte[n][20]; // mettici il numero di carte.
      char *semi[4] = { "CUORI", "PICCHE", "QUADRI", "FIORI" }; // Direi che i semi sono quattro.
    Se voglio usare definire la carta Donna di quadri nella posizione 0 di carte farei così:
    codice:
      strcpy(carte[0], "Donna");
      strcpy(semi_carte[0], semi[2]);
    Ovviamente questa soluzione è più brutta e spreca più memoria e funziona solo se poi i semi non cambiano (se no te li devi cambiare tu a mano uno per uno in semi_carte).
    Prova un po' se funziona...


    Opps ho visto troppo tardi che ti aveva risposto Andbin
    meglio risposte in piu ke in meno!!!! Grazie mille anke la tua rispo e molto chiara!!!!

    Argh non vedo l ora di arrivare alle struct!!!! Sto sclerando con sti algoritmi di ricerca su matrici e vettori!!!!!!!!

    A presto!!

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 © 2025 vBulletin Solutions, Inc. All rights reserved.