PI-ITBA / 2024_02

Consultas 2C 2024
4 stars 0 forks source link

TP6 E6 #21

Open Agustin-Pomares opened 1 month ago

Agustin-Pomares commented 1 month ago

Buenas. Este ejercicio pide, en resumidas cuentas, que crees una función que "mezcle" un array y lo devuelva. Mi código no genera ningún error o warning en compilación, pero cuando intento ejecutarlo, me tira "violación de segmento ('core' generado)". Adicionalmente, no estoy seguro de que mi código sea muy eficiente en el mezclado que digamos, así que cualquier consejo es agradecido. Sin más, paso mi código:

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

int
shuffleArray(int array[], int dim){
    int aux;
    int i=0;

    while(i<dim){
        aux = array[i];
        /*Elegir pos random entre i y dim, y luego intercambiar lugares*/
        int posicionElegida = (rand()/(dim-i))+i;
        array[i] = array[posicionElegida];
        array[posicionElegida] = aux;
        i++;
    }
}

/*PRUEBA*/

int
main(void){
    int array[]={1, 2, 3, 4, 5, 6};
    int dim = 6;
    shuffleArray(array, dim);
    for(int i=0; i<=dim; i++){
        printf("%i\t", array[i]);
    }
}
marcelogarberoglio commented 1 month ago

Revisá esta cuenta

int posicionElegida = (rand()/(dim-i))+i;

podés por ejemplo agregar un printf para ver qué valores toma. En clase vimos cómo hacer para tomar valores aleatorios en un rango