Copiare array in matrice C.

di Anonimizzato28929 il
11 risposte
Salve, avrei bisogno di un aiuto nel copiare un array (con valori mescolati) in una matrice.
(matrice ed array con stessa dimensione).
PROBLEMA: stampa solo l'ultimo valore dell'array e gli altri valori non si capisce da cosa derivino (NON SONO NUMERI CASUALI).

void mescolamento(int array[CAR])
{   
    int k;
    int num=CAR;
    srand((unsigned) time(NULL)); 
    while (num>1)
    {
        k=rand()%(num);
        
            for (; k<num; k++ ) 
            {
                array[k]=array[k+1];
            }
        num--;
    }
}

void trasferimento(int mvisualizzata[RIG][COL], int array[CAR])
{
	int i,j,k=0;
	mescolamento(array);
	for(i=0;i<RIG;i++)
	{
		for(j=0;j<COL;j++)
		{
			mvisualizzata[i][j]=array[k];
		    k++;
		}
	}
	
	for(i=0;i<RIG;i++)
	{
		for(j=0;j<COL;j++)
		{
			printf("%d ",mvisualizzata[i][j]);
		}
		printf("\n");
	}
}


int main()
{
	int array[CAR]={1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8};
	int mvisualizzata[RIG][COL];
	trasferimento(mvisualizzata,array);
	system("PAUSE");
	return 0;
}

11 Risposte

  • Ma non ti puoi spiegare meglio? Quanto valgono RIG COL CAR ?
  • Srand va chiamato una sola volta ad ogni esecuzione.

    Inoltre, oggettivamente, la funzione mescolamento è scritta molto male. Cosa succede quando k=num-1 secondo te?
  • La funzione mescolamento è da riscrivere. Oltre a quanto segnalato da Achille, la riga

    array[k]=array[k+1];

    non mescola ma perde dati.
  • oregon ha scritto:


    Ma non ti puoi spiegare meglio? Quanto valgono RIG COL CAR ?
    si, hai ragione
    RIG=righe della matrice=4
    COL=colonne della matrice=4
    CAR=dimensione dell'array=16
  • Come ti è stato detto il problema è la funzioen mescolamento.

    Dovresti scambiare due elementi ma non lo fai. E poi quel ciclo non ha senso ...
  • oregon ha scritto:


    La funzione mescolamento è da riscrivere. Oltre a quanto segnalato da Achille, la riga

    array[k]=array[k+1];

    non mescola ma perde dati.
    Come dovrei cambiarla?
  • oregon ha scritto:


    Come ti è stato detto il problema è la funzioen mescolamento.

    Dovresti scambiare due elementi ma non lo fai. E poi quel ciclo non ha senso ...
    Ho risolto il problema dei numeri casuali, ma adesso i valori dell'array vengono visualizzati ordinatamente
    
    
    void mescolamento(int array[CAR])
    {   
        int k;
        int num=CAR;
        srand((unsigned) time(NULL));
        num=rand()%(num);
            for (; k<num; k++ ) 
            {
                array[k]=array[k+1];
            }
    }
    

    Esecuzione:
    1 1 2 2
    3 3 4 4
    5 5 6 6
    7 7 8 8
  • Ti ho già detto che quella linea e il ciclo non vanno. Pensa ad un altro algoritmo di mescolamento in cui scambi gli elementi.
  • @Bacco perché non hai continuato la discussione nell'altro topic col vecchio account?! Hai dimenticato le credenziali di accesso?
  • Al di là del mescolamento, dovrebbe essere chiaro che non serve copiare un array in una matrice, è sufficiente usare l'uno o l'altra sulla stessa area di memoria

    Tipicamente caricare la matrice e poi mescolare un array rappresentato da un puntatore che 'casualmente' è l'indirizzo della matrice

    O fare viceversa, non cambia nulla

    Il concetto è che non serve copiare i dati
  • È vero la copia non serve a meno che non sia parte specifica del tuo esercizio...
Devi accedere o registrarti per scrivere nel forum
11 risposte