Monday, May 16, 2011

C > Small Programs sample source codes(Positional notation of numbers)


//Positional notation of numbers

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

#define PACKAGE "digits"

int number_of_digits(int x);
void print_help(void);

int main(int argc, char *argv[]) {
 int n;             /* input; the number to convert */
 short base;        /* input; base to which we will convert n */
 short rhdigit;     /* right-hand digit of n-prime */
 int power;         /* loop */

 if(argc != 3) {
  print_help();
  return 1;
 } else {
  sscanf(argv[1], "%d", &n);
  if(n < 1) {
   fprintf(stderr, "%s: Error: Number must be greater than 0.\n", PACKAGE);
   return 1;
  }

  sscanf(argv[2], "%hi", &base);
  if(base < 2 || base > 10) {
   fprintf(stderr, "%s: Error: Base is not in required range.", PACKAGE);
   return 1 ;
  }
 } /* else */

 printf("The number %d, is %d wide, ", n, number_of_digits(n));
 printf("and contains the numbers: ");

 /*
 // Generate digits of converted number, right to left.
 */
 for(power = 0; n != 0; power++) {
  rhdigit = n % base;         /* Isolate right-hand digit of n. */
  n /= base;                  /* then eliminate right-hand digit. */

  printf("%hi ", rhdigit);
 }

 printf("\n");
 return 0;
}

int number_of_digits(int x) {
 return x ? (int)(log10((double)(abs(x))))+1 : 1;
}

void print_help(void) {
 fprintf(stdout, "Usage  : %s [NUMBER] [BASE]\n", PACKAGE);
 fprintf(stdout, "Example: %s 4591 10\n", PACKAGE);
}