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