[2020][Julio][Problema 1] Proposición solución

[2020][Julio][Problema 1] Proposición solución

de Marco Andres Baldi Monaco -
Número de respuestas: 7

#include <stdio.h>

int main()
{
    unsigned char ROM[65536];
    for (unsigned char i = 0; i < 100; i++) {
        for (unsigned char j = 0; j < 100; j++) {
            unsigned char res = i + j;
            ROM[(i<<8) | j] = res;
            ROM[(j<<8) | i] = res;
            printf("----------------------- \n"); //las siguientes lineas sirven para verificar mediante el output
            printf("First number %d", i);
            printf("--Second number %d", j);
            printf("--Result %d", ROM[(i<<8) | j]);
            printf("\n-----------------------\n");
        }
    }
    return 0;
}//~~Fin~~

¿Alguien ve algo incorrecto que no me de cuenta? Pueden pegarlo en un compilador de C (use uno que es en linea) para ver que funciona. Si no hay nada raro, creo que está es una solución mucho mas limpia que la solución élficatm que usaron en el examen.

Saludos.


En respuesta a Marco Andres Baldi Monaco

Re: Proposición solucion P1 a Ex Jul 2020

de Marcelo Fabio Godoy De Olivera -
Tu solución esta mal, las entradas son BCD.

Saludos.
En respuesta a Marcelo Fabio Godoy De Olivera

Re: Proposición solucion P1 a Ex Jul 2020

de Marco Andres Baldi Monaco -
En respuesta a Marco Andres Baldi Monaco

Re: Proposición solucion P1 a Ex Jul 2020

de Marcelo Fabio Godoy De Olivera -
ROM[0001 0000 0001 0000] = 0010 0000 // 32 en tu programa.

Hasta donde yo se 10+10=20. La verdad que si, me sorprendiste.
En respuesta a Marcelo Fabio Godoy De Olivera

Re: Proposición solucion P1 a Ex Jul 2020

de Marco Andres Baldi Monaco -
Tenés razón, me llevaste a probar la solución del examen en sí misma y tampoco funciona:
unsigned char ROM[65536];
int main(){
unsigned char a = 0, bcdA = 0;
do{
unsigned char b = 0, bcdB = 0;
do{
ROM[bcdA<<8 | bcdB] = a + b;
b++;
bcdB++;
if(bcdB & 0xF > 9) bcdB += 6;
}while(b<100);
a++;
bcdA++;
if(bcdA & 0xF > 9) bcdA += 6;
}while(a<100);
printf("%d", ROM[4112]); //136
return 0;
}

¿Tenés alguna solución a mano tuya?
En respuesta a Marco Andres Baldi Monaco

Re: Proposición solucion P1 a Ex Jul 2020

de Marcelo Fabio Godoy De Olivera -
unsigned char ROM[65536];
int main(){
unsigned char a = 0, bcdA = 0;
do{
unsigned char b = 0, bcdB = 0;
do{
ROM[bcdA<<8 | bcdB] = a + b;

b++;
bcdB++;

if((bcdB & 0xF) > 9)
bcdB += 6;

}while(b<100);

a++;
bcdA++;

if((bcdA & 0xF) > 9)
bcdA += 6;

}while(a<100);

printf("%d", ROM[4112]); //20
return 0;
}

Tenes que ponerle paréntesis al &

saludos.
En respuesta a Marco Andres Baldi Monaco

Re: Proposición solucion P1 a Ex Jul 2020

de Guillermo Daniel Toyos Marfurt -
El error es que no estas utilizando representación BCD. Y el mismo "test" que construiste tampoco utiliza BCD. Tene en cuenta que la forma que esta escrito en la solución (uso del do, cuentas simples) es para facilitar la compilación a 8086.