Thursday, July 14, 2011

Compiler vs Interpreter


Compiler and interpreter, both basically serve the same purpose. They convert one level of language to another level. A compiler converts the high level instructions into machine language while an interpreter converts the high level instruction into some intermediate form and after that, the instruction is executed.
Compiler
A compiler is defined as a computer program that is used to convert high level instructions or language into a form that can be understood by the computer. Since computer can understand only in binary numbers so a compiler is used to fill the gap otherwise it would have been difficult for a human to find info in the 0 and 1 form.
Earlier the compilers were simple programs which were used to convert symbols into bits. The programs were also very simple and they contained a series of steps translated by hand into the data. However, this was a very time consuming process. So, some parts were programmed or automated. This formed the first compiler.
More sophisticated compliers are created using the simpler ones. With every new version, more rules added to it and a more natural language environment is created for the human programmer. The complier programs are evolving in this way which improves their ease of use.
There are specific compliers for certain specific languages or tasks. Compliers can be multiple or multistage pass. The first pass can convert the high level language into a language that is closer to computer language. Then the further passes can convert it into final stage for the purpose of execution.
Interpreter
The programs created in high level languages can be executed by using two different ways. The first one is the use of compiler and the other method is to use an interpreter. High level instruction or language is converted into intermediate from by an interpreter. The advantage of using an interpreter is that the high level instruction does not goes through compilation stage which can be a time consuming method. So, by using an interpreter, the high level program is executed directly. That is the reason why some programmers use interpreters while making small sections as this saves time.
Almost all high level programming languages have compilers and interpreters. But some languages like LISP and BASIC are designed in such a way that the programs made using them are executed by an interpreter.
• A complier converts the high level instruction into machine language while an interpreter converts the high level instruction into an intermediate form.
• Before execution, entire program is executed by the compiler whereas after translating the first line, an interpreter then executes it and so on.
• List of errors is created by the compiler after the compilation process while an interpreter stops translating after the first error.
• An independent executable file is created by the compiler whereas interpreter is required by an interpreted program each time.


What is the difference between primary & secondary storage device?


PRIMARY STORAGE DEVICES            SECONDARY STORAGE DEVICES

1.These devices are tempo-      1.These devices are permanent.
rary.                       
2.These devices are expensive.  2.These are cheaper.
3.These devices are faster,     3.These devices Computers via 
therefore expensive.            cables,and slow, therefore 
                                cheaper.
4.These devices have less       4.These devices have high 
storage capacity.               storage capacity.
5.These devices refer to RAM.   5.These devices refer to FDD

Difference between primary and secondary memory.

The primary memory or the main memory is part of the main computer system. The processor or the CPU directly stores and retrieves information from it. This memory is accessed by CPU, in random fashion. That means any location of this memory can be accessed by the CPU to either read information from it, or to store information in it.
o The primary memory itself is implemented by two types of memory technologies. The first is called Random Access Memory (RAM) and the other is read only memory (ROM). A more appropriate name for RAM is RWM (Read Write Memory), the CPU can write and read information from any primary memory location implemented using RAM. The other part of primary memory is implemented using ROM which stands for Read Only Memory.


Primary memory is much faster and also it is more cost effective. But the secondary memory is much slower and also less costly. It stores the data permanently unless it is erased. The secondary memory is usually available in the form of floppy disk storage media, hard disk, CD, DVD, Pen drive (i.e. Mass storage devices), memory chips. A 5 and1/4 inch floppy disk typically stores 1.44 mb of data. The data on the floppy disk is organized in terms of tracks and sectors. Hard disk can have large capacity something like 80-300 GB's or higher. Hard disk itself is made up of, large number of platters. Hard disk is usually much faster compared to floppy disk. CD can store up to 750 mb of data. Information on CD ROM is organized in terms of a spiral track. A DVD is digital Versatile Disk and can store 4.6 Gigabyte of information. All these CD disk are usually write ones and read many times (if the disk is not multisession and re writable). So are the DVDs.


INTRODUCTION TO COMPUTER IX

INTRODUCTION TO COMPUTER

Introduction

A computer is an electronic machine that accepts instruction as input data, stores the data, processes them and produces the desired output. Computer automatically accepts data and instructions as input, stores and processes them and produces and gives the output under the control of the instructions of the stored programs.

Features of computer:

As computer is an intelligent amplifier that performs the above-mentioned operations in a faster, accurate and efficient way, it creates extra leisure time which can be used in matters involving creativity & judgment. Some of the common characteristics possessed by computers are as follows:
  • A computer can perform tasks at very high speed. The speed, with which computers carry out these operations, varies from a few microseconds (10-6 of a second or millionth of a second) to nanoseconds (10-9 of a second or billionth of a second).
  • It can store a large amount of data in its memory forever
  • It gives 100% accurate outputs unless the wrong data and instructions are entered.
  • Once the data and instructions are given, it caries out its operation automatically to produce the desired output.
  • It can perform its tasks repetitively with same speed, efficiency and accuracy, without being affected by traits of tiredness and lack of concentration.
  • It is versatile in a sense that it can perform from simple tasks, such as Desktop Publishing, to advanced tasks, such as controlling of automatic weapons, satellite launching, etc.

Limitations of Computers:

  • Since computer does not have its own intelligence, it should be given instructions to carry out its tasks. However, the fifth generation is supposed to have own intelligence.
  • An important data can be lost sometimes due to the breakdown of storage media in machine.
  • However there are various systems to protect data, but there is always fear of data piracy.
  • Computer is a very expensive to install and maintain that it would be difficult to afford it for everybody. But, with the ever-increasing advances being made in the state of the art, the cost of computer equipment has dropped drastically over the years. Hardware costs have been decreasing at an estimated annual rate of 25%.
  • Computers cannot store data unless they are given instructions.

SWITCH-CASE STATEMENT

SWITCH-CASE STATEMENT

Switch Statements

The switch and case statements help control complex conditional and branching operations. The switch statement transfers control to a statement within its body.
Syntax:
The general form of a switch statement is:
switch (variable)
{
    case expression1:
        do something 1;
        break;
    case expression2:
        do something 2;
        break;
      ....
    default:
        do default processing;
}

Example :
#include<stdio.h>
 
main()
{
    int x;
 
    printf("Enter the any number");
    scanf("%d", &x);
 
    switch(x)
{
 case 1:
    printf("I am in Case one");
    break;
 case 2:
    printf("I am in case two");
    break;
 case 3:
    printf("I am in case three");
    break;
 default:
    printf(" I am in Default");
}
}
 
In above program if we enter 1 value in x then the output will be:
I am in Case one
When an expression is found that is equal to the tested variable, execution continues until a break statement is encountered. It is possible to have a case without a break. This causes execution to fall through into the next case. This is sometimes very useful.

STORAGE CLASSES : Programming

STORAGE CLASSES

Introduction

The storage class determines the part of memory where storage is allocated for an object (particularly variables and functions) and how long the storage allocation continues to exist.
A scope specifies the part of the program which a variable name is visible, that is the accessibility of the variable by its name.  In C program, there are four storage classes: automatic, register, external, and static.
Moreover, a variable's storage class tells us:
  • Where the variable would be stored
  • What will be the initial value of the variable, if initial value is not specifically assigned(i.e. the default initial value)
  • What is the scope of the variable; i.e. in which functions the value of the variable would be available.
  • What is the life of the variable; i.e. how long would the variable exist.

Automatic Storage Class

The features of a variable defined to have an automatic storage class are as under
Storage
Memory
Default initial value
Garbage value
Scope
Local to the block in which the variable is defined
Life
Till the control remains within the block in which the variable is defined
  • The scope of automatic variables is local to the block in which they are declared, including any blocks nested within that block. For these reasons, they are also called local variables.
  • No block outside the defining block may have direct access to automatic variables (by variable name) but, they may be accessed indirectly by other blocks and/or functions using pointers.
  • Automatic variables may be specified upon declaration to be of storage class auto. However, it is not required to use the keyword auto because by default, storage class within a block is auto.
  • Automatic variables declared with initializers are initialized every time the block in which they are declared is entered or accessed.
  • auto is the default storage class for local variables.

Example
void main()    
{
    int Count;
    auto int Month;
}
The example above defines two variables with the same storage class. auto can only be used within functions, i.e. local variables.

Register Storage Class

The features of a variable defined to have an automatic storage class are as under
Storage
CPU Register
Default initial value
Garbage value
Scope
Local to the block in which the variable is defined
Life
Till the control remains within the block in which the variable is defined
  • Registers are memory located within the CPU itself where data can be stored and accessed quickly. Normally, the compiler determines what data is to be stored in the registers of the CPU at what times.
  • register is used to define local variables that should be stored in a register instead of RAM. This means that the variable has a maximum size equal to the register size (usually one word) and can't have the unary '&' operator applied to it (as it does not have a memory location).
Example:
      void main()
      {
        register int  Miles;
      }

Static Storage Class

The features of a variable defined to have an automatic storage class are as under
Storage
Memory
Default initial value
Zero
Scope
Local to the block in which the variable is defined
Life
Value of the variable persists between different function calls
  • Static automatic variables continue to exist even after the block in which they are defined terminates. Thus, the value of a static variable in a function is retained between repeated function calls to the same function.
Comparing two storage class we get to know how static storage class variable works and auto storage class works.
Auto Storage Class
Static Storage Class
void Increment()
{
    auto int i=1;
    printf("%d\n",i);
    i=i+1;
}
void main()
{
    Increment();
    Increment();
    Increment();
}
void Increment()
{
    static int i=1;
    printf("%d\n",i);
    i=i+1;
}
void main()
{
    Increment();
    Increment();
    Increment();
}
Output:
1
1
1
Output:
1
2
3
Each time the Increment() function is called i variable is taken as new and each time i is initialized with 1 so when i is printed each time it displays 1
When first time Increment() function is called i variable is initialized to 1 and next two time the value will be incremented by one. That is when Increment() function is called second time i variable in not initialized again but will directly goto printf() and displays the value of i i.e. 2 and so on it displays 3

External Storage Class

The features of a variable defined to have an automatic storage class are as under
Storage
Memory
Default initial value
Zero
Scope
Globle
Life
As long as the program's execution doesn't come to an end
  • All variables we have seen so far have had limited scope (the block in which they are declared) and limited lifetimes (as for automatic variables).
  • However, in some applications it may be useful to have data which is accessible from within any block and/or which remains in existence for the entire execution of the program. Such variables are called global variables, and the C language provides storage classes which can meet these requirements; namely, the external (extern) and static (static) classes.
  • Declaration for external variable is as follows:
  • extern int var;
  • External variables may be declared outside any function block in a source code file the same way any other variable is declared; by specifying its type and name (extern keyword may be omitted).
Example:
#include<stdio.h>
extern int i;    
void Increment()
{    
      i=i+1;
      printf("%d\n",i);
}
void Decrement()
{    
      i=i-1;
      printf("%d\n",i);
}
void main()
{    
      printf("initial value=%d\n",i);
      Increment();
      Increment();
      Decrement();
      Decrement();
}

          Output:

                    initial value = 0
                    1
                    2
                    1
                    0


Book : Let us C