Extra Recitations - PowerPoint PPT Presentation

About This Presentation
Title:

Extra Recitations

Description:

... use clear() member function before you try to reopen an input file stream object. that you failed to open previously (for example due to wrong file name), or ... – PowerPoint PPT presentation

Number of Views:34
Avg rating:3.0/5.0
Slides: 19
Provided by: owen68
Category:

less

Transcript and Presenter's Notes

Title: Extra Recitations


1
Extra Recitations
  • Wednesday 1940-2230 FENS L055 (tomorrow!)
  • Friday 1340-1630  FENS L063
  • Friday   1740-2030  FENS L045
  • Friday 1940-2230  FENS G032

2
Announcements about HW6
  • You may need to use clear() member function
    before you try to reopen an input file stream
    object
  • that you failed to open previously (for example
    due to wrong file name), or
  • that you opened and processed but for some reason
    if the error flags are set (for example due to
    reaching the end of the file).
  • Possible reasons for run time errors in this
    homework
  • Attempting to read from a file that has not been
    opened yet
  • Attempting to write to a file that has not been
    opened yet
  • Range and index problems while trying to access
    characters of a string using find, substr and at
    member functions.

3
Announcements about HW6
  • Should we check if the output file is opened
    successfully or not?
  • Not required, but advised
  • There might be some cases that the output files
    are not opened successfully
  • If you check and the output file is not opened,
    then do not continue with the program.
  • What happens if the files are opened but the
    content is irrelevant?
  • What happens if the file names are entered in the
    wrong order?
  • What happens if both file names are the same?
  • All of these questions are reduced into the same
    main question should we make the content check
    for the files that are opened successfully?
  • NO. As mentioned in the HW document, the content
    of the files are assumed to be correct. What you
    have to do is only to check if the files are
    opened successfully or not and continue to read
    file names until opened. Once opened, we assume
    that the first file is the business database, and
    the second one is the distance database files.

4
structs (7.4)
  • Used as data aggregates for an entity
  • can be different types of data
  • e.g. for student
  • id, name, GPA, address, ...
  • Similar to classes, but everything is public
  • structs can have constructors
  • structs can have member functions
  • we will not deal with constructors and member
    functions for structs unless they are necessary
  • mostly we will use structs for combining data for
    an entity into a single structure

5
Structs
  • Example struct for student
  • First struct must be defined by giving it a name
    and its fields (data)
  • struct student // student is struct
    name
  • unsigned int id // fields of student
    struct
  • string name, lastname
  • double gpa
  • // dont forget at the
    end
  • Then variables of that type are declared and
    used.
  • dot operator is used to refer fields of a struct
    variable
  • student stu
  • stu.name "Ali"
  • cout ltlt stu.gpa
  • See structdemo.cpp (not in book)

6
What can and cant be done with structs
  • Structs can be passed to functions as parameters
  • use const-reference if not changing (using value
    parameter is syntactically OK, but not preferred
    due to performance reasons)
  • use reference parameter if changing
  • struct fields behave as variables/objects of
    field type
  • id is an integer
  • name is a string
  • You may read, write, use as operands in
    operations, etc.
  • However, processing the entire struct variable is
    restrictive
  • cannot read or write (using gtgt and ltlt) structs
    unless those operators are specially defined for
    that struct
  • cannot use operators between two structs unless
    those operators are specially defined for that
    struct
  • see 7.4.2 for operator definitions for structs,
    but not responsible
  • structs are useful mostly in vectors (arrays)

7
Vectors and Arrays
  • Arrays are collections of several elements of the
    same type
  • E.g. 100 integers, 20 strings, 125 students, 12
    dates, etc.
  • Single name is given to the entire array
  • But each element is accessed separately
  • Any element of an array can be accessed just as
    quickly as any other element (this is called
    random access but do not get confused with
    RandGen type of randomness)
  • In C/C there is a built-in array type
  • We will see it, but later
  • Vectors are a class-based version of arrays
  • First we will see vectors.

8
Vectors
  • Were using the class tvector
  • Copy tvector.h and tvector.cpp to your project
    folder
  • need include "tvector.h"
  • But do NOT add tvector.cpp to your project
  • It is already included within tvector.h
  • If you mistakenly add tvector.cpp to your
    project, then you get tons of errors.
  • tvector is a tapestry class that has the same
    functionality and based on the standard C class
    vector, but safer
  • Safe means programming errors are caught rather
    than ignored

9
Why do we need arrays/vectors?
  • Consider the following example (not in the book)
  • pick n random numbers between 0 and 6 and count
    total number of occurrences of all outcomes (0,
    1, 2, 3, 4, 5, 6)
  • n is an input
  • we need 7 counters
  • 7 declarations
  • 7 initializations
  • 7 conditions to increment after each occurrence
  • 7 cout statements to display the result
  • Fortunately, we have shorter way ARRAYS/VECTORS
  • We can use vectors to store counters for all
    possible outcomes of the random numbers under a
    single name
  • easier processing in loops
  • see next slide for the program

10
Example
  • Previous example using vectors - see randnums.cpp
  • int num
  • int k
  • RandGen random
  • tvectorltintgt randStats(7) // vector for
    counters
  • int n PromptRange("how many random
    numbers",1,20000)
  •  
  • for(k0 k lt 6 k) // initialize
    counters to zero
  • randStatsk 0
  •  
  • for(k0 k lt n k) // pick all random
    numbers
  • num random.RandInt(7) // between 0 and 6
  • randStatsnum randStatsnum 1 // and
    increment

11
Vector/Array basics
  • Vectors/Arrays are homogeneous
  • each item (sometimes called element) has the same
    type
  • that type must be specified at declaration
  • Items in a vector/array are numbered (e.g. 1st,
    3rd, or 105th)
  • those are called index or subscript
  • numbering starts with 0
  • we have to use the index value to refer an
    element in a vector/array
  • Example definition and use of vectors (array
    definition is a bit different)
  • tvectorltintgt ivals(10) // ivals can store 10
    ints
  • ivals0 3 // 0th element becomes
    3
  • tvectorltstringgt svals(20) // svals can store 20
    strings
  • svals4 "cs201" // 4th element
    contains "cs201"

12
Vector basics
  • Syntax of vector declaration
  • tvector is a class, its declaration is
    construction
  • 3 different methods
  • tvectorlttypegt variable_name
  • empty vector (will see later)
  • tvectorlttypegt variable_name (size_expression)
  • vector with size_expression elements in it
  • tvectorlttypegt variable_name (size_expression,
    init_value)
  • vector with all size_expression elements
    initialized to init_value

13
Vector basics
  • size_expression can be any expression of type
    integer (or cast into integer)
  • not necessarily a constant value (this is
    actually a very important flexibility as compared
    to built-in arrays)
  • examples
  • tvector ltintgt letters (int('Z')-int('A') 1)
  • creates a vector of 26 integer elements and name
    it letters
  • cin gtgt num
  • tvector ltdoublegt counters (num)
  • creates a vector of doubles total number of
    elements is input
  • Index value starts with 0 and ends with size-1
  • type is type of the vector elements
  • can be built-in types (int, double, ...) or user
    defined types or classes or structs (string and
    date are class examples student is struct
    example)
  • classes must have default constructors to be used
    in vector definition as element type

14
Defining tvector objects
  • Can specify elements in a vector, optionally an
    initial value
  • tvectorltintgt counts(300) //300 ints, values not
    initialized
  • tvectorltintgt nums(200, 0) // 200 ints, all
    zero
  • tvectorltdoublegt d(10, 3.14) // 10 doubles, all
    pi
  • tvectorltstringgt w(10, "cs") // 10 strings, all
    "cs"
  • tvectorltstringgt words(10) // 10 strings, all
    ""
  • If the vector type is a class, then this class
    must have a default constructor
  • Default constructor is the one without parameters
  • Cannot define tvectorltDicegt cubes(10) since Dice
    doesnt have default constructor
  • Vectors of classes are initialized with the
    default constructor
  • that is why all words are "" (empty string)
  • Vectors with built-in types are not initialized
    (unless explicitly initialized with the second
    argument of tvector definition)

15
Example tvector definitions
  • tvectorltintgt counter(9, 0)
  • each element is an integer(all initialized to 0)

0 0 0 0 0 0 0 0 0
tvectorltchargt letters(18) each element is a char
(not initialized yet)
9 10 11 12 13 14 15 16 17
tvectorltDategt holidays(6) each element is a date
object that contains todays date
holidays
17 12 2007
17 12 2007
17 12 2007
17 12 2007
17 12 2007
17 12 2007
0 1 2 3 4 5
16
How to reach a single vector/array element
  • specify the index value within square brackets
    after the vector/array name
  • var_name index_expr
  • the value of index expression must be between 0
    and (vector size 1)
  • Examples
  • tvectorltintgt nums(9)
  • nums5 102
  • nums0 nums52-1
  • numsnums5/20-3 55
  • nums10 5 // error

nums
203
55
102
17
Passing vectors to functions as parameters
  • Vectors can be passed as parameters to functions
  • Pass by reference (if function changes the
    vector)
  • void Count (tvectorltintgt counts)
  • Pass by const-reference (if no changes made).
  • void Print(const tvectorltintgt counts)
  • Passing by value makes a copy, requires time and
    space, so not preferred
  • IMPORTANT!!! Vector size cannot be given in
    parameter definition. Three solutions to this
    problem
  • the size may be passed as another parameter
  • the size may be fixed and known
  • tvector has a member function, size, to return
    the size of a vector

18
Example
  • Counting letters of a file
  • display number of occurrences of each letter at
    the end
  • counting is case insensitive
  • see letters.cpp (the one in book is a bit
    different)
Write a Comment
User Comments (0)
About PowerShow.com