CS31: Introduction to Computer Science I

1 / 25

# CS31: Introduction to Computer Science I - PowerPoint PPT Presentation

CS31: Introduction to Computer Science I. Discussion 1A 5/14/2010 Sungwon Yang swyang@cs.ucla.edu www.cs.ucla.edu/~swyang. Quick Review. What did we learn last week? C-strings string type can be used only in c++ C-string is an array of characters

I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.

## PowerPoint Slideshow about 'CS31: Introduction to Computer Science I' - jalena

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.

- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript

### CS31: Introduction to Computer Science I

Discussion 1A

5/14/2010

Sungwon Yang

swyang@cs.ucla.edu

www.cs.ucla.edu/~swyang

Quick Review
• What did we learn last week?
• C-strings
• string type can be used only in c++
• C-string is an array of characters
• it must end with zero byte/null character : ‘\0’
• indicates the end of the string
• C-string input/output
• cout prints out characters until it meets null character
• need to specify the maximum length of the input string
• null character will be automatically inserted
• converting C-strings to C++ strings
• simple ‘=‘ operator works
• not vice versa
• C-string functions : #include <cstring>
• strlen(s)
• returns the length of s, not counting ‘\0’
• strcpy(t, s)
• copies the string s to t
• strcat(t, s)
• concatenate (append) s to the end of t
• strcmp(t, s)
• compare t and s
• return 0 if they are equal
• return something greater than 0 if t > s
• return something less than 0 if t < s
Pointers
• where are variables stored?
• how can computers know where they are??

001FFD08

10

int main ()

{

int a = 10;

double d = 5.5;

char c = ‘a’;

bool b = true;

}

002FDC68

5.5

002FF128

a

004DEF00

true

Pointers
• Variables are stored in memory locations
• The memory location of a variable is called the address of the variable
• The address specifies a place, not a value
• Pointer variables store the address!
pointers

int main ()

{

int a = 10;

int b = 100;

int* ptr1;

int *ptr2;

ptr1 = &a;

ptr2 = &b;

int sum = *ptr1 + *ptr2;

cout << ptr1 << " : " << ptr2 << endl;

cout << &ptr1 << " : " << &ptr2 << endl;

cout << a << " : " << b << endl;

cout << *ptr1 << " : " << *ptr2 << endl;

cout << sum << endl;

}

001AF73C : 001AF738

001AF744 : 001AF740

10 : 100

10 : 100

110

pointers
• multiple pointers can point to the same variable

int main ()

{

int* ptr1;

int *ptr2;

int a = 10;

ptr1 = &a;

ptr2 = ptr1;

cout << *ptr1 << endl;

cout << *ptr2 << endl;

}

10

10

quick questions
• what will be displayed?

int main ()

{

int a = 10;

int *ptr = &a;

int *p = ptr;

cout << a << endl;

cout << *&a << endl;

cout << *ptr << endl;

cout << *p << endl;

}

int main ()

{

int* ptr1;

int *ptr2;

int a = 10;

int b = 100;

ptr1 = &a;

ptr2 = &b;

a = *ptr2+2*a;

b = *&b*b;

cout << b+*ptr1 << endl;

}

10

10

10

10

10120

pointers and arrays
• The name of an array is a pointer to its first element(item)

int main ()

{

int arr[10] = {0,1,2,3,4,5,6,7,8,9};

cout << arr << endl;

cout << &arr[0] << endl;

}

22FE38DF

22FE38DF

array element access
• when an array is created, items are allocated in consecutive memory spaces
• if we know the beginning address, we know the locations of all the items.

int main ()

{

int i = 5;

int arr[10] = {10,1,2,3,4,5,6,7,8,9};

cout << *arr << endl;

cout << *(arr+ 1) << endl;

cout << *(arr + 2) << endl;

cout << *arr + 3 << endl;

cout << *arr + 4 << endl;

cout << *(arr + i) << endl;

cout << *arr+ i+1 << endl;

}

10

1

2

13

14

5

16

Pointers and functions
• Pointer is one type of variable
• Pointers can be function parameters
• Value pointer parameters
• Reference pointer parameters
• Pointers can be function return values
• Value returned is a pointer
value parameter
• passing pointer by value
• cannot change the address outside
• but, can change the values pointers point to

void func(int* arg1, int* arg2)

{

int* temp;

temp = arg1;

arg1 = arg2;

arg2 = temp;

cout << *arg1 <<" : "<< *arg2 << endl;

}

int main ()

{

int a = 10, b = 100;

int *ptr1 = &a, *ptr2 = &b;

func(ptr1, ptr2);

cout << *ptr1 <<" : "<< *ptr2 << endl;

}

void func(int* arg1, int* arg2)

{

*arg1 = 100;

*arg2 = 10;

cout << *arg1 <<" : "<< *arg2 << endl;

}

int main ()

{

int a = 10, b = 100;

int *ptr1 = &a, *ptr2 = &b;

func(ptr1, ptr2);

cout << *ptr1 <<" : "<< *ptr2 << endl;

}

100 : 10

10 : 100

100 : 10

100 : 10

reference parameter
• passing pointer by reference
• can change the address outside

void func(int* &arg1, int* &arg2)

{

int* temp;

temp = arg1;

arg1 = arg2;

arg2 = temp;

cout << *arg1 <<" : "<< *arg2 << endl;

}

int main ()

{

int a = 10, b = 100;

int *ptr1 = &a, *ptr2 = &b;

func(ptr1, ptr2);

cout << *ptr1 <<" : "<< *ptr2 << endl;

}

100 : 10

100 : 10

Project #5
• Plain Text File Reformatter
• reformats a plain text file into neatly arranged paragraphs with a particular maximum allowed line length
• int reformat(istream& inf, ostream& outf, intlineLength);
• an already-opened input source you will read from (probably a file the caller opened).
• an already-opened output destination you will write to (probably either cout or an output file the caller created)
• an int with the desired maximum line length
• return value
• 0 if is successful (i.e., neither of the following problems occurs)
• 1 if any input word portion is longer than the maximum line length
• 2 if the desired maximum line length is less than 1
definition of an word
• A word is a sequence of non-whitespace characters.
• The <cctype> function isspace tells you if a character is a whitespace character
• A word can be viewed as a sequence of one or more word portions
reformatting rules
• Fit as many word portions in an output line as you can without exceeding the line length. Output lines may well end up being different lengths, giving a "ragged-right" effect

It•always•does•seem•to•me•that•I•am doing•more•work•than•I•should•do.••It•is not•that•I•object•to•the•work,•mind•you; I•like•work:•it•fascinates•me.••I•can sit•and•look•at•it•for•hours.••I•love•to keep•it•by•me:•the•idea•of•getting•rid of•it•nearly•breaks•my•heart.

reformatting rules
• Words in an output line must normally be separated by one blank.
• if the last character of an output word is a period, question mark, or exclamation point, it must be separated from any following word on that output line by two blanks.
• The last word on an output line must not be followed by any blanks.
• The first word portion on an output line must not be preceded by any blanks.
• Blanks must not appear on an output line within any word.
• The last line of output must end with a newline, and there must be no output lines (not even empty ones) after the last word of the last paragraph.

It•always•does•seem•to•me•that•I•am doing•more•work•than•I•should•do.••It•is not•that•I•object•to•the•work,•mind•you; I•like•work:•it•fascinates•me.••I•can sit•and•look•at•it•for•hours.••I•love•to keep•it•by•me:•the•idea•of•getting•rid of•it•nearly•breaks•my•heart.

reformatting rules
• If a word portion is longer than the line length, as much as will fit must be on an output line by itself.
• The rest of that word portion must begin the next output line (and, of course, is subject to similar splitting if it's too long).
• If this situation ever occurs, your function continues reformatting, but it must eventually return 1 instead of 0 to its caller.
• Notice that this is the only situation where a word is allowed to be split across lines other than at a hyphen.

abcdefghij klmnopqrst uvwxyz

function returns 1

reformatting rules
• A paragraph break is indicated in the input by one or more consecutive lines that contain no words (i.e., are empty or contain only whitespace characters).
• The first word in the input following a paragraph break will be the first word of a new paragraph in the output.
• If a paragraph has already been output, the new paragraph must be separated from the one that precedes it by an empty line (i.e., a line with no characters other than the terminating newline). The very first output paragraph must not be preceded by an empty line

I•love•to•keep•it•by•me:•the•idea•of getting•rid•of•it•nearly•breaks•my heart.

You•cannot•give•me•too•much•work;•to accumulate•work•has•almost•become•a passion•with•me:

more rules
• Your reformat function and any functions you write that it calls directly or indirectly must not use any std::string objects. If you need to use a string, use a C string.
• Your function may assume that no input line will be 200 or more characters long.
• This project is doable without assuming any upper limit for the output line length (the third parameter of reformat) — rather than storing the parts of an output line in a C string to be written later, you instead write them as soon as you can. However, some people may not figure out how to do that, so we'll give you a choice. If the third parameter of reformat is greater than 500, your implementation of reformat must either:
• return 2 without writing any output
• reformat the text using the indicated line length, returning 0 or 1 as appropriate (i.e., your algorithm doesn't impose any upper limit on the output line length). Implementing this choice correctly is worth 5 bonus points.
File I/O
• #include <iostream> #include <fstream>
• ifstream
• input file stream type
• this object will be associated with a particular file
• ofstream
• output file stream type
• this object will be associated with a particular file
• Break down the function into two major tasks
• one fetches next word from the input text file
• identifies the next interest is a word, paragraph break, or the end of file
• if it is a word, get the word
• the other one writes the fetched word according to the defined format
• will it be the first word in a line?
• will it be the last word in a line?
• does it end with period/question mark/exclamation?
getting next word
• basically deliver a single word to the reformat function
• read single character in text file
• .get() function
• need code that skips redundant spaces
• isspace() function
• is this word preceded by a newline?
• is this word followed by a newline?
sample code

bool getWord(istream& inf, char outWord[], int& wordLen)

{

char c;

int index = 0;

do

{

if ( ! inf.get(c))

return false;

} while (isspace(c));

do

{

outWord[index] = c;

index++;

if ( ! inf.get(c))

break;

} while( ! isspace(c));

outWord[index] = '\0';

wordLen = index;

return true;

}

int main ()

{

ifstream inf("input.txt");

char word[200];

int wordLen;

while (getWord(inf, word, wordLen))

{

cout << word << " : ";

cout << wordLen << endl;

}

}

Hello everyone, my name is Sungwon Yang.

Nice to meet you!

Hello : 5

everyone, : 9

my : 2

name : 4

is : 2

Sungwon : 7

Yang. : 5

Nice : 4

to : 2

meet : 4

you! : 4

sample code
• it eliminates all spaces/newlines
• need to add some code that identifies line breaks

Hello everyone, my name is Sungwon Yang.

Nice to meet you!

Hello : 5

everyone, : 9

my : 2

name : 4

is : 2

Sungwon : 7

Yang. : 5

Nice : 4

to : 2

meet : 4

you! : 4

writing text in file
• it is very similar to cout object

int main ()

{

ofstream outText("result.txt");

char space = ' ';

char newline = '\n';

char word1[10] = "Hello,";

char word2[10] = "how";

char word3[10] = "are";

char word4[10] = "you?";

outText << word1 << newline;

outText << word2 << space << word3 << space << word4;

}

Hello,

how are you?