/*
* Author: B. Thom
* HW and problem #: Practice Midterm SOLUTIONS !
* Other Comments:
*/
class CS5App
{
public static void main(String[] args)
{
H.out.println("problem 1");
problem1();
H.out.println("problem 2");
problem2();
H.out.println("problem 3");
problem3();
H.out.println("problem 4");
problem4();
H.out.println("problem 5");
problem5();
}
//example midterm problem 1
public static void problem1()
{
String word1 = getWord();
String word2 = getWord();
printReverse(word2);
printReverse(word1);
}
//get string from user
public static String getWord()
{
H.out.println("enter a string, any string...");
String word = H.in.nextWord();
return word;
}
//print out chars in word string in reverse order
public static void printReverse(String word)
{
for(int i = word.length()-1; i >= 0; i--)
H.out.print(word.charAt(i));
H.out.println();
}
//example midterm problem 2
public static void problem2()
{
int sumSoFar = 0; //running sum
int numItems = 0; //number of items in running sum
int value;
while((value = getInt()) != -1)
{
//continue entering integers until the -1 quit
// loop value occurs
sumSoFar += value;
numItems++;
}
//calculate average, assuming average of 0 items is 0
double result = 0;
if(numItems > 0)
result = (double)sumSoFar / numItems;
H.out.println("There were " + numItems + " integers entered. ");
H.out.println("Their average is " + result);
}
//get next integer
public static int getInt()
{
H.out.print("Please type and integer (-1 to stop): ");
int value = H.in.nextInt();
return value;
}
//problems 3 and 4: the easiest way to report how these problems
//behave on specific input is to type in their code and see what
//they do. however, it is worthwhile to THINK about how a program
//your code works by reasoning about each step in your head
//BEFORE coding it since this is part of the top-down design
//process we have been emphasizing in CS5
//for example in problem 3:
//input: fcllqvfctc
//produces: hellothere
//because this code:
// 1) traverse forward two letters in the alphabet
// for characters < 'm'
// 2) traverse backwards two letters for subsequent
// characters > 'm'.
//key point: the character 'l' will remain unchanged
//because it is traversed +2 and then is subsequently
//traversed -2
//example midterm problem 3
public static void problem3()
{
H.out.println("Type a string at the prompt: ");
String s = H.in.nextWord();
H.out.println();
for(int i = 0; i < s.length(); ++i)
{
char c = mixedUpChar(s.charAt(i));
H.out.print(c);
}
H.out.println();
}
//enocde char c either two ahead or two behind unless
// its value is 'm' in which case it remains unchanged
public static char mixedUpChar(char c)
{
char result = c;
if (c <= 'm')
{
//for all letters before 'm' in alphabet, move forward 2
result = (char)(result+2);
}
if (result >= 'm')
{
//for all letters before 'm' in alphabet, move backward 2
result = (char)(result-2);
}
return result;
}
//for example in problem 4:
//input: disappearing
//produces: disappearing
// isappearing
// sappearing
// appearing
// ppearing
// .......
// ing
// ng
// g
//since this code traverses over and prints all characters in the
//input string, beginning with:
// - location 1 (char 'd'), proceeding to location 2 (char 'i'),
// ... up to location n (char 'g'), after which a carriage
// return is print
// - location 2 (char 'i'), proceeding to location 2 (char 's'),
// ... up to location n (char 'g'), after which a carriage
// return is print
// - ...
// - location n (char 'g'), after which a carriage return
// is print
//example midterm problem 4
public static void problem4()
{
H.out.print("Type a string at the prompt: ");
String s = H.in.nextWord();
H.out.println();
for(int i = 0; i < s.length(); ++i)
{
for(int j = i; j < s.length(); ++j)
{
H.out.print(s.charAt(j));
}
H.out.println();
}
//H.out.println("done");
}
//example midterm problem 5
public static void problem5()
{
//ten terms of the sequence 2 4 8 16 32 ...
int result = 1;
for(int i = 0; i < 10; i++)
{
result *= 2;
H.out.print(result + " ");
}
H.out.println();
//ten terms of above sequence, each term repeated
// i number of times
result = 1;
for(int i = 0; i < 10; i++)
{
result *= 2;
for(int j = 0; j <= i; j++)
{
H.out.print(result);
}
H.out.print(" ");
}
H.out.println();
}
}