Monday, July 9, 2012

Fibonacci Sequence - Python Version

The theory:
This piece of code is the implementation of the Fibonacci series as shown in the previous post, rewritten in Python.

a=0
b=1
len=int (raw_input("Enter the length of the sequence "))
print "The sequence::"
print a,b
while len>2:
    c=a+b
    print c
    a=b
    b=c
    len=len-1

The output:
Enter the length of the sequence 7
The sequence::
0 1
1
2
3
5
8

When the length of the sequence is 50, what happens?
Enter the length of the sequence 50
The sequence::
0 1
1
2
3
5
8
13
21
34
55
89
144
233
377
610
987
1597
2584
4181
6765
10946
17711
28657
46368
75025
121393
196418
317811
514229
832040
1346269
2178309
3524578
5702887
9227465
14930352
24157817
39088169
63245986
102334155
165580141
267914296
433494437
701408733
1134903170
1836311903
2971215073
4807526976
7778742049

Notes:
No negative values were displayed here. Python is dynamically typed, in contrast to c which is statically typed. By default all data read from the user is string data. It is because of this I converted the variable len as I did - to int(). Else, an error would occur when trying to perform len=len-1. One more thing, python also does not allow increment or decrement (++ or --).

Fibonacci Sequence

The theory:
In the Fibonacci sequence of numbers, each number is the sum of the previous two numbers, starting with 0 and 1. This sequence begins 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987 .. and so on.
Below is a simple piece of code which will give you the sequence as output.

#include<stdio.h>
#include<conio.h>
main()
{
  int a=0,b=1,c;
  char len;
  printf("Enter the length of sequence required ");
  scanf("%d",&len);
  printf("Sequence starts:: %d %d",a,b);
  while(len-->2)
  {
    printf(" %d",c=a+b);
    a=b;
    b=c;
  }
 }

The output:
 Enter the length of sequence required 7
Sequence starts:: 0 0 1 2 3 5 8

Notes:
This piece of code is only good for a limited number. Below is a sample output of this program giving a not so good output.

Enter the length of sequence required50
Sequence starts:: 0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765 10946 17711 28657 46368 75025 121393 196418 317811 514229 832040 1346269 2178309 3524578 5702887 9227465 14930352 24157817 39088169 63245986 102334155 165580141 267914296 433494437 701408733 1134903170 1836311903 -1323752223 512559680 -811192543

See the problem? Can you guess what has gone wrong here?
If your guess is the data type used in the program, then you are absolutely right.
int can only go so far. For higher ranges of numbers it is advisable to use higher data types like the long, or long double.
The long double may give you output with decimals (which is not what the doctor ordered). Hence, you may use %.0lf instead of simple %lf. 

This code can be modified in so many ways. Just use your imagination. Do post your ideas here in the comments section below. You can always contact me. I am happy to help.
Cheers!!!

Sunday, July 1, 2012

Swapping of numbers without third variable

The theory:
Swapping of two numbers is a pretty neat trick when tried out without a third variable. Check out the code below.

#include <stdio.h>
main()
{
int a=10,b=20;
printf("Before swap: a=%d,b=%d",a,b);
a+=b;
b=a-b;
a=a-b;
printf("\nAfter swap: a=%d,b=%d",a,b);
}

The Output:
Before swap: a=10,b=20
After swap: a=20,b=10