Matrici dinamiche e locazioni di memoria

di il
31 risposte

31 Risposte - Pagina 2

  • Re: Matrici dinamiche e locazioni di memoria

    Allora perchè parlavi di "scegliere a caso riga e colonna"?!
  • Re: Matrici dinamiche e locazioni di memoria

    E tu perché vuoi mischiare il mazzo?

    Non riesci a proporre la tua soluzione dal tuo punto di vista senza r... le sc... o misurare l'intelligenza degli altri?
  • Re: Matrici dinamiche e locazioni di memoria

    oregon ha scritto:


    E tu perché vuoi mischiare il mazzo?
    Guarda che anche la tua procedura porta ad avere un "mazzo mischiato"... la differenza sta nel fatto che con il tuo metodo rischi di sorteggiare righe e colonne ipoteticamente anche all'infinito, invece partendo da una generica configurazione del mazzo ed utilizzando un algoritmo di mescolamento efficiente, otterrai lo stesso risultato, ma con un numero di passaggi ben definiti, ossia dim-1 scambi (dove dim è la dimensione del mazzo).

    oregon ha scritto:


    Non riesci a proporre la tua soluzione dal tuo punto di vista senza r... le sc... o misurare l'intelligenza degli altri?
    In effetti mi risulta difficile!
    Scherzi a parte, non mi sembra il caso di scomodare il relativismo quando ti viene mossa un'obiezione basata su presupposti oggettivi.
  • Re: Matrici dinamiche e locazioni di memoria

    Nippolo ha scritto:


    ...
    Io non mischio il mazzo (ovvero il vettore) orognale perché non so se lo posso fare, non so se l'esercizio lo consente, non so se il professore gli ha dato indicazioni in merito. Mi limito a dare un suggerimento a fare quello che chiede l'op.

    L'inconsistenza pratica della questione del "potenziale ciclo infinito" su 32 elementi da scegliere con riga e colonna è evidente a tutti.
    E comunque è una base di partenza perché l'op possa migliorare il codice, non perché tu possa dare dell'intelligente "più" o "meno" agli altri utenti.
    In effetti mi risulta difficile!
    Scherzi a parte, non mi sembra il caso di scomodare il relativismo quando ti viene mossa un'obiezione basata su presupposti oggettivi.
    Lo so che ti risulta difficile e non scherzi, dipende forse dal tuo ego .... ? Scherzo ...

    Comunque, ti rimetto tra gli ignorati ... ti avevo improvvidamente rimesso tra quelli da leggere e me ne pento.

    (OT chiuso per me)
  • Re: Matrici dinamiche e locazioni di memoria

    oregon ha scritto:


    Io non mischio il mazzo (ovvero il vettore) orognale perché non so se lo posso fare, non so se l'esercizio lo consente, non so se il professore gli ha dato indicazioni in merito. Mi limito a dare un suggerimento a fare quello che chiede l'op.
    Nel caso in cui non si voglia modificare l'array originale mi sembra ovvio che bisogna utilizzare un secondo "contenitore", che andrà poi inizializzato prima di poter applicare l'algoritmo di mescolamento.

    oregon ha scritto:


    L'inconsistenza pratica della questione del "potenziale ciclo infinito" su 32 elementi da scegliere con riga e colonna è evidente a tutti.
    Infatti ho utilizzato il termine "ipoteticamente" e in ogni caso lo scopo era quello di sottolineare che sarebbe da preferire un approccio deterministico lì dove possibile.

    oregon ha scritto:


    E comunque è una base di partenza perché l'op possa migliorare il codice, non perché tu possa dare dell'intelligente "più" o "meno" agli altri utenti.
    Se rileggi il post "incriminato" ti renderai conto che parlavo di "approccio non molto intelligente", se poi abusi della proprietà transitiva per mettermi in bocca cose che non ho detto è un'altra questione...

    oregon ha scritto:


    Lo so che ti risulta difficile e non scherzi, dipende forse dal tuo ego .... ? Scherzo ...

    Comunque, ti rimetto tra gli ignorati ... ti avevo improvvidamente rimesso tra quelli da leggere e me ne pento.

    (OT chiuso per me)
    Sinceramente mi sembra un atteggiamento inutilmente melodrammatico!
  • Re: Matrici dinamiche e locazioni di memoria

    Temo di condividere con Oregon
  • Re: Matrici dinamiche e locazioni di memoria

    Signori premettendo che non volevo si scatenasse una tale polemica, e mi dispiace vedere che magari per colpa mia si è arrivati ad una diatriba volevo avvisarvi che sono riuscito a proseguire con il codice.
    sono riuscito ad ottenere la mia matrice 4x8 con le carte disposte casualmente e a visualizzare solo l'ultima riga.
    dentro le mie struct ho inserito il parametro status che fa corrispondere all'int=1 la visualizzazione della carta e all'int=0 la visualizzazione di "?";
    adesso la mia idea era quella di creare 8 puntatori che puntassero alle 8 carte finali delle rispettive colonne della mia matrice e prevederne 2 in più che mi permettano di fare i confronti fra 2 carte specifiche indicando le colonne che si vogliono confrontare, qualora i confronti risultino veri eliminare le ultime 2 carte, riscrivere la matrice con le carte rimanenti e facendo salire i rispettivi puntatori alle carte subito più in alto, la mia idea era quella di utilizzare i puntatori per effettuare il cambio di status da 0 ad 1 alle mie carte permettendo di visualizzare quelle sopra solo qualora venissero eliminate le carte sotto di esse. qualcuno saprebbe indirizzarmi sul modo più efficiente per effettuare questa operazione?
    possibilmente senza generare altre sterili critiche! vi ringrazio comunque di cuore.



    #include <stdio.h>
    #include <time.h> 
    #include <stdlib.h>
    #include <string.h>
    
    typedef struct carta //definisco la struttura carta 
    {
    	char *seme;
    	int valore;
    	char *faccia;
    	int isVuota;
    	int status;
    	
    }carta;
    
    int main ()
    {	int i;
    	int j;
    	int m;
    	int n;
    	int primacarta;
    	int secondacarta;
    	carta mazzo[32];          //definisco l'array mazzo che contiene le mie 32 carte e le inizializzo una ad una
    
    	srand(time(NULL));		 //tengo conto del tempo di avvio del programma
    
    	mazzo[0] = {"\u2663", 1 , "A",0, 0};
    	mazzo[1] = {"\u2663", 2 , "J",0, 0};
    	mazzo[2] = {"\u2663", 3 , "Q",0, 0};
    	mazzo[3] = {"\u2663", 4 , "K",0, 0};
    	mazzo[4] = {"\u2663", 1 , "A",0, 0};
    	mazzo[5] = {"\u2663", 2 , "J",0, 0};
    	mazzo[6] = {"\u2663", 3 , "Q",0, 0};
    	mazzo[7] = {"\u2663", 4 , "K",0, 0};
    	
    	mazzo[8]  = {"\u2665", 1 , "A",0, 0};
    	mazzo[9]  = {"\u2665", 2 , "J",0, 0};
    	mazzo[10] = {"\u2665", 3 , "Q",0, 0};
    	mazzo[11] = {"\u2665", 4 , "K",0, 0};
    	mazzo[12] = {"\u2665", 1 , "A",0, 0};
    	mazzo[13] = {"\u2665", 2 , "J",0, 0};
    	mazzo[14] = {"\u2665", 3 , "Q",0, 0};
    	mazzo[15] = {"\u2665", 4 , "K",0, 0};
    	
    	mazzo[16] = {"\u2666", 1 , "A",0, 0};
    	mazzo[17] = {"\u2666", 2 , "J",0, 0};
    	mazzo[18] = {"\u2666", 3 , "Q",0, 0};
    	mazzo[19] = {"\u2666", 4 , "K",0, 0};
    	mazzo[20] = {"\u2666", 1 , "A",0, 0};
    	mazzo[21] = {"\u2666", 2 , "J",0, 0};
    	mazzo[22] = {"\u2666", 3 , "Q",0, 0};
    	mazzo[23] = {"\u2666", 4 , "K",0, 0};
    	
    	mazzo[24] = {"\u2660", 1 , "A",0, 0};
    	mazzo[25] = {"\u2660", 2 , "J",0, 0};
    	mazzo[26] = {"\u2660", 3 , "Q",0, 0};
    	mazzo[27] = {"\u2660", 4 , "K",0, 0};
    	mazzo[28] = {"\u2660", 1 , "A",0, 0};
    	mazzo[29] = {"\u2660", 2 , "J",0, 0};
    	mazzo[30] = {"\u2660", 3 , "Q",0, 0};
    	mazzo[31] = {"\u2660", 4 , "K",0, 0};
    
    
    	
    	carta tavolo[4][8]; //effettuo il riempimento della matrice inserendo stocasticamente le carte (tenendo conto che le celle non siano già riempite da altre carte)
    	for(i=0;i<4;i++)
    	{
    		for(j=0;j<8;j++)
    		{
    		tavolo[i][j].isVuota=1;
    		}
    	}
    	
    	i=0;
    	
    	while(i < 32)
    	{
    		m=rand()%4;
    		n=rand()%8;
    		if(tavolo[m][n].isVuota == 1 )
    		{
    			tavolo[m][n]=mazzo[i];
    			mazzo[i].isVuota=1;
    			i = i+1;
    		}
    	}
    		for(i=0;i<4;i++)
    	{
    		for(j=0;j<8;j++)
    		{	
    			if(i==3) //setto solamente le carte dell'ultima riga ad 1 in modo che vengano visualizzate 
    			{
    				tavolo[i][j].status=1;
    			}
    		}
    	}
    		for(int x = 0 ; x < 4 ; x++) 	//stampo il tavolo da gioco 
    		{
            printf("|");
             for(int y = 0 ; y < 8 ; y++)
    		{	
    			if(tavolo[x][y].status==0)
    			printf("?     ", tavolo[x][y].seme, tavolo[x][y].faccia);
    			else if(tavolo[x][y].status==1)
        		printf("%s %s   ", tavolo[x][y].seme, tavolo[x][y].faccia);
            }
            printf("|\n");
        }
     
    }
  • Re: Matrici dinamiche e locazioni di memoria

    Ma ha un nome questo solitario? In cosa consiste precisamente questo gioco di carte?

    P.S.
    Quali sarebbero le "sterili critiche"? Hai capito cosa intendo quando dico che un approccio deterministico è da preferire laddove possibile?
  • Re: Matrici dinamiche e locazioni di memoria

    Il tipo di solitario si chiama CORTE, l'obbiettivo è rimuovere tutte le carte dal tavolo da gioco accoppiando le figure uguali indipendentemente dal seme, perdonami se non l'ho specificato prima ma oregon era stato il primo a rispondere e aveva già seguito il mio precedente topic.
    l'intento sarebbe quello di avere delle scanf che mi permettano di confrontare le carte e qualora risultino di ugual valore rimuoverle fino a rimuovere tutte e carte (pena sconfitta) man mano che le ultime carte delle colonne vengono rimosse quelle subito sopra vengono rivelate fino alla fine di tutte le carte.

    per sterili critiche mi riferisco a modi di confrontarsi un pò sgarbati come "devi stare qua a rompere le scatole" della pagina di discussione precedente
  • Re: Matrici dinamiche e locazioni di memoria

    In pratica hai 8 pile di 4 carte di cui l'ultima è scoperta e bisogna rimuovere le coppie con la stessa figura tra le carte scoperte, giusto?

    Come avviene la scelta delle carte da confrontare? In modo automatico oppure deve essere l'utente ad indicarle?

    In ogni caso secondo me ti stai complicando inutilmente la vita, infatti oltre alla matrice 4x8 ti basta utilizzare un array di 8 interi inizializzato a 4, che indica l'altezza delle 8 pile. Quando una coppia di carte viene "rimossa", semplicemente andrai a diminuire di 1 l'altezza delle corrispondenti pile.
  • Re: Matrici dinamiche e locazioni di memoria

    Si è tutto esatto, scrivendo il programma ieri sera sono arrivato alla stessa conclusione che mi hai appena proposto, ora stavo rimettendomi a lavoro e stavo cercando di capire come fare in maniera corretta.
    la scelta delle carte avviene tramite scanf del giocatore, pensavo di fare immettere ad esso le colonne relative alla carta che vuole selezionare facendo in modo che possa venir selezionata solo la carta in pozione 3 0 3 1 3 2 3 3 ecc ecc e ogni volta che 2 carte di una cella vengono trovate uguali diminuire il valore della riga in modo che salga, penso che grosso modo sia la stessa idea che hai avuto tu no?
  • Re: Matrici dinamiche e locazioni di memoria

    Per ora ho settato il programma in modo che lo status delle carte all'ultima riga sia settato ad 1 in modo che sia visibile, per la "cancellazione" delle carte pensavo magari di creare un altro status che una volta settato rendesse invisibile la carta in questione, in questo modo non dovrei avere troppi problemi e poichè l'utente dovrebbe poter tecnicamente indicare solo le carte che ha levato dovrebbe filare tutto liscio
  • Re: Matrici dinamiche e locazioni di memoria

    Concettualmente in soldoni avevo pensato ad una cosa del genere, ma sicuramente sarà un obbrobrio sintattico quindi perdonatemi in anticipò.
    printf("scegli la prima carta per favore!");
            scanf("%d", &j);
            
            printf("scegli la seconda carta per favore!");
            scanf("%d", &g);
            
            if(tavolo[i][j].valore==tavolo[i][g].valore)
            {
             tavolo[i][j].status=0;
             tavolo[i][g].status=0;
             tavolo[i--][j].status=1;
             tavolo[i--][g].status=1;
  • Re: Matrici dinamiche e locazioni di memoria

    Guarda che se utilizzi un array per l'altezza "attuale" delle pile non c'è bisogno di utilizzare il membro status.

    Inoltre volendo potresti tranquillamente fare a meno delle struct, basta infatti una matrice m di interi (che contiene i valori da 0 a 31) da cui ottieni il seme della generica carta come
    m[i][j] / 8
    e il valore della stessa come
    m[i][j] % 4
  • Re: Matrici dinamiche e locazioni di memoria

    Pensavo che visto le varie componenti delle carte che bisognava visualizzare fosse più pratico usare le struct, vorrei meglio capire cosa intendi per utilizzare questo array di interi per tenere conto delle colonne
Devi accedere o registrarti per scrivere nel forum
31 risposte