2. Problem Solving
A Temperature-conversion problem:
Write a program that, given a temperature in Celsius,
displays that temperature in Fahrenheit.
• Implementation (Coding)
• Testing, Execution and Debugging
• Maintenance
OCD (Object-Centered Design)
2
5 Phases of (Simplified) Software Life Cycle:
• Problem Analysis and Specification
• Design
3. OCD (Object-Centered Design)
1. Describe the behavior of the program.
2. Identify the problem’s objects and make
a table of information about them.
3. Identify the problem’s operations and
make a table of information about them.
4. Organize the objects and operations into a
sequence of steps, called an algorithm,
to solve the problem.
3
4. Behavior
A. Describe the desired behavior of the program:
Our program should display program information
to the user and then a prompt for the
Celsius temperature on the screen, read that
temperature from the keyboard, compute the
corresponding Fahrenheit temperature, and
display the result, along with a descriptive
label on the screen.
4
Using
OCD
5. Problem Objects
B. Identify the nouns in the behavioral description (other than
"non-behavioral" ones like "program" and "user"):
Our program should display program information
to the user and then a prompt for the
Celsius temperature on the screen, read that
temperature from the keyboard, compute the
corresponding Fahrenheit temperature, and
display that temperature, along with a descriptive
label on the screen.
These make up the objects in our problem.
5
Using
OCD
6. cout
cin
Information about Objects
Determine a type and a name (if necessary) for each
object and whether it is a constant or a variable.
6
Problem Object Type Kind Name
program information text constant none
prompt text constant none
Celsius temperature real
number
variable celsius
screen output variable
keyboard input variable
Fahrenheit temperature real
number
variable fahrenheit
label text constant none
Using
OCD
C++ Type
?
?
double
?
?
double
?
7. Operations
These make up the operations in our problem.
C. Identify the verbs in the behavioral description:
Our program should display program information
to the user and then a prompt for the
Celsius temperature on the screen, read that
temperature from the keyboard, compute the
corresponding Fahrenheit temperature, and
display that temperature, along with a descriptive
label on the screen.
7
Using
OCD
8. Information about Operations
Identify the C++ operator to perform
a given operation, if there is one.
To compute the Fahrenheit temperature, we need to
know/find the Celsius to Fahrenheit conversion formula.
8
Operation
Pre-
defined?
C++
Operator Library
Display yes << iostream
Read yes >> iostream
Compute the Fahrenheit
temperature
?? ?? ??
Using
OCD
9. Celsius-to-Fahrenheit
Formula for converting Celsius to Fahrenheit:
fahrenheit = 1.8 × celsius + 32
Converting the temperature thus adds new
objects and operations to our problem.
9
Using
OCD
10. Information about Objects
(Revised)
10
Problem Object Type Kind C++ Type Name
program information text constant ? none
prompt text constant ? none
Celsius temperature real
number
variable double celsius
screen output variable ? cout
keyboard input variable ? cin
Fahrenheit temperature real
number
variable double fahrenheit
label text constant ? none
conversion
factor 1.8
real
number
constant double none
conversion
factor 32
integer constant int none
Using
OCD
11. Information about Operations
(Revised)
11
Operation
Pre-
defined?
C++
Operator Library
Display yes << iostream
Read yes >> iostream
Compute the Fahrenheit
temperature:
Multiply two real values
(1.8 and celsius)
yes * built-in
Add a real value (the result
above) and an integer (32)
yes + built-in
Store a real value (the
result above) in a variable
yes = built-in
Using
OCD
12. Algorithm
D. Organize the objects and operations into a
sequence of steps that solves the problem,
called an algorithm.
1. Display via cout information about the program
to the user.
2. Display via cout a prompt for the Celsius temperature.
3. Read the temperature from cin.
4. Compute the Fahrenheit temperature from the Celsius
temperature.
5. Display via cout the Fahrenheit temperature and an
informative label.
12
Using
OCD
13. Coding
Once we have designed an algorithm, the next
step is to translate that algorithm into a high
level language like C++.
This involves writing instructions to
— represent the objects, and
— perform the operations
in C++.
13
14. 14
The Code
When learning
to program, it
is helpful to
just start with
the algorithm
as comments
in main()
/*
John Doe
CS 104X
Input:
Output:
-----------------------------------------------*/
#include <iostream> // cin, cout, <<, >>
using namespace std;
int main()
{
}
/* temperature.cpp converts a Celsius
temperature to Fahrenheit.
John Doe Lab 1 Jan. 5, 2012
CS 104X
Input: A Celsius temperature
Output: Corresponding Fahrenheit temperature
-----------------------------------------------*/
#include <iostream> // cin, cout, <<, >>
using namespace std;
int main()
{
// 1. Display via cout information about the
// program to the user.
// 2. Display via cout a prompt for the Celsius
// temperature.
// 3. Read the temperature from cin.
// 4. Compute the Fahrenheit temperature from the
// Celsius temperature.
// 5. Display via cout the Fahrenheit temperature
// and an informative label.
}
15. cout << "John Doe CS 104X -- Lab 1nn";
cout << "** Convert Celsius temps to Fahrenheit **n";
cout << "Please enter a temperature in Celsius: "; 15
/* temperature.cpp converts a Celsius
temperature to Fahrenheit.
John Doe Lab 1 Jan. 5, 2012
CS 104X
Input: A Celsius temperature
Output: Corresponding Fahrenheit temperature
-----------------------------------------------*/
#include <iostream> // cin, cout, <<, >>
using namespace std;
int main()
{
// 1. Display via cout information about the
// program to the user.
// 2. Display via cout a prompt for the Celsius
// temperature.
The Code
16. double celsius;
cin >> celsius;
double fahrenheit = 1.8 * celsius + 32;
cout << celsius << " degrees Celsius is "
<< fahrenheit << " degrees Fahrenheit.n";
16
// 3. Read the temperature from cin.
// 4. Compute the Fahrenheit temperature from the
// Celsius temperature.
// 5. Display via cout the Fahrenheit temperature
// and an informative label.
}
The Code
It’s wise to echo input
data to insure computer
read what you intended.
17. 17
Comments
/* temperature.cpp converts a Celsius
temperature to Fahrenheit.
John Doe Lab 1 Jan. 5, 2012
CS 104X
Input: A Celsius temperature
Output: Corresponding Fahrenheit temperature
-----------------------------------------------*/
#include <iostream> // cin, cout, <<, >>
using namespace std;
int main()
{
// 1. Display via cout information about the
// program to the user.
cout << "John Doe CS 104X -- Lab 1nn";
cout << "** Convert Celsius temps to Fahrenheit **n";
// 2. Display via cout a prompt for the Celsius
// temperature.
cout << "Please enter a temperature in Celsius: ";
Always begin
a program with
opening
documentation
enclosed in
/* and */.
18. /* temperature.cpp converts a Celsius
temperature to Fahrenheit.
John Doe Lab 1 Jan. 5, 2012
CS 104X
Input: A Celsius temperature
Output: Corresponding Fahrenheit temperature
-----------------------------------------------*/
#include <iostream> // cin, cout, <<, >>
using namespace std;
int main()
{
// 1. Display via cout information about the
// program to the user.
cout << "John Doe CS 104X -- Lab 1nn";
cout << "** Convert Celsius temps to Fahrenheit **n";
// 2. Display via cout a prompt for the Celsius
// temperature.
cout << "Please enter a temperature in Celsius: "; 18
Libraries
This loads the C++
library that we need.
Lab & Proj. 1: #include <cmath>
19. 19
/* temperature.cpp converts a Celsius
temperature to Fahrenheit.
John Doe Lab 1 Jan. 5, 2012
CS 104X
Input: A Celsius temperature
Output: Corresponding Fahrenheit temperature
-----------------------------------------------*/
#include <iostream> // cin, cout, <<, >>
using namespace std;
int main()
{
// 1. Display via cout information about the
// program to the user.
cout << "John Doe CS 104X -- Lab 1nn";
cout << "** Convert Celsius temps to Fahrenheit **n";
// 2. Display via cout a prompt for the Celsius
// temperature.
cout << "Please enter a temperature in Celsius: ";
Each step of the
algorithm is implemented
by one or more C++
program statements
inside main() function.
Why no n ?
20. 20
// 3. Read the temperature from cin.
double celsius;
cin >> celsius;
// 4. Compute the Fahrenheit temperature from the
// Celsius temperature.
double fahrenheit = 1.8 * celsius + 32;
// 5. Display via cout the Fahrenheit temperature
// and an informative label.
cout << celsius << " degrees Celsius is "
<< fahrenheit << " degrees Fahrenheit.n";
}
Each step of the
algorithm is implemented
by one or more C++
program statements
inside main() function.
Note spacing, indentation, & alignment to make
program “look nice” and easier to read.
This will be one criterion used in grading.
Always
a good
idea to
echo
input data
21. Testing
Run your program using sample data (whose
correctness is easy to check):
John Doe CS 104X -- Lab 1
** Convert Celsius temps to Fahrenheit **
Please enter the temperature in Celsius: 0
0 degrees Celsius is 32 degrees Fahrenheit.
21
John Doe CS 104X -- Lab 1
** Convert Celsius temps to Fahrenheit **
Please enter the temperature in Celsius: 100
100 degrees Celsius is 212 degrees Fahrenheit.
22. When you are convinced that the program is
correct, run it with the required data values.
John Doe CS 104X -- Lab 1
** Convert Celsius temps to Fahrenheit **
Please enter the temperature in Celsius: -17.78
-17.78 degrees Celsius is -0.004 degrees Fahrenheit.
22
23. 23
For a programming assignment:
Lose a few points or may be lucky and the grader doesn’t
catch it.
For a real-world problem:
Much more may be at stake: money, jobs, and even lives.
Why Testing is Important:
• September,1999: Mars Climate Orbiter
• June, 1996: Ariane 5 rocket
• March,1991: DSC Communications
• February 25, 1991(Gulf War): Patriot missile
Testing is never finished; it is only stopped.
Testing can only show the presence of errors,
not their absence.
See
Other Course
Information
(CS 104 page):
• Importance of
Program Testing
— Horror Stories
24. Maintenance
24
• Large % of computer center budgets
• Large % of programmer's time
• Largest % of software development cost
Why?
Poor structure, poor documentation, poor style
⇒ less likely to catch bugs before release
⇒ fixing of bugs difficult and time-consuming
⇒ impede implementation of enhancements
See
Other Course
Information
(CS 104 page):
• Time Spent on
Program
Maintenance