PI-ITBA / 2024_02

Consultas 2C 2024
3 stars 0 forks source link

2022 1C R1 (EJ 1) #42

Open johanna-park opened 3 days ago

johanna-park commented 3 days ago

Hola, quería consultar si el siguiente ejercicio estaba bien hecho.

void convertirATexto(unsigned long num, char s[]){
    int count=0;
    long aux=num, aux2; 
    static int m[][4]={{'A', 'B', 'C', 'A'}, 
                        {'D', 'E', 'F', 'D'},
                        {'G', 'H', 'I', 'G'},
                        {'J', 'K', 'L', 'J'},
                        {'M', 'N', 'O', 'M'},
                        {'P', 'Q', 'R', 'S'},
                        {'T', 'U', 'V', 'T'},
                        {'W', 'X', 'Y', 'Z'}};

    for(int i=0; num!=0; i++){ //ACA ESTARIA CONTANDO LA CANTIDAD DE DIGITOS QUE TIENE MI NUMERO
        num/=10;
        count++;
    }

    for(int j=0; (j=count); j--){ //recorro el numero tal cual
        aux2=(aux%10);
        aux/=10;

        if(aux2==0 || aux2==1) {
            s[j] = aux2; 
        } else {
            int pos = randInt(0,3);
            s[j]=m[aux2-2][pos];
        }
    }
    return ;
}

Cuando corro el test me salta el siguiente error: image

Pero ya agregué la biblioteca de random en el archivo.

Desde ya, muchas gracias.

marcelogarberoglio commented 3 days ago

Cuando resuelvan un ejercicio de parcial también deberían hacer una prueba, en general el enunciado incluye una. Te paso un programa para que lo pruebes Y la idea es que para cada número cada letra debería tener la misma probabilidad, y en tu caso hay letras que tienen más probabilidad que otras, por ejemplo la 'A', y para el caso de 0 y 1, debería asignar '0' o '1', que no es lo mismo que 0 o 1 El error te lo tira porque el linkeditor no encontró la función randInt, en la linkedición tenés que incluir el .c que tiene esa función

int
main(void)
{
    char s[10];
    srand(time(NULL));
    convertirATexto(0, s);
    assert(strcmp(s, "0") == 0);  // Única posible solución
    convertirATexto(1, s);
    assert(strcmp(s, "1") == 0);
    convertirATexto(101, s);
    assert(strcmp(s, "101") == 0);
    convertirATexto(10000, s);
    assert(strcmp(s, "10000") == 0);
    convertirATexto(23721, s);
    assert(strlen(s) == 5);
    assert(s[0]=='A' || s[0] == 'B' || s[0]=='C');
    assert(s[1]=='D' || s[1] == 'E' || s[1]=='F');
    assert(s[2]=='P' || s[2] == 'Q' || s[2]=='R' || s[2]=='S');
    assert(s[3]=='A' || s[3] == 'B' || s[3]=='C');
    assert(s[4]=='1');
    printf("OK!\n");
    return 0;
}