Thursday, 14 March 2013

Harmonic Series

हारमोनिक series वो series होती है जो लयबद्ध(संगीत में ) तरीके से लिखी जाती है । ऊपर दी गयी series को देख कर हम यह पता लगा सकते है की इसमें १०० वा नंबर क्या होगा? इसी प्रकार अगर में आपसे इन १०० नंबर का जोड़निकालने को कहू तो भी आप निकाल सकते है । हम यहाँ ऐसा प्रोग्राम बना रहे है जो यह जोड़ हमारे लिए निकाल सकता है ।

/*************************************************************************
 *  Compilation:  javac Harmonic.java
 *  Execution:    java Harmonic N
 *  
 *  इस हारमोनिक क्रम का N नंबर तक का जोड़ प्रिंट करेगा: 1/1 + 1/2 + ... + 1/N.
 * 
 *  % java Harmonic 10
 *  2.9289682539682538
 *
 *  % java Harmonic 10000
 *  9.787606036044348
 *
 *************************************************************************/


public class Harmonic { 
    public static void main(String[] args) { 

        // command-line पर दी गयी संख्या 
        int N = Integer.parseInt(args[0]);

        // compute 1/1 + 1/2 + 1/3 + ... + 1/N
        double sum = 0.0;
        for (int i = 1; i <= N; i++) {
            sum += 1.0 / i;
        }

        // Nth harmonic नंबर प्रिंट करेगा 
        System.out.println(sum);
    }

}

For loop

फॉर लूप को समझने के लिए पहले आपको कुछ प्रश्नो के उत्तर देने होगे :

फॉर लूप की हमे क्या जरूरत है |
बिलकुल सही , कोई जरूरत नहीं है , अगर हमारे प्रोग्रामर जी एक ही बात को कही  कही बार लिखने को तैयार हो तो , हम बिना फॉर लूप के भी आपना काम कर सकते है | जैसे 

अगर हमे २ का पहाडा जावा में लिखना हो तो हम सिस्टम.आउट.प्रिंट से इसको इस प्रकार लिख सकते है :

System.out.println("2 * 1 = 2");
System.out.println("2 * 2 = 4");
System.out.println("2 * 3 = 6");
System.out.println("2 * 4 = 8");
System.out.println("2 * 5 = 10");
System.out.println("2 * 6 = 12");
System.out.println("2 * 7 = 14");
System.out.println("2 * 8 = 16");
System.out.println("2 * 9 = 18");
System.out.println("2 * 10 = 20");

लेकिन हमारे प्रोग्रामर जी को और भी बहुत काम है ,एवं उन्हें १० बार नहीं हजारो बार एक बात को लिखना पड़ता है , तो उन्होने फॉर लूप को बनाया और बाकी काम उस पर छोड़ दिया |


class ForLoop
{
public static void main(String args[]) {
int i,j;
for(i=1;i<=10;i++) {

System.out.println("2 *"+ i + "="+ 2*i);
}




}



}

Selection Sort


Selection सोर्ट सर्चिंग और सोर्टिंग का मेल है 

हर पास में , बिना जमा हुआ नंबर जो सबसे छोटा या सबसे बड़ा हो , वो अपनी सही जगह पर जमा दिया जाता है ।selection सोर्ट को हमे अर्रे के कुल नम्बरों की संख्या से एक कम बार चलाना पड़ता है । इस सोर्ट में दो लूप होते है । अंदर वाला लूप तो अगली छोटी या बड़ी संख्या का पता लगता है और बाहर वाला लूप उसको उसकी सही जगह पर रख देता है ।



उदहारण के लिए निचे दिया हुआ अर्रे देखिये : 
64 25 12 22 11 <- हमारे पास शुरू में यह अर्रे है 

11 25 12 22 64 <-पहले पास में हमने 64 को अर्रे के हर एलिमेंट से compare किया और उसको उसकी सही जगह पर जमा दिया जो आखिर वाली या 

11 12 25 22 64 <- दुसरे पास में हमने पहले एलिमेंट को दुसरे से compare किया और पाया की यह ठीक जमे हुए है , उसके बाद हमने दुसरे एलिमेंट को ऊपर वाले  अर्रे में  (25) को 12 से compare किया और फिर उनको ठीक से जमा दिया 

11 12 22 25 64 <- अब हमे 22 को 25 से compare किया और उनकी position को ठीक क्या 

11 12 22 25 64 <- अंत में हमारे पास sorted अर्रे है , जो हमारा पहला लक्ष्य था ।

// SelectionSort.java - integer अर्रे को सोर्ट करने का तरीका 
class SelectionSort {
  public static void main(String[] args) {
    int[] a = {11,12,22,25,64};

    sort(a);
    for (int i = 0; i < a.length; i++){
      System.out.println(a[i]);
    }
  }
  // sort function जो अर्रे को क्रम अनुसार जमाएगा 
  static void sort(int[] data) {
    int   next, indexOfNext;

    for (next = 0; next < data.length - 1; next++) {
      indexOfNext = min(data,next,data.length - 1);
      swap(data, indexOfNext, next);
    }
  }
  // दी गए सभी इंडेक्स में से  
  // सबसे छोटे एलेमेन्ट की इंडेक्स का पता लगाना
  static int min(int[] data, int start, int end) {
    int indexOfMin = start; // initial guess

    for (int i = start+1; i <= end; i++)
      if (data[i] < data[indexOfMin])
        indexOfMin = i; // found a smaller value
    return indexOfMin;
  }
  // अर्रे की entries की अदला बदली करना 
  static void swap(int[] data, int first, int second){
    int temp;

    temp = data[first];
    data[first] = data[second];
    data[second] = temp;
  }
}

Bubble Sorting

आज हम बबल सोर्ट का प्रोग्राम जावा में बनायेगे । हम इसको इतनी बारीकी से सीखेंगे की आज के बाद आपको इस प्रोग्राम को किसी भी कंप्यूटर भाषा में बनाने में कोई परेशानी नहीं होगी ।
उदहारण के लिए एक अर्रे लीजिये "5 1 4 2 8" और इसको सोर्ट कीजिये छोटे से बड़े नंबर की तरफ बबल सोर्ट के द्वारा ।
हर स्टेप में , नंबर जो बोल्ड में लिखे हुए है उन्हें compare करेंगे  और उसके लिए हमे तीन पास की आवश्यकता है ।
पहला पास:
( 5 1 4 2 8 )  ( 1 5 4 2 8 ), यहाँ पर अल्गोरिथम पहले दो नंबर को compare करेगी और फिर उन्हें स्वेप करेगी ।
( 1 5 4 2 8 )  ( 1 4 5 2 8 ), Swap करो क्यों की  5 > 4
( 1 4 5 2 8 )  ( 1 4 2 5 8 ), Swap करो क्यों की  5 > 2
( 1 4 2 5 8 )  ( 1 4 2 5 8 ), यहाँ पर क्यों की सारे एलेमेन्ट पहले से ही आर्डर में है( 8 > 5 ) इसीलिए अल्गोरिथम उन्हें स्वप नहीं करेगी ।

दूसरा पास :
( 1 4 2 5 8 )  ( 1 4 2 5 8 )
( 1 4 2 5 8 )  ( 1 2 4 5 8 ), Swap करे क्यों की  4 > 2
( 1 2 4 5 8 )  ( 1 2 4 5 8 )
( 1 2 4 5 8 )  ( 1 2 4 5 8 )

यहाँ अल्गोरिथम पहले से ही स्वप हो चुकी पर क्यों की उसे इसका पता नहीं है , इसीलिए वोह यह पूरा पास चलेगी नंबर में बिना कोई परिवर्तन किये ।
तीसरा  Pass:
( 1 2 4 5 8 )  ( 1 2 4 5 8 )
( 1 2 4 5 8 )  ( 1 2 4 5 8 )
( 1 2 4 5 8 )  ( 1 2 4 5 8 )

( 1 2 4 5 8 )  ( 1 2 4 5 8 )

/*
       जावा का बबल सोर्ट का example
        इस example से हमे यह पता लगेगा की बबल सोर्ट से हम integers को कैसे सोर्ट करते है । बबल सोर्ट सोर्टिंग अल्गोरिथम में सबसे आसन है ।
*/

public class BubbleSort {

        public static void main(String[] args) {
              
                //integer अर्रे जिसे हम सोर्ट करना चाहते है
                int intArray[] = new int[]{5,1,4,2,8};
              
                //सोर्टिंग से पहले इस अर्रे को प्रिंट कराये
                System.out.println("Array Before Bubble Sort");
                for(int i=0; i < intArray.length; i++){
                        System.out.print(intArray[i] + " ");
                }

   }
              
                //bubble sort अल्गोरिथम के द्वारा अर्रे को सोर्ट करने वाला function
                bubbleSort(intArray);
              
                System.out.println("");
              
                // bubble sort अल्गोरिथम के बाद अर्रे को प्रिंट करना
                System.out.println("Array After Bubble Sort");
                for(int i=0; i < intArray.length; i++){
                        System.out.print(intArray[i] + " ");
                }

        }

        private static void bubbleSort(int[] intArray) {
              


  /*
                 *  bubble सोर्ट में हम अर्रे को पहले नंबर से  traverse करते है
                 * और  array_length - 1 तक compare करते रहते है  and और हर एलिमेंट को उसके अगले नंबर
                 *  से compare किया जाता है
                 * नंबर को स्वेप अगले नंबर से स्वेप करे अगर अगला नंबर बड़ा हो ।
                 *
                 * Bubble sort की स्टेप्स इस प्रकार है
                 *
                 * 1. Compare array[0] & array[1]
                 * 2. If array[0] > array [1] swap it.
                 * 3. Compare array[1] & array[2]
                 * 4. If array[1] > array[2] swap it.
                 * ...
                 * 5. Compare array[n-1] & array[n]
                 * 6. if [n-1] > array[n] then swap it.
                 *
                 * इस स्टेप के बाद आखरी इंडेक्स में हमे सबसे बड़ा नंबर मिलेगा
                 *
                 * इसी स्टेप को repeat करो  array[1] to array[n-1]
                 * 
                 */
              
  
                int n = intArray.length;
                int temp = 0;
              
                for(int i=0; i < n; i++){
                        for(int j=1; j < (n-i); j++){
                              
                                if(intArray[j-1] > intArray[j]){
                                        //swap the elements!
                                        temp = intArray[j-1];
                                        intArray[j-1] = intArray[j];
                                        intArray[j] = temp;
                                }
                              
                        }
                }
      
        }
}

/*
बबल सोर्ट का output इस प्रकार होगा

Array Before Bubble Sort
5 1 4 2 8
Array After Bubble Sort
1 2 4 5 8

*/

Wednesday, 13 March 2013

Recurssions


Recurssion के नाम से ही हमे पता चल रहा है की यह उस क्रिया का नाम है जो री अकर हो वही
recurssion होता है | जैसे अगर हम किसी function में उसी function को कॉल किया जाता
है तो उस समय हम इसका प्रयोग करते है | 
 
उदहारण :
अगर हम किसी व्यस्त रहने वाले भोजनालय में जाते है , तो हम देखते है की ,वाहा लोग आ रहे है ,खाना 
खा रहे है  बिल चुकाते है और चले जाते है | अब अगर हम देखे की येही क्रिया जब तक चलती रहेगी जब तक
वहा अंतिम व्यक्ति खाना न खा ले या भोजनालय बंद होने का समय नहीं हो जाये |

अगर इसी बात को में आपको जावा के रूप में कहू तो में एक ग्रहिक के आने से लेकर बिल जमा करने तक की 
क्रिया को function में लिखूंगा और हर ग्रहिक को उसका आर्गुमेंट बनाऊँगा | जब भी एक ग्रहिक (function ) 
ख़तम होगा , तभी हम इसी function को फिर से कॉल करेगा |
 
इसी बात को ज्यादा समझने के लिए आप निचे binary सर्च का उदहारण देखिये और देखिये की कैसे हमने इसी क्रिया 
का प्रयोग प्रोग्राम में कैसे किया है :  
      
   
/**
 * एक अर्रे A जो बड़ते हुए क्रम में जमा हुआ हो, उसमे से कोई value सर्च करनी है 
 * अगर value मिल जाये तोह उस value के इंडेक्स को रिटर्न करो नहीं तो -1 रिटर्न करो 
 */
static int binarySearch(int[] A, int loIndex, int hiIndex, int value) {
      
   if (loIndex > hiIndex) {
         // शुरवाती जगह फिनाल जगह के बाद आ रही हूँ ,
         // तो इसका मतलब है ,की बताई गयी रंगे में कोई element नहीं होगा 
         // इसीलिए यहाँ पर खली लिस्ट होगी तोह हम -1 रिटर्न कराएँगे 
      return -1;
   }
   
   else {
         // लिस्ट के बिलकुल बीच में देखो ,अगर वह value मिल जाती है तो 
         // value को रिटर्न करो , नहीं तोह ,फिर से सर्च करो बिलकुल इसी 
         // तरह से या तोह पहले हिस्से में ,या फिर दुसरे में 
         // जो बीच में सर्च करते वक़्त लिस्ट में बन गए थे 
      int middle = (loIndex + hiIndex) / 2;
      if (value == A[middle])
         return middle;
      else if (value < A[middle])
         return binarySearch(A, loIndex, middle - 1, value);
      else   // value must be > A[middle]
         return binarySearch(A, middle + 1, hiIndex, value);
   }

} // binarySearch() का अंत 

Matrix Multiplication


अगर आपको गणित में माट्रिक्स को गुणा करना आता है ,तो आपको जावा में माट्रिक्स को समझाने में ज्यादा परेशानी नहीं होगी | जावा में माट्रिक्स को गुणा करने के लिए दो कांसेप्ट काम में आते है :

१. २डी अर्रे 
२. फॉर लूप 

दोनो के बारे में हम विस्तार से चर्चा कर चुके है , अब आईये इनको काम में लेकर देखते है |

01class Matrixmultiplication {
02 
03   public static void main(String[] args) {
04 
05double[][] a = new double[3][3];
06double[][] b = new double[3][3];
07double[][] c = new double[3][3];
08 
09int i,j,k;
10int m=10;
11 
12System.out.println("First Matrix is : \n");
13 for(i=0;i<3;i++) {
14            for(j=0;j<3;j++) {
15            a[i][j] =m;
16                        b[i][j] =m+1;
17            System.out.print(a[i][j] + " \t");
18             
19                }
20         System.out.println(); 
21}
22System.out.println();  
23System.out.println("Second Matrix is : \n");
24 for(i=0;i<3;i++) {
25            for(j=0;j<3;j++) {
26            System.out.print(b[i][j] + " \t");
27             
28                }
29         System.out.println(); 
30}
31System.out.println();  
32System.out.println("Multiplication of Matrix is: \n");
33for(i=0;i<3;i++) {  
34    for(j=0;j<3;j++) {          
35            for(k=0;k<3;k++) {
36                      c[i][j]+= a[i][k] * b[k][i];     
37                              }               
38                                     
39            System.out.print(c[i][j] + " \t");                                          
40            }
41                System.out.println("");
42     }
43                    }
44 
45}

Reverse the string using string buffer


हमने स्ट्रिंग को उपयोग करके देख लिया है , अब अगर हम इसी स्ट्रिंग को उल्टा करना चाहे तोह हमे जावा के language package का दूसरा हिस्सा स्ट्रिंग बफर को काम में लेना पड़ेगा | जावा में स्ट्रिंग और स्ट्रिंग बफर language  पैकेज में आते  है | स्ट्रिंग को में आपको पहले ही समझा चूका हूँ एवं उसके उदहारण भी आपको दे चूका हूँ , अब हम स्ट्रिंग बफर का उपयोग करे स्ट्रिंग को उल्टा करेंगे |

// क्लास के नाम का declaration 
class ReverseString { 
// स्ट्रिंग को उल्टा करने के लिए हम revereIt नाम का function declare करेंगे , जिसमे 
//आर्गुमेंट इनपुट हम स्ट्रिंग ही देंगे , आर्गुमेंट का नाम हमने source रखा है |
    public static String reverseIt(String source) {
//अब दो variable declare करेंगे एक तोह i एवं दूसरा len जो स्ट्रिंग की लम्बाई को स्टोर करेंगा 
        int i, len = source.length();
 // यहाँ पर हम नया स्ट्रिंग बफर dest बनायेंगे जिसके लम्बाई हमारे पूरानी स्ट्रिंग जितनी ही होगी 
        StringBuffer dest = new StringBuffer(len);
//अब फॉर लूप की सहायता से हम एक एक करके पूरानी स्ट्रिंग्स के सभी char को नयी स्ट्रिंग में अपेंड करेंगे  
        for (i = (len - 1); i >= 0; i--) {
            dest.append(source.charAt(i));
        }
//यहाँ से नहीं स्ट्रिंग को function को return कर देंगे |
        return dest.toString();
    }
}


यह प्रोग्राम नए लोगो को शुरू में थोडा मुश्किल लग सकता है , इसीलिए में कहूँगा की वोह पहले इस ब्लॉग के दुसरे पोस्ट पढ़े और फिर दुबारा इस इसे देखे तोह उन्हें काफी कुछ समझ में आने लगेगा |