Professional Documents
Culture Documents
Technicals
Technicals
(Solution: This is a
typical, can-you-program warm-up
question. Example 1 shows the iterative and recursive solutions. Notice that in
both solutions, I check the
input values and boundary conditions. Factorials of negative numbers are
undefined, and the factorial of
both 0 and 1 are 1. The functions in Example 1 handle these cases correctly, and
they initialize all variables.
(a) int iterative_factorial (int number) { int rval = 1; /* first check input values */ if
(number < 0)
{ /* we'll return -1 if there's an error */ return (-1); } for (int i = number; i > 1; i--)
{ rval = rval * i; }
return (rval); } (b) int recursive_factorial (int number) { if (number < 0) { /* we'll
return -1 if there's an
error */ return (-1); } else if ((number == 0) || (number == 1)) { return (1); } else
{ return recursive_factorial (number-1) * number; } })
3. You are presented with a linked list, which may have a "loop" in it. That is, an
element of the linked list may
incorrectly point to a previously encountered element, which can cause an infinite
loop when traversing the list.
Devise an algorithm to detect whether a loop exists in a linked list. How does your
answer change if you cannot
change the structure of the list elements? (Solution: One possible answer is to add
a flag to each element of
the list. You could then traverse the list, starting at the head and tagging each
element as you encounter it.
If you ever encountered an element that was already tagged, you would know that
you had already visited
it and that there existed a loop in the linked list. What if you are not allowed to
alter the structure of the
elements of the linked list? The following algorithm will find the loop: 1. Start
with two pointers ptr1 and ptr2. 2.
Set ptr1 and ptr2 to the head of the linked list. 3. Traverse the linked list with ptr1
moving twice as fast
as ptr2 (for every two elements that ptr1 advances within the list, advance ptr2 by
one element). 4. Stop
when ptr1 reaches the end of the list, or when ptr1 = ptr2. 5. If ptr1 and ptr2 are
ever equal, then there
must be a loop in the linked list. If the linked list has no loops, ptr1 should reach
the end of the linked list
ahead of ptr2.)
4. Given a Process A that collects user inputs through a GUI and passes input
parameters to Process B on another
machine which in turn records the data to a data base. As a system designer, what
considerations would you take
into account? What technologies would you employ? (Solution: Requirements
must include performance needs
with respect to latency and volume (e.g. throughput). Performance requirements
will drive the type of
technologies used for process-to-process communications, GUI interactions and
database access. Data base
optimization for read or write needs to be considered. Performance and throughput
requirements will drive
the architectural decisions the designer needs to make to decide on the split of
functionality between
Process A and Process B. The number of users and the number of expected
transactions per hour will also
drive the decision on how many instances of Process A will need to created and
whether multiple machines
will be employed to run the Process A.)
5. What is the difference between the HEAP and the STACK? Where in memory
are these located relative to the
executing program? (Solution: HEAP is used to store dynamically allocated
memory (malloc). STACK stores
static data (int, const). The STACK and HEAP are stored "below" the executing
program. The HEAP
"grows" toward the program executable while the STACK grows away from it.)
6. Describe the data structures of a double-linked list. How do you insert a record
between how others?
(Solution: A double-linked list structure contains one pointer to the previous
record in the list and a pointer
to the next record in the list plus the record data. Previous R; Data R; Next R; To
insert a record
(B) between two others (A and C): Previous.B = A; Next.B = C; Next.A = B;
Previous.C = B;)
7. What is the difference between a WHILE loop and FOR loop construct?
(Solution: The WHILE loop
continues until the condition is FALSE. The FOR loop is good for regular loops.)
9. Illustrate the use of * and & for pointers in C. (Solution: char c = 'a'; - contains a
single
character 'a' char* p = &c; - p holds the address of c char c2 = *p; - c2 is
equivalent to 'a')
10. Explain is TRY and CATCH exception handling in C++. Why is this type of
exception handling useful?
(Solution: The TRY block of code is subject to exception handling. The closing
CATCH identifies the
class of exception that is to be caught. Exceptions are rooted in the Exception
class. The catch clause
will catch every exception of the stated class, and any descendants of that class.
This type of exception
handling is useful for large programs comprised of multiple modules when an
exception occurs and the
reporting of errors cannot be resolved locally or handling errors detected
elsewhere.)
Ackermann's function
(algorithm)
Formal Definition:
8. How many points are there on the globe where by walking one mile
south,
one mile east and one mile north you reach the place where you
started.
10. What are the different ways to say, the value of x can be either a
0
or a 1. Apparently the if then else solution has a jump when
written
out in assembly.
if (x == 0)
y=0
else
y =x
13. In a X's and 0's game (i.e. TIC TAC TOE) if you write a program for
this give a gast way to generate the moves by the computer. I mean
this
should be the fasteset way possible. The answer is that you need
to store
all possible configurations of the board and the move that is
associated
with that. Then it boils down to just accessing the right element
and
getting the corresponding move for it. Do some analysis and do
some more
optimization in storage since otherwise it becomes infeasible to
get
the required storage in a DOS machine.
14. I was given two lines of assembly code which found the absolute
value
of a number stored in two's complement form. I had to recognize
what the
code was doing. Pretty simple if you know some assembly and some
fundaes
on number representation.
16. How would go about finding out where to find a book in a library.
(You
don't know how exactly the books are organized beforehand).
18. Tradeoff between time spent in testing a product and getting into
the
market first.
19. What to test for given that there isn't enough time to test
everything
you want to.
Now you are given an array of a characters (both ASCII and Kanji)
and,
an index into the array. The index points to the start of some
character.
Now you need to write a function to do a backspace (i.e. delete the
character before the given index).
23. Given two strings S1 and S2. Delete from S2 all those characters
which
occur in S1 also and finally create a clean S2 with the relevant
characters
deleted.
24. Assuming that locks are the only reason due to which deadlocks can
occur
in a system. What would be a foolproof method of avoiding
deadlocks in
the system.
28. Write a routine that prints out a 2-D array in spiral order!
etc..
40. GIven a sequence of characters. How will you convert the lower
case characters to upper case characters. ( Try using bit vector
- sol given in the C lib -> typec.h)
42. Given a linked list which is sorted. How will u insert in sorted
way.
44. Tell me the courses you liked and why did you like them.
49. Do you want to know any thing about the company.( Try to ask some
relevant and interesting question).
53. Give a good data structure for having n queues ( n not fixed) in a
finite memory segment. You can have some data-structure separate
for
each queue. Try to use at least 90% of the memory space.
58. Given a list of numbers ( fixed list) Now given any other list,
how can you efficiently find out if there is any element in the
second list that is an element of the first list (fixed list).
61. Print an integer using only putchar. Try doing it without using
extra
storage.
O P
|
|
O A
|
|
O B
|
|
O C
O P
|
|
O B
/ \
/ \
/ \
O ? O ?
71. Write an efficient C code for 'tr' program. 'tr' has two command
line arguments. They both are strings of same length. tr reads an
input file, replaces each character in the first string with the
corresponding character in the second string. eg. 'tr abc xyz'
replaces all 'a's by 'x's, 'b's by 'y's and so on.
a) have an array of length 26.
put 'x' in array element corr to 'a'
put 'y' in array element corr to 'b'
put 'z' in array element corr to 'c'
put 'd' in array element corr to 'd'
put 'e' in array element corr to 'e'
and so on.
the code
while (!eof)
{
c = getc();
putc(array[c - 'a']);
}
74. given a new disk, how do you determine which interleaving is the
best
a) give 1000 read operations with each kind of interleaving
determine the best interleaving from the statistics
75. draw the graph with performace on one axis and 'n' on another,
where
'n' in the 'n' in n-way disk interleaving. (a tricky question,
should
be answered carefully)
76. I was a c++ code and was asked to find out the bug in that. The bug
was that he declared an object locally in a function and tried to
return the pointer to that object. Since the object is local to
the
function, it no more exists after returning from the function. The
pointer, therefore, is invalid outside.
77. A real life problem - A square picture is cut into 16 sqaures and
they are shuffled. Write a program to rearrange the 16 squares to
get the original big square.