Tuesday, 31 December 2019

Recursion



      Recursive Function is a function calling itself.  
      Every  recursive function should have a base case.Recursion stops on reaching the base case.Without a base case function repeats infinite times.
      Recursion makes the program simpler but it occupies more space and slower than loops.
      Recursive function uses memory stack to store the intermediate values    . Each recursion in the program gets fresh memory allocation. Calculation starts once the base case is reached.
Example:
void sum(int a,int b)
{
-----------;
----------;
sum(a,b);
----------;
}

Example 1: 

Sum of first n natural numbers:
int sum(int n)
{
         if(n<=0) // base case to end recursion
           return 0; // if the given number is 0 then sum is 0
      else
       return(n+sum(n-1));
}
5+ sum(4)
 4+sum (3)
      3+sum (2)
       2+ sum (1)
        1 + sum(0)
         0 
    When the value becomes zero , according to the base case it should return 0. So
 remember it uses stack(Last In First Out)
  1 + sum(0) will be 1+ 0 = 1
  2+ sum (1) will be 2 + (the previous answer which is 1) = 3
 3+sum (2)   will be 3 + (the previous answer which is 3) = 6
 4+sum (3) will be 4 + (the previous answer which is 6) = 10
5+ sum(4)  will be  5 + (the previous answer which is 10) = 15
So the final answer is 15.

Example : 
Find the output [ISC 2017]
int magicfun(int n)
{
    if(n==0)
       return 0;
    else
      return magicfun(n/2)*10+(n%2)
}

find the output if n=7
magicfun(3) *10 + 1
magicfun(1)*10+1
magicfun(0)*10+ 1

so
0 *10 +1 =1
1*10 + 1= 11
11 *10 + 1 =111


A common example  is finding factorial using Recursion.
Here in factorial we are multiplying from 1 till the number given.
Using Loops:
void factorial(int n)
{
int i,f=1;
for(i=1;i<=n;i++)
{
       f=f*i;
 }
System.out.print(f);
Using Recursion :
int factorial(int n)
{
   if (n==0)                //   factorial of 0 is 1
         return 1;
   else
         return ( n *(factorial(n-1));  //  multiply the given number with the          
                                                           previous number and so on
}
If n is 5 , then 5 x 4 x 3 x 2 x 1 = 120
This also can be written like this:
int f=1;
int factorial(int n)
{
   if (n==0)                //   factorial of 0 is 1
         return f;
   else
         {
               f=f*n;                     // multiply the given number with f which is 1
         return(factorial(n-1));  //  Call the method with the  next number
}
We will do some programs where we use factorial.
Example 1. Permutation function
int factorial(int n)
{
   if (n==0)                //   factorial of 0 is 1
         return 1;
   else
         return ( n *(factorial(n-1));  //  multiply the given number with the          
                                                           previous number and so on
}
void permutation()
{
    int x=factorial(n); // Calculate factorial of n
    int  y=factorial(n-r); // Calculate factorial of (n – r)
    int answer= x/y;
    System.out.print(answer);
}
Example 2: Special number / Krishnamurthy number
int factorial(int n)
{
   if (n==0)                //   factorial of 0 is 1
         return 1;
   else
         return ( n *(factorial(n-1));  //  multiply the given number with the          
                                                           previous number and so on
}
void special(int n)
{
   int a,s=0,m=n;
   while(n>0)
   {
         a=n%10;
         s=s+factorial(a);
         n=n/10;
    }
if (s==m)
System.out.print(“Special Number”);
else
System.out.print(“Not a Special Number”);
Example 3:
sum
int factorial(int n)
{
   if (n==0)                //   factorial of 0 is 1
         return 1;
   else
         return ( n *(factorial(n-1));  //  multiply the given number with the          
                                                           previous number and so on
}
void sum(int  x )
{
int i, a,sum=1;
for(i=1;i<=n;i++)

  sum=sum+(x/ factorial(i));
System.out.print(sum);
}

POWER

To find the power of a number:
Using Loop:
int  p=1;
int powerNum(int  base, int  power)
{
    int ctr=1;
    while(ctr<=power)
{
    p=p*base;
    ctr++;
 }
  return p;
 }
Using Recursion:
int powerNum(int  base, int  power)
{
   if (power==0)  // whatever the  base ,if  the power is  0 then answer is 1
        return 1;
   else
       return(base * powerNum(base, power-1));
}
Example 1:
Sum
Here  both factorial and power  can be calculated using recursion technique.
int factorial(int n)
{
   if (n==0)                //   factorial of 0 is 1
         return 1;
   else
         return ( n *(factorial(n-1));  //  multiply the given number with the          
                                                           previous number and so on
}

int powerNum(int  base, int  power)
{
   if (power==0)  // whatever the  base ,if  the power is  0 then answer is 1
        return 1;
   else
       return(base * powerNum(base, power-1));
}
void series(int x,int n)
{
int i;
double s=0.0;
for(i=1;i<=n;i++)
s=s+powerNum(x,i)/factorial(i);
System.out.print(s);
}
Fibonacci Series
0,1,1,2,3,5,8...........
void Fibonacci(int n)
{
    int ctr=3,a=0,b=1,c=0;
while (ctr<=n)
{
  c=a+b; // add the previous two values
  System.out.print(c+”  “);
  a=b;   
  b=c;
  ctr++;
}
}
    
int Fibonacci(int n) //to find the nth term in Fibonacci series
{
if (n==1)
return 0;
if (n==2)
return 1;
else
return (Fibonacci(n-1)+Fibonacci(n-2));
}
Prime Number
int c=0;
int Prime(int n, int i)
{
  if(i<=n)
  {
        if(n%i==0)
           c=c+1;
           return (Prime(n,i+1));
}
else
          return c;
}
Try the following:
·        Twin Prime




Sunday, 16 December 2018

Class 9 - continue statement

1.
     for (int i = 1; i <= 5; ++i) 
{      
         if (i > 5)
         {
            continue;
         }      
         System.out.println(i);
}
The output for the above code fragment is
1
2
3
4
5
when the value of i is greater than 5, the control will go to the next iteration, so from 6 to 10 will not be printed.

2. 

for (int i = 1; i <= 10; ++i)
 {     
         if (i > 4 && i < 9)
        {
            continue;
         }     
         System.out.println(i);
      }  
The output will be 
1

2
3
4
9
10

Sunday, 9 December 2018

Class 9 - Loop revision

Points to remember :
1. break statement is used to break the loop.
2. continue sends the control to the update expression.
3. for loop is used for fixed iterations.That is where you know the final limit.
4. In while loop, condition is tested before execution.
5. The do while loop executes the statements atleast once even if the condition is false.
6. Infinite loop : control does not reach the test condition.
7. Empty loop : loop does not contain any statement in the body.


1. What will be the output for the following programs:
i)
            for(a=0;a<30;a++)
           {
                   if(a==5)
                   break;
                   System.out.print(+a);
          }

ii)
      for(x=1;x<=5;x++)
      {
           if(x==2)
          continue;
          if(x==4)
          continue;
System.out.println(x);
      }
iii)
        int x=0;
       while(x<=10)
        {
               x++;
             if(x==4)
              break;
             System.out.println(x);
        }
2. Differentiate : while and do while.
3.Write a program to enter a number and print the sum of odd numbers and even numbers for the first n natural numbers.                                                                     [ICSE]
4.
      i)         12+22+32+42+…………+n2
      ii)     x2/2+x3/3+………xn/n

1. Fibonacci series:
 0,1,1,2,3,5,8.............................
2. Prime number:
    The divisors are one and the number itself.
    e.g : 5 : divisors 1 and 5
3. Perfect number :
     The sum of the divisors(excluding the number) equal to the number itself.
    e.g : 6
       divisors are 1+2+3=6
4. Armstrong number:
    e.g :
         153=13+53+33
               =1+125+27
               =153
5. Palindrome number:
  e.g:
        272: reverse the number 272.

Friday, 14 September 2018

Class 10 - Arrays (2018)

Array is an interesting topic.Imagine a situation where you want to input the names of students in your class along with the roll no and 3 subjects marks. There are 50 boys in your class. Then how many variables you need? There is no point in writing a program. Array comes in handy in such a situation .

An array is a collection of values of same data type. Each element in an array is refered by the array name with the subscript or index.It is enclosed in square bracket [ ], whereas methods use ( ).
  • Declaration
  • Memory allocation
  • Initialization
Declaration:
Like the normal declaration of variables, we need to declare the array also.
data type array name[];

int marks[];
Memory allocation:
data type array name[]=new datatype[size];

int a[]=new int[10];
How many values you are going to use should be mentioned where it is given size.The common mistake we make here is writing the variable name after new.
int a[]=new a[10]; is wrong
Initializing values
int a[]={10,20,30,40};
The place value of each element is called a subscript or an index. The index value starts from zero, so the last element index is one less than the size.
To find the length of an array use length.
int l=a.length;
No brackets.It finds the length of the array 'a' which is 4 and it is stored in a variable l;
To accept 10 values from the user.
Example 1: Blue J method
class ar1
{
public static void main(int a[])

Example 2:
import java.util.*;
class ar1
{
public static void main()
   {
int a[]=new int[10];--------------------------1
Scanner s=new Scanner(System.in);
int i,l,s=0; 
l=a.length;------------------------------------2
System.out.println("Enter the values");
for(i=0;i<l;i++)------------------------------3
a[i]=s.nextInt();------------------------------4
for(i=0;i<l;i++)
s=s+a[i];-------------------------------------5
 
System.out.println(a[i]);
   }
}
Step 1 : an array a is created ,
Step 2 :finds the  Length
Step 3 : index starts from 0 and less than length l
Step 4 : The values are store in a.First value is stored in
a[0], second in a[1] and so on
Step 5: When i=0, a[0] value is added to s, when i=1 ,a[1] is added and so on..

Search 
  • Linear
  • Binary

import java.util.*;
class linear{
public static void main()
   {
int a[]=new int[10];
Scanner s=new Scanner(System.in);
int i,l,n,flag=0; 
l=a.length ;
System.out.println("Enter the values");
for(i=0;i<l;i++) 
a[i]=s.nextInt();
System.out.println("Enter the number to be searched");
n=s.nextInt();
for(i=0;i<l;i++)
{
   if(a[i]==n)
     {
       flag=1;
        break;
    }
}
if(flag==1)
System.out.print(n+"found");
else
System.out.print(n+"not found");
  }
}

Initially flag is 0, if the number is found the flag value will change to 1.

Binary Search
This might look little complicated,but if you understand how it works,it is a cake walk.
The prerequisite is that the array elements should be arranged in some order either in ascending or descending.
In the boards generally the question will not ask you to sort and search in the same program.
The linear search takes more time since it has to check each and every element sequentially.It is a good idea but not a great one.
So, here in binary search the idea is divide the array and discard whatever not necessary.
Step 1: we are going to divide the array into  two parts.For that we should find the middle value.
Step 2: Compare the number  to be searched say 'n' with the middle value say 'm'.If both are same,  Bingo.
Step 3: If the n is smaller than m, then you would find n in the first half ,if the array  is arranged in ascending order.Then you dont want the second part anymore.discard it. So the length changes after you discard the second part.Lower index value remains the same that is 0, but upper limit becomes middle value - 1.Then step 2 will be repeated.
If the n is bigger than m, then you would find n in the second half ,if the array  is arranged in ascending order.Then you dont want the first part anymore.discard it. So the length changes after you discard the second part.Upper index value remains the same, but lower limit becomes middle value + 1.Then step 2 will be repeated.
Example :

The array is
 14 ,  23,  28, 36,  69,  88
The number to be searched is 23.
Step 1:
Middle value = (lower index +Upper index)/2
                      = (0+5)/2
                      = 2.5
Either round off or truncate it. Let us take 3.So the middle value is 36.
Step 2 :
Compare 23 and 3 rd element 36.Both are not same.
Step 3 :
23 is smaller than 36, that means 23 will not be there after 36.
so discard second half, that is elements after 36.Lower index is still 0, and upper index becomes the value before the middle value , i.e 28.Checking will go on till it finds the value.
If the value to be searched is 88 then,
88 is bigger than 36, therefore 88 will not be in the list before 36.
so discard first half, that is elements before 36.upper index remains the same and lower index becomes the value after the middle value. Checking will go on till it finds the value. Otherwise  it will print the nmber not in the list.class binary
{
public static void main(int a[],int n)---------------------------1
{
int l,i,mid,place,flag=0;
l=a.length;--------------------------------------------------------2
int low=0,up= l -1;----------------------------------------------3
while(low <= upp)----------------------------------------------4
{
      mid = (low+up)/2;------------------------------------------5
      if(a[mid]==n)
         {
              flag=1;------------------------------------------------6
              place=mid;--------------------------------------------7
              break;-------------------------------------------------8
         }
      else if(a[mid] < n)-----------------------------------------9
            low=mid+1;
      else
            upp=mid - 1;
}
if(flag==1)
System.out.print(n+"is found at+(place+1));-----------------10
else
System.out.print(n+"is not found ");

}
}
step 1: input the array, number to be searched
step 2: find the length of the array
step 3:initialize the values for lower and upper index. l-1 coz, index starts from 0.
step 4:the loop should continue as long as lower limit is less than upper limit.
step 5:find the middle value.common mistake here is 
(a[low]+a[upp])/2
step 6:there is some variable with some intial value so that when we find the number, change that value.If the value is not changed then it means the number is not found,coz you would not have gone to step 6.
step 7: if you want to find exactly where the number occurs in the array,then assign the mid index, not mid value.It is not a[mid].
step 8:Once we found the number,come out. no more searching.
step 9:check the number with middle value , change the low or upper index accordingly.
Isn't that easy.


Sorting Arrays
  • Selection Sort
  • Bubble Sort
Before we go to sorting , learn how to swap two values.
let us take x=30 and y=20, now interchange these two in java.
we might write
        x=y;
        y=x;
Now the value of x will be 20 and y also will be 20, coz in the first line y is assigned to x.Therefore the value of x is 20.In the second line ,we assign 20 to y not 30.Therefore we need one more temporary variable.
       temp=x;
        x=y;
        y=temp;
temp takes the value 30, x becomes 20, and y becomes 30.
Bubble Sort:
import java.util.*;
class bubble{
public static void main()
   {
int a[]=new int[10];
Scanner s=new Scanner(System.in);
int i,j,l,temp; 
l=a.length ;
System.out.println("Enter the values");
for(i=0;i<l;i++) -----------------------------------1
a[i]=s.nextInt();-----------------------------------2

for(i=0;i< l-1;i++)--------------------------------3
{
    for(j=i+1;j<l;j++)------------------------------4
      {
         if(a[i]>a[j])----------------------------------5
           {
              temp=a[i];
              a[i]=a[j];
               a[j]=temp;
           }
     }
}
System.out.println("The values after sorting");
  for(i=0;i<l;i++)
System.out.println(a[i]);
}
}

step 1 and 2  : input values
step 3 and 4 : There should be 2 loops,so that we compare the top most element with the least value.
step 4: If the top value is bigger(in case you want to sort in ascending order) the you should change it.Therefore swap the values.
Selection Sort :
import java.util.*;
class selection
{
public static void main()
   {
int a[]=new int[10];
Scanner s=new Scanner(System.in);
int i,j,l,temp,loc; 
l=a.length ;
System.out.println("Enter the values");
for(i=0;i<l;i++) 

a[i]=s.nextInt();
for(i=0;i< l-1;i++)
{
      small=a[i];---------------------------------------1
      loc=i;---------------------------------------------2
    for(j=i+1;j<l;j++)
        {
            if(small > a[j])------------------------------3
              {
                 small=a[j];-------------------------------4
                 loc=j;
              }
        }
        temp=a[i];------------------------------------5
        a[i]=a[loc];
        a[loc]=temp;
    }
System.out.println("The values after sorting");
  for(i=0;i<l;i++)
System.out.println(a[i]);
}
}

step 1 : Take the value in ith place as the small value.Initially the first value is small.So that we can compare it with other values.
step 2: Record the location of that value
step 3 :Compare the small value with the other values
step 4 :If small is bigger than the other value then assign that value to small.
step 5: Swap the values
 Write a program to pass an array to a function:
import java.util.*;
class arr2
{
void get(int a[], int l)
{   int i;
    for(i=0;i<l;i++)  
    System.out.println(a[i]);
}
public static void main()
   {
arr2 ob=new arr2();

int a[]=new int[10];
Scanner s=new Scanner(System.in);
int i,j,l,temp; 
l=a.length ;
System.out.println("Enter the values");
for(i=0;i<l;i++)  

a[i]=s.nextInt();
ob.get(a,l);
}
}

Class 7 - Number System

 Number System
1. Binary Number System
Only 0 and 1 are allowed in binary number system. So the base is 2(only two numbers)
e.g:
 (101)2
2. Decimal Number System
0,1,2......9 are allowed in decimal number system. So the base is 10( 0 to 9,totally 10 numbers)
e.g:
(25)10

The base is written along with the number to identify the number system.
Conversion from binary to decimal :
20=1
21=2
22=4 (2 x 2)
23=8(2 x 2x 2)
24=16(2 x 2x 2 x 2)
 and so on.......




2. (110)2

1   1   0

 = 1 x 2 2 + 1 x 2 1+ 0 x 2 

 = 4 + 2 + 0
= 6
Answer = (6) 10

3. (111)2
 = 1 x 2 2 + 1 x   2 1   + 1 x   2 0
= 4 + 2+ 1
= 7

4. (1011)2
=1 x   2 3  + 0 x 2 2 + 1 x   2 1   + 1 x   2 0

= 8+0 + 2+ 1
= 11

5. (1101)2
=1 x   2 3  + 1 x 2 2 + 0 x   2 1   + 1 x   2 0

= 8+4 + 0+ 1
= 13

Conversion from decimal to binary

This involves repeated division of the quotient by two, the remainder forms the part of the answer.
1. (4)10

4 / 2 = 2  remainder = 0
2/2 = 1    remainder = 0

You cannot divide 1 by 2, so stop now. Therefore the answer is
=(100)2

2. (7)10

7 / 2 = 3 remainder = 1
3 / 2 = 1 remainder = 1

(111)2


3. (13)10

13 / 2 = 6 remainder = 1
6 / 2 = 3   remainder = 0
3 / 2 = 1   remainder = 1
= (1101)2

I Term Exam 2018

Children ,  I will post revision for classes 7,8 and 9. At Least spend 15 to 30  mts every day  for the next 3 days. I am sure  you will be good to go. Remember its not Rocket Science.


If you need any guidance message me, i will get back to you. 

Tuesday, 21 August 2018

20th Aug - to 24th Aug

Class 7 : 

Commands and Statements in QBASIC.
Simple programs in QBASIC


Class 8 :

Simple Programs in Java.