- 9/20/07
- Formatting
- Integers
- When you define a variable, (int numb=3) the comp uses
some space in the memory to store it
cout.width(3) // the next intiger
should be printed in 3 positions
- The problem with this is that it only works for one
statement; you’d need to repeat it each time (if u put it
in a loop, it’ll do it every time anyway, but it’s still
tedious)
cout.width(3);
cout << numb1 << numb2; // only numb1 will
get the alignment
- Float and Double
- When you define a variable in float or double, it gets
stored in scientific notation ex. 56230 would
be stored as 5.623*104
- So for this, you have to define how many decimal pts and
then the alignment
cout.setf(ios::fixed,ios::floatfield);
Cout.precision(3) // 3 decimal places on floating
or double numbers
- These can be set in the beg of the program and will stay
for the rest of the program, unless you change it later-
so would probably be in towards beg of program and then
later you can say
cout.width(10);
- Best idea would be to type it once at top of the program
as a comment and then just copy and paste it as you need
it
- 10/15/07
- Input
- for (numb=1000, numb<=2000, numb++)
then you change the numbers from 100 to 200, and u can change
it again to any number, but each time u change it, u have to
change the program- the numbers, re-compile it, and recreate
the object program--- requires human intervention
we want to write a program that will change it for us
- so instead of program generated data (done by programer) we
want user generated data (by the user)
sum=0;
for (numb=first; numb<=last; numb++)
sum+=numb;
- so instead of numbers, it's now from 'first' to 'last' -- cin
(vs. cout)
cin >> first;
cin >> last;
- now the program is ineractive, the user can put in the
numbers, so until a number is typed it, the program suspends
activity
cout << "enter starting number" << endl;
cin >> first;
cin >> last;
cout << "enter last number" << endl;
- 10/18/07
- Input
- To set Width by using a function
void printout (numb,wid)
{
cout.width (wid);
cout << numb;
return;
}
- so now you can print
printout (numb,8);
printout (xyz,4);
- instead of saying 'print out all the prime numbers between 1
and 100' you can let the user see if the number's prime-
write a function called 'prime'
int prime (int numb)
{
for (i=2; i<numb; i++)
if (numb%i==0)
return 0;
return 1;
}
- and then the main program would be
int main () {
int number
cin << number;
if prime (number) ==1;
cout << number << "is prime";
else cout << number << "is composite";
return 0;
}
- Input Control
- The problem with input is that it's not flexible, so you can
create a tool to check several numbers to see if they're
prime, there are 3 ways to know when you're finished:
- count control- before you start, you know how many
numbers you're going to be dealing with, have to know
before how many numbers it will be
- trailer method- make a specific data item that will mean
stop and then you just keep throwing numbers, and when
you get a number that's not on the list, stop
- end-of-file- just stop when you run out of data
- Count Control
- To write a program to check a bunch of numbers, first
need to put it in a loop, and this uses functio 'prime'
int main () {
int number, count, i ;
cout << "enter count of numbers";
cin >> count;
for (i=1;i<=count; i++){
cout << "enter next number";
cin >> number;
if (prime (number) ==1)
cout << number << "is prime" << endl;
else cout << number << "is composite" << endl;
}
return 0;
}
- most of the time, this method isn't practical, so we'll
learn the other 2 next week
- If you want to make a list of 500 numbers and then give the
whole list to the computer, instead of manually typing in
each number -- Input File- gets data from a file on disk
- Output File means that when you finish, write the answer to a
disk
- To get the file:
#include <iostream> // how you used cin and cout
# include <fstream> // file stream
- To use an input file- need to declare the file, open the file
(can be done w one statement at the beg of the program), read
the file, and close the file (oe statement at the end)
- Declare and Open File
ifstream infile; //infile is
a made-up name, (i -input, fstream- file stream)
infile.open ("ast5.dat"); // open file
ast5.dat
ifstream infile ("ast5.dat"); // or this way-
both statements combined -- goes as beg of program
- To Read the File
infile >> x;
- To Close the File
infile.close () ;
- Full Program: (again using 'prime' function)
int main () {
ifstream infile ("ast5.dat");
int number, count, i;
infile >> count;
for (i=1; i<=count; i++){
infile >> number;
if (prime (number) == 1)
cout << number << " is prime";
else cout << number << " is composite";
}
infile.close () ;
return 0;
}
- 10/22/07
- Nested Loops- you can also have more than one loop within a
program, but instead of making the comp get the numbers several
times, u should use nested loops-- going through numbers once and
then doing all the computations
- Trucking company sends a certain amount of trucks w certain
amount of cartons and they each weigh a certain amount- to
determine how many cartons it can handle-- so first number is 5
(number of trucks), then is the number of cartons- header (3),
then is the weight (and will b 3 dif numbers), and you need five
lines like this b/c it's 5 trucks -- we want to print out a
report w truck number, number of cartons, total weight,
overweight (any truck w more than 500 lbs)-- ex. truck 1, 3
cartons, total is 350 lbs and no overweight so will be blank (if
overweight, put a star) -- we have to write a program that even
if u change the data, will get the righ answers
cin >> ntrucks; // will read the first number
for (tr=1; tr<=ntrucks; tr++) { // will
go around as many times as there are trucks ( now it's 5)
// process next truck
cin >> ncartons; // will read the next number as
number of cartons
for (ctn=1; ctn<=ncartons; ctn++) {
// process next carton
cin >> weight;
twt=twt+weight;
}
cout << tr << ncartons << twt << endl;
if (twt >=500)
cout << "*" << endl;
else cout << endl;
}
- there are 3 dif types of numbers here- numb of trucks, numb of
cartons, and weight
- Compound Interest- as you make more money, get more intereste
- princ= 1000, rate is 10%, and you want to leave it there for
5 yrs
- we want to write a function that will find total- accepts
principle, numb of yrs, and rate; return- final amount,
header would be double TotInt (double princ ,double rate, int
yrs)
double TotInt (double princ ,double rate, int yrs){
double amount= princ, interest;
int yr;
for (yr=1; yr<=yrs; yr++) {
interest= amt * rate;
amt+=interest;
}
return amt;
}
- formula for compund interest is P (1+r) n
- compounding semi-annually, would call it 'start, interest,
final' so interest for 1000 dollars for a yr would b 100, so
6 months would b 50, so end of 6 mo is 1050, 1 year is
1102.50 -- vs. just each yr would b 1100 -- so formula is now
P(1+r/f)n*f so header for compound interest would be
double compound (double princ,double rate, int yrs)
double compound (double princ,double rate, int yrs, int
freq) // new part is frequency- how often u compound
for (yr=1; yr<=years*freq; yr++) {
interest= amt*rate/freq
}
- 10/25/07
- Arrays- stores homogeneous data all together, ex. all numbers--
characters etc would be kept in other things- Classes or
Structures
- Summary Statistics
- We've looked at Sum, Count, and Average already-- you can
also look at variants, mode, statistical deviation etc.
- Minimum and Maximum are also impt- smallest and largest
numbers, and then you can find the range too- (maximum
-minimum)
let x= largest of a and b
if (a>b)
x=a;
else x=b;
- the problem comes up when there's more than 2 numbers because
that has too many options (ex. 3 numbers has 6 possibilities)
a=3, b=15,c=8 we want x to equal the largest
if (a>b)
x=a;
else x=b; // now we know x will be the
larger of a and b, but we still have c
if (c>x) // now we can check if c is
greater than a and b
x=c;
- if we have a,b,c,d
if (a>b)
x=a;
else x=b;
if (c>x)
x=c;
if (d>x)
x=d;
- minimum would be the same, except instead of greater than, do
less than
- function for 2 numbers:
int big2 (int a, int b){
if (a>b)
return a;
else return b;
}
- function for 3 numbers:
int big3 (int a, int b, int c) {
int x;
x= big 2 (a,b) // you can just call the
other function
x= big 2 (c,x)
return x;
}
// or you can
return big2 (big 2 (a,b), c);
- function for 4 numbers:
int big4 (int a, int b, int c, int d) {
x=big 3 (a, b, c);
x=big 2 (x,d);
return x;
- There is way to write a function for 'big' that will accept
any number of parameters and will find the greatest of any
numbers without telling it before (we won't learn that now)
- I have a file of data and I don't know how many numbers are
in it, find the largest in the file-- loop, input, with a
count-- the first number in the file is the amount of numbers
large = -9999; //
it's hard to know what to initialize 'large' to, b/c even
if u do this, the numbers might b smaller
cin >> cnt; //
manual user input
for (i=1, i<=cnt; i ++) {
// process next number
cin >> number;
if (number > large)
large = number;
}
cout << "largest number is " << large << endl;
- To find the smallest:
small= 10000000 // very large number
if (number < small)
small = number;
cout << "the smallest number is " << small << endl;
- New Program: To say the largest number, but also where the
number came from (position)
large = -1;
cin >> cnt;
for (i=1; 1<= cnt; i++)
if (number> large){
large= number;
lgpso=i;
}
}
cout << "largest number is " << large << " at position "
<< lgpos << endl;
- Approximation- you know principle, years, and final
investment-- you want to know what the rate is to get that
amount-- we might not get the exact amount, but it'll b close
- you're looking for a rate, most interest rates are
between 0 and 1 (0% and 100%), so you start with .0001
and end with .9999, assume that rate will be directly in
the middle (.50)- try that, final amount is too high, so
now try .25 -- and it's still too big, so try mid again
.125, if that's too small, then u'll take the number half
way and it's in the upper half etc.
double calcrate (double princ, int yrs, int freq,
double finalamt)
low=.0001; // better not to make it 0 cuz u
might end up dividing by 0 and stuff like that
high = .9999;
// can't use a for loop because u dont know how
many times u're gonna go around
while (high-low > .0001) { //
whatever level of accuracy you want- getting the
numbers to b almost the same
rate= (low+high)/2; // to find the number
directly in mid
amt = FinAmt (princ, rate, yrs, freq)
// function to find total sum, assignment 5
if (amt > famt); // compare the answer
we got with the final amt
high = rate; // low stays the same,
and high becomes the half way pt
else low = rate;
}
return rate;
}
- 10/29/07
- Input Control
- how many times you go around the loop
- Count Controlled- you provide the count, first number in the
file and then do the loop
cin >> count;
for (i=1;i<=2;i++) {
cin >> value;
// process value
}
- Trailer Data- keep sending the data, and at the end will be
another piece of data which signals that i'm done
50 50 50 40 30 100 500 -1 // -1 is the signal
that ure done, it's the trailer
- Code:
cin >> value; // for the
first number, to enter the loop
while (value!= -1) {
// process value
cin >> value; // to get the
next number from the file
}
- End of File- the program will just run out or data and that's
wen the program ends
- Arrays
- you can store as many numbers as you want in an integer,
there are 5 dif boxes for a and they're divided by an index
or subscript (a 0, a 1, a 2, a 3 etc.) -- the first number is
0 -- remember that, we reference elements of the array by the
subscript -- int a [3]; // a will have 3 possible values
stored as a 0, a 1, and a 2
cout << a[2];
a[2] = 14 // goes to box a 2 and makes it 14
cin >> a[1] // takes the value from input and
puts it into a 1 box
if you say a[4] =10;
it's out of the bounds of the integer, will either get an
error or will do nothing
- Code, a single statement that uses i as index can use b[0]
till the end
int b[4];
for (i=0; i<4; i++) // MUST be less than, not
less than or equal b/c u'll end up w out of bounds
b[i]=5*i;
- another code-
int c [6] = {10,20,30,40,50,60}; // so c[0] = 10,
c[1]= 20 etc.
for (i=0; i<6; i++)
c [i] = c[i] -2 *i; // c [1] =
20, - 2*1, so c[1] becomes 18 etc. (c[0] stays 10)
- 2 * d(i-1) -- is whatever d[4] is (i=5) , 2*d[i] - 1, so it's
d[5] value and -1 from that
- you can create as many arrays as you want, for what purpose
you want
int a[5] = {10,20,30,40,50];
int b[5] = [1,2,3,4,5];
for (i=o; i <=3; i++) {
b[i]= b[1] + a [i+1];
- 10 stores, purchases are made-- 3 100 , 2 50, 8 700, 5
20, 2 100 (store number price), you want a report of total
sales by store (we have to number from 0-9 cuz we're using
arrays) and we're going to add up all the sales by store,
we'll only have 10 numbers at the end no matter how much info
is put in -- unknown number of input lines, but will be 10
output lines, first you have to decide how you know wen ure
done -- here we'll use -1 to mean the end (trailer data)
double sales [10] = // makes 10 slots
for data (0-9), one for each store
// initialize sales to 0
for (st=0; st <=9; st++)
sales [st] =0;
cin >> st >> amt; // reads in to pieces of
info
while (st!=-1){
// process new transaction
sales [st] = sales [st]+amt; // sales of
the store number, plus amt (sum)
cin >> st>> amt; // then you
need to read in the next number
}
// this will update all the values of 'sales'
// print
for (st=0, st<=9; st++)
cout << st << sales [st] << endl;
- 11/1/07
- Arrays and Functions
- you use arrays when you're gonna need them throughout the
program, if you need it once, you dont need it
- another way you might need an array would be if you want to
print them all out backwards- when you will need to get to
dif numbers
- read in a set of numbers, store them in an array, call a
function to find the sum and print the sum (u dont really
need an array to get a sum, we're just gonna use it here),
and we're going to use count method to tell it when to stop
data is: 4, 8, 3, 7, 2
int main () {
int numb[100], i, sum;
cin >> count;
for (i=0;i<5, i++){
// read data into array
cin >> n; // or you
can do cin>> numb[i];
numb[i]=n;
}
sum=SArray(numb,count) // you need to pass 2
variables, because you need to tell the function
how many elements are in the array
cout << "the sum of the elements is " << sum << endl;
return 0;
}
// function (type, name, parameters)
int SArray (int numb[ ], int count); // [ ] says
we're using an array, but we dont put a number
int sm=0;
for (j=0; j<count;j++)
sm= sm+=numb[j];
return sm;
- arrays compute from base-offset -- meaning you start at numb
and go as many spaces over that you need, so if the array
goes to 99, and you write a[150], you might not get an error,
it'll just go 150 spaces over, past the array, you'll just
get nonsense -- declaring it only tells it where to start,
not where to end -- which is why wen you pass the array, you
need to also pass the count- how far it's going to go, doesnt
matter how big the array is because it can keep going, you
need to know how many elements you're using -- you need to
know how many you're using
- to use trailer method, function stays the same
data: 8,3,7,2,-1
cin >> n;
int i=0;
while (n>=0) {
numb [i] = n;
i++; // or you can do numb[i++]=n
cin >> n; // when it reads it -1, goes
back to top, and then leaves loop
}
count =i; // you need to make a separate
count for the function, could do it however
- function to compute the average of elements of an array
double avg (int a [] , int count)
{
double sum=0;
for (i=0;i<count;i++)
sum=sum+a[i];
return sum/count;
}
in main -- cout << "average of a is " << avg (a,4);
to find for another array, cout << "average of be is " <<
avg (b,6); -- you can also do avg (b,3) -- will give you
average of the first 3 numbers
- function to compute the largest element of an array
int large (int a [], int count )
int i; big= a[0]; // hard to figure
out how to initialize big, but now that you have the
numbers, you can just initialize it to the first number
for (i=0; i<count; i ++) // and once u make big=
a[0], you really can start i at 1
if (a [i] > big)
big= a [i];
return big;
- 11/5/07
- Exam- write program to generate output and find the output of a
written program
- arrays, functions
- look at assignment he gave us in the book
- ex. write a function that will computer the sum of the
array-- pass 2 things to a function
- range- dif between largest and smallest
- third method is end of file
- you just reach the end of the file and then stop
- go to the return
- (we're not going to do this now)
- a warehouse that receives goods and ships goods, so u want it to
manipulate the right part of the element-- ex. he wants 50 units
of item number 4 or add 100 to item number 3
- each transaction needs 3 pieces of info- if it's ship or receive
(1 or 2), which item number (0-6), and how much (quantity)
- one transaction might look like 1 4 100 (ship 100 units of item
4)
int inv[7];
int trtype, item, qty; // first u need to read in
trtype from the data
infile >> trtype >> item >> qty;
while (trtype!=-1){
// process next transaction
if (trtype=2) // receipt
inv [item] += qty;
else if (qty > inv [item] ) // shipment- you have to
deal w neg amounts, 3 options, here we dont want our
inventory to go negative, so if u get order of more
than u have, just disregard
cout << "insufficient stock of item " << item << endl;
else inv [item] -=qty;
infile >> trtype >> item >> qty;
}
- a paper trail aka a log
- it's messages that will say what the transaction did- ex.
shipped 400 units of item 5
- put a cout in the if
if (trtype=2){
inv [item] += qty;
cout << "received " << qty << " units of item " << item
<< endl;
}
- to calculate how many transactions were made, use a count -
ntrans=0 -- and every time u get into the while loop, do
ntrans++
- avg quantity shipped, totalshipped and nship (initialize both to
0) and in the else of shipping, nship ++, and totalshipped+=qty;
and then totalshipped/ nship -- keep in mind to watch out for
zeros
- you need a -1 for all 3 variables to be ur trailer because it is
going to take in 3 pieces of data so need the first to be -1 for
the trailer, and then just 2 random numbers for it to take in data
- you can get around this by just reading in trtype at the end and
then only if they're a 1 or 2, and then enter the while loop,
then read in item and qty
- Searching- you have an array and you want to know if it's there
yet, and where it is
- array a [10] and numbers in each column, u want to know if
there's a 50 in the array
- we need 3 pieces of data- the array, how many elements in the
range, what are u looking for (for function 'search')
int search (int a [], int nelts (how many elements u're
using in the array), int val)
for (i=0; i <nelts, i++){
if (a [i] == val)
return 1;
return 0; // u CANT put an else, because then
it'll return 0 before checking the rest of the numbers,
the return 0 is outside the for loop - if u've gone
around the whole loop and dont find val, then you leave
the loop and return 0 -- u cant say no unless u've
checked all of them
}
- next example:
int a [100]
for (i=0; i<=99; i ++)
cin >> a [i] // reads data into all the part
of the array, we want to know if 1000 is in the
array
p= search (a, 100, 1000); // p will equal 1 or 0
and u also dont need to put brackets here
if (p==1) // dont
forget the double =
cout << "1000 is present" << endl;
else cout << "1000 is not present" << endl;
- to know where it is:
return i; ( in the function)
and then outside the loop, cant put return 0
so that has to change too-- return -1 (or something that
isnt a legal array element)
and in main:
if (p>=0) // it's not -1 (the other return)
cout << "1000 is present in position " << p << endl;
else << "1000 is not present" << endl;