Showing posts with label Draw Progress Bar using C Program. Show all posts
Showing posts with label Draw Progress Bar using C Program. Show all posts

Sunday, December 13, 2015

Progress Bar with Execution time in C Program

Program #31

Description:
System will randomly generates unique (x,y) co-ordinates and in the front user can see the Progress Bar and Execution time.

/*
 Make 5 dots randomly in different (x,y) positions in the Screen
 Also Program will dynamically show the progress using Progress Bar Logic
 using C Program
*/

#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<time.h>
/* Defined constants */
#define MAXDOTS 5;
#define ASCII_POSITION  122;
#define PROGRESS_ROW     13
#define PROGRESS_COLUMN  28

/* !Important!
This Program defines the Progress Bar ASCII Positions as
79, 80, 81 and 122
79  - illusion Progress Bar
122 - Completion Progress Bar
*/

/* Global variable declaration */
int row=1, col=1, rowTrack[5], colTrack[5];

/* Global function declaration */
char getAscii(int);
int main(){

  /* Local variable declaration */
  int counter=0, dupCheck=0, maxDots;
  char asciiChar;
  clock_t startTime, stopTime;

  /* Function Prototype declaration */
  void getX();
  void getY();
  int duplicateCheck(int, int);
  void printCoOrdinates();
  void initialMessage();
  void drawProgressBar(int);
  void percentCompleted();
  void illusionProgressBar();
  void printExecutionTime(clock_t);

  /* Clear the Screen */
  clrscr();

  /* Start Execution Time */
  startTime = clock();

  //printf("Start Time %f",startTime);
  /* Print Initial Message to the User */
  initialMessage();

  /* Print illusion Progress Bar */
  illusionProgressBar();

  /* Indefinite loop */
  for (;!kbhit(); ){

    /* Randomize */
    randomize();

    /* get a next random (x,y) position */
    getX();
    getY();

    /* Initial value to Duplicate check */
    dupCheck = 0;

    /* Track Positions, avoid duplicate co-ordinates */
    if ( !duplicateCheck(row, col) ){

      /* no duplicate matched */
      dupCheck = 1;
    }
    if (dupCheck == 1){

      /* Sets current position to Positioning Array */
      rowTrack[counter] = row;
      colTrack[counter] = col;

      /* Increase DOT counter */
      counter++;
    }

    /* Draw Progress Bar about the Processing */
    drawProgressBar(counter);

    /* Print Percentage Completed */
    percentCompleted(counter);
    if (dupCheck == 1){

      /* Move Cursor to random position */
      gotoxy(col, row);
      printf("*");
    }
    maxDots = MAXDOTS;

    /* program ends, once counter reaches MAXDOTS */
    if (counter==maxDots){

      /* Print Dynamic Co-Ordinates */
      printCoOrdinates();
      break;
    }

     /* Display Execution time */
     printExecutionTime(startTime);
  }
  getch();
  return 1;
}

/* Print Execution Time */
void printExecutionTime(clock_t startTime){
   double execTim;
   int finalSec, color;

   clock_t stopTime = clock();

   /* Convert Milliseconds into Seconds, for user friendly */
   execTim =  ((double)(stopTime-startTime))/CLOCKS_PER_SEC;
   finalSec = (int)execTim;

   gotoxy(30, 10);

   /*  print execution message */
   printf("Execution Time: %d (secs)",finalSec);
}


/* Print illusion Progress Bar, for User Friendly ;) */
void illusionProgressBar(){
 int i, columnPos, rowPos, dynamicProgress;
 char asciiVal;


 /* get Default Row, Column Position */
  columnPos = PROGRESS_COLUMN;
  rowPos    = PROGRESS_ROW;


  /* Dynamic Progress Bar length using Completion % */
  dynamicProgress = 25;


  /* Get Ascii character */
  asciiVal = getAscii(79);


  /* default progress bar position */
  for(i=0; i<dynamicProgress; i++){
   gotoxy(columnPos++, rowPos);
   printf("%c",asciiVal);


   /* Add delay to draw illusion progress bar, smoothly */
   delay(10);
  }

  /* Delay after illusion progress Bar */
  delay(300);
}


/* Print Percentage Completion */
void percentCompleted(int completion){
 int columnPos, rowPos, dynamicProgress;

 /* get Default Row, Column Position */
  columnPos = PROGRESS_COLUMN + 27;
  rowPos    = PROGRESS_ROW;

  /* Dynamic Progress Bar length using Completion % */
  dynamicProgress = completion * 20;

  /* Positioning % completion */
  gotoxy(columnPos, rowPos);
  printf("%d% Completed", dynamicProgress);
}

/* Draw Progress Bar to show Current Completion status to the User */
void drawProgressBar(int completion){
  int i, columnPos, rowPos, dynamicProgress;
  char asciiVal;


  /* get Default Row, Column Position */
  columnPos = PROGRESS_COLUMN;
  rowPos    = PROGRESS_ROW;


  /* Dynamic Progress Bar length using Completion % */
  dynamicProgress = completion * 5;


  /* Get Ascii character */
  asciiVal = getAscii(0);


  /* default progress bar position */
  gotoxy(columnPos, rowPos);

  for(i=0; i<dynamicProgress; i++){
   gotoxy(columnPos++, 13);
   printf("%c",asciiVal);


   /* Add delay to draw progress bar, smoothly */
   delay(100);
  }
}


/* Print Intial Message to the User */
void initialMessage(){
  char *plsMessage = "Please wait ... (Press ANY Key to Exit)";
  int i, columnPos=20;
  for(i=0; i<strlen(plsMessage); i++){
    gotoxy(columnPos++,12);
    printf("%c",plsMessage[i]);
    delay(50);
  }
}

/* Print dynamic co-ordinates */
void printCoOrdinates(){
  int i=0;
  /* Print the Result from 1st Row to 5th Row */
  for (; i<5; i++) {
    gotoxy(1,(i+1));
    printf("Dynamic Position #%d: (%d,%d)", (i+1), colTrack[i], rowTrack[i]);
  }
}

/*
  get Random x position
  'x' means column value
*/
void getX() {
  int x=1;
  x = random(80);

  /* randVal range from 0 to 99
   but we are expecting COLUMN value
   but it ranges from 1 to 80 only */
  if (x<1 || x>80){
    getX();
  }
  col = x;
}

/*
  get Random y position
  'y' means row value
*/
void getY() {
  int y=1;

  /* get random for Row */
  y = random(25);

  /* randVal range from 0 to 99
   but we are expecting ROW value
   but it ranges from 1 to 25 only */
  if (y<1 || y>25){
    getY();
  }
  row = y;
}

/* Duplicate Position Check */
int duplicateCheck(int r, int c) {
  int i;
  int rowMatch=0, colMatch=0;

  /* check Row Value match with Existing Value */
  for (i=0; i<5; i++) {
     if (rowTrack[i] == r){
       rowMatch = 1;
     }
  }

  /* check Column Value match with Existing Value */
  for (i=0; i<5; i++) {
     if (colTrack[i] == c){
       colMatch = 1;
     }
  }
  if (rowMatch == 0 && colMatch == 0) {
    return 0;
  }
  return 1;
}

/* Iterate the loop until expected ASCII character */
char getAscii(int overWritePos){
  int i, ascii_pos;

  /* Default position to the Ascii, !Important! */
  char cc='a';

  /* Assign default character position */
  ascii_pos = ASCII_POSITION;

  /* Overwrite Ascii Position, if function gets some position */
  if (overWritePos != 0){
    ascii_pos = overWritePos;
  }
  for (i=0; i<256; i++) {

    /*  Break the Loop, once we got the Character */
    if (i == ascii_pos)  break;
    cc = cc + 1;
  }
  return cc;
}




 

Draw Progress Bar using C Program

Program #29

Description:
Draw Progress Bar using C Program.  ASCII character plays to vital role to make it.
ASCII Positions of { 176, 177, 178 and 220} are good to make Progress Bar.

#include<stdio.h>
#include<stdlib.h>
#include<conio.h>

/* Define default postion to
Row, Column, Progress bar length and ASCII Position used to make progress Bar
*/
#define DEFAULT_COL 25;
#define DEFAULT_ROW 12;
#define BLOCKS_TO_PRINT 25;
#define ASCII_POSITION 220;

/* !Important:
  Character Position 176, 177, 178 and 220
  are good to make Progress Bar */

void main() {
   int i, col, row, blocks;
   char myAscii;

   /* prototype declaration */
   char getAscii();

   /* Clear the Screen */
   clrscr();

   /* Set default position to print */
   col     = DEFAULT_COL;
   row     = DEFAULT_ROW;
   blocks  = BLOCKS_TO_PRINT;

   /* get expected ASCII */
   myAscii = getAscii();

   for(i=1;i<blocks;i++) {
      gotoxy(col++, row);
      printf("%c", myAscii);
      delay(50);
   }

   getch();
}

/* Iterate the loop until expected ASCII character */
char getAscii(){
  int i, ascii_pos;
  char cc;

  /* Assign default character position */
  ascii_pos = ASCII_POSITION;
  for (i=0; i<256; i++) {

    /*  Break the Loop, once we got the Character */
    if (i == ascii_pos)  break;
    cc = cc + 1;
  }
  return cc;
}



 

Popular Posts