Matrici dinamiche e locazioni di memoria

di il
31 risposte

Matrici dinamiche e locazioni di memoria

Salve a tutti, per un mio programma avevo bisogno di creare una matrice 4x8 inizialmente vuota, che venisse riempita nelle sue celle in maniera randomica da delle strutture definite singolarmente prima, queste 32 strutture dovrebbero essere quindi disposte randomicamente in questa matrice variando ad ogni esecuzione di programma, pensavo quindi di randomizzare per singola struct l'indirizzo di memoria della mia matrice inizialmente vuota, ho provato a cercare su internet per risolvere autonomamente il mio problema e da quel che ho capito dovrei utilizzare le funzioni mallo e rialloc oltre che a quelle di rand e time 0, qualcuno potrebbe, gentilmente, darmi delle indicazioni su come risolvere il mio problema?
principalmente i miei problemi stanno sulla creazione della matrice inizialmente vuota in cui distribuire le mie struct e sulla gestione delle rand per randomizzare gli indirizzi di ogni singola cella della matrice stessa.
vi ringrazio in anticipo e vi auguro una buona serata.

31 Risposte

  • Re: Matrici dinamiche e locazioni di memoria

    Non ho capito molto ...

    Puoi indicare praticamente di quali strutture parli e che ci vuoi fare?
  • Re: Matrici dinamiche e locazioni di memoria

    Ok mi spiace, provo a spiegarmi meglio: ho 32 strutture, queste 32 strutture già definite devono essere disposte randomicamente all'interno di una matrice 4x8.
    il programma è un tipo di gioco di carte e praticamente le 32 strutture rappresenterebbero le carte (char seme int valore char faccia) e la mia matrice vuota rappresenterebbe il tabellone da gioco in cui dovrei randomicamente disporle.
    pensavo quindi di "filtrarle" nelle celle della matrice indirizzando la rand sulle celle in modo da avere le carte sempre disposte in modo diverso
  • Re: Matrici dinamiche e locazioni di memoria

    Quindi un altro problema della "saga dei solitari" ...

    Comunque, puoi mostrare la struttura di cui parli ?
  • Re: Matrici dinamiche e locazioni di memoria

    Esattamente ahah proprio quello
    il programma che ho scritto fino ad adesso è il seguente

    #include <stdio.h>
    #include <time.h>
    #include <stdlib.h>

    typedef struct carta //definisco la struttura carta
    {
    char *seme;
    int valore;
    char *faccia;

    }carta;

    int main ()
    { int i;
    carta mazzo[32]; //definisco l'array mazzo che contiene le mie 32 carte e le inizializzo una ad una
    mazzo[0] = {"picche", 1 , "A"};
    mazzo[1] = {"picche", 2 , "J"};
    mazzo[2] = {"picche", 3 , "Q"};
    mazzo[3] = {"picche", 4 , "K"};
    mazzo[4] = {"picche", 1 , "A"};
    mazzo[5] = {"picche", 2 , "J"};
    mazzo[6] = {"picche", 3 , "Q"};
    mazzo[7] = {"picche", 4 , "K"};

    mazzo[8] = {"cuori", 1 , "A"};
    mazzo[9] = {"cuori", 2 , "J"};
    mazzo[10] = {"cuori", 3 , "Q"};
    mazzo[11] = {"cuori", 4 , "K"};
    mazzo[12] = {"cuori", 1 , "A"};
    mazzo[13] = {"cuori", 2 , "J"};
    mazzo[14] = {"cuori", 3 , "Q"};
    mazzo[15] = {"cuori", 4 , "K"};

    mazzo[16] = {"quadri", 1 , "A"};
    mazzo[17] = {"quadri", 2 , "J"};
    mazzo[18] = {"quadri", 3 , "Q"};
    mazzo[19] = {"quadri", 4 , "K"};
    mazzo[20] = {"quadri", 1 , "A"};
    mazzo[21] = {"quadri", 2 , "J"};
    mazzo[22] = {"quadri", 3 , "Q"};
    mazzo[23] = {"quadri", 4 , "K"};

    mazzo[24] = {"fiori", 1 , "A"};
    mazzo[25] = {"fiori", 2 , "J"};
    mazzo[26] = {"fiori", 3 , "Q"};
    mazzo[27] = {"fiori", 4 , "K"};
    mazzo[28] = {"fiori", 1 , "A"};
    mazzo[29] = {"fiori", 2 , "J"};
    mazzo[30] = {"fiori", 3 , "Q"};
    mazzo[31] = {"fiori", 4 , "K"};

    for(i<0;i<32;i++)
    {
    printf(" %s %s ", mazzo.faccia , mazzo.seme);

    }
    }

    ora dovrei singolarmente indirizzarle in celle randomiche della mia matrice vuota, ma non saprei come fare, ti ringrazio per l'interessamento
  • Re: Matrici dinamiche e locazioni di memoria

    Utilizza i tag CODE per il codice o questo appare confuso.

    Comunque, parlavi di un array 4x8 ... dov'è?
  • Re: Matrici dinamiche e locazioni di memoria

    Randomicamente è un obbrobrio linguistico

    A caso
    Casualmente
    In maniera stocastica
    Stocasticamente
  • Re: Matrici dinamiche e locazioni di memoria

    StandardOil ha scritto:


    Randomicamente è un obbrobrio linguistico

    A caso
    Casualmente
    In maniera stocastica
    Stocasticamente
    A muzzo ... (per chi capisce)
  • Re: Matrici dinamiche e locazioni di memoria

    A muzzo ... (per chi capisce)
    Forza Palermo!
  • Re: Matrici dinamiche e locazioni di memoria

    orion99 ha scritto:


    A muzzo ... (per chi capisce)
    Forza Palermo!
    Sempre...
  • Re: Matrici dinamiche e locazioni di memoria

    Oregon la matrice 4x8 sarebbe il tavolo da gioco che inizialmente dovrebbe essere vuoto e che dovrebbe man mano venir riempito con le strutture carta contenute dentro il mio array mazzo,ed è la problematica per il quale sto chiedendo aiuto.
    scusate per l'obrobrio linguistico, avrei voluto procedere con A MUZZO ma mi sembrava meno adatto, forza Palermo!
  • Re: Matrici dinamiche e locazioni di memoria

    Semplicemente potresti scandire tutti gli elementi della matrice (scegliendo a caso riga e colonna) e assegnare a questi un valore compreso tra 0 e 31.

    La matrice di interi la inizializzi tutta con -1 in ogni elemento.
    Un ciclo esterno da 0 a 31 ... scegli riga e colonna a caso ...
    ...se l'elemento scelto è -1 gli assegni il valore del contatore e passi al prossimo, oppure generi altra riga e colonna
  • Re: Matrici dinamiche e locazioni di memoria

    Questo è quello che ho fatto fino ad adesso, penso di aver più o meno avuto la sua stessa pensata, ma dà errore sia se definisco tavolo come matrice di carta che come matrice di interi e non so come farlo diventare accettabile
    #include <stdio.h>
    #include <time.h> 
    #include <stdlib.h>
    
    typedef struct carta //definisco la struttura carta 
    {
    	char *seme;
    	int valore;
    	char *faccia;
    	
    }carta;
    
    int main ()
    {	int i;
    	int j;
    	int m;
    	int n;
    	carta mazzo[32];          //definisco l'array mazzo che contiene le mie 32 carte e le inizializzo una ad una
    	mazzo[0] = {"picche", 1 , "A"};
    	mazzo[1] = {"picche", 2 , "J"};
    	mazzo[2] = {"picche", 3 , "Q"};
    	mazzo[3] = {"picche", 4 , "K"};
    	mazzo[4] = {"picche", 1 , "A"};
    	mazzo[5] = {"picche", 2 , "J"};
    	mazzo[6] = {"picche", 3 , "Q"};
    	mazzo[7] = {"picche", 4 , "K"};
    	
    	mazzo[8]  = {"cuori", 1 , "A"};
    	mazzo[9]  = {"cuori", 2 , "J"};
    	mazzo[10] = {"cuori", 3 , "Q"};
    	mazzo[11] = {"cuori", 4 , "K"};
    	mazzo[12] = {"cuori", 1 , "A"};
    	mazzo[13] = {"cuori", 2 , "J"};
    	mazzo[14] = {"cuori", 3 , "Q"};
    	mazzo[15] = {"cuori", 4 , "K"};
    	
    	mazzo[16] = {"quadri", 1 , "A"};
    	mazzo[17] = {"quadri", 2 , "J"};
    	mazzo[18] = {"quadri", 3 , "Q"};
    	mazzo[19] = {"quadri", 4 , "K"};
    	mazzo[20] = {"quadri", 1 , "A"};
    	mazzo[21] = {"quadri", 2 , "J"};
    	mazzo[22] = {"quadri", 3 , "Q"};
    	mazzo[23] = {"quadri", 4 , "K"};
    	
    	mazzo[24] = {"fiori", 1 , "A"};
    	mazzo[25] = {"fiori", 2 , "J"};
    	mazzo[26] = {"fiori", 3 , "Q"};
    	mazzo[27] = {"fiori", 4 , "K"};
    	mazzo[28] = {"fiori", 1 , "A"};
    	mazzo[29] = {"fiori", 2 , "J"};
    	mazzo[30] = {"fiori", 3 , "Q"};
    	mazzo[31] = {"fiori", 4 , "K"};
    	
    	carta tavolo[4][8];
    	for(i=0;i<4;i++)
    	{
    		for(j=0;j<8;j++)
    		{
    		tavolo[i][j]=0;
    		}
    	}
    	
    	for(i=0;i<32;i++)
    	{
    		m=rand()%4+1;
    		n=rand()%8+1;
    		if(tavolo[m][n]==0)
    		{
    			mazzo[i]=tavolo[m][n]
    		}
    	}
    	
    	for(i=0;i<4;i++)
    	{
    		for(j=0;j<8;j++)
    		{
    			printf("%d", tavolo[i][j]);
    		}
    	} 
  • Re: Matrici dinamiche e locazioni di memoria

    oregon ha scritto:


    Semplicemente potresti scandire tutti gli elementi della matrice (scegliendo a caso riga e colonna) e assegnare a questi un valore compreso tra 0 e 31.

    La matrice di interi la inizializzi tutta con -1 in ogni elemento.
    Un ciclo esterno da 0 a 31 ... scegli riga e colonna a caso ...
    ...se l'elemento scelto è -1 gli assegni il valore del contatore e passi al prossimo, oppure generi altra riga e colonna
    Non ho seguito la discussione in modo approfondito, ma non mi sembra un approccio molto "intelligente".
    Sarebbe molto meglio partire dal mazzo ordinato per poi "mischiarlo".
  • Re: Matrici dinamiche e locazioni di memoria

    Non è questione di intelligenza Nippolo ... lui vuole una matrice 4x8 e gli dò una matrice 4x8.

    Magari il mazzo lo vuole lasciare ordinato. Affari suoi.
Devi accedere o registrarti per scrivere nel forum
31 risposte