1 / 14

Palindromes revisited

Here's a simpler program for checking palindromes: int nums[100]; int i = 0, a; cin >> a; while(a > 0) { nums[i++] = a; cin >> a; } for(int j=0; j<i; j++) if(nums[j] != nums[i-1-j]) { cout << "no" << endl; return 0; } cout << "yes" << endl;.

Download Presentation

Palindromes revisited

An Image/Link below is provided (as is) to download presentation 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. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Here's a simpler program for checking palindromes: int nums[100]; int i = 0, a; cin >> a; while(a > 0) { nums[i++] = a; cin >> a; } for(int j=0; j<i; j++) if(nums[j] != nums[i-1-j]) { cout << "no" << endl; return 0; } cout << "yes" << endl; Palindromes revisited

  2. Instead of using numbers, let's use letters, or chars. Also, we will read in until the end of the user input, rather than reading in until a sentinel value. The expression: cin >> a; (where a is a char) will return a value equivalent to true if a character is read in and a value equivalent to false if nothing is read in. We can use that in a test. Text Palindromes

  3. char lets[100], a; int i = 0; while(cin >> a) lets[i++] = a; for(int j=0; j<i; j++) if(lets[j] != lets[i-1-j]) { cout << "no" << endl; return 0; } cout << "yes" << endl; To indicate the end of input, the user would type ^Z (in Windows) or ^D (in Unix). Palindrome Code

  4. Here's the problem: Let's read in characters, just like in the last program, but then print out a histogram showing the number of a's, b's, c's,, ... read in. For example, if the program read in the text: Another Example This is a test. This is only a test. In the event of an actual emergency, you would be told where to tune on your radio dial.

  5. Example (cont'd) a: ******* b: * c: ** d: **** e: ************ f: * g: * h: **** i: ****** j:

  6. We will need a counter for each letter, a – z. The counters should be initialized to 0. Every time a char is read in, if it is a letter (a-z, or A-Z), the appropriate counter should be incremented. This requires a read-to-end-of-input loop. Once everything is read in, print out the histogram. Example Code

  7. We need to convert the chars read in to be ints, since arrays are indexed by ints. This is easy to do in C++. Any arithmetic operation applied to a char automatically converts it to an int. The value of the char is given by the ASCII (American Standard Code for Information Interchange) code. For example, 'A' is 65, and 'a' is 97, but we don't need to know that. Converting chars to ints

  8. What we need to know is how to convert 'a' to 0, and 'b' to 1, and 'c' to 3, ... (and likewise 'A' to 0 and 'B' to 1, ...). The expression c – 'a' will automatically convert the value of c to its ASCII value, and also 'a' to its ASCII and subtract the two values. This does exactly what we want for lower case letters. c – 'A' works for upper case letters. Converting chars to ints (cont'd)

  9. Example Code int count[26]; char c; for(int i=0; i<26; i++) count[i] = 0; while(cin >> c) if('a' <= c && c <= 'z') count[c - 'a']++; else if('A' <= c && c <= 'Z') count[c - 'Z']++; for(int i=0; i<26; i++) { cout << (char)(i+'a') << ": "; printStars(count[i]); }

  10. Arrays must be declared to be a fixed size (in most compilers – in some, arrays which are local variables, can be declared with a variable) Usually named constants are used to denote the size: const int NUMCHARS = 26; int a[NUMCHARS]; Array always start at 0, not 1. Arrays may be initialized: int primes[4] = {2, 3, 5, 7}; More About Arrays

  11. Index variables (array elements) may be used as arguments in function calls. They may correspond to either call-by-value or call-by-reference parameters. If the indexed variable has a variable subscript, say a[i], the subscript is evaluated when the function is called, and that data object is used. Using Indexed Variables as Args.

  12. A whole array may be used an argument in a function call. Whole arrays are always call-by-reference parameters, even without writing the “&” in the parameter list. A parameter which is an array variable doesn't cause a data object to be created – it becomes another name of the array argument. No need to give the size of the array parameter. Using Whole Arrays as Arguments

  13. int foo(int x[], int size); int main(void) { int a[10], s = 10; // read in array a; foo(a,s); } Example

  14. Write a function, maxElement, that is passed an array of ints, a, and the number of elements in that array, size, and returns the maximum element of the array. Exercise

More Related