Ejemplo en Teorico de Memorias ROM

Ejemplo en Teorico de Memorias ROM

de Martin Pacheco -
Número de respuestas: 1
En el ejemplo de programa generador entre la página 3 y 4 del teorico, que calcula la mayoria, en el for que aparece adentro de esta manera for( j=0 ; j < 8 ; j++) no deberia ser j < 10? visto que la entrada es 10 bits. Seria 8 si la entrada fuese 8 bits.
Lo mismo con el if abajo, en lugar de if (unos > 4) seria if(unos > 5)?

Detalle minimo pero copiando el ejemplo me saltó la duda del código.
En respuesta a Martin Pacheco

Re: Ejemplo en Teorico de Memorias ROM

de Gustavo Brown -

Sobre tu primer punto, es correcto. La condición de parada del for debería ser j < 10.

Sobre tu segundo punto, queda definir si una palabra con 5 unos (y por lo tanto 5 ceros) tiene mayoría 1 o mayoría 0.

El caso del ejemplo supone que con 5 unos la mayoría es 1.

El programa quedaría entonces:

int rom[1024];

void genero_rom()
 { 
     int i, j, aux, unos; 
     for (i = 0; i < 1024; i++)
     {
       unos = 0;
       aux = i;
       for (j = 0; j < 10; j++) 
      {
           if (aux % 2 == 1)
               unos++;
           aux = aux / 2;
      }
      if (unos > 4)  // Aqui podría ser 5 si suponemos que una palabra con 5 unos tiene mayoría 0
          rom[i] = 1;
      else rom[i] = 0;
 }

Este programa se puede reescribir más compacto utilizando corrimientos y máscaras

int rom[1024];

void genero_rom()
 { 
     int i, j, unos; 
     for (i = 0; i < 1024; i++) 
     {
       unos = 0;        
       for (j = i; j > 0; j >>= 1
      { 
           if (j & 1)
               unos++; 
      } 
      if (unos > 4)  // Aqui podría ser 5 si suponemos que una palabra con 5 unos tiene mayoría 0
          rom[i] = 1; 
      else rom[i] = 0; 
 }


Saludos,
   Gustavo