Saturday, April 6, 2013

Concepts of Programming Languages 10th Edition : Chapter 7


Created By : Robert W. Sebesta
Lecturer : Mr. Tri Djoko Wahjono, Ir. M.Sc
Answered by : Shirley Halim Ng
NIM : 1601233805
Class : 02PCT

 Review questions

 2.    What is a ternary operator?
        => A ternary operator is an operator with three operands.

 3.    What is a prefix operator?
          => A prefix operator is an operator that precede their operands

 9.    What is a coercion?
        => A coercion is the implicit type convertion.

10. What is a conditional expression?
        => Conditional expression is a statement that uses if-then-else statements.

11. What is an overloaded operator?
        => An overloaded operator is the multiple uses of an operator.

15. What is referential transparency?
        => Referential transparency is two expressions in the program that have the same value can be substituted for one another anywhere in the program without affecting the action of the program.

28. What is a cast?
        => A cast is an operator to convert a data type into another data types.


Problem Set

 3.    Do you think the elimination of overloaded operators in your favorite language would be beneficial? Why or why not?
=> I think it is not beneficial because it can be ambigious if we want to use that operator with the same type.


5.    Should C’s assigning operations (for example, +=) be included in other languages (that do not already have them)? Why or why not?
=> Yes, because we can make the operator simpler than before. We can just write a+=b instead a=a+b.

20.  Consider the following C program:
             int fun(int *i) {
                    *i += 5;
                      return 4;
              }
             void main() {
                      int x = 3;
                      x = x + fun(&x);
               }

What is the value of x after the assignment statement in main, assuming
a. operands are evaluated left to right.
b. operands are evaluated right to left.

=> a. 12
     b. 7

21. Why does Java specify that operands in expressions are all evaluated in left-to-right order?
=> Java specify that operands in expressions are all evaluated in left-to-right order because Java is an associative language because associative in common language is evaluated from left to right.


Concepts of Programming Languages 10th Edition : Chapter 6


Created By : Robert W. Sebesta
Lecturer : Mr. Tri Djoko Wahjono, Ir. M.Sc
Answered by : Shirley Halim Ng
NIM : 1601233805
Class : 02PCT


Review Questions
1. What is a descriptor?
=> descriptor is the collection of the attributes of a variable. In an implementation, a descriptor is an area of memory that stores the attributes of a variable.

2. What are the advantages and disadvantages of decimal data types?
=> Decimal types have the advantage of being able to precisely store decimal values, at least those within a restricted range, which cannot be done with floating-point. The disadvantages of decimal types are that the range of values is restricted because no exponents are allowed, and their representation in memory is mildly wasteful, for reasons discussed in the following paragraph.

5.    Define ordinal, enumeration, and subrange types.
=>           - An ordinal type is one in which the range of possible values can be easily associated with the set of positive integers.
                       - An enumeration type is one in which all of the possible values, which are named constants, are provided, or enumerated, in the definition.
                       - A subrange type is a contiguous subsequence of an ordinal type.

 8.    What are the design issues for arrays?
=> The primary design issues specific to arrays are the following:
                    - What types are legal for subscripts?
                    - Are subscripting expressions in element references range checked?
                    - When are subscript ranges bound?
                    - When does array allocation take place?
                    - Are ragged or rectangular multidimensioned arrays allowed, or both?
                    - Can arrays be initialized when they have their storage allocated?
                    - What kinds of slices are allowed, if any?

12. What languages support negative subscripts?
=> Language that supports negative subscripts is Perl.

15. What is an aggregate constant?
=> Aggregate constant is the parenthesized lists of values in Fortran language.

17. Define row major order and column major order.
=> In Row major order is the elements of the array that have as their first subscript the lower bound value of that subscript are stored first, followed by the elements of the second value of the first subscript, and so forth. In column major order, the elements of an array that have as their last subscript the lower bound value of that subscript are stored first, followed by the elements of the second value of the last subscript, and so forth.

32. What are the design issues for unions?
=> The design issues for unions are:
                    - Should type checking be required? Note that any such type checking must be dynamic.
                    - Should unions be embedded in records?

35. What are the design issues for pointer types?
=> The design issues for pointer types are:
                   - What are the scope and lifetime of a pointer variable?
                 - What is the lifetime of a heap-dynamic variable (the value a pointer references)?
                 - Are pointers restricted as to the type of value to which they can point?
                 -  Are pointers used for dynamic storage management, indirect addressing, or both?
                 - Should the language support pointer types, reference types, or both?

43.  What is a compatible type?
=> compatible type is one that either is legal for the operator or is allowed under language rules to be implicitly converted by compiler-generated code (or the interpreter) to a legal type.

50. What is name type equivalence?
=> Name type equivalence means that two variables have equivalent types if they are defined either in the same declaration or in declarations that use the same type name.

51. What is structure type equivalence?
=> Structure type equivalence means that two variables have equivalent types if their types have identical structures.

52.  What is the primary advantage of name type equivalence?
=> The primary advantage of name type equivalence is easy to implement.

53. What is the primary disadvantage to structure type equivalence?
=> The primary disadvantage to structure type equivalence is difficult to implement.


Problem Set
2.    How are negative integers stored in memory?
=> A negative integer could be stored in sign-magnitude notation, in which the sign bit is set to indicate negative and the remainder of the bit string represents the absolute value of the number.

7.    Compare the pointer and reference type variable in C++.
=> C++ pointers can point at any variable, regardless of where it is allocated. A C++ reference type variable is a constant pointer that is always implicitly dereferenced.

8.    What are the differences between the reference type variable in C++ and those of Java?
=> C++ reference type variable is a constant, it must be initialized with the address of some variable in it definition, and after initialization a reference type variable can never be set to reference any other variable, besides Java reference variables can be assigned to refer to different class instances, they are not constants.

9.    C provides two derived data types both for name and structure type equivalence: struct and union. Make a study on when to use struct type variables and union type variables.
=>  With a union, we're only supposed to use one of the elements, because they're all stored at the same spot. This makes it useful when we want to store something that could be one of several types. A struct, on the other hand, has a separate memory location for each of its elements and they all can be used at once.

21. In what way is dynamic type checking better than static type checking?
=> Dynamic type checking better than static type checking is when we want to provide more programming flexibility.

Concepts of Programming Languages 10th Edition : Chapter 5


Created By : Robert W. Sebesta
Lecturer : Mr. Tri Djoko Wahjono, Ir. M.Sc
Answered by : Shirley Halim Ng
NIM : 1601233805
Class : 02PCT

Review questions
1. What are the design issues for names?
=> The design issues for names are :
               - Are names case sensitive?
               - Are the special words of the language reserved words or keywords?

4. What is an alias?
=> Alias is the variables of names that can be used to access the same memory location.

7.    Define binding and binding time.
=> binding is an association between an attribute and an entity, such as between variable and its type or value, or between an operation and a symbol. The time at which a binding takes place is called binding time.

 9.  Define static binding and dynamic binding.
=> A binding is static if it first occurs before run time begins and remains unchanged throughout program execution. If the binding first occurs during run time or can change in the course of program execution, it is called dynamic.

11. What are the advantages and disadvantages of dynamic type binding?
=> The advantages are:
       - Dynamic type binding allows any variable to be assigned a value of any type.
       - It provides more programming flexibility.
        The disadvantages are:
       -  It causes programs to be less reliable, because the error-detection capability of the compiler is diminished relative to a compiler for a language with static type bindings.
        - The cost of implementing dynamic attribute binding is considerable, particularly in execution time.

18. What is a block?
=> A block is a section of codes.


Problem Set
  1. Decide which of the following identifier names is valid in C language. Support your decision.
_Student
int
Student
123Student
Student123
=> The valid identifiers are: _Student, Student, and Student123. It’s because an identifier in C language has its own rule. There are:
             - An identifier can’t be started with number. The number is valid as long as it is not in the front of an identifier.
               - An identifier can’t include any data types.
               - An identifier can’t be started with symbol.
               - There are not allowed if the name of identifiers if same.

 4.  Why is the type declaration of a variable necessary? What is the value range of the int type variable in Java?
=> The type declaration of a variable is necessary because, in a program it documented information about its data, which provides clues about the program’s behavior. The value range of the int type variable in Java is 32 bits (4 bytes).

10. Consider the following C program:
void fun(void) {
int a, b, c; /* definition 1 */
. . .
while (. . .) {
int b, c, d; /*definition 2 */
. . . <-1 p="">
while (. . .) {
int c, d, e; /* definition 3 */
. . . <-2 p="">
}
. . . <-3 p="">
}
. . . <-4 p="">
}
For each of the four marked points in this function, list each visible variable, along with the number of the definition statement that defines it.
=>  - In 1 and 3 : the visible variables are a, b(both), c(both), and d from definition 1 and 2.
      - In 2: the visible variables are a, b(both), c(both), d(both), and e from definition 1, 2, and 3.
      - In 4: the visible variables are a, b, and c from the definition 1.