Thursday, February 18, 2010

പ്രൈം നമ്പര്‍ പ്രിന്റ് ചെയ്യാന്‍

പ്രൈം നമ്പര്‍ പ്രിന്റ് ചെയ്യുന്നത് പ്രോഗ്രാമിങ്ങ് പഠിക്കുന്ന വിദ്യാര്‍ത്ഥികള്‍ക്ക് കിട്ടുന്ന ആദ്യപ്രശ്നങ്ങളിലൊന്നാണ്‌.
സി പ്രോഗ്രാമില്‍ പ്രം നമ്പര്‍ പ്രിന്റ് ചെയ്യാന്‍ ഉള്ള ഒരു ഫംഗ്ഷന്‍ പ്രോഗ്രാം താഴെ കൊടുത്തിരിക്കുന്നു. ഇതില്‍ പ്രൈം നമ്പര്‍ ആണോ അല്ലയോ എന്ന് തിരിച്ചറിയാന്‍ ഉള്ള ലോജിക്കില്‍ ഒരു ഫ്ലാഗ് യൂസ് ചെ‌യ്തിരിക്കുന്നത് ശ്രദ്ധിക്കുക (isPrime).

1. Create file
calvin@Singularity:~/programming$ gedit prime_flag.c




#include<stdio.h>


int prime_or_not(int iNum){

int isPrime = 0;
int jNum =2;

for(jNum=2;jNum<iNum;jNum++)
{
if( iNum%jNum==0)
{
isPrime = 1;
break;
}
}


return isPrime;

}

void main(){

int iNum=2;


printf("\n");
printf("==================================================\n");
printf("Program to print the prime numbers from 1 to 100\n");
printf("==================================================\n");


for(iNum=2;iNum<=100; iNum++)
{
if(!(prime_or_not(iNum)))
{
printf("%d is a prime number\n", iNum);
}


}



printf("\n\n");
}


2. Compile and run
calvin@Singularity:~/programming$gcc prime_flag.c
calvin@Singularity:~/programming$./a.out

3. Output


==================================================
Program to print the prime numbers from 1 to 100
==================================================

2 is a prime number
3 is a prime number
5 is a prime number
7 is a prime number
11 is a prime number
13 is a prime number
17 is a prime number
19 is a prime number
23 is a prime number
29 is a prime number
31 is a prime number
37 is a prime number
41 is a prime number
43 is a prime number
47 is a prime number
53 is a prime number
59 is a prime number
61 is a prime number
67 is a prime number
71 is a prime number
73 is a prime number
79 is a prime number
83 is a prime number
89 is a prime number
97 is a prime number


മെക്കാനിക്കല്‍ ഡിപ്പാര്‍ട്മെന്റിലെ സജിത് ബാബു സാര്‍ ഐ.ഐ.ടി ഇന്റര്‍‌വ്യൂവിനു പോയപ്പോള്‍ ചോദിച്ച ചോദ്യങ്ങളിലൊന്ന് How to write a C program to print prime numbers from 1 to 100 without using any flags എന്നായിരുന്നു. പുള്ളി അന്നാ ചോദ്യം ഞങ്ങള്‍ കുറച്ച് വിദ്യാര്‍ത്ഥികളോട് ചോദിച്ചു. അന്നതിനു എന്തോ ഒരു സൊലൂഷന്‍ ഞാന്‍ കണ്ടു പിടിച്ച് പ്രിന്റ് എടുത്ത് കുറേ ദിവസം നടന്നെങ്കിലും സാറ് സ്ഥലം മാറ്റം കിട്ടിയോ മറ്റോ പോയതിനാല്‍ അത് കൊടുക്കാന്‍ കഴിഞ്ഞില്ല. ആ ലോജിക് ഇപ്പോള്‍ ഓര്‍മയില്ല. വൈല്‍ ലൂപിന്റെ എന്തോ ഒരു കളി ആയിരുന്നു എന്ന് നേരിയ ഓര്‍മ ഉണ്ട്.

ഇന്നിപ്പോള്‍ അത് ഇങ്ങനെ സോള്‍‌വ് ചെയ്യാന്‍ തോന്നി.

1. Create file
calvin@Singularity:~/programming$ gedit prime_no_flag.c


#include<stdio.h>


int prime_or_not(int iNum){


int jNum =2;

for(jNum=2;jNum<iNum;jNum++)
{
if( iNum%jNum==0)
{

break;
}
}

if (jNum<=iNum-1)
return 1;
else
return 0;
}
void main(){

int iNum=2;


printf("\n");
printf("==================================================\n");
printf("Program to print the prime numbers from 1 to 100\n");
printf("Without using any Flags\n");
printf("==================================================\n");


for(iNum=2;iNum<=100; iNum++)
{
if(!(prime_or_not(iNum)))
{
printf("%d is a prime number\n", iNum);
}


}



printf("\n\n");
}



2. Compile and run
calvin@Singularity:~/programming$gcc prime__no_flag.c
calvin@Singularity:~/programming$./a.out

3.Output



==================================================
Program to print the prime numbers from 1 to 100
Without using any Flags
==================================================

2 is a prime number
3 is a prime number
5 is a prime number
7 is a prime number
11 is a prime number
13 is a prime number
17 is a prime number
19 is a prime number
23 is a prime number
29 is a prime number
31 is a prime number
37 is a prime number
41 is a prime number
43 is a prime number
47 is a prime number
53 is a prime number
59 is a prime number
61 is a prime number
67 is a prime number
71 is a prime number
73 is a prime number
79 is a prime number
83 is a prime number
89 is a prime number
97 is a prime number



വ്യത്യാസം ശ്രദ്ധിച്ചു കാണും എന്നു കരുതുന്നു.

ഇതല്ലാതെയും പല തരത്തില്‍ സോള്‍‌വ് ചെയ്യാവുന്നതാണ്‌. എല്ലാം നിങ്ങളുടെ ഇഷ്ടം ;)

CopyLeft Information

Singularity എന്ന ബ്ലോഗില്‍ പ്രസിദ്ധീകരിക്കുന്ന ലേഖനങ്ങള്‍ എല്ലാം പൊതുതാല്പര്യാര്‍ത്ഥം ഉള്ളതാണ്. അവ ലേഖകന്റെ അനുമതി കൂടാതെ തന്നെ വാണിജ്യപരമോ വാണിജ്യേതരമോ ആയ എന്താവശ്യത്തിനും ഏതൊരാള്‍ക്കും എപ്പോഴും എത്ര തവണ വേണമെങ്കിലും മാറ്റങ്ങളോടെയോ അതേ പടിയോ ബ്ലോഗിലോ ഇതരമാധ്യമങ്ങളിലോ സ്വതന്ത്രവും സൌജന്യവുമായി ഉപയോഗിക്കാം. മാറ്റം വരുത്തുന്ന പക്ഷം അതില്‍ ഈ ലേഖകന്‍‍ ഉത്തരവാദിയല്ല. പുനഃപ്രസിദ്ധീകരിക്കുന്ന കുറിപ്പിനൊപ്പം മൂലലേഖനത്തിന്റെ രചയിതാവു് എന്ന സ്ഥാനം ലേഖകനു് നല്‍കുന്നതു് അഭികാമ്യം. എന്നാല്‍ ഇതു് നിബന്ധനയല്ല. മറ്റൊരാളുടെ പേരു് പകരം കൊടുക്കാന്‍ അനുമതിയില്ല. വീണ്ടും ഉപയോഗിക്കുന്ന പക്ഷം ആ വിവരം ലേഖകനെ അറിയിക്കണമെന്നും ഈ പകര്‍പ്പുപേക്ഷാപത്രം ഒപ്പം നല്‍കണമെന്നും താത്പര്യപ്പെടുന്നു.