[Webinar] Streamline your web hosting managementRegister Today

x
?
Solved

Interpreting codes

Posted on 2000-03-26
1
Medium Priority
?
221 Views
Last Modified: 2010-04-16
Help! Help!, can you please help me I have been learning to program in Borland Pascal for some months now. I wrote the codes for a bookcase program using link list and pointers, I Sent my codes to Expert exchange about 5 weeks ago for help on writing two extra procedures for sorting and deleting books from the list.

The reply was excellent they both work but looking at it I do not really understand clearly how the codes work.
I would be eternally grateful if you could place a line by line comment on what is happening in the two procedures
as I am Practically teaching my self programming with a little help from a friend when he can find the time which is rarely. 100 point is yours see codes below

Many many thanks
--------------------------------------

procedure Display;{display deleted books}
 var
     ch  :char;
 begin
   writeln;
    writeln(space:10,'!!!!--  LIST OF DELETED BOOKS -!!!!: ');
     writeln(space:10,'**************************************');
     if delhead=nil then writeln(space:10,'No Books were deleted')
     else
     Begin
          del:=delhead;
   repeat
   write(space:10,'NAME OF BOOK >: ', del^.Name);
   writeln;
   writeln;
   writeln(space:10,'AUTHOR       >: ', del^.Author);
   writeln;
   writeln(space:10,'PUBLISHER    >: ', del^.Publisher);
   writeln;
   writeln(space:10,'YEAR         >: ',  del^.Year);
   writeln;
   writeln(space:10,'PAGES        >: ', del^.pages);
   writeln;
   writeln(space:10,'SIZE         >: ', del^.size);
   writeln;
   writeln(space:10,'SALE PRICE   >: ', del^.SalePrice);
   writeln;
   writeln(space:10,'Brief Introduction: ', del^.briefdescription);
   writeln;
   write('Do you want to view next book? ');
   read(ch);
   readln;
   del:=del^.next;
   if del=nil then break;
   Until upcase(ch)='N';
   write('End of list of deleted books.');
   readln;
   ClrScr;
     end;
     writeln;
end;

------------------------------------
{Procedure for sorting books in ascending order}

procedure sort;
var node1,node2 : link;
    m,n : integer;
procedure swap(n1,n2 : link);
var temp: booknode;
begin

       temp:=n1^;

       n1^.Pages:=n2^.Pages;
       n1^.Year:=n2^.Year;
       n1^.Author:=n2^.Author;
       n1^.Publisher:=n2^.Publisher;
       n1^.Name:=n2^.Name;
       n1^.SalePrice:=n2^.SalePrice;
       n1^.Size:=n2^.Size;
       n1^.BriefDescription:=n2^.BriefDescription;

       n2^.Pages:=temp.Pages;
       n2^.Year:=temp.Year;
       n2^.Author:=temp.Author;
       n2^.Publisher:=temp.Publisher;
       n2^.Name:=temp.Name;
       n2^.SalePrice:=temp.SalePrice;
       n2^.Size:=temp.Size;
       n2^.BriefDescription:=temp.BriefDescription;

end;
begin
      writeln;
      write('Sorting the list taking yearofbook as primary key.');
      node1:=head;

      for m:=1 to count-1 do
      begin
           node2:=node1^.next;
           for n:=m+1 to count do
           begin
                if node1^.year > node2^.year then
                begin
                      swap(node1,node2);
                end;
                node2:=node2^.next;
                write('.');
           end;
           node1:=node1^.next;
      end;
      writeln;
      writeln('Sorting complete.');
      readln;
      clrscr;
end;


0
Comment
Question by:greenfly
1 Comment
 
LVL 1

Accepted Solution

by:
guyss earned 400 total points
ID: 2660453
procedure Display;{display deleted books}
 var
     ch  :char;
 begin
{ print list header }
   writeln;
    writeln(space:10,'!!!!--  LIST OF DELETED BOOKS -!!!!: ');
     writeln(space:10,'**************************************');
{ delhead points to the head of the list so we never change it !! }
{ if it equals nil the list is empty }
     if delhead=nil then writeln(space:10,'No Books were deleted')
     else
{ otherwise... }
     Begin
{ set del to delchange }
          del:=delhead;
   repeat
{ write book information }
{ del is a pointer so del^ is the structure it points to and del^.Name is the Name field in the structure del points to }
   write(space:10,'NAME OF BOOK >: ', del^.Name);
   writeln;
   writeln;
   writeln(space:10,'AUTHOR       >: ', del^.Author);
   writeln;
   writeln(space:10,'PUBLISHER    >: ', del^.Publisher);
   writeln;
   writeln(space:10,'YEAR         >: ',  del^.Year);
   writeln;
   writeln(space:10,'PAGES        >: ', del^.pages);
   writeln;
   writeln(space:10,'SIZE         >: ', del^.size);
   writeln;
   writeln(space:10,'SALE PRICE   >: ', del^.SalePrice);
   writeln;
   writeln(space:10,'Brief Introduction: ', del^.briefdescription);
   writeln;
   write('Do you want to view next book? ');
   read(ch);
   readln;
{ set del to the next field in the record del points to --> will move del
to the next record...
this is the way a linked list works. }
   del:=del^.next;
{ if the next field was nil, we have reached the end of the records ,
we'll exit the loop }
   if del=nil then break;
{ also exit if user pressed 'n' or 'N'}
   Until upcase(ch)='N';
{ print list footer }
   write('End of list of deleted books.');
{ wait for a character }
   readln;
{ clear screen }
   ClrScr;
     end;
     writeln;
end;

------------------------------------
{Procedure for sorting books in ascending order}

procedure sort;
var node1,node2 : link;
    m,n : integer;

{ swaps information between two books }
procedure swap(n1,n2 : link);
var temp: booknode;
begin
{ copy all information in the record n1 points to into temp, notice temp is not a pointer }
       temp:=n1^;

{ copy information from n2 into n1 field
by field. }
{ the reason we can't copy the entire record is that both are pointers and}
{ the result of n1:=n2 would be both pointers pointing to the same record...
but no copy operation takes place
}
       n1^.Pages:=n2^.Pages;
       n1^.Year:=n2^.Year;
       n1^.Author:=n2^.Author;
       n1^.Publisher:=n2^.Publisher;
       n1^.Name:=n2^.Name;
       n1^.SalePrice:=n2^.SalePrice;
       n1^.Size:=n2^.Size;
       n1^.BriefDescription:=n2^.BriefDescription;

{ copy from temp into n2 }
       n2^.Pages:=temp.Pages;
       n2^.Year:=temp.Year;
       n2^.Author:=temp.Author;
       n2^.Publisher:=temp.Publisher;
       n2^.Name:=temp.Name;
       n2^.SalePrice:=temp.SalePrice;
       n2^.Size:=temp.Size;
       n2^.BriefDescription:=temp.BriefDescription;

end;
{ start of sort procedure }
begin
      writeln;
      write('Sorting the list taking yearofbook as primary key.');
{ set node to the first record }
      node1:=head;
{ we are going to use a bubble-sort procedure here, just check every adjustant pair of books and swap if neccesary }
{ by doing ths enough times every book will end up in the right place }
      for m:=1 to count-1 do
      begin
{ set node2 to the record following the record node1 points to }
           node2:=node1^.next;
{ go through the entire list }
           for n:=m+1 to count do
           begin
{ check if we need to swap }
                if node1^.year > node2^.year then
                begin
{ swap them }
                      swap(node1,node2);
                end;
{ advance node2 }
                node2:=node2^.next;
{ write progress indicator }
                write('.');
           end;
{ advance node1 }
           node1:=node1^.next;
      end;
{ end of sort procedure }
{ write footer }
      writeln;
      writeln('Sorting complete.');
      readln;
      clrscr;
end;


{ hope this helps.. }
0

Featured Post

Free Tool: Port Scanner

Check which ports are open to the outside world. Helps make sure that your firewall rules are working as intended.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Take advantage of one of the most useful technologies available - virtualization!
The PowerShell Core 6.0 of .NET release is just the beginning. The upcoming PowerShell Core 6.1 would have artificial intelligence and internet of things capabilities. So many things to look forward to in the upcoming release.
Planning to migrate your EDB file(s) to a new or an existing Outlook PST file? This video will guide you how to convert EDB file(s) to PST. Besides this, it also describes, how one can easily search any item(s) from multiple folders or mailboxes…
Is your organization moving toward a cloud and mobile-first environment? In this transition, your IT department will encounter many challenges, such as navigating how to: Deploy new applications and services to a growing team Accommodate employee…

607 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question