Programming in Pascal
For III semester students of B.E Computer science,Bangalore University
{Program to search a number using binary search}
USES crt;
TYPE index=1..100;
VAR arr:ARRAY[1..100] OF index;
VAR mid,low,high,search:integer;
i,n:index;
found:boolean;
BEGIN
clrscr;
writeln('BINARY SEARCH');
writeln('Enter the array
size');
readln(n);
writeln('Enter the array
elements');
FOR i:=1 TO n DO
BEGIN
readln(arr[i]);
END;
writeln('Enter the search
element');
readln(search);
low:=1;
high:=n;
found:=false;
REPEAT
mid:=trunc(low+high) DIV 2;
IF (search<arr[mid]) THEN
high:=mid-1;
IF (search>arr[mid]) THEN
low:=mid+1;
IF (search=arr[mid]) THEN
found:=true
ELSE
found:=false;
UNTIL ((found=true) OR
(high<low));
IF found=true THEN
writeln('ELEMENT FOUND')
ELSE writeln('ELEMENT NOT
FOUND');
END.
{Program to search a number using linear search}
USES crt;
TYPE index=1..100;
VAR n,searchkey,i:integer;
found:boolean;
arr:ARRAY[1..100] OF index;
BEGIN
writeln('LINEAR SEARCH');
writeln('Enter the boundary
of the array');
readln(n);
writeln('Enter the array
elements');
FOR i:=1 TO n DO
BEGIN
readln(arr[i]);
END;
i:=1;
found:=false;
writeln('Enter the search
element');
readln(searchkey);
WHILE ((i<=n) AND
(found=false)) DO
BEGIN
IF arr[i]=searchkey THEN
found:=true
ELSE found:=false;
i:=i+1;
END;
IF found=true THEN
writeln('ELEMENT FOUND')
ELSE
writeln('ELEMENT NOT
FOUND');
END.
CONST items=100;
VAR n,temp,pass,index:integer;
sorted:boolean;
vector:ARRAY[1..items] of
integer;
PROCEDURE sort;
BEGIN
pass:=1;
REPEAT
sorted:=true;
FOR index:=1 TO items-pass DO
BEGIN
IF vector[index]>vector[index+1] THEN
BEGIN
sorted:=false;
temp:=vector[index];
vector[index]:=vector[index+1];
vector[index+1]:=temp;
END;
END;
pass:=pass+1;
UNTIL sorted;
END;
BEGIN
writeln('How many
elements');
readln(n);
writeln('Enter the unsorted
elements');
index:=1;
REPEAT
readln(vector[index]);
index:=index+1;
UNTIL index=n+1;
sort;
writeln('Sorted Data');
FOR index:=1 TO items DO
BEGIN
IF ((index-1) MOD 10)=0 THEN writeln;
writeln(vector[index]:4);
END;
writeln('Total number of
passes=> ',pass);
writeln;
END.
{Program to sort the given nos using insertion sort}
USES crt;
VAR a:ARRAY[1..100] of real;
VAR temp:real;
i,j,n:integer;
BEGIN
clrscr;
writeln('Enter the boundary
of the array');
readln(n);
writeln('Enter the elements
of the array');
FOR i:=1 TO n DO
BEGIN
readln(a[i]);
END;
FOR i:=2 TO n DO
BEGIN
j:=i-1;
WHILE ((j>=1) AND (a[j+1]<a[j])) DO
BEGIN
temp:=a[j];
a[j]:=a[j+1];
a[j+1]:=temp;
j:=j-1;
END;
END;
writeln('The sorted
elements are as follows');
FOR i:=1 TO n DO
writeln(a[i]);
END.
5.
program QSort;
{$R-,S-}
uses Crt;
{ This program demonstrates the quicksort
algorithm, which }
{ provides an extremely efficient method of sorting
arrays in }
{ memory. The program generates a list of 1000
random numbers }
{ between 0 and 29999, and then sorts them using the
QUICKSORT }
{ procedure. Finally, the sorted list is output on
the screen. }
{ Note that stack and range checks are turned off
(through the }
{ compiler directive above) to optimize execution
speed. }
const
Max = 1000;
type
List = array[1..Max] of Integer;
var
Data: List;
I: Integer;
{ QUICKSORT sorts elements in the array A with
indices between }
{ LO and HI (both inclusive). Note that the
QUICKSORT proce- }
{ dure provides only an "interface" to the
program. The actual }
{ processing takes place in the SORT procedure,
which executes }
{ itself
recursively.
}
procedure QuickSort(var A: List; Lo, Hi: Integer);
procedure Sort(l, r: Integer);
var
i, j, x, y: integer;
begin
i := l; j := r; x := a[(l+r) DIV 2];
repeat
while a[i] < x do i := i + 1;
while x < a[j] do j := j - 1;
if i <= j then
begin
y := a[i]; a[i] :=
a[j]; a[j] := y;
i := i + 1; j := j -
1;
end;
until i > j;
if l < j then Sort(l, j);
if i < r then Sort(i, r);
end;
begin {QuickSort};
Sort(Lo,Hi);
end;
begin {QSort}
Write('Now generating 1000 random
numbers...');
Randomize;
for i := 1 to Max do Data[i] :=
Random(30000);
Writeln;
Write('Now sorting random numbers...');
QuickSort(Data, 1, Max);
Writeln;
for i := 1 to 1000 do Write(Data[i]:8);
end.
{This program reads a line of text and writes it out in a reverse order}
USES crt;
PROCEDURE flipit;
{Reads single characters recursively and then writes them out}
VAR c:char;
{The procedure flipit is the key thing in this
program.First it reads
a single character and then makes sure (checks) that
it is not an end
of line,and if this condition satisfies then it once
again goes to the
procedure flipit and reads the next single
character.This process continues
until the end of line is detected,after which the
computer writes out the
output in the order of the most recent character
written first (i.e., the
character where the end of line was encountered) and
the first character
written last.Hence we get a line of text written in
a reverse order in the
output.}
BEGIN
read(c);
IF NOT eoln THEN flipit;
write(c)
END;
BEGIN
clrscr;
writeln('Enter a line of
text');
writeln;
flipit;
END.
{Program to calculate the factorial of a number using recursive function}
VAR x:integer;
FUNCTION fact(n:integer):integer;
BEGIN
IF n<=1 THEN fact:=1
ELSE fact:=n*fact(n-1);
END;
BEGIN
writeln('Enter any
integer');
read(x);
writeln('The factorial is
',fact(x))
END.
(*Program to find the fibonacci series upto a given number*)
VAR a,b,j,n:integer;
PROCEDURE fib(a,b,j:integer);
BEGIN
IF j>0 THEN
BEGIN
WHILE j<>a DO
BEGIN
writeln(a:1,' ');
fib(b,a+b,j-1);
END;
END;
END;
BEGIN
writeln('FIBONACCI
SERIES');
writeln;
writeln('Enter any
number');
readln(n);
writeln;
IF n<=0 THEN
writeln('Invalid Entry,please try again!')
ELSE
fib(0,1,n);
END.
{Program to calculate the GCD of 2 nos using recursive function}
USES crt;
VAR a,b:integer;
FUNCTION gcd(p,q:integer):integer;
BEGIN
IF p<q THEN
BEGIN
gcd:=gcd(q,p);
END
ELSE
IF q=0
THEN
BEGIN
gcd:=p;
END
ELSE
gcd:=gcd(q,p MOD q);
END;
BEGIN
clrscr;
writeln('Enter any two
elements');
readln(a,b);
gcd(a,b);
writeln('The gcd of two
numbers is ',gcd(a,b));
END.
{Factorial of a number}
USES crt;
VAR n:integer;
FUNCTION fact(i:integer):integer;
VAR prod1:integer;
BEGIN
BEGIN
prod1:=1;
REPEAT
prod1:=prod1*i;
i:=i-1;
UNTIL i = 1;
END;
writeln('The factorial of ',n,' is ',prod1)
END;
BEGIN
clrscr;
writeln('Enter any
number');
read(n);
fact(n);
END.
(*program to find the gcd of two numbers*)
USES crt;
VAR a,b,c,d,i:integer;
BEGIN
clrscr;
writeln('Enter any two
integers');
readln(a,b);
IF a<=b THEN c:=a;
c:=b;
FOR i:=1 TO c DO
BEGIN
IF (a MOD i=0)AND(b MOD i=0) THEN
d:=i;
END;
writeln('The GCD of two
numbers is ',d);
END.
TYPE student=RECORD
name:string[20];
rollno,marks:integer;
END;
VAR n,i:integer;
data:student;
file1:FILE OF student;
BEGIN
writeln('Program to create
a sequential file of student data');
assign(file1,'file1.dat');
rewrite(file1);
REPEAT
write('Enter the number of students:');
readln(n);
UNTIL n>0;
FOR i:=1 TO n DO
WITH data DO
BEGIN
write('NAME : ');
readln(name);
write('ROLL NO : ');
readln(rollno);
write('MARKS : ');
readln(marks);
write(file1,data);
END;
reset(file1);
writeln('The data file contains the following information: ');
writeln('NAME':15,'':12,'ROLL NO.':8,'MARKS':10);
WHILE (NOT eof(file1)) DO
BEGIN
read(file1,data);
WITH data DO
writeln(name:20,rollno:12,marks:12);
END;
END.
13.
PROGRAM function_procedure_parameter;
VAR x:real;
FUNCTION f1(a:real):real;
BEGIN
f1:=sqr(a);
END;
PROCEDURE p(x:real);
{A function is declared within a Procedure}
FUNCTION f(x:real):real;
VAR y:real;
BEGIN
y:=f(x);
writeln('The output is...');
writeln(y);
END;
BEGIN
{main program statements}
x:=9;
p(x,f1);
END.
{This program solves a well known game using
recursive procedures calls
and user defined data}
TYPE poles=(left,centre,right);
disks=0..maxint;
VAR n:disks;
PROCEDURE transfer(n:disks;origin,destination,other:poles);
{Note that origin,destination
and other are formal parameters for the
procedure transfer,they are
supposed to be replaced by the actual parameter
left,centre,right in the
procedure reference in the main program}
{Transfer n disks from the origin to the destination}
PROCEDURE diskmove(origin,destination:poles);
{Move a single disk from the origin to the destination}
BEGIN
write('Move ');
CASE origin OF
left :IF destination=centre
THEN writeln('left to centre')
ELSE writeln('left to right');
centre :IF destination=left
THEN writeln('centre to left')
ELSE writeln('centre to right');
right :IF destination=centre
THEN writeln('right to centre')
ELSE writeln('right to left');
END; {End case}
END;
{End diskmove}
BEGIN
{Transfer}
IF n>0 THEN BEGIN
transfer(n-1,origin,other,destination);
diskmove(origin,destination);
transfer(n-1,other,destination,origin);
END;
END;
{End Transfer}
BEGIN
{Main action block}
write('Enter the number of
disks->');
readln(n);
writeln;
transfer(n,left,right,centre); {Transfer n disk from left to right}
END.
{Program that declares a integer matrix and
initializes it to 1's
on the diagonal and 0's elsewhere}
VAR arr:ARRAY[1..100,1..100] OF integer;
i,j,index,m,n:integer;
BEGIN
writeln;
writeln('Enter the number
of rows and columns');
readln(m,n);
FOR i:=1 TO m DO
BEGIN
FOR j:=1 TO n DO
BEGIN
IF i=j THEN
arr[i,j]:=1
ELSE
arr[i,j]:=0;
IF ((j-1) MOD n)=0 THEN writeln;
write(' ',arr[i,j],' ');
END;
END;
END.
{Program that will allow an integer type number
to be raised to an
integer type power}
USES crt;
VAR x,y:integer;
PROCEDURE pow(a,b:integer);
{Procedure to calculate x^y}
VAR count,expo:integer;
BEGIN
count:=1;
expo:=1;
FOR count:=1 TO b DO
BEGIN
expo:=expo*a;
END;
writeln('The answer is ',expo);
END;
BEGIN
clrscr;
writeln('Program to
calculate "x to the power of y" ');
writeln;
writeln('Enter any two
numbers x & y');
readln(x,y);
pow(x,y);
END.
VAR n,i,s:integer;
flag:boolean;
BEGIN
writeln('Enter any
number');
readln(n);
flag:=false;
s:=trunc(sqrt(n*1.0));
FOR i:=2 TO s DO
IF ((n MOD i)=0) THEN
flag:=false
ELSE
flag:=true;
IF flag=true THEN
writeln('It is a Prime number')
ELSE
writeln('Not a prime
number');
END.
VAR i,j,k,n:integer;
BEGIN
writeln('Enter any
number');
readln(n);
FOR i:=2 TO n DO
BEGIN
k:=0;
FOR j:=1 TO n DO
IF i MOD j =0 THEN k:=k+1;
IF k<=2 THEN writeln(i);
END;
END.
CONST scale=30;
centre=40;
increment=15;
PI=3.14159;
VAR i,angle:integer;
FUNCTION sinetrace:integer;
{Evaluate position on the screen
for plotting sine wave}
BEGIN
sinetrace:=trunc(centre-scale*sin(angle*PI/100));
END;
BEGIN
angle:=0;
WHILE angle>=0 DO
BEGIN
FOR i:=1 TO sinetrace DO
write(' ');
writeln('sine');
angle:=angle+increment;
END;
END.
USES crt;
{Program that counts the number of vowels in a sentence}
CONST space=' ';
maxchar=80;
TYPE vowel=(a,e,i,o,u);
VAR buffer:ARRAY[1..maxchar] of char;
vowelcount:ARRAY[vowel] of
integer;
PROCEDURE initialize;
VAR ch:vowel;
BEGIN
FOR ch:=a TO u DO
BEGIN
vowelcount[ch]:=0;
END;
END;
PROCEDURE textinput;
VAR index:integer;
BEGIN
writeln('Input a
sentence');
FOR index:=1 TO maxchar DO
IF
eoln THEN buffer[index]:=space
ELSE read(buffer[index]);
readln;
END;
PROCEDURE analysis;
VAR index:integer;
ch:vowel;
BEGIN
index:=1;
WHILE
index<>maxchar+1 DO
BEGIN
IF buffer[index] IN ['a','e','i','o','u'] THEN
BEGIN
CASE buffer[index] OF
'a':ch:=a;
'e':ch:=e;
'i':ch:=i;
'o':ch:=o;
'u':ch:=u;
END;
vowelcount[ch]:=vowelcount[ch]+1;
END;
index:=index+1;
END;
END;
PROCEDURE vowelout;
VAR ch:vowel;
BEGIN
clrscr;
writeln;
writeln('
a e i o u');
FOR ch:=a TO u DO
write(vowelcount[ch]:4);
writeln;
END;
BEGIN
initialize;
textinput;
analysis;
vowelout;
END.
{Program to count the number of words in a sentence}
USES crt;
CONST space=' ';
VAR nextchar:char;
words:integer;
BEGIN
words:=1;
clrscr;
writeln('Input
sentence-terminate with return');
WHILE not eoln DO
BEGIN
read(nextchar); {If readln was used instead of
read then the program would not work}
IF nextchar=space THEN
words:=words+1;
END;
writeln('Number of words in
the sentence => ',words);
END.
TYPE link=^personal;
personal=RECORD
name:PACKED ARRAY[1..30] OF char;
next:link
END;
VAR item,pointer:link;
PROCEDURE readname(VAR newname:link);
{This procedure reads a name into the computer}
VAR count:0..40;
BEGIN
FOR count:=1 TO 40 DO
newname^.name[count]:=' ';
write('New name: ');
count:=0;
WHILE NOT eoln DO
BEGIN
count:=count+1;
read(newname^.name[count])
END;
readln
END;
BEGIN
BEGIN
new(item);
readname(item);
item^.next:=NIL;
pointer:=item;
WHILE NOT ((item^.name[1] IN ['E','e'])
AND (item^.name[2] IN ['N','n'])
AND (item^.name[3] IN ['D','d'])) DO
BEGIN
new(item);
readname(item);
item^.next:=pointer;
pointer:=item;
END;
pointer:=item^.next
END;
BEGIN
writeln;
WHILE pointer<>NIL DO
BEGIN
item:=pointer;
writeln(item^.name);
pointer:=item^.next
END;
END;
END.
© Copyrights Madhu Sudan Rao G.K