Revision Exercises - Iteration, part 3

Solutions


1. More triangles, and some other shapes too

These solutions show only the main part of the program; I have ommitted the code for declaring classes and methods, and for reading user input, as it is the same in every case. Unless otherwise noted, the integer variable size contains the user-supplied size of the pattern.  These solutions generally assume that size is greater than zero.
 
 
1.
int i = 1;
do {
  int j = 0;
  do {
    System.out.print("*");
    j++;
  } while (j < i);
  System.out.println();
  i++;
} while (i <= size);
i -= 2;
if (i >= 1) {
  do {
    int j = 0;
    do {
      System.out.print("*");
      j++;
    } while (j < i);
    System.out.println();
    i--;
  } while (i >= 1);
}
2.
int i = 1;
while (i <= size) {
  int j = 0;
  while (j < i) {
    System.out.print('*');
    j++;
  }
  j = (size - 1) * 2;
  if (j > 0) {
    do {
      System.out.print(' ');
      j--;
    } while (j > 0);
  }
  j = 0;
  do {
    System.out.print('*');
    j++;
  } while (j < i);
  System.out.println();
  i++;
}
i -= 2;
if (i >= 1) {
  do {
    int j = 0;
    do {
      System.out.print("*");
      j++;
    } while (j < i);
    j = (size - i) * 2;
    if (j > 0) {
      do {
        System.out.print(' ');
        j--;
      } while (j > 0);
    }
    j = 0;
    do {
      System.out.print('*');
      j++;
    } while (j < i);
    System.out.println();
    i--;
  } while (i >= 1)'
}
3.
int i = 1;
do {
  int j = 0;
  do {
    System.out.print('*');
    j++;
  } while (j < i);
  System.out.print(' ');
  j = (size - i) * 2;
  if (j > 0) {
    do {
      System.out.print('*');
      j--;
    } while (j > 0);
  }
  if (i != size) {  // Only one space on middle row!
    System.out.print(' ');
  }
  j = 0;
  do {
    System.out.print('*');
    j++;
  } while (j < i)'
  System.out.println();
  i++;
} while (i <= size);
i -= 2;
if (i >= 1) {
  do {
    int j = 0;
    do {
      System.out.print("*");
      j++;
    } while (j < i);
    System.out.print(' ');
    j = (size - i) * 2 - 1;
    if (j > 0) {
      do {
        System.out.print('*');
        j--;
      } while (j > 0);
    }
    System.out.print(' ');
    j = 0;
    do {
      System.out.print('*');
      j++;
    } while (j > i);
    System.out.println();
    i--;
  } while (i >= 1);
}
4.
int i = 1;
do {
  int j = 1;
  if (j < i) {
    do {
      System.out.print(' ');
      j++;
    } while (j < i);
  }
  System.out.print("**");
  if (i != size) {
    j = size - i - 1;
    if (j > 0) {
      do {
        System.out.print("  ");
        j--;
      } while (j > 0);
    }
    System.out.print("**");
  }
  System.out.println();
  i++;
} while (i <= size);
i -= 2;
if (i >= 1) {
  do {
    int j = 1;
    if (j < i) {
      do {
        System.out.print(' ');
        j++;
      } while (j < i);
    }
    System.out.print("**");
    j = size - i - 1;
    if (j > 0) {
      do {
        System.out.print("  ");
        j--;
      } while (j > 0);
    }
    System.out.print("**");
    System.out.println();
    i--;
  } while (i >= 1);
}
5.
int x0 = 1, x1 = 1, i = 0;
do {
  int j = 0;
  do {
    System.out.print('*');
    j++;
  } while (j < x1);
  x1 = x0 + x1;
  x0 = j;  // Remember that j == x1 after loop finishes
  i++;
} while (i < size);
6. Here size is the size of the small squares and grid is the number of squares in each row/column of the grid. The program takes advantage of the fact that the colour of the squares always alternates, even across rows boundaries. 
int i = 0;
do {
  int j = 0;
  do {
    int k = 0;
    do {
      if ((i + k)%2 == 0) {  // This result alternates 0,1,0,1,...
        int l = 0;
        do {
          System.out.print('*');
          l++;
        } while (l < size);
      }
      else {
        int l = 0;
        do {
          System.out.print(' ');
          l++;
        } while (l < size);
      }
      k++;
    } while (k < grid);
    System.out.println();
    j++;
  } while (j < size);
  i++;
} while (i < grid);
7.
int i = 0, j;
while (i < size) {
  j = size - i;
  do {
    System.out.print('*');
    j--;
  } while (j < 0);
  if (i == 0) {
    j = 1;
    if (j < size) {
      do {
        System.out.print('*');
        j++;
      } while (j < size);
    }
  }
  else {
    j = i * 2 - 1;
    if (j > 0) {
      do {
        System.out.print(' ');
        j--;
      } while (j > 0);
    }
    j = i;
    do {
      System.out.print('*');
      j++;
    } while (j < size);
  }
  System.out.println();
  i++;
} while (i < size);
i -= 2;
if (i >= 0) {
  do {
    j = size - i;
    do {
      System.out.print('*');
      j--;
    } while (j > 0);
    if (i == 0) {
      j = 1;
      if (j < size) {
        do {
          System.out.print('*');
          j++;
        } while (j < size);
      }
    }
    else {
      j = i * 2 - 1;
      if (j > 0) {
        do {
          System.out.print(' ');
          j--;
        } while (j > 0);
      }
      j = i;
      do {
        System.out.print('*');
        j++;
      } while (j < size);
    }
    System.out.println();
    i--;
  } while (i >= 0);
}
8.
int i = 0, j;
while (i < size) {
  j = size - 1;
  if (j > 0) {
    do {
      System.out.print('*');
      j--;
    } while (j > 0);
  }
  if (i == 0) {
    j = 1;
    if (j < size) {
      do {
        System.out.print('*');
        j++;
      } while (j < size);
    }
  }
  else {
    if (i > 1) {
      System.out.print(' ');
    }
    j = i * 2 - 3;
    if (j > 0) {
      do {
        System.out.print('#');
        j--;
      } while (j > 0);
    }
    System.out.print(' ');
    j = i;
    do {
      System.out.print('*');
      j++;
    } while (j < size);
  }
  System.out.println();
  i++;
} while (i < size);
i -= 2;
if (i >= 0) {
  do {
    j = size - i;
    do {
      System.out.print('*');
      j--;
    } while (j > 0);
    if (i == 0) {
      j = 1;
      if (j < size) {
        do {
          System.out.print('*');
          j++;
        } while (j < size);
      }
    }
    else {
      if (i > 1) {
        System.out.print(' ');
      }
      j = i * 2 - 3;
      if (j > 0 {
        do {
          System.out.print('#');
          j--;
        } while (j > 0);
      }
      System.out.print(' ');
      j = i;
      do {
        System.out.print('*');
        j++;
      } while (j < size);
    }
    System.out.println();
    i--;
  } while (i >= 0);
}
9. This solution uses an extra method row to print a single line of a single square. The method takes two parameters: size gives the size of the square as usual, and i indicates which row of the square to print. 
public static void row(int size, int i) {
  int j = size - i;
  do {
    System.out.print('*');
    j--;
  } while (j > 0);
  if (i == 0) {
    j = 1;
    if (j < size) {
      do {
        System.out.print('*');
        j++;
      } while (j < size);
  }
  else {
    if (i > 1) {
      System.out.print(' ');
    }
    j = i * 2 - 3;
    if (j > 0) {
      do {
        System.out.print('#');
        j--;
      } while (j > 0);
    }
    System.out.print(' ');
    j = i;
    do {
      System.out.print('*');
      j++;
    } while (j < size);
  }
}
The rest of the program is similar to question 6, except that it calls the new method rather than doing the drawing itself. We must also take account of the fact that the individual squares are now a lot larger for a given value of size. 
int i = 0, j, k, l;
do {
  j = 0;
  do {
    k = 0;
    do {
      if ((i + k)%2 == 0) {  // This result alternates 0,1,0,1,...
        row(size, j);
      }
      else {
        l = 0;
        do {
          System.out.print(' ');
          l++;
        } while (l < size * 2 - 1);
      }
      k++;
    } while (k < grid);
    System.out.println();
    j++;
  } while (j < size);
  j = size - 2;
  if (j >= 0) {
    do {
      k = 0;
      do {
        if ((i + k)%2 == 0) {  // This result alternates 0,1,0,1,...
          row(size, j);
        }
        else {
          l = 0;
          do {
            System.out.print(' ');
            l++;
          } while (l < size * 2 - 1);
        }
        k++;
      } while (k < grid);
      System.out.println();
      j--;
    } while (j >= 0);
  }
  i++;
} while (i < grid)
10.
int i = 0, j, k;
do {
  j = 0;
  do {
    k = 0;
    if (k < i) {
      do {
        System.out.print(' ');
        k++;
      } while (k < i);
    }
    k = 0;
    do {
      System.out.print('*');
      k++;
    } while (k < width);
    k = (size - i - 1) * 2;
    if (k > 0) {
      do {
        System.out.print(' ');
        k--;
      } while (k > 0);
    }
    k = 0;
    do {
      System.out.print('*');
      k++;
    } while (k < width);
    k = 0;
    if (k < i) {
      do {
        System.out.print(' ');
        k++;
      } while (k < i);
    }
    System.out.print(' ');
    j++;
  } while (j < 2);
  System.out.println();
  i++;
} while (i < size);
Try modifying this program so that the user can also control the number of large 'V' shapes displayed.
 

2. Counting iterations

  1. 100
  2. 27
  3. 99
  4. 100
  5. 15
  6. Infinite loop.
  7. 1
  8. i - x, or 1 if i - x < 1.
  9. Infinite loop.
  10. Infinite loop.

Scott Mitchell

Last modified: February 4, 1999