100% found this document useful (4 votes)
19 views

(eBook PDF) Big C++: Late Objects 3rd Editionpdf download

The document provides information about the 'Big C++: Late Objects 3rd Edition' eBook, including its pedagogical features designed to enhance student learning in programming. It outlines the structure of the book, which is divided into three parts: Fundamentals, Object-Oriented Design, and Data Structures and Algorithms, along with various learning aids such as example tables and algorithm animations. Additionally, it offers links to download the eBook and other related titles from the same publisher.

Uploaded by

jancarjogot
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
100% found this document useful (4 votes)
19 views

(eBook PDF) Big C++: Late Objects 3rd Editionpdf download

The document provides information about the 'Big C++: Late Objects 3rd Edition' eBook, including its pedagogical features designed to enhance student learning in programming. It outlines the structure of the book, which is divided into three parts: Fundamentals, Object-Oriented Design, and Data Structures and Algorithms, along with various learning aids such as example tables and algorithm animations. Additionally, it offers links to download the eBook and other related titles from the same publisher.

Uploaded by

jancarjogot
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 48

(eBook PDF) Big C++: Late Objects 3rd Edition

download

https://ebookluna.com/product/ebook-pdf-big-c-late-objects-3rd-
edition/

Download more ebook from https://ebookluna.com


We believe these products will be a great fit for you. Click
the link to download now, or visit ebookluna.com
to discover even more!

(eBook PDF) Brief C++: Late Objects, 3rd Edition

https://ebookluna.com/product/ebook-pdf-brief-c-late-objects-3rd-edition/

(eBook PDF) Big Java Late Objects 2nd Edition

https://ebookluna.com/product/ebook-pdf-big-java-late-objects-2nd-edition/

(eBook PDF) Java Concepts: Late Objects, 3rd Edition

https://ebookluna.com/product/ebook-pdf-java-concepts-late-objects-3rd-
edition/

(eBook PDF) Big Java: Early Objects 5th Edition

https://ebookluna.com/product/ebook-pdf-big-java-early-objects-5th-edition/
(eBook PDF) Big Java: Early Objects, 7th Edition

https://ebookluna.com/product/ebook-pdf-big-java-early-objects-7th-edition/

(eBook PDF) Java How to Program, Late Objects Global Edition 11th Edition

https://ebookluna.com/product/ebook-pdf-java-how-to-program-late-objects-
global-edition-11th-edition/

(eBook PDF) Big Java: Early Objects, 6th Edition by Cay S. Horstmann

https://ebookluna.com/product/ebook-pdf-big-java-early-objects-6th-edition-
by-cay-s-horstmann/

(eBook PDF) Starting Out with C++: Early Objects 9th Edition

https://ebookluna.com/product/ebook-pdf-starting-out-with-c-early-
objects-9th-edition/

C++ How to Program Early Objects Version 9th Edition (eBook PDF)

https://ebookluna.com/product/c-how-to-program-early-objects-version-9th-
edition-ebook-pdf/
BigC++
Cay Horstmann
Late
Objects

3/e
vi Preface

Example Table Example table activities make the student the active participant in
building up tables of code examples similar to those found in the book. The tables
come in many different forms. Some tables ask the student to determine the output of
a line of code, or the value of an expression, or to provide code for certain tasks. This
activity helps students assess their understanding of the reading—while it is easy to
go back and review.
Algorithm Animation An algorithm animation shows the essential steps of an
algorithm. However, instead of passively watching, students get to predict each step.
When finished, students can start over with a different set of inputs. This is a surpris-
ingly effective way of learning and remembering algorithms.
Rearrange Code Rearrange code activities ask the student to arrange lines of code
by dragging them from the list on the right to the area at left so that the resulting code
fulfills the task described in the problem. This activity builds facility with coding
structure and implementing common algorithms.
Object Diagram Object diagram activities ask the student to create a memory
diagram to illustrate how variables and objects are initialized and updated as sample
code executes. The activity depicts variables, objects, and references in the same way
as the figures in the book. After an activity is completed, pressing “Play” replays the
animation. This activity goes beyond hand-tracing to illuminate what is happening in
memory as code executes.
Code Completion Code completion activities ask the student to finish a partially-
completed program, then paste the solution into CodeCheck (a Wiley-based online
code evaluator) to learn whether it produces the desired result. Tester classes on the
CodeCheck site run and report whether the code passed the tests. This activity serves
as a skill-building lab to better prepare the student for writing programs from scratch.

A Tour of the Book


This book is intended for a two-semester introduction to programming that may also
include algorithms and data structures. The organization of chapters offers the same
flexibility as the previous edition; dependencies among the chapters are also shown
in Figure 1.

Part A: Fundamentals (Chapters 1–8)


The first six chapters follow a traditional approach to basic programming concepts.
Students learn about control structures, stepwise refinement, and arrays. Objects are
used only for input/output and string processing. Input/output is first covered in
Chapter 2, which may be followed by an introduction to reading and writing text
files in Section 8.1.
In a course for engineers with a need for systems and embedded programming,
you will want to cover Chapter 7 on pointers. Sections 7.1 and 7.4 are sufficient for
using pointers with polymorphism in Chapter 10.
File processing is the subject of Chapter 8. Section 8.1 can be covered sooner for
an intro­duction to reading and writing text files. The remainder of the chapter gives
addi­tional material for practical applications.
Preface vii

Part B: Object-Oriented Design (Chapters 9–10)


After students have gained a solid foundation, they are ready to tackle the implemen-
tation of classes. Chapters 9 and 10 introduce the object-oriented features of C++.
Chapter 9 introduces class design and implementation. Chapter 10 covers inheritance
and polymorphism. By the end of these chapters, students will be able to implement
programs with multiple interacting classes.

Part C: Data Structures and Algorithms (Chapters 11–17)


Chapters 11–17 cover algorithms and data structures at a level suitable for begin-
ning students. Recursion, in Chapter 11, starts with simple examples and progresses

Fundamentals
1. Introduction
Object-Oriented Design
Data Structures & Algorithms

2. Fundamental
Data Types

3. Decisions

4. Loops

A gentle
introduction to recursion
5. Functions is optional.
Section 8.1
contains the core
material
6. Arrays
6. Iteration
and Vectors

7. Pointers 8. Streams 9. Classes 11. Recursion

Sections 10. Inheritance 13. Advanced 12. Sorting


C++ and Searching
7.1 and 7.4 are
required
14. Linked Lists,
Stacks and Queues

15. Sets, Maps


Section 15.1
and Hash Tables
is required

16. Trees

Figure 1 17. Priority


Queues and Heaps
Chapter Dependencies
viii Preface

to meaningful applications that would be difficult to implement iteratively. Chapter


12 covers quadratic sorting algorithms as well as merge sort, with an informal intro-
duction to big-Oh notation. Chapter 13 introduces advanced C++ features that are
required for implementing data structures, including templates and memory man-
agement. Chapters 14–17 cover linear and tree-based data structures. Students learn
how to use the standard C++ library versions. They then study the implementations
of these data structures and analyze their efficiency.
Any subset of these chapters can be incorporated into a custom print version of
this text; ask your Wiley sales representative for details, or visit customselect.wiley.com
to create your custom order.

Appendices
Appendices A and B summarize C++ reserved words and operators. Appendix C
lists character escape sequences and ASCII character code values. Appendix D docu-
ments all of the library functions and classes used in this book.
Appendix E contains a programming style guide. Using a style guide for program­
ming assignments benefits students by directing them toward good habits and reduc-
ing gratuitous choice. The style guide is available in electronic form on the book’s
companion web site so that instructors can modify it to reflect their preferred style.
Appendix F introduces common number systems used in computing.

Web Resources
This book is complemented by a complete suite of online resources. Go to www.wiley.
com/go/bclo3 to visit the online companion sites, which include

• Source code for all example programs in the book and its Worked Examples, plus
additional example programs.
• Worked Examples that apply the problem-solving steps in the book to other
realistic examples.
• Lecture presentation slides (for instructors only).
• Solutions to all review and programming exercises (for instructors only).
• A test bank that focuses on skills, not just terminology (for instructors only). This
extensive set of multiple-choice questions can be used with a word processor or
imported into a course management system.
• “CodeCheck” assignments that allow students to work on programming prob-
lems presented in an innovative online service and receive immediate feedback.
Instructors can assign exercises that have already been prepared, or easily add
their own. Visit http://codecheck.it to learn more.

Pointers in the print


companion describe what
students will find in their WORKED EXAMPLE 2.1
Computing Travel Time
E-Text or online.
Learn how to develop a hand calculation to compute the time that
a robot requires to retrieve an item from rocky terrain. See your
.
E-Text or visit wiley.com/go/bclo3
Courtesy of NASA.

EXAMPLE CODE See how_to_1/scores_vector in your companion code for a solution using vectors instead of arrays.
Walkthrough ix

A Walkthrough of the Learning Aids


The pedagogical elements in this book work together to focus on and reinforce key
concepts and fundamental principles of programming, with additional tips and detail
organized to support and deepen these fundamentals. In addition to traditional
features, such as chapter objectives and a wealth of exercises, each chapter contains
elements geared to today’s visual learner.

106 Chapter 4 Loops

4.3 The for Loop


Throughout each chapter,
It often happens that you want to execute a sequence of
margin notes show where The for loop is
used when a statements a given number of times. You can use a while
value runs from a loop that is controlled by a counter, as in the following
new concepts are introduced starting point to an
ending point with a
example:
and provide an outline of key ideas. constant increment
or decrement.
counter = 1; // Initialize the counter
while (counter <= 10) // Check the counter
{
cout << counter << endl;
counter++; // Update the counter
}

Because this loop type is so common, there is a special


form for it, called the for loop (see Syntax 4.2).
for (counter = 1; counter <= 10; counter++)
{
© Enrico Fianchini/iStockphoto.
cout << counter << endl;
}
You can visualize the
Some people call this loop count-controlled. In contrast, for loop as an orderly
the while loop of the preceding section can be called an sequence of steps.
event-controlled loop because it executes until an event
occurs (for example, when the balance reaches the target). Another commonly-used
Annotated syntax boxes term for a count-controlled loop is definite. You know from the outset that the loop
body will be executed a definite number of times––ten times in our example. In con-
provide a quick, visual overview trast, you do not know how many iterations it takes to accumulate a target balance.
Such a loop is called indefinite.
of new language constructs.
Syntax 4.2 for Statement

These three
expressions should be related.
See Programming Tip 4.1.

Annotations explain This initialization The loop is This update is


required components happens once
before the loop starts.
executed while
this condition is true.
executed after
each iteration.
and point to more information for (int i = 5; i <= 10; i++)

on common errors or best practices The variable i is


{
sum = sum + i;
This loop executes 6 times.
associated with the syntax. defined only in this
for loop.
}
See Programming Tip 4.3.

The for loop neatly groups the initialization, condition, and update expressions
together. However, it is important to realize that these expressions are not executed
together (see Figure 3).

Analogies to everyday objects are


used to explain the nature and behavior
of concepts such as variables, data
Like a variable in a computer types, loops, and more.
program, a parking space has
an identifier and contents.
x Walkthrough

Memorable photos reinforce


analogies and help students
remember the concepts. pie(fruit) pie(fruit)

A recipe for a fruit pie may say to use any kind of fruit.
Here, “fruit” is an example of a parameter variable.
Apples and cherries are examples of arguments.

Problem Solving sections teach


techniques for generating ideas and
6.5 Problem Solving: Discovering Algorithms by Manipulating Physical Objects 277
evaluating proposed solutions, often
using pencil and paper or other Now how does that help us with our problem, switching the first and the second
half of the array?
artifacts. These sections emphasize Let’s put the first coin into place, by swapping it with the fifth coin. However, as
C++ programmers, we will say that we swap the coins in positions 0 and 4:
that most of the planning and problem
solving that makes students successful
happens away from the computer.

Next, we swap the coins in positions 1 and 5:

HOW TO 1.1
Describing an Algorithm with Pseudocode
This is the first of many “How To” sections in this book that give you step-by-step proce-
dures for carrying out important tasks in developing computer programs.
Before you are ready to write a program in C++, you need to develop an algorithm—a
method for arriving at a solution for a particular problem. Describe the algorithm in pseudo-
code––a sequence of precise steps formulated in English. To illustrate, we’ll devise an algo-
rithm for this problem:
How To guides give step-by-step
Problem Statement You have the choice of buying one guidance for common programming
of two cars. One is more fuel efficient than the other, but also
more expensive. You know the price and fuel efficiency (in miles tasks, emphasizing planning and
per gallon, mpg) of both cars. You plan to keep the car for ten
years. Assume a price of $4 per gallon of gas and usage of 15,000 testing. They answer the beginner’s
miles per year. You will pay cash for the car and not worry about
financing costs. Which car is the better deal? © dlewis33/Getty Images. question, “Now what do I do?” and
Step 1 Determine the inputs and outputs. integrate key concepts into a
In our sample problem, we have these inputs: problem-solving sequence.
• purchase price1 and fuel efficiency1, the price and fuel efficiency (in mpg) of the first car
• purchase price2 and fuel efficiency2, the price and fuel efficiency of the second car

WORKED EXAMPLE 1.1


Writing an Algorithm for Tiling a Floor

Problem Statement Your task is to tile a rectangular bathroom floor with alternating Worked Examples apply
black and white tiles measuring 4 × 4 inches. The floor dimensions, measured in inches, are
multiples of 4. the steps in the How To to
Step 1 Determine the inputs and outputs.
a different example, showing
The inputs are the floor dimensions (length × width), how they can be used to
measured in inches. The output is a tiled floor.
Step 2 Break down the problem into smaller tasks.
plan, implement, and test
A natural subtask is to lay one row of tiles. If you can a solution to another
solve that task, then you can solve the problem by lay-
ing one row next to the other, starting from a wall, until programming problem.
you reach the opposite wall.
How do you lay a row? Start with a tile at one wall.
If it is Names
Table 3 Variable white, putin
a black
C++ one next to it. If it is black, put
a white one next to it. Keep going until you reach the
Variable Name wall. The row will contain width / 4 tiles.
opposite Comment © rban/iStockphoto.

Step 3 Describe each subtask in pseudocode.


can_volume1 Variable names consist of letters, numbers, and the underscore
character.
x In mathematics, you use short variable names such as x or y. This is
legal in C++, but not very common, because it can make programs
harder to understand (see Programming Tip 2.1). Example tables support beginners
!
Can_volume Caution: Variable names are case sensitive. This variable name is with multiple, concrete examples.
different from can_volume.
These tables point out common
6pack Error: Variable names cannot start with a number.

can volume Error: Variable names cannot contain spaces.


errors and present another quick
double Error: You cannot use a reserved word as a variable name. reference to the section’s topic.
ltr/fl.oz Error: You cannot use symbols such as . or /
Walkthrough xi

Consider the function call illustrated in Figure 3:


double result1 = cube_volume(2); Progressive figures trace code
• The parameter variable side_length of the cube_volume function is created. ❶
• The parameter variable is initialized with the value of the argument that was
segments to help students visualize
passed in the call. In our case, side_length is set to 2. ❷ the program flow. Color is used
• The function computes the expression side_length * side_length * side_length,
which has the value 8. That value is stored in the variable volume. ❸ consistently to make variables and
• The function returns. All of its variables are removed. The return value is trans-
ferred to the caller, that is, the function calling the cube_volume function. ❹
other elements easily recognizable.

1 Function call result1 =


double result1 = cube_volume(2);

1 Initialize counter
side_length = for (counter = 1; counter <= 10; counter++)
{
cout << counter << endl;
2 Initializing function parameter variable counter = 1 }
result1 =
double result1 = cube_volume(2);
2 Check condition
side_length = for (counter = 1; counter <= 10; counter++)
2
{
cout << counter << endl;
counter = 1 }
3 About to return to the caller result1 =

3 Execute loop body


for (counter = 1; counter <= 10; counter++)
side_length = 2 {
double volume = side_length * side_length * side_length;
return volume; cout << counter << endl;
volume = 8 counter = 1 }

4 After function call result1 = 8 4 Update counter


for (counter = 1; counter <= 10; counter++)
double result1 = cube_volume(2); {
cout << counter << endl;
counter = 2 }
Figure 3 Parameter Passing

5 Check condition again


for (counter = 1; counter <= 10; counter++)
{
cout << counter << endl;
counter = 2 }

Figure 3 Execution of a for Loop


Optional engineering exercises
engage students with applications
from technical fields. Engineering P7.12 Write a program that simulates the control
software for a “people mover” system, a set of
driverless trains that move in two concentric
circular tracks. A set of switches allows trains
to switch tracks.
In your program, the outer and inner tracks
should each be divided into ten segments.
Each track segment can contain a train that
moves either clockwise or counterclockwise.
sec02/cube.cpp A train moves to an adjacent segment in its track or, if that segment is occupied, to
the adjacent segment in the other track.
1 #include <iostream>
2 Define a Segment structure. Each segment has a pointer to the next and previous
3 using namespace std; segments in its track, a pointer to the next and previous segments in the other track,
4
5 /**
6 Computes the volume of a cube.
7 @param side_length the side length of the cube
8 @return the volume
9 */
10 double cube_volume(double side_length)
11 {
12 double volume = side_length * side_length * side_length;
13 return volume;
14 }
15
16 int main()
Program listings are carefully
17
18
{
double result1 = cube_volume(2); designed for easy reading,
double result2 = cube_volume(10);
19
20 cout << "A cube with side length 2 has volume " << result1 << endl; going well beyond simple
21 cout << "A cube with side length 10 has volume " << result2 << endl;
22 color coding. Functions are set
23 return 0;
24 } off by a subtle outline.
Program Run
A cube with side length 2 has volume 8
A cube with side length 10 has volume 1000

EXAMPLE CODE See sec04 of your companion code for another implementation of the earthquake program that you
Additional example programs
saw in Section 3.3. Note that the get_description function has multiple return statements.
are provided with the companion
code for students to read, run,
and modify.
xii Walkthrough

Common Errors describe the kinds Common Error 2.1


Using Undefined Variables
of errors that students often make, You must define a variable before you use it for the first time. For example, the following
with an explanation of why the errors sequence of statements would not be legal:
double can_volume = 12 * liter_per_ounce;
occur, and what to do about them. double liter_per_ounce = 0.0296;
In your program, the statements are compiled in order. When the compiler reaches the first
statement, it does not know that liter_per_ounce will be defined in the next line, and it reports
an error.

Programming Tip 3.6


Hand-Tracing
A very useful technique for understanding whether a program
works correctly is called hand-tracing. You simulate the pro-
gram’s activity on a sheet of paper. You can use this method with
pseudocode or C++ code.
Get an index card, a cocktail napkin, or whatever sheet of
Programming Tips explain paper is within reach. Make a column for each variable. Have the
program code ready. Use a marker, such as a paper clip, to mark
good programming practices, the current statement. In your mind, execute statements one at a
time. Every time the value of a variable changes, cross out the old
and encourage students to be value and write the new value below the old one.
© thomasd007/iStockphoto.

For example, let’s trace the tax program with the data from the
more productive with tips and program run in Section 3.4. In lines 13 and 14, tax1 and tax2 are
Hand-tracing helps you
understand whether a
initialized to 0. program works correctly.
techniques such as hand-tracing. 6 int main()
7 {
8 const double RATE1 = 0.10; marital
9 const double RATE2 = 0.25; tax1 tax2 income status
10 const double RATE1_SINGLE_LIMIT = 32000;
11 const double RATE1_MARRIED_LIMIT = 64000; 0 0
12
13 double tax1 = 0;
14 double tax2 = 0;
15

In lines 18 and 22, income and marital_status are initialized by input statements.
16 double income;
17 cout << "Please enter your income: ";
18 cin >> income; marital
19 tax1 tax2 income status
20 cout << "Please enter s for single, m for married: ";
21 string marital_status; 0 0 80000 m
22 cin >> marital_status;
23

Because marital_status is not "s", we move to the else


branch of the outer if statement (line 36).
24 if (marital_status == "s")
25 {
26 if (income <= RATE1_SINGLE_LIMIT)
27
28
{ Special Topic 6.5
tax1 = RATE1 * income;
29
30
}
else The Range-Based for Loop
31 {
32 C++ 11 introduces a convenient syntax for visiting all elements in a “range” or sequence of ele-
tax1 = RATE1 * RATE1_SINGLE_LIMIT;
ments. This loop displays all elements in a vector:
vector<int> values = {1, 4, 9, 16, 25, 36};
for (int v : values)
{
cout << v << " ";
}

Special Topics present optional In each iteration of the loop, v is set to an element of the vector. Note that you do not use an
index variable. The value of v is the element, not the index of the element.
topics and provide additional If you want to modify elements, declare the loop variable as a reference:
for (int& v : values)
explanation of others. {
v++;
}
This loop increments all elements of the vector.
You can use the reserved word auto, which was introduced in Special Topic 2.3, for the type
of the element variable:
for (auto v : values) { cout << v << " "; }
The range-based for loop also works for arrays:
int primes[] = { 2, 3, 5, 7, 11, 13 };
for (int p : primes)
{
cout << p << " ";
}
Computing & Society 7.1 Embedded Systems The range-based for loop is a convenient shortcut for visiting or updating all elements of a
vector or an array. This book doesn’t use it because one can achieve the same result by looping
An embedded sys- would feel comfortable upgrading the duced in large volumes. Thus, the pro-
tem is a computer software in their washing machines grammer of an embedded system has
over index values. But if you like the more concise form, and use C++ 11 or later, you should
system that controls a device. The or automobile engines. If you ever a much larger economic incentive to certainly consider using it.
device contains a processor and other handed in a programming assignment conserve resources than the desktop
EXAMPLE CODE See special_topic_5 of your companion code for a program that demonstrates the range-based
hardware and is controlled by a com- that you believed to be correct, only to software programmer. Unfortunately, for loop.
puter program. Unlike a personal have the instructor or grader find bugs trying to conserve resources usually
computer, which has been designed in it, then you know how hard it is to makes it harder to write programs that
to be flexible and run many different write software that can reliably do its work correctly.
computer programs, the hardware task for many years without a chance C and C++ are commonly used
and software of an embedded system of changing it. Quality standards are languages for developing embedded
are tailored to a specific device. Com- especially important in devices whose systems.
puter controlled devices are becom- failure would destroy property or
ing increasingly common, ranging endanger human life. Many personal
from washing machines to medical computer purchasers buy computers Computing & Society presents social
equipment, cell phones, automobile that are fast and have a lot of stor-
engines, and spacecraft.
Several challenges are specific to
age, because the investment is paid
back over time when many programs
and historical topics on computing—for
programming embedded systems.
Most importantly, a much higher stan-
are run on the same equipment. But
the hardware for an embedded device
interest and to fulfill the “historical and
dard of quality control applies. Ven-
dors are often unconcerned about
is not shared––it is dedicated to one
device. A separate processor, memory,
social context” requirements of the
bugs in personal computer software,
because they can always make you
and so on, are built for every copy of
the device. If it is possible to shave a ACM/IEEE curriculum guidelines.
install a patch or upgrade to the next few pennies off the manufacturing © Courtesy of Professor Prabal Dutta.
version. But in an embedded system, cost of every unit, the savings can add
that is not an option. Few consumers up quickly for devices that are pro- The Controller of an Embedded System
Walkthrough xiii

Interactive activities in the E-Text


engage students in active reading as they…

Trace through a code segment

Build an example table

Explore common algorithms

Arrange code to fulfill a task

Complete a program and Create a memory diagram


get immediate feedback
Acknowledgments xv

Acknowledgments
Many thanks to Don Fowley, Graig Donini, Dan Sayre, Ryann Dannelly, David
Dietz, Laura Abrams, and Billy Ray at John Wiley & Sons for their help with this
project. An especially deep acknowledgment and thanks goes to Cindy Johnson for
her hard work, sound judgment, and amazing attention to detail.
I am grateful to Mark Atkins, Ivy Technical College, Katie Livsie, Gaston College,
Larry Morell, Arkansas Tech University, and Rama Olson, Gaston College, for
their contributions to the supplemental material. Special thanks to Stephen Gilbert,
Orange Coast Community College, for his help with the interactive exercises.
Every new edition builds on the suggestions and experiences of new and prior
reviewers, contributors, and users. We are very grateful to the individuals who pro-
vided feedback, reviewed the manuscript, made valuable suggestions and contribu-
tions, and brought errors and omissions to my attention. They include:
Charles D. Allison, Utah Valley State College
Fred Annexstein, University of Cincinnati
Mark Atkins, Ivy Technical College
Stefano Basagni, Northeastern University
Noah D. Barnette, Virginia Tech
Susan Bickford, Tallahassee Community College
Ronald D. Bowman, University of Alabama, Huntsville
Robert Burton, Brigham Young University
Peter Breznay, University of Wisconsin, Green Bay
Richard Cacace, Pensacola Junior College, Pensacola
Kuang-Nan Chang, Eastern Kentucky University
Joseph DeLibero, Arizona State University
Subramaniam Dharmarajan, Arizona State University
Mary Dorf, University of Michigan
Marty Dulberg, North Carolina State University
William E. Duncan, Louisiana State University
John Estell, Ohio Northern University
Waleed Farag, Indiana University of Pennsylvania
Evan Gallagher, Polytechnic Institute of New York University
Stephen Gilbert, Orange Coast Community College
Kenneth Gitlitz, New Hampshire Technical Institute
Daniel Grigoletti, DeVry Institute of Technology, Tinley Park
Barbara Guillott, Louisiana State University
Charles Halsey, Richland College
Jon Hanrath, Illinois Institute of Technology
Neil Harrison, Utah Valley University
Jurgen Hecht, University of Ontario
Steve Hodges, Cabrillo College
xvi Acknowledgments

Jackie Jarboe, Boise State University


Debbie Kaneko, Old Dominion University
Mir Behrad Khamesee, University of Waterloo
Sung-Sik Kwon, North Carolina Central University
Lorrie Lehman, University of North Carolina, Charlotte
Cynthia Lester, Tuskegee University
Yanjun Li, Fordham University
W. James MacLean, University of Toronto
LindaLee Massoud, Mott Community College
Adelaida Medlock, Drexel University
Charles W. Mellard, DeVry Institute of Technology, Irving
Larry Morell, Arkansas Tech University
Ethan V. Munson, University of Wisconsin, Milwaukee
Arun Ravindran, University of North Carolina at Charlotte
Philip Regalbuto, Trident Technical College
Don Retzlaff, University of North Texas
Jeff Ringenberg, University of Michigan, Ann Arbor
John P. Russo, Wentworth Institute of Technology
Kurt Schmidt, Drexel University
Brent Seales, University of Kentucky
William Shay, University of Wisconsin, Green Bay
Michele A. Starkey, Mount Saint Mary College
William Stockwell, University of Central Oklahoma
Jonathan Tolstedt, North Dakota State University
Boyd Trolinger, Butte College
Muharrem Uyar, City College of New York
Mahendra Velauthapillai, Georgetown University
Kerstin Voigt, California State University, San Bernardino
David P. Voorhees, Le Moyne College
Salih Yurttas, Texas A&M University

A special thank you to all of our class testers:


Pani Chakrapani and the students of the University of Redlands
Jim Mackowiak and the students of Long Beach City College, LAC
Suresh Muknahallipatna and the students of the University of Wyoming
Murlidharan Nair and the students of the Indiana University of South Bend
Harriette Roadman and the students of New River Community College
David Topham and the students of Ohlone College
Dennie Van Tassel and the students of Gavilan College
CONTENTS
PREFACE iii PT2 Do Not Use Magic Numbers 34
SPECIAL FEATURES xxiv ST1 Numeric Types in C++ 34
ST2 Numeric Ranges and Precisions 35
ST3 Defining Variables with auto 35
1 INTRODUCTION 1
2.2 Arithmetic  36
1.1 What Is Programming?   2 Arithmetic Operators  36
1.2 The Anatomy of a Computer   3 Increment and Decrement   36
Integer Division and Remainder   36
C&S Computers Are Everywhere 5
Converting Floating-Point Numbers to
1.3 Machine Code and Programming Integers  37
Languages  5 Powers and Roots   38
C&S Standards Organizations 7 CE3 Unintended Integer Division 39
1.4 Becoming Familiar with Your CE4 Unbalanced Parentheses 40
Programming Environment   7 CE5 Forgetting Header Files 40
PT1 Backup Copies 10 CE6 Roundoff Errors 41
PT3 Spaces in Expressions 42
1.5 Analyzing Your First Program   11
ST4 Casts 42
CE1 Omitting Semicolons 13
ST5 Combining Assignment and Arithmetic 42
ST1 Escape Sequences 13
C&S The Pentium Floating-Point Bug 43
1.6 Errors  14
2.3 Input and Output   44
CE2 Misspelling Words 15
Input  44
1.7 PROBLEM SOLVING Algorithm Design   16
Formatted Output  45
The Algorithm Concept   16
2.4 PROBLEM SOLVING First Do It By Hand   47
An Algorithm for Solving an Investment
Problem  17 WE1 Computing Travel Time 48
Pseudocode  18 HT1 Carrying out Computations 48
From Algorithms to Programs   19 WE2 Computing the Cost of Stamps 51
HT1 Describing an Algorithm with 2.5 Strings  51
Pseudocode 19
The string Type  51
WE1 Writing an Algorithm for Tiling a Floor 21
Concatenation  52
String Input  52
2 FUNDAMENTAL DATA String Functions  52
TYPES 25 C&S International Alphabets and Unicode 55

2.1 Variables  26
3 DECISIONS 59
Variable Definitions  26
Number Types  28 3.1 The if Statement   60
Variable Names    29 CE1 A Semicolon After the if Condition 63
The Assignment Statement   30
PT1 Brace Layout 63
Constants  31
PT2 Always Use Braces 64
Comments  31
PT3 Tabs 64
CE1 Using Undefined Variables 33
PT4 Avoid Duplication in Branches 65
CE2 Using Uninitialized Variables 33
ST1 The Conditional Operator 65
PT1 Choose Descriptive Variable Names 33

xvii
xviii Contents

3.2 Comparing Numbers and Strings   66 4.5 Processing Input   112


CE2 Confusing = and == 68 Sentinel Values  112
CE3 Exact Comparison of Floating-Point Reading Until Input Fails   114
Numbers 68 ST1 Clearing the Failure State 115
PT5 Compile with Zero Warnings 69 ST2 The Loop-and-a-Half Problem and the
ST2 Lexicographic Ordering of Strings 69 break Statement 116
HT1 Implementing an if Statement 70 ST3 Redirection of Input and Output 116
WE1 Extracting the Middle 72 4.6 PROBLEM SOLVING Storyboards  117
C&S Dysfunctional Computerized Systems 72
4.7 Common Loop Algorithms   119
3.3 Multiple Alternatives   73 Sum and Average Value   119
ST3 The switch Statement 75 Counting Matches  120
3.4 Nested Branches   76 Finding the First Match   120
CE4 The Dangling else Problem 79 Prompting Until a Match is Found   121
PT6 Hand-Tracing 79 Maximum and Minimum   121
Comparing Adjacent Values   122
3.5 PROBLEM SOLVING Flowcharts  81
HT1 Writing a Loop 123
3.6 PROBLEM SOLVING Test Cases   83 WE1 Credit Card Processing 126
PT7 Make a Schedule and Make Time for
4.8 Nested Loops   126
Unexpected Problems 84
WE2 Manipulating the Pixels in an Image 129
3.7 Boolean Variables and Operators   85
4.9 PROBLEM SOLVING Solve a Simpler
CE5 Combining Multiple Relational Operators 88
Problem First   130
CE6 Confusing && and || Conditions 88
ST4 Short-Circuit Evaluation of Boolean 4.10 Random Numbers and Simulations   134
Operators 89 Generating Random Numbers   134
ST5 De Morgan’s Law 89 Simulating Die Tosses   135
3.8 APPLICATION Input Validation   90 The Monte Carlo Method   136
C&S Digital Piracy 138
C&S Artificial Intelligence 92

4 LOOPS 95 5 FUNCTIONS 141

4.1 The while Loop   96 5.1 Functions as Black Boxes   142


CE1 Infinite Loops 100 5.2 Implementing Functions   143
CE2 Don’t Think “Are We There Yet?” 101 PT1 Function Comments 146
CE3 Off-by-One Errors 101 5.3 Parameter Passing   146
C&S The First Bug 102 PT2 Do Not Modify Parameter Variables 148
4.2 PROBLEM SOLVING Hand-Tracing  103 5.4 Return Values   148
4.3 The for Loop   106 CE1 Missing Return Value 149
PT1 Use for Loops for Their Intended ST1 Function Declarations 150
Purpose Only 109 HT1 Implementing a Function 151
PT2 Choose Loop Bounds That Match WE1 Generating Random Passwords 152
Your Task 110 WE2 Using a Debugger 152
PT3 Count Iterations 110
5.5 Functions Without Return Values   153
4.4 The do Loop   111
5.6 PROBLEM SOLVING Reusable Functions   154
PT4 Flowcharts for Loops 111
Contents xix

5.7 PROBLEM SOLVING Stepwise 6.4 PROBLEM SOLVING Adapting


Refinement  156 Algorithms  198
PT3 Keep Functions Short 161 HT1 Working with Arrays 200
PT4 Tracing Functions 161 WE1 Rolling the Dice 203
PT5 Stubs 162 6.5 PROBLEM SOLVING Discovering Algorithms by
WE3 Calculating a Course Grade 163 Manipulating Physical Objects   203
5.8 Variable Scope and Global Variables   163 6.6 Two-Dimensional Arrays   206
PT6 Avoid Global Variables 165 Defining Two-Dimensional Arrays   207
5.9 Reference Parameters   165 Accessing Elements  207
PT7 Prefer Return Values to Reference Locating Neighboring Elements   208
Parameters 169 Computing Row and Column Totals   208
ST2 Constant References 170 Two-Dimensional Array Parameters   210
CE2 Omitting the Column Size of a Two-
5.10 Recursive Functions (Optional)   170
Dimensional Array Parameter 212
HT2 Thinking Recursively 173
WE2 A World Population Table 213
C&S The Explosive Growth of Personal
Computers 174 6.7 Vectors  213
Defining Vectors  214
Growing and Shrinking Vectors   215
6 ARRAYS AND VECTORS 179
Vectors and Functions   216
6.1 Arrays  180 Vector Algorithms  216
Two-Dimensional Vectors  218
Defining Arrays  180
PT2 Prefer Vectors over Arrays 219
Accessing Array Elements   182
ST5 The Range-Based for Loop 219
Partially Filled Arrays   183
CE1 Bounds Errors 184
PT1 Use Arrays for Sequences of Related 7 POINTERS AND
Values 184 STRUCTURES 223
C&S Computer Viruses 185

6.2 Common Array Algorithms   185 7.1 Defining and Using Pointers   224
Filling  186 Defining Pointers  224
Copying   186 Accessing Variables Through Pointers   225
Sum and Average Value   186 Initializing Pointers  227
Maximum and Minimum   187 CE1 Confusing Pointers with the Data to Which
Element Separators  187 They Point 228
Counting Matches  187 PT1 Use a Separate Definition for Each Pointer
Linear Search  188 Variable 229
Removing an Element   188 ST1 Pointers and References 229
Inserting an Element   189 7.2 Arrays and Pointers   230
Swapping Elements  190 Arrays as Pointers    230
Reading Input  191 Pointer Arithmetic  230
ST1 Sorting with the C++ Library 192 Array Parameter Variables Are Pointers   232
ST2 A Sorting Algorithm 192 ST2 Using a Pointer to Step Through
ST3 Binary Search 193 an Array 233
6.3 Arrays and Functions   194 CE2 Returning a Pointer to a Local Variable 234

ST4 Constant Array Parameters 198 PT2 Program Clearly, Not Cleverly 234
ST3 Constant Pointers 235
Discovering Diverse Content Through
Random Scribd Documents
monarchs added. It was called the Derush-e-Kawanee, the Standard
of Kawa, and continued to be the royal standard of Persia, till the
Mohammedan conquest, when it was taken in battle by Saed-e-
Wukass, and sent to the Caliph Omar.
“A Persian poet, alluding to the victories which the youthful Feridoon
obtained over Zohauk, and to those enchantments by which the
latter was guarded, and the manner in which they were overcome by
his virtuous antagonist, beautifully exclaims, ‘The happy Feridoon
was not an angel; he was not formed of musk or of amber; it was by
his justice and mercy that he gained good and great ends. Be then
just and merciful, and thou shalt be a Feridoon.’
“The crimes of his elder sons, which embittered the latter years of
Feridoon, have given rise to one of the most affecting tales in
Persian romance; and it is, indeed, only in that form that there
remains any trace of these events. This virtuous monarch had, we
are told, three sons, Selm, Toor, and Erii. The two former were by
one mother, the daughter of Zohauk; the latter by a princess of
Persia. All these three princes had been united in marriage to three
daughters of a king of Arabia. Feridoon determined to divide his
wide dominions among them. To Selm he gave the countries
comprehended in modern Turkey; to Toor, Tartary and part of China;
and to Erii, Persia. The princes departed for their respective
governments, but the two elder were displeased that Persia, the
fairest of lands, and the seat of royalty, should have been given to
their junior, and they combined to effect the ruin of their envied
brother. They first sent to their father to reproach him with his
partiality and injustice, and to demand a revision of his act,
threatening an immediate attack if their request was refused. The
old king was greatly distressed; he represented to them that his
days were drawing to a close, and entreated that he might be
allowed to depart in peace. Erii discovered what was passing, and
resolved to go to his brothers and to lay his crown at their feet,
rather than continue to be the cause of a dissension that afflicted his
father. He prevailed upon the old king to consent to this measure,
and carried a letter from their common parent to Selm and Toor, the
purport of which was, that they should live together in peace. This
appeal had no effect, and the unfortunate Erii was slain by his
brothers who had the hardihood to embalm his head and send it to
Feridoon. The old man is said to have fainted at the sight. When he
recovered, he seized with frantic grief the head of his beloved son,
and, holding it in his raised hands, he called upon heaven to punish
the base perpetrators of so unnatural and cruel a deed. ‘May they
never more,’ he exclaimed, ‘enjoy one bright day! May the demon
remorse tear their savage bosoms, till they excite compassion even
in the wild beasts of the forest! As for me,’ said the afflicted old
man, ‘I only desire from the God that gave me life, that he will
continue it till a descendant shall arise from the race of Erii to
avenge his death: and then this head will repose with joy on any
spot that is appointed to receive it.’
“The daughter of Erii was married to the nephew of Feridoon, and
their young son, Manucheher, proved the image of his grandfather;
this child becoming the cherished hope of the aged monarch; and
when the young prince attained manhood he made every
preparation to enable him to revenge the blood of Erii. Selm and
Toor trembled as they saw the day of retribution approach; they sent
ambassadors with rich presents to their father, and entreated that
Manucheher might be sent to them, that they might stand in his
presence like slaves, and wash away the remembrance of their
crimes by tears of contrition. Feridoon returned their presents; and
in his reply to their message expressed his indignation in glowing
terms. ‘Tell the merciless men,’ he exclaimed, ‘that they shall never
see Manucheher, but attended by armies, and clothed in steel.’
“A war commenced; and in the very first battle Toor was slain by the
lance of Manucheher. Selm retired to a fortress, from whence he was
drawn by a challenge from the youthful hero, who was victorious in
this combat, and the war restored tranquillity to the empire” (Sir
John Malcolm).
[508] “Fifty-six years the Fir-Bolgs royal line were kings, and the
sceptre they resigned to the Tuath-de-danaans” (Keating).
[509] We have as yet no accounts of the persecution and expulsion
of the Budhists from India; and this circumstance of itself would
allow us to infer, with great probability, that those events must have
taken place at a very remote period of antiquity.—Asiatic Researches.
[510] Göttingen University.
[511] Vallancey, Coll. vol. iii. p. 163.
[512] Bryant’s Anal. vol. iii. 491-3.
[513] “The first origin of the Danavas” says Wilford, talking of the
primeval inhabitants of Egypt, “is as little known as that of the tribe
last mentioned. But they came into Egypt from the west of India,
and are frequently mentioned in the Puranas, amongst the
inhabitants near Cali.”
Is it not manifest that they were a colony of our Danaans? And is
not this still more undeniable from the circumstance of a part of
Egypt—doubtless that wherein the Danaans resided—having been
called of old, as you will find by the same authority, by the name of
Eria? See p. 68 of present volume.
[514] This explains what Hecatæus records, as to the ancient
attachment between the Hyperboreans and the Grecians—“deducing
their friendship from remote times.” And the offerings which the
latter are said to have brought to the former were precisely of that
nature (ανθηματα) which comports with the spirit of our Budhist
pentalogue. See p. 112.
[515] As to the actuality of the visit, it is past anything like doubt,
from Orpheus, or if you prefer Onomacretus’ poem called
“Argonautica”; and his conviction of this it was which made Adrianus
Junius, quoted by Sir John Ware, to characterise Ireland as an
“insula Jasoniæ puppis bene cognita nautis.”
[516] “Abaris ex Hyperboreis, ipse quoque theologus fuit; scripsit
oracula regionibus quas peragravit, quæ hodie extant; prædixit is
quoque terræ motus, pestes, et similia ac cætera. Ferunt eum cum
Spartam advenisset, Lacones monuisse de sacris mala avertentibus,
quibus peractis nulla, postmodum Lacedæmone pestis fuerit”
(Apollonius, Histor. Mirab.).
“They thought them gods and not of mortal race,
And gave them cities and adored their learning,
And begged them to communicate their art.”
Keating (from an old Irish poem).
Turn back also to pp. 328, 67, and 66, and see what is there stated!
“An hundred and ninety-seven years complete
The Tuath-de-danaans, a famous colony,
The Irish sceptre swayed.”
[517] “A spiritual supremacy of this kind prevailed in several cities of
Asia Minor, as, for instance, at Pessinus, in Phrygia. The origin of
such constitutions is uncertain; but, according to tradition, was of
very ancient date. The same cities were also great resorts of
commerce, lying on the highway from Armenia to Asia Minor. The
bond between commerce and religion was very intimate. The
festivals of their worship were also those of their great fairs,
frequented by a multitude of foreigners; all of whom (certain classes
of females not excepted), as well as everything which had a
reference to trade, were considered as under the immediate
protection of the temple and the divinity. The same fact may be
remarked here, which has obtained in several parts of Central Africa,
namely, that the union of commerce with some particular mode of
worship gave occasion at a very early period to certain political
associations, and introduced a sacerdotal government” (Heeren, vol.
i. p. 121).
[518] “This word is of uncertain etymology—their early history is
uncertain. Diodorus (lib. v. 31) tells us that the Celts had bards who
sung to musical instruments; and Strabo (liv. iv.) testifies that they
were treated with respect approaching to veneration. The passage of
Tacitus (Germ. 7) is a doubtful reading” (American Encyclopædia).
[519] See Oriental Collections.
[520] Homer’s Iliad, π. v. 233.
[521] Hesiod, apud Strabo, 1. 7.
[522] See Miege’s Present State of Ireland.
[523] See p. 257.
[524] On the pillar at Buddall, before alluded to, are these words,
namely, “He had a womb, but it obstinately bore him no fruit. One
like him can have no relish for the enjoyments of life. He never was
blessed with that giver of delight, by obtaining which a man goes to
another Almoner.” Upon which the learned translator (Sir Charles
Wiggins) very correctly comments, that “he had no issue to perform
Sradh for the release of his soul from the bonds of sin.” See p. 113
of this work. By another Almoner is meant the Deity.
[525] See p. 327.
[526] “Graiis, ingenium Graiis: dedit ore rotundo” (Horace).
[527] This is still more evident by his making use of the word
τηλοθι, that is, far off, meaning from Greece! And Hesiod applies this
identical topography to the British Islands, which he styles sacred,
describing them as μαλα τηλε, an immeasurable distance off,
towards the northern point of the ancient continent!
[528] See p. 71.
[529] Chap. xvii. 15.
[530] For Dedan, see last two pages; and for D-Irin, see p. 128. The
prefixing of D to the last word arose from confounding it with the
former name; and thus it was embodied with it, as seen before in L-
Erne.
[531] Or as the Rev. Cæsar Otway would say, in a similar
embarrassment,—“I will give (i.e. invent) you a motto and a motive
for it.” Ha, ha, ha! (see Dublin Penny Journal, July 8, 1832).
[532] Dublin Penny Journal, April 6, 1833.
[533] “Elementorum omnium spiritus, utpote perennium corporum
motu semper, et ubique vigens, ex his quæ per disciplinas varias
affectamus, participat nobiscum munera divinandi, et substantiales
potestates ritu diversa placatæ, velut ex perpetuis fontium venis
vaticina mortalitati suppeditant verba” (Ammianus Marcellinus, lib.
21).
“They then took wives, each choosing for himself; whom they began
to approach, and with whom they cohabited; teaching them sorcery,
incantations, and the dividing of roots and trees” (Book of Enoch).
“I have collected fifty words in the Irish language relating to augury
and divination: every one of them are oriental, expressing the mode
of producing these abominable arts; they are, in fact, the very
identical oriental words written in Irish characters” (Vallancey).
[534] Danaus, the sire of fifty daughters, leaving those fruitful
regions watered by the Nile, came to Argos, and through Greece,
ordained that those who erst were called Pelasgi, should by the
name of Danai be distinguished (Euripides).
[535] You will find in Bruce, the Abyssinian traveller’s writings, that
those boats are still called, in that country, arghs, as they were in
ours, and the people who man them are styled Phut, corresponding
to our Fo-morians.
[536] “I thank you,” says Symmachus to his brother Flavianus, “for
the present you made me of some Irish dogs (canes Scotici), which
were there exhibited at the Circensian Games, to the great
astonishment of the people, who could not judge it possible to bring
them to Rome otherwise than in iron cages.”
[537] This is the meaning of the name Glen-da-lough, and a faithful
portraiture it is of the situation.
[538] Miniature of Budhism.
[539] “The secret, it was lost, but surely it was found” (Freemason’s
Song).
[540] This account is found in Satdharmalankare, a very popular
Budhist book, being a collection of histories, etc., from the writings
of the Rahats, in which the original Paly (Pahlavi) texts are preserved
with the Singhalese (Miniature of Budhism).
[541] Buddu, the god of souls, is represented by several little images
made of silver, brass, stone, or white clay, and these are set up in
almost every corner, even in caverns and on rocks, to all which piles
the devotees carry a variety of provisions, every new and full moon
throughout the year; but it is in March they celebrate the grand
festival of Buddu, at which time they imagine the new year begins.
At this festival they go to worship in two different places, which have
been made famous by their legendary stories concerning them. One
of them is the highest mountain in the island, and called by the
Christians Adam’s Peak; the other is in a place where Buddu reposed
himself under a tree, which planted itself there for the more
commodious reception of the deity, who, when he was on earth,
frequently amused himself under its agreeable shade, and under
that tree the pagans in Ceylon adore their Buddu, whom they really
believe to be a god (Dr. Hurd).
Bodhesat receives a few handfuls of grass presented to him by
Soitha (a Brahmin), which grass, when strewed on the ground under
the Bo tree, there arise from the earth miraculously a throne of
diamond fourteen cubits high, covered externally with grass; on
which Bodhesat takes his seat, reclining his back against the tree, in
order to accomplish his last act of meditations. Buddha having
ascended into the air, and displayed his glory to all the worlds in rays
of six different colours, in order to afford the gods a proof of his
perfection, stands seven days with his eyes fixed on the Bo tree,
enjoying the Dhyanes (Miniature, etc.).
[542]
“Yes, love indeed is light from heaven,
A spark of that immortal fire,
With angels shared, by Allah given,
To lift from earth our low desire.
Devotion wafts the mind above,
But heaven itself descends in love,
A feeling from the Godhead caught,
To wean from self each sordid thought.”—Byron.
[543] Book of Enoch, lxi. 8-10.
[544] Dr. Lawrence, present Archbishop of Cashel.
[545] Preface to translation of the Book of Enoch.
[546] “If this singular book be censured as abounding in some parts
with fable and fiction, still should we recollect that fable and fiction
may, occasionally, prove both amusing and instructive; and can then
only be deemed injurious when pressed into the service of vice and
infidelity. Nor should we forget that much, perhaps most, of what we
censure, was grounded upon rational tradition, the antiquity of which
alone, independent of other considerations, had rendered it
respectable. That the author was uninspired will be scarcely now
questioned. But, although his production was apocryphal, it ought
not therefore to be necessarily stigmatised as necessarily replete
with error; although it be on that account incapable of becoming a
rule of faith, it may nevertheless contain much moral as well as
religious truth, and may be justly regarded as a correct standard of
the doctrine of the times in which it was composed. Non omnia esse
concedenda antiquitati is, it is true, a maxim founded upon reason
and experience; but, in perusing the present relic of a remote age
and country, should the reader discover much to condemn, still,
unless he be too fastidious, he will find more to approve; if he
sometimes frown, he may oftener smile; nor seldom will he be
disposed to admire the vivid imagination of a writer who transports
him far beyond the flaming boundaries of the world—
———‘Extra
Processit longe flammantia mœnia mundi’;
displaying to him every secret of creation; the splendours of heaven,
and the terrors of hell; the mansions of departed souls, and the
myriads of the celestial hosts, the seraphim, cherubim, and
ophanim, which surround the blazing throne, and magnify the holy
name of the great Lord of Spirits, the Almighty Father of men and of
angels” (Archbishop of Cashel).
[547] See p. 475.
[548] John i. 10, 11.
[549] John i. 14.
[550] P. 478.
[551] But cf. Acts (Gr.) xxiv. 23, τῶν ιδιων.
[552] John i. 12.
[553] John i. 13.
[554] See p. 242.
[555] See p. 243.
[556] Rom. xi. 33.
[557] John i. 31.
[558] John xii. 28.
[559] Namely, the secret of an Antediluvian Incarnation.
[560] Matt. ii. 1, 2.
[561] This woodcut is copied from one of the early block-books.
[562] See p. 440.
[563] I need not repeat to the reader, that by Irish I mean the
primitive Persic, indiscriminately common as well to Iran as to Irin.
[564] Virgil’s Æneid, vi. 724.
[565] John viii. 12.
[566] John i. 1.
[567] John i. 29. See also p. 315 of this volume.
[568] See p. 288.
[569] In the Tartar language, which is a dialect of the Irish, it still
retains this latter import, as appears from the following:—“Ce qu’il y
a de remarquable, c’est que le grand prêtre des Tartares port le nom
de lama, qui en langue Tartare signifie la croix; et les Bogdoi qui
conquirent la Chine en 1644, et qui sont soûmis au delae-lama dans
les choses de la religion, ont toujours des croix sur eux, qu’ils
appellent aussi lamas” (Voyage de la Chine, par Avril, lib. iii. p. 194).
[570] The words Irish and sacred are synonymous. See p. 129.
[571] See pp. 267, 268, 269.
[572] “The peculiar office of the Irumarcalim it is difficult to find
out,” says Lewis, “only it is agreed that they carried the keys of the
seven gates of the court, and one could not open them without the
rest. Some add that there were seven rooms at the seven gates,
where the holy vessels were kept, and these seven men kept the
keys, and had the charge of them” (Origines Hebrææ, vol. i. p. 97).
[573] See p. 438, with the note thereon also.
[574] See Dublin Penny Journal, Nov. 10, 1833.
[575] Published by Berthoud, 65 Regent’s Quadrant, Piccadilly.
[576] See p. 361. At Monasterboice there are three very beautiful
specimens of those Tuath-de-danaan crosses still remaining, and
covered, as usual, with hieroglyphic sculpture. “The pillars in the
Palencian city,” I find, “are also decorated with serpents, lizards, etc.”
[577] See Borlase, p. 162.
[578] See p. 36. I must not omit to mention that the Tuath-de-
danaan cross at Armagh, noticed at p. 359, was pulled down some
time back, to prevent the squabbles between the Catholics and the
Orangemen, neither of whom had any inheritance therein!
[579] Vita prima S. Patricii, Ap. Colgan.
[580] “Fear not: for, behold, I bring you good tidings of great joy,
which shall be to all people. For unto you is born this day, in the city
of David, a Saviour, which is Christ the Lord” (Luke ii. 10,11).
[581] “And suddenly there was with the angel a multitude of the
heavenly host, praising God, and saying, Glory to God in the highest,
and on earth peace, good will towards men” (Luke ii. 13, 14).
[582] Matt. ii. 9.
[583] Gen. xiv. 18, 19, 20.
[584] Heb. vii. 4, 1, 2, 3. “Rex idem hominum, Phœbique Sacerdos”
(Virgil).
[585] “Holy mysteries must be studied with this caution, that the
mind for its module be dilated to the amplitude of the mysteries, and
not the mysteries be straitened and girt into the narrow compass of
the mind” (Bacon).
[586] Isa. lii. 7.
[587] John xvi. 33.
[588] Luke xix. 42.
[589] John xiv. 27.
[590] Heb. vi. 19, 20.
[591] Christmas Carols.
[592] Freemasons’ Song.
[593] Matt. iii. 7.
[594] John vii. 41.
[595] See p. 229.
[596] Keating’s History of Ireland, folio, p. 143.
[597] Pronounced Sauv. This was the Seva of the Hindoos, by which
although they understood, indeed, as well generation as destruction
to be symbolised; yet it is clear that they must have long lost the
method of accounting for the reason why, otherwise than saying,
that death and life meant the same thing; that is, that the cessation
of existence in one form was but the commencement of existence in
another.
[598] Freemasons’ Song.
[599] Ashe’s Masonic Manual.
[600] See p. 282, note.
[601] See p. 268.
[602] Isa. vii. 14.
[603] “The countenance of Christ was placid, handsome, and ruddy,
so formed, however, as to inspire the beholders, not so much with
love and reverence as with terror; his locks were like the colour of a
full ripe filbert nut (auburn), straight, and entire down to the ears,
from thence somewhat curled down to the shoulders, but parted on
the crown of the head after the manner of the Nazarites; his
forehead was smooth and shining, his eyes blue and sparkling, his
nose and mouth decorous, and absolutely faultless; his beard, in
colour like his locks, was forked, and not long” (Waserus, p. 63).
“At this time appeared a man, who is still living, a man endowed
with great power, his name Jesus Christ. The people say that he is a
mighty prophet; his disciples call him the Son of God. He quickens
the dead, and heals the sick of all manner of diseases and disorders.
He is a man of tall stature, well proportioned, and the aspect of his
countenance engaging, with serenity, and full of expression, so as to
induce the beholders to love and then to fear him. The locks of his
hair are of the colour of a vine-leaf, without curl, and straight to the
bottom of his ears, but from thence, down to his shoulders, curled
and glossy, and hanging below his shoulders. His hair on the crown
of the head disposed after the manner of the Nazarites. His forehead
smooth and fair. His face without spot, and adorned with a certain
tempered ruddiness. His aspect ingenuous and agreeable. His nose
and his mouth in no wise reprehensible. His beard thick and forked,
of the same colour as the locks of his head. His eyes blue and
extremely bright. In reprehending and improving, awful; in teaching
and exhorting, courteous and engaging; a wonderful grace and
gravity of countenance; none saw him laugh, even once, but rather
weep. In speaking, accurate and impressive, but sparing of speech.
In countenance, the fairest among the children of men” (Attributed
to Lentulus, predecessor of Pilate in the government of Judea,
recorded by Fabricius in his Codex Apocryphus Novi Testamenti).
[604] The principal one I conceive to have been at the hill of Tara,
which means the hill of the Saviour, and synonymous with mount
Ida, which means the mount of the cross. See p. 453.
“The predominant style and character of the Pillar Tower,” says
Montmorency, “in a great measure discloses the secret of its origin.”
It is astonishing how, after this, he and his pupils of the academy
should labour to assimilate that secret to a dungeon.
“L’obélisque que les Phéniciens dédièrent au Soleil dont le sommet
sphérique et la matière étoient fort différens des obélisques
d’Egypte” (Ammian. Marcel.).
[605] Ex. xx. 26. The word altar does not mean what it is generally
taken to express, a platform, but a high place, or standing column,
what the Septuagint renders by the Greek word στηλη, a pillar. And
this was what the Israelites were forbid erecting to Jehovah, lest
that their nakedness should be discovered while ascending by steps
or ladders to the entrance overhead.
The Gaurs have round towers erected of stone, and thither they
carry their dead on biers; within the tower is a staircase with deep
steps made in a winding form, and when the bearers are got within,
the priests scale the walls by the help of ladders; when they have
dragged the corpse gently up with ropes, they then let it slide down
the staircase (Dr. Hurd’s Rites and Ceremonies, etc.).
[606] See pp. 7 and 8.
[607] 1 Kings vi. 4.
[608] 1 Kings vi. 6.
[609] 1 Kings vi. 29.
[610] The Tower of Pisa bears no comparison to this edifice.
[611] The holy wells also, with the practice of hanging pieces of
cloth upon the branches of an overhanging tree, all belonged to the
Tuath-de-danaan ceremonial. The early Christians took possession
each of them of one of these wells, and are now, by prescription,
recognised as their patron saints, and even supposed to have been
their founders?
[612] Μοῖσα δ’ οἰκ ἀποδαμει τρόποις επι σφετέροσι, παντα δε χοροὶ
παρθένων λυρᾶν τε Βοαὶ καναχαί τ’ ανλων δονεονται δαφνᾳ τε
χρυσεα κομος αναδησαντες εἰλαπινα ξοινιν εν φρονως. νοσοι δ’ οντε
γηρας ονλομενον κέκρατα ἱερᾶ γενεᾶ· πονων δε καὶ μαχᾶν ἄτερ
οικεοισι φυγοντες υπερδικον Νέμεσιν (Pyth x. 59).
[613] Even among the vegetables, they abstained from beans, as
did the Pythagoreans after them, ob similitudinem virilibus
genitalibus.
[614] See conditions of advertisement in Preface.
[615] “You may read in Lucian, in that sweet dialogue, which is
entitled, Toxaris; or, of Friendship, that the common oath of the
Scythians was by the sword, and by the fire, for that they accounted
those two speciall divine powers, which should worke vengeance on
the perjurers. So doe the Irish at this day, when they goe to battaile,
say certaine prayers or charmes to their swords, making a crosse
therewith upon the earth, and thrusting the points of their blades
into the ground, thinking thereby to have the better successe here in
fight. Also they use commonly to swear by their swords” (Spenser).
[616] See pp. 81, 82.
[617] They were afterwards degraded to every possible purpose
they could be made to subserve: but I speak above of the time
immediately after their overthrow.
[618] “I had not been a week landed in Ireland from Gibraltar, where
I had studied Hebrew and Chaldaic, under Jews of various countries
and denominations, when I heard a peasant girl say to a boor
standing by her, Féach an maddin nag (Behold the morning star),
pointing to the planet Venus, the maddin nag of the Chaldean.
Shortly after, being benighted with a party in the mountains of the
western parts of the county of Cork, we lost the path, when an aged
cottager undertook to be our guide. It was a fine starry night. In our
way, the peasant pointing to the constellation Orion, he said that
was Caomai, or the armed king; and he described the three upright
stars to be his spear or sceptre, and the three horizontal stars, he
said, were his sword-belt. I could not doubt of this being the Cimah
of Job, which the learned Costard asserts to be the constellation
Orion” (Vallancey).
[619] At p. 305 of his work on the Towers and Temples of Ancient
Ireland, Mr. Keane observes: “Lists of Irish Round Towers have been
made to the number of one hundred and twenty; of these, the
remains of about sixty-six are traceable.” The list given here includes
some towers of which the site alone remains, as being possibly of
interest to explorers.
*** END OF THE PROJECT GUTENBERG EBOOK THE ROUND
TOWERS OF IRELAND; OR, THE HISTORY OF THE TUATH-DE-
DANAANS ***

Updated editions will replace the previous one—the old editions will
be renamed.

Creating the works from print editions not protected by U.S.


copyright law means that no one owns a United States copyright in
these works, so the Foundation (and you!) can copy and distribute it
in the United States without permission and without paying
copyright royalties. Special rules, set forth in the General Terms of
Use part of this license, apply to copying and distributing Project
Gutenberg™ electronic works to protect the PROJECT GUTENBERG™
concept and trademark. Project Gutenberg is a registered trademark,
and may not be used if you charge for an eBook, except by following
the terms of the trademark license, including paying royalties for use
of the Project Gutenberg trademark. If you do not charge anything
for copies of this eBook, complying with the trademark license is
very easy. You may use this eBook for nearly any purpose such as
creation of derivative works, reports, performances and research.
Project Gutenberg eBooks may be modified and printed and given
away—you may do practically ANYTHING in the United States with
eBooks not protected by U.S. copyright law. Redistribution is subject
to the trademark license, especially commercial redistribution.

START: FULL LICENSE


THE FULL PROJECT GUTENBERG LICENSE
PLEASE READ THIS BEFORE YOU DISTRIBUTE OR USE THIS WORK

To protect the Project Gutenberg™ mission of promoting the free


distribution of electronic works, by using or distributing this work (or
any other work associated in any way with the phrase “Project
Gutenberg”), you agree to comply with all the terms of the Full
Project Gutenberg™ License available with this file or online at
www.gutenberg.org/license.

Section 1. General Terms of Use and


Redistributing Project Gutenberg™
electronic works
1.A. By reading or using any part of this Project Gutenberg™
electronic work, you indicate that you have read, understand, agree
to and accept all the terms of this license and intellectual property
(trademark/copyright) agreement. If you do not agree to abide by all
the terms of this agreement, you must cease using and return or
destroy all copies of Project Gutenberg™ electronic works in your
possession. If you paid a fee for obtaining a copy of or access to a
Project Gutenberg™ electronic work and you do not agree to be
bound by the terms of this agreement, you may obtain a refund
from the person or entity to whom you paid the fee as set forth in
paragraph 1.E.8.

1.B. “Project Gutenberg” is a registered trademark. It may only be


used on or associated in any way with an electronic work by people
who agree to be bound by the terms of this agreement. There are a
few things that you can do with most Project Gutenberg™ electronic
works even without complying with the full terms of this agreement.
See paragraph 1.C below. There are a lot of things you can do with
Project Gutenberg™ electronic works if you follow the terms of this
agreement and help preserve free future access to Project
Gutenberg™ electronic works. See paragraph 1.E below.
1.C. The Project Gutenberg Literary Archive Foundation (“the
Foundation” or PGLAF), owns a compilation copyright in the
collection of Project Gutenberg™ electronic works. Nearly all the
individual works in the collection are in the public domain in the
United States. If an individual work is unprotected by copyright law
in the United States and you are located in the United States, we do
not claim a right to prevent you from copying, distributing,
performing, displaying or creating derivative works based on the
work as long as all references to Project Gutenberg are removed. Of
course, we hope that you will support the Project Gutenberg™
mission of promoting free access to electronic works by freely
sharing Project Gutenberg™ works in compliance with the terms of
this agreement for keeping the Project Gutenberg™ name associated
with the work. You can easily comply with the terms of this
agreement by keeping this work in the same format with its attached
full Project Gutenberg™ License when you share it without charge
with others.

1.D. The copyright laws of the place where you are located also
govern what you can do with this work. Copyright laws in most
countries are in a constant state of change. If you are outside the
United States, check the laws of your country in addition to the
terms of this agreement before downloading, copying, displaying,
performing, distributing or creating derivative works based on this
work or any other Project Gutenberg™ work. The Foundation makes
no representations concerning the copyright status of any work in
any country other than the United States.

1.E. Unless you have removed all references to Project Gutenberg:

1.E.1. The following sentence, with active links to, or other


immediate access to, the full Project Gutenberg™ License must
appear prominently whenever any copy of a Project Gutenberg™
work (any work on which the phrase “Project Gutenberg” appears,
or with which the phrase “Project Gutenberg” is associated) is
accessed, displayed, performed, viewed, copied or distributed:
This eBook is for the use of anyone anywhere in the United
States and most other parts of the world at no cost and with
almost no restrictions whatsoever. You may copy it, give it away
or re-use it under the terms of the Project Gutenberg License
included with this eBook or online at www.gutenberg.org. If you
are not located in the United States, you will have to check the
laws of the country where you are located before using this
eBook.

1.E.2. If an individual Project Gutenberg™ electronic work is derived


from texts not protected by U.S. copyright law (does not contain a
notice indicating that it is posted with permission of the copyright
holder), the work can be copied and distributed to anyone in the
United States without paying any fees or charges. If you are
redistributing or providing access to a work with the phrase “Project
Gutenberg” associated with or appearing on the work, you must
comply either with the requirements of paragraphs 1.E.1 through
1.E.7 or obtain permission for the use of the work and the Project
Gutenberg™ trademark as set forth in paragraphs 1.E.8 or 1.E.9.

1.E.3. If an individual Project Gutenberg™ electronic work is posted


with the permission of the copyright holder, your use and distribution
must comply with both paragraphs 1.E.1 through 1.E.7 and any
additional terms imposed by the copyright holder. Additional terms
will be linked to the Project Gutenberg™ License for all works posted
with the permission of the copyright holder found at the beginning
of this work.

1.E.4. Do not unlink or detach or remove the full Project


Gutenberg™ License terms from this work, or any files containing a
part of this work or any other work associated with Project
Gutenberg™.

1.E.5. Do not copy, display, perform, distribute or redistribute this


electronic work, or any part of this electronic work, without
prominently displaying the sentence set forth in paragraph 1.E.1
with active links or immediate access to the full terms of the Project
Gutenberg™ License.

1.E.6. You may convert to and distribute this work in any binary,
compressed, marked up, nonproprietary or proprietary form,
including any word processing or hypertext form. However, if you
provide access to or distribute copies of a Project Gutenberg™ work
in a format other than “Plain Vanilla ASCII” or other format used in
the official version posted on the official Project Gutenberg™ website
(www.gutenberg.org), you must, at no additional cost, fee or
expense to the user, provide a copy, a means of exporting a copy, or
a means of obtaining a copy upon request, of the work in its original
“Plain Vanilla ASCII” or other form. Any alternate format must
include the full Project Gutenberg™ License as specified in
paragraph 1.E.1.

1.E.7. Do not charge a fee for access to, viewing, displaying,


performing, copying or distributing any Project Gutenberg™ works
unless you comply with paragraph 1.E.8 or 1.E.9.

1.E.8. You may charge a reasonable fee for copies of or providing


access to or distributing Project Gutenberg™ electronic works
provided that:

• You pay a royalty fee of 20% of the gross profits you derive
from the use of Project Gutenberg™ works calculated using the
method you already use to calculate your applicable taxes. The
fee is owed to the owner of the Project Gutenberg™ trademark,
but he has agreed to donate royalties under this paragraph to
the Project Gutenberg Literary Archive Foundation. Royalty
payments must be paid within 60 days following each date on
which you prepare (or are legally required to prepare) your
periodic tax returns. Royalty payments should be clearly marked
as such and sent to the Project Gutenberg Literary Archive
Foundation at the address specified in Section 4, “Information
about donations to the Project Gutenberg Literary Archive
Foundation.”

• You provide a full refund of any money paid by a user who


notifies you in writing (or by e-mail) within 30 days of receipt
that s/he does not agree to the terms of the full Project
Gutenberg™ License. You must require such a user to return or
destroy all copies of the works possessed in a physical medium
and discontinue all use of and all access to other copies of
Project Gutenberg™ works.

• You provide, in accordance with paragraph 1.F.3, a full refund of


any money paid for a work or a replacement copy, if a defect in
the electronic work is discovered and reported to you within 90
days of receipt of the work.

• You comply with all other terms of this agreement for free
distribution of Project Gutenberg™ works.

1.E.9. If you wish to charge a fee or distribute a Project Gutenberg™


electronic work or group of works on different terms than are set
forth in this agreement, you must obtain permission in writing from
the Project Gutenberg Literary Archive Foundation, the manager of
the Project Gutenberg™ trademark. Contact the Foundation as set
forth in Section 3 below.

1.F.

1.F.1. Project Gutenberg volunteers and employees expend


considerable effort to identify, do copyright research on, transcribe
and proofread works not protected by U.S. copyright law in creating
the Project Gutenberg™ collection. Despite these efforts, Project
Gutenberg™ electronic works, and the medium on which they may
be stored, may contain “Defects,” such as, but not limited to,
incomplete, inaccurate or corrupt data, transcription errors, a
copyright or other intellectual property infringement, a defective or
damaged disk or other medium, a computer virus, or computer
codes that damage or cannot be read by your equipment.

1.F.2. LIMITED WARRANTY, DISCLAIMER OF DAMAGES - Except for


the “Right of Replacement or Refund” described in paragraph 1.F.3,
the Project Gutenberg Literary Archive Foundation, the owner of the
Project Gutenberg™ trademark, and any other party distributing a
Project Gutenberg™ electronic work under this agreement, disclaim
all liability to you for damages, costs and expenses, including legal
fees. YOU AGREE THAT YOU HAVE NO REMEDIES FOR
NEGLIGENCE, STRICT LIABILITY, BREACH OF WARRANTY OR
BREACH OF CONTRACT EXCEPT THOSE PROVIDED IN PARAGRAPH
1.F.3. YOU AGREE THAT THE FOUNDATION, THE TRADEMARK
OWNER, AND ANY DISTRIBUTOR UNDER THIS AGREEMENT WILL
NOT BE LIABLE TO YOU FOR ACTUAL, DIRECT, INDIRECT,
CONSEQUENTIAL, PUNITIVE OR INCIDENTAL DAMAGES EVEN IF
YOU GIVE NOTICE OF THE POSSIBILITY OF SUCH DAMAGE.

1.F.3. LIMITED RIGHT OF REPLACEMENT OR REFUND - If you


discover a defect in this electronic work within 90 days of receiving
it, you can receive a refund of the money (if any) you paid for it by
sending a written explanation to the person you received the work
from. If you received the work on a physical medium, you must
return the medium with your written explanation. The person or
entity that provided you with the defective work may elect to provide
a replacement copy in lieu of a refund. If you received the work
electronically, the person or entity providing it to you may choose to
give you a second opportunity to receive the work electronically in
lieu of a refund. If the second copy is also defective, you may
demand a refund in writing without further opportunities to fix the
problem.

1.F.4. Except for the limited right of replacement or refund set forth
in paragraph 1.F.3, this work is provided to you ‘AS-IS’, WITH NO
OTHER WARRANTIES OF ANY KIND, EXPRESS OR IMPLIED,
INCLUDING BUT NOT LIMITED TO WARRANTIES OF
MERCHANTABILITY OR FITNESS FOR ANY PURPOSE.

1.F.5. Some states do not allow disclaimers of certain implied


warranties or the exclusion or limitation of certain types of damages.
If any disclaimer or limitation set forth in this agreement violates the
law of the state applicable to this agreement, the agreement shall be
interpreted to make the maximum disclaimer or limitation permitted
by the applicable state law. The invalidity or unenforceability of any
provision of this agreement shall not void the remaining provisions.

1.F.6. INDEMNITY - You agree to indemnify and hold the Foundation,


the trademark owner, any agent or employee of the Foundation,
anyone providing copies of Project Gutenberg™ electronic works in
accordance with this agreement, and any volunteers associated with
the production, promotion and distribution of Project Gutenberg™
electronic works, harmless from all liability, costs and expenses,
including legal fees, that arise directly or indirectly from any of the
following which you do or cause to occur: (a) distribution of this or
any Project Gutenberg™ work, (b) alteration, modification, or
additions or deletions to any Project Gutenberg™ work, and (c) any
Defect you cause.

Section 2. Information about the Mission


of Project Gutenberg™
Project Gutenberg™ is synonymous with the free distribution of
electronic works in formats readable by the widest variety of
computers including obsolete, old, middle-aged and new computers.
It exists because of the efforts of hundreds of volunteers and
donations from people in all walks of life.

Volunteers and financial support to provide volunteers with the


assistance they need are critical to reaching Project Gutenberg™’s
goals and ensuring that the Project Gutenberg™ collection will
remain freely available for generations to come. In 2001, the Project
Gutenberg Literary Archive Foundation was created to provide a
secure and permanent future for Project Gutenberg™ and future
generations. To learn more about the Project Gutenberg Literary
Archive Foundation and how your efforts and donations can help,
see Sections 3 and 4 and the Foundation information page at
www.gutenberg.org.

Section 3. Information about the Project


Gutenberg Literary Archive Foundation
The Project Gutenberg Literary Archive Foundation is a non-profit
501(c)(3) educational corporation organized under the laws of the
state of Mississippi and granted tax exempt status by the Internal
Revenue Service. The Foundation’s EIN or federal tax identification
number is 64-6221541. Contributions to the Project Gutenberg
Literary Archive Foundation are tax deductible to the full extent
permitted by U.S. federal laws and your state’s laws.

The Foundation’s business office is located at 809 North 1500 West,


Salt Lake City, UT 84116, (801) 596-1887. Email contact links and up
to date contact information can be found at the Foundation’s website
and official page at www.gutenberg.org/contact

Section 4. Information about Donations to


the Project Gutenberg Literary Archive
Foundation
Project Gutenberg™ depends upon and cannot survive without
widespread public support and donations to carry out its mission of
increasing the number of public domain and licensed works that can
be freely distributed in machine-readable form accessible by the
widest array of equipment including outdated equipment. Many
small donations ($1 to $5,000) are particularly important to
maintaining tax exempt status with the IRS.

The Foundation is committed to complying with the laws regulating


charities and charitable donations in all 50 states of the United
States. Compliance requirements are not uniform and it takes a
considerable effort, much paperwork and many fees to meet and
keep up with these requirements. We do not solicit donations in
locations where we have not received written confirmation of
compliance. To SEND DONATIONS or determine the status of
compliance for any particular state visit www.gutenberg.org/donate.

While we cannot and do not solicit contributions from states where


we have not met the solicitation requirements, we know of no
prohibition against accepting unsolicited donations from donors in
such states who approach us with offers to donate.

International donations are gratefully accepted, but we cannot make


any statements concerning tax treatment of donations received from
outside the United States. U.S. laws alone swamp our small staff.

Please check the Project Gutenberg web pages for current donation
methods and addresses. Donations are accepted in a number of
other ways including checks, online payments and credit card
donations. To donate, please visit: www.gutenberg.org/donate.

Section 5. General Information About


Project Gutenberg™ electronic works
Professor Michael S. Hart was the originator of the Project
Gutenberg™ concept of a library of electronic works that could be
freely shared with anyone. For forty years, he produced and
distributed Project Gutenberg™ eBooks with only a loose network of
volunteer support.
Welcome to our website – the ideal destination for book lovers and
knowledge seekers. With a mission to inspire endlessly, we offer a
vast collection of books, ranging from classic literary works to
specialized publications, self-development books, and children's
literature. Each book is a new journey of discovery, expanding
knowledge and enriching the soul of the reade

Our website is not just a platform for buying books, but a bridge
connecting readers to the timeless values of culture and wisdom. With
an elegant, user-friendly interface and an intelligent search system,
we are committed to providing a quick and convenient shopping
experience. Additionally, our special promotions and home delivery
services ensure that you save time and fully enjoy the joy of reading.

Let us accompany you on the journey of exploring knowledge and


personal growth!

ebookluna.com

You might also like