Rabu, 26 Juni 2013

Chap 11 - Review Question and Problem Set - Concepts of Programming Languages, Sebesta

CONCEPTS OF
PROGRAMMING LANGUAGES
TENTH EDITION
Robert W. Sebesta
Chapter 11-Abstract Data Type and Encapsulation
Review Question

1. What are the two kinds of abstraction in programming languages?
Answer: The two kinds of abstraction in programming languages are process abstraction and data abstraction.

2. Define abstract data type.
Answer: Abstract data type is a data structure that include its data member and also member function that process its data.

6 . Explain how information hiding is provided in Ada package.
Answer: Data type representations can appear in the package specification but be hidden from clients by putting them in the private clause of the package. The abstract type itself is defined to be private in the public part of the package specification. Private types have built-in operations for assignment and comparison for equality and inequality.

10. What is the use of the Ada with clause ?
Answer: To make the names defined in external packages visible

15. What is the purpose of a C++ destructor?
Answer: Destructor in C++ can be used to print a value of some or all of the object's data members dan it can deallocate an object from a class.

16. What are the legal return types of a destructor?
Answer: there are no legal return from a destructor and constructor. It is like void function that has no return value.

20. What is the use of limited private types?
Answer: An alternative to private types is a more restricted form: limited private types. Nonpointer limited private types are described in the private section of a package specification, as are nonpointer private types. The only syntactic difference is that limited private types are declared to be limited private in the visible part of the package specification. The semantic difference is that objects of a type that is declared limited private have no built-in operations. Such a type is useful when the usual predefined operations of assignment and comparison are not meaningful or useful. For example, assignment and comparison are rarely used for stacks.

21. What are initializers in Objective-C?
Answer: The initializers in Objective-C are constructors.

22. What is the use of @private and @public directives?
Answer: The use is to specify the access levels of the instance variables in a class definition.

27. Where are all Java methods defined?
Answer: All Java methods are defined in a class.

37. What is the name of all Ruby constructors?
Answer: Constructors in Ruby are named initialize.

43. What is a C++ namespace, what is its purpose?
Answer: In general, a namespace is a container for a set of identifiers and allows the disambiguation of homonym identifiers residing in different namespaces. The purpose is to help programs manage the problem of global namespace.

Problem Set:

4. What are the advantages of the nonpointer concept in Java?
Answer:
Advantages:
-It reduce the chance of memory leak
-No nameless variable
Disadvantage:
-Not allowed to declare pointer variable
-Increase the complexity of task related to data structer like array, structure ect.

9. What happens if the constructor is absent in Java and C++?
Answer:
If there is no constructor in jave and C++ so the compiler will set a default constructor.

10. Which two conditions make data type “abstract”?
Answer:
• The representation of objects of the type is hidden from the program units that use the type, so the only direct operations possible on those objects are those provided in the type’s definition.
• The declarations of the type and the protocols of the operations on objects of the type, which provide the type’s interface, are contained in a single syntactic unit. The type’s interface does not depend on the representation of the objects or the implementation of the operations. Also, other program units are allowed to create variables of the defined type.

11. Why is the destructor of C# rarely used?
Answer: Although C# allows destructors to be defined, because it uses garbage collection for most of its heap objects, destructors are rarely used.

13. Compare and contrast the data abstraction of Java and C++.
Java support for abstract data types is similar to that of C++. There are, however, a few important differences. All objects are allocated from the heap and accessed through reference variables. Methods in Java must be defined completely in a class. A method body must appear with its corresponding method
header. Therefore, a Java abstract data type is both declared and defined in a single syntactic unit. A Java compiler can inline any method that is not overridden. Definitions are hidden from clients by declaring them to be private. Rather than having private and public clauses in its class definitions, in Java access modifiers can be attached to method and variable definitions. If an instance variable or method does not have an access modifier, it has package access.

Special thanks to Mr. Tri Djoko Wahjono, Ir., M.Sc.

Chap 10 - Review Question and Problem Set - Concepts of Programming Languages, Sebesta

CONCEPTS OF
PROGRAMMING LANGUAGES
TENTH EDITION
Robert W. Sebesta
Chapter 10-Implementing Subprogram

Review Question


1. What is the definition used in this chapter for “simple” subprograms ?
Answer: Simple subprograms are not nasted and all variables in it are static

2. Which of the caller of callee saves execution status information ?
Answer: Either can save the execution status

4. What is the task of a linker?
Answer: 
-find the files that contain the translated subprograms referenced in that program 
-load the files that contains translated subprograminto memory.
-set the target addresses of all calls to those subprograms in the main program to the entry addresses of those subprograms.

8. What kind of machines often use registers to pass parameters ?
Answer: RISC Machines

10. Define static chain, static_depth, nesting_depth,and chain_offset.
Answer: 
static chain : a chain of static links that connect certain activation record instances in the stack.
static_depth : integer associated with a static scope that indicates how deeply it is nested in the outermost scope.
nesting_depth : difference between static_depth of a subprogram containing reference to x and the static_depth of a subprogram containing the declaration of x.
chain_offset : number of links to the correct activation record instance

12. How are references to variables represented in the static-chain method ?
Answer: It is represented by static_depth.


17. Describe the shallow-access method of implementing dynamic scoping.
Answer: 
Shallow access is an alternative implementation method. The semantic of shallow and deep access are indentical.
In the shallow-access method, variables declared in subprograms are not stored in the activation records of those subprograms.


Problem Set

7. It is stated in this chapter that when nonlocal variables are accessed in a dynamic-scoped language using the dynamic chain, variable names must be stored in the activation records with the values. If this were actually done, every nonlocal access would require a sequence of costly string comparisons on names. Design an alternative to these string comparisons that would be faster.
Answer: 
One very simple alternative is to assign integer values to all variable names used in the program. Then the integer values could be used in the activation records, and the comparisons would be between integer values, which are much faster than string comparisons.

8. Pascal allows gotos with nonlocal targets. How could such statements be handled if static chains were used for nonlocal variable access?
Answer: 
Finding the correct activation record instance of a nonlocal variable using static links is relatively straightforward. When a reference is made to nonlocal variable, the activation record instance containing the variable can be found by searching the static chain until a static ancestor activation record instance is found that contains the variable.

9. The static-chain method could be expanded slightly by using two static links in each activation record instance where the second points to the static grandparent activation record instance. How would this approach affect the time required for subprogram linkage and nonlocal references?
Answer: 
The nesting of scopes is known at compile time, the compiler can determine not only that a reference is nonlocal but also the length of the static chain that must be followed to reach the activation records instance that contains the nonlocal object.

11. If a compiler uses the static chain approach to implementing blocks, which of the entries in the activation records for subprograms are needed in the activation records for blocks?
Answer: 
A static chain is a chain of static links that connect certain activation record instances in the stack. During the execution of a subprogram P, the static link of its activation record instance points to an activation record instance of P’s static parent program unit. That instance’s static link points in turn to P’s static grandparent program unit’s activation record instance, if there is one. So, the static chain connects all the static ancestors of an executing subprogram, in order of static parent first. This chain can obviously be used to implement the accesses to nonlocal variables in static-scoped languages.



Special thanks to Mr. Tri Djoko Wahjono, Ir., M.Sc.

Chap 9 - Review Question and Problem Set - Concepts of Programming Languages, Sebesta

CONCEPTS OF
PROGRAMMING LANGUAGES
TENTH EDITION
Robert W. Sebesta
Chapter 9-Subprogram

Review Question

1. What are the three general characteristics of subprograms?
Answer: Each subprogram has a single entry point, excluding co-routine.
The calling program is suspended during the execution of the called subprogram, which implies that there is only one subprogram in execution at any given time.
Control always returns to the caller when the subprogram execution terminates.

2. What does it mean for a subprogram to be active?
Answer: It means that after having been called, a subprogram has begun execution but has not yet completed that execution.

4. What are formal parameters? What are actual parameters?
Answer: The parameters in the subprogram header are called formal parameters.
Actual parameters are some names of the subprogram and a list of parameters to be bounded to the formal parameters of the subprogram when a subprogram call a statement

5. What languages allow a variable number of parameters ?
Answer: C,C++,Perl JavaScript, and Lua

6. What is a Ruby array formal parameter?
Answer: Ruby supports a complicated but highly flexible actual parameter configuration. The initial parameters are expressions, whose value objects are passed to the corresponding formal parameters. The initial parameters can be following by a list of key => value pairs, which are placed in an anonymous hash and a reference to that hash is passed to the next formal parameter. These are used as a substitute for keyword parameters, which Ruby does not support. The hash item can be followed by a single parameter preceded by an asterisk. This parameter is called the array formal parameter.

7. What is a parameter profile? What is a subprogram protocol?
Answer: Parameter profile is the number, order, and types of its formal parameters.
Subprogram protocol is its parameter profile plus, if it is a function, its return type. In languages in which subprograms have types, those types are defined by the subprogram’s protocol.

8. What are formal parameters? What are actual parameters?
Answer: Formal parameters are the parameters in the subprogram header.
Actual parameters are a list of parameters to be bound to the formal parameters of the subprogram which must be included with the name of the subprogram by the subprogram call statements.

10 . What are the differences between a function and a procedure ?
Answer:
- Functions return values while procedure does not .
- Procedure defines new statements, while function define new user-defined operators.

22. Which ristriction are called bounds?
Answer: Restriction in Java that specify the range of classes that can pass to the generic method as generic parameters.

24. What is an overloaded subprogram?
Answer: Overloaded subprogram is a subprogram that has the same name as another subprogram in the same referencing environment. Every version of an overloaded subprogram must have a unique protocol; that is, it must be different from the others in the number, order, or types of its parameters, and possibly in its return type if it is a function.

32. What exactly is a delegate?
Answer: A delegate is the power and flexibility of method pointers in C# increased by making them objects.

34. What is a closure?
Answer: Closure is a nested subprogram ant its referencing environment, which together  allow the subprogram to be called from anywhare in a program

37. In what way coroutine different from conventional subprogram?
Answer: coroutine control mechanism is often called symmetric unit control model, in the otherhand conventional subprogram have a master-slave relationship between a caller and a called subprogram.
coroutine can have multiple entry point which are controlled by the coroutine themselves.


problem set

1. What are arguments for and against a user program building additional definitions for existing operators, as can be done in Python and C++? Do you think such user-defined operator overloading is good or bad ? Support your answer.
Answer:
I think it is good. User program building addition definition can give an access for those who wants to make their own specific datatype and also their custom operator.
User define operator overloading is good I think, because the user can custom their own operator overloading as long as it does not make them confused.

3. Argue in support of the template functions of C++. How is it different from the template functions in other languages?
Answer: C++ templated classes are instantiated to become typed classes at compile time. For example, a templated Count class, can be created with the following declaration:
Count<int> doCount;


5.Consider the following program writen in C syntax:
void swap(int a, int b){
int temp;
temp = a;
a = b;
b = temp;
}
void main() {
int value = 1, list[5] = {2, 4, 6, 8, 10};
swap(value, list[0]);
swap(list[0], list [1]);
swap(value, list[value]);
}

For each of the following parameter-passing methods, what are all of the values of the variables value and list after each of the three calls to swap ?
a. Passed by Value
value =1 , list[5] = {2,4,6,8,10}
b. Passed by reference
value =6, list[5] ={4,1,2,8,10}
c. Passed by value-result
value =6, list[5] ={4,1,2,8,10}




7. Consider the following program written in C syntax:

void fun (int first, int second){
first += first;
second += second;
}
void main() {
int list [2] = {3,5};
fun(list[0], list[1]);
}
For each of the following parameter-passing methods, what are the values of the list array after execution?
Answer:
a. Passes by value : 3, 5
b. Passes by reference : 6, 10
c. Passes by value-result : 6, 10

8 . Argue against the Java design of not providing operator overloading
Answer: Arithmetic operators are often used for more than one purpose. For example, + usually is used to specify integer addition and floating-point addition. Some languages—Java, for example—also use it for string concatenation. This multiple use of an operator is called operator overloading and is generally thought to be acceptable, as long as neither readability nor reliability suffers.

 Special thanks to Mr. Tri Djoko Wahjono, Ir., M.Sc.

Chap 8 - Review Question and Problem Set - Concepts of Programming Languages, Sebesta

CONCEPTS OF
PROGRAMMING LANGUAGES
TENTH EDITION
Robert W. Sebesta
Chapter 8 - Statement-Level Control Structure

Review Question
1. What is the definition of control structure?
Answer: A control structure is a pack of control statement and collection of statements that control its execution.

2. What did Bohm and Jocopini prove about flowcharts?
Answer: Bohm and Jocopini could prove that all algorithms can be expressed by flowchart and alson can be coded in a programming language with only two control statement (choosing between two control and logically controlled iteration)

3. What is the definition of block?
Answer: Block is a squence of code or reserved word that is used by the programmer to give an istruction.

5. What are the design issues for selection structures?        

The design issues for selection structures are:
Answer:
- What is the form and type of the expression that controls the selection?
- How are the then and else clauses specified?
- How should the meaning of nested selectors be specified?


9. What are the design issues for multiple-selection statements?
Answer:
What is the form and type of the expression that controls the selection?
How are the selectable segments specified?
How are the case values specified?
How should unrepresented selector expression values be handled, if at all?
Is execution flow through the structure restricted to include just a single selectable segment?

14. What are the design issues for all iterative control statements?
Answer:
How is the iteration controlled?
Where should the control mechanism appear in the loop statement?

15. What are the design issues for counter-controlled loop statements?
Answer:
What are the type and scope of the loop variable?
Should it be legal for the loop variable or loop parameters to be changed in the loop, and if so, does the change affect loop control?
Should the loop parameters be evaluated only once, or once for every iteration?

20. What contemporary languages do not include a goto?
Answer:
Java language is the contemporary language that doesn’t include a goto.

21. What are the design issues for logically controlled loop statements?
Answer:
Should the control be pretest or post-test?
Should the logically controlled loop be a special form of a counting loop or a separate statement?

23. What are the design issues for user-located loop control mechanisms?
Answer:
Should the conditional mechanism be an integral part of the exit?
Should only one loop body be exited, or can enclosing loops also be exited?


Problem Set

1. What design issues should be considered for two-way selection statements?
Answer:
The design issues for two-way selectors can be summarized as follows:
• What is the form and type of the expression that controls the selection?
• How are the then and else clauses specified?
• How should the meaning of nested selectors be specified?

11. Explain the advantages and disadvantages of the Java switch statement, compared to C++’s switch statement.
Answer: Integral ( byte, short etc.), char and String data types can be used as an argument in Java's switch statement, in the other hand in C++ the argument can be int or char.

14. State one of the main legitimate needs for gotos.
Answer: To make a loop exit statement.

Special thanks to Mr. Tri Djoko Wahjono, Ir., M.Sc.

Senin, 08 April 2013

Chap 7 - Review Question and Problem Set - Concepts of Programming Languages, Sebesta


Chapter 7 Review Question and Problem Set

Review Question

3. What is prefix operator?
Answer:
prefix operator is an operator that precedes their operands.

5. What is nonassociative operator?
Answer:
 are operators that have no defined behavior when used in sequence in an expression.

8. Define functional side effect
Answer: functional side effect is a condition when the function changes either one of its parameters or global variable.

14. What is mixed –mode expression?
Answer:
 mixed-mode expression is the condition whether an operator can have operands of different types.

18. What is short-circuit evaluation?
Answer:
Short circuit evaluation is one in which the result is determined without evaluating all of the operands and/or operators.

20. How does C support relational and Boolean expression?
Answer:
C support relational and Boolean expression by using the sign of >, >=, <, <= and == to express the relational and uses the variable type of Boolean to assign true or false or can be represented as 1 for true and 0 for false.

28. What is cast?
Answer:
Cast is explicit type conversions in C-based language.

Problem Set

2. State your own arguments for and against allowing mixed-mode arithmetic expression
Answer:
Mixed mode arithmetic can be helpful when the statement is in a complex expression, so it will be faster to write in the mixed mode arithmetic expression, but in the other hand mixed mode arithmetic will be very confusing and could increase the change of error.

5. Should C’s assigning operations (for example, +=) be included in other language (that do not already have them)? Why or why not?
Answer:
Yes it should be added to other programming language that doesn’t have it yet because the assigning operation is really useful in “for” looping and in recursion. So the addition of assigning operation will increase the orthogonality of its language.

6. Should C’s single-operand assignment form (for example ++count) be included in other language (that do not already have them)? Why or why not?
Answer:
No it shouldn’t be added, because the use of assigning operation can be replaced the single-operand assignment so it doesn’t increase the complexity of its language
for example the use of  x++ can be replace with x+=1

7. Describe a situation in which the add operator in a programming language would not be commutative.
Answer:
When we use add operator to combined strings. Such as “makan”+”malam”= makanmalam and not equal to “malammakan” = “malam”+”makan”

8. Describe a situation in which the add operator in a programming language would not be associative.
Answer:
in the situasion when we add three number with different signed integer in java
-2,147,483,648 to 2,147,483,647 and 1 so it would be

(-2,147,483,648+2,147,483,647)+1 = -1+1 = 0
-2,147,483,648+(2,147,483,647+1) = -2,147,483,648 + (error)


13. Let the function fun be defined as:
int fun (int *k){
*k += 4;
return 3 * (*k) – 1;
}

suppose fun is used in a program as follows:

void main(){
int i = 10, j = 10, sum1, sum2;
sum1= (i / 2) + fun( &i );
sum2 = fun ( &j ) + (j / 2);
}

What are the values of sum1 and sum2

a. if the operands in the expressions are evaluated left to right?
sum1 is 46; sum2 is 48

b. if the operands in the expressions are evaluated right to left?
sum1 is 48; sum2 is 46

Special thanks to Mr. Tri Djoko Wahjono, Ir., M.Sc.

Chap 6 - Review Question and Problem Set - Concepts of Programming Languages, Sebesta



Chapter 6 Review Question and Problem Set
Review Question
1. What is descriptor?
Answer:
Descriptor is a collection of the attributes of a variable that space in a memory what stores the attribute

2.  What are the advantage and disadvantage of decimal data type?
Answer:
Advantages:
- More precise calculation
- increase the ability to show a portion
Disadvantages:
- The range of precision in a value is limited because no exponent is allowed
- Ambiguous sign of decimal (in some standard decimal represent with coma others with period)

4. Describe the three string length option
Answer:
 - Static length string
The length of the string is set when the string is created and it is always static.
-Limited dynamic length string
This kind allows string to have varying length up to a declared and fixed maximum set by the variable’s definition.
- Dynamic length string
This option allows string to have varying length with no maximum limit such as JavaScript.

8. What are the design issues for arrays?
Answer:
The design issues for array are:
• 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 multidimensional arrays allowed, or both?
• Can arrays be initialized when they have their storage allocated?
• What kinds of slices are allowed, if any?

10.  What happens when a nonexisted element of an array is referenced in Perl?
Answer:
A reference to nonexisted  element in Perl gives a result of undef but no error is reported.

13. What languages support array slices with stepsizes?
Answer:
Python, Perl and Ruby are the languages that support array slices with stepsize

17. Define row major order and column major order
Answer:
 Row major order is the way where 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.
Column major order is the way where the elements of an array that have as their last subscript the power bound value of that subscript are stored first, followed by the elements of the second value of the last subscript, and so forth.

21. What is the purpose of level numbers in COBOL record?
Answer:
The purpose of level numbers in COBOL record is to indicate their relative values of the hierarchal structure of the record.

22. Define fully qualified and elliptical reference to field in records.
Answer:
fully qualified all the intermediate names, from the largest enclosing record to the specific field, are named in the reference.
Elliptical reference is a method where enclosing record names can be omitted as long as the resulting reference is unambiguous.

24. Are the tuples of Python mutable?
Answer:
 the tuples of Python is inmmutable.

25. What is the purpose of an F# tuple pattern?
Answer:
The purpose of an F# tuple pattern is to make a multiple assignment by using the let statement

32. What are the design issues for unions?
Answer:
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?
Answer:
The design issues of 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?

44. Define type error.
Answer:
Type error is an application that checks errors from operand to an operand.

45. Define strongly typed.
Answer:
Strongly typed is a method when the type error are always detected.

Problem Set

1. What are the arguments for and agonists four signed integer sizes in Java?
Answer:  Java defined int as a 32-bit number in the other hand C have either 16 or 32 bits dipending in the implementation. Four byte signed integer in java provide a large range that is enough to hold the information you need. But beside that capability, compared with int in C that only takes 2 byte fot int, the 4 byte signed integer in java takes more memory. Java defined int as a 32-bit number in the other hand C have either 16 or 32 bits dipending in the implementation.

2. How are negative integers stored in memory?
Answer: negative integer stored in memory by turning the value into binary and makes the compliment of its binary.
For example : integer 1 in binary is 0001 to get -1 the computer uses the compliment so it will be 1110. The 1110 binary might be 14 or -1 depends on the data type.

7. Compare the pointer and reference type variable in C++
Answer: pointer can be used to point the memory location of a variable and it can also assign the values to the memory location. It is quite similar with reference but in reference, only the value that is passed not the memory location. For example
int main ()
{
  int a, b;
  int *pointer;

  pointer = &a;
  *pointer = 10;
  pointer = &b;
  *pointer = 20;
printf("a is:  %d\n", a);
printf("b is: %d", b);
  return 0;
}
The output will be 
a is: 10
b is: 20
the pointer assign the value of 10 the memory location of variable pointer and it is referenced to a so the output is 10.

8. What are the differences between the reference type variable of C++ and those of Java?
Answer: The differences between the reference type variable of C++ and those of Java are first in Java we can’t actually get to and manipulate the underlying value of a reference in Java but in C we can manipulate it. Second in java references are strictly controlled than in C. Third in Java reference will be implemented as pointers, but that is not required by the specification in the other hand C reference is not implemented as pointer.

19. Any type defined with typedef is type equivalent to its parent type.
How does the use of typedef differ in C and C++?
Answer
Typedef in C uses struct to do typedef, with the fortmat typedef struct name_of struct; Typedef in c++ we don’t need to uses the keyword typedef and it has a format typedef existing_type new_type_name


21. In what way dynamic checking is better than static type checking?
Answer: Dynamic checking occurs when type information is used at runtime. In the other hand static type checking means that type checking occurs at compile time. It is better to do dynamic checking because it will be more reliable and more relevant to the information that is used during the runtime


Special thanks to Mr. Tri Djoko Wahjono, Ir., M.Sc.

chap 5 review question and problem set concepts of programming language sebesta


Chapter 5 Review Question and Problem Set

Review Question

2. What is the potential danger of case sensitive names?
Answer:
The potential danger of case sensitive is the ambiguity between the user and the program. For example with case sensitive variable the name of variable “Angka” and “angka” has the different meaning for machine but the same meaning for user.

3. In what way are reserved words better than keyword?
Answer:
 Reserved words are better than keyword because reserved word cannot be used as the name and it can also be used to redefine keywords.

7. Define binding and binding time
Answer:
binding is association in a program it could be between variable and its type or operation and symbol. Binding time is the time that is taken to associate (binding).

9. Define static binding and dynamic binding.
Answer:
Static binding is binding that happen before run time and it still remains unchanged throughout program execution. Dynamic binding is binding that happen during the run time and it might change in the program execution.

16. What is referencing environment of a statement
Answer:
referencing environment of statement is the collections of all variable that are visible in the statement.

18. What is block?
Answer:
In programming block is a section where variable and statement are allocated.

Problem Set

1. Decide which of the following identifier names is valid in C language.
Support your decision.
_Student
int
Student
123Student
Student123
Answer:
the valid identifier names in C language are _Student, Student and Student123 because the valid identifier names in C should not be integer in beginning, reserved word (int, float, etc.) and it doesn’t contain space.

2. What is l-value? Write a statement in C language which gives the compile time error “l-value required”.
Answer: l
-value is an expression that refer to memory location.
int main()
{
    int arr[]={1,2,3};
    int i;
    for(i=0;i<3;i++)
    {
        printf("\n%d",*arr);
        arr++;
    }
    return 0;
}

4. Why is the type declaration of a variable necessary? What is the value range of the int type variable in Java?
Answer:
Declaration of a variable is necessary because it define the type of the variable that declared which make the variable unambiguous. The range value of int type variable in java is 2.147.483.648 to 2.147.483.647.

Special thanks to Mr. Tri Djoko Wahjono, Ir., M.Sc.