Solved

Interpreting codes

Posted on 2000-03-26
1
207 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 100 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: Site Down Detector

Helpful to verify reports of your own downtime, or to double check a downed website you are trying to access.

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

Suggested Solutions

In this article we will learn how to fix  “Cannot install SQL Server 2014 Service Pack 2: Unable to install windows installer msi file” error ?
The business world is becoming increasingly integrated with tech. It’s not just for a select few anymore — but what about if you have a small business? It may be easier than you think to integrate technology into your small business, and it’s likely…
Two types of users will appreciate AOMEI Backupper Pro: 1 - Those with PCIe drives (and haven't found cloning software that works on them). 2 - Those who want a fast clone of their boot drive (no re-boots needed) and it can clone your drive wh…

860 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