Monday, July 1, 2019

Hello World in C

Program:
#include <stdio.h>

int main()
{
    printf("Hello World");

    return 0;
}

Output:
Hello World

Sunday, July 24, 2016

Pascal Triangle using C Program

Program #39

Description:
Print Pascal Triangle using C Program

/*
C Program full source code for Pascal Triangle
Pascal Triangle using C program
Coding for Pascal Triangle
*/

#include <stdio.h>
#include <stdlib.h>
/* Global Declaration */
int n, x[25][25];
int main()
{
    /* Get Input value from User i.e. N */
    printf("Please enter the N value:\n");
    scanf("%d", &n);
   
    /* Local Prototype Declaration */
    void validateInput(void);
    void intializeDefaultValues(void);
    void fillRemainingValues(void);
    void printResultMatrixFormat(void);
    void printResultTriangleFormat(void);
   
    validateInput();
    intializeDefaultValues();
    fillRemainingValues();
    printResultMatrixFormat();
    printResultTriangleFormat();
    return 0;
   
}

/*
Function #1
-----------
Validate the Input value i.e N
*/
void validateInput() {
    if (n<1 || n > 25) {
        printf("Input is beyond this program Assumption !! \nPlease enter input value {1 to 25}\n");
        exit(0);
    }
}

/*
Function #2
-----------
Initialize default values
*/
void intializeDefaultValues(){
    int i;
   
    /* Fill default values in Row wise */
    for (i=1; i<=n; i++){
        x[i][1] = 1;
    }
   
    /* Fill default values in Column wise */
    for (i=1; i<=n; i++){
        x[1][i] = 1;
    }
   
    /*
      Note:
      In above code, we can use single FOR LOOP to initialize the Row/Column wise values.
      Just making it simplified; It is your wish to simply this code further.
    */
}

/*
Function #3
-----------
Fill remaining values
*/
void fillRemainingValues(){
    int i, j;
   
    for(i=2; i<=n; i++){
       
        for (j=2; j<=n; j++){
          
           /*
           Skip the x[i][j] position Summation
              if (i-1) is zero (or)
              if (j-1) is zero
           */
          
           if ( ((i-1) == 0) || ((j-1) == 0)){
               break;
           } else {
          
               /* Summation */
               x[i][j] = x[i][j-1] + x[i-1][j];
           }
          
        }
    }
}

/*
Function #4
-----------
Print Result in Matrix Format
*/
void printResultMatrixFormat(){
    int i,j;
   
    printf("\n\n");
    for (i=1; i<=n+1; i++){
        for (j=1; j<=n-i+1; j++){
            printf("%5d",x[i][j]);
        }
       
        printf("\n");
    }
}

/*
Function #5
-----------
Print Result in Triangle Format
*/
void printResultTriangleFormat(){
    int i,j,k;
   
    printf("\n\n");
    for (i=1; i<=n; i++){
       
        /*
        Identify the Row position
        To Print the result in Diagonal wise!!
        */
        k=i;
        for (j=1; j<=i; j++){
            printf("%5d",x[k][j]);
           
            /* Move towards Diagonally Upside */
            k--;
           
            /* Stop the Movement if it reaches 1st Row */
            if(k==0){
                /* Move Cursor to Next Row */
                printf("\n");
               
                /* Move to Next Row */
                break;
            }
        }
       
        printf("\n");
    }
}

Sample Output using Input value as 5:



Sample Output using Input value as 10:



 

Sunday, May 29, 2016

Print * based on occurrence of a Number in given Input

Program #38


Print * based on occurrence of a Number in Given Input. 
Note: This program was asked in Interview.  May-2016.

Example:

1600514367

Output:

0: **
1: **
2:
3: *
4: *
5: *
6: **
7: *
8:
9:


Source Code:

#include <stdio.h>
#include <string.h>
int main()
{
    int i, j;
   
    /* declare a string variable to get Input */
    char str[20];
   
    /* static array of all number to compare */
    char staticArray[]= {'0', '1','2', '3', '4', '5', '6', '7', '8', '9'};
   
    /* Get Input String */
    printf("Please enter a numbers to Parse!\n");
    scanf("%s", str);
   
    /* Iterate the 1st loop 9 times (0 to 9) */
    for (i=0; i<= 9; i++){
       
        /* print every number from 1 to 9 */
        printf("%d: ", i);
       
        /* Iterate the 2nd loop upto string length of Input */
        for (j=0; j<strlen(str); j++){
           
            /* Compare both the characters
               Note: Both are characters, So we can directly compare it using ==
            */
            if (staticArray[i] == str[j]){
               
                /* Print the * */
                printf("*");
            }
        }
       
        /* Move cursor to next line */
        printf("\n");
       
    }
   
    return 0;
}

Thursday, December 31, 2015

Music Visualizer Simulation using C Program

Program #37

Description:
Music Visualization Simulation using C Program.  Dynamically it will pick the Themes.

/*
Music Visualizer Simulation using C Program
Music Visualization Dynamic Effect using C Program
Track Music using Simple Animation in C
Music Visualize Print using C Program
Vertical Progress Bar Print using C Program
*/
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>

/* Defined Constants */
#define TRACK_DELAY 15;

/* Global Function Prototype Declaration */
void clearColumnTrack();
void setColor();
void setTrackCharacter();
void printBaseLine();

/* Global Variables */
int trackChar, cols[25], rows[15];
int main(){

 /* Local Function Prototype Declaration */
 void printRandomTrack();
 void setColumnPosition();
 void setRowPosition();

 /* Clear the Screen */
 clrscr();

 /* randomize */
 randomize();

 /* Set Track Character */
 setTrackCharacter();

 /* Initialize Row & Column Positions */
 setColumnPosition();
 setRowPosition();
 for ( ; !kbhit() ; ){
   printBaseLine();
   printRandomTrack();
 }
 return 1;
}

/* Print Specific Track Dynamics - Specific COLUMN */
void printRandomTrack(){
 int i, row=20, randCols, randRows;
 int trackDelay;

 /* Set Track Speed i.e. Delay */
 trackDelay = TRACK_DELAY;

 /* Set a Random Track Color */
 setColor();

 /* Get a Column Randomly */
 randCols = random(20);

 /* Get a Row Randomly */
 randRows = random(10);

 /* Clear Column Track */
 clearColumnTrack(cols[randCols]);

 /* Print Track Bar */
 for (i=row; i<=rows[randRows]; i++){
   gotoxy(cols[randCols], row--);
   cprintf("%c", trackChar);
   /* Delay */
   delay( trackDelay );
 }
}

/* Clear Specific Column */
void clearColumnTrack(int column){
 int i, row=20;
 for (i=1;i<=10;i++){
   gotoxy(column, row--);
   printf(" ");
 }
}

/* Set a Track Color Randomly */
void setColor(){
  int color;
  color = random(15);
  /* Avoid BLACK color */
  if (color == 0) color = 1;
  /* Set Color */
  textcolor(color);
}

/* Get Random Track Character */
int getTrackCharacter(){
  int rands, trackChars[]={176, 177, 178, 179, 220, 223};
  randomize();
  /* Get a random Character */
  rands = random(6);
  /* Set Random Track Characters */
  return trackChars[rands];
}

/* Get Track Character */
void setTrackCharacter(){
  trackChar = getTrackCharacter();
}

/* Set Column Position */
void setColumnPosition(){
 int i, randCols=0;
 /* Column Array values */
  for (i=31; i<=51; i++){
    cols[randCols]=i;
    randCols++;
  }
}

/* Set Row Position */
void setRowPosition(){
 int i, randRows=0;
 /* Row Array values */
  for (i=20; i<=30; i++){
    rows[randRows]=i;
    randRows++;
  }
}

/* Draw Base Line */
void printBaseLine(){
  int i, colVal=26;
  for (i=1; i<=30; i++){
    gotoxy(colVal++, 20);
    printf("-");
  }
}






Sunday, December 27, 2015

15 Puzzle Game in C Program

Program #36

Description:
15 Puzzle Game with full source source.  By Default program will load 1-15 number in randomly in 4x4 matrix.  User can use Arrow Keys (Up, Left, Right and Down) to arrange the Number in a proper order starts from 1,1 to 4,3.  Once all the values are arranged then Program will ends. 

Help Option !!  Free Moves option introduced to help user when user stuck!! By pressing ENTER key system will arrange next SEQUENCE number and use can continue the game!!.  Free Move is present in Defined constant and By default as 3 free moves.

Invalid Arrow Option!!  Program will dynamically display the Current Keypress in a User friendly manner and if user press invalid Arrow Key it will display it accordingly !!

Move Count!!  Program will count the Total number of Valid Key press and it will show in a User friendly manner and in case Invalid Key pressed, system will not counter it!!  In case user uses Free Move then only the Move Counter will get incremented to 1.. That's not a Problem!!

/*
15 Puzzle Problem in C
15 Puzzle Game Online
15 Puzzle Game Source Code in C
15 Puzzle Game using C Program
15 Puzzle Simple Animation Program using C
*/
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <time.h>
#include <dos.h>

/* Defined Constants */
#define true  1;
#define false 0;
#define FREE_MOVES 3;

/* Global Variable Declaration */
int puzArr[5][5], row=1, column=1;
int curRow=4, curCol=4, totalMoves=0, freeMoves=0;

/* Global Prototype Declaration */
int getRandVal();
int setRandVal(int);
void clearScreen(int);
void draw15PuzzleBox();
void movePosition(int);
void swapValue(int,int);
void printPosition(char *);
int IsDone(void);

void main(){
  char inputKey, arrowKey;

  /* Local Prototype Declaration */
  int loadDefaultData();
  void resetRowColumn();
  void printTotalMoves();
  void printTotalFREEMoves();
  int doFREEMove();

  /* Clear the Screen */
  clrscr();

  /* Randomize */
  randomize();

  /* Set Free Moves */
  freeMoves = FREE_MOVES;

  /* Load Default Data */
  gotoxy(1,1);
  printf("Please wait.. Loading Data !!");
  loadDefaultData();

  /* Print Loaded Data */
  draw15PuzzleBox();
  /* Detect Arrow Keys in C Program
     Press ESCAPE - 27
     Press ENTER  - 13
     Get out from the Indefinite loop
  */
  while ( (inputKey = getch()) != 27){

    /* Set Default Text color as WHITE */
    textcolor(15);
    clrscr();

    /* Find Arrow Key or not */
    if (inputKey == '\0'){

      /* Extract actual Arrow Key */
      arrowKey = getch();
      switch(arrowKey){
 case 72:
   movePosition(72);
   draw15PuzzleBox();
   printTotalMoves();
   printTotalFREEMoves();
   break;

 case 80:
   movePosition(80);
   draw15PuzzleBox();
   printTotalMoves();
   printTotalFREEMoves();
   break;

 case 75:
   movePosition(75);
   draw15PuzzleBox();
   printTotalMoves();
   printTotalFREEMoves();
   break;

 case 77:
   movePosition(77);
   draw15PuzzleBox();
   printTotalMoves();
   printTotalFREEMoves();
   break;

      }
    } else if (inputKey == 13){
      //printf("Enter key pressed..");
      clrscr();
      if (freeMoves > 0){
 doFREEMove();

 /* Increment Moves */
 totalMoves++;
 draw15PuzzleBox();
 printTotalMoves();
 printTotalFREEMoves();
      } else {
 draw15PuzzleBox();
 printTotalMoves();
 printTotalFREEMoves();
      }
    }

    /* Check 15-Puzzle Completion */
    if (IsDone()) {

      /* Clear the Screen and Announce the Result */
      clrscr();

      /* Print Total Moves */
      printTotalMoves();
      gotoxy(35, 13);
      textcolor(2);
      printPosition("Great!!");
      getch();

      /* Smoothly End the Program Execution ;) */
      exit(1);
    }
  }
}
/* Assign Random Value */
int loadDefaultData(){
  int i=1, j=1, randVal;

  /* Custom Clear Screen
   0 - Row Wise Clear
   1 - Column Wise Clear
   */
  randVal = random(1);
  clearScreen(randVal);
  for (; i<=4;) {
    for (; j<=4;) {

      /* Draw Puzzle Box */
      draw15PuzzleBox();
      /* get Random value */
      randVal = getRandVal();
      if ( setRandVal(randVal) ){

 /* Set the Next Value */
 puzArr[i][j] = randVal;

 /* Increment next Column */
 column = j;
 j++;

 /* Check Is all 15 values set */
 if (i==4 && j==4) {

   /* Set Zero to Final Position */
   puzArr[i][j] = 0;
   movePosition(0);
   return 1;
 }
      }
    }

    /* increment to Next Row */
    row = i;
    i++;

    /* Re-initialize the Column value */
    j=1;
  }

  /* Normal Data Load Completion */
  return 1;
}

/* Get a Random Number from 1 to 15 */
int getRandVal(){
  int i, randVal;
  int dataArr[15];
  for (i=0; i<15; i++){
    dataArr[i] = i+1;
  }
  randVal = random(15);
  randVal = dataArr[randVal];
  return randVal;
}

/* Check and Set a Random Value to next EMPTY position */
int setRandVal(int checkVal){
   int i, j;
   for (i=1; i<=4; i++){
     for (j=1; j<=4; j++) {

 /* Is this value already present and Allocated */
 if (puzArr[i][j] == checkVal) {
   return false;
 }
     }
   }

   /* Yes, We got a next Rand value for Next position */
   return true;
}

/* Draw the Current Data */
void draw15PuzzleBox() {
  int i, j, charPos=177, row=3;
  //int charSmile=2;

  /* Make Position to Draw the 15-Puzzle Box */
  gotoxy(3, row++);
  for (i=1; i<=20;i++) printf("%c",charPos);
  gotoxy(3, row);
  printf("%c", charPos);
  gotoxy(4, row++);
  for (i=1; i<=18;i++) printf(" ");
  printf("%c", charPos);

  for(i=1; i<=4; i++){
    gotoxy(3, row++);
    printf("%c", charPos);
    for(j=1; j<=4; j++){
      if (puzArr[i][j]){
 printf("%4d", puzArr[i][j]);
      } else {

 //printf("%4c",charSmile);
 printf("    ");
      }
    }
    printf("  %c", charPos);
  }
  gotoxy(3, row);
  printf("%c", charPos);
  gotoxy(4, row++);
  for (i=1; i<=18;i++) printf(" ");
  printf("%c", charPos);
  gotoxy(3, row++);
  for (i=1; i<=20;i++) printf("%c",charPos);

  /* Show Current Position Information */
  gotoxy(35, 13);
}

/* Clear the Screen */
void clearScreen(int rowOrColumn){
 int i, j;
 for(i=1; i<= 25; i++){
  for (j=1; j<=80; j++){

    /* Row Wise - 0 */
    if (rowOrColumn == 0){
 gotoxy(i, j);
    }

    /* Column Wise - 1 */
    else if (rowOrColumn == 1){
 gotoxy(j, i);
    }
    printf(" ");
  }
  delay(10);
 }

 /* Show Current Position Information */
  gotoxy(35, 13);
}

/* Reset Global Row & Column */
void resetRowColumn(){
  row    = 1;
  column = 1;
}

/* Move position */
void movePosition(int pos){
  int iRow, iCol;

  /* Keep Current Row & Column Positions for SWAP */
  iRow = curRow;
  iCol = curCol;

  /* Show Current Position Information */
  gotoxy(35, 13);
  if (pos == 0) {

    /* Set Color as LightGreen */
    textcolor(10);
    printPosition("READY ?");
  }

  /* Up - 72 */
  else if (pos == 72) {
    if (curRow<4) {
      curRow++;

      /* Ok, Do Swap */
      swapValue(iRow, iCol);

      /* Increment Total Move */
      totalMoves++;
      //printf("UP (%d,%d)             ", curRow, curCol);
      printPosition("  UP   ");
    } else {

      /* Set Text color as RED */
      textcolor(4);
      printPosition("INVALID");
    }

  }

  /* Down - 80 */
  else if (pos == 80) {
    if (curRow>1) {
      curRow--;

      /* Ok, Do Swap */
      swapValue(iRow, iCol);

      /* Increment Total Move */
      totalMoves++;
      printPosition(" DOWN  ");
    } else {

      /* Set Text color as RED */
      textcolor(4);
      printPosition("INVALID");
    }

  }

  /* Left - 75 */
  else if (pos == 75) {
    if (curCol<4) {
      curCol++;

      /* Ok, Do Swap */
      swapValue(iRow, iCol);

      /* Increment Total Move */
      totalMoves++;
      printPosition(" LEFT  ");
    } else {

      /* Set Text color as RED */
      textcolor(4);
      printPosition("INVALID");
    }

  }

  /* Right - 77 */
  else if (pos == 77) {
    if (curCol>1) {
      curCol--;

      /* Ok, Do Swap */
      swapValue(iRow, iCol);

      /* Increment Total Move */
      totalMoves++;
      printPosition(" RIGHT ");
    } else {

      /* Set Text color as RED */
      textcolor(4);
      printPosition("INVALID");
    }
  }
}

/* Swap the Value */
void swapValue(int prevRow, int prevCol){
  int prevValue, curValue;

  /* getCurrent Swap Value */
  prevValue = puzArr[prevRow][prevCol];
  curValue  = puzArr[curRow][curCol];

  /* Swap it, Simply !! */
  puzArr[prevRow][prevCol] = curValue;
  puzArr[curRow][curCol]  = prevValue;

  /* Draw Puzzle Box */
  draw15PuzzleBox();
}

/* Check 15-Puzzle Completion */
int IsDone(){
  int i, j, iSequence=1;
  for (i=1; i<=4; i++) {
    for (j=1; j<=4; j++) {
      if (puzArr[i][j] != iSequence) {
 return false;
      }

      /* Done, That's it!! */
      if (iSequence == 15){
 return true;
      }
      iSequence++;
    }
  }

  /* Yes, You have done the Magic !! */
  return true;
}

/* Print Total Moves */
void printTotalMoves(){
  int i, charPos=176, heart=3;
  gotoxy(38, 3);
  for (i=1; i<=18;i++) printf("%c",charPos);
  gotoxy(38, 4);
  printf("%c                %c",charPos, charPos);
  gotoxy(38, 5);
  printf("%c  T%ctal M%cves:  %c",charPos, heart, heart, charPos);
  gotoxy(38, 6);
  printf("%c     %4d       %c",charPos, totalMoves, charPos);
  gotoxy(38, 7);
  printf("%c                %c",charPos, charPos);
  gotoxy(38, 8);
  for (i=1; i<=18;i++) printf("%c",charPos);
}

/* Print Position in Text */
void printPosition(char *position){
  int i, charPos=176;
  gotoxy(38, 12);
  for (i=1; i<=18;i++) printf("%c",charPos);
  gotoxy(38, 13);
  printf("%c                %c",charPos, charPos);
  gotoxy(38, 14);
  cprintf("%c    %7s     %c",charPos, position, charPos);
  gotoxy(38, 15);
  printf("%c                %c",charPos, charPos);
  gotoxy(38, 16);
  for (i=1; i<=18;i++) printf("%c",charPos);
}

/* Total Free Moves */
void printTotalFREEMoves(){
  int i, row=14, charPos=176, smile=3;
  gotoxy(6, row++);
  for (i=1; i<=25;i++) printf("%c",charPos);
  gotoxy(6, row++);
  printf("%c                       %c",charPos, charPos);
  if (freeMoves > 0) {
    gotoxy(6, row++);
    printf("%c      Fr%c%c M%cves       %c",charPos, smile, smile, smile, charPos);
    gotoxy(6, row++);
    printf("%c%11d            %c",charPos, freeMoves, charPos);
  }
  if (freeMoves > 0) {
    gotoxy(6, row++);
    printf("%c      Press ENTER      %c",charPos, charPos);
    gotoxy(6, row++);
    printf("%c     Get FREE Move     %c",charPos, charPos);
  } else {
    gotoxy(6, row++);
    printf("%c     -NO FREE Move-    %c",charPos, charPos);
  }
  gotoxy(6, row++);
  printf("%c                       %c",charPos, charPos);
  gotoxy(6, row++);
  for (i=1; i<=25;i++) printf("%c",charPos);

}

/* Do FREE Move - Help When User Stuck!! */
int doFREEMove(){
  int i, j, k, l, iSequence=1, toSwap;
  for (i=1; i<=4; i++) {
    for (j=1; j<=4; j++) {
      if (puzArr[i][j] != iSequence) {

 /* get iSequence value's Row & Column */
 for (k=1; k<=4; k++){
   for (l=1; l<=4; l++) {
     if (puzArr[k][l] == iSequence){

       /* Do FREE Swap */
       toSwap = puzArr[i][j];
       puzArr[i][j]=iSequence;
       puzArr[k][l]=toSwap;
       freeMoves--;
       return true;
     }
   }
 }
      }
      iSequence++;
    }
  }

  /* Yes, You have done the Magic !! */
  return true;
}




 

Popular Posts