\documentclass{article} \newcommand{\dir}{~/projects/latex} \input{\dir/include.tex} \load{recommended} \setup{Introduction to Programming} \begin{document} \startDocument \usetcolorboxes \printtoc{Aquamarine} \include{./parts/ebnf} \include{./parts/java} \section{Loop-Invariant} \begin{enumerate} \item Write down a table with the loop iteration number and what the state of each variable in the loop is \item Check what causes the loop to end (in \texttt{while}, it's the inverse of the condtion, in \texttt{for}, it is the same concept) \item Then, use that break condition (inverted) and establish an upper (or lower) bound for the variable involved. (e.g. \texttt{i < arr.length} in the loop condition turns into \texttt{i < 0 arr.length} in the loop invariant) \item Specify all condtions for all the variables known through the pre and post-conditions, as far as applicable \end{enumerate} Also, all other variables that are being changed need to be addressed in the invariant, ensuring that the statements resolve to boolean when executed (\texttt{==} and not \texttt{=} for comparison (because valid Java Syntax required)). For the pre- and postconditions, ensure to also address ALL variables in the loop, even if it seems unnecessary. \section{Mean things} EProg is sadly known for testing your knowledge of the edge cases. Here are some common pitfalls at the exams. The best way to prepare for the programming exam is to solve the programming exercises during the semester and solve a few of the old programming exams that are available. To prepare for the theory, solve as many of the old exams as you can, as they can be completed, including correction, in under one hour. \subsection{In EBNF} \begin{itemize} \item Unbalanced brackets \end{itemize} \subsection{Java} \begin{itemize} \item Non-private attributes that could be changed prior to execution \item Spaces in variable names \item Using reserved names as variable names \item Unbalanced brackets \end{itemize} \end{document}