Informatică, întrebare adresată de Utilizator anonim, 9 ani în urmă

[LIMBAJUL C]
Care este greseala in codul urmator?
Dandu-se un vector ce reprezinta numerele naturale de la 0 la 255 (nu se citeste de la tastatura sau din fisier, el asa este initializat), se cere sa se afiseze pe ecran, pentru fiecare element al vectorului, valoarea sa in sistemul binar, dar obligatoriu in 8 cifre (ex: numarul 1 va fi reprezentat 00000001, numarul 2 va fi reprezentat 00000010, ....... numarul 255 va fi reprezentat 11111111).

Codul meu incepe sa afiseze corect pentru primele valori, dar pe ultimele le afiseaza gresit (pe 255 il afiseaza ca fiind 01111111 in loc de 11111111, pe 254 il afiseaza ca fiind 011111110 in loc de 11111110, si tot asa) astfel incat nu imi pot da seama de la ce numar sunt gresite, si nici care este greseala.
Codul este acesta:

#include
#include

void compute(unsigned int number) {
unsigned int i;
unsigned int aux[8];
for (i = 0; i < 8; i++) {
aux[i] = 0;
}
for (i = 7; i > 0; i--) {
aux[i] = number % 2;
number = number / 2;
}

for (i = 0; i < 8; i++) {
printf("%u", aux[i]);
}
printf("\n");
}

int main(int argc, char** argv) {
unsigned initialVector[256];
unsigned int i;
for (i = 0; i < 256; i++) {
initialVector[i] = i;
}

for (i = 0; i < 256; i++) {
compute(initialVector[i]);
}

return (EXIT_SUCCESS);
}

Anexe:

artur99: =))
artur99: ce headere-s acolo sus?
Utilizator anonim: stdio.h si stdlib.h puse automat de NetBeans
artur99: Încă mai ai nevoie? Eu plecasem :)))
artur99: Adică lăsasem tabul deschis :))
Utilizator anonim: Da
artur99: ok
artur99: Ok, solved it :D

Răspunsuri la întrebare

Răspuns de artur99
2
Aici, ar fi venit de la poziția 7 la poziția 0:
for (i = 7; i > 0; i--)

Dar la tine se face de la 7 la 1 :)

Daaar, oricum cu 0 nu ar fi mers din cauza instrucțiunii 2 din for, pentru că ar fi fost 0/2, care ar fi fost infinit și nu mai returna nimic :D Deci, ce trebuie să faci e să adaugi pe linia 14 codul ăsta:

aux[0] = number%2;



Utilizator anonim: Thanx bro
artur99: yw
Alte întrebări interesante