2016-11-29 2 views
0

Код, который я создал, просто получает десятичное число от пользователя и преобразует его в двоичный. Я пытаюсь сделать двоичный счетчик от 0 до двоичного числа введенного десятичного числа. биты двоичного числа сохраняются в массиве, и каждый бит имеет свою собственную позицию. Я понимаю, что мне придется сделать двумерный массив, чтобы сделать это, но я не знаю, как и где это реализоватьДвоичный счетчик в C двумерный

#include <stdio.h> 
#include <math.h> 

int main(void){ 

    int binary,loop_number,i; 
    printf("Enter in your binary number :"); 
    scanf("%d", &binary); 

    //loop number calculates the number of bits of the binary number 
    loop_number = log2(binary)+1; 
    int binary_array[binary][loop_number]; 
    int newarray[binary][loop_number]; 

    for(int n=0;n<binary;n++) { 
     for(i=0;i<loop_number;i++) { 
      if(n==1){ 
       binary_array[n][i]=1; 
      } else if(n%2==0) { 
       binary_array[n][i]=0; 
      } else if(n==0) { 
       binary_array[n][i]=0; 
      } else { 
       binary_array[n][i]=1; 
      } 
     n = n/2; 
     } 

     //the binary array of bits is backwards here so im going to put the bits the correct way 

     for(int n=0;n<binary;n++) { 
      for(i = 0; i < loop_number; i++){ 
       newarray[n][i] = binary_array[n][loop_number-i-1]; 
      } 
     } 
    } 

    printf("\n\n"); 
    for(int n=0;n<binary;n++){ 
     for(i=0;i<loop_number;i++){ 
      printf("%d",newarray[n][i]); 
     } 
     printf("\n"); 
    } 
} 
+1

Хм, преобразование в двоичное? Зачем вам нужен двухмерный массив? Я думаю, что небольшая петля сделает что-то вроде этого: 'for (i = 0, бит = 1; бит <значение; бит << = 1, i ++) array [i] = value & bit? 1: 0;' – Holger

ответ

0

Ваш код очень трудно читать, у меня есть основные предложения по улучшению кода:

  1. Отменить код.
  2. Используйте больше пробелов между символами, например Написать для цикла таким образом for(n = 0; n < binary; n++) вместо for(n=0;n<binary;n++)
  3. Изначально GCC не компилировать код, потому что у вас есть две дополнительные фигурные скобки после двух последних для петель.
  4. gcc компилирует ваш код, только если мы добавим флаги -std = c99 и -lm. Первое заключается в том, что вы написали объявление индекса для циклов непосредственно в цикле. Второй один из-за функции log2 (чтобы выяснить, почему попробовать этот gcc will not properly include math.h)

проблема заключается в первом для двойной петли:

for(n = 0; n < binary; n++){ 
    for(i = 0; i < loop_number; i++){ 

     // Use a switch instead of a cascade of else-if 
     if(n==1){ 
      binary_array[n][i]=1; 
     } 
     else if(n%2==0){ 
      binary_array[n][i]=0; 
     } 
     else if(n==0){ 

      binary_array[n][i]= 0; 

     }else{ 
      binary_array[n][i]=1; 
     } 

     n = n/2; // Here we have an infinite loop because n is never equal to binary, at each iteration the n counter is    divided for 2 
    } 
} 

Таким образом, я не могу понять, что алгоритм вас хотят реализовать. Я думал, что это было так: dividedBy2

Вам не нужно использовать массив с двумя измерениями вместо того, чтобы использовать стек. Я написал свою собственную реализацию алгоритма, надеюсь, это может вам помочь. Я думаю, что этот код правильно реализует алгоритм, но если вы найдете некоторые ошибки, сообщите мне. http://pastebin.com/uC5zp2Va

Смежные вопросы