Copiare array in matrice C.

di il
11 risposte

Copiare array in matrice C.

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

  • Re: Copiare array in matrice C.

    Ma non ti puoi spiegare meglio? Quanto valgono RIG COL CAR ?
  • Re: Copiare array in matrice C.

    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?
  • Re: Copiare array in matrice C.

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

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

    non mescola ma perde dati.
  • Re: Copiare array in matrice C.

    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
  • Re: Copiare array in matrice C.

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

    Dovresti scambiare due elementi ma non lo fai. E poi quel ciclo non ha senso ...
  • Re: Copiare array in matrice C.

    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?
  • Re: Copiare array in matrice C.

    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
  • Re: Copiare array in matrice C.

    Ti ho già detto che quella linea e il ciclo non vanno. Pensa ad un altro algoritmo di mescolamento in cui scambi gli elementi.
  • Re: Copiare array in matrice C.

    @Bacco perché non hai continuato la discussione nell'altro topic col vecchio account?! Hai dimenticato le credenziali di accesso?
  • Re: Copiare array in matrice C.

    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
  • Re: Copiare array in matrice C.

    È 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