Sunday, September 30, 2012

Pointer's

You already know that pointer is most difficult topic in c and c++ languages here i will tell you what is pointer and how you can use pointer with arrays,functions and structures etc.

What is pointer :- Pointer is the user defined data type which can hold the address of simple data type like int,char,float and user define data type   like function,pointer etc. and derived data type like array,structure and union. pointer is denoted by *   eg :- int *x;

Before pointer we will discus what are simple variables like int,float and char etc. how simple variables are stored in computer memory.

Example :- int x =10;

                                                                   x
           10          
                                                                   0x5278

Suppose above box is block of computer memory.
Above fig. is showing that how 10 is stored in memory.
What is x?
What is 10?
What is 0x5278?
0x5278 is the address where 10 is stored and x is the name of address (or location) and 10 is the value of x or value at that address.

Pointer declaration  :- How pointer is declared ?
1. int *iptr;
2. char *cptr;
3. float *fptr;
Here iptr is a pointer variable which can hold the address of int type similarly cptr can hold the address of char type and fptr can hold float type.

How pointer is used :-
int x = 20;
int *iptr;
iptr = &x;

--In first statement simple variable is declared.
--In second statement pointer variable is declared.
--In third statement address of value 10 is assigned to iptr means now value of iptr is the address of the value 10 that is 0x5278.
                                                               
                                                                  x

           20            
                                                                  0x5278

                                                                  iptr
        0x5278       
                                                                  0x3678

0x3678 is the address where address of x is stored having name iptr.
Now how we will access the value of x by using iptr?
printf("%d\n",*iptr);
above statement will print the value of x means the output will be 10
Note :- int type pointer will store the address of only int type variable you can't store the address of float,char into int type pointer......
int x = 10;
float *fptr;
fptr = &x;
Third statement is wrong because x is an int type and fptr is a float type and you can't assign the address of int to float type pointer .
But if you want to do this then you will first typecast it.
Important fact about pointer :- 
                                    *&p = p;
 But &*p = p will not compile.
----------------------------------------------------------------------------------------------------------------------------------
Pointer with arrays :-

Array :- Array is a derived data type it is used  to store the homogeneous values and the main fact is arrays are used to allocate the contiguous memory.
Example :- int arr[10] = {10,20,30,40,50,60,70,80,90,100};
above statement will reserve the 20 bytes of contiguous memory. because int is of 2 bytes in 16 bit compiler.
array structure :-
assume the base address is 0x5270

                    arr         
   10       20       30       40      50      60      70      80      90      100   
                    0x5270
What is arr?
What is 0x5270?
What is 10,20,30------100;
0x5270 is the base address of the whole array and arr is the name given to the base address and 10,20-----100 are values of the arr. By using base address you can access the whole values of the arr 
if you will print the arr then it will print the base address
Example :-  printf("%p\n",arr);
output :- 0x5270
1. arr;
2. &arr;
3. arr[0];
Above three statements will give the same value that is the base address 0x5270.
Note :- you can't change the base address. You can't  perform addition, subtraction, multiplication and division with base address.
Example :- arr = arr + 1;
                   arr = arr - 1;
                   arr = arr * 2;
                   arr = arr / 5;
Above all statements are wrong because if you will change the base address then there is no way to access the previous values(elements) of array.

Note :- Array is a constant pointer You can't change the array's base address.

Access the whole array elements using a pointer variable :- 
Example:- 
Int *ptr;
Int arr[10] = {10,20,30,40,50,60,70,80,90,100};
ptr = &array[0];            //  assign base address of "arr" to "ptr"

Assume base address is 0x5270


                    arr
   10       20       30       40      50      60      70      80      90      100   
                    0x5270


                                                                    ptr
     0x5270     
                                                                    0x6488


Above Fig. shows how pointer variable "ptr" holds base address of an array "arr"
Now you can access the all elements of "arr" using pointer variable "ptr"  like
1. printf("%d",*(ptr+i));   or        //  "*" means "value at address"
2. printf("%d",ptr[i]);
Above both statements will print the all elements of array "arr"

----------------------------------------------------------------------------------------------------------------------------------
Pointer with functions :- 

Function :- Function is build of three things.
1. Function declaration.
2. Function call.
3. Function definition.
Example :- 
// parameterized function with return value.
#include<stdio.h>
int sum(int,int);           // Function declaration
void main()
{
         int x = 10;
         int y = 20;
         int c;
         c = sum(x,y);        //Function call
         printf("%d\n",c);
         return 0;
}
int sum(int a,int b)    // Function definition
{
          int z;
          z = a+b;
          return(z);      // Return statement
}
Output :- 30

Pointer with function :-
Using pointer we can pass the address of the variable
Example :-

#include<stdio.h>
int sum(int *,int *);       // pointer type parameters
void main()
{
         int x = 10;
         int y = 20;
         int c;
         c = sum(&x,&y);  // passing address of x and y
         printf("%d",c));
         return 0;
}
int sum(int *a,int *b)   // Now address of x and y is in a and b
{
          int z;
          z = (*a)+(*b);      //Adding "value at a" and "value at b".
          return(z);             //Returning sum of "value at a" and "value at b"
}

Note :- Only using pointer you can return more than one values.


Thursday, September 6, 2012

Pattern

Program to output below pattern?


1:  #include <stdio.h>  
2:  void main(void)  
3:   {  
4:       int i,j;  
5:       for(i = 1 ; i < 5 ; i++)   
6:       {  
7:            for(j = 1 ; j <= i ; j++)  
8:            {  
9:                  if((j % 2) == 0)   
10:                        printf("1 ");  
11:                  else  
12:                        printf("0 ");  
13:            }  
14:            printf("\n");  
15:       }  
16:  }   

Output:

 

Saturday, July 14, 2012

Pattern Diamond

Write a program to output Diamond?

1:  #include<stdio.h>  
2:  #define PARA 12  
3:  int main() {  
4:       int i,d;  
5:       i = (PARA/2);  
6:       d = (PARA/2);  
7:       int row,col;  
8:       for(row = 0 ; row <= (PARA/2) ; row++) {  
9:               for(col = 0 ; col <= PARA ; col++) {  
10:                        if(col == i || col == d) {  
11:                                 printf("*");  
12:                        }  
13:                        else {  
14:                                 printf(" ");  
15:                        }  
16:               }  
17:               i++;  
18:               d--;  
19:               printf("\n");  
20:       }  
21:       i = 1;  
22:       d = (PARA-1);  
23:       for(row = 0 ; row < (PARA/2) ; row++) {  
24:                for(col = 0 ; col <= PARA ; col++) {  
25:                      if(col == i || col == d) {  
26:                              printf("*");  
27:                      }  
28:                      else {  
29:                              printf(" ");  
30:                      }  
31:                }  
32:                i++;  
33:                d--;  
34:                printf("\n");  
35:       }  
36:  }  

Output:-









Note:- You can increase or decrease the size of diamond. For this just change the value of MACRO "PARA"
i.e #define PARA 12
But the value of PARA should be EVEN....

Friday, July 13, 2012

Pattern English Alphabet X

Write a Program to output this pattern English Alphabet X?

1:  #include<stdio.h>  
2:  int main() {  
3:     int x = 0,y = 5,row,col;  
4:     for(row = 0 ; row < 6 ; row++) {  
5:        for(col = 0 ; col < 6 ; col++) {  
6:          if(col == x || col == y) {  
7:             printf("*");  
8:          }  
9:          else {  
10:             printf(" ");  
11:          }  
12:        }  
13:        x++;  
14:        y--;  
15:        printf("\n");  
16:     }  
17:  }  

Output:-



Pattern English Alphabet Z

Write a Program to output this pattern English Alphabet Z?


                              
1:  #include<stdio.h>  
2:  int main() {  
3:    int x = 5,row,col;  
4:    for(row = 0 ; row < 6 ; row++) {  
5:        for(col = 0 ; col < 6 ; col++) {  
6:            if(row == 0 || row == 5) {  
7:                printf("* ");  
8:            }  
9:            else {  
10:                if(col == x) {  
11:                  printf("* ");  
12:                }  
13:                else {  
14:                  printf(" ");  
15:                }  
16:            }  
17:         }  
18:         x--;  
19:         printf("\n");  
20:     }  
21:  }  

Output:-



Thursday, July 12, 2012

Pattern Square

Write a program to output this pattern in C?



1:  #include<stdio.h>  
2:  int main() {  
3:       int col,row;  
4:       for(row = 0 ; row < 5 ; row++) {  
5:             for(col = 0 ; col < 5 ; col++) {  
6:                 if(row == 0 || row == 4) {  
7:                         printf("* ");  
8:                  }  
9:                  else {  
10:                        if(col == 0 || col == 4) {  
11:                            printf("* ");  
12:                         }  
13:                         else {  
14:                             printf(" ");  
15:                         }  
16:                  }  
17:             }  
18:             printf("\n");  
19:        }  
20:  }   

Output:-  






Note:- You can change the value of row and col to increase or decrease the size of pattern...  

Wednesday, July 4, 2012

Calculate CRC

Program to calculate CRC in C language.......

1:   #include<stdio.h>  
2:   #define MS 14  
3:  // MS Message Size in Bits  
4:  // DS Divisor Size in Bits  
5:  int main() {  
6:     int divisor4[50] = {1,0,0,1,1};  
7:     int divisor24[50] = {1,0,1,0,1,1,1,0,1,0,1,1,0,1,1,0,1,1,1,0,0,1,0,1,1 };  
8:     int message[150] = {1,1,0,0,0,1,1,0,1,0,1,1,0,1};  
9:     int msgcopy[150];  
10:     int divisor[50];  
11:     int i,j,DS;  
12:     printf("At sender side\n");  
13:     printf("Enter the CRC you want to use in Bits 4Bit,8Bit,16Bit,24Bit,32Bit\n");  
14:     scanf("%d",&DS);  
15:   // Checking the Size of the divisor in bits  
16:     if(DS == 4) {  
17:         for(i = 0 ; i < DS+1 ; i++) {  
18:               divisor[i] = divisor4[i];  
19:          }  
20:     }  
21:     else if(DS == 24) {  
22:          for(i = 0 ;i < DS+1 ; i++) {  
23:                divisor[i] = divisor24[i];  
24:           }  
25:     }  
26:    // Copying message to another array  
27:     for(i = 0 ; i < MS ; i++) {  
28:           msgcopy[i] = message[i];  
29:      }  
30:    // Appending zero's at the end of the message  
31:     for(i = MS ; i < MS+DS-1 ; i++) {  
32:           message[MS] = 0;  
33:      }  
34:    // Calculating CRC  
35:      i = 0;  
36:      while(i < MS) {  
37:         if(message[i] == 0) {  
38:            i++;  
39:         }  
40:         else {  
41:            for(j = 0 ; j < DS+1 ; j++) {  
42:                  message[i+j] = message[i+j]^divisor[j];  
43:               //  printf("message[%d+%d] = %d\n",i,j,message[i+j]);  
44:             }  
45:          }  
46:      }  
47:     //Appending CRC at the end of the message  
48:      printf("CRC is\n");  
49:      for(i = MS ; i < MS+DS ; i++) {  
50:              msgcopy[i] = message[i];  
51:              printf("msgcopy[%d] = %d\n",i,msgcopy[i]);  
52:      }  
53:     printf("Message after appending CRC at the end\n");  
54:     for(i = 0 ; i < MS+DS ; i++) {  
55:              printf("msgcopy[%d] = %d\n",i,msgcopy[i]);  
56:      }  
57:      for(i = 0 ; i < MS+DS ; i++) {  
58:              message[i] = msgcopy[i];  
59:      }  
60:    // Checking that CRC is correct or not  
61:     printf("At receiver end\nChecking that CRC is correct or not\n");  
62:     i = 0;  
63:     while(i < MS+DS) {  
64:             if(message[i] == 0) {  
65:               i++;  
66:             }  
67:             else {  
68:               for(j = 0 ; j < DS+1 ; j++) {  
69:                   message[i+j] = message[i+j]^divisor[j];  
70:                //  printf("message[%d+%d] = %d\n",i,j,message[i+j]);  
71:               }  
72:            }  
73:      }  
74:   // CRC, After appending CRC at the end of the message  
75:     printf("CRC after appending Original CRC at the end of the message\n");  
76:     for(i = MS ; i < MS+DS ; i++) {  
77:              printf("message[%d] = %d\n",i,message[i]);  
78:     }  
79:  }  
Output :-
1:  At sender side  
2:  Enter the CRC you want to use in Bits 4Bit,24Bit  
3:  4  
4:  CRC is  
5:  msgcopy[14] = 1  
6:  msgcopy[15] = 0  
7:  msgcopy[16] = 0  
8:  msgcopy[17] = 1  
9:  Message after appending CRC at the end  
10:  msgcopy[0] = 1  
11:  msgcopy[1] = 1  
12:  msgcopy[2] = 0  
13:  msgcopy[3] = 0  
14:  msgcopy[4] = 0  
15:  msgcopy[5] = 1  
16:  msgcopy[6] = 1  
17:  msgcopy[7] = 0  
18:  msgcopy[8] = 1  
19:  msgcopy[9] = 0  
20:  msgcopy[10] = 1  
21:  msgcopy[11] = 1  
22:  msgcopy[12] = 0  
23:  msgcopy[13] = 1  
24:  msgcopy[14] = 1  
25:  msgcopy[15] = 0  
26:  msgcopy[16] = 0  
27:  msgcopy[17] = 1  
28:  At receiver end  
29:  Checking that CRC is correct or not  
30:  CRC after appending Original CRC at the end of the message  
31:  message[14] = 0  
32:  message[15] = 0  
33:  message[16] = 0  
34:  message[17] = 0  

Note :- This is for 4 and 24 Bit polynomial if you want to calculate CRC for 8,16,32 and 64 Bits then this code requires some changes . Try it youself.........
This code is calculating CRC for 14 Bits long message, you can use it for another length but don not forget to change Macro definition i.e 

#define MS 14

Monday, June 25, 2012

Factorial using Recursion

Program to calculate Factorial using Recursion.

A
1: #include<stdio.h>  
2: int factorial(int);  
3: int main() {  
4:     int n,f;  
5:     printf("Enter number you want ot calculate factorial\n");  
6:     scanf("%d",&n);  
7:     f = factorial(n);  
8:     printf("Factorial of %d is = %d",n,f);  
9:     return(0);  
10: }  
11: int factorial(int f) {  
12:     int fact;  
13:     if(f <= 1) {  
14:        return(1);  
15:     }  
16:     else {  
17:       fact = (f*(factorial(f-1)));  
18:       return(fact);  
19:     }  
20: }  

Output :- 

1:  Enter number you want to calculate factorial 5  
2:  Factorial of 5 is = 120  


Calculate Factorial

Program to calculate Factorial.

1:  void fact() {  
2:   int n ,i,f = 1;  
3:      printf("Enter number you want to calculate factorial\n");  
4:      scanf("%d",&n);  
5:   for(i = 1 ; i <= n ; i++) {  
6:   f = f*i;  
7:   }  
8:   printf("\n Factorial of %d is = %d\n",n,f);  
9:  Output :- Enter number you want to calculate factorial 5  
10:           Factorial of 5 is = 120  

Call this function from your main 
Like :-


1:  int main() {     
2:       fact();  
3:  }  

Number is Armstrong or not?

Program to check that the number is Armstrong or not ?

1:  void armstrong() {  
2:      int arm,qou,rem,n;  
3:      for(n = 1 ; n <= 999 ; n++) {  
4:             qou = (n/100);  
5:             arm = (qou*qou*qou);  
6:             rem = (n%100);  
7:             qou = (rem/10);  
8:             rem = (rem%10);  
9:             arm = arm+(qou*qou*qou)+(rem*rem*rem);  
10:             if(n == arm) {  
11:                  printf("%d is armstrong\n",n);  
12:             }  
13:      }  
14:  }  
15:  Output :-  
16:  1 is armstrong  
17:  153 is armstrong  
18:  370 is armstrong  
19:  371 is armstrong  
20:  407 is armstrong  

Call this function from your main
Like :-



1:  void main() { 
2:        armstrong();  
3:  }