Download ebooks file Programming Logic and Design Comprehensive 6th Edition Joyce Farrell all chapters
Download ebooks file Programming Logic and Design Comprehensive 6th Edition Joyce Farrell all chapters
https://ebookultra.com/download/java-programming-7th-edition-joyce-
farrell/
https://ebookultra.com/download/java-programming-8th-edition-joyce-
farrell/
https://ebookultra.com/download/java-programs-to-accompany-
programming-logic-and-design-7th-edition-jo-ann-smith/
https://ebookultra.com/download/microsoft-visual-basic-programs-to-
accompany-programming-logic-and-design-3rd-edition-jo-ann-smith/
Computer programming for teens 1st Edition Mary E. Farrell
https://ebookultra.com/download/computer-programming-for-teens-1st-
edition-mary-e-farrell/
https://ebookultra.com/download/programming-and-problem-solving-with-
c-comprehensive-comprehensive-edition-nell-b-dale/
https://ebookultra.com/download/comprehensive-gynecology-6th-edition-
gretchen-m-lentz/
https://ebookultra.com/download/the-haskell-road-to-logic-maths-and-
programming-1st-edition-kees-doets/
https://ebookultra.com/download/logic-and-computer-design-
fundamentals-third-edition-m-morris-mano/
Programming Logic and Design Comprehensive 6th
Edition Joyce Farrell Digital Instant Download
Author(s): Joyce Farrell
ISBN(s): 0538744766
Edition: 6
File Details: PDF, 18.81 MB
Year: 2010
Language: english
PROGRAMMING LOGIC
AND DESIGN
COMPREHENSIVE
This page intentionally left blank
SIXTH EDITION
PROGRAMMING LOGIC
AND DESIGN
COMPREHENSIVE
J O Y C E FA R R E L L
Australia • Brazil • Japan • Korea • Mexico • Singapore • Spain • United Kingdom • United States
This is an electronic version of the print textbook. Due to electronic rights restrictions, some third party content may
be suppressed. Editorial review has deemed that any suppressed content does not materially affect the overall
learning experience. The publisher reserves the right to remove content from this title at any time if subsequent rights
restrictions require it. For valuable information on pricing, previous editions, changes to current editions, and
alternate formats, please visit www.cengage.com/highered to search by ISBN#, author, title, or keyword for
materials in your areas of interest.
Programming Logic and Design, © 2011 Course Technology, Cengage Learning
Comprehensive, Sixth Edition
ALL RIGHTS RESERVED. No part of this work covered by the copyright
Joyce Farrell
herein may be reproduced, transmitted, stored or used in any form or by
Executive Editor: Marie Lee any means—graphic, electronic, or mechanical, including but not limited
to photocopying, recording, scanning, digitizing, taping, Web distribution,
Acquisitions Editor: Amy Jollymore
information networks, or information storage and retrieval systems, except
Managing Editor: Tricia Coia as permitted under Section 107 or 108 of the 1976 United States Copyright
Developmental Editor: Dan Seiter Act—without the prior written permission of the publisher.
Content Project Manager: Jennifer Feltri
For product information and technology assistance, contact us at
Editorial Assistant: Zina Kresin Cengage Learning Customer & Sales Support, 1-800-354-9706
Marketing Manager: Bryant Chrzan For permission to use material from this text or product,
Art Director: Marissa Falco submit all requests online at cengage.com/permissions
Further permissions questions can be emailed to
Text Designer: Shawn Girsberger permissionrequest@cengage.com
Cover Designer: Cabbage Design Company
Cover Image: iStockphoto Library of Congress Control Number: 2009938501
Print Buyer: Julio Esperas
ISBN-13: 978-0-5387-4476-8
Copy Editor: Michael Beckett
ISBN-10: 0-538-74476-6
Proofreader: Vicki Zimmer
Indexer: Alexandra Nickerson Course Technology
Compositor: Integra 20 Channel Center Street
Boston, MA 02210
USA
Some of the product names and company names used in this book have
been used for identification purposes only and may be trademarks or
registered trademarks of their respective manufacturers and sellers.
Purchase any of our products at your local college store or at our preferred
online store www.ichapters.com
Printed in Canada
1 2 3 4 5 6 7 14 13 12 11 10
Brief Contents
v
Glo s s ar y . . . . . . . . . . . . . . . . 666
In dex . . . . . . . . . . . . . . . . . 681
Preface
xvi
Features
This edition of the text includes many features to help students
become better programmers and understand the big picture in
program development. Many new features have been added, and the
popular features from the first five editions are still included.
xviii
Features maintained from previous editions include:
OBJECTIVES Each chapter begins with a list of objectives so the
student knows the topics that will be presented in the chapter. In
addition to providing a quick reference to topics covered, this feature
provides a useful study aid.
FLOWCHARTS This book has plenty of figures and illustrations,
including flowcharts, which provide the reader with a visual learning
experience, rather than one that involves simply studying text. You
can see examples of flowcharts beginning in Chapter 1.
PSEUDOCODE This book also includes numerous examples of
pseudocode, which illustrate correct usage of the programming logic
and design concepts being taught.
NOTES These tips provide additional information—for
example, another location in the book that expands on a topic,
or a common error to watch out for.
THE DON’T DO IT ICON It is sometimes illustrative to
show an example of how NOT to do something—for
example, having a dead code path in a program. However,
students do not always read carefully and sometimes use logic similar
to that shown in what is intended to be a “bad” example. When the
instructor is critical, the frustrated student says, “But that’s how they
did it in the book!” Therefore, although the text will continue to
describe bad examples, and the captions for the related figures will
mention that they are bad examples, the book also includes a “Don’t
Do It” icon near the offending section of logic. This icon provides a
visual jolt to the student, emphasizing that particular figures are NOT
to be emulated.
THE TWO TRUTHS AND A LIE QUIZ This quiz appears after each
chapter section, with answers provided. The quiz contains three
statements based on the preceding section of text—two true and one
false. Over the years, students have requested answers to problems,
but we have hesitated to distribute them in case instructors want
to use problems as assignments or test questions. These true-false
mini-quizzes provide students with immediate feedback as they read,
without “giving away” answers to the multiple-choice questions and
programming problems later in the chapter.
P R E FA C E
If you have a new book, it will contain a URL and PIN code. Once you
go to this URL and enter your PIN code, follow the prompts to locate
the videos for this text. If you are a user of an online course cartridge,
such as BlackBoard, WebCT, or Angel, you will also have access to
these videos through that platform.
xx INCREASED EMPHASIS ON MODULARITY From the second chapter,
students are encouraged to write code in concise, easily manageable,
and reusable modules. Instructors have found that modularization
is a technique that should be encouraged early to instill good habits
and a clearer understanding of structure. This edition explains
modularization early, using global variables instead of local passed
and returned values, and saves parameter passing for later when the
student has become more adept.
CLEARER EXPLANATIONS This edition has been rewritten to
provide clearer, simpler explanations that are appropriate for the
beginning programming student. As a result of the new, cleaner
approach, the length of the book has been reduced.
NEW APPENDICES FOR EASY REFERENCE New appendices
have been added that cover numbering systems, flowchart symbols,
and structures.
DECREASED EMPHASIS ON CONTROL BREAKS Professional
programmers should understand control break logic, but creating
such logic is not as common a task as it was years ago. Therefore, the
topic is still covered briefly as part of the file-handling chapter, but
with reduced emphasis from previous editions of the book.
Instructor Resources
The following supplemental materials are available when this
book is used in a classroom setting. All of the instructor resources
available with this book are provided to the instructor on a single
CD-ROM.
ELECTRONIC INSTRUCTOR’S MANUAL The Instructor’s Manual
that accompanies this textbook provides additional instructional
material to assist in class preparation, including items such as Sample
Syllabi, Chapter Outlines, Technical Notes, Lecture Notes, Quick
Quizzes, Teaching Tips, Discussion Topics, and Key Terms.
EXAMVIEW® This textbook is accompanied by ExamView, a powerful
testing software package that allows instructors to create and admin-
ister printed, computer (LAN-based), and Internet exams. ExamView
includes hundreds of questions that correspond to the topics covered in
this text, enabling students to generate detailed study guides that include
page references for further review. The computer-based and Internet
P R E FA C E
Software Options
You have the option to bundle software with your text! Please contact
your Course Technology sales representative for more information.
MICROSOFT ® OFFICE VISIO ® PROFESSIONAL Visio is a
diagramming program that helps users create flowcharts and
diagrams easily while working through the text, enabling them to
visualize concepts and learn more effectively.
VISUAL LOGIC ™ This simple but powerful tool teaches program-
ming logic and design without traditional high-level programming
language syntax. Visual Logic uses flowcharts to explain essential
programming concepts, including variables, input, assignment, out-
put, conditions, loops, procedures, graphics, arrays, and files. It also
has the ability to interpret and execute flowcharts, providing students
with immediate and accurate feedback about their solutions. By exe-
cuting student solutions, Visual Logic combines the power of a high-
level language with the ease and simplicity of flowcharts.
Acknowledgments
I would like to thank all of the people who helped to make this book
a reality, especially Dan Seiter, Development Editor, whose hard work
and attention to detail have made this a high-quality textbook. I have
P R E FA C E
worked with Dan for many years now, and he is indispensable in pro-
ducing accurate and approachable technical instruction. Thanks also
to Tricia Coia, Managing Editor; Amy Jollymore, Acquisitions Editor;
Jennifer Feltri, Content Project Manager; and Green Pen QA, Technical
Editors. I am grateful to be able to work with so many fine people who
are dedicated to producing high-quality instructional materials.
xxii
I am grateful to the many reviewers who provided helpful and
insightful comments during the development of this book, including
Gilbert Armour, Virginia Western Community College; John Buerck,
Saint Louis University; Karen Cummings, McLennan Community
College; Clara Groeper, Illinois Central College; and Jeff Hedrington,
Colorado Technical University.
Thanks, too, to my husband, Geoff, and our daughters, Andrea and
Audrey, for their support. This book, as were all its previous editions,
is dedicated to them.
–Joyce Farrell
P R E FA C E
Computer systems
Simple program logic
The steps involved in the program development cycle
Pseudocode statements and flowchart symbols
Using a sentinel value to end a program
Programming and user environments
The evolution of programming models
CHAPTER 1 An Overview of Computers and Programming
In business, much of the data used is facts and figures about such entities as
products, customers, and personnel. However, data can also be items such
as the choices a player makes in a game or the notes required by a music-
playing program.
Understanding Computer Systems
Random storage. Internal storage is volatile—its contents are lost when the
access computer is turned off or loses power. Usually, you want to be able to
memory, or
retrieve and perhaps modify the stored instructions later, so you also
RAM, is a
form of inter-
store them on a permanent storage device, such as a disk. Permanent
nal, volatile memory. It is storage devices are nonvolatile—that is, their contents are persistent
hardware on which the and are retained even when power is lost.
4
programs that are cur-
After a computer program is stored in memory, it must be trans-
rently running and the
data items that are lated from your programming language statements to machine
currently being used language that represents the millions of on/off circuits within the
are stored for quick computer. Each programming language uses a piece of software,
access. called a compiler or an interpreter, to translate your program
code into machine language. Machine language is also called
binary language, and is represented as a series of 0s and 1s. The
The program compiler or interpreter that translates your code tells you if any
statements programming language component has been used incorrectly.
you write in a Syntax errors are relatively easy to locate and correct because
programming
the compiler or interpreter you use highlights every syntax error.
language are
known as source code.
If you write a computer program using a language such as C++
The translated machine but spell one of its words incorrectly or reverse the proper order
language statements are of two words, the software lets you know that it found a mistake
known as object code. by displaying an error message as soon as you try to translate the
program.
Although there are differences in how compilers and interpreters work, their
basic function is the same—to translate your programming statements into
code the computer can use. When you use a compiler, an entire program is
translated before it can execute; when you use an interpreter, each instruc-
tion is translated just prior to execution. Usually, you do not choose which
type of translation to use—it depends on the programming language. However, there
are some languages for which both compilers and interpreters are available.
In each Two Truths and a Lie section, two of the numbered statements are true,
5
and one is false. Identify the false statement and explain why it is false.
1. Hardware is the equipment, or the devices, associated with a computer.
Software is computer instructions.
2. The grammar rules of a computer programming language are its syntax.
3. You write programs using machine language, and translation software con-
verts the statements to a programming language.
After you learn Just as baking directions can be given correctly in Mandarin, Urdu,
French, you or Spanish, the same program logic can be expressed in any number
automatically
of programming languages. Because this book is not concerned with
know, or can
easily figure
any specific language, the programming examples could have been
out, many Spanish words. written in Visual Basic, C++, or Java. For convenience, this book uses
Similarly, after you learn instructions written in English!
6
one programming lan-
Most simple computer programs include steps that perform input,
guage, it is much easier
to understand several processing, and output. Suppose you want to write a computer
other languages. program to double any number you provide. You can write such a
program in a programming language such as Visual Basic or Java,
but if you were to write it using English-like statements, it would
You will learn look like this:
about the odd
input myNumber
elimination of
set myAnswer = myNumber * 2
the space
output myAnswer
between
words like my and The number-doubling process includes three instructions:
Number in Chapter 2.
• The instruction to input myNumber is an example of an input
operation. When the computer interprets this instruction, it
knows to look to an input device to obtain a number. When you
work in a specific programming language, you write instructions
that tell the computer which device to access for input. For exam-
ple, when a user enters a number as data for a program, the user
might click on the number with a mouse, type it from a keyboard,
or speak it into a microphone. Logically, however, it doesn’t really
matter which hardware device is used, as long as the computer
knows to look for a number. When the number is retrieved from
an input device, it is placed in the computer’s memory at the
location named myNumber. The location myNumber is a variable. A
variable is a named memory location whose value can vary—for
example, the value of myNumber might be 3 when the program is
used for the first time and 45 when it is used the next time.
From a logical perspective, when you input a value, the hardware device is
irrelevant. The same is true in your daily life. If you follow the instruction “Get
eggs for the cake,” it does not really matter if you purchase them from a
store or harvest them from your own chickens—you get the eggs either way.
There might be different practical considerations to getting the eggs, just as
there are for getting data from a large database as opposed to an inexperienced user.
For now, this book is only concerned with the logic of the operation, not the minor
Programmers details.
use an aster-
isk to indicate
multiplication.
• The instruction set myAnswer = myNumber * 2 is an example
You will learn of a processing operation. Mathematical operations are not the
more about arithmetic only kind of processing operations, but they are very typical. As
statements in Chapter 2. with input operations, the type of hardware used for processing
Understanding Simple Program Logic
1. A program with syntax errors can execute but might produce incorrect results.
2. Although the syntax of programming languages differs, the same program
logic can be expressed in different languages.
3. Most simple computer programs include steps that perform input, process-
ing, and output.
program with no syntax errors can execute, but might produce incorrect results.
The false statement is #1. A program with syntax errors cannot execute; a
CHAPTER 1 An Overview of Computers and Programming
Understand
the problem
needs a Web site to provide buyers with an online shopping cart in The term end
which to gather their orders. Because programmers are providing a user distin-
guishes those
service to these users, programmers must first understand what the
who actually
users want. Although when a program runs, you usually think of the use and ben-
logic as a cycle of input-processing-output operations; when you efit from a software prod-
plan a program, you think of the output first. After you understand uct from others in an
9
what the desired result is, you can plan what to input and process to organization who might
achieve it. purchase, install, or have
other contact with the
Suppose the director of Human Resources says to a programmer, software.
“Our department needs a list of all employees who have been here
over five years, because we want to invite them to a special thank-you
dinner.” On the surface, this seems like a simple request. An experi-
enced programmer, however, will know that the request is incom-
plete. For example, you might not know the answers to the following
questions about which employees to include:
• Does the director want a list of full-time employees only, or a list
of full- and part-time employees together?
• Does she want people who have worked for the company on a
month-to-month contractual basis over the past five years, or only
regular, permanent employees?
• Do the listed employees need to have worked for the organization
for five years as of today, as of the date of the dinner, or as of some
other cutoff date?
• What about an employee who, for example, worked three years,
took a two-year leave of absence, and has been back for three years?
The programmer cannot make any of these decisions; the user (in this
case, the Human Resources director) must address these questions.
More decisions still might be required. For example:
• What data should be included for each listed employee? Should
the list contain both first and last names? Social Security numbers?
Phone numbers? Addresses?
• Should the list be in alphabetical order? Employee ID number
order? Length-of-service order? Some other order?
• Should the employees be grouped by any criteria, such as depart-
ment number or years of service?
Several pieces of documentation are often provided to help the pro-
grammer understand the problem. Documentation consists of all the
supporting paperwork for a program; it might include items such
as original requests for the program from users, sample output, and
descriptions of the data items available for input.
CHAPTER 1 An Overview of Computers and Programming
Watch the video Really understanding the problem may be one of the most difficult
The Program aspects of programming. On any job, the description of what the user
Development
needs may be vague—worse yet, users may not really know what they
Cycle, Part 1.
want, and users who think they know frequently change their minds
after seeing sample output. A good programmer is often part coun-
selor, part detective!
10
planning and writing a very simple program, just as you can plan and
write a postcard to a friend using one step. A good term paper or a
Hollywood screenplay, however, needs planning before writing—and
so do most programs.
Which step is harder: planning the logic or coding the program?
Right now, it may seem to you that writing in a programming lan- 11
guage is a very difficult task, considering all the spelling and syntax
rules you must learn. However, the planning step is actually more
difficult. Which is more difficult: thinking up the twists and turns to
the plot of a best-selling mystery novel, or writing a translation of an
existing novel from English to Spanish? And who do you think gets
paid more, the writer who creates the plot or the translator? (Try
asking friends to name any famous translator!)
the cat,” the compiler at first might point out only one syntax error.
The second word, “dg,” is illegal because it is not part of the English
After a pro- language. Only after you corrected the word to “dog” would the com-
gram has piler find another syntax error on the third word, “chase,” because it is
been trans- the wrong verb form for the subject “dog.” This doesn’t mean “chase”
lated into is necessarily the wrong word. Maybe “dog” is wrong; perhaps the
12 machine lan- subject should be “dogs,” in which case “chase” is right. Compilers
guage, the machine lan-
don’t always know exactly what you mean, nor do they know what the
guage program is saved
and can be run any num-
proper correction should be, but they do know when something is
ber of times without wrong with your syntax.
repeating the translation
When writing a program, a programmer might need to recompile the
step. You only need to
retranslate your code if
code several times. An executable program is created only when the
you make changes to code is free of syntax errors. When you run an executable program, it
your source code typically also might require input data. Figure 1-2 shows a diagram of
statements. this entire process.
If there are no
Write and correct Compile the syntax errors Executable
the program code program program
If there are
syntax errors
List of Program
syntax output
error
messages
If you execute the program, provide the value 2 as input to the pro-
gram, and the answer 4 is displayed, you have executed one successful
test run of the program.
However, if the answer 40 is displayed, maybe the program contains
a logical error. Maybe the second line of code was mistyped with an
extra zero, so that the program reads:
input myNumber Don’t Do It
set myAnswer = myNumber * 20 The programmer typed
output myAnswer "20" instead of "2".
The process
Placing 20 instead of 2 in the
of finding and
multiplication statement caused a logical error. Notice that nothing is correcting
syntactically wrong with this second program—it is just as reasonable program
to multiply a number by 20 as by 2—but if the programmer intends errors is
only to double myNumber, then a logical error has occurred. called debugging.
from the five-year list. Many companies do not know that their
software has a problem until an unusual circumstance occurs—for
Chapter 4
contains more
example, the first time an employee has more than nine depen-
information on dents, the first time a customer orders more than 999 items at a
testing time, or when (as well-documented in the popular press) a new
programs. century begins.
14
1. Understanding the problem that must be solved can be one of the most dif-
15
ficult aspects of programming.
2. The two most commonly used logic-planning tools are flowcharts and
pseudocode.
3. Flowcharting a program is a very different process if you use an older
programming language instead of a newer one.
Writing Pseudocode
You have already seen examples of statements that represent pseudo-
code earlier in this chapter, and there is nothing mysterious about
them. The following five statements constitute a pseudocode repre-
sentation of a number-doubling problem:
start
input myNumber
set myAnswer = myNumber * 2
output myAnswer
stop
CHAPTER 1 An Overview of Computers and Programming
Using pseudocode involves writing down all the steps you will use in
a program. Usually, programmers preface their pseudocode with a
beginning statement like start and end it with a terminating state-
ment like stop. The statements between start and stop look like
English and are indented slightly so that start and stop stand out.
Most programmers do not bother with punctuation such as periods
16
at the end of pseudocode statements, although it would not be wrong
to use them if you prefer that style. Similarly, there is no need to capi-
talize the first word in a sentence, although you might choose to do
so. This book follows the conventions of using lowercase letters for
verbs that begin pseudocode statements and omitting periods at the
end of statements.
Pseudocode is fairly flexible because it is a planning tool, and not the
final product. Therefore, for example, you might prefer any of the
following:
• Instead of start and stop, some pseudocode developers would
use the terms begin and end.
• Instead of writing input myNumber, some developers would write
get myNumber or read myNumber.
Drawing Flowcharts
Some professional programmers prefer writing pseudocode to
drawing flowcharts, because using pseudocode is more similar to
writing the final statements in the programming language. Others
prefer drawing flowcharts to represent the logical flow, because flow-
charts allow programmers to visualize more easily how the program You can draw 17
statements will connect. Especially for beginning programmers, flow- a flowchart by
charts are an excellent tool to help them visualize how the statements hand or use
software,
in a program are interrelated.
such as
When you create a flowchart, you draw geometric shapes that contain Microsoft Word and
the individual statements and that are connected with arrows. You Microsoft PowerPoint,
that contains flowcharting
use a parallelogram to represent
tools. You can use sev-
an input symbol, which indicates input myNumber eral other software pro-
an input operation. You write an grams, such as Visio and
input statement in English inside the Visual Logic, specifically
parallelogram, as shown in Figure 1-3. Figure 1-3 Input symbol to create flowcharts.
Some software programs that use flowcharts (such as Visual Logic) use
a left-slanting parallelogram to represent output. As long as the flowchart
creator and the flowchart reader are communicating, the actual shape
used is irrelevant. This book will follow the most standard convention
of always using the right-slanting parallelogram for both input and output.
Appendix B
To show the correct sequence of these statements, you use arrows, or
contains a
flowlines, to connect the steps. Whenever possible, most of a flow- summary of
chart should read from top to bottom or from left to right on a page. all the flow-
That’s the way we read English, so when flowcharts follow this con- chart symbols
vention, they are easier for us to understand. you will see in this book.
CHAPTER 1 An Overview of Computers and Programming
Flowchart Pseudocode
start
input myNumber
start
input myNumber
set myAnswer =
set myAnswer = myNumber * 2
myNumber * 2
output myAnswer
stop
output myAnswer
stop
Repeating Instructions
After the flowchart or pseudocode has been developed, the
programmer only needs to: (1) buy a computer, (2) buy a language
compiler, (3) learn a programming language, (4) code the pro-
gram, (5) attempt to compile it, (6) fix the syntax errors, (7) com-
pile it again, (8) test it with several sets of data, and (9) put it into
production.
“Whoa!” you are probably saying to yourself. “This is simply not worth
it! All that work to create a flowchart or pseudocode, and then all those
other steps? For five dollars, I can buy a pocket calculator that will
Using Pseudocode Statements and Flowchart Symbols
double any number for me instantly!” You are absolutely right. If this When you tell
were a real computer program, and all it did was double the value of a a friend how
to get to your
number, it would not be worth the effort. Writing a computer program
house, you
would be worthwhile only if you had many—let’s say 10,000—numbers might write a
to double in a limited amount of time—let’s say the next two minutes. series of instructions or
you might draw a map.
Unfortunately, the number-doubling program represented in 19
Pseudocode is similar to
Figure 1-6 does not double 10,000 numbers; it doubles only one. You
written, step-by-step
could execute the program 10,000 times, of course, but that would instructions; a flowchart,
require you to sit at the computer and tell it to run the program over like a map, is a visual
and over again. You would be better off with a program that could representation of the
process 10,000 numbers, one after the other. same thing.
One solution is to write the program shown in Figure 1-7 and execute
the same steps 10,000 times. Of course, writing this program would
be very time consuming; you might as well buy the calculator.
start
input myNumber
set myAnswer = myNumber * 2
output myAnswer
input myNumber
set myAnswer = myNumber * 2
output myAnswer Don’t Do It
input myNumber You would never want to
set myAnswer = myNumber * 2 write such a repetitious
output myAnswer list of instructions.
…and so on for 9,997 more times
Figure 1-7 Inefficient pseudocode for program that doubles 10,000 numbers
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.
ebookultra.com