\documentclass{article} \input{common} \renewcommand{\tt}[1]{\texttt{#1}} \newcommand{\kc}{$^*$} \renewcommand{\not}{$^\wedge$} \newcommand{\pc}{$^+$} \newcommand{\e}{$\epsilon$} \includeversion{version:soln} \begin{document} \begin{flushleft} Homework - Chapter 1 \\ CS 5300 %\\ \end{flushleft} \begin{enumerate} \item (6 points) What is the difference between a compiler and an interpreter? \begin{version:soln} \soln Put your solution here. \end{version:soln} \myspace \item (6 points) According to the book, what are the advantages of \begin{tightenumerate} \item a compiler over an interpreter? \item an interpreter over a compiler? \end{tightenumerate} \begin{version:soln} \soln \end{version:soln} \myspace \item (6 points) Discuss the portability across computers of compiled vs. interpreted programs. \begin{version:soln} \soln \end{version:soln} \myspace \item (6 points) Strictly speaking, Java is an interpreted language. Discuss how it has elements of being a compiled language. \begin{version:soln} \soln \end{version:soln} \myspace \item (6 points) The C compiler \textit{gcc} has an \tt{-S} option that will output assembly code before the assembler is run. Why might someone want to do this? Give at least two reasons. \begin{version:soln} \soln \end{version:soln} \myspace \item (6 points) If id2 has a value of 8 and id3 has a value of 12, after running the following code, what will be in registers R1 and R2? \begin{lstlisting} LDF R1, id2 LDF R2, id3 ADDF R1, R1, R2 \end{lstlisting} \begin{version:soln} \soln \end{version:soln} \myspace \item (6 points) The assembler will fail on this assembly code. Why? \begin{lstlisting} LDF R1, id2 LDF R2, id3 ADDF R1, id2, R2 \end{lstlisting} \begin{version:soln} \soln \end{version:soln} \myspace \item (6 points) If id5 is 2 and id7 is 9, what will be in id3 after running this code? \begin{lstlisting} LDF R1, id7 LDF R2, id5 ADDF R1, R1, R2 MULF R1, R2, #3.0 STF id3, R1 \end{lstlisting} \begin{version:soln} \soln \end{version:soln} \myspace \item (6 points) Which of the following terms apply to Javascript? Which apply to Python? \\ a)~imperative b)~declarative c)~von Neumann d)~object-oriented e)~third-generation f)~fourth-generation g)~scripting \begin{version:soln} \soln \end{version:soln} \myspace \item (5 points) C is not considered an object-oriented language, yet it has structs, which are kind of like objects. Why is it not object-oriented? \begin{version:soln} \soln \end{version:soln} \myspace \item (6 points) Give three examples of programs for which optimization that changes the behavior of the program would be very, very bad. \begin{version:soln} \soln \end{version:soln} \myspace \item (5 points) Give an example of a program for which optimization that changes the behavior of the program might not be so bad. \begin{version:soln} \soln \end{version:soln} \myspace \item (8 points) Given the following blocks in a C++ program, create a table like figure 1.11 in the textbook. \includegraphics[width=.4\textwidth]{blocks.pdf} \begin{tabular}{c|c} \toprule Declaration & Scope \\ \midrule \tt{int b = 1;} & \\ \tt{int a = 2;} & \\ \tt{int b = 2;} & \\ \tt{int b = 3;} & \\ \tt{int a = 4;} & \\ \tt{int b = 4;} & \\ \tt{int a = 5;} & \\ \bottomrule \end{tabular} \begin{version:soln} \soln \end{version:soln} \myspace %\newpage \item (8 points) For the following block-structured C code, indicate the values assigned to $w, x, y,$ and $z$. \begin{lstlisting}[language=C] int w, x, y, z; int i = 5; int j = 8; { int i = 4; j = 9; w = j - i; } x = j - i; { int j = 10; y = j - i; i = 3; } z = j - i; \end{lstlisting} \begin{version:soln} \soln \end{version:soln} \myspace \newpage \item (8 points) For the following block-structured C code, indicate the values assigned to $w, x, y,$ and $z$. \begin{lstlisting}[language=C] int w, x, y, z; int i = 2; int j = 5; { int i = 3; w = i + j; } x = i + j; { int j = 9; i = 7; y = i + j; { i = 6; } } z = i + j; \end{lstlisting} \begin{version:soln} \soln \end{version:soln} \myspace \item (6 points) What is printed by the following C code? \begin{lstlisting}[language=C] #define a (x+3) int x = 4; void b() { x = a-1; printf("%d,", x); } void c() { int x = 1; printf("%d\n", a); } void main() { b(); c(); } \end{lstlisting} \begin{version:soln} \soln \end{version:soln} \end{enumerate} \end{document}